forked from KolibriOS/kolibrios
Compare commits
1 Commits
main
...
add-licens
Author | SHA1 | Date | |
---|---|---|---|
1e663f36c8 |
@@ -66,6 +66,17 @@ 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.
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
# KolibriOS
|
# KolibriOS
|
||||||
|
|
||||||
[](./COPYING.TXT)
|
[](./LICENSE)
|
||||||
[](https://git.kolibrios.org/KolibriOS/kolibrios/actions)
|
[](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.
|
||||||
|
@@ -49,6 +49,8 @@ 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"},
|
||||||
@@ -410,7 +412,6 @@ tup.append_table(img_files, {
|
|||||||
{"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/trunk/calc"},
|
||||||
{"CALCPLUS", VAR_PROGS .. "/other/calcplus/calcplus"},
|
|
||||||
{"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"},
|
{"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/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"},
|
||||||
@@ -428,7 +429,7 @@ tup.append_table(img_files, {
|
|||||||
{"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/trunk/launcher"},
|
||||||
{"LOADDRV", VAR_PROGS .. "/system/loaddrv/loaddrv"},
|
{"LOADDRV", VAR_PROGS .. "/system/loaddrv/loaddrv"},
|
||||||
{"MAGNIFY", VAR_PROGS .. "/system/magnify/magnify"},
|
{"MAGNIFY", VAR_PROGS .. "/demos/magnify/trunk/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/trunk/mousemul"},
|
||||||
{"MADMOUSE", VAR_PROGS .. "/other/madmouse/madmouse"},
|
{"MADMOUSE", VAR_PROGS .. "/other/madmouse/madmouse"},
|
||||||
@@ -604,7 +605,6 @@ 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,6 +628,7 @@ 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"}
|
||||||
|
@@ -29,6 +29,7 @@ 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
|
||||||
|
@@ -235,8 +235,8 @@ ico=58
|
|||||||
x=68
|
x=68
|
||||||
y=68
|
y=68
|
||||||
[21]
|
[21]
|
||||||
name=CALC+
|
name=CALC
|
||||||
path=CALCPLUS
|
path=CALC
|
||||||
param=
|
param=
|
||||||
ico=4
|
ico=4
|
||||||
x=204
|
x=204
|
||||||
|
@@ -92,7 +92,6 @@
|
|||||||
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
|
||||||
|
@@ -235,8 +235,8 @@ ico=58
|
|||||||
x=68
|
x=68
|
||||||
y=68
|
y=68
|
||||||
[21]
|
[21]
|
||||||
name=CALC+
|
name=CALC
|
||||||
path=CALCPLUS
|
path=CALC
|
||||||
param=
|
param=
|
||||||
ico=4
|
ico=4
|
||||||
x=204
|
x=204
|
||||||
|
@@ -96,7 +96,6 @@
|
|||||||
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
|
||||||
|
@@ -235,8 +235,8 @@ ico=58
|
|||||||
x=68
|
x=68
|
||||||
y=68
|
y=68
|
||||||
[21]
|
[21]
|
||||||
name=CALC+
|
name=CALC
|
||||||
path=CALCPLUS
|
path=CALC
|
||||||
param=
|
param=
|
||||||
ico=4
|
ico=4
|
||||||
x=204
|
x=204
|
||||||
|
@@ -80,7 +80,6 @@
|
|||||||
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
|
||||||
|
@@ -235,8 +235,8 @@ ico=58
|
|||||||
x=68
|
x=68
|
||||||
y=68
|
y=68
|
||||||
[21]
|
[21]
|
||||||
name=CALC+
|
name=CALC
|
||||||
path=CALCPLUS
|
path=CALC
|
||||||
param=
|
param=
|
||||||
ico=4
|
ico=4
|
||||||
x=204
|
x=204
|
||||||
|
@@ -79,7 +79,6 @@
|
|||||||
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
|
||||||
|
@@ -235,8 +235,8 @@ ico=58
|
|||||||
x=68
|
x=68
|
||||||
y=68
|
y=68
|
||||||
[21]
|
[21]
|
||||||
name=CALC+
|
name=CALC
|
||||||
path=CALCPLUS
|
path=CALC
|
||||||
param=
|
param=
|
||||||
ico=4
|
ico=4
|
||||||
x=204
|
x=204
|
||||||
|
@@ -90,7 +90,6 @@
|
|||||||
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
|
||||||
@@ -120,7 +119,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> |/kolibrios/utils/period
|
21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |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
|
||||||
|
@@ -284,7 +284,7 @@ MEM_AMOUNT = OS_BASE + 0x000FE8C
|
|||||||
SYS_SHUTDOWN = OS_BASE + 0x000FF00
|
SYS_SHUTDOWN = OS_BASE + 0x000FF00
|
||||||
|
|
||||||
|
|
||||||
TMP_STACK_TOP = 0x0096F00
|
TMP_STACK_TOP = 0x008CC00
|
||||||
|
|
||||||
sys_proc = OS_BASE + 0x008E000
|
sys_proc = OS_BASE + 0x008E000
|
||||||
|
|
||||||
|
@@ -175,7 +175,7 @@ iglobal
|
|||||||
dd sys_socket ; 75-reserved for new stack
|
dd sys_socket ; 75-reserved for new stack
|
||||||
dd sys_protocols ; 76-reserved for new stack
|
dd sys_protocols ; 76-reserved for new stack
|
||||||
dd sys_posix ; posix support
|
dd sys_posix ; posix support
|
||||||
dd syscall_qrcode ; 78-QR code
|
dd undefined_syscall ; 78-free
|
||||||
dd undefined_syscall ; 79-free
|
dd undefined_syscall ; 79-free
|
||||||
dd sys_fileSystemUnicode ; 80-File system interface for different encodings
|
dd sys_fileSystemUnicode ; 80-File system interface for different encodings
|
||||||
|
|
||||||
|
@@ -4430,8 +4430,6 @@ sys_apm:
|
|||||||
ret
|
ret
|
||||||
; -----------------------------------------
|
; -----------------------------------------
|
||||||
|
|
||||||
include 'qrcode.inc'
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
undefined_syscall: ; Undefined system call
|
undefined_syscall: ; Undefined system call
|
||||||
mov [esp + SYSCALL_STACK.eax], -1
|
mov [esp + SYSCALL_STACK.eax], -1
|
||||||
|
@@ -668,8 +668,6 @@ 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
|
||||||
@@ -698,24 +696,6 @@ 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
|
||||||
@@ -731,19 +711,16 @@ 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
|
||||||
|
|
||||||
;-----------------------------------------------------------------;
|
;-----------------------------------------------------------------;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -692,15 +692,6 @@ 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
|
||||||
//
|
//
|
||||||
@@ -757,7 +748,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)(const GLfloat *m) = (void (__stdcall*)(const GLfloat*))&"glMultMatrixf";
|
//void (__stdcall* glMultMatrixf)(...) = (void (__stdcall*)(...))&"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";
|
||||||
@@ -772,7 +763,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)(double depth) = (void (__stdcall*)(double))&"glClearDepth";
|
//void (__stdcall* glClearDepth)(...) = (void (__stdcall*)(...))&"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";
|
||||||
@@ -808,22 +799,18 @@ 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)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) = (void (__stdcall*)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble))&"glOrtho";
|
//void (__stdcall* glOrtho)(...) = (void (__stdcall*)(...))&"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)(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) = (void (__stdcall*)(GLdouble, GLdouble, GLdouble, GLdouble))&"gluPerspective";
|
//void (__stdcall* gluPerspective)(...) = (void (__stdcall*)(...))&"gluPerspective";
|
||||||
GLUquadricObj* (__stdcall* gluNewQuadric)() = (GLUquadricObj* (__stdcall*)())&"gluNewQuadric";
|
//void (__stdcall* gluNewQuadric)(...) = (void (__stdcall*)(...))&"gluNewQuadric";
|
||||||
void (__stdcall* gluDeleteQuadric)(GLUquadricObj *state) = (void (__stdcall*)(GLUquadricObj*))&"gluDeleteQuadric";
|
//void (__stdcall* gluDeleteQuadric)(...) = (void (__stdcall*)(...))&"gluDeleteQuadric";
|
||||||
void (__stdcall* gluQuadricDrawStyle)(GLUquadricObj *quadObject, GLenum drawStyle) = (void (__stdcall*)(GLUquadricObj*, GLenum))&"gluQuadricDrawStyle";
|
//void (__stdcall* gluQuadricDrawStyle)(...) = (void (__stdcall*)(...))&"gluQuadricDrawStyle";
|
||||||
void (__stdcall* gluQuadricOrientation)(GLUquadricObj *quadObject, GLenum orientation) = (void (__stdcall*)(GLUquadricObj*, GLenum))&"gluQuadricOrientation";
|
//void (__stdcall* gluQuadricOrientation)(...) = (void (__stdcall*)(...))&"gluQuadricOrientation";
|
||||||
void (__stdcall* gluQuadricTexture)(GLUquadricObj *quadObject, GLboolean textureCoords) = (void (__stdcall*)(GLUquadricObj*, GLboolean))&"gluQuadricTexture";
|
//void (__stdcall* gluQuadricTexture)(...) = (void (__stdcall*)(...))&"gluQuadricTexture";
|
||||||
void (__stdcall* gluCylinder)(GLUquadricObj *qobj,
|
//void (__stdcall* gluCylinder)(...) = (void (__stdcall*)(...))&"gluCylinder";
|
||||||
GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks) = (void (__stdcall*)(GLUquadricObj*, GLdouble, GLdouble, GLdouble, GLint, GLint))&"gluCylinder";
|
//void (__stdcall* gluSphere)(...) = (void (__stdcall*)(...))&"gluSphere";
|
||||||
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{
|
||||||
|
@@ -85,7 +85,6 @@ 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"
|
||||||
@@ -95,16 +94,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)+200);
|
canvas.Init(list.x, list.y, list.w, math.max(list.visible, list.count));
|
||||||
canvas.Fill(0, bg_colors.get(0));
|
canvas.Fill(0, bg_colors.get(0));
|
||||||
}
|
}
|
||||||
bg_colors.drop();
|
bg_colors.drop();
|
||||||
@@ -115,6 +114,7 @@ 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")) {
|
||||||
|
@@ -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+1, list.font_type, pc, _line, NULL);
|
canvas.WriteText(draw_x, 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.b) canvas.WriteText(draw_x+1, draw_y, 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, draw_y + list.font_h, pw, zoom, pc);
|
if (style.u) canvas.DrawBar(draw_x, list.item_h - zoom - zoom + draw_y, 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.font_h, pw, zoom, link_color_default);
|
canvas.DrawBar(draw_x, draw_y + list.item_h - calc(zoom*2)-1, pw, zoom, link_color_default);
|
||||||
links.add_text(draw_x, draw_y + list.y, pw, list.font_h, zoom);
|
links.add_text(draw_x, draw_y + list.y, pw, list.item_h - calc(zoom*2)-1, zoom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_SKIP_DRAW:
|
_SKIP_DRAW:
|
||||||
|
@@ -208,20 +208,9 @@ void TWebBrowser::tag_li()
|
|||||||
void TWebBrowser::tag_hr()
|
void TWebBrowser::tag_hr()
|
||||||
{
|
{
|
||||||
dword hrcol = 0x00777777;
|
dword hrcol = 0x00777777;
|
||||||
dword hr_width = draw_w-BODY_MARGIN-BODY_MARGIN;
|
if (tag.get_value_of("color")) hrcol = GetColor(tag.value);
|
||||||
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(left_gap, style.cur_line_h / 2 + draw_y - 1, hr_width, hr_size, hrcol);
|
if (secondrun) canvas.DrawBar(5+left_gap, style.cur_line_h / 2 + draw_y - 1, draw_w-10, 1, hrcol);
|
||||||
draw_y += hr_size - 3;
|
|
||||||
draw_x++;
|
draw_x++;
|
||||||
NewLine();
|
NewLine();
|
||||||
return;
|
return;
|
||||||
@@ -246,12 +235,6 @@ 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') {
|
||||||
@@ -267,18 +250,19 @@ void TWebBrowser::tag_h1234_caption()
|
|||||||
NewLine();
|
NewLine();
|
||||||
}
|
}
|
||||||
if (tag.is("h1")) {
|
if (tag.is("h1")) {
|
||||||
list.SetFont(BASIC_CHAR_W*2, 14+13, 10011001b);
|
list.SetFont(BASIC_CHAR_W*2, 14+14, 10011001b);
|
||||||
style.b = true;
|
style.b = true;
|
||||||
} else if (tag.is("h2")) {
|
} else if (tag.is("h2")) {
|
||||||
list.SetFont(BASIC_CHAR_W*2, 14+13, 10011001b);
|
list.SetFont(BASIC_CHAR_W*2, 14+14, 10011001b);
|
||||||
} else {
|
} else {
|
||||||
list.SetFont(6*2, 9+8, 10001001b);
|
list.SetFont(6*2, 9+7, 10001001b);
|
||||||
}
|
}
|
||||||
style.cur_line_h = list.item_h = list.font_h + 3;
|
style.cur_line_h = list.item_h = list.font_h + 2;
|
||||||
} else {
|
} else {
|
||||||
if (tag.is("h1")) style.b = false;
|
if (tag.is("h1")) style.b = false;
|
||||||
NewLine();
|
NewLine();
|
||||||
reset_font_style();
|
list.SetFont(BASIC_CHAR_W, 14, 10011000b);
|
||||||
|
style.cur_line_h = list.item_h = BASIC_LINE_H;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -286,16 +270,12 @@ 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 (tag.number < maxicon) {
|
|
||||||
if (draw_x + 18 > canvas.bufw) NewLine();
|
if (draw_x + 18 > canvas.bufw) NewLine();
|
||||||
canvas.DrawImage(draw_x, draw_y-1, 18, 18, 18*18*4*tag.number+shared_i18);
|
canvas.DrawImage(draw_x, draw_y-2, 18, 18, 18*18*4*tag.number+shared_i18);
|
||||||
draw_x += 22;
|
draw_x += 22;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -571,10 +571,10 @@ void OpenPage(dword _open_URL)
|
|||||||
//INTERNAL PAGE
|
//INTERNAL PAGE
|
||||||
history.add(#new_url);
|
history.add(#new_url);
|
||||||
WB1.custom_encoding = -1;
|
WB1.custom_encoding = -1;
|
||||||
if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home));
|
if (streq(#new_url, URL_SERVICE_HOMEPAGE)) LoadInternalPage(#buildin_page_home, sizeof(buildin_page_home)-1);
|
||||||
else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test));
|
else if (streq(#new_url, URL_SERVICE_TEST)) LoadInternalPage(#buildin_page_test, sizeof(buildin_page_test)-1);
|
||||||
else if (streq(#new_url, URL_SERVICE_HISTORY)) ShowHistory();
|
else if (streq(#new_url, URL_SERVICE_HISTORY)) ShowHistory();
|
||||||
else LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
|
else LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
|
||||||
|
|
||||||
} else if (!strncmp(#new_url,"http:",5)) || (!strncmp(#new_url,"https:",6)) {
|
} else if (!strncmp(#new_url,"http:",5)) || (!strncmp(#new_url,"https:",6)) {
|
||||||
//WEB PAGE
|
//WEB PAGE
|
||||||
@@ -589,7 +589,7 @@ void OpenPage(dword _open_URL)
|
|||||||
|
|
||||||
if (!http.transfer) {
|
if (!http.transfer) {
|
||||||
history.add(#new_url);
|
history.add(#new_url);
|
||||||
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
|
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//LOCAL PAGE
|
//LOCAL PAGE
|
||||||
@@ -712,7 +712,7 @@ void EventSubmitOmnibox()
|
|||||||
|
|
||||||
void LoadInternalPage(dword _bufdata, _in_bufsize){
|
void LoadInternalPage(dword _bufdata, _in_bufsize){
|
||||||
if (!_bufdata) || (!_in_bufsize) {
|
if (!_bufdata) || (!_in_bufsize) {
|
||||||
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error));
|
LoadInternalPage(#buildin_page_error, sizeof(buildin_page_error)-1);
|
||||||
} else {
|
} else {
|
||||||
WB1.list.first = 0; //scroll page to the top
|
WB1.list.first = 0; //scroll page to the top
|
||||||
DrawOmnibox();
|
DrawOmnibox();
|
||||||
|
@@ -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.91";
|
char version[]="WebView 3.85";
|
@@ -1,7 +1,7 @@
|
|||||||
#ifdef LANG_RUS
|
#ifdef LANG_RUS
|
||||||
#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>"
|
#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>"
|
||||||
#else
|
#else
|
||||||
#define HISTORY_HEADER "<html><title>History</title><body bgcolor=#fff><h3>Visited pages</h3><br>"
|
#define HISTORY_HEADER "<html><title>History</title><body><b>Visited pages</b><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, "<kosicon n=3><a href='");
|
strcat(history_pointer, "<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));
|
||||||
|
@@ -1,49 +1,17 @@
|
|||||||
<html><head><title>New tab</title></head>
|
<html>
|
||||||
<body bgcolor=#fff>
|
<head>
|
||||||
|
<title>Homepage</title>
|
||||||
|
</head>
|
||||||
|
<body><pre>Welcome to WebView a Text-Based Browser.
|
||||||
|
|
||||||
<table><tr><td width=20><td width=220><pre>
|
KolibriOS Bookmarks:
|
||||||
_____________________
|
1. <a href=//kolibrios.org>Homepage</a>
|
||||||
|# : : #|
|
2. <a href="//builds.kolibrios.org">Night-builds</a>
|
||||||
| : WebView : |
|
3. <a href="//ftp.kolibrios.org">FTP Server</a>
|
||||||
| : for : |
|
|
||||||
| : KolibriOS : |
|
|
||||||
| : : |
|
|
||||||
| :_______________: |
|
|
||||||
| ____________ |
|
|
||||||
| | __ | |
|
|
||||||
| || | | |
|
|
||||||
\_____||__|________|__|<font color=#DDD>lc</font>
|
|
||||||
|
|
||||||
<font bg=#F8F15B> web <font bg=#FF5A7E color=#fff> 1.0 <font bg=#47D018> compatable
|
<font bg=#F8F15B>By the way,</font>
|
||||||
<font bg=#3CE7FF> </font></font></font></font>
|
|
||||||
<td>
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<kosicon n=58><a href=//kolibrios.org>Homepage</a>
|
|
||||||
<kosicon n=50><a href="//builds.kolibrios.org">Night-builds</a>
|
|
||||||
<kosicon n=50><a href="//ftp.kolibrios.org">FTP Server</a>
|
|
||||||
<pre>
|
|
||||||
|
|
||||||
By the way,
|
|
||||||
<font color="#555555">• You can check for browser updates from the main menu.
|
<font color="#555555">• You can check for browser updates from the main menu.
|
||||||
• To run a web search, type a text in the adress box and press Ctrl+Enter.
|
• To run a web search, type a text in the adress box and press Ctrl+Enter.
|
||||||
• Pressing F6 moves a text cursor to the omnibox.
|
• Pressing F6 moves a text cursor to the omnibox.
|
||||||
• You can manually change the encoding of a page by clicking on a label in the bottom right corner.
|
• Click on a label in the bottom right corner to change the encoding of a page.
|
||||||
|
</font>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
~+
|
|
||||||
|
|
||||||
* +
|
|
||||||
' |
|
|
||||||
() .-.,="``"=. - o -
|
|
||||||
'=/_ \ |
|
|
||||||
* | '=._ |
|
|
||||||
\ `=./`, '
|
|
||||||
. '=.__.=' `=' *
|
|
||||||
+ +
|
|
||||||
O * ' .<font color=#DDD>jgs</font>
|
|
||||||
|
@@ -1,49 +1,15 @@
|
|||||||
<html><head><title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></title></head>
|
<html><head><meta charset="cp-866">
|
||||||
<body bgcolor=#fff>
|
<title><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>࠭<EFBFBD><E0A0AD><EFBFBD></title></head>
|
||||||
|
<body><pre><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<>⮢<EFBFBD><E2AEA2> <20><><EFBFBD>㧥<EFBFBD> WebView!
|
||||||
|
|
||||||
<table><tr><td width=20><td width=220><pre>
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> KolibriOS:<ol>
|
||||||
_____________________
|
<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>
|
||||||
| : WebView : |
|
<li><a href="//ftp.kolibrios.org">FTP <20><>ࢥ<EFBFBD></a></ol>
|
||||||
| : for : |
|
|
||||||
| : KolibriOS : |
|
|
||||||
| : : |
|
|
||||||
| :_______________: |
|
|
||||||
| ____________ |
|
|
||||||
| | __ | |
|
|
||||||
| || | | |
|
|
||||||
\_____||__|________|__|<font color=#DDD>lc</font>
|
|
||||||
|
|
||||||
<font bg=#F8F15B> web <font bg=#FF5A7E color=#fff> 1.0 <font bg=#47D018> compatable
|
<font bg=#F8F15B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,</font>
|
||||||
<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>
|
|
||||||
<kosicon n=50><a href="//builds.kolibrios.org"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᡮન</a>
|
|
||||||
<kosicon n=50><a href="//ftp.kolibrios.org">FTP <20><>ࢥ<EFBFBD></a>
|
|
||||||
<pre>
|
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
|
||||||
<font color="#555555">• <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">• <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>
|
||||||
• <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
|
• <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
|
||||||
• <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>.
|
• <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>.
|
||||||
• <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>.
|
• <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>
|
|
@@ -5,19 +5,12 @@
|
|||||||
<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>Тест Acid 0.1</h1>
|
<h1 align=center>Это тестовая страница для проверки WebViewer</h1>
|
||||||
<br>
|
<br />
|
||||||
<b>Это тестовая страница для проверки текстового браузера <s>HTML Viewer</s> WebView</b>
|
<p>WebViewer является текстовым браузером и поддерживает все популярные кодировки (cp1251, koi-8, cp866, unicode)
|
||||||
|
и некоторые теги. Поддержка таблииц (<table>), CSS, Javascript'a и Контактика пока не реализована :)
|
||||||
<p>Из кодировок поддерживаются: CP866(DOS), CP1251(Windows), CP1252(Latin legacy), KOI8, и конечно UTF8. CSS и Javascript пока не реализованы (ахахаха). Поддержка тега <table> крайне базовая, поддержки вложенных таблиц нет.
|
|
||||||
</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>
|
||||||
@@ -40,8 +33,7 @@
|
|||||||
</b>
|
</b>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<table>
|
<p>
|
||||||
<td>
|
|
||||||
<bg bgcolor=#333>
|
<bg bgcolor=#333>
|
||||||
Небольшой список:<ol>
|
Небольшой список:<ol>
|
||||||
<li><q>Этот текст в кавычках</q></li>
|
<li><q>Этот текст в кавычках</q></li>
|
||||||
@@ -54,14 +46,17 @@
|
|||||||
</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>
|
||||||
@@ -70,25 +65,10 @@
|
|||||||
<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://kolibrios.org">http://kolibrios.org</a><br>
|
<a href="http://bash.im">http://bash.im</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>
|
|
||||||
|
|
||||||
В этом тексте есть переход на следующую строку, но браузер
|
В этом тексте есть переход на следующую строку, но браузер
|
||||||
его должен проигнорировать. Еще много пробелов. А тут есть
|
его должен проигнорировать. Еще много пробелов. А тут есть
|
||||||
@@ -100,19 +80,8 @@
|
|||||||
корпус на территории НТУ «ХПИ»
|
корпус на территории НТУ «ХПИ»
|
||||||
</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>Zhytomyr 2008-2025</center>
|
<center>Zhitomyr 2008-2015</center>
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
@@ -1,2 +0,0 @@
|
|||||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
|
||||||
tup.rule("flag.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "flag")
|
|
@@ -1,306 +0,0 @@
|
|||||||
; 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:
|
|
7
programs/demos/magnify/trunk/Tupfile.lua
Normal file
7
programs/demos/magnify/trunk/Tupfile.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||||
|
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
|
||||||
|
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||||
|
add_include(tup.getvariantdir())
|
||||||
|
|
||||||
|
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||||
|
tup.rule({"magnify.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "magnify")
|
6
programs/demos/magnify/trunk/build_en.bat
Normal file
6
programs/demos/magnify/trunk/build_en.bat
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
@erase lang.inc
|
||||||
|
@echo lang fix en_US >lang.inc
|
||||||
|
@fasm magnify.asm magnify
|
||||||
|
@kpack magnify
|
||||||
|
@erase lang.inc
|
||||||
|
@pause
|
6
programs/demos/magnify/trunk/build_ru.bat
Normal file
6
programs/demos/magnify/trunk/build_ru.bat
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
@erase lang.inc
|
||||||
|
@echo lang fix ru_RU >lang.inc
|
||||||
|
@fasm magnify.asm magnify
|
||||||
|
@kpack magnify
|
||||||
|
@erase lang.inc
|
||||||
|
@pause
|
156
programs/demos/magnify/trunk/magnify.asm
Normal file
156
programs/demos/magnify/trunk/magnify.asm
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
;---------------------------------------------------------------------
|
||||||
|
; 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.
@@ -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 (30-apr-2025)";
|
HEADER = "CEdit (27-feb-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", "e")
|
K.Run("/sys/docpack", "f")
|
||||||
|menuLineNumbers:
|
|menuLineNumbers:
|
||||||
T.toggleNumbers;
|
T.toggleNumbers;
|
||||||
Ini.setInt("settings", "line_numbers", ORD(T.lineNumbers))
|
Ini.setInt("settings", "line_numbers", ORD(T.lineNumbers))
|
||||||
|
@@ -1,4 +1,2 @@
|
|||||||
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")
|
tup.rule("charsets.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "charsets")
|
||||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
|
||||||
tup.rule("charsets.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "%B")
|
|
||||||
|
@@ -31,19 +31,3 @@ 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
@@ -1,12 +0,0 @@
|
|||||||
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+
|
|
@@ -12,7 +12,6 @@ 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'
|
||||||
@@ -236,7 +235,7 @@ start:
|
|||||||
call [gluNewQuadric]
|
call [gluNewQuadric]
|
||||||
mov [qObj],eax
|
mov [qObj],eax
|
||||||
|
|
||||||
mov eax,[ctx1.gl_context]
|
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
|
||||||
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
|
||||||
@@ -1083,7 +1082,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_tinygl
|
lib_5 l_libs lib_name_5, file_name, system_dir_5, import_lib_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:
|
||||||
|
|
||||||
@@ -1288,20 +1287,16 @@ dd 0,0
|
|||||||
akmenuitem_draw db 'kmenuitem_draw',0
|
akmenuitem_draw db 'kmenuitem_draw',0
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
import_tinygl:
|
import_lib_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'
|
||||||
|
|
||||||
@@ -1348,7 +1343,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,0x10400040, 5,35,195-16,250, 16,list_offs_text,0,\
|
16,16, 0xffffff,0xb0d0ff,0x400040, 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
|
||||||
@@ -1367,14 +1362,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> 04.05.25',0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
capt db 'info 3ds <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 29.09.20',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 04.05.25',0 ;window caption
|
capt db 'info 3ds version 29.09.20',0 ;window caption
|
||||||
end if
|
end if
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
i_end:
|
i_end:
|
||||||
ctx1 TinyGLContext
|
ctx1 rb 28 ;sizeof.TinyGLContext = 28
|
||||||
procinfo process_information
|
procinfo process_information
|
||||||
run_file_70 FileInfoBlock
|
run_file_70 FileInfoBlock
|
||||||
sc system_colors
|
sc system_colors
|
||||||
|
@@ -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,0x10400040, 5,47,195-16,250, 16,list_offs_text,0, el_focus,\
|
16,16, 0xffffff,0xb0d0ff,0x400040, 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> 14.04.25',0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
capt db 'info 3ds [user] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 29.09.20',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 14.04.25',0 ; Window caption
|
capt db 'info 3ds [user] version 29.09.20',0 ; Window caption
|
||||||
end if
|
end if
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
|
@@ -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 qword[sph_radius]
|
fstp dword[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,8 +812,9 @@ 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,1.4 ;correct for z
|
stdcall [glScalef], 1.0,1.0,0.7 ;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
|
||||||
@@ -975,10 +976,7 @@ 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]
|
||||||
push 8
|
stdcall [gluSphere], [qObj], [sph_radius], 8,8
|
||||||
push 8
|
|
||||||
glpush sph_radius
|
|
||||||
stdcall [gluSphere], [qObj]
|
|
||||||
call [glPopMatrix]
|
call [glPopMatrix]
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
@@ -999,10 +997,7 @@ 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]
|
||||||
push 4
|
stdcall [gluSphere], [qObj], [sph_radius], 4,4
|
||||||
push 4
|
|
||||||
glpush sph_radius
|
|
||||||
stdcall [gluSphere], [qObj]
|
|
||||||
call [glPopMatrix]
|
call [glPopMatrix]
|
||||||
dec ecx
|
dec ecx
|
||||||
jz .end_select
|
jz .end_select
|
||||||
@@ -1350,5 +1345,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 dq 0 ;radius of the sphere for selecting the active point
|
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>窨
|
||||||
|
|
||||||
|
@@ -951,12 +951,13 @@ endl
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc glClearDepth uses eax, depth:qword
|
proc glClearDepth uses eax, depth:dword
|
||||||
locals
|
locals
|
||||||
p rd 2
|
p rd 2
|
||||||
endl
|
endl
|
||||||
mov dword[p],OP_ClearDepth
|
mov dword[p],OP_ClearDepth
|
||||||
fld qword[depth]
|
mov eax,[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
|
||||||
|
@@ -23,7 +23,8 @@ 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]
|
||||||
lea ebx,[ebp-20] ;=sizeof(dd)*5
|
mov ebx,ebp
|
||||||
|
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]
|
||||||
@@ -47,7 +48,8 @@ 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)]
|
||||||
lea edi,[eax+GLContext.current_normal]
|
mov edi,eax
|
||||||
|
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
|
||||||
@@ -90,7 +92,8 @@ 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]
|
||||||
lea ebx,[ebp-20] ;=sizeof(dd)*5
|
mov ebx,ebp
|
||||||
|
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]
|
||||||
@@ -127,7 +130,8 @@ endl
|
|||||||
mov eax,[i]
|
mov eax,[i]
|
||||||
mov dword[p+4],eax
|
mov dword[p+4],eax
|
||||||
|
|
||||||
lea eax,[ebp-8] ;=sizeof(dd)*2
|
mov eax,ebp
|
||||||
|
sub eax,8 ;=sizeof(dd)*2
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@@ -135,9 +139,10 @@ 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 ?
|
||||||
a_size dd ?
|
size dd ?
|
||||||
p rd 8 ;функция glopColor требует 8 параметров, другие функции требуют меньше, берем по максимуму что-бы не портить стек
|
p rd 8 ;функция glopColor требует 8 параметров, другие функции требуют меньше, берем по максимуму что-бы не портить стек
|
||||||
endl
|
endl
|
||||||
pushad
|
pushad
|
||||||
@@ -150,19 +155,132 @@ 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
|
||||||
lea eax,[ebp-32] ;=sizeof(dd)*8
|
mov eax,ebp
|
||||||
|
sub eax,32 ;=sizeof(dd)*8
|
||||||
stdcall glopBegin, edx,eax
|
stdcall glopBegin, edx,eax
|
||||||
|
|
||||||
cmp ecx,1
|
mov dword[vi],0
|
||||||
jl @f
|
|
||||||
align 4
|
align 4
|
||||||
.cycle_0: ;for (int vi=0; vi<count; vi++)
|
.cycle_0: ;for (int vi=0; vi<count; vi++)
|
||||||
call CopyArrayElementByIndex
|
cmp dword[vi],ecx
|
||||||
inc dword[idx]
|
jge .cycle_0_end
|
||||||
loop .cycle_0
|
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[vi]
|
||||||
|
jmp .cycle_0
|
||||||
|
.cycle_0_end:
|
||||||
|
|
||||||
lea eax,[ebp-32] ;=sizeof(dd)*8
|
;mov eax,ebp
|
||||||
|
;sub eax,32 ;=sizeof(dd)*8
|
||||||
stdcall glopEnd, edx,eax
|
stdcall glopEnd, edx,eax
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
@@ -181,7 +299,8 @@ endl
|
|||||||
mov eax,[count]
|
mov eax,[count]
|
||||||
mov dword[p+12],eax
|
mov dword[p+12],eax
|
||||||
|
|
||||||
lea eax,[ebp-16] ;=sizeof(dd)*4
|
mov eax,ebp
|
||||||
|
sub eax,16 ;=sizeof(dd)*4
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@@ -189,12 +308,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 ?
|
||||||
a_size dd ?
|
type dd ?
|
||||||
|
size dd ?
|
||||||
|
indices dd ? ;указатель на 16 или 32 битные индексы
|
||||||
p rd 8
|
p rd 8
|
||||||
endl
|
endl
|
||||||
pushad
|
pushad
|
||||||
@@ -209,7 +328,8 @@ 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
|
||||||
lea eax,[ebp-32] ;=sizeof(dd)*8
|
mov eax,ebp
|
||||||
|
sub eax,32 ;=sizeof(dd)*8
|
||||||
stdcall glopBegin, edx,eax
|
stdcall glopBegin, edx,eax
|
||||||
|
|
||||||
mov dword[ii],0
|
mov dword[ii],0
|
||||||
@@ -231,33 +351,16 @@ align 4
|
|||||||
.end_0:
|
.end_0:
|
||||||
mov [idx],esi
|
mov [idx],esi
|
||||||
|
|
||||||
call CopyArrayElementByIndex
|
|
||||||
inc dword[ii]
|
|
||||||
jmp .cycle_0
|
|
||||||
.cycle_0_end:
|
|
||||||
|
|
||||||
lea eax,[ebp-32] ;=sizeof(dd)*8
|
|
||||||
stdcall glopEnd, edx,eax
|
|
||||||
popad
|
|
||||||
ret
|
|
||||||
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
|
bt dword[states],1 ;2^1=COLOR_ARRAY
|
||||||
jnc @f
|
jnc @f
|
||||||
mov esi,[edx+GLContext.color_array_size]
|
mov esi,[edx+GLContext.color_array_size]
|
||||||
mov [a_size],esi
|
mov [size],esi
|
||||||
add esi,[edx+GLContext.color_array_stride]
|
add esi,[edx+GLContext.color_array_stride]
|
||||||
imul esi,[idx] ;esi = i
|
imul esi,[idx] ;esi = i
|
||||||
shl esi,2
|
shl esi,2
|
||||||
add esi,[edx+GLContext.color_array] ;esi = &context.color_array[i]
|
add esi,[edx+GLContext.color_array] ;esi = &context.color_array[i]
|
||||||
lea edi,[ebp-28] ;edi = &p[1]
|
mov edi,ebp
|
||||||
|
sub edi,28 ;edi = &p[1]
|
||||||
mov ebx,[esi+8]
|
mov ebx,[esi+8]
|
||||||
mov [edi],ebx ;p[1].f = context.color_array[i+2]
|
mov [edi],ebx ;p[1].f = context.color_array[i+2]
|
||||||
mov ebx,[esi+4]
|
mov ebx,[esi+4]
|
||||||
@@ -265,7 +368,7 @@ CopyArrayElementByIndex:
|
|||||||
mov ebx,[esi]
|
mov ebx,[esi]
|
||||||
mov [edi+8],ebx ;p[3].f = context.color_array[i]
|
mov [edi+8],ebx ;p[3].f = context.color_array[i]
|
||||||
add edi,12
|
add edi,12
|
||||||
cmp dword[a_size],3
|
cmp dword[size],3
|
||||||
jle .e1
|
jle .e1
|
||||||
add esi,12
|
add esi,12
|
||||||
movsd
|
movsd
|
||||||
@@ -273,8 +376,10 @@ CopyArrayElementByIndex:
|
|||||||
.e1:
|
.e1:
|
||||||
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
|
mov dword[edi],1.0 ;если задано 3 параметра, то 4-й ставим по умолчанию 1.0
|
||||||
.e2:
|
.e2:
|
||||||
lea edi,[ebp-32] ;edi = &p[0]
|
mov edi,ebp
|
||||||
lea ebx,[ebp-12] ;ebp-12 = &p[5]
|
sub edi,32 ;edi = &p[0]
|
||||||
|
mov ebx,ebp
|
||||||
|
sub ebx,12 ;ebp-12 = &p[5]
|
||||||
push ebx
|
push ebx
|
||||||
add ebx,4 ;ebp-8 = &p[6]
|
add ebx,4 ;ebp-8 = &p[6]
|
||||||
push ebx
|
push ebx
|
||||||
@@ -289,8 +394,9 @@ CopyArrayElementByIndex:
|
|||||||
add esi,3
|
add esi,3
|
||||||
imul esi,[idx] ;esi = idx * (3 + context.normal_array_stride)
|
imul esi,[idx] ;esi = idx * (3 + context.normal_array_stride)
|
||||||
shl esi,2
|
shl esi,2
|
||||||
add esi,[edx+GLContext.normal_array] ;esi = &context.normal_array[ idx * (3 + context.normal_array_stride) ]
|
add esi,[edx+GLContext.normal_array]
|
||||||
lea edi,[edx+GLContext.current_normal]
|
mov edi,edx
|
||||||
|
add edi,GLContext.current_normal
|
||||||
movsd ;context.current_normal.X = context.normal_array[i]
|
movsd ;context.current_normal.X = context.normal_array[i]
|
||||||
movsd
|
movsd
|
||||||
movsd
|
movsd
|
||||||
@@ -299,15 +405,16 @@ CopyArrayElementByIndex:
|
|||||||
bt dword[states],3 ;2^3=TEXCOORD_ARRAY
|
bt dword[states],3 ;2^3=TEXCOORD_ARRAY
|
||||||
jnc @f
|
jnc @f
|
||||||
mov esi,[edx+GLContext.texcoord_array_size]
|
mov esi,[edx+GLContext.texcoord_array_size]
|
||||||
mov [a_size],esi
|
mov [size],esi
|
||||||
add esi,[edx+GLContext.texcoord_array_stride]
|
add esi,[edx+GLContext.texcoord_array_stride]
|
||||||
imul esi,[idx] ;esi = i
|
imul esi,[idx] ;esi = i
|
||||||
shl esi,2
|
shl esi,2
|
||||||
add esi,[edx+GLContext.texcoord_array] ;esi = &context.texcoord_array[i]
|
add esi,[edx+GLContext.texcoord_array] ;esi = &context.texcoord_array[i]
|
||||||
lea edi,[edx+GLContext.current_tex_coord]
|
mov edi,edx
|
||||||
|
add edi,GLContext.current_tex_coord
|
||||||
movsd ;context.current_tex_coord.X = ccontext.texcoord_array[i]
|
movsd ;context.current_tex_coord.X = ccontext.texcoord_array[i]
|
||||||
movsd
|
movsd
|
||||||
cmp dword[a_size],2
|
cmp dword[size],2
|
||||||
jle .e3
|
jle .e3
|
||||||
movsd
|
movsd
|
||||||
jmp .e4
|
jmp .e4
|
||||||
@@ -315,7 +422,7 @@ CopyArrayElementByIndex:
|
|||||||
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
|
mov dword[edi],0.0 ;если задано 2 параметра, то 3-й ставим по умолчанию 0.0
|
||||||
add edi,4
|
add edi,4
|
||||||
.e4:
|
.e4:
|
||||||
cmp dword[a_size],3
|
cmp dword[size],3
|
||||||
jle .e5
|
jle .e5
|
||||||
movsd
|
movsd
|
||||||
jmp @f
|
jmp @f
|
||||||
@@ -325,15 +432,16 @@ CopyArrayElementByIndex:
|
|||||||
bt dword[states],0 ;2^0=VERTEX_ARRAY
|
bt dword[states],0 ;2^0=VERTEX_ARRAY
|
||||||
jnc @f
|
jnc @f
|
||||||
mov esi,[edx+GLContext.vertex_array_size]
|
mov esi,[edx+GLContext.vertex_array_size]
|
||||||
mov [a_size],esi
|
mov [size],esi
|
||||||
add esi,[edx+GLContext.vertex_array_stride]
|
add esi,[edx+GLContext.vertex_array_stride]
|
||||||
imul esi,[idx] ;esi = i
|
imul esi,[idx] ;esi = i
|
||||||
shl esi,2
|
shl esi,2
|
||||||
add esi,[edx+GLContext.vertex_array] ;esi = &context.vertex_array[i]
|
add esi,[edx+GLContext.vertex_array] ;esi = &context.vertex_array[i]
|
||||||
lea edi,[ebp-28] ;edi = &p[1]
|
mov edi,ebp
|
||||||
|
sub edi,28 ;edi = &p[1]
|
||||||
movsd ;p[1].f = context.vertex_array[i]
|
movsd ;p[1].f = context.vertex_array[i]
|
||||||
movsd
|
movsd
|
||||||
cmp dword[a_size],2
|
cmp dword[size],2
|
||||||
jle .e6
|
jle .e6
|
||||||
movsd
|
movsd
|
||||||
jmp .e7
|
jmp .e7
|
||||||
@@ -342,7 +450,7 @@ CopyArrayElementByIndex:
|
|||||||
add edi,4
|
add edi,4
|
||||||
jmp .e8 ;и 4-й тоже ставим по умолчанию
|
jmp .e8 ;и 4-й тоже ставим по умолчанию
|
||||||
.e7:
|
.e7:
|
||||||
cmp dword[a_size],3
|
cmp dword[size],3
|
||||||
jle .e8
|
jle .e8
|
||||||
movsd
|
movsd
|
||||||
sub edi,20 ;edi=&p[0]
|
sub edi,20 ;edi=&p[0]
|
||||||
@@ -353,10 +461,16 @@ CopyArrayElementByIndex:
|
|||||||
.e9:
|
.e9:
|
||||||
stdcall glopVertex, edx,edi
|
stdcall glopVertex, edx,edi
|
||||||
@@:
|
@@:
|
||||||
|
inc dword[ii]
|
||||||
|
jmp .cycle_0
|
||||||
|
.cycle_0_end:
|
||||||
|
|
||||||
|
mov eax,ebp
|
||||||
|
sub eax,32 ;=sizeof(dd)*8
|
||||||
|
stdcall glopEnd, edx,eax
|
||||||
|
popad
|
||||||
ret
|
ret
|
||||||
purge idx
|
endp
|
||||||
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
|
||||||
@@ -374,7 +488,8 @@ endl
|
|||||||
mov eax,[indices]
|
mov eax,[indices]
|
||||||
mov dword[p+16],eax
|
mov dword[p+16],eax
|
||||||
|
|
||||||
lea eax,[ebp-20] ;=sizeof(dd)*5
|
mov eax,ebp
|
||||||
|
sub eax,20 ;=sizeof(dd)*5
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@@ -418,7 +533,8 @@ endl
|
|||||||
;assert(0);
|
;assert(0);
|
||||||
.end_f:
|
.end_f:
|
||||||
|
|
||||||
lea eax,[ebp-8] ;=sizeof(dd)*2
|
mov eax,ebp
|
||||||
|
sub eax,8 ;=sizeof(dd)*2
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@@ -462,7 +578,8 @@ endl
|
|||||||
;assert(0);
|
;assert(0);
|
||||||
.end_f:
|
.end_f:
|
||||||
|
|
||||||
lea eax,[ebp-8] ;=sizeof(dd)*2
|
mov eax,ebp
|
||||||
|
sub eax,8 ;=sizeof(dd)*2
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@@ -495,7 +612,8 @@ endl
|
|||||||
mov eax,[pointer]
|
mov eax,[pointer]
|
||||||
mov dword[p+12],eax
|
mov dword[p+12],eax
|
||||||
|
|
||||||
lea eax,[ebp-16] ;=sizeof(dd)*4
|
mov eax,ebp
|
||||||
|
sub eax,16 ;=sizeof(dd)*4
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@@ -528,7 +646,8 @@ endl
|
|||||||
mov eax,[pointer]
|
mov eax,[pointer]
|
||||||
mov dword[p+12],eax
|
mov dword[p+12],eax
|
||||||
|
|
||||||
lea eax,[ebp-16] ;=sizeof(dd)*4
|
mov eax,ebp
|
||||||
|
sub eax,16 ;=sizeof(dd)*4
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@@ -557,7 +676,8 @@ endl
|
|||||||
mov eax,[pointer]
|
mov eax,[pointer]
|
||||||
mov dword[p+8],eax
|
mov dword[p+8],eax
|
||||||
|
|
||||||
lea eax,[ebp-12] ;=sizeof(dd)*3
|
mov eax,ebp
|
||||||
|
sub eax,12 ;=sizeof(dd)*3
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@@ -590,7 +710,8 @@ endl
|
|||||||
mov eax,[pointer]
|
mov eax,[pointer]
|
||||||
mov dword[p+12],eax
|
mov dword[p+12],eax
|
||||||
|
|
||||||
lea eax,[ebp-16] ;=sizeof(dd)*4
|
mov eax,ebp
|
||||||
|
sub eax,16 ;=sizeof(dd)*4
|
||||||
stdcall gl_add_op,eax
|
stdcall gl_add_op,eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
@@ -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+ZBufferPoint.x] ;v.zp.x = st0, st0 = st1
|
fistp dword[ebx+GLVertex.zp] ;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+GLTexture.images] = im = &context.current_texture.images[0]
|
;[eax+offs_text_images] = im = &context.current_texture.images[0]
|
||||||
|
|
||||||
fild dword[eax+GLTexture.images+GLImage.s_bound]
|
fild dword[eax+offs_text_images+offs_imag_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+GLTexture.images+GLImage.t_bound]
|
fild dword[eax+offs_text_images+offs_imag_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+offs_X]
|
fld dword[p1+GLVertex.pc]
|
||||||
fsub dword[p0+GLVertex.pc+offs_X]
|
fsub dword[p0+GLVertex.pc]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fadd dword[p0+GLVertex.pc+offs_X]
|
fadd dword[p0+GLVertex.pc]
|
||||||
fstp dword[q+GLVertex.pc+offs_X] ;q.pc.X = p0.pc.X + (p1.pc.X - p0.pc.X) * t
|
fstp dword[q+GLVertex.pc] ;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<*tmax) *tmax=t
|
fstp dword[ebx] ;if (t<*tmin) *tmax=t
|
||||||
jmp .r1
|
jmp .r1
|
||||||
align 4
|
align 4
|
||||||
.els_1: ;else if (num>0)
|
.els_1: ;else if (num>0)
|
||||||
@@ -1028,11 +1028,9 @@ 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] ;переход по указателю
|
||||||
stdcall ZB_setTexture, [edx+GLContext.zb],\
|
;так как offs_text_images+offs_imag_pixmap = 0 то context.current_texture.images[0].pixmap = [eax]
|
||||||
[eax+GLTexture.images+GLImage.pixmap],\
|
stdcall ZB_setTexture, [edx+GLContext.zb], [eax],\
|
||||||
[eax+GLTexture.images+GLImage.s_bound],\
|
[eax+offs_imag_s_bound],[eax+offs_imag_t_bound],[eax+offs_imag_xsize_log2]
|
||||||
[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
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
; 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'
|
||||||
@@ -12,7 +8,6 @@ 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'
|
||||||
|
|
||||||
@@ -23,7 +18,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))]
|
||||||
}
|
}
|
||||||
|
|
||||||
;Macro for double type parameters (8 bytes)
|
;Макрос для параметров типа double (8 байт)
|
||||||
macro glpush GLDoubleVar {
|
macro glpush GLDoubleVar {
|
||||||
push dword[GLDoubleVar+4]
|
push dword[GLDoubleVar+4]
|
||||||
push dword[GLDoubleVar]
|
push dword[GLDoubleVar]
|
||||||
@@ -89,6 +84,7 @@ red_win:
|
|||||||
@@:
|
@@:
|
||||||
sub ebx,10
|
sub ebx,10
|
||||||
stdcall reshape, ebx,eax
|
stdcall reshape, ebx,eax
|
||||||
|
.end0:
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
still:
|
still:
|
||||||
@@ -169,7 +165,8 @@ 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,title2,title2.end-title2
|
mcall SF_DRAW_TEXT,(8 shl 16)+4,0xc0c0c0,title3,title3.end-title3
|
||||||
|
;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
|
||||||
@@ -250,7 +247,9 @@ button:
|
|||||||
align 4
|
align 4
|
||||||
title1: db 'TinyGL in KolibriOS'
|
title1: db 'TinyGL in KolibriOS'
|
||||||
.end: db 0
|
.end: db 0
|
||||||
title2: db 'ESC - exit, Arrow keys - rotate, +/- zoom, P - pause'
|
;title2: db 'F full screen'
|
||||||
|
;.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
|
||||||
@@ -923,7 +922,8 @@ name_tgl db 'tinygl.obj',0
|
|||||||
|
|
||||||
align 16
|
align 16
|
||||||
i_end:
|
i_end:
|
||||||
ctx1 TinyGLContext
|
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
|
||||||
|
;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
|
||||||
|
@@ -12,15 +12,6 @@ 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
|
||||||
@@ -29,20 +20,20 @@ start:
|
|||||||
|
|
||||||
mcall SF_SET_EVENTS_MASK,0x27
|
mcall SF_SET_EVENTS_MASK,0x27
|
||||||
|
|
||||||
;we fill the array of indices from the house.3ds file (which is embedded inside this program)
|
;заполняем массив индексов из файла house.3ds (который вшит внутрь данной программы)
|
||||||
mov esi,house_3ds
|
mov esi,house_3ds
|
||||||
add esi,FACES_OFFSET
|
add esi,0x1798 ;смещение по которому идет информация о гранях в файле 3ds (получено с использованием программы info_3ds)
|
||||||
mov edi,Indices
|
mov edi,Indices
|
||||||
mov eax,FACES_COUNT
|
mov eax,0x1a6 ;число граней в файле 3ds (получено с использованием программы info_3ds)
|
||||||
@@:
|
@@:
|
||||||
movsd
|
movsd
|
||||||
movsw
|
movsw
|
||||||
add esi,2 ;skip face properties
|
add esi,2 ;пропускаем свойства грани
|
||||||
dec eax
|
dec eax
|
||||||
or eax,eax
|
or eax,eax
|
||||||
jnz @b
|
jnz @b
|
||||||
|
|
||||||
;tinygl initial context settings
|
;первоначальные настройки контекста tinygl
|
||||||
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
|
||||||
@@ -57,11 +48,11 @@ red_win:
|
|||||||
align 4
|
align 4
|
||||||
still:
|
still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall SF_WAIT_EVENT
|
||||||
cmp al,EV_REDRAW
|
cmp al,1
|
||||||
jz red_win
|
jz red_win
|
||||||
cmp al,EV_KEY
|
cmp al,2
|
||||||
jz key
|
jz key
|
||||||
cmp al,EV_BUTTON
|
cmp al,3
|
||||||
jz button
|
jz button
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
@@ -149,34 +140,29 @@ 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 ;clear the color and depth buffer
|
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
|
||||||
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 ;start of embedded 3ds file
|
mov eax,house_3ds ;начало внедренного файла 3ds
|
||||||
add eax,VERTICES_OFFSET
|
add eax,0xeb ;смещение по которому идут координаты вершин (получено с использованием программы info_3ds)
|
||||||
stdcall [glVertexPointer], 3, GL_FLOAT, 0, eax ;we set an array for the vertices, 3 is the number of coordinates for one vertex
|
stdcall [glVertexPointer], 3, GL_FLOAT, 0, eax ;задаем массив для вершин, 3 - число координат для одной вершины
|
||||||
stdcall [glEnableClientState], GL_VERTEX_ARRAY ;turn on the vertex drawing mode
|
stdcall [glEnableClientState], GL_VERTEX_ARRAY ;включаем режим рисования вершин
|
||||||
stdcall [glDrawElements], GL_TRIANGLES, FACES_COUNT*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices
|
stdcall [glDrawElements], GL_TRIANGLES, 0x1a6*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices
|
||||||
stdcall [glDisableClientState], GL_VERTEX_ARRAY ;disable vertex drawing mode
|
stdcall [glDisableClientState], GL_VERTEX_ARRAY ;отключаем режим рисования вершин
|
||||||
|
|
||||||
call [glPopMatrix]
|
call [glPopMatrix]
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
scale dd 0.07 ;initial scale (ideally should be calculated)
|
scale dd 0.0065 ;начальный масштаб (в идеальном случае должен вычислятся, но для даного примера подобран в ручную на глаз)
|
||||||
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
|
||||||
@@ -184,11 +170,10 @@ angle_x dd 0.0
|
|||||||
delt_size dd 3.0
|
delt_size dd 3.0
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
house_3ds: ;we embed the file inside the program (ideally it should open through a dialog box)
|
house_3ds: ;внедряем файл внутрь программы (в идеальном случае должен открыватся через окно диалога, но для облегчения примера вшит внутрь)
|
||||||
file '../../../../../demos/view3ds/3ds_objects/House.3ds'
|
file '../../../../../demos/view3ds/3ds_objects/House.3ds'
|
||||||
.end:
|
|
||||||
align 4
|
align 4
|
||||||
Indices rb FACES_COUNT*6 ;3 points per edge, point index 2 bytes
|
Indices rb 0x1a6*6 ;0x1a6 - число граней, на каждую грань по 3 точки, индекс точки 2 байта
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
align 4
|
align 4
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
; 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'
|
||||||
@@ -12,7 +8,6 @@ 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
|
||||||
@@ -41,11 +36,11 @@ red_win:
|
|||||||
align 16
|
align 16
|
||||||
still:
|
still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall SF_WAIT_EVENT
|
||||||
cmp al,EV_REDRAW
|
cmp al,1
|
||||||
jz red_win
|
jz red_win
|
||||||
cmp al,EV_KEY
|
cmp al,2
|
||||||
jz key
|
jz key
|
||||||
cmp al,EV_BUTTON
|
cmp al,3
|
||||||
jz button
|
jz button
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
@@ -136,6 +131,9 @@ 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 ;очистим буфер цвета и глубины
|
||||||
@@ -143,37 +141,25 @@ 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
|
||||||
push 16
|
stdcall [gluSphere], [qObj], 1.0, 16,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
|
||||||
push 8
|
stdcall [gluSphere], [qObj], 0.55, 8,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
|
||||||
push 8
|
stdcall [gluSphere], [qObj], 0.55, 8,8
|
||||||
push 8
|
|
||||||
glpush rad2
|
|
||||||
stdcall [gluSphere], [qObj]
|
|
||||||
call [glPopMatrix]
|
call [glPopMatrix]
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
|
qObj dd 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
|
||||||
@@ -187,17 +173,13 @@ 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'
|
||||||
|
|
||||||
@@ -208,8 +190,7 @@ name_tgl db 'tinygl.obj',0
|
|||||||
|
|
||||||
align 16
|
align 16
|
||||||
i_end:
|
i_end:
|
||||||
ctx1 TinyGLContext
|
ctx1 rb 28 ;sizeof.TinyGLContext = 28
|
||||||
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
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
; 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'
|
||||||
@@ -12,24 +8,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
|
||||||
@@ -43,24 +39,16 @@ 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
|
||||||
|
|
||||||
finit
|
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
|
||||||
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 ;normals of the same size to avoid artifacts
|
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
|
||||||
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,[ctx1.gl_context]
|
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
|
||||||
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
|
||||||
@@ -72,15 +60,6 @@ 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
|
||||||
@@ -90,30 +69,19 @@ red_win:
|
|||||||
align 4
|
align 4
|
||||||
still:
|
still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall SF_WAIT_EVENT
|
||||||
cmp al,EV_REDRAW
|
cmp al,1
|
||||||
jz red_win
|
jz red_win
|
||||||
cmp al,EV_KEY
|
cmp al,2
|
||||||
jz key
|
jz key
|
||||||
cmp al,EV_BUTTON
|
cmp al,3
|
||||||
jz button
|
jz button
|
||||||
cmp al,EV_MOUSE
|
|
||||||
jne still
|
|
||||||
call mouse
|
|
||||||
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 ;вершины вкл.
|
||||||
@@ -160,7 +128,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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
|
||||||
@@ -171,7 +143,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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
|
||||||
@@ -182,7 +158,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_z.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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
|
||||||
@@ -193,7 +173,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_z.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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
|
||||||
@@ -236,104 +220,6 @@ 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
|
||||||
@@ -369,7 +255,11 @@ but_zoom_p:
|
|||||||
fld dword[sc_max]
|
fld dword[sc_max]
|
||||||
@@:
|
@@:
|
||||||
fst dword[scale]
|
fst dword[scale]
|
||||||
stdcall update_number, txt_scale.v
|
mov word[NumberSymbolsAD],3
|
||||||
|
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
|
||||||
@@ -388,54 +278,50 @@ but_zoom_m:
|
|||||||
fld dword[sc_min]
|
fld dword[sc_min]
|
||||||
@@:
|
@@:
|
||||||
fst dword[scale]
|
fst dword[scale]
|
||||||
stdcall update_number, txt_scale.v
|
mov word[NumberSymbolsAD],3
|
||||||
|
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 ;опускаем цилинды вниз
|
||||||
push 8
|
stdcall [gluCylinder], [qObj], rad1,rad1,hei1, 32,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,-2.0
|
stdcall [glTranslatef], -1.6,0.0,0.0
|
||||||
push 8
|
stdcall [gluCylinder], [qObj], rad2,rad3,hei2, 16,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
|
||||||
push 8
|
stdcall [gluCylinder], [qObj], rad2,rad3,hei2, 16,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
|
||||||
@@ -461,22 +347,10 @@ SetLight:
|
|||||||
stdcall [glEnable],GL_LIGHT0
|
stdcall [glEnable],GL_LIGHT0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
scale dd 0.4 ;начальный масштаб
|
||||||
caption db 'Test gluCylinder and gluDisk, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
|
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||||
|
sc_min dd 0.1 ;минимальный масштаб
|
||||||
align 4
|
sc_max dd 1.1 ;максимальный масштаб
|
||||||
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
|
||||||
@@ -495,17 +369,13 @@ 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'
|
||||||
|
|
||||||
@@ -623,23 +493,28 @@ lib_name_2 db 'libimg.obj',0
|
|||||||
|
|
||||||
txt_scale:
|
txt_scale:
|
||||||
db 'Scale: '
|
db 'Scale: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_z:
|
txt_angle_z:
|
||||||
db 'Rotate z: '
|
db 'Rotate z: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_y:
|
txt_angle_y:
|
||||||
db 'Rotate y: '
|
db 'Rotate y: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
buf_ogl:
|
buf_ogl:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 3d_wnd_l ;+4 left
|
dw 10,10 ;+4 left,top
|
||||||
.t: dw 3d_wnd_t ;+6 top
|
.w: dd 400
|
||||||
.w: dd 3d_wnd_w
|
.h: dd 350
|
||||||
.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
|
||||||
@@ -658,14 +533,9 @@ l_libs_end:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
i_end:
|
i_end:
|
||||||
ctx1 TinyGLContext
|
ctx1 rb 28 ;sizeof.TinyGLContext = 28
|
||||||
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
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
; 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'
|
||||||
@@ -12,24 +8,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
|
||||||
@@ -43,24 +39,16 @@ 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
|
||||||
|
|
||||||
finit
|
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
|
||||||
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 ;normals of the same size to avoid artifacts
|
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
|
||||||
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,[ctx1.gl_context]
|
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
|
||||||
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
|
||||||
@@ -72,15 +60,6 @@ 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
|
||||||
@@ -90,30 +69,19 @@ red_win:
|
|||||||
align 4
|
align 4
|
||||||
still:
|
still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall SF_WAIT_EVENT
|
||||||
cmp al,EV_REDRAW
|
cmp al,1
|
||||||
jz red_win
|
jz red_win
|
||||||
cmp al,EV_KEY
|
cmp al,2
|
||||||
jz key
|
jz key
|
||||||
cmp al,EV_BUTTON
|
cmp al,3
|
||||||
jz button
|
jz button
|
||||||
cmp al,EV_MOUSE
|
|
||||||
jne still
|
|
||||||
call mouse
|
|
||||||
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 ;вершины вкл.
|
||||||
@@ -160,7 +128,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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
|
||||||
@@ -171,7 +143,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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
|
||||||
@@ -182,7 +158,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_z.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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
|
||||||
@@ -193,7 +173,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_z.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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
|
||||||
@@ -236,104 +220,6 @@ 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
|
||||||
@@ -369,7 +255,11 @@ but_zoom_p:
|
|||||||
fld dword[sc_max]
|
fld dword[sc_max]
|
||||||
@@:
|
@@:
|
||||||
fst dword[scale]
|
fst dword[scale]
|
||||||
stdcall update_number, txt_scale.v
|
mov word[NumberSymbolsAD],3
|
||||||
|
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
|
||||||
@@ -388,40 +278,41 @@ but_zoom_m:
|
|||||||
fld dword[sc_min]
|
fld dword[sc_min]
|
||||||
@@:
|
@@:
|
||||||
fst dword[scale]
|
fst dword[scale]
|
||||||
stdcall update_number, txt_scale.v
|
mov word[NumberSymbolsAD],3
|
||||||
|
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
|
||||||
push 32
|
stdcall [gluSphere], [qObj], 1.0, 32,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
|
||||||
push 16
|
stdcall [gluSphere], [qObj], 0.55, 16,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
|
||||||
push 16
|
stdcall [gluSphere], [qObj], 0.55, 16,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
|
||||||
@@ -447,19 +338,10 @@ SetLight:
|
|||||||
stdcall [glEnable],GL_LIGHT0
|
stdcall [glEnable],GL_LIGHT0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
scale dd 0.4 ;начальный масштаб
|
||||||
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
|
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||||
|
sc_min dd 0.1 ;минимальный масштаб
|
||||||
align 4
|
sc_max dd 1.1 ;максимальный масштаб
|
||||||
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
|
||||||
@@ -478,17 +360,13 @@ 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'
|
||||||
|
|
||||||
@@ -606,23 +484,28 @@ lib_name_2 db 'libimg.obj',0
|
|||||||
|
|
||||||
txt_scale:
|
txt_scale:
|
||||||
db 'Scale: '
|
db 'Scale: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_z:
|
txt_angle_z:
|
||||||
db 'Rotate z: '
|
db 'Rotate z: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_y:
|
txt_angle_y:
|
||||||
db 'Rotate y: '
|
db 'Rotate y: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
buf_ogl:
|
buf_ogl:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 3d_wnd_l ;+4 left
|
dw 10,10 ;+4 left,top
|
||||||
.t: dw 3d_wnd_t ;+6 top
|
.w: dd 400
|
||||||
.w: dd 3d_wnd_w
|
.h: dd 350
|
||||||
.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
|
||||||
@@ -641,14 +524,9 @@ l_libs_end:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
i_end:
|
i_end:
|
||||||
ctx1 TinyGLContext
|
ctx1 rb 28 ;sizeof.TinyGLContext = 28
|
||||||
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
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
; 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'
|
||||||
@@ -12,24 +8,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
|
||||||
|
|
||||||
|
;Макрос для параметров типа double (8 байт)
|
||||||
|
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
|
||||||
@@ -43,9 +39,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], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
|
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
|
||||||
stdcall [glEnable], GL_DEPTH_TEST
|
stdcall [glEnable], GL_DEPTH_TEST
|
||||||
stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
|
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
|
||||||
call [gluNewQuadric]
|
call [gluNewQuadric]
|
||||||
mov [qObj],eax
|
mov [qObj],eax
|
||||||
stdcall [gluQuadricTexture], eax,GL_TRUE
|
stdcall [gluQuadricTexture], eax,GL_TRUE
|
||||||
@@ -53,7 +49,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,[ctx1.gl_context]
|
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
|
||||||
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
|
||||||
@@ -67,11 +63,6 @@ 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
|
||||||
|
|
||||||
@@ -97,11 +88,11 @@ red_win:
|
|||||||
align 4
|
align 4
|
||||||
still:
|
still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall SF_WAIT_EVENT
|
||||||
cmp al,EV_REDRAW
|
cmp al,1
|
||||||
jz red_win
|
jz red_win
|
||||||
cmp al,EV_KEY
|
cmp al,2
|
||||||
jz key
|
jz key
|
||||||
cmp al,EV_BUTTON
|
cmp al,3
|
||||||
jz button
|
jz button
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
@@ -109,15 +100,7 @@ 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 ;сферы
|
||||||
@@ -161,7 +144,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -171,7 +158,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -181,7 +172,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_z.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -191,7 +186,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_z.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -228,20 +227,6 @@ 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
|
||||||
@@ -302,12 +287,15 @@ 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
|
||||||
@@ -316,24 +304,15 @@ 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
|
||||||
push 32
|
stdcall [gluSphere], [qObj], 1.0, 32,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
|
||||||
push 16
|
stdcall [gluSphere], [qObj], 0.55, 16,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
|
||||||
push 16
|
stdcall [gluSphere], [qObj], 0.55, 16,16
|
||||||
push 16
|
|
||||||
glpush rad2
|
|
||||||
stdcall [gluSphere], [qObj]
|
|
||||||
@@:
|
@@:
|
||||||
cmp dword[dr_figure],1
|
cmp dword[dr_figure],1
|
||||||
jne @f
|
jne @f
|
||||||
@@ -409,13 +388,6 @@ 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 ;минимальный масштаб
|
||||||
@@ -438,17 +410,13 @@ 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'
|
||||||
|
|
||||||
@@ -566,23 +534,28 @@ lib_name_2 db 'libimg.obj',0
|
|||||||
|
|
||||||
txt_scale:
|
txt_scale:
|
||||||
db 'Scale: '
|
db 'Scale: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_z:
|
txt_angle_z:
|
||||||
db 'Rotate z: '
|
db 'Rotate z: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_y:
|
txt_angle_y:
|
||||||
db 'Rotate y: '
|
db 'Rotate y: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
buf_ogl:
|
buf_ogl:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 3d_wnd_l ;+4 left
|
dw 10,10 ;+4 left,top
|
||||||
.t: dw 3d_wnd_t ;+6 top
|
.w: dd 400
|
||||||
.w: dd 3d_wnd_w
|
.h: dd 350
|
||||||
.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
|
||||||
@@ -601,7 +574,7 @@ l_libs_end:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
i_end:
|
i_end:
|
||||||
ctx1 TinyGLContext
|
ctx1 rb 28 ;sizeof.TinyGLContext = 28
|
||||||
image_data_toolbar dd 0
|
image_data_toolbar dd 0
|
||||||
dr_figure dd 0
|
dr_figure dd 0
|
||||||
qObj dd 0
|
qObj dd 0
|
||||||
|
@@ -1,8 +1,3 @@
|
|||||||
; 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'
|
||||||
@@ -13,24 +8,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 450
|
|
||||||
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
|
||||||
|
|
||||||
|
;Макрос для параметров типа double (8 байт)
|
||||||
|
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
|
||||||
@@ -44,9 +39,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], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
|
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
|
||||||
stdcall [glEnable], GL_DEPTH_TEST
|
stdcall [glEnable], GL_DEPTH_TEST
|
||||||
stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
|
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
|
||||||
call [gluNewQuadric]
|
call [gluNewQuadric]
|
||||||
mov [qObj],eax
|
mov [qObj],eax
|
||||||
stdcall [gluQuadricTexture], eax,GL_TRUE
|
stdcall [gluQuadricTexture], eax,GL_TRUE
|
||||||
@@ -54,7 +49,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,[ctx1.gl_context]
|
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
|
||||||
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
|
||||||
@@ -68,11 +63,6 @@ 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
|
||||||
|
|
||||||
@@ -98,11 +88,11 @@ red_win:
|
|||||||
align 4
|
align 4
|
||||||
still:
|
still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall SF_WAIT_EVENT
|
||||||
cmp al,EV_REDRAW
|
cmp al,1
|
||||||
jz red_win
|
jz red_win
|
||||||
cmp al,EV_KEY
|
cmp al,2
|
||||||
jz key
|
jz key
|
||||||
cmp al,EV_BUTTON
|
cmp al,3
|
||||||
jz button
|
jz button
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
@@ -110,15 +100,7 @@ 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 ;земля с меридиан.
|
||||||
@@ -164,7 +146,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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,7 +160,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -184,7 +174,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_x.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -194,7 +188,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_x.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -231,20 +229,6 @@ 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
|
||||||
@@ -305,40 +289,34 @@ 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.2 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
|
stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
|
||||||
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
|
||||||
push 18
|
stdcall [gluSphere], [qObj], 1.0, 24,18 ;меридианы
|
||||||
push 24
|
|
||||||
glpush rad1
|
|
||||||
stdcall [gluSphere], [qObj] ;meridians
|
|
||||||
stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
|
stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
|
||||||
push 24
|
stdcall [gluSphere], [qObj], 0.995, 24,18 ;земля
|
||||||
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
|
||||||
push 64
|
stdcall [gluSphere], [qObj], 1.0, 64,64
|
||||||
push 64
|
|
||||||
glpush rad1
|
|
||||||
stdcall [gluSphere], [qObj]
|
|
||||||
@@:
|
@@:
|
||||||
call [glPopMatrix]
|
call [glPopMatrix]
|
||||||
|
|
||||||
@@ -347,13 +325,6 @@ 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 ;минимальный масштаб
|
||||||
@@ -369,17 +340,13 @@ 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'
|
||||||
|
|
||||||
@@ -497,27 +464,34 @@ lib_name_2 db 'libimg.obj',0
|
|||||||
|
|
||||||
txt_scale:
|
txt_scale:
|
||||||
db 'Scale: '
|
db 'Scale: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_z:
|
txt_angle_z:
|
||||||
db 'Rotate z: '
|
db 'Rotate z: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_x:
|
txt_angle_x:
|
||||||
db 'Rotate x: '
|
db 'Rotate x: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_y:
|
txt_angle_y:
|
||||||
db 'Rotate y: '
|
db 'Rotate y: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
buf_ogl:
|
buf_ogl:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 3d_wnd_l ;+4 left
|
dw 10,10 ;+4 left,top
|
||||||
.t: dw 3d_wnd_t ;+6 top
|
.w: dd 400
|
||||||
.w: dd 3d_wnd_w
|
.h: dd 350
|
||||||
.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
|
||||||
@@ -536,7 +510,7 @@ l_libs_end:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
i_end:
|
i_end:
|
||||||
ctx1 TinyGLContext
|
ctx1 rb 28 ;sizeof.TinyGLContext = 28
|
||||||
image_data_toolbar dd 0
|
image_data_toolbar dd 0
|
||||||
dr_figure dd 0
|
dr_figure dd 0
|
||||||
qObj dd 0
|
qObj dd 0
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
; 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'
|
||||||
@@ -12,24 +8,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 450
|
|
||||||
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
|
||||||
|
|
||||||
|
;Макрос для параметров типа double (8 байт)
|
||||||
|
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
|
||||||
@@ -43,9 +39,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], 3d_wnd_l,3d_wnd_t,[buf_ogl.w],[buf_ogl.h],ctx1
|
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
|
||||||
stdcall [glEnable], GL_DEPTH_TEST
|
stdcall [glEnable], GL_DEPTH_TEST
|
||||||
stdcall [glEnable], GL_NORMALIZE ;normals of the same size to avoid artifacts
|
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
|
||||||
call [gluNewQuadric]
|
call [gluNewQuadric]
|
||||||
mov [qObj],eax
|
mov [qObj],eax
|
||||||
stdcall [gluQuadricDrawStyle], eax,GLU_FILL
|
stdcall [gluQuadricDrawStyle], eax,GLU_FILL
|
||||||
@@ -54,7 +50,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,[ctx1.gl_context]
|
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
|
||||||
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
|
||||||
@@ -68,11 +64,6 @@ 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
|
||||||
|
|
||||||
@@ -98,11 +89,11 @@ red_win:
|
|||||||
align 4
|
align 4
|
||||||
still:
|
still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall SF_WAIT_EVENT
|
||||||
cmp al,EV_REDRAW
|
cmp al,1
|
||||||
jz red_win
|
jz red_win
|
||||||
cmp al,EV_KEY
|
cmp al,2
|
||||||
jz key
|
jz key
|
||||||
cmp al,EV_BUTTON
|
cmp al,3
|
||||||
jz button
|
jz button
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
@@ -110,15 +101,7 @@ 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 ;масштаб +
|
||||||
@@ -158,7 +141,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -168,7 +155,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_y.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -178,7 +169,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_x.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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,7 +183,11 @@ 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]
|
||||||
stdcall update_number, txt_angle_x.v
|
mov word[NumberSymbolsAD],2
|
||||||
|
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]
|
||||||
@@:
|
@@:
|
||||||
@@ -215,20 +214,6 @@ 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
|
||||||
@@ -275,25 +260,21 @@ 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.2 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
|
stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
|
||||||
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
|
||||||
|
|
||||||
; рисование панорамы
|
; рисование панорамы
|
||||||
push 64
|
stdcall [gluSphere], [qObj], 1.0, 64,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
|
||||||
@@ -301,10 +282,6 @@ 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 ;минимальный масштаб
|
||||||
@@ -320,17 +297,13 @@ 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'
|
||||||
|
|
||||||
@@ -448,27 +421,34 @@ lib_name_2 db 'libimg.obj',0
|
|||||||
|
|
||||||
txt_scale:
|
txt_scale:
|
||||||
db 'Scale: '
|
db 'Scale: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_z:
|
txt_angle_z:
|
||||||
db 'Rotate z: '
|
db 'Rotate z: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_x:
|
txt_angle_x:
|
||||||
db 'Rotate x: '
|
db 'Rotate x: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
txt_angle_y:
|
txt_angle_y:
|
||||||
db 'Rotate y: '
|
db 'Rotate y: '
|
||||||
.v: rb 11
|
.v:
|
||||||
|
db 0
|
||||||
|
rb 10
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
buf_ogl:
|
buf_ogl:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 3d_wnd_l ;+4 left
|
dw 10,10 ;+4 left,top
|
||||||
.t: dw 3d_wnd_t ;+6 top
|
.w: dd 400
|
||||||
.w: dd 3d_wnd_w
|
.h: dd 350
|
||||||
.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
|
||||||
@@ -487,7 +467,7 @@ l_libs_end:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
i_end:
|
i_end:
|
||||||
ctx1 TinyGLContext
|
ctx1 rb 28 ;sizeof.TinyGLContext = 28
|
||||||
image_data_toolbar dd 0
|
image_data_toolbar dd 0
|
||||||
qObj dd 0
|
qObj dd 0
|
||||||
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
|
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
|
||||||
|
@@ -168,8 +168,7 @@ 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 gluDisk ;(GLUquadricObj, double, double, int, int)
|
E_LIB gluSphere ;(GLUquadricObj, float, int, int)
|
||||||
E_LIB gluSphere ;(GLUquadricObj, double, int, int)
|
|
||||||
|
|
||||||
;
|
;
|
||||||
; KolibriOS functions
|
; KolibriOS functions
|
||||||
|
@@ -6,9 +6,29 @@ 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
|
||||||
fl_0_5 dd 0.5
|
an360f dd 360.0
|
||||||
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
|
||||||
@@ -20,7 +40,7 @@ locals
|
|||||||
endl
|
endl
|
||||||
fldpi
|
fldpi
|
||||||
fmul qword[fovy]
|
fmul qword[fovy]
|
||||||
fdiv dword[fl_360]
|
fdiv dword[an360f]
|
||||||
fptan
|
fptan
|
||||||
ffree st0 ;выкидываем 1.0 которая осталось после вычисления тангенса
|
ffree st0 ;выкидываем 1.0 которая осталось после вычисления тангенса
|
||||||
fincstp
|
fincstp
|
||||||
@@ -56,11 +76,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+GLUquadricObj.DrawStyle],GLU_FILL
|
mov dword[eax+offs_qobj_DrawStyle],GLU_FILL
|
||||||
mov dword[eax+GLUquadricObj.Orientation],GLU_OUTSIDE
|
mov dword[eax+offs_qobj_Orientation],GLU_OUTSIDE
|
||||||
mov dword[eax+GLUquadricObj.TextureFlag],GL_FALSE
|
mov dword[eax+offs_qobj_TextureFlag],GL_FALSE
|
||||||
mov dword[eax+GLUquadricObj.Normals],GLU_SMOOTH
|
mov dword[eax+offs_qobj_Normals],GLU_SMOOTH
|
||||||
mov dword[eax+GLUquadricObj.ErrorFunc],0 ;NULL
|
mov dword[eax+offs_qobj_ErrorFunc],0 ;NULL
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@@ -94,7 +114,7 @@ proc gluQuadricDrawStyle uses eax ebx, qobj:dword, drawStyle:dword
|
|||||||
jmp .err_q
|
jmp .err_q
|
||||||
align 4
|
align 4
|
||||||
@@:
|
@@:
|
||||||
mov dword[eax+GLUquadricObj.DrawStyle],ebx
|
mov dword[eax+offs_qobj_DrawStyle],ebx
|
||||||
jmp @f
|
jmp @f
|
||||||
align 4
|
align 4
|
||||||
.err_q:
|
.err_q:
|
||||||
@@ -119,7 +139,7 @@ proc gluQuadricOrientation uses eax ebx, qobj:dword, orientation:dword
|
|||||||
jmp .err_q
|
jmp .err_q
|
||||||
align 4
|
align 4
|
||||||
@@:
|
@@:
|
||||||
mov dword[eax+GLUquadricObj.Orientation],ebx
|
mov dword[eax+offs_qobj_Orientation],ebx
|
||||||
jmp @f
|
jmp @f
|
||||||
align 4
|
align 4
|
||||||
.err_q:
|
.err_q:
|
||||||
@@ -139,7 +159,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+GLUquadricObj.TextureFlag],ebx
|
mov dword[eax+offs_qobj_TextureFlag],ebx
|
||||||
jmp @f
|
jmp @f
|
||||||
align 4
|
align 4
|
||||||
.err_q:
|
.err_q:
|
||||||
@@ -149,7 +169,7 @@ align 4
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
proc gluCylinder qobj:dword, baseRadius:qword, topRadius:qword, height:qword,\
|
proc gluCylinder qobj:dword, baseRadius:dword, topRadius:dword, height:dword,\
|
||||||
slices:dword, stacks:dword
|
slices:dword, stacks:dword
|
||||||
locals
|
locals
|
||||||
da dq ? ;double
|
da dq ? ;double
|
||||||
@@ -173,7 +193,7 @@ endl
|
|||||||
pushad
|
pushad
|
||||||
mov edx,[qobj]
|
mov edx,[qobj]
|
||||||
fld1
|
fld1
|
||||||
cmp dword[edx+GLUquadricObj.Orientation],GLU_INSIDE
|
cmp dword[edx+offs_qobj_Orientation],GLU_INSIDE
|
||||||
jne @f
|
jne @f
|
||||||
fchs
|
fchs
|
||||||
@@:
|
@@:
|
||||||
@@ -183,12 +203,14 @@ 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
|
||||||
fld qword[topRadius]
|
mov ebx,[topRadius]
|
||||||
fsub qword[baseRadius]
|
fld qword[ebx]
|
||||||
|
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
|
||||||
lea eax,[height]
|
mov 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
|
||||||
@@ -196,7 +218,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+GLUquadricObj.DrawStyle],GLU_POINT
|
cmp dword[edx+offs_qobj_DrawStyle],GLU_POINT
|
||||||
jne .else0
|
jne .else0
|
||||||
stdcall glBegin,GL_POINTS
|
stdcall glBegin,GL_POINTS
|
||||||
mov ebx,[slices]
|
mov ebx,[slices]
|
||||||
@@ -223,7 +245,8 @@ 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
|
||||||
fld qword[baseRadius]
|
mov ecx,[baseRadius]
|
||||||
|
fld qword[ecx]
|
||||||
fstp qword[r] ;r = baseRadius
|
fstp qword[r] ;r = baseRadius
|
||||||
mov ecx,[stacks]
|
mov ecx,[stacks]
|
||||||
inc ecx
|
inc ecx
|
||||||
@@ -254,15 +277,16 @@ align 4
|
|||||||
call glEnd
|
call glEnd
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
.else0:
|
.else0:
|
||||||
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_LINE
|
cmp dword[edx+offs_qobj_DrawStyle],GLU_LINE
|
||||||
je @f
|
je @f
|
||||||
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_SILHOUETTE
|
cmp dword[edx+offs_qobj_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
|
||||||
fld qword[baseRadius]
|
mov ecx,[baseRadius]
|
||||||
|
fld qword[ecx]
|
||||||
fstp qword[r] ;r = baseRadius
|
fstp qword[r] ;r = baseRadius
|
||||||
mov ecx,[stacks]
|
mov ecx,[stacks]
|
||||||
inc ecx
|
inc ecx
|
||||||
@@ -318,100 +342,28 @@ align 4
|
|||||||
align 4
|
align 4
|
||||||
.else2:
|
.else2:
|
||||||
; draw one ring at each end
|
; draw one ring at each end
|
||||||
lea ecx,[baseRadius]
|
; if (baseRadius!=0.0) {
|
||||||
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
|
; {
|
||||||
jge .cycle_4_end
|
; x = cos(i*da);
|
||||||
fild dword[i]
|
; y = sin(i*da);
|
||||||
fmul qword[da]
|
; normal3f( x*nsign, y*nsign, nz*nsign );
|
||||||
fld st0
|
; glVertex3f( x*baseRadius, y*baseRadius, 0.0 );
|
||||||
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
|
; {
|
||||||
jge .cycle_5_end
|
; x = cos(i*da);
|
||||||
fild dword[i]
|
; y = sin(i*da);
|
||||||
fmul qword[da]
|
; normal3f( x*nsign, y*nsign, nz*nsign );
|
||||||
fld st0
|
; glVertex3f( x*topRadius, y*topRadius, height );
|
||||||
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
|
||||||
@@ -438,7 +390,8 @@ 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
|
||||||
fld qword[baseRadius]
|
mov ecx,[baseRadius]
|
||||||
|
fld qword[ecx]
|
||||||
fld st0
|
fld st0
|
||||||
fmul dword[y]
|
fmul dword[y]
|
||||||
fstp dword[esp-8]
|
fstp dword[esp-8]
|
||||||
@@ -446,9 +399,11 @@ 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
|
||||||
fld qword[height]
|
mov eax,[height]
|
||||||
|
fld qword[eax]
|
||||||
fstp dword[esp-4]
|
fstp dword[esp-4]
|
||||||
fld qword[topRadius]
|
mov ecx,[topRadius]
|
||||||
|
fld qword[ecx]
|
||||||
fld st0
|
fld st0
|
||||||
fmul dword[y]
|
fmul dword[y]
|
||||||
fstp dword[esp-8]
|
fstp dword[esp-8]
|
||||||
@@ -464,7 +419,7 @@ align 4
|
|||||||
jmp .end_f
|
jmp .end_f
|
||||||
align 4
|
align 4
|
||||||
.else1:
|
.else1:
|
||||||
cmp dword[edx+GLUquadricObj.DrawStyle],GLU_FILL
|
cmp dword[edx+offs_qobj_DrawStyle],GLU_FILL
|
||||||
jne .end_f
|
jne .end_f
|
||||||
fld1
|
fld1
|
||||||
fidiv dword[slices]
|
fidiv dword[slices]
|
||||||
@@ -498,7 +453,8 @@ 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
|
||||||
fld qword[baseRadius]
|
mov ecx,[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
|
||||||
@@ -523,7 +479,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
|
||||||
je @f
|
je @f
|
||||||
stdcall glTexCoord2f, [tcx],[tcy]
|
stdcall glTexCoord2f, [tcx],[tcy]
|
||||||
@@:
|
@@:
|
||||||
@@ -548,7 +504,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
|
||||||
je @f
|
je @f
|
||||||
push dword[tcy]
|
push dword[tcy]
|
||||||
fld dword[tcx]
|
fld dword[tcx]
|
||||||
@@ -579,7 +535,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
|
||||||
je @f
|
je @f
|
||||||
stdcall glTexCoord2f, [tcx],[tcy]
|
stdcall glTexCoord2f, [tcx],[tcy]
|
||||||
@@:
|
@@:
|
||||||
@@ -604,7 +560,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[edx+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
|
||||||
je @f
|
je @f
|
||||||
push dword[tcy]
|
push dword[tcy]
|
||||||
fld dword[tcx]
|
fld dword[tcx]
|
||||||
@@ -649,164 +605,18 @@ endp
|
|||||||
|
|
||||||
; Disk (adapted from Mesa)
|
; Disk (adapted from Mesa)
|
||||||
|
|
||||||
align 16
|
;void gluDisk(GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops )
|
||||||
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:
|
||||||
; double radius, int slices, int stacks
|
; float radius, int slices, int stacks
|
||||||
align 16
|
align 16
|
||||||
proc gluSphere qobj:dword, radius:qword, slices:dword, stacks:dword
|
proc gluSphere qobj:dword, radius:dword, slices:dword, stacks:dword
|
||||||
locals
|
locals
|
||||||
rho dd ? ;float
|
rho dd ? ;float
|
||||||
drho dd ?
|
drho dd ?
|
||||||
@@ -828,7 +638,7 @@ endl
|
|||||||
pushad
|
pushad
|
||||||
|
|
||||||
mov eax,[qobj]
|
mov eax,[qobj]
|
||||||
cmp dword[eax+GLUquadricObj.Normals],GLU_NONE ;if (qobj.Normals==GLU_NONE)
|
cmp dword[eax+offs_qobj_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
|
||||||
@@ -836,7 +646,7 @@ align 4
|
|||||||
.els_0:
|
.els_0:
|
||||||
mov dword[normals],GL_TRUE
|
mov dword[normals],GL_TRUE
|
||||||
@@:
|
@@:
|
||||||
cmp dword[eax+GLUquadricObj.Orientation],GLU_INSIDE ;if (qobj.Orientation==GLU_INSIDE)
|
cmp dword[eax+offs_qobj_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
|
||||||
@@ -856,7 +666,7 @@ align 4
|
|||||||
ffree st0
|
ffree st0
|
||||||
fincstp
|
fincstp
|
||||||
|
|
||||||
cmp dword[eax+GLUquadricObj.DrawStyle],GLU_FILL ;if (qobj.DrawStyle==GLU_FILL)
|
cmp dword[eax+offs_qobj_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
|
||||||
@@ -865,13 +675,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[eax+offs_qobj_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 qword[radius]
|
fmul dword[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]
|
||||||
@@ -918,7 +728,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 qword[radius]
|
fld dword[radius]
|
||||||
fld dword[z]
|
fld dword[z]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fstp dword[esp-4]
|
fstp dword[esp-4]
|
||||||
@@ -944,7 +754,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[eax+offs_qobj_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
|
||||||
@@ -1010,11 +820,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
|
||||||
je @f
|
je @f
|
||||||
stdcall glTexCoord2f, [s],[t]
|
stdcall glTexCoord2f, [s],[t]
|
||||||
@@:
|
@@:
|
||||||
fld qword[radius]
|
fld dword[radius]
|
||||||
fld dword[z]
|
fld dword[z]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fstp dword[esp-4]
|
fstp dword[esp-4]
|
||||||
@@ -1058,7 +868,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag)
|
||||||
je @f
|
je @f
|
||||||
fld dword[t]
|
fld dword[t]
|
||||||
fsub dword[d_t]
|
fsub dword[d_t]
|
||||||
@@ -1069,7 +879,7 @@ align 4
|
|||||||
fadd dword[d_s]
|
fadd dword[d_s]
|
||||||
fstp dword[s]
|
fstp dword[s]
|
||||||
@@:
|
@@:
|
||||||
fld qword[radius]
|
fld dword[radius]
|
||||||
fld dword[z]
|
fld dword[z]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fstp dword[esp-4]
|
fstp dword[esp-4]
|
||||||
@@ -1100,7 +910,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+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[eax+offs_qobj_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
|
||||||
@@ -1108,7 +918,7 @@ align 4
|
|||||||
mov [t],ebx
|
mov [t],ebx
|
||||||
@@:
|
@@:
|
||||||
sub esp,4
|
sub esp,4
|
||||||
fld qword[radius]
|
fld dword[radius]
|
||||||
fchs
|
fchs
|
||||||
fmul dword[nsign]
|
fmul dword[nsign]
|
||||||
fstp dword[esp]
|
fstp dword[esp]
|
||||||
@@ -1160,14 +970,14 @@ align 4
|
|||||||
fincstp
|
fincstp
|
||||||
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
|
stdcall glNormal3f ;x*nsign, y*nsign, z*nsign
|
||||||
@@:
|
@@:
|
||||||
cmp dword[eax+GLUquadricObj.TextureFlag],0 ;if (qobj.TextureFlag)
|
cmp dword[eax+offs_qobj_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 qword[radius]
|
fld dword[radius]
|
||||||
fld dword[z]
|
fld dword[z]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fstp dword[esp-4]
|
fstp dword[esp-4]
|
||||||
@@ -1188,9 +998,9 @@ align 4
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
.if_glu_line:
|
.if_glu_line:
|
||||||
cmp dword[eax+GLUquadricObj.DrawStyle],GLU_LINE ;if (qobj.DrawStyle==GLU_LINE)
|
cmp dword[eax+offs_qobj_DrawStyle],GLU_LINE ;if (qobj.DrawStyle==GLU_LINE)
|
||||||
je @f
|
je @f
|
||||||
cmp dword[eax+GLUquadricObj.DrawStyle],GLU_SILHOUETTE ;if (qobj.DrawStyle==GLU_SILHOUETTE)
|
cmp dword[eax+offs_qobj_DrawStyle],GLU_SILHOUETTE ;if (qobj.DrawStyle==GLU_SILHOUETTE)
|
||||||
je @f
|
je @f
|
||||||
jmp .if_glu_point
|
jmp .if_glu_point
|
||||||
align 4
|
align 4
|
||||||
@@ -1246,7 +1056,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 qword[radius]
|
fld dword[radius]
|
||||||
fld dword[z]
|
fld dword[z]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fstp dword[esp-4]
|
fstp dword[esp-4]
|
||||||
@@ -1313,7 +1123,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 qword[radius]
|
fld dword[radius]
|
||||||
fld dword[z]
|
fld dword[z]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fstp dword[esp-4]
|
fstp dword[esp-4]
|
||||||
@@ -1338,7 +1148,7 @@ align 4
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
.if_glu_point:
|
.if_glu_point:
|
||||||
cmp dword[eax+GLUquadricObj.DrawStyle],GLU_POINT ;if (qobj.DrawStyle==GLU_POINT)
|
cmp dword[eax+offs_qobj_DrawStyle],GLU_POINT ;if (qobj.DrawStyle==GLU_POINT)
|
||||||
jne .end_f
|
jne .end_f
|
||||||
|
|
||||||
; top and bottom-most points
|
; top and bottom-most points
|
||||||
@@ -1347,10 +1157,7 @@ align 4
|
|||||||
jne @f
|
jne @f
|
||||||
stdcall glNormal3f, 0.0,0.0,dword[nsign]
|
stdcall glNormal3f, 0.0,0.0,dword[nsign]
|
||||||
@@:
|
@@:
|
||||||
sub esp,4
|
stdcall glVertex3f, 0.0,0.0,dword[radius]
|
||||||
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
|
||||||
@@ -1360,7 +1167,7 @@ align 4
|
|||||||
stdcall glNormal3f, 0.0,0.0 ;,-nsign
|
stdcall glNormal3f, 0.0,0.0 ;,-nsign
|
||||||
@@:
|
@@:
|
||||||
sub esp,4
|
sub esp,4
|
||||||
fld qword[radius]
|
fld dword[radius]
|
||||||
fchs
|
fchs
|
||||||
fstp dword[esp]
|
fstp dword[esp]
|
||||||
stdcall glVertex3f, 0.0,0.0 ;,-radius
|
stdcall glVertex3f, 0.0,0.0 ;,-radius
|
||||||
@@ -1413,7 +1220,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 qword[radius]
|
fld dword[radius]
|
||||||
fld dword[z]
|
fld dword[z]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fstp dword[esp-4]
|
fstp dword[esp-4]
|
||||||
|
@@ -1,6 +1,15 @@
|
|||||||
; 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)
|
||||||
;{
|
;{
|
||||||
|
@@ -1,15 +0,0 @@
|
|||||||
;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
|
|
@@ -1,6 +1,5 @@
|
|||||||
align 4
|
align 4
|
||||||
fl_128 dd 128.0
|
sp128f 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
|
||||||
@@ -12,7 +11,8 @@ 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
|
||||||
stdcall glopMaterial,eax,ebx
|
lea edi,[ebp+12]
|
||||||
|
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[fl_128]
|
fdiv dword[sp128f]
|
||||||
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 [edx+GLLight.spot_exponent],ecx ;l.spot_exponent=p[3]
|
mov [edi+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[ebx+12] ;float a=v.v[0]
|
fld dword[ebp+12] ;float a=v.v[0]
|
||||||
; assert(a == 180 || (a>=0 && a<=90));
|
; assert(a == 180 || (a>=0 && a<=90));
|
||||||
fst dword[edx+GLLight.spot_cutoff] ;l.spot_cutoff=a
|
fst dword[edi+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[edx+GLLight.cos_spot_cutoff] ;l.cos_spot_cutoff=cos(a * M_PI / 180.0)
|
fstp dword[edi+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 [edx+GLLight.attenuation],ecx ;l->attenuation[0]=p[3]
|
mov [edi+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 [edx+GLLight.attenuation+4],ecx ;l->attenuation[1]=p[3]
|
mov [edi+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 [edx+GLLight.attenuation+8],ecx ;l->attenuation[2]=p[3]
|
mov [edi+GLLight.attenuation+8],ecx ;l->attenuation[2]=p[3]
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
align 4
|
align 4
|
||||||
@@: ;default:
|
@@: ;default:
|
||||||
@@ -356,18 +356,22 @@ 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-92
|
R dd ? ;float ebp-96
|
||||||
G dd ? ;float ebp-88
|
G dd ? ;float ebp-92
|
||||||
B dd ? ;float ebp-84
|
B dd ? ;float ebp-88
|
||||||
A dd ? ;float ebp-80
|
A dd ? ;float ebp-84
|
||||||
s V3 ;ebp-76
|
s V3 ;ebp-80
|
||||||
d V3 ;ebp-64
|
d V3 ;ebp-68
|
||||||
tmp dd ? ;float ebp-52
|
tmp dd ? ;float ebp-56
|
||||||
att dd ? ;float ebp-48
|
att dd ? ;float ebp-52
|
||||||
|
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
|
||||||
@@ -392,7 +396,8 @@ pushad
|
|||||||
|
|
||||||
mov esi,[v]
|
mov esi,[v]
|
||||||
mov edx,[context]
|
mov edx,[context]
|
||||||
lea ecx,[edx+GLContext.materials] ;ecx(m) = &context.materials[0]
|
mov ecx,edx
|
||||||
|
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
|
||||||
|
|
||||||
@@ -405,7 +410,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]
|
fadd dword[ecx] ;GLMaterial.emission=0
|
||||||
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]
|
||||||
@@ -425,7 +430,7 @@ pushad
|
|||||||
|
|
||||||
; ambient
|
; ambient
|
||||||
fld dword[ecx+GLMaterial.ambient]
|
fld dword[ecx+GLMaterial.ambient]
|
||||||
fmul dword[ebx+GLLight.ambient]
|
fmul dword[ebx] ;GLLight.ambient=0
|
||||||
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]
|
||||||
@@ -442,8 +447,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+offs_X]
|
mov eax,[ebx+GLLight.norm_position]
|
||||||
mov [d+offs_X],eax ;d.X=l.norm_position.v[0]
|
mov [d],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]
|
||||||
@@ -455,9 +460,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+offs_X]
|
fld dword[ebx+GLLight.position]
|
||||||
fsub dword[esi+GLVertex.ec+offs_X]
|
fsub dword[esi+GLVertex.ec]
|
||||||
fstp dword[d+offs_X] ;d.X=l.position.v[0]-v.ec.v[0]
|
fstp dword[d] ;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]
|
||||||
@@ -479,9 +484,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+offs_X]
|
fld dword[d]
|
||||||
fmul st0,st1
|
fmul st0,st1
|
||||||
fstp dword[d+offs_X]
|
fstp dword[d]
|
||||||
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]
|
||||||
@@ -504,8 +509,8 @@ align 4
|
|||||||
ffree st0 ;dist
|
ffree st0 ;dist
|
||||||
fincstp
|
fincstp
|
||||||
.els_0_end:
|
.els_0_end:
|
||||||
fld dword[d+offs_X]
|
fld dword[d]
|
||||||
fmul dword[n+offs_X]
|
fmul dword[n]
|
||||||
fld dword[d+offs_Y]
|
fld dword[d+offs_Y]
|
||||||
fmul dword[n+offs_Y]
|
fmul dword[n+offs_Y]
|
||||||
faddp
|
faddp
|
||||||
@@ -558,6 +563,7 @@ 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)
|
||||||
@@ -696,7 +702,7 @@ align 4
|
|||||||
@@:
|
@@:
|
||||||
shl dword[idx],2
|
shl dword[idx],2
|
||||||
add edi,dword[idx]
|
add edi,dword[idx]
|
||||||
fld dword[edi+GLSpecBuf.buf] ;dot_spec = specbuf.buf[idx]
|
fld dword[edi+offs_spec_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]
|
||||||
|
@@ -57,13 +57,12 @@ 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
|
||||||
@@:
|
@@:
|
||||||
or eax,eax
|
cmp eax,0
|
||||||
jz .end_w
|
je .end_w
|
||||||
mov ecx,[eax+GLParamBuffer.next]
|
mov ecx,[eax+offs_gpbu_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
|
||||||
@@ -80,10 +79,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+GLParamBuffer.next],0 ;ob.next=NULL
|
mov dword[ecx+offs_gpbu_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+GLParamBuffer.ops],OP_EndList ;ob.ops[0].op=OP_EndList
|
mov dword[ecx+offs_gpbu_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]
|
||||||
@@ -139,12 +138,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+GLParamBuffer.next],0 ;=NULL
|
mov dword[eax+offs_gpbu_next],0 ;=NULL
|
||||||
|
|
||||||
mov dword[edi+GLParamBuffer.next],eax
|
mov dword[edi+offs_gpbu_next],eax
|
||||||
lea esi,[edi+4*ebx]
|
lea esi,[edi+4*ebx]
|
||||||
mov dword[esi+GLParamBuffer.ops],OP_NextBuffer
|
mov dword[esi+offs_gpbu_ops],OP_NextBuffer
|
||||||
mov dword[esi+GLParamBuffer.ops+4],eax
|
mov dword[esi+offs_gpbu_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
|
||||||
@@ -169,8 +168,8 @@ push edi esi
|
|||||||
mov ebx,[ebx]
|
mov ebx,[ebx]
|
||||||
lea eax,[op_table_str]
|
lea eax,[op_table_str]
|
||||||
@@:
|
@@:
|
||||||
or ebx,ebx
|
cmp ebx,0
|
||||||
jz @f
|
je @f
|
||||||
cmp byte[eax],0
|
cmp byte[eax],0
|
||||||
jne .no_dec
|
jne .no_dec
|
||||||
dec ebx
|
dec ebx
|
||||||
@@ -198,24 +197,21 @@ push edi esi
|
|||||||
add ebx,4
|
add ebx,4
|
||||||
inc esi
|
inc esi
|
||||||
|
|
||||||
cmp byte[esi],'f' ;float
|
cmp byte[esi],'f'
|
||||||
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],'C' ;const
|
cmp byte[esi],'d'
|
||||||
je @f
|
jne @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
|
||||||
@@ -311,8 +307,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]
|
||||||
or eax,eax
|
cmp eax,0
|
||||||
jz @f
|
je @f
|
||||||
stdcall delete_list,ebx,[list]
|
stdcall delete_list,ebx,[list]
|
||||||
@@:
|
@@:
|
||||||
stdcall alloc_list,ebx,[list]
|
stdcall alloc_list,ebx,[list]
|
||||||
@@ -351,8 +347,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]
|
||||||
or eax,eax ;NULL
|
cmp eax,0 ;NULL
|
||||||
jz @f
|
je @f
|
||||||
mov eax,1
|
mov eax,1
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; functions for calculating specular color (glare)
|
; функции для вычисления зеркального цвета (блики)
|
||||||
;
|
;
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@@ -10,41 +10,49 @@ 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,GLSpecBuf.buf
|
add ebx,offs_spec_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]
|
||||||
fstp dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE
|
fst dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE
|
||||||
mov dword[val],0.0
|
fst dword[val]
|
||||||
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
|
||||||
jge @f
|
jg @f
|
||||||
fld dword[shininess]
|
;Вычисляем x^y
|
||||||
fld dword[val]
|
|
||||||
fadd dword[f_inc]
|
|
||||||
fst dword[val] ;val += f_inc
|
|
||||||
;need to calculate pow(val, shininess)
|
|
||||||
|
|
||||||
fyl2x ;the FPU stack now contains: st0=z=y*log2(x):
|
fyl2x ;Стек FPU теперь содержит: st0=z=y*log2(x):
|
||||||
;now we count 2**z:
|
;Теперь считаем 2**z:
|
||||||
fld st0 ;copy z
|
fld st0 ;Создаем еще одну копию 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 ;the result remains on the top of the stack st0
|
fstp st ;Результат остается на вершине стека 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
|
||||||
@@:
|
@@:
|
||||||
mov dword[ebx+4],1.0
|
ffree st0 ;val
|
||||||
|
fincstp
|
||||||
|
ffree st0 ;shininess
|
||||||
|
fincstp
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
@@ -62,22 +70,22 @@ endl
|
|||||||
.cycle_0:
|
.cycle_0:
|
||||||
or eax,eax ;while (found)
|
or eax,eax ;while (found)
|
||||||
jz @f
|
jz @f
|
||||||
cmp [eax+GLSpecBuf.shininess_i],ebx ;while (found.shininess_i != shininess_i)
|
cmp [eax+offs_spec_shininess_i],ebx ;while (found.shininess_i != shininess_i)
|
||||||
je @f
|
je @f
|
||||||
mov ecx,[oldest]
|
mov ecx,[oldest]
|
||||||
mov ecx,[ecx+GLSpecBuf.last_used]
|
mov ecx,[ecx+offs_spec_last_used]
|
||||||
cmp [eax+GLSpecBuf.last_used],ecx ;if (found.last_used < oldest.last_used)
|
cmp [eax+offs_spec_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+GLSpecBuf.next] ;found = found.next
|
mov eax,[eax+offs_spec_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+GLSpecBuf.last_used],ecx ;found.last_used = context.specbuf_used_counter
|
mov [eax+offs_spec_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
|
||||||
@@:
|
@@:
|
||||||
@@ -94,21 +102,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+GLSpecBuf.next],ecx
|
mov [eax+offs_spec_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+GLSpecBuf.last_used],ecx
|
mov [eax+offs_spec_last_used],ecx
|
||||||
inc dword[edx+GLContext.specbuf_used_counter]
|
inc dword[edx+GLContext.specbuf_used_counter]
|
||||||
mov [eax+GLSpecBuf.shininess_i],ebx
|
mov [eax+offs_spec_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+GLSpecBuf.shininess_i],ebx
|
mov [eax+offs_spec_shininess_i],ebx
|
||||||
mov ecx,[edx+GLContext.specbuf_used_counter]
|
mov ecx,[edx+GLContext.specbuf_used_counter]
|
||||||
mov [eax+GLSpecBuf.last_used],ecx
|
mov [eax+offs_spec_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:
|
||||||
|
@@ -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+GLTexture.handle],ecx
|
cmp dword[ebx+offs_text_handle],ecx
|
||||||
je .found
|
je .found
|
||||||
mov eax,[ebx+GLTexture.next]
|
mov eax,[ebx+offs_text_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+GLTexture.prev],0 ;if (t.prev==NULL)
|
cmp dword[eax+offs_text_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+GLTexture.handle]
|
mov ebx,[eax+offs_text_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+GLTexture.next]
|
mov ebx,[eax+offs_text_next]
|
||||||
mov [edx],ebx ;*ht=t.next
|
mov [edx],ebx ;*ht=t.next
|
||||||
jmp @f
|
jmp @f
|
||||||
.else:
|
.else:
|
||||||
mov ebx,[eax+GLTexture.prev]
|
mov ebx,[eax+offs_text_prev]
|
||||||
mov ecx,[eax+GLTexture.next]
|
mov ecx,[eax+offs_text_next]
|
||||||
mov [ebx+GLTexture.next],ecx ;t.prev.next=t.next
|
mov [ebx+offs_text_next],ecx ;t.prev.next=t.next
|
||||||
@@:
|
@@:
|
||||||
cmp dword[eax+GLTexture.next],0 ;if (t.next!=NULL)
|
cmp dword[eax+offs_text_next],0 ;if (t.next!=NULL)
|
||||||
je @f
|
je @f
|
||||||
mov ebx,[eax+GLTexture.next]
|
mov ebx,[eax+offs_text_next]
|
||||||
mov ecx,[eax+GLTexture.prev]
|
mov ecx,[eax+offs_text_prev]
|
||||||
mov [ebx+GLTexture.prev],ecx ;t.next.prev=t.prev
|
mov [ebx+offs_text_prev],ecx ;t.next.prev=t.prev
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
xor ebx,ebx
|
xor ebx,ebx
|
||||||
mov ecx,[eax+GLTexture.images] ;im=&t.images[0]
|
mov ecx,[eax+offs_text_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+GLImage.pixmap],0 ;if (im.pixmap != NULL)
|
cmp dword[ecx+offs_imag_pixmap],0 ;if (im.pixmap != NULL)
|
||||||
je @f
|
je @f
|
||||||
stdcall gl_free,[ecx+GLImage.pixmap]
|
stdcall gl_free,[ecx+offs_imag_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+GLTexture.next],ebx
|
mov [eax+offs_text_next],ebx
|
||||||
mov dword[eax+GLTexture.prev],0 ;NULL
|
mov dword[eax+offs_text_prev],0 ;NULL
|
||||||
cmp dword[eax+GLTexture.next],0 ;NULL
|
cmp dword[eax+offs_text_next],0 ;NULL
|
||||||
je @f
|
je @f
|
||||||
mov [eax+GLTexture.prev],eax
|
mov [eax+offs_text_prev],eax
|
||||||
@@:
|
@@:
|
||||||
mov [ecx],eax
|
mov [ecx],eax
|
||||||
|
|
||||||
mov ebx,[h]
|
mov ebx,[h]
|
||||||
mov [eax+GLTexture.handle],ebx
|
mov [eax+offs_text_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+GLTexture.handle],ebx ;if (t.handle>max)
|
cmp [edx+offs_text_handle],ebx ;if (t.handle>max)
|
||||||
jle @f
|
jle @f
|
||||||
mov ebx,[edx+GLTexture.handle] ;max=t.handle
|
mov ebx,[edx+offs_text_handle] ;max=t.handle
|
||||||
@@:
|
@@:
|
||||||
mov edx,[edx+GLTexture.next] ;t=t.next
|
mov edx,[edx+offs_text_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,GLTexture.images
|
add ecx,offs_text_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+GLImage.xsize],edx ;im.xsize=width
|
mov [ecx+offs_imag_xsize],edx ;im.xsize=width
|
||||||
mov [ecx+GLImage.ysize],esi ;im.ysize=height
|
mov [ecx+offs_imag_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+GLImage.s_bound],ebx ;im.s_bound = (unsigned int)(width-1)
|
mov [ecx+offs_imag_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+GLImage.xsize_log2],ZB_POINT_TEXEL_SIZE
|
mov dword[ecx+offs_imag_xsize_log2],ZB_POINT_TEXEL_SIZE
|
||||||
or ebx,ebx
|
or ebx,ebx
|
||||||
jz .set_l2
|
jz .set_l2
|
||||||
@@:
|
@@:
|
||||||
dec dword[ecx+GLImage.xsize_log2]
|
dec dword[ecx+offs_imag_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+GLImage.t_bound],esi ;im.t_bound = (unsigned int)(height-1)
|
mov [ecx+offs_imag_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+GLImage.pixmap],0 ;if (im.pixmap!=NULL)
|
cmp dword[ecx+offs_imag_pixmap],0 ;if (im.pixmap!=NULL)
|
||||||
je @f
|
je @f
|
||||||
stdcall gl_free, [ecx+GLImage.pixmap]
|
stdcall gl_free, [ecx+offs_imag_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+GLImage.pixmap],eax ;im.pixmap = gl_malloc(width*height*3)
|
mov [ecx+offs_imag_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+GLImage.pixmap],eax ;im.pixmap = gl_malloc(width*height*4)
|
mov [ecx+offs_imag_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)
|
||||||
|
@@ -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 dword[fl_1e_3]
|
fsub st0,st1
|
||||||
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 dword[fl_1e_3]
|
fsub st0,st1
|
||||||
fdiv st0,st2
|
fdiv st0,st2
|
||||||
fchs
|
fchs
|
||||||
fst dword[eax+GLViewport.scale+offs_Y]
|
fst dword[eax+GLViewport.scale+offs_Y]
|
||||||
@@ -134,13 +134,21 @@ 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[edx+GLContext.texture_2d_enabled],0
|
cmp dword[eax+GLContext.texture_2d_enabled],0
|
||||||
je @f
|
jne .if_0
|
||||||
|
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
|
||||||
@@ -245,7 +253,8 @@ 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
|
||||||
je .els_0
|
jne @f
|
||||||
|
jmp .els_0
|
||||||
align 4
|
align 4
|
||||||
@@:
|
@@:
|
||||||
; eye coordinates needed for lighting
|
; eye coordinates needed for lighting
|
||||||
|
@@ -51,6 +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
|
||||||
@@ -97,6 +102,9 @@ 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
|
||||||
@@ -125,17 +133,29 @@ 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 rd (sizeof.GLImage * MAX_TEXTURE_LEVELS)/4 ;GLImage[MAX_TEXTURE_LEVELS]
|
images rb sizeof.GLImage * MAX_TEXTURE_LEVELS ;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
|
||||||
|
@@ -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]
|
||||||
jb .end_f
|
jl .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
|
||||||
|
@@ -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]
|
||||||
jb .end_0
|
jl .end_0
|
||||||
RGBPIXEL
|
RGBPIXEL
|
||||||
mov eax,dword[zz]
|
mov eax,dword[zz]
|
||||||
mov ebx,[pz]
|
mov ebx,[pz]
|
||||||
@@ -114,7 +114,9 @@ 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
|
||||||
@@ -122,12 +124,26 @@ 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]
|
sub eax,[ebx+ZBufferPoint.z]
|
||||||
jz .mz_1
|
neg eax
|
||||||
;if(p2.z!=p1.z)
|
inc eax
|
||||||
cdq
|
xor edx,edx
|
||||||
idiv dword[n]
|
div dword[n]
|
||||||
|
neg eax
|
||||||
|
inc eax
|
||||||
|
jmp .mz_2
|
||||||
|
.mz_0:
|
||||||
|
sub eax,[ebx+ZBufferPoint.z]
|
||||||
|
xor edx,edx
|
||||||
|
div dword[n]
|
||||||
|
jmp .mz_2
|
||||||
.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
|
||||||
|
@@ -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]
|
||||||
jb .end_0
|
jl .end_0
|
||||||
RGBPIXEL
|
RGBPIXEL
|
||||||
mov eax,dword[zz]
|
mov eax,dword[zz]
|
||||||
mov ebx,[pz]
|
mov ebx,[pz]
|
||||||
@@ -115,10 +115,18 @@ 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
|
||||||
@@ -127,44 +135,103 @@ local .mb_1
|
|||||||
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]
|
sub eax,[ebx+ZBufferPoint.z]
|
||||||
jz .mz_1
|
neg eax
|
||||||
;if(p2.z!=p1.z)
|
inc eax
|
||||||
cdq
|
xor edx,edx
|
||||||
idiv dword[n]
|
div dword[n]
|
||||||
|
neg eax
|
||||||
|
inc eax
|
||||||
|
jmp .mz_2
|
||||||
|
.mz_0:
|
||||||
|
sub eax,[ebx+ZBufferPoint.z]
|
||||||
|
xor edx,edx
|
||||||
|
div dword[n]
|
||||||
|
jmp .mz_2
|
||||||
.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]
|
sub eax,[ebx+ZBufferPoint.r]
|
||||||
jz .mr_1
|
neg eax
|
||||||
;if(p2.r!=p1.r)
|
inc eax
|
||||||
shl eax,8
|
shl eax,8
|
||||||
cdq
|
xor edx,edx
|
||||||
idiv dword[n]
|
div dword[n]
|
||||||
|
neg eax
|
||||||
|
inc eax
|
||||||
|
jmp .mr_2
|
||||||
|
.mr_0:
|
||||||
|
sub eax,[ebx+ZBufferPoint.r]
|
||||||
|
shl eax,8
|
||||||
|
xor edx,edx
|
||||||
|
div dword[n]
|
||||||
|
jmp .mr_2
|
||||||
.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]
|
sub eax,[ebx+ZBufferPoint.g]
|
||||||
jz .mg_1
|
neg eax
|
||||||
;if(p2.g!=p1.g)
|
inc eax
|
||||||
shl eax,8
|
shl eax,8
|
||||||
cdq
|
xor edx,edx
|
||||||
idiv dword[n]
|
div dword[n]
|
||||||
|
neg eax
|
||||||
|
inc eax
|
||||||
|
jmp .mg_2
|
||||||
|
.mg_0:
|
||||||
|
sub eax,[ebx+ZBufferPoint.g]
|
||||||
|
shl eax,8
|
||||||
|
xor edx,edx
|
||||||
|
div dword[n]
|
||||||
|
jmp .mg_2
|
||||||
.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]
|
sub eax,[ebx+ZBufferPoint.b]
|
||||||
jz .mb_1
|
neg eax
|
||||||
;if(p2.b!=p1.b)
|
inc eax
|
||||||
shl eax,8
|
shl eax,8
|
||||||
cdq
|
xor edx,edx
|
||||||
idiv dword[n]
|
div dword[n]
|
||||||
|
neg eax
|
||||||
|
inc eax
|
||||||
|
jmp .mb_2
|
||||||
|
.mb_0:
|
||||||
|
sub eax,[ebx+ZBufferPoint.b]
|
||||||
|
shl eax,8
|
||||||
|
xor edx,edx
|
||||||
|
div dword[n]
|
||||||
|
jmp .mb_2
|
||||||
.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
|
||||||
|
@@ -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])
|
||||||
jb .end_0
|
jl .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])
|
||||||
jb .end_0
|
jl .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])
|
||||||
jb .end_0
|
jl .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])
|
||||||
jb .end_0
|
jl .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
|
||||||
|
@@ -393,9 +393,20 @@ 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
|
||||||
cdq
|
div dword[dy1] ;eax = (dx1 << 16) / dy1
|
||||||
idiv dword[dy1] ;eax = (dx1 << 16) / dy1
|
jmp .end_3
|
||||||
|
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:
|
||||||
@@ -494,6 +505,7 @@ 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]
|
||||||
@@ -509,9 +521,20 @@ 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
|
||||||
cdq
|
div dword[dy2] ;eax = (dx2 << 16) / dy2
|
||||||
idiv dword[dy2] ;eax = (dx2 << 16) / dy2
|
jmp .end_4
|
||||||
|
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:
|
||||||
|
@@ -170,7 +170,6 @@ 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
|
||||||
|
@@ -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,'e',0
|
sz sysfuncs_param,'f',0
|
||||||
|
|
||||||
include 'tp-tables.inc'
|
include 'tp-tables.inc'
|
||||||
include 'tp-locale.inc'
|
include 'tp-locale.inc'
|
||||||
|
@@ -225,10 +225,8 @@ void draw_window()
|
|||||||
|
|
||||||
// Main buttons to fill the board
|
// Main buttons to fill the board
|
||||||
#define FILL_BUTTON_SIZE BUTTON_SIZE+8
|
#define FILL_BUTTON_SIZE BUTTON_SIZE+8
|
||||||
for (i=0;i<6;i++) {
|
for (i=0;i<6;i++)
|
||||||
DefineButton(i%3*FILL_BUTTON_SIZE+17,calc(i/3)*FILL_BUTTON_SIZE+15,
|
DefineButton(i%3*FILL_BUTTON_SIZE+17,i/3*FILL_BUTTON_SIZE+15,FILL_BUTTON_SIZE,FILL_BUTTON_SIZE, i+100,FIELD_COLORS[i]);
|
||||||
FILL_BUTTON_SIZE,FILL_BUTTON_SIZE, i+100,FIELD_COLORS[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Menu buttons
|
// Menu buttons
|
||||||
for (i=0;i<3;i++)
|
for (i=0;i<3;i++)
|
||||||
|
@@ -27,8 +27,6 @@ dword I_Path = 0;
|
|||||||
#define true 1
|
#define true 1
|
||||||
#define false 0
|
#define false 0
|
||||||
|
|
||||||
inline fastcall dword calc(EAX) { return EAX; }
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@@ -16,9 +16,9 @@ include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
|
|||||||
|
|
||||||
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||||
if lang eq ru_RU
|
if lang eq ru_RU
|
||||||
caption db '<27><><EFBFBD>ᬮ<EFBFBD><E1ACAE> <20><><EFBFBD>ᥫ<EFBFBD><E1A5AB> 14.04.25',0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
caption db '<27><><EFBFBD>ᬮ<EFBFBD><E1ACAE> <20><><EFBFBD>ᥫ<EFBFBD><E1A5AB> 11.11.20',0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
else ; Default to en_US
|
else ; Default to en_US
|
||||||
caption db 'Voxel viewer 14.04.25',0
|
caption db 'Voxel viewer 11.11.20',0
|
||||||
end if
|
end if
|
||||||
|
|
||||||
3d_wnd_l equ 5 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> tinygl <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><E1ABA5>
|
3d_wnd_l equ 5 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> tinygl <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><E1ABA5>
|
||||||
@@ -750,8 +750,12 @@ draw_3d:
|
|||||||
je @f
|
je @f
|
||||||
call SetLight
|
call SetLight
|
||||||
@@:
|
@@:
|
||||||
|
stdcall [glTranslatef], 0.0,0.0,0.5 ;<3B><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> z <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD> <20><> 0.0 <20><> 1.0, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ࠦ<EFBFBD><E0A0A6><EFBFBD><EFBFBD> <20>㤥<EFBFBD> <20><>ᥪ<EFBFBD><E1A5AA><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
;<3B><><EFBFBD>ᥫ<EFBFBD><E1A5AB><EFBFBD><EFBFBD> <20><>ꥪ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><> -0.5 <20><> 0.5, <20><>⮬<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> +0.5
|
||||||
|
;<3B><> <20><><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ᥪ<EFBFBD><E1A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뫥<EFBFBD><EBABA5><EFBFBD> <20><> <20>।<EFBFBD><E0A5A4><EFBFBD> <20><><EFBFBD><EFBFBD>⥩ <20><><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD>
|
||||||
|
;<3B> <20><><EFBFBD>ᨨ opengl <20><><EFBFBD> Win <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> -1.0 <20><> 1.0 <20><>⮬<EFBFBD> ⠬ <20>⮣<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>㦭<EFBFBD>
|
||||||
stdcall [glScalef], [scale], [scale], [scale] ;㢥<><E3A2A5>稢<EFBFBD><E7A8A2><EFBFBD> <20><><EFBFBD>ᥫ<EFBFBD><E1A5AB><EFBFBD><EFBFBD> <20><>ꥪ<EFBFBD>, <20><><EFBFBD>-<2D><> <20><> <20><><EFBFBD> <20>祭<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>쪨<EFBFBD>
|
stdcall [glScalef], [scale], [scale], [scale] ;㢥<><E3A2A5>稢<EFBFBD><E7A8A2><EFBFBD> <20><><EFBFBD>ᥫ<EFBFBD><E1A5AB><EFBFBD><EFBFBD> <20><>ꥪ<EFBFBD>, <20><><EFBFBD>-<2D><> <20><> <20><><EFBFBD> <20>祭<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>쪨<EFBFBD>
|
||||||
stdcall [glScalef], 1.0, 1.0, 0.5 ;<3B><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD> <20><>ꥪ<EFBFBD><EAA5AA> <20><> <20>뫠<EFBFBD><EBABA0><EFBFBD><EFBFBD> <20><> <20>࠭<EFBFBD> <20><><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD>
|
stdcall [glScalef], 1.0, 1.0, 0.25 ;<3B><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD> <20><>ꥪ<EFBFBD><EAA5AA> <20><> <20>뫠<EFBFBD><EBABA0><EFBFBD><EFBFBD> <20><> <20>࠭<EFBFBD> <20><><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD>
|
||||||
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
|
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
|
||||||
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
|
stdcall [glRotatef], [angle_y],0.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
|
||||||
|
@@ -105,6 +105,7 @@ console: ;//////////////////////////////////////////////////////////////////////
|
|||||||
mov eax, [esp+36]
|
mov eax, [esp+36]
|
||||||
call write_to_file
|
call write_to_file
|
||||||
|
|
||||||
|
@@:
|
||||||
popad
|
popad
|
||||||
ret 4
|
ret 4
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; Copyright (C) KolibriOS team 2013-2025. All rights reserved. ;;
|
;; Copyright (C) KolibriOS team 2013-2021. All rights reserved. ;;
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; ftpc.asm - FTP client for KolibriOS ;;
|
;; ftpc.asm - FTP client for KolibriOS ;;
|
||||||
@@ -36,8 +36,8 @@ use32
|
|||||||
dd 1 ; header version
|
dd 1 ; header version
|
||||||
dd start ; entry point
|
dd start ; entry point
|
||||||
dd i_end ; initialized size
|
dd i_end ; initialized size
|
||||||
dd mem ; required memory
|
dd mem+0x1000 ; required memory
|
||||||
dd stacktop ; stack pointer
|
dd mem+0x1000 ; stack pointer
|
||||||
dd buf_cmd ; parameters
|
dd buf_cmd ; parameters
|
||||||
dd path ; path
|
dd path ; path
|
||||||
|
|
||||||
@@ -83,12 +83,12 @@ start: ;////////////////////////////////////////////////////////////////////////
|
|||||||
;< none ;;
|
;< none ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
; initialize heap for using dynamic blocks
|
; initialize heap for using dynamic blocks
|
||||||
mcall SF_SYS_MISC, SSF_HEAP_INIT
|
mcall 68, 11
|
||||||
test eax, eax
|
test eax, eax
|
||||||
je exit2
|
je exit2
|
||||||
|
|
||||||
; disable all events except network event
|
; disable all events except network event
|
||||||
mcall SF_SET_EVENTS_MASK, EV_STACK
|
mcall 40, EV_STACK
|
||||||
; load libraries
|
; load libraries
|
||||||
stdcall dll.Load, @IMPORT
|
stdcall dll.Load, @IMPORT
|
||||||
test eax, eax
|
test eax, eax
|
||||||
@@ -125,16 +125,16 @@ start: ;////////////////////////////////////////////////////////////////////////
|
|||||||
mov [acti_port_stop], ax
|
mov [acti_port_stop], ax
|
||||||
|
|
||||||
invoke ini.get_str, path, str_general, str_dir, buf_buffer1, BUFFERSIZE, 0
|
invoke ini.get_str, path, str_general, str_dir, buf_buffer1, BUFFERSIZE, 0
|
||||||
mcall SF_CURRENT_FOLDER, SSF_SET_CF, buf_buffer1 ; set working directory
|
mcall 30, 1, buf_buffer1 ; set working directory
|
||||||
|
|
||||||
; initialize log file
|
; initialize log file
|
||||||
invoke ini.get_str, path, str_general, str_logfile, log_file, 512, 0
|
invoke ini.get_str, path, str_general, str_logfile, log_file, 512, 0
|
||||||
mov [filestruct2.subfn], SSF_CREATE_FILE
|
mov [filestruct2.subfn], 2
|
||||||
mov [filestruct2.offset], 0
|
mov [filestruct2.offset], 0
|
||||||
mov [filestruct2.size], 0
|
mov [filestruct2.size], 0
|
||||||
mov [filestruct2.ptr], 0
|
mov [filestruct2.ptr], 0
|
||||||
mov [filestruct2.name], log_file
|
mov [filestruct2.name], log_file
|
||||||
mcall SF_FILE, filestruct2
|
mcall 70, filestruct2
|
||||||
|
|
||||||
; Usage: ftpc [-cli] [ftp://username:password@server:port/path]
|
; Usage: ftpc [-cli] [ftp://username:password@server:port/path]
|
||||||
|
|
||||||
@@ -355,7 +355,7 @@ wait_for_servercommand: ;///////////////////////////////////////////////////////
|
|||||||
|
|
||||||
; receive socket data with timeout
|
; receive socket data with timeout
|
||||||
.receive:
|
.receive:
|
||||||
mcall SF_SYSTEM_GET, SSF_TIME_COUNT
|
mcall 26, 9
|
||||||
add eax, TIMEOUT*100
|
add eax, TIMEOUT*100
|
||||||
mov [timeout], eax
|
mov [timeout], eax
|
||||||
.again:
|
.again:
|
||||||
@@ -365,11 +365,11 @@ wait_for_servercommand: ;///////////////////////////////////////////////////////
|
|||||||
je .closed
|
je .closed
|
||||||
cmp ebx, EWOULDBLOCK
|
cmp ebx, EWOULDBLOCK
|
||||||
jne .sock_err
|
jne .sock_err
|
||||||
mcall SF_SYSTEM_GET, SSF_TIME_COUNT
|
mcall 26, 9
|
||||||
mov ebx, [timeout]
|
mov ebx, [timeout]
|
||||||
sub ebx, eax
|
sub ebx, eax
|
||||||
jle .timeout
|
jle .timeout
|
||||||
mcall SF_WAIT_EVENT_TIMEOUT ; Wait for event with timeout
|
mcall 23 ; Wait for event with timeout
|
||||||
jmp .again
|
jmp .again
|
||||||
|
|
||||||
.sock_err:
|
.sock_err:
|
||||||
@@ -524,7 +524,7 @@ transfer_queued:
|
|||||||
|
|
||||||
; Error occured, we reached the end of the buffer before [queued] reached 0
|
; Error occured, we reached the end of the buffer before [queued] reached 0
|
||||||
mov [queued], 0
|
mov [queued], 0
|
||||||
mcall SF_SYS_MISC, SSF_MEM_FREE, [ptr_fname] ; free buffer
|
mcall 68, 13, [ptr_fname] ; free buffer
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz error_heap
|
jz error_heap
|
||||||
jmp wait_for_usercommand
|
jmp wait_for_usercommand
|
||||||
@@ -535,7 +535,7 @@ transfer_queued:
|
|||||||
dec [queued]
|
dec [queued]
|
||||||
jnz cmd_retr
|
jnz cmd_retr
|
||||||
|
|
||||||
mcall SF_SYS_MISC, SSF_MEM_FREE, [ptr_fname] ; free buffer
|
mcall 68, 13, [ptr_fname] ; free buffer
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz error_heap
|
jz error_heap
|
||||||
jmp cmd_retr
|
jmp cmd_retr
|
||||||
@@ -655,12 +655,12 @@ write_to_file: ;////////////////////////////////////////////////////////////////
|
|||||||
mov eax, 0
|
mov eax, 0
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
mov [filestruct2.subfn], SSF_WRITE_FILE
|
mov [filestruct2.subfn], 3
|
||||||
m2m [filestruct2.offset], [logfile_offset]
|
m2m [filestruct2.offset], [logfile_offset]
|
||||||
mov [filestruct2.size], ecx
|
mov [filestruct2.size], ecx
|
||||||
mov [filestruct2.ptr], eax
|
mov [filestruct2.ptr], eax
|
||||||
mov [filestruct2.name], log_file
|
mov [filestruct2.name], log_file
|
||||||
mcall SF_FILE, filestruct2
|
mcall 70, filestruct2
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz @f
|
jz @f
|
||||||
mov [logfile_offset], -1 ; disable logging
|
mov [logfile_offset], -1 ; disable logging
|
||||||
@@ -754,13 +754,13 @@ wait_for_keypress:
|
|||||||
exit:
|
exit:
|
||||||
mcall close, [controlsocket]
|
mcall close, [controlsocket]
|
||||||
exit2:
|
exit2:
|
||||||
mcall SF_TERMINATE_PROCESS
|
mcall -1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; data
|
; data
|
||||||
str_title db 'FTP client for KolibriOS',0
|
str_title db 'FTP client for KolibriOS',0
|
||||||
str_welcome db 'FTP client for KolibriOS v0.18',10
|
str_welcome db 'FTP client for KolibriOS v0.16',10
|
||||||
db 10,0
|
db 10,0
|
||||||
str_srv_addr db 'Please enter ftp server address.',10,0
|
str_srv_addr db 'Please enter ftp server address.',10,0
|
||||||
|
|
||||||
@@ -971,7 +971,6 @@ param_path rb 1024
|
|||||||
param_port rb 6
|
param_port rb 6
|
||||||
|
|
||||||
sc system_colors
|
sc system_colors
|
||||||
align 16
|
rb 1024
|
||||||
rb 4096
|
|
||||||
stacktop:
|
|
||||||
mem:
|
mem:
|
||||||
|
BIN
programs/network/ftpc/ftpc_nod.png
Executable file
BIN
programs/network/ftpc/ftpc_nod.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 283 B |
BIN
programs/network/ftpc/ftpc_sys.png
Executable file
BIN
programs/network/ftpc/ftpc_sys.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 640 B |
@@ -7,9 +7,6 @@ include '../../load_lib.mac'
|
|||||||
|
|
||||||
icon_tl_sys dd 0
|
icon_tl_sys dd 0
|
||||||
icon_tl_nod dd 0
|
icon_tl_nod dd 0
|
||||||
icon_buttons dd 0
|
|
||||||
lbl_after_enter dd 0
|
|
||||||
show_log db 0 ; 0 - hide log, 1 - show log
|
|
||||||
|
|
||||||
TLIST_SZ = 325+16 ;=341. 16 is x-size of scroll bar
|
TLIST_SZ = 325+16 ;=341. 16 is x-size of scroll bar
|
||||||
TLIST1_X = 50
|
TLIST1_X = 50
|
||||||
@@ -18,9 +15,6 @@ BT_SZ_X = 40
|
|||||||
SYS_COL = 0xe6e6e6
|
SYS_COL = 0xe6e6e6
|
||||||
BT_COL = 0xcccccc
|
BT_COL = 0xcccccc
|
||||||
STR_COL = 0x595959 ;0x000000
|
STR_COL = 0x595959 ;0x000000
|
||||||
ICON_TOP_B = 2 ; top border
|
|
||||||
ICON_LEFT_B = 2 ; left border
|
|
||||||
ICON_SIZE = (18+ICON_LEFT_B)*(18+ICON_TOP_B)*3
|
|
||||||
|
|
||||||
; TODO: automatic resizing of GUI elements on window resizing
|
; TODO: automatic resizing of GUI elements on window resizing
|
||||||
|
|
||||||
@@ -51,8 +45,8 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
test eax, eax
|
test eax, eax
|
||||||
jnz .exit
|
jnz .exit
|
||||||
|
|
||||||
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
|
mcall 48, 3, sc, sizeof.system_colors
|
||||||
mcall SF_SET_EVENTS_MASK, 0xC0000027 ; set event mask
|
mcall 40, 0xC0000027 ; set event mask
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.server_addr:
|
.server_addr:
|
||||||
@@ -84,37 +78,32 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
or dword[tree2.style], 8 ;tl_cursor_pos_limited
|
or dword[tree2.style], 8 ;tl_cursor_pos_limited
|
||||||
|
|
||||||
; read icons
|
; read icons
|
||||||
mcall SF_SYS_MISC, SSF_MEM_OPEN, str_icon_18,, 0
|
load_image_file 'ftpc_sys.png', icon_tl_sys
|
||||||
or eax, eax
|
|
||||||
jz @f
|
|
||||||
mov esi, eax
|
|
||||||
mov ecx, ICON_SIZE*11
|
|
||||||
mcall SF_SYS_MISC, SSF_MEM_ALLOC
|
|
||||||
mov ecx, eax
|
|
||||||
mov [icon_tl_sys], eax
|
|
||||||
stdcall copy_icon, eax,esi,31 ;active cursor
|
|
||||||
add eax, ICON_SIZE*3 ;skip not used icons
|
|
||||||
stdcall img_to_gray, ecx, eax, ICON_SIZE/3 ;not active cursor
|
|
||||||
|
|
||||||
|
mov [filestruct.ptr], eax
|
||||||
|
mov [filestruct.subfn], 0
|
||||||
|
mov [filestruct.offset], 54
|
||||||
|
mov [filestruct.size], ecx
|
||||||
|
mcall 70, filestruct
|
||||||
|
cmp ebx, 0
|
||||||
|
jl @f
|
||||||
m2m dword[tree1.data_img_sys], dword[icon_tl_sys]
|
m2m dword[tree1.data_img_sys], dword[icon_tl_sys]
|
||||||
m2m dword[tree2.data_img_sys], dword[icon_tl_sys]
|
m2m dword[tree2.data_img_sys], dword[icon_tl_sys]
|
||||||
|
|
||||||
|
@@:
|
||||||
; read nodes icon file
|
; read nodes icon file
|
||||||
mov ecx, ICON_SIZE*2
|
load_image_file 'ftpc_nod.png', icon_tl_nod
|
||||||
mcall SF_SYS_MISC, SSF_MEM_ALLOC
|
|
||||||
mov [icon_tl_nod], eax
|
|
||||||
stdcall copy_icon, eax,esi,2
|
|
||||||
stdcall copy_icon, eax,esi,0
|
|
||||||
|
|
||||||
|
mov [filestruct.ptr], eax
|
||||||
|
;mov [filestruct.subfn], 0
|
||||||
|
;mov [filestruct.offset], 54
|
||||||
|
mov [filestruct.size], ecx
|
||||||
|
mcall 70, filestruct
|
||||||
|
cmp ebx, 0
|
||||||
|
jl @f
|
||||||
m2m dword[tree1.data_img], dword[icon_tl_nod]
|
m2m dword[tree1.data_img], dword[icon_tl_nod]
|
||||||
m2m dword[tree2.data_img], dword[icon_tl_nod]
|
m2m dword[tree2.data_img], dword[icon_tl_nod]
|
||||||
|
|
||||||
; initialize icon buttons
|
|
||||||
mov ecx, 18*18*4*2
|
|
||||||
mcall SF_SYS_MISC, SSF_MEM_ALLOC
|
|
||||||
mov [icon_buttons], eax
|
|
||||||
stdcall copy_icon_w, eax,esi, 4 ;disconnect
|
|
||||||
stdcall copy_icon_w, eax,esi,49 ;search
|
|
||||||
@@:
|
@@:
|
||||||
call .draw
|
call .draw
|
||||||
; create initial tree list for root_dir
|
; create initial tree list for root_dir
|
||||||
@@ -132,7 +121,7 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
.still:
|
.still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall 10
|
||||||
|
|
||||||
dec eax
|
dec eax
|
||||||
jz .redraw
|
jz .redraw
|
||||||
@@ -157,86 +146,65 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
.draw:
|
.draw:
|
||||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
mcall 12, 1
|
||||||
; main window
|
; main window
|
||||||
mcall SF_CREATE_WINDOW, <35,830>, <20,555-160>, 0x34000000+SYS_COL, 0x805080DD, str_title
|
mcall 0, <35,830>, <20,555>, 0x34000000+SYS_COL, 0x805080DD, str_title
|
||||||
|
|
||||||
;-------------------------
|
;-------------------------
|
||||||
; textedit components
|
; textedit components
|
||||||
;-------------------------
|
;-------------------------
|
||||||
mcall SF_THREAD_INFO, procinfo, -1
|
mcall 9, procinfo, -1
|
||||||
mov edi, tedit0
|
mov edi, tedit0
|
||||||
call EvSize
|
call EvSize
|
||||||
|
|
||||||
movzx ebx,word[procinfo.client_box.width]
|
movzx ebx,word[procinfo.client_box.width]
|
||||||
inc bx
|
inc bx
|
||||||
mcall SF_DRAW_RECT, , ted_wnd_t
|
mcall 13, , ted_wnd_t
|
||||||
|
stdcall [ted_draw], tedit0
|
||||||
|
|
||||||
; draw "disconnect" button
|
; draw "disconnect" button
|
||||||
mcall SF_DEFINE_BUTTON, <50,114>, <25,25>, 3, BT_COL
|
mcall 8, <50,95>, <25,25>, 3, BT_COL
|
||||||
; icon
|
|
||||||
mcall SF_PUT_IMAGE_EXT, [icon_buttons], <18, 18>, <54, 29>, 32,, 0
|
|
||||||
; string "disconnect"
|
; string "disconnect"
|
||||||
mcall SF_DRAW_TEXT, <50+18+10,25+5>, 0xb0000000+STR_COL, str_disconnect
|
mcall 4, <50+5,25+5>, 0xb0000000+STR_COL, str_disconnect
|
||||||
|
|
||||||
; draw "Show|Hide log" button
|
|
||||||
mcall SF_DEFINE_BUTTON, <50,79>, <326,25>, 10, BT_COL
|
|
||||||
; string "Show|Hide log"
|
|
||||||
cmp [show_log],0
|
|
||||||
je @f
|
|
||||||
stdcall [ted_draw], tedit0
|
|
||||||
mov edx, str_hide_log
|
|
||||||
jmp .end_log_1
|
|
||||||
@@:
|
|
||||||
mov edx, str_show_log
|
|
||||||
.end_log_1:
|
|
||||||
mcall SF_DRAW_TEXT, <50+5,326+5>, 0xb0000000+STR_COL
|
|
||||||
cmp [show_log],0
|
|
||||||
je @f
|
|
||||||
; draw "Copy" button
|
; draw "Copy" button
|
||||||
mcall SF_DEFINE_BUTTON, <129+5,40>, <326,25>, 4, BT_COL
|
mcall 8, <50,40>, <326,25>, 4, BT_COL
|
||||||
; string "copy"
|
; string "copy"
|
||||||
mcall SF_DRAW_TEXT, <129+10,326+5>, 0xb0000000+STR_COL, str_copy
|
mcall 4, <50+5,326+5>, 0xb0000000+STR_COL, str_copy
|
||||||
@@:
|
|
||||||
; draw "Search" button
|
; draw "Search" button
|
||||||
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-25,25>, <20,25>, 5, BT_COL
|
mcall 8, <TLIST2_X+TLIST_SZ-55,55>, <20,25>, 5, BT_COL
|
||||||
; icon
|
|
||||||
mov ebx, [icon_buttons]
|
|
||||||
add ebx, 18*18*4
|
|
||||||
mcall SF_PUT_IMAGE_EXT,, <18, 18>, <730, 24>, 32,, 0
|
|
||||||
; string "Search"
|
; string "Search"
|
||||||
;mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-55+5,20+5>, 0xb0000000+STR_COL, str_search
|
mcall 4, <TLIST2_X+TLIST_SZ-55+5,20+5>, 0xb0000000+STR_COL, str_search
|
||||||
|
|
||||||
; draw "LIST" button
|
; draw "LIST" button
|
||||||
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-4*BT_SZ_X-15,BT_SZ_X>, <50,25>, 12, BT_COL
|
mcall 8, <TLIST2_X+TLIST_SZ-4*BT_SZ_X-15,BT_SZ_X>, <50,25>, 12, BT_COL
|
||||||
; string "LIST"
|
; string "LIST"
|
||||||
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-4*BT_SZ_X-15+5,50+5>, 0xb0000000+STR_COL, str_list
|
mcall 4, <TLIST2_X+TLIST_SZ-4*BT_SZ_X-15+5,50+5>, 0xb0000000+STR_COL, str_list
|
||||||
; draw "DELE" button
|
; draw "DELE" button
|
||||||
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-3*BT_SZ_X-10,BT_SZ_X>, <50,25>, 7, BT_COL
|
mcall 8, <TLIST2_X+TLIST_SZ-3*BT_SZ_X-10,BT_SZ_X>, <50,25>, 7, BT_COL
|
||||||
; string "DELE"
|
; string "DELE"
|
||||||
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-3*BT_SZ_X-10+5,50+5>, 0xb0000000+STR_COL, str_dele
|
mcall 4, <TLIST2_X+TLIST_SZ-3*BT_SZ_X-10+5,50+5>, 0xb0000000+STR_COL, str_dele
|
||||||
; draw "RDIR" button
|
; draw "RDIR" button
|
||||||
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-2*BT_SZ_X-5,BT_SZ_X>, <50,25>, 8, BT_COL
|
mcall 8, <TLIST2_X+TLIST_SZ-2*BT_SZ_X-5,BT_SZ_X>, <50,25>, 8, BT_COL
|
||||||
; string "RDIR"
|
; string "RDIR"
|
||||||
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-2*BT_SZ_X-5+5,50+5>, 0xb0000000+STR_COL, str_rdir
|
mcall 4, <TLIST2_X+TLIST_SZ-2*BT_SZ_X-5+5,50+5>, 0xb0000000+STR_COL, str_rdir
|
||||||
; draw "RMD" button
|
; draw "RMD" button
|
||||||
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <50,25>, 9, BT_COL
|
mcall 8, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <50,25>, 9, BT_COL
|
||||||
; string "RMD"
|
; string "RMD"
|
||||||
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,50+5>, 0xb0000000+STR_COL, str_rmd
|
mcall 4, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,50+5>, 0xb0000000+STR_COL, str_rmd
|
||||||
|
|
||||||
; draw "mkd" button
|
; draw "mkd" button
|
||||||
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <80,20>, 6, BT_COL
|
mcall 8, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <80,20>, 6, BT_COL
|
||||||
; string "mkd"
|
; string "mkd"
|
||||||
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,80+5>, 0xb0000000+STR_COL, str_mkd
|
mcall 4, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,80+5>, 0xb0000000+STR_COL, str_mkd
|
||||||
|
|
||||||
; draw "cancel" button
|
; draw "cancel" button
|
||||||
;mcall SF_DEFINE_BUTTON, <555,55>, <308,25>, 10, BT_COL
|
;mcall 8, <555,55>, <308,25>, 10, BT_COL
|
||||||
; string "Cancel"
|
; string "Cancel"
|
||||||
;mcall SF_DRAW_TEXT, <555+5,308+5>, 0xb0000000+STR_COL, str_abort
|
;mcall 4, <555+5,308+5>, 0xb0000000+STR_COL, str_abort
|
||||||
; draw "change volume" button
|
; draw "change volume" button
|
||||||
mcall SF_DEFINE_BUTTON, <TLIST1_X+TLIST_SZ-55,55>, <100-20,22>, 11, BT_COL
|
mcall 8, <TLIST1_X+TLIST_SZ-55,55>, <100-20,22>, 11, BT_COL
|
||||||
; string "Change"
|
; string "Change"
|
||||||
mcall SF_DRAW_TEXT, <TLIST1_X+TLIST_SZ-55+5,100-20+5>, 0xb0000000+STR_COL, str_change
|
mcall 4, <TLIST1_X+TLIST_SZ-55+5,100-20+5>, 0xb0000000+STR_COL, str_change
|
||||||
|
|
||||||
;--------------------------
|
;--------------------------
|
||||||
; tree list components
|
; tree list components
|
||||||
@@ -254,12 +222,12 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
stdcall [edit_box_draw], edit_volume
|
stdcall [edit_box_draw], edit_volume
|
||||||
stdcall [edit_box_draw], edit_search
|
stdcall [edit_box_draw], edit_search
|
||||||
|
|
||||||
mcall SF_REDRAW, SSF_END_DRAW
|
mcall 12,2
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
.mouse:
|
.mouse:
|
||||||
mcall SF_MOUSE_GET, SSF_WINDOW_POSITION
|
mcall 37, 1
|
||||||
cmp word[tedit0.wnd.top], ax
|
cmp word[tedit0.wnd.top], ax
|
||||||
jg .no_edit
|
jg .no_edit
|
||||||
|
|
||||||
@@ -267,7 +235,7 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
cmp word[tedit0.wnd.left], ax
|
cmp word[tedit0.wnd.left], ax
|
||||||
jg .no_edit
|
jg .no_edit
|
||||||
|
|
||||||
mcall SF_MOUSE_GET, SSF_BUTTON_EXT
|
mcall 37, 3
|
||||||
bt eax, 24
|
bt eax, 24
|
||||||
jnc @f
|
jnc @f
|
||||||
|
|
||||||
@@ -275,19 +243,12 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
jmp .still
|
jmp .still
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
cmp [show_log],0
|
|
||||||
je .still
|
|
||||||
stdcall [ted_mouse], tedit0
|
stdcall [ted_mouse], tedit0
|
||||||
jmp .still
|
jmp .still
|
||||||
|
|
||||||
.no_edit:
|
.no_edit:
|
||||||
mov [lbl_after_enter], 0
|
|
||||||
stdcall [tl_mouse], tree1
|
stdcall [tl_mouse], tree1
|
||||||
stdcall [tl_mouse], tree2
|
stdcall [tl_mouse], tree2
|
||||||
cmp [lbl_after_enter], 0
|
|
||||||
jz @f
|
|
||||||
jmp [lbl_after_enter]
|
|
||||||
@@:
|
|
||||||
stdcall [edit_box_mouse], edit_mkd
|
stdcall [edit_box_mouse], edit_mkd
|
||||||
stdcall [edit_box_mouse], edit_volume
|
stdcall [edit_box_mouse], edit_volume
|
||||||
stdcall [edit_box_mouse], edit_search
|
stdcall [edit_box_mouse], edit_search
|
||||||
@@ -295,14 +256,9 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
|
|
||||||
align 16
|
align 16
|
||||||
.key:
|
.key:
|
||||||
mcall SF_GET_KEY
|
mcall 2
|
||||||
mov [lbl_after_enter], 0
|
|
||||||
stdcall [tl_key], tree1
|
stdcall [tl_key], tree1
|
||||||
stdcall [tl_key], tree2
|
stdcall [tl_key], tree2
|
||||||
cmp [lbl_after_enter], 0
|
|
||||||
jz @f
|
|
||||||
jmp [lbl_after_enter]
|
|
||||||
@@:
|
|
||||||
stdcall [edit_box_key], edit_mkd
|
stdcall [edit_box_key], edit_mkd
|
||||||
stdcall [edit_box_key], edit_volume
|
stdcall [edit_box_key], edit_volume
|
||||||
stdcall [edit_box_key], edit_search
|
stdcall [edit_box_key], edit_search
|
||||||
@@ -310,19 +266,13 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
|
|
||||||
align 16
|
align 16
|
||||||
.button:
|
.button:
|
||||||
mcall SF_GET_BUTTON
|
mcall 17
|
||||||
|
|
||||||
cmp ah, 3
|
cmp ah, 3
|
||||||
jne @f
|
jne @f
|
||||||
ijmp eax, interface_addr, interface.server_addr
|
ijmp eax, interface_addr, interface.server_addr
|
||||||
jmp .still
|
jmp .still
|
||||||
|
|
||||||
@@:
|
|
||||||
cmp ah, 10
|
|
||||||
jne @f
|
|
||||||
call show_hide_log
|
|
||||||
jmp .still
|
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
cmp ah, 4
|
cmp ah, 4
|
||||||
jne @f
|
jne @f
|
||||||
@@ -377,15 +327,13 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
cmp byte[esi], 0
|
cmp byte[esi], 0
|
||||||
jne @b
|
jne @b
|
||||||
stdcall [ted_text_add], tedit0, tedit_buffer, ecx, ebx
|
stdcall [ted_text_add], tedit0, tedit_buffer, ecx, ebx
|
||||||
cmp [show_log],0
|
|
||||||
je .end_log_2
|
|
||||||
stdcall [ted_draw], tedit0
|
stdcall [ted_draw], tedit0
|
||||||
.end_log_2:
|
|
||||||
; write to log file
|
; write to log file
|
||||||
mov eax, [esp+36]
|
mov eax, [esp+36]
|
||||||
sub ecx, 2 ; 0a0d is not included
|
sub ecx, 2 ; 0a0d is not included
|
||||||
call write_to_file
|
call write_to_file
|
||||||
|
|
||||||
|
@@:
|
||||||
popad
|
popad
|
||||||
ret 4
|
ret 4
|
||||||
|
|
||||||
@@ -405,16 +353,13 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
;< none ;;
|
;< none ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
|
|
||||||
cmp eax, 1
|
push edx
|
||||||
jl data_loop
|
push eax
|
||||||
push edx eax
|
|
||||||
; check if any incomplete entry to be parsed
|
; check if any incomplete entry to be parsed
|
||||||
cmp byte[remote_list_buf], 0
|
cmp byte[remote_list_buf], 0
|
||||||
je .no_backlog
|
je .no_backlog
|
||||||
|
|
||||||
; find end of remote_list_buf
|
; find end of remote_list_buf
|
||||||
mov edi, remote_list_buf
|
mov edi, remote_list_buf
|
||||||
mov ecx, 1024 ;buffer size
|
|
||||||
mov al, 0
|
mov al, 0
|
||||||
repne scasb
|
repne scasb
|
||||||
; copy rest of the incomplete entry to remote_list_buf
|
; copy rest of the incomplete entry to remote_list_buf
|
||||||
@@ -479,8 +424,6 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
mov byte[edi], 0
|
mov byte[edi], 0
|
||||||
|
|
||||||
; add node to tree list
|
; add node to tree list
|
||||||
and dword[tree2.style], not 8
|
|
||||||
stdcall [tl_cur_next], tree2
|
|
||||||
cmp word[node_entry2], 'fi'
|
cmp word[node_entry2], 'fi'
|
||||||
jne @f
|
jne @f
|
||||||
stdcall [tl_node_add], tree2, 0, node_entry2
|
stdcall [tl_node_add], tree2, 0, node_entry2
|
||||||
@@ -510,9 +453,9 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
|
|
||||||
.store_last_entry:
|
.store_last_entry:
|
||||||
; find index of the last incomplete entry
|
; find index of the last incomplete entry
|
||||||
|
mov ecx, -1
|
||||||
mov eax, [esp]
|
mov eax, [esp]
|
||||||
lea edi, [buf_buffer2+eax-2]
|
lea edi, [buf_buffer2+eax-2]
|
||||||
mov ecx, eax
|
|
||||||
mov al, 0x0a
|
mov al, 0x0a
|
||||||
std
|
std
|
||||||
repne scasb
|
repne scasb
|
||||||
@@ -527,10 +470,9 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
jne @b
|
jne @b
|
||||||
|
|
||||||
.done_parsing:
|
.done_parsing:
|
||||||
stdcall [tl_cur_beg], tree2
|
|
||||||
or dword[tree2.style], 8
|
|
||||||
call .draw ; to update tree list immediately in case of "auto_list"
|
call .draw ; to update tree list immediately in case of "auto_list"
|
||||||
pop eax edx
|
pop eax
|
||||||
|
pop edx
|
||||||
jmp data_loop
|
jmp data_loop
|
||||||
|
|
||||||
; clear tree list and add ".." node before executing "LIST"
|
; clear tree list and add ".." node before executing "LIST"
|
||||||
@@ -552,7 +494,7 @@ gui: ;//////////////////////////////////////////////////////////////////////////
|
|||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
|
|
||||||
; detect abort
|
; detect abort
|
||||||
mcall SF_GET_BUTTON
|
mcall 17
|
||||||
cmp ah, 10
|
cmp ah, 10
|
||||||
je cmd_abor
|
je cmd_abor
|
||||||
|
|
||||||
@@ -636,8 +578,7 @@ fun_on_enter:
|
|||||||
cmp byte[esi], 0
|
cmp byte[esi], 0
|
||||||
jne @b
|
jne @b
|
||||||
mov word[edi], 0x000a
|
mov word[edi], 0x000a
|
||||||
mov [lbl_after_enter], cmd_stor
|
jmp cmd_stor
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; Function to call when you press [Enter]
|
; Function to call when you press [Enter]
|
||||||
@@ -650,8 +591,7 @@ fun_on_enter2:
|
|||||||
cmp dword[esi], 0x2E2E
|
cmp dword[esi], 0x2E2E
|
||||||
jne @f
|
jne @f
|
||||||
mov [auto_list], 1
|
mov [auto_list], 1
|
||||||
mov [lbl_after_enter], cmd_cdup
|
jmp cmd_cdup
|
||||||
ret
|
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
cmp word[eax], 'fo'
|
cmp word[eax], 'fo'
|
||||||
@@ -670,14 +610,12 @@ fun_on_enter2:
|
|||||||
; newline in console code
|
; newline in console code
|
||||||
cmp word[eax], 'fo'
|
cmp word[eax], 'fo'
|
||||||
je @f
|
je @f
|
||||||
mov [lbl_after_enter], cmd_retr
|
jmp cmd_retr
|
||||||
ret
|
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
stdcall [tl_info_clear], tree2
|
stdcall [tl_info_clear], tree2
|
||||||
mov [auto_list], 1
|
mov [auto_list], 1
|
||||||
mov [lbl_after_enter], cmd_cwd
|
jmp cmd_cwd
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@@ -703,7 +641,7 @@ populate_local_tree_list: ;/////////////////////////////////////////////////////
|
|||||||
jne @f
|
jne @f
|
||||||
|
|
||||||
; removes last file name from filestruct.name
|
; removes last file name from filestruct.name
|
||||||
mcall SF_CURRENT_FOLDER, SSF_GET_CF, filestruct.name,1024 ; get absolute path for cwd
|
mcall 30, 2, filestruct.name,1024 ; get absolute path for cwd
|
||||||
lea edi, [filestruct.name+eax] ; edi = pointer to the tail of file name
|
lea edi, [filestruct.name+eax] ; edi = pointer to the tail of file name
|
||||||
mov al, '/'
|
mov al, '/'
|
||||||
mov ecx, -1
|
mov ecx, -1
|
||||||
@@ -714,15 +652,15 @@ populate_local_tree_list: ;/////////////////////////////////////////////////////
|
|||||||
mov ecx, filestruct.name
|
mov ecx, filestruct.name
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
mcall SF_CURRENT_FOLDER, SSF_SET_CF ; set cwd
|
mcall 30, 1, ; set cwd
|
||||||
mcall SF_CURRENT_FOLDER, SSF_GET_CF, filestruct.name, 1024 ; get absolute path for cwd
|
mcall 30, 2, filestruct.name, 1024 ; get absolute path for cwd
|
||||||
; clear all nodes in tree list
|
; clear all nodes in tree list
|
||||||
stdcall [tl_info_clear], tree1
|
stdcall [tl_info_clear], tree1
|
||||||
mov [filestruct.offset], 0
|
mov [filestruct.offset], 0
|
||||||
|
|
||||||
; read 32 blocks
|
; read 32 blocks
|
||||||
.outer:
|
.outer:
|
||||||
mcall SF_FILE, filestruct
|
mcall 70, filestruct
|
||||||
;int3
|
;int3
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz @f
|
jz @f
|
||||||
@@ -808,16 +746,6 @@ EvSize:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
;
|
|
||||||
show_hide_log:
|
|
||||||
mov esi, 555
|
|
||||||
xor [show_log],1
|
|
||||||
jnz @f
|
|
||||||
sub esi, 160
|
|
||||||
@@:
|
|
||||||
mcall SF_CHANGE_WINDOW, -1, -1, -1
|
|
||||||
ret
|
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
filter_remote_list: ;/////////////////////////////////////////////////////////////////////////////;;
|
filter_remote_list: ;/////////////////////////////////////////////////////////////////////////////;;
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
@@ -933,133 +861,30 @@ search: ;///////////////////////////////////////////////////////////////////////
|
|||||||
pop edi esi edx ecx ebx
|
pop edi esi edx ecx ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
align 4
|
|
||||||
proc copy_icon uses ebx ecx esi edi, buf_d:dword, buf_s:dword, ind:dword
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
;> buf_d = pointer to destination buffer 24-bit
|
|
||||||
;> buf_s = pointer to source buffer 32-bit (with icons)
|
|
||||||
;> ind = icon index
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
;< eax = pointer to destination buffer + icon size
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
mov edi, [buf_d]
|
|
||||||
mov ecx, (18+ICON_LEFT_B)*ICON_TOP_B*3
|
|
||||||
mov al, 0xff
|
|
||||||
rep stosb ; make top border
|
|
||||||
; copy icon
|
|
||||||
mov esi, [ind]
|
|
||||||
imul esi, 18*18*4
|
|
||||||
add esi, [buf_s]
|
|
||||||
mov ebx, 18
|
|
||||||
.cycle0:
|
|
||||||
mov ecx, ICON_LEFT_B*3
|
|
||||||
rep stosb ; make left border
|
|
||||||
mov ecx, 18
|
|
||||||
@@:
|
|
||||||
movsw
|
|
||||||
movsb
|
|
||||||
inc esi ; skip transparent byte
|
|
||||||
loop @b
|
|
||||||
dec ebx
|
|
||||||
jnz .cycle0
|
|
||||||
mov eax, edi
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
|
|
||||||
align 4
|
|
||||||
proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
; function for generating gray icons
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
;> buf_rgb - buffer with input 24-bit color image
|
|
||||||
;> buf_g24 - buffer with output 24-bit gray image
|
|
||||||
;> pixels - number of pixels in the image
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
pushad
|
|
||||||
mov esi, [buf_rgb]
|
|
||||||
mov edi, [buf_g24]
|
|
||||||
mov ecx, [pixels]
|
|
||||||
mov ebx, 3
|
|
||||||
@@:
|
|
||||||
movzx eax, byte[esi]
|
|
||||||
movzx edx, byte[esi+1]
|
|
||||||
add eax, edx
|
|
||||||
movzx edx, byte[esi+2]
|
|
||||||
add eax, edx
|
|
||||||
xor edx, edx
|
|
||||||
div ebx
|
|
||||||
mov ah, al
|
|
||||||
mov word[edi], ax
|
|
||||||
mov byte[edi+2], al
|
|
||||||
add esi, 3
|
|
||||||
add edi, 3
|
|
||||||
loop @b
|
|
||||||
popad
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
|
|
||||||
align 4
|
|
||||||
proc copy_icon_w uses ecx esi edi, buf_d:dword, buf_s:dword, ind:dword
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
;> buf_d = pointer to destination buffer 32-bit
|
|
||||||
;> buf_s = pointer to source buffer 32-bit (with icons)
|
|
||||||
;> ind = icon index
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
;< eax = pointer to destination buffer + icon size
|
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
|
||||||
mov edi, [buf_d]
|
|
||||||
mov ecx, 18*18
|
|
||||||
mov esi, [ind]
|
|
||||||
imul esi, ecx
|
|
||||||
shl esi, 2
|
|
||||||
add esi, [buf_s]
|
|
||||||
rep movsd
|
|
||||||
mov eax, edi
|
|
||||||
|
|
||||||
mov ecx, 18*18
|
|
||||||
mov edi, [buf_d]
|
|
||||||
mov esi, [edi] ;copy transparent color
|
|
||||||
.cycle0:
|
|
||||||
cmp [edi], esi
|
|
||||||
jne @f
|
|
||||||
mov dword[edi], BT_COL
|
|
||||||
@@:
|
|
||||||
add edi, 4
|
|
||||||
loop .cycle0
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||||
|
|
||||||
;hed db 'FTP Client for KolibriOS',0
|
;hed db 'FTP Client for KolibriOS',0
|
||||||
str_change db 'Change',0
|
str_change db 'Change',0
|
||||||
str_disconnect db 'Disconnect',0
|
str_disconnect db 'Disconnect',0
|
||||||
str_show_log db 'Show log',0
|
|
||||||
str_hide_log db 'Hide log',0
|
|
||||||
str_copy db 'Copy',0
|
str_copy db 'Copy',0
|
||||||
str_mkd db 'MKD',0
|
str_mkd db 'MKD',0
|
||||||
str_dele db 'DELE',0
|
str_dele db 'DELE',0
|
||||||
str_rdir db 'RDIR',0
|
str_rdir db 'RDIR',0
|
||||||
str_rmd db 'RMD',0
|
str_rmd db 'RMD',0
|
||||||
str_abort db 'Cancel',0
|
str_abort db 'Cancel',0
|
||||||
;str_search db 'Search',0
|
str_search db 'Search',0
|
||||||
str_list db 'LIST',0
|
str_list db 'LIST',0
|
||||||
str_null db 0
|
str_null db 0
|
||||||
|
|
||||||
str_icon_18 db 'ICONS18',0
|
|
||||||
|
|
||||||
;----------------------
|
;----------------------
|
||||||
; tree list elements
|
; tree list elements
|
||||||
;----------------------
|
;----------------------
|
||||||
tree1 tree_list 64, 500, tl_list_box_mode, 18+ICON_LEFT_B, 18+ICON_TOP_B, \
|
tree1 tree_list 64, 500, tl_list_box_mode, 16, 16, \
|
||||||
0xffffff, BT_COL, 0x10000000, TLIST1_X, 105, TLIST_SZ-16, 185, 15, 4,\
|
0xffffff, BT_COL, 0x000000, TLIST1_X, 105, TLIST_SZ-16, 185, 14, 4,\
|
||||||
0, el_focus, wScr, fun_on_enter
|
0, el_focus, wScr, fun_on_enter
|
||||||
|
|
||||||
tree2 tree_list 64, 500, tl_list_box_mode, 18+ICON_LEFT_B, 18+ICON_TOP_B, \
|
tree2 tree_list 64, 500, tl_list_box_mode, 16, 16, \
|
||||||
0xffffff, BT_COL, 0x10000000, TLIST2_X, 105, TLIST_SZ-16, 185, 15, 4, \
|
0xffffff, BT_COL, 0x000000, TLIST2_X, 105, TLIST_SZ-16, 185, 14, 4, \
|
||||||
0, el_focus, wScr2, fun_on_enter2
|
0, el_focus, wScr2, fun_on_enter2
|
||||||
|
|
||||||
; editbox for mkd
|
; editbox for mkd
|
||||||
@@ -1071,7 +896,7 @@ edit_volume edit_box TLIST_SZ-60, TLIST1_X, 80, 0xffffff, 0x94AECE, 0, \
|
|||||||
0xAABBCC, 0x10000000, 99, root_dir, mouse_dd, 0
|
0xAABBCC, 0x10000000, 99, root_dir, mouse_dd, 0
|
||||||
|
|
||||||
; editbox for search
|
; editbox for search
|
||||||
edit_search edit_box TLIST_SZ-30, TLIST2_X, 22, 0xffffff, 0x94AECE, 0, \
|
edit_search edit_box TLIST_SZ-60, TLIST2_X, 22, 0xffffff, 0x94AECE, 0, \
|
||||||
0xAABBCC, 0x10000000, 99, filter,mouse_dd, 0
|
0xAABBCC, 0x10000000, 99, filter,mouse_dd, 0
|
||||||
|
|
||||||
; A subsidiary structure for scrolling
|
; A subsidiary structure for scrolling
|
||||||
|
@@ -27,7 +27,7 @@ login_gui: ;////////////////////////////////////////////////////////////////////
|
|||||||
.get_username:
|
.get_username:
|
||||||
; in case of error when either login_gui.server_addr or
|
; in case of error when either login_gui.server_addr or
|
||||||
; login_gui.get_username is called, should resize window
|
; login_gui.get_username is called, should resize window
|
||||||
mcall SF_CHANGE_WINDOW, WIN_X, WIN_Y, WIN_W, WIN_H ; resize to login gui window size
|
mcall 67, WIN_X, WIN_Y, WIN_W, WIN_H ; resize to login gui window size
|
||||||
|
|
||||||
.redraw:
|
.redraw:
|
||||||
call .draw
|
call .draw
|
||||||
@@ -44,22 +44,22 @@ login_gui: ;////////////////////////////////////////////////////////////////////
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
.draw:
|
.draw:
|
||||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
mcall 12, 1
|
||||||
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, 40
|
mcall 48, 3, sc, 40
|
||||||
edit_boxes_set_sys_color edit_usr,editboxes_end,sc
|
edit_boxes_set_sys_color edit_usr,editboxes_end,sc
|
||||||
mov edx, 0x34000000
|
mov edx, 0x34000000
|
||||||
or edx, [sc.work]
|
or edx, [sc.work]
|
||||||
mcall SF_CREATE_WINDOW, <WIN_X,WIN_W>, <WIN_Y,WIN_H>, , 0x805080DD, str_title
|
mcall 0, <WIN_X,WIN_W>, <WIN_Y,WIN_H>, , 0x805080DD, str_title
|
||||||
|
|
||||||
call .draw_editboxes
|
call .draw_editboxes
|
||||||
|
|
||||||
; draw "connect" button
|
; draw "connect" button
|
||||||
mcall SF_DEFINE_BUTTON, <162,65>, <150,25>, 2, [sc.work_button]
|
mcall 8, <162,65>, <150,25>, 2, [sc.work_button]
|
||||||
|
|
||||||
; draw strings
|
; draw strings
|
||||||
mov ecx, 0x90000000
|
mov ecx, 0x90000000
|
||||||
or ecx, [sc.work_text]
|
or ecx, [sc.work_text]
|
||||||
mcall SF_DRAW_TEXT, <3, 8>, , gui_str_usr
|
mcall 4, <3, 8>, , gui_str_usr
|
||||||
mcall , <3,PAD*1+8>, , gui_str_pass
|
mcall , <3,PAD*1+8>, , gui_str_pass
|
||||||
mcall , <3,PAD*2+8>, , gui_str_server
|
mcall , <3,PAD*2+8>, , gui_str_server
|
||||||
mcall , <3,PAD*3+8>, , gui_str_port
|
mcall , <3,PAD*3+8>, , gui_str_port
|
||||||
@@ -74,12 +74,12 @@ login_gui: ;////////////////////////////////////////////////////////////////////
|
|||||||
mcall
|
mcall
|
||||||
mov [str_error_addr], gui_str_null ; reset error string address
|
mov [str_error_addr], gui_str_null ; reset error string address
|
||||||
|
|
||||||
mcall SF_REDRAW, SSF_END_DRAW
|
mcall 12, 2
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
.still:
|
.still:
|
||||||
mcall SF_WAIT_EVENT
|
mcall 10 ; wait for event
|
||||||
dec eax
|
dec eax
|
||||||
jz .redraw
|
jz .redraw
|
||||||
dec eax
|
dec eax
|
||||||
@@ -96,7 +96,7 @@ login_gui: ;////////////////////////////////////////////////////////////////////
|
|||||||
jmp .still
|
jmp .still
|
||||||
|
|
||||||
.button:
|
.button:
|
||||||
mcall SF_GET_BUTTON
|
mcall 17
|
||||||
|
|
||||||
dec ah
|
dec ah
|
||||||
jz .exit
|
jz .exit
|
||||||
@@ -107,7 +107,7 @@ login_gui: ;////////////////////////////////////////////////////////////////////
|
|||||||
jmp .still
|
jmp .still
|
||||||
|
|
||||||
.key:
|
.key:
|
||||||
mcall SF_GET_KEY
|
mcall 2
|
||||||
|
|
||||||
cmp ah,13
|
cmp ah,13
|
||||||
je .connect
|
je .connect
|
||||||
@@ -124,12 +124,7 @@ login_gui: ;////////////////////////////////////////////////////////////////////
|
|||||||
jmp .still
|
jmp .still
|
||||||
|
|
||||||
.connect:
|
.connect:
|
||||||
mov esi, 555
|
mcall 67, 35, 20, 830, 555 ; resize to main gui window's coordinates
|
||||||
or [show_log],0
|
|
||||||
jnz @f
|
|
||||||
sub esi, 160
|
|
||||||
@@:
|
|
||||||
mcall SF_CHANGE_WINDOW, 35, 20, 830 ; resize to main gui window's coordinates
|
|
||||||
cmp [param_server_addr], 0
|
cmp [param_server_addr], 0
|
||||||
jne gui.main
|
jne gui.main
|
||||||
|
|
||||||
|
@@ -190,11 +190,10 @@ data_loop:
|
|||||||
mov [filestruct.ptr], buf_buffer2
|
mov [filestruct.ptr], buf_buffer2
|
||||||
mov [filestruct.size], eax
|
mov [filestruct.size], eax
|
||||||
push eax
|
push eax
|
||||||
mcall SF_FILE, filestruct
|
mcall 70, filestruct
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz @f
|
jz @f
|
||||||
call error_fs
|
call error_fs
|
||||||
add esp, 4 ; fix stack
|
|
||||||
jmp close_datacon
|
jmp close_datacon
|
||||||
@@:
|
@@:
|
||||||
pop eax
|
pop eax
|
||||||
@@ -205,7 +204,7 @@ data_loop:
|
|||||||
|
|
||||||
; storing, send all data
|
; storing, send all data
|
||||||
.stor:
|
.stor:
|
||||||
mcall SF_FILE, filestruct
|
mcall 70, filestruct
|
||||||
cmp eax, 6 ; end of file
|
cmp eax, 6 ; end of file
|
||||||
je .last_call
|
je .last_call
|
||||||
test eax, eax ; error
|
test eax, eax ; error
|
||||||
@@ -245,7 +244,7 @@ data_loop:
|
|||||||
mov ecx, eax ; eax is size of buffer received
|
mov ecx, eax ; eax is size of buffer received
|
||||||
inc ecx
|
inc ecx
|
||||||
add ecx, [size_fname] ; added old size to form new required size
|
add ecx, [size_fname] ; added old size to form new required size
|
||||||
mcall SF_SYS_MISC, SSF_MEM_REALLOC, , [ptr_fname]
|
mcall 68, 20, , [ptr_fname] ; realloc
|
||||||
test eax, eax
|
test eax, eax
|
||||||
je error_heap
|
je error_heap
|
||||||
mov [ptr_fname], eax ; eax contains the new block now
|
mov [ptr_fname], eax ; eax contains the new block now
|
||||||
|
@@ -82,13 +82,13 @@ cmd_retr:
|
|||||||
mov ecx, 256-5
|
mov ecx, 256-5
|
||||||
call set_filename
|
call set_filename
|
||||||
|
|
||||||
mov [filestruct.subfn], SSF_CREATE_FILE ; create/rewrite file
|
mov [filestruct.subfn], 2 ; create/rewrite file
|
||||||
mov [filestruct.offset], 0
|
mov [filestruct.offset], 0
|
||||||
mov [filestruct.offset+4], 0
|
mov [filestruct.offset+4], 0
|
||||||
mov [filestruct.size], 0
|
mov [filestruct.size], 0
|
||||||
mov [filestruct.ptr], 0
|
mov [filestruct.ptr], 0
|
||||||
|
|
||||||
mcall SF_FILE, filestruct
|
mcall 70, filestruct
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz @f
|
jz @f
|
||||||
call error_fs
|
call error_fs
|
||||||
@@ -96,7 +96,7 @@ cmd_retr:
|
|||||||
@@:
|
@@:
|
||||||
; Prepare to write to the file
|
; Prepare to write to the file
|
||||||
|
|
||||||
mov [filestruct.subfn], SSF_WRITE_FILE
|
mov [filestruct.subfn], 3 ; write to file
|
||||||
mov [operation], OPERATION_RETR
|
mov [operation], OPERATION_RETR
|
||||||
|
|
||||||
; Request the file from server
|
; Request the file from server
|
||||||
@@ -138,7 +138,7 @@ cmd_stor:
|
|||||||
mov [operation], OPERATION_STOR
|
mov [operation], OPERATION_STOR
|
||||||
|
|
||||||
; get file size
|
; get file size
|
||||||
mov [filestruct.subfn], SSF_GET_INFO
|
mov [filestruct.subfn], 5
|
||||||
mov [filestruct.offset], 0
|
mov [filestruct.offset], 0
|
||||||
mov [filestruct.offset+4], 0
|
mov [filestruct.offset+4], 0
|
||||||
mov [filestruct.size], 0
|
mov [filestruct.size], 0
|
||||||
@@ -148,12 +148,12 @@ cmd_stor:
|
|||||||
mov ecx, 256-5
|
mov ecx, 256-5
|
||||||
call set_filename
|
call set_filename
|
||||||
|
|
||||||
mcall SF_FILE, filestruct
|
mcall 70, filestruct
|
||||||
|
|
||||||
mov eax, dword[folder_buf+32] ; supports file size upto 4GB
|
mov eax, dword[folder_buf+32] ; supports file size upto 4GB
|
||||||
mov [file_size], eax
|
mov [file_size], eax
|
||||||
|
|
||||||
mov [filestruct.subfn], SSF_READ_FILE
|
mov [filestruct.subfn], 0 ; read file
|
||||||
; mov [filestruct.offset], 0
|
; mov [filestruct.offset], 0
|
||||||
; mov [filestruct.offset+4], 0
|
; mov [filestruct.offset+4], 0
|
||||||
mov [filestruct.size], BUFFERSIZE
|
mov [filestruct.size], BUFFERSIZE
|
||||||
@@ -191,12 +191,12 @@ cmd_lcwd:
|
|||||||
mov byte[esi-1], 0
|
mov byte[esi-1], 0
|
||||||
|
|
||||||
; check whether entered path is valid (folder exists)
|
; check whether entered path is valid (folder exists)
|
||||||
mov [filestruct2.subfn], SSF_GET_INFO
|
mov [filestruct2.subfn], 5
|
||||||
mov [filestruct2.offset], 0
|
mov [filestruct2.offset], 0
|
||||||
mov [filestruct2.size], 0
|
mov [filestruct2.size], 0
|
||||||
mov [filestruct2.ptr], folder_buf
|
mov [filestruct2.ptr], folder_buf
|
||||||
mov [filestruct2.name], buf_cmd+5
|
mov [filestruct2.name], buf_cmd+5
|
||||||
mcall SF_FILE, filestruct2
|
mcall 70, filestruct2
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz @f
|
jz @f
|
||||||
cmp eax, 2
|
cmp eax, 2
|
||||||
@@ -205,10 +205,10 @@ cmd_lcwd:
|
|||||||
jmp wait_for_usercommand
|
jmp wait_for_usercommand
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
mcall SF_CURRENT_FOLDER, SSF_SET_CF, buf_cmd+5 ; set working directory
|
mcall 30, 1, buf_cmd+5 ; set working directory
|
||||||
|
|
||||||
.print:
|
.print:
|
||||||
mcall SF_CURRENT_FOLDER, SSF_GET_CF, buf_cmd, 256 ; and read it again
|
mcall 30, 2, buf_cmd, 256 ; and read it again
|
||||||
icall eax, interface_addr, interface.print, str_lcwd, buf_cmd, str_newline
|
icall eax, interface_addr, interface.print, str_lcwd, buf_cmd, str_newline
|
||||||
|
|
||||||
jmp wait_for_usercommand
|
jmp wait_for_usercommand
|
||||||
|
@@ -1,5 +1,2 @@
|
|||||||
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")
|
tup.rule("calcplus.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "calcplus")
|
||||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
|
||||||
tup.rule("calcplus.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "%B")
|
|
||||||
|
|
||||||
|
2
programs/other/calcplus/build.bat
Normal file
2
programs/other/calcplus/build.bat
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
@fasm calcplus.asm calc+
|
||||||
|
@pause
|
@@ -1,171 +1,125 @@
|
|||||||
; SPDX-License-Identifier: GPL-2.0-only
|
VERSION equ "0.5"
|
||||||
;
|
|
||||||
; Calc+ - Multifunctional calculator
|
|
||||||
; Copyright (C) 2014-2025 KolibriOS team
|
|
||||||
;
|
|
||||||
; Contributor eAndrew - Main code
|
|
||||||
; Contributor Leency - Code refactoring and UX/UI update
|
|
||||||
; Contributor Burer - Code refactoring and UI update
|
|
||||||
|
|
||||||
; ====================================================================
|
use32
|
||||||
|
org 0
|
||||||
|
db 'MENUET01'
|
||||||
|
dd 1, main, dataend, memory, stacktop, 0, 0
|
||||||
|
|
||||||
use32
|
include "../../proc32.inc"
|
||||||
org 0
|
include "../../macros.inc"
|
||||||
|
include "../../dll.inc"
|
||||||
|
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
|
||||||
|
; include "../../debug.inc"
|
||||||
|
include "parser.inc"
|
||||||
|
|
||||||
db 'MENUET01'
|
;===============================
|
||||||
dd 1
|
|
||||||
dd START
|
|
||||||
dd I_END
|
|
||||||
dd MEM
|
|
||||||
dd STACKTOP
|
|
||||||
dd 0, 0
|
|
||||||
|
|
||||||
; ====================================================================
|
LIST_ITEM_SIZE equ 16
|
||||||
|
LIST_ITEM_COUNT equ 6
|
||||||
|
LIST_SIZE equ LIST_ITEM_SIZE * LIST_ITEM_COUNT
|
||||||
|
LIST_ITEM_COLOR1 equ dword [scn.btn_face]
|
||||||
|
LIST_ITEM_COLOR2 equ dword [scn.win_face]
|
||||||
|
LIST_ITEM_TEXT1 equ dword [scn.btn_text]
|
||||||
|
LIST_ITEM_TEXT2 equ dword [scn.win_text]
|
||||||
|
LIST_ITEM_Y equ LIST_ITEM_SIZE / 2 - 3
|
||||||
|
|
||||||
include "../../proc32.inc"
|
KEYB_SIZE equ 140
|
||||||
include "../../macros.inc"
|
|
||||||
include "../../KOSfuncs.inc"
|
|
||||||
include "../../encoding.inc"
|
|
||||||
include "../../dll.inc"
|
|
||||||
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
|
|
||||||
include "parser.inc"
|
|
||||||
|
|
||||||
imports:
|
sz_cont db "Keyboard ", 0x10
|
||||||
|
sz_head db "Calc+ v", VERSION, 0
|
||||||
|
btn_clr db ""
|
||||||
|
buttons db "|%^*/-+)(=7894561230"
|
||||||
|
edb1 edit_box 0, 8, 12, 0, 0, 0, 0, 0, 480, \
|
||||||
|
exp, group, ed_always_focus + ed_focus, 0, 0
|
||||||
|
|
||||||
|
imports:
|
||||||
library gui, "box_lib.obj"
|
library gui, "box_lib.obj"
|
||||||
import gui, editbox.draw, "edit_box", \
|
import gui, editbox.draw, "edit_box", \
|
||||||
editbox.key, "edit_box_key", \
|
editbox.key, "edit_box_key", \
|
||||||
editbox.mouse, "edit_box_mouse"
|
editbox.mouse, "edit_box_mouse"
|
||||||
|
|
||||||
; ====================================================================
|
;===============================
|
||||||
|
|
||||||
LIST_X = 8
|
main:
|
||||||
LIST_Y = 47
|
mov [ans.buffer], dword "= 0"
|
||||||
LIST_ITEM_H = 26
|
mov [ans.size], 3 * 6 + 9
|
||||||
LIST_ITEM_W = 295
|
|
||||||
LIST_ITEM_COUNT = 8
|
|
||||||
LIST_H = LIST_ITEM_H * LIST_ITEM_COUNT
|
|
||||||
LIST_TEXT_Y = LIST_ITEM_H / 2 - 8
|
|
||||||
|
|
||||||
KEYB_BTN_W = 37
|
mcall 40, 100111b
|
||||||
KEYB_BTN_H = 37
|
; mcall 48, 3, scn, 192
|
||||||
GAP = 5
|
|
||||||
|
|
||||||
KEYBOARD_X = LIST_ITEM_W + 16
|
|
||||||
KEYBOARD_Y = LIST_Y
|
|
||||||
KEYBOARD_W = 190
|
|
||||||
|
|
||||||
LIST_ITEM_TEXT1 equ dword [sc.work_text]
|
|
||||||
LIST_ITEM_TEXT2 equ dword [sc.work_text]
|
|
||||||
|
|
||||||
WIN_X = 200
|
|
||||||
WIN_Y = 200
|
|
||||||
WIN_W = LIST_ITEM_W + KEYBOARD_W + 7
|
|
||||||
WIN_H = LIST_H + 60
|
|
||||||
|
|
||||||
sz_head db "Calc+", 0
|
|
||||||
btn_clr db "" ; "Enter" symbol, curved arrow in input area
|
|
||||||
buttons db "|%^*/-+)(=7894561230"
|
|
||||||
edb1 edit_box 0, 14, 12, 0xFFFFFF, 0x94AECE, 0xFFC90E, 0xCACACA, 0x10000000, \
|
|
||||||
480, exp, group, ed_always_focus + ed_focus, 0, 0
|
|
||||||
|
|
||||||
; ====================================================================
|
|
||||||
|
|
||||||
START:
|
|
||||||
mov [ans.buffer], dword " = 0"
|
|
||||||
mov [ans.size], 4 * 8 + 9
|
|
||||||
|
|
||||||
mcall SF_SET_EVENTS_MASK, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE
|
|
||||||
|
|
||||||
m2m [edb1.color], [scn.gui_face]
|
m2m [edb1.color], [scn.gui_face]
|
||||||
|
m2m [edb1.shift_color], [scn.gui_select]
|
||||||
|
m2m [edb1.focus_border_color], [scn.gui_face]
|
||||||
|
m2m [edb1.text_color], [scn.gui_text]
|
||||||
|
|
||||||
mcall SF_SYS_MISC, SSF_HEAP_INIT
|
mcall 68, 11
|
||||||
stdcall dll.Load, imports
|
stdcall dll.Load, imports
|
||||||
|
|
||||||
; ====================================================================
|
;----------------------
|
||||||
|
|
||||||
update:
|
update:
|
||||||
mcall SF_WAIT_EVENT_TIMEOUT, 5
|
mcall 23, 5
|
||||||
|
|
||||||
cmp eax, EV_REDRAW
|
cmp eax, EV_REDRAW
|
||||||
je ev_redraw
|
je ev_redraw
|
||||||
|
|
||||||
cmp eax, EV_KEY
|
cmp eax, EV_KEY
|
||||||
je ev_key
|
je ev_key
|
||||||
|
|
||||||
cmp eax, EV_BUTTON
|
cmp eax, EV_BUTTON
|
||||||
je ev_button
|
je ev_button
|
||||||
|
|
||||||
cmp eax, EV_MOUSE
|
cmp eax, EV_MOUSE
|
||||||
je ev_mouse
|
je ev_mouse
|
||||||
|
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
; ====================================================================
|
;----------------------
|
||||||
|
|
||||||
ev_redraw:
|
ev_redraw:
|
||||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
mcall 12, 1
|
||||||
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
|
|
||||||
|
|
||||||
; WINDOW
|
; WINDOW
|
||||||
mov edx, [sc.work]
|
mov edx, [scn.win_face]
|
||||||
or edx, 0x34 shl 24
|
or edx, 0x34 shl 24
|
||||||
|
mcall 0, <100, 236 + 100 - 50 - 25>, <100, 66 + LIST_SIZE>, , , sz_head
|
||||||
|
|
||||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
; TOOLBAR
|
||||||
mov ecx, WIN_Y shl 16 + WIN_H
|
mov ebx, 120 shl 16 + 64
|
||||||
add ecx, eax
|
mcall 8, , <-17, 12>, 2 + 1 shl 30
|
||||||
|
add ebx, 4 shl 16 - (64 + 14)
|
||||||
mcall SF_GET_SCREEN_SIZE
|
mcall 4, , [scn.win_title], sz_cont, 10
|
||||||
shr eax, 16
|
|
||||||
mov ebx, eax
|
|
||||||
sub ebx, WIN_W
|
|
||||||
shr ebx, 1
|
|
||||||
|
|
||||||
mcall 0, <ebx, WIN_W>, , , , sz_head
|
|
||||||
|
|
||||||
; CONTENT
|
; CONTENT
|
||||||
call draw_textbox
|
call draw_textbox
|
||||||
call draw_keyb
|
call draw_keyb
|
||||||
call draw_list
|
call draw_list
|
||||||
|
|
||||||
mcall SF_REDRAW, SSF_END_DRAW
|
mcall 12, 2
|
||||||
|
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
; ====================================================================
|
;----------------------
|
||||||
|
|
||||||
ev_key:
|
|
||||||
mcall SF_GET_KEY
|
|
||||||
|
|
||||||
|
ev_key:
|
||||||
|
mcall 2
|
||||||
cmp ah, 27
|
cmp ah, 27
|
||||||
je exit
|
je exit
|
||||||
|
|
||||||
cmp ah, 13
|
cmp ah, 13
|
||||||
je calc
|
je calc
|
||||||
|
|
||||||
invoke editbox.key, edb1
|
invoke editbox.key, edb1
|
||||||
|
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
; ====================================================================
|
;----------------------
|
||||||
|
|
||||||
ev_button:
|
ev_button:
|
||||||
mcall SF_GET_BUTTON
|
mcall 17
|
||||||
|
|
||||||
; EXIT
|
; EXIT
|
||||||
cmp ah, 1
|
cmp ah, 1
|
||||||
je exit
|
je exit
|
||||||
|
|
||||||
cmp ah, 250
|
|
||||||
jne @f
|
|
||||||
mcall SF_FILE, f70_calc
|
|
||||||
jmp update
|
|
||||||
|
|
||||||
; DELETE
|
; DELETE
|
||||||
@@:
|
|
||||||
cmp ah, 4
|
cmp ah, 4
|
||||||
jne .not_del
|
jne .not_del
|
||||||
|
|
||||||
cmp [edb1.pos], 0
|
cmp [edb1.pos], 0
|
||||||
je update
|
je update
|
||||||
mov eax, exp
|
mov eax, exp
|
||||||
@@ -174,7 +128,6 @@ ev_button:
|
|||||||
mov ebx, exp
|
mov ebx, exp
|
||||||
add ebx, [edb1.size]
|
add ebx, [edb1.size]
|
||||||
inc ebx
|
inc ebx
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
cmp eax, ebx
|
cmp eax, ebx
|
||||||
je @f
|
je @f
|
||||||
@@ -182,15 +135,32 @@ ev_button:
|
|||||||
mov [eax], cl
|
mov [eax], cl
|
||||||
inc eax
|
inc eax
|
||||||
jmp @b
|
jmp @b
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
dec [edb1.pos]
|
dec [edb1.pos]
|
||||||
dec [edb1.size]
|
dec [edb1.size]
|
||||||
m2m [edb1.shift], [edb1.pos]
|
m2m [edb1.shift], [edb1.pos]
|
||||||
jmp .redraw
|
jmp .redraw
|
||||||
|
|
||||||
.not_del:
|
.not_del:
|
||||||
|
|
||||||
|
; SHOW/HIDE KEYBOARD
|
||||||
|
cmp ah, 2
|
||||||
|
jne .not_keyb
|
||||||
|
|
||||||
|
cmp [keyb], byte 0
|
||||||
|
je .open
|
||||||
|
|
||||||
|
mov [keyb], 0
|
||||||
|
mov [sz_cont + 9], byte 0x10
|
||||||
|
mcall 67, -1, -1, 286 - 25, -1
|
||||||
|
jmp update
|
||||||
|
|
||||||
|
.open:
|
||||||
|
mov [keyb], 1
|
||||||
|
mov [sz_cont + 9], byte 0x11
|
||||||
|
mcall 67, -1, -1, 286 - 25 + KEYB_SIZE, -1
|
||||||
|
jmp update
|
||||||
|
.not_keyb:
|
||||||
|
|
||||||
; CALCULATE
|
; CALCULATE
|
||||||
cmp ah, 19
|
cmp ah, 19
|
||||||
je calc
|
je calc
|
||||||
@@ -206,18 +176,11 @@ ev_button:
|
|||||||
add ebx, 482
|
add ebx, 482
|
||||||
stdcall str_len, ebx
|
stdcall str_len, ebx
|
||||||
|
|
||||||
; skip first (space) character
|
|
||||||
test eax, eax
|
|
||||||
jz .redraw
|
|
||||||
dec eax
|
|
||||||
inc ebx
|
|
||||||
|
|
||||||
mov edx, exp
|
mov edx, exp
|
||||||
add edx, [edb1.size]
|
add edx, [edb1.size]
|
||||||
add edx, eax
|
add edx, eax
|
||||||
mov edi, exp
|
mov edi, exp
|
||||||
add edi, [edb1.pos]
|
add edi, [edb1.pos]
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
cmp edx, edi
|
cmp edx, edi
|
||||||
je @f
|
je @f
|
||||||
@@ -229,7 +192,6 @@ ev_button:
|
|||||||
pop eax
|
pop eax
|
||||||
dec edx
|
dec edx
|
||||||
jmp @b
|
jmp @b
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
add [edb1.size], eax
|
add [edb1.size], eax
|
||||||
|
|
||||||
@@ -243,10 +205,9 @@ ev_button:
|
|||||||
dec eax
|
dec eax
|
||||||
inc [edb1.pos]
|
inc [edb1.pos]
|
||||||
jmp @b
|
jmp @b
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
jmp .redraw
|
|
||||||
|
|
||||||
|
jmp .redraw
|
||||||
.not_list:
|
.not_list:
|
||||||
|
|
||||||
; KEYBOARD
|
; KEYBOARD
|
||||||
@@ -263,7 +224,6 @@ ev_button:
|
|||||||
cmp dh, 30
|
cmp dh, 30
|
||||||
jl @f
|
jl @f
|
||||||
add ebx, 2
|
add ebx, 2
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
cmp ebx, ecx
|
cmp ebx, ecx
|
||||||
je @f
|
je @f
|
||||||
@@ -271,8 +231,8 @@ ev_button:
|
|||||||
mov [ebx], dl
|
mov [ebx], dl
|
||||||
dec ebx
|
dec ebx
|
||||||
jmp @b
|
jmp @b
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
movzx eax, dh
|
movzx eax, dh
|
||||||
add eax, buttons
|
add eax, buttons
|
||||||
sub eax, 10
|
sub eax, 10
|
||||||
@@ -285,38 +245,37 @@ ev_button:
|
|||||||
jl @f
|
jl @f
|
||||||
add [edb1.size], 2
|
add [edb1.size], 2
|
||||||
add [edb1.pos], 2
|
add [edb1.pos], 2
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
.redraw:
|
.redraw:
|
||||||
call draw_textbox
|
call draw_textbox
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
; ====================================================================
|
;----------------------
|
||||||
|
|
||||||
ev_mouse:
|
ev_mouse:
|
||||||
mcall SF_GET_KEY
|
mcall 2
|
||||||
|
|
||||||
invoke editbox.mouse, edb1
|
invoke editbox.mouse, edb1
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
; ====================================================================
|
;----------------------
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
mcall SF_TERMINATE_PROCESS
|
mcall -1
|
||||||
|
|
||||||
; ====================================================================
|
;----------------------
|
||||||
|
|
||||||
calc:
|
calc:
|
||||||
stdcall parse
|
stdcall parse
|
||||||
cmp [error_n], 0
|
cmp [error_n], 0
|
||||||
jne .error
|
jne .error
|
||||||
|
|
||||||
mov [ans.buffer], dword " = "
|
mov [ans.buffer], word "= "
|
||||||
|
|
||||||
stdcall convert_to_str, eax, ans.buffer + 3
|
stdcall convert_to_str, eax, ans.buffer + 2
|
||||||
add eax, 3
|
add eax, 2
|
||||||
mov edi, eax
|
mov edi, eax
|
||||||
imul eax, 8 ; char_w
|
imul eax, 6
|
||||||
add eax, 9
|
add eax, 9
|
||||||
mov [ans.size], eax
|
mov [ans.size], eax
|
||||||
|
|
||||||
@@ -324,7 +283,6 @@ calc:
|
|||||||
mov ecx, LIST_ITEM_COUNT - 1
|
mov ecx, LIST_ITEM_COUNT - 1
|
||||||
mov eax, history
|
mov eax, history
|
||||||
add eax, (LIST_ITEM_COUNT - 1) * 512
|
add eax, (LIST_ITEM_COUNT - 1) * 512
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
mov ebx, eax
|
mov ebx, eax
|
||||||
sub ebx, 512
|
sub ebx, 512
|
||||||
@@ -343,6 +301,7 @@ calc:
|
|||||||
stdcall str_cpy, ans.buffer, history + 480
|
stdcall str_cpy, ans.buffer, history + 480
|
||||||
mov esi, [ans.size]
|
mov esi, [ans.size]
|
||||||
mov dword[history + 508], esi
|
mov dword[history + 508], esi
|
||||||
|
not [his_even]
|
||||||
|
|
||||||
; Check length
|
; Check length
|
||||||
mov esi, 37
|
mov esi, 37
|
||||||
@@ -360,6 +319,7 @@ calc:
|
|||||||
jmp .redraw
|
jmp .redraw
|
||||||
|
|
||||||
; ERRORS
|
; ERRORS
|
||||||
|
|
||||||
.error:
|
.error:
|
||||||
cmp [error_n], 1
|
cmp [error_n], 1
|
||||||
je .err_1
|
je .err_1
|
||||||
@@ -370,7 +330,7 @@ calc:
|
|||||||
mov [ans.buffer + 4], dword "cted"
|
mov [ans.buffer + 4], dword "cted"
|
||||||
mov [ans.buffer + 8], dword " ')'"
|
mov [ans.buffer + 8], dword " ')'"
|
||||||
mov [ans.buffer + 12], byte 0
|
mov [ans.buffer + 12], byte 0
|
||||||
mov [ans.size], 105
|
mov [ans.size], 81
|
||||||
|
|
||||||
cmp [error_n], 2
|
cmp [error_n], 2
|
||||||
je .redraw
|
je .redraw
|
||||||
@@ -378,222 +338,213 @@ calc:
|
|||||||
je .err_3
|
je .err_3
|
||||||
cmp [error_n], 5
|
cmp [error_n], 5
|
||||||
je .err_5
|
je .err_5
|
||||||
|
|
||||||
.err_1:
|
.err_1:
|
||||||
mov [ans.buffer + 0], dword "Div."
|
mov [ans.buffer + 0], dword "Div."
|
||||||
mov [ans.buffer + 4], dword " by "
|
mov [ans.buffer + 4], dword " by "
|
||||||
mov [ans.buffer + 8], byte "0"
|
mov [ans.buffer + 8], byte "0"
|
||||||
mov [ans.buffer + 9], byte 0
|
mov [ans.buffer + 9], byte 0
|
||||||
mov [ans.size], 81
|
mov [ans.size], 63
|
||||||
jmp .redraw
|
jmp .redraw
|
||||||
|
|
||||||
.err_4:
|
.err_4:
|
||||||
mov [ans.buffer + 0], dword "Inpu"
|
mov [ans.buffer + 0], dword "Inpu"
|
||||||
mov [ans.buffer + 4], dword "t er"
|
mov [ans.buffer + 4], dword "t er"
|
||||||
mov [ans.buffer + 8], dword "rror"
|
mov [ans.buffer + 8], dword "rror"
|
||||||
mov [ans.buffer + 12], byte 0
|
mov [ans.buffer + 12], byte 0
|
||||||
mov [ans.size], 105
|
mov [ans.size], 81
|
||||||
jmp .redraw
|
jmp .redraw
|
||||||
|
|
||||||
.err_3:
|
.err_3:
|
||||||
mov [ans.buffer + 10], byte "("
|
mov [ans.buffer + 10], byte "("
|
||||||
jmp .redraw
|
jmp .redraw
|
||||||
|
|
||||||
.err_5:
|
.err_5:
|
||||||
mov [ans.buffer + 10], byte "|"
|
mov [ans.buffer + 10], byte "|"
|
||||||
jmp .redraw
|
jmp .redraw
|
||||||
|
|
||||||
.redraw:
|
.redraw:
|
||||||
|
|
||||||
call draw_textbox
|
call draw_textbox
|
||||||
call draw_list
|
call draw_list
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
; ====================================================================
|
;----------------------
|
||||||
|
|
||||||
proc draw_textbox
|
proc draw_button, x, y
|
||||||
|
mcall 8, <[x], 30>, <[y], 21>, [but_id], [but_c]
|
||||||
; border
|
|
||||||
mcall SF_DRAW_RECT, <LIST_X, LIST_ITEM_W>, < 8, 30>, [sc.work_graph]
|
|
||||||
|
|
||||||
; background
|
|
||||||
mov edx, [scn.gui_face]
|
|
||||||
cmp [error_n], 0
|
|
||||||
je @f
|
|
||||||
mov edx, 0xFFAAAA
|
|
||||||
|
|
||||||
@@:
|
|
||||||
mcall SF_DRAW_RECT, <LIST_X + 1, LIST_ITEM_W - 2>, < 9, 28>
|
|
||||||
mcall , <LIST_X + 1, LIST_ITEM_W - 2>, < 9, 1>, [scn.gui_tb_in_shd]
|
|
||||||
mcall , <LIST_X + 1, 1 >, < 10, 27>
|
|
||||||
|
|
||||||
mov ebx, LIST_X + LIST_ITEM_W - 12
|
|
||||||
sub ebx, [ans.size]
|
|
||||||
shl ebx, 16
|
|
||||||
add ebx, 16
|
|
||||||
mov ecx, [scn.gui_intext]
|
|
||||||
add ecx, 0x10000000
|
|
||||||
or ecx, 1 shl 31
|
|
||||||
mcall SF_DRAW_TEXT, , , ans.buffer
|
|
||||||
|
|
||||||
mcall , <LIST_ITEM_W - 8, 19>, [scn.gui_intext], btn_clr, 1
|
|
||||||
add ebx, 1 shl 16
|
|
||||||
mcall
|
|
||||||
|
|
||||||
mcall SF_DEFINE_BUTTON, <LIST_ITEM_W - 14, 17>, <9, 27>, 4 + BT_HIDE
|
|
||||||
|
|
||||||
mov ebx, LIST_ITEM_W - 18
|
|
||||||
sub ebx, [ans.size]
|
|
||||||
cmp ebx, 24
|
|
||||||
jg @f
|
|
||||||
mov ebx, 24
|
|
||||||
|
|
||||||
@@:
|
|
||||||
mov [edb1.width], ebx
|
|
||||||
m2m [edb1.color] , [scn.gui_face]
|
|
||||||
m2m [edb1.focus_border_color], [scn.gui_face]
|
|
||||||
cmp [error_n], 0
|
|
||||||
je @f
|
|
||||||
mov [edb1.color] , 0x00FFAAAA
|
|
||||||
mov [edb1.focus_border_color], 0x00FFAAAA
|
|
||||||
|
|
||||||
@@:
|
|
||||||
invoke editbox.draw, edb1
|
|
||||||
ret
|
|
||||||
|
|
||||||
endp
|
|
||||||
|
|
||||||
; ====================================================================
|
|
||||||
|
|
||||||
proc draw_button, x, y
|
|
||||||
|
|
||||||
mcall SF_DEFINE_BUTTON, <[x], KEYB_BTN_W>, <[y], KEYB_BTN_H>, [but_id], [but_c]
|
|
||||||
|
|
||||||
mov ebx, [x]
|
mov ebx, [x]
|
||||||
add ebx, KEYB_BTN_W/2-4
|
mov esi, [txt_size]
|
||||||
|
imul esi, 3
|
||||||
|
mov edi, 16
|
||||||
|
sub edi, esi
|
||||||
|
add ebx, edi
|
||||||
shl ebx, 16
|
shl ebx, 16
|
||||||
add ebx, [y]
|
add ebx, [y]
|
||||||
add ebx, KEYB_BTN_H/2 - 6
|
add ebx, 7
|
||||||
or [but_tc], 0x01000000 ; use bigger font
|
mcall 4, , [but_tc], [txt_id], [txt_size]
|
||||||
mcall SF_DRAW_TEXT, , [but_tc], [txt_id], [txt_size]
|
|
||||||
|
|
||||||
mov eax, [txt_size]
|
mov eax, [txt_size]
|
||||||
add [txt_id], eax
|
add [txt_id], eax
|
||||||
inc dword [but_id]
|
inc dword [but_id]
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
endp
|
;----------------------
|
||||||
|
|
||||||
; ====================================================================
|
proc draw_textbox
|
||||||
|
mcall 13, <4, 320 - 50 - 25>, < 8, 23>, [scn.gui_frame]
|
||||||
|
mov edx, [scn.gui_face]
|
||||||
|
cmp [error_n], 0
|
||||||
|
je @f
|
||||||
|
mov edx, 0xFFAAAA
|
||||||
|
@@:
|
||||||
|
mcall 13, < 5, 318 - 50 - 25>, < 9, 21>
|
||||||
|
mcall , < 5, 318 - 50 - 25>, < 9, 1>, [scn.3d_face]
|
||||||
|
mcall , < 5, 1>, < 10, 20>
|
||||||
|
mcall , < 5, 318 - 50 - 25>, < 31, 1>, [scn.3d_light]
|
||||||
|
|
||||||
proc draw_keyb
|
mov ebx, 328 - 16 - 50 - 25
|
||||||
|
sub ebx, [ans.size]
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, 16
|
||||||
|
mov ecx, [scn.gui_intext]
|
||||||
|
or ecx, 1 shl 31
|
||||||
|
mcall 4, , , ans.buffer
|
||||||
|
|
||||||
mcall SF_DEFINE_BUTTON, <KEYBOARD_X, (KEYB_BTN_W + GAP)*4 - GAP>, <8, 29>, 250, [sc.work_light]
|
mov ecx, [scn.gui_text]
|
||||||
mov ecx, [sc.work_text]
|
mcall , <310 - 50 - 25, 16>, , btn_clr, 1
|
||||||
or ecx, 0x10000000
|
add ebx, 1 shl 16
|
||||||
mcall SF_DRAW_TEXT, <(KEYB_BTN_W + GAP - engineering_len*2)*2 - GAP/2 + KEYBOARD_X, KEYB_BTN_H / 2 - 10 + 8>, , engineering_str, engineering_len
|
mcall
|
||||||
|
|
||||||
|
mcall 8, <305 - 50 - 25, 17>, <9, 20>, 0x40000004
|
||||||
|
|
||||||
|
mcall 1, 4, 8, [scn.win_body]
|
||||||
|
mcall , 323 - 50 - 25
|
||||||
|
mcall , , 30, [scn.3d_light]
|
||||||
|
mcall , 4
|
||||||
|
|
||||||
|
mov ebx, 318 - 16 - 50 - 25
|
||||||
|
sub ebx, [ans.size]
|
||||||
|
cmp ebx, 24
|
||||||
|
jg @f
|
||||||
|
mov ebx, 24
|
||||||
|
@@:
|
||||||
|
mov [edb1.width], ebx
|
||||||
|
m2m [edb1.color], [scn.gui_face]
|
||||||
|
m2m [edb1.focus_border_color], [scn.gui_face]
|
||||||
|
cmp [error_n], 0
|
||||||
|
je @f
|
||||||
|
mov [edb1.color], 0xFFAAAA
|
||||||
|
mov [edb1.focus_border_color], 0xFFAAAA
|
||||||
|
@@:
|
||||||
|
invoke editbox.draw, edb1
|
||||||
|
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
|
||||||
|
proc draw_keyb
|
||||||
|
cmp [keyb], byte 0
|
||||||
|
je @f
|
||||||
|
|
||||||
mov [txt_size], 1
|
mov [txt_size], 1
|
||||||
mov [but_id], 0x0000000A
|
mov [but_id], 0x0000000A
|
||||||
mov [txt_id], buttons
|
mov [txt_id], buttons
|
||||||
|
|
||||||
m2m [but_c], [sc.work]
|
mov eax, [scn.win_face]
|
||||||
m2m [but_tc], [sc.work_text]
|
mov [but_c], eax
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y
|
mov eax, [scn.win_text]
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y
|
mov [but_tc], eax
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y
|
stdcall draw_button, 4 + 278 - 25, 42 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y
|
stdcall draw_button, 37 + 278 - 25, 42 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*1
|
stdcall draw_button, 70 + 278 - 25, 42 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
|
stdcall draw_button, 103 + 278 - 25, 42 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
|
stdcall draw_button, 103 + 278 - 25, 66 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
|
stdcall draw_button, 103 + 278 - 25, 90 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
|
stdcall draw_button, 103 + 278 - 25, 114 - 25 - 8
|
||||||
|
stdcall draw_button, 70 + 278 - 25, 139 - 25 - 8
|
||||||
|
stdcall draw_button, 37 + 278 - 25, 139 - 25 - 8
|
||||||
|
|
||||||
mov [but_c] , 0x00F0969D
|
mov eax, [scn.btn_inface]
|
||||||
mov [but_tc], 0x00FFFFFF
|
mov [but_c], eax
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y +(KEYB_BTN_H + GAP)*4
|
mov eax, [scn.btn_intext]
|
||||||
|
mov [but_tc], eax
|
||||||
|
stdcall draw_button, 103 + 278 - 25, 139 - 25 - 8
|
||||||
|
|
||||||
m2m [but_c] , [sc.work_button]
|
mov eax, [scn.btn_face]
|
||||||
m2m [but_tc], [sc.work_button_text]
|
mov [but_c], eax
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + KEYB_BTN_H + GAP
|
mov eax, [scn.btn_text]
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + KEYB_BTN_H + GAP
|
mov [but_tc], eax
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + KEYB_BTN_H + GAP
|
stdcall draw_button, 4 + 278 - 25, 66 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
|
stdcall draw_button, 37 + 278 - 25, 66 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
|
stdcall draw_button, 70 + 278 - 25, 66 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
|
stdcall draw_button, 4 + 278 - 25, 90 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
|
stdcall draw_button, 37 + 278 - 25, 90 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
|
stdcall draw_button, 70 + 278 - 25, 90 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
|
stdcall draw_button, 4 + 278 - 25, 114 - 25 - 8
|
||||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
|
stdcall draw_button, 37 + 278 - 25, 114 - 25 - 8
|
||||||
|
stdcall draw_button, 70 + 278 - 25, 114 - 25 - 8
|
||||||
ret
|
stdcall draw_button, 4 + 278 - 25, 139 - 25 - 8
|
||||||
|
|
||||||
endp
|
|
||||||
|
|
||||||
; ====================================================================
|
|
||||||
|
|
||||||
proc draw_list
|
|
||||||
|
|
||||||
; BACKGROUND
|
|
||||||
mov eax, SF_DRAW_RECT
|
|
||||||
mov ebx, LIST_X shl 16 + LIST_ITEM_W
|
|
||||||
mov ecx, LIST_Y shl 16 + LIST_ITEM_H
|
|
||||||
mov edx, [sc.work_light]
|
|
||||||
mov edi, LIST_ITEM_COUNT
|
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
mcall
|
ret
|
||||||
; draw separator {
|
endp
|
||||||
push ecx edx
|
|
||||||
sub ecx, LIST_ITEM_H - 1
|
|
||||||
mov edx, [sc.work_dark]
|
|
||||||
mcall
|
|
||||||
; }
|
|
||||||
pop edx ecx
|
|
||||||
add ecx, LIST_ITEM_H shl 16
|
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
|
||||||
|
proc draw_list
|
||||||
|
; BACKGROUND
|
||||||
|
mov edi, LIST_ITEM_COUNT
|
||||||
|
mov eax, 13
|
||||||
|
mov ebx, 4 shl 16 + 320 - 50 - 25
|
||||||
|
mov ecx, 37 shl 16 + LIST_ITEM_SIZE
|
||||||
|
mov edx, LIST_ITEM_COLOR1
|
||||||
|
cmp [his_even], byte 0
|
||||||
|
je @f
|
||||||
|
mov edx, LIST_ITEM_COLOR2
|
||||||
|
@@:
|
||||||
|
mcall
|
||||||
|
add ecx, LIST_ITEM_SIZE shl 16
|
||||||
|
cmp edx, LIST_ITEM_COLOR1
|
||||||
|
je .set_color_to_2
|
||||||
|
mov edx, LIST_ITEM_COLOR1
|
||||||
|
jmp .next
|
||||||
|
.set_color_to_2:
|
||||||
|
mov edx, LIST_ITEM_COLOR2
|
||||||
.next:
|
.next:
|
||||||
dec edi
|
dec edi
|
||||||
cmp edi, 0
|
cmp edi, 0
|
||||||
jne @b
|
jne @b
|
||||||
|
|
||||||
mcall , <LIST_X , 1>, <LIST_Y, LIST_ITEM_H * 8>, [sc.work_dark]
|
|
||||||
mcall , <LIST_X + LIST_ITEM_W - 1, 1>,
|
|
||||||
mcall , <LIST_X, LIST_ITEM_W>, <LIST_Y + LIST_ITEM_H * 8, 1>
|
|
||||||
|
|
||||||
; BUTTONS
|
; BUTTONS
|
||||||
mov eax, SF_DEFINE_BUTTON
|
|
||||||
mov ebx, LIST_X shl 16 + (LIST_ITEM_W - 1)
|
|
||||||
mov ecx, LIST_Y shl 16 + LIST_ITEM_H
|
|
||||||
mov edx, 0x60 + BT_HIDE
|
|
||||||
mov edi, LIST_ITEM_COUNT
|
mov edi, LIST_ITEM_COUNT
|
||||||
|
mov eax, 8
|
||||||
|
mov ebx, 4 shl 16 + 320 - 50 - 25
|
||||||
|
mov ecx, 37 shl 16 + LIST_ITEM_SIZE
|
||||||
|
mov edx, 0x40000060
|
||||||
@@:
|
@@:
|
||||||
mcall
|
mcall
|
||||||
add ecx, LIST_ITEM_H shl 16
|
add ecx, LIST_ITEM_SIZE shl 16
|
||||||
inc edx
|
inc edx
|
||||||
dec edi
|
dec edi
|
||||||
cmp edi, 0
|
cmp edi, 0
|
||||||
jne @b
|
jne @b
|
||||||
|
|
||||||
; TEXT
|
; TEXT
|
||||||
mov eax, SF_DRAW_TEXT
|
|
||||||
mov ebx, (LIST_X + LIST_X) shl 16 + LIST_Y + LIST_TEXT_Y + 1
|
|
||||||
mov ecx, [sc.work_text]
|
|
||||||
mov edi, LIST_ITEM_COUNT
|
mov edi, LIST_ITEM_COUNT
|
||||||
|
mov eax, 4
|
||||||
|
mov ebx, 8 shl 16 + 37 + LIST_ITEM_Y
|
||||||
|
mov ecx, LIST_ITEM_TEXT1
|
||||||
|
cmp [his_even], byte 0
|
||||||
|
je @f
|
||||||
|
mov ecx, LIST_ITEM_TEXT2
|
||||||
@@:
|
@@:
|
||||||
or ecx, 1 shl 31
|
or ecx, 1 shl 31
|
||||||
mov edx, history
|
mov edx, history
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
add ecx, 0x10000000
|
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
push ebx
|
push ebx
|
||||||
add ebx, (LIST_ITEM_W - 8) shl 16
|
add ebx, (320 - 50 - 25) shl 16
|
||||||
mov esi, [edx + 508]
|
mov esi, [edx + 508]
|
||||||
shl esi, 16
|
shl esi, 16
|
||||||
sub ebx, esi
|
sub ebx, esi
|
||||||
@@ -602,17 +553,15 @@ proc draw_list
|
|||||||
pop ebx
|
pop ebx
|
||||||
|
|
||||||
add edx, 32
|
add edx, 32
|
||||||
add ebx, LIST_ITEM_H
|
add ebx, LIST_ITEM_SIZE
|
||||||
|
|
||||||
and ecx, 0xFFFFFF
|
and ecx, 0xFFFFFF
|
||||||
cmp ecx, LIST_ITEM_TEXT2
|
cmp ecx, LIST_ITEM_TEXT2
|
||||||
je .set_color_to_2_txt
|
je .set_color_to_2_txt
|
||||||
mov ecx, LIST_ITEM_TEXT2
|
mov ecx, LIST_ITEM_TEXT2
|
||||||
jmp .next_txt
|
jmp .next_txt
|
||||||
|
|
||||||
.set_color_to_2_txt:
|
.set_color_to_2_txt:
|
||||||
mov ecx, LIST_ITEM_TEXT1
|
mov ecx, LIST_ITEM_TEXT1
|
||||||
|
|
||||||
.next_txt:
|
.next_txt:
|
||||||
or ecx, 1 shl 31
|
or ecx, 1 shl 31
|
||||||
|
|
||||||
@@ -621,35 +570,29 @@ proc draw_list
|
|||||||
jne @b
|
jne @b
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
endp
|
;----------------------
|
||||||
|
|
||||||
; ====================================================================
|
|
||||||
|
|
||||||
proc str_len uses ebx, str
|
|
||||||
|
|
||||||
|
proc str_len uses ebx, str
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov ebx, [str]
|
mov ebx, [str]
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
cmp [ebx], byte 0
|
cmp [ebx], byte 0
|
||||||
je @f
|
je @f
|
||||||
inc eax
|
inc eax
|
||||||
inc ebx
|
inc ebx
|
||||||
jmp @b
|
jmp @b
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
endp
|
;----------------------
|
||||||
|
|
||||||
; ====================================================================
|
|
||||||
|
|
||||||
proc str_cpy uses eax ebx ecx, from, to
|
|
||||||
|
|
||||||
|
proc str_cpy uses eax ebx ecx, from, to
|
||||||
mov eax, [from]
|
mov eax, [from]
|
||||||
mov ebx, [to]
|
mov ebx, [to]
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
cmp [eax], byte 0
|
cmp [eax], byte 0
|
||||||
je @f
|
je @f
|
||||||
@@ -658,77 +601,68 @@ proc str_cpy uses eax ebx ecx, from, to
|
|||||||
inc eax
|
inc eax
|
||||||
inc ebx
|
inc ebx
|
||||||
jmp @b
|
jmp @b
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
mov [ebx], byte 0
|
mov [ebx], byte 0
|
||||||
ret
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
endp
|
;----------------------
|
||||||
|
|
||||||
; ====================================================================
|
dataend:
|
||||||
|
|
||||||
if lang eq ru_RU
|
;===============================
|
||||||
|
|
||||||
engineering_str cp866 "Инженерный режим"
|
rb 2048
|
||||||
engineering_len = $ - engineering_str
|
stacktop:
|
||||||
|
|
||||||
else if lang eq es_ES
|
exp rb 480
|
||||||
|
exp_pos rd 1
|
||||||
|
exp_lvl rd 1
|
||||||
|
abs_lvl rd 1
|
||||||
|
group rd 1
|
||||||
|
|
||||||
engineering_str db " Modo ingeniero "
|
ans.buffer:rb 480
|
||||||
engineering_len = $ - engineering_str
|
ans.size rd 1
|
||||||
else
|
error_n rd 1
|
||||||
|
|
||||||
engineering_str db "Engineering calc"
|
timer rd 1
|
||||||
engineering_len = $ - engineering_str
|
but_id rd 1
|
||||||
|
but_c rd 1
|
||||||
|
but_tc rd 1
|
||||||
|
txt_id rd 1
|
||||||
|
txt_size rd 1
|
||||||
|
keyb rb 1
|
||||||
|
|
||||||
endf
|
his_even rb 1
|
||||||
|
history rb 512 * LIST_ITEM_COUNT
|
||||||
; ====================================================================
|
|
||||||
|
|
||||||
f70_calc:
|
|
||||||
dd SSF_START_APP
|
|
||||||
dd 0
|
|
||||||
dd 0
|
|
||||||
dd 0
|
|
||||||
dd 0
|
|
||||||
db '/sys/calc', 0
|
|
||||||
|
|
||||||
; system colors internal
|
|
||||||
scn:
|
|
||||||
.gui_tb_in_shd dd 0x00CED0D0
|
|
||||||
.gui_face dd 0x00FAF8FA
|
|
||||||
.gui_text dd 0x10373C42
|
|
||||||
.gui_intext dd 0x005F5F5F
|
|
||||||
.gui_select dd 0x00C7C9C9
|
|
||||||
|
|
||||||
; ====================================================================
|
|
||||||
|
|
||||||
I_END:
|
|
||||||
|
|
||||||
rb 2048
|
|
||||||
|
|
||||||
STACKTOP:
|
|
||||||
|
|
||||||
exp rb 480
|
|
||||||
exp_pos rd 1
|
|
||||||
exp_lvl rd 1
|
|
||||||
abs_lvl rd 1
|
|
||||||
group rd 1
|
|
||||||
|
|
||||||
ans.buffer: rb 480
|
|
||||||
ans.size rd 1
|
|
||||||
error_n rd 1
|
|
||||||
|
|
||||||
timer rd 1
|
|
||||||
but_id rd 1
|
|
||||||
but_c rd 1
|
|
||||||
but_tc rd 1
|
|
||||||
txt_id rd 1
|
|
||||||
txt_size rd 1
|
|
||||||
|
|
||||||
history rb 512 * LIST_ITEM_COUNT
|
|
||||||
rb 512
|
rb 512
|
||||||
|
|
||||||
sc system_colors
|
struc system_colors_internal {
|
||||||
|
.3d_face dd 0xCED0D0
|
||||||
|
.3d_dark dd 0xD7D7D7
|
||||||
|
.3d_light dd 0xFEFEFE
|
||||||
|
.win_title dd 0x2F2F2F
|
||||||
|
.win_body dd 0xE4DFE1
|
||||||
|
.btn_face dd 0xEFEBEF
|
||||||
|
.btn_text dd 0x373C42
|
||||||
|
.win_text dd 0x000000
|
||||||
|
.panel_frame dd 0x94AECE
|
||||||
|
.win_face dd 0xE1E1E1
|
||||||
|
.win_inface dd 0xE1E1E1
|
||||||
|
.win_frame dd 0x204962
|
||||||
|
.btn_inface dd 0xEFEBEF
|
||||||
|
.btn_intext dd 0xD0D9E8
|
||||||
|
.btn_fctext dd 0x2D3135
|
||||||
|
.gui_shadow dd 0xFFFFFF
|
||||||
|
.gui_face dd 0xFAF8FA
|
||||||
|
.gui_inface dd 0xF6F3F6
|
||||||
|
.gui_fcface dd 0xFAF8FA
|
||||||
|
.gui_frame dd 0x7698C0
|
||||||
|
.gui_text dd 0x373C42
|
||||||
|
.gui_intext dd 0x5F5F5F
|
||||||
|
.gui_select dd 0xC7C9C9
|
||||||
|
}
|
||||||
|
|
||||||
MEM:
|
scn system_colors_internal
|
||||||
|
|
||||||
|
memory:
|
||||||
|
@@ -1,218 +0,0 @@
|
|||||||
; QR code generator from clipbboard
|
|
||||||
;
|
|
||||||
; This program uses code from someone else's program, so the notice below
|
|
||||||
; is kept for compliance purposes.
|
|
||||||
|
|
||||||
|
|
||||||
;*****************************************************************************
|
|
||||||
; Read the data from the clipboard
|
|
||||||
; Copyright (c) 2013, Marat Zakiyanov aka Mario79, aka Mario
|
|
||||||
; All rights reserved.
|
|
||||||
;
|
|
||||||
; Redistribution and use in source and binary forms, with or without
|
|
||||||
; modification, are permitted provided that the following conditions are met:
|
|
||||||
; * Redistributions of source code must retain the above copyright
|
|
||||||
; notice, this list of conditions and the following disclaimer.
|
|
||||||
; * Redistributions in binary form must reproduce the above copyright
|
|
||||||
; notice, this list of conditions and the following disclaimer in the
|
|
||||||
; documentation and/or other materials provided with the distribution.
|
|
||||||
; * Neither the name of the <organization> nor the
|
|
||||||
; names of its contributors may be used to endorse or promote products
|
|
||||||
; derived from this software without specific prior written permission.
|
|
||||||
;
|
|
||||||
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
|
|
||||||
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
|
|
||||||
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
;******************************************************************************
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET01'
|
|
||||||
dd 0x01
|
|
||||||
dd START
|
|
||||||
dd IM_END
|
|
||||||
dd I_END
|
|
||||||
dd stacktop
|
|
||||||
dd 0x0
|
|
||||||
dd 0x0
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
include 'macros.inc'
|
|
||||||
|
|
||||||
START:
|
|
||||||
mcall 68,11
|
|
||||||
red:
|
|
||||||
call draw_window
|
|
||||||
still:
|
|
||||||
mcall 10
|
|
||||||
|
|
||||||
cmp eax,1
|
|
||||||
je red
|
|
||||||
cmp eax,2
|
|
||||||
je key
|
|
||||||
cmp eax,3
|
|
||||||
je button
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
key:
|
|
||||||
mcall 2
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
button:
|
|
||||||
mcall 17
|
|
||||||
cmp ah,2
|
|
||||||
je .read_button
|
|
||||||
cmp ah,1
|
|
||||||
jne still
|
|
||||||
.exit:
|
|
||||||
mcall -1
|
|
||||||
|
|
||||||
.read_button:
|
|
||||||
call draw_clipboard
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
draw_window:
|
|
||||||
mcall 12,1
|
|
||||||
xor esi,esi
|
|
||||||
mcall 0,<0,600>,<0,400>,0x13FFFFFF,,title
|
|
||||||
mcall 8,<20,150>,<40,20>,2,0xCCCCCC
|
|
||||||
mcall 4,<25,47>,0x90000000,read_button_text
|
|
||||||
mcall 12,2
|
|
||||||
ret
|
|
||||||
|
|
||||||
draw_clipboard:
|
|
||||||
mcall 54,0
|
|
||||||
cmp eax,-1
|
|
||||||
je exit
|
|
||||||
|
|
||||||
test eax,eax
|
|
||||||
jz exit
|
|
||||||
|
|
||||||
mov [slots_number],eax
|
|
||||||
dec eax
|
|
||||||
mov [current_slot],eax
|
|
||||||
|
|
||||||
mov [text_coordinates],dword 10 shl 16+70
|
|
||||||
start:
|
|
||||||
xor eax,eax
|
|
||||||
mov [current_slot_data],eax
|
|
||||||
mcall 54,1,[current_slot]
|
|
||||||
|
|
||||||
cmp eax,-1
|
|
||||||
je .no_relevant_data
|
|
||||||
|
|
||||||
cmp eax,1
|
|
||||||
jne @f
|
|
||||||
|
|
||||||
.no_relevant_data:
|
|
||||||
mov edx,no_relevant_data_text
|
|
||||||
mov esi,no_relevant_data_text.end-no_relevant_data_text
|
|
||||||
jmp print
|
|
||||||
.no_relevant_data_1:
|
|
||||||
mov edx,no_relevant_data_text_1
|
|
||||||
mov esi,no_relevant_data_text_1.end-no_relevant_data_text_1
|
|
||||||
jmp print
|
|
||||||
.no_relevant_data_2:
|
|
||||||
mov edx,no_relevant_data_text_2
|
|
||||||
mov esi,no_relevant_data_text_2.end-no_relevant_data_text_2
|
|
||||||
jmp print
|
|
||||||
@@:
|
|
||||||
mov [current_slot_data],eax
|
|
||||||
mov eax,[current_slot_data]
|
|
||||||
mov esi,[eax]
|
|
||||||
sub esi,12
|
|
||||||
add eax,4
|
|
||||||
cmp [eax],dword 2
|
|
||||||
jge .no_relevant_data_1
|
|
||||||
add eax,4
|
|
||||||
;cmp [eax],dword 1 ; cp866
|
|
||||||
;je .no_relevant_data_2 ;
|
|
||||||
|
|
||||||
|
|
||||||
;push 0
|
|
||||||
cmp [eax], dword 0
|
|
||||||
jne @f
|
|
||||||
; push 26
|
|
||||||
jmp skip2
|
|
||||||
@@:
|
|
||||||
cmp [eax], dword 2
|
|
||||||
jne @f
|
|
||||||
;push 22
|
|
||||||
jmp skip2
|
|
||||||
@@:
|
|
||||||
|
|
||||||
|
|
||||||
skip2:
|
|
||||||
|
|
||||||
add eax,4
|
|
||||||
mov edx, matrix
|
|
||||||
mov ebx, eax
|
|
||||||
mov ecx, esi
|
|
||||||
mov eax, 78
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov ebx, matrix
|
|
||||||
mov ecx, eax
|
|
||||||
shl ecx, 16
|
|
||||||
add ecx, eax
|
|
||||||
mov eax, 7
|
|
||||||
mov edx, 40
|
|
||||||
shl edx, 16
|
|
||||||
add edx, 80
|
|
||||||
int 0x40
|
|
||||||
doneQR:
|
|
||||||
print:
|
|
||||||
mov ecx,[current_slot_data]
|
|
||||||
test ecx,ecx
|
|
||||||
jz @f
|
|
||||||
@@:
|
|
||||||
add [text_coordinates],dword 15
|
|
||||||
dec dword [current_slot]
|
|
||||||
dec dword [slots_number]
|
|
||||||
exit:
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
title:
|
|
||||||
db 'Make QR code from the clipboard ',0
|
|
||||||
read_button_text:
|
|
||||||
db 'Make QR code ',0
|
|
||||||
no_relevant_data_text:
|
|
||||||
db '<NO RELEVANT DATA>',0
|
|
||||||
.end:
|
|
||||||
no_relevant_data_text_1:
|
|
||||||
db '<NO TEXT>',0
|
|
||||||
.end:
|
|
||||||
no_relevant_data_text_2:
|
|
||||||
db '<NO 866>',0
|
|
||||||
.end:
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
IM_END:
|
|
||||||
slots_number:
|
|
||||||
rd 1
|
|
||||||
text_coordinates:
|
|
||||||
rd 1
|
|
||||||
current_slot:
|
|
||||||
rd 1
|
|
||||||
current_slot_data:
|
|
||||||
rd 1
|
|
||||||
|
|
||||||
;----------------------
|
|
||||||
|
|
||||||
matrix DD 31330 * 3 DUP (?)
|
|
||||||
|
|
||||||
;--------------------------------------
|
|
||||||
rb 5555
|
|
||||||
stacktop:
|
|
||||||
rb 4
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
I_END:
|
|
||||||
;---------------------------------------------------------------------
|
|
@@ -1,4 +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")
|
|
||||||
tup.rule("magnify.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "%B")
|
|
@@ -1,229 +0,0 @@
|
|||||||
; SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
;
|
|
||||||
; Magnify - Screen Magnifier
|
|
||||||
; Copyright (C) 2005 MenuetOS
|
|
||||||
; Copyright (C) 2005-2025 KolibriOS team
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET01'
|
|
||||||
dd 1
|
|
||||||
dd START
|
|
||||||
dd I_END
|
|
||||||
dd MEM
|
|
||||||
dd STACKTOP
|
|
||||||
dd 0, 0
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
include '../../macros.inc'
|
|
||||||
include "../../KOSfuncs.inc"
|
|
||||||
include "../../encoding.inc"
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
START:
|
|
||||||
mcall SF_SET_EVENTS_MASK, EVM_REDRAW or EVM_BUTTON or EVM_MOUSE
|
|
||||||
|
|
||||||
mcall SF_SYS_MISC, SSF_HEAP_INIT
|
|
||||||
|
|
||||||
; initializing MAG_H * MAG_W rect of pixels from screen
|
|
||||||
mcall SF_SYS_MISC, SSF_MEM_ALLOC, MAG_H * MAG_W * 3
|
|
||||||
mov [screen_rect], eax
|
|
||||||
|
|
||||||
call logic_read_screen
|
|
||||||
|
|
||||||
still:
|
|
||||||
mcall SF_WAIT_EVENT_TIMEOUT, DELAY
|
|
||||||
|
|
||||||
cmp eax, EV_REDRAW
|
|
||||||
je redraw
|
|
||||||
|
|
||||||
cmp eax, EV_BUTTON
|
|
||||||
je button
|
|
||||||
|
|
||||||
cmp eax, EV_MOUSE
|
|
||||||
je mouse
|
|
||||||
|
|
||||||
jmp redraw
|
|
||||||
|
|
||||||
redraw:
|
|
||||||
call draw_window
|
|
||||||
call draw_magnify
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
button:
|
|
||||||
; we have only one button, close
|
|
||||||
or eax, SF_TERMINATE_PROCESS
|
|
||||||
mcall
|
|
||||||
|
|
||||||
mouse:
|
|
||||||
mcall SF_MOUSE_GET, SSF_BUTTON
|
|
||||||
|
|
||||||
test ax, 0x0001
|
|
||||||
jnz still
|
|
||||||
|
|
||||||
call logic_read_screen
|
|
||||||
call draw_magnify
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
draw_window:
|
|
||||||
|
|
||||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
|
||||||
|
|
||||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
|
||||||
|
|
||||||
mov ecx, eax
|
|
||||||
add ecx, WIN.Y shl 16 + WIN.H
|
|
||||||
|
|
||||||
mcall SF_CREATE_WINDOW, <WIN.X, WIN.W>, , 0x34181818, , labelt
|
|
||||||
|
|
||||||
mcall SF_REDRAW, SSF_END_DRAW
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; MAG_H * MAG_W pixels grid
|
|
||||||
draw_magnify:
|
|
||||||
|
|
||||||
mcall SF_THREAD_INFO, procinfo, -1
|
|
||||||
mov al, byte [procinfo.wnd_state]
|
|
||||||
test al, 0x04
|
|
||||||
jne .du_loop_end
|
|
||||||
|
|
||||||
mov eax, SF_DRAW_RECT
|
|
||||||
mov ebx, MAG_S - 1
|
|
||||||
mov ecx, MAG_S - 1
|
|
||||||
mov esi, [screen_rect]
|
|
||||||
mov edi, MAG_W * MAG_H
|
|
||||||
|
|
||||||
.du_loop_rect:
|
|
||||||
mcall , , , dword [esi]
|
|
||||||
add ebx, MAG_S shl 16
|
|
||||||
cmp ebx, MAG_S * MAG_W shl 16
|
|
||||||
jle .du_loop_rect_row
|
|
||||||
mov ebx, MAG_S - 1
|
|
||||||
add ecx, MAG_S shl 16
|
|
||||||
|
|
||||||
.du_loop_rect_row:
|
|
||||||
add esi, 3
|
|
||||||
dec edi
|
|
||||||
jne .du_loop_rect
|
|
||||||
|
|
||||||
.du_loop_end:
|
|
||||||
ret
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
; LOGIC AREA
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
; read array of pixels from screen by mouse coords
|
|
||||||
logic_read_screen:
|
|
||||||
|
|
||||||
mcall SF_MOUSE_GET, SSF_SCREEN_POSITION
|
|
||||||
mov edx, eax
|
|
||||||
|
|
||||||
; clamping mouse coords to stay within the screen
|
|
||||||
mcall SF_GET_SCREEN_SIZE
|
|
||||||
mov ebx, eax
|
|
||||||
call logic_clamp_pixels
|
|
||||||
|
|
||||||
sub edx, (MAG_W / 2) shl 16 + (MAG_H / 2)
|
|
||||||
mcall SF_GET_IMAGE, [screen_rect], <MAG_W, MAG_H>,
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; clamping mouse coords to stay within the screen
|
|
||||||
logic_clamp_pixels:
|
|
||||||
|
|
||||||
mov eax, edx
|
|
||||||
shr eax, 16
|
|
||||||
mov cx, ax
|
|
||||||
mov ax, dx
|
|
||||||
|
|
||||||
push ax
|
|
||||||
push cx
|
|
||||||
mov ax, bx
|
|
||||||
mov di, ax
|
|
||||||
mov eax, ebx
|
|
||||||
shr eax, 16
|
|
||||||
mov si, ax
|
|
||||||
|
|
||||||
pop cx
|
|
||||||
pop ax
|
|
||||||
|
|
||||||
.check_min_x:
|
|
||||||
cmp cx, MAG_W / 2
|
|
||||||
jge .check_min_y
|
|
||||||
mov cx, MAG_W / 2
|
|
||||||
.check_min_y:
|
|
||||||
cmp ax, MAG_H / 2
|
|
||||||
jge .check_max_x
|
|
||||||
mov ax, MAG_H / 2
|
|
||||||
.check_max_x:
|
|
||||||
mov dx, si
|
|
||||||
sub dx, MAG_W / 2 - 1
|
|
||||||
cmp cx, dx
|
|
||||||
jle .check_max_y
|
|
||||||
mov cx, dx
|
|
||||||
.check_max_y:
|
|
||||||
mov dx, di
|
|
||||||
sub dx, MAG_H / 2 - 1
|
|
||||||
cmp ax, dx
|
|
||||||
jle .combine_coords
|
|
||||||
mov ax, dx
|
|
||||||
|
|
||||||
.combine_coords:
|
|
||||||
mov dx, cx
|
|
||||||
shl edx, 16
|
|
||||||
or dx, ax
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
; DATA AREA
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
DELAY = 5
|
|
||||||
|
|
||||||
MAG_W = 40
|
|
||||||
MAG_H = 30
|
|
||||||
MAG_S = 8
|
|
||||||
|
|
||||||
WIN RECT 100, 100, MAG_W * MAG_S + 8, MAG_H * MAG_S + 3
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
if lang eq ru_RU
|
|
||||||
labelt cp866 'Magnify - Экранная лупа', 0
|
|
||||||
else if lang eq es_ES
|
|
||||||
labelt db 'Magnify - Lupa de Pantalla', 0
|
|
||||||
else
|
|
||||||
labelt db 'Magnify - Screen Magnifier', 0
|
|
||||||
endf
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
screen_rect dd 0x00000000
|
|
||||||
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
|
|
||||||
I_END:
|
|
||||||
rb 512
|
|
||||||
align 512
|
|
||||||
|
|
||||||
STACKTOP:
|
|
||||||
procinfo process_information
|
|
||||||
MEM:
|
|
Reference in New Issue
Block a user