develop/libraries: Post-SVN tidy (#436)

- Move source code from `trunk` into root directory for each library.
- Update build files and ASM include paths. Add SPDX license header where appropriate.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.

(Work towards #75, point 3)

Reviewed-on: KolibriOS/kolibrios#436
Reviewed-by: Burer <burer@kolibrios.org>
Reviewed-by: Ivan B <1+dunkaist@noreply.localhost>
Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com>
Co-authored-by: Andrew <dent.ace@gmail.com>
Co-committed-by: Andrew <dent.ace@gmail.com>
This commit is contained in:
ace-dent authored and Burer committed 2026-04-25 09:20:05 +00:00
1 parent a0e4bce98a
commit e05b57a95e
82 files changed
+8137 -8062

No files matched your search

+2 -2
View File
@@ -509,7 +509,7 @@ tup.append_table(img_files, {
{"GAMES/C4", VAR_PROGS .. "/games/c4/c4"},
{"LIB/ARCHIVER.OBJ", VAR_PROGS .. "/fs/kfar/kfar_arc/kfar_arc.obj"},
{"LIB/BOX_LIB.OBJ", VAR_PROGS .. "/develop/libraries/box_lib/box_lib.obj"},
{"LIB/BUF2D.OBJ", VAR_PROGS .. "/develop/libraries/buf2d/trunk/buf2d.obj"},
{"LIB/BUF2D.OBJ", VAR_PROGS .. "/develop/libraries/buf2d/buf2d.obj"},
{"LIB/CONSOLE.OBJ", VAR_PROGS .. "/develop/libraries/console_coff/console.obj"},
{"LIB/CNV_PNG.OBJ", VAR_PROGS .. "/media/zsea/plugins/png/cnv_png.obj"},
{"LIB/DLL.OBJ", VAR_PROGS .. "/develop/libraries/dll/dll.obj"},
@@ -521,7 +521,7 @@ tup.append_table(img_files, {
{"LIB/LIBIO.OBJ", VAR_PROGS .. "/develop/libraries/libs-dev/libio/libio.obj"},
{"LIB/MSGBOX.OBJ", VAR_PROGS .. "/develop/libraries/msgbox/msgbox.obj"},
{"LIB/NETWORK.OBJ", VAR_PROGS .. "/develop/libraries/network/network.obj"},
{"LIB/PROC_LIB.OBJ", VAR_PROGS .. "/develop/libraries/proc_lib/trunk/proc_lib.obj"},
{"LIB/PROC_LIB.OBJ", VAR_PROGS .. "/develop/libraries/proc_lib/proc_lib.obj"},
{"LIB/RASTERWORKS.OBJ", VAR_PROGS .. "/develop/libraries/fontRasterWorks_unicode/RasterWorks.obj"},
{"LIB/SORT.OBJ", VAR_PROGS .. "/develop/libraries/sorter/sort.obj"},
{"LIB/TINYGL.OBJ", VAR_PROGS .. "/develop/libraries/TinyGL/asm_fork/tinygl.obj"},
+47 -49
View File
@@ -1,49 +1,47 @@
Siemargl port comments
Used github branch https://github.com/TinyCC/tinycc
It have a vesion 0.9.26 with heads up to 0.9.27 - see ChangeLog
Kolibri version specifics
errata/changelog - moved to trunk/readme.txt
-added TCC_TARGET_MEOS as needed
-leading_underscore by default is 0 (can use -f[no-]leading-underscore),
otherwise (error) underscoring all symbols, not only cdecl
-added message in tccmeos.c about missed symbols when linking KOS executable
-start.o added automatically, when -nostdlib not used
-to use standard ktcc lib must add -lck at commandline
-default search paths are ./include ./lib from executable (under KOS need to
use -Bpath_to_ktcc and put start.o in current dir)
-when config.h is ready, compiler can be easy builded as [kos32-]gcc tcc.c libtcc.c
see also makefile.kos32
-impossible using with mingw-gcc compiled lib, incompatible library format:
.o is PE-format from gcc but ELF from tcc, may be linux-gcc does it ok
-__fastcall incompatible with other compilers. now stack freed by caller.
must fix i386-gen.c@490,572 (fixed in other branch https://github.com/mirror/tinycc)
-using __attribute__((packed)) see test82. need naming struct twice as in kos32sys1.h
-using __attribute__ ((alias xxx)) restricted only for non "static inline" functions
-erroneous or "non TCC" member using in nested structs or unions can lead to compiler internal error
-bench timing coarse (0s or 1s), no usec in newlib gettimeofday. OK
Tests status:
asmtest +
abitest not tested (embedding compiler)
libtcctest not tested (embedding compiler)
boundtest ----- alloca removed from tcc libtcc.c:945 (really not worked)
tcctest most test ok, some problems with long double
vla_test.c +
pp/* + (minor comment error in 13.s)
tests2/* : see below
// errata
skippin' tests
test76 fail dollars in identifiers
test34 fail (array assignment not supported)
test73 fail compile (no stdint.h), printfloat, ARM specific
test46 no stdin - removed funtionality read from console, but file ops works
Siemargl port comments
Used github branch https://github.com/TinyCC/tinycc
It have a vesion 0.9.26 with heads up to 0.9.27 - see ChangeLog
Kolibri version specifics
errata/changelog - moved to readme
-added TCC_TARGET_MEOS as needed
-leading_underscore by default is 0 (can use -f[no-]leading-underscore),
otherwise (error) underscoring all symbols, not only cdecl
-added message in tccmeos.c about missed symbols when linking KOS executable
-start.o added automatically, when -nostdlib not used
-to use standard ktcc lib must add -lck at commandline
-default search paths are ./include ./lib from executable (under KOS need to
use -Bpath_to_ktcc and put start.o in current dir)
-when config.h is ready, compiler can be easy builded as [kos32-]gcc tcc.c libtcc.c
see also makefile.kos32
-impossible using with mingw-gcc compiled lib, incompatible library format:
.o is PE-format from gcc but ELF from tcc, may be linux-gcc does it ok
-__fastcall incompatible with other compilers. now stack freed by caller.
must fix i386-gen.c@490,572 (fixed in other branch https://github.com/mirror/tinycc)
-using __attribute__((packed)) see test82. need naming struct twice as in kos32sys1.h
-using __attribute__ ((alias xxx)) restricted only for non "static inline" functions
-erroneous or "non TCC" member using in nested structs or unions can lead to compiler internal error
-bench timing coarse (0s or 1s), no usec in newlib gettimeofday. OK
Tests status:
asmtest +
abitest not tested (embedding compiler)
libtcctest not tested (embedding compiler)
boundtest ----- alloca removed from tcc libtcc.c:945 (really not worked)
tcctest most test ok, some problems with long double
vla_test.c +
pp/* + (minor comment error in 13.s)
tests2/* : see below
// errata
skippin' tests
test76 fail dollars in identifiers
test34 fail (array assignment not supported)
test73 fail compile (no stdint.h), printfloat, ARM specific
test46 no stdin - removed funtionality read from console, but file ops works
@@ -1,10 +1,10 @@
if not exist bin mkdir bin
if not exist bin\font8x9.bmp @copy ..\..\..\..\..\fs\kfar\font8x9.bmp bin\font8x9.bmp
if not exist bin\font8x9.bmp @copy ..\..\..\..\fs\kfar\font8x9.bmp bin\font8x9.bmp
@copy foto.jpg bin\foto.jpg
@copy img0.png bin\img0.png
@copy img1.png bin\img1.png
if not exist bin\vaz2106.vox @copy ..\..\..\..\..\media\voxel_editor\trunk\vaz2106.vox bin\vaz2106.vox
if not exist bin\vaz2106.vox @copy ..\..\..\..\media\voxel_editor\vaz2106.vox bin\vaz2106.vox
@fasm.exe -m 16384 e0_dr_lines.asm bin\e0_dr_lines.kex
@fasm.exe -m 16384 e1_scaling.asm bin\e1_scaling.kex
@@ -1,139 +1,145 @@
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../../KOSfuncs.inc'
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
align 4
start:
load_library lib0_name, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
stdcall [buf2d_create], buf_0 ;создаем буфер
stdcall [buf2d_line], buf_0, 110, 20, 125, 90, 0xffff00 ;рисуем линию
stdcall [buf2d_line], buf_0, 60, 120, 110, 20, 0xd000 ;рисуем линию
stdcall [buf2d_curve_bezier], buf_0, (10 shl 16)+20,(110 shl 16)+10,(50 shl 16)+90, dword 0xff
stdcall [buf2d_circle], buf_0, 125, 90, 30, 0xffffff ;рисуем окружность
stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000 ;рисуем окружность
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW, SSF_BEGIN_DRAW
;mov edx,0x32000000
mov edx,0x33000000
mcall SF_CREATE_WINDOW, (50 shl 16)+330,(30 shl 16)+275,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW, SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
mcall SF_TERMINATE_PROCESS
caption db 'Test buf2d library, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 10 ;+6 top
dd 160 ;+8 w
dd 128 ;+12 h
dd 0x80 ;+16 color
db 24 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
lib0_name db 'buf2d.obj',0
;--------------------------------------------------
i_end: ;конец кода
rb 1024
stacktop:
cur_dir_path rb 4096
library_path rb 4096
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../KOSfuncs.inc'
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
align 4
start:
load_library lib0_name, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
stdcall [buf2d_create], buf_0 ;создаем буфер
stdcall [buf2d_line], buf_0, 110, 20, 125, 90, 0xffff00 ;рисуем линию
stdcall [buf2d_line], buf_0, 60, 120, 110, 20, 0xd000 ;рисуем линию
stdcall [buf2d_curve_bezier], buf_0, (10 shl 16)+20,(110 shl 16)+10,(50 shl 16)+90, dword 0xff
stdcall [buf2d_circle], buf_0, 125, 90, 30, 0xffffff ;рисуем окружность
stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000 ;рисуем окружность
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW, SSF_BEGIN_DRAW
;mov edx,0x32000000
mov edx,0x33000000
mcall SF_CREATE_WINDOW, (50 shl 16)+330,(30 shl 16)+275,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW, SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
mcall SF_TERMINATE_PROCESS
caption db 'Test buf2d library, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 10 ;+6 top
dd 160 ;+8 w
dd 128 ;+12 h
dd 0x80 ;+16 color
db 24 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
lib0_name db 'buf2d.obj',0
;--------------------------------------------------
i_end: ;конец кода
rb 1024
stacktop:
cur_dir_path rb 4096
library_path rb 4096
mem:
@@ -1,169 +1,175 @@
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../../KOSfuncs.inc'
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../dll.inc'
include '../../../../../load_lib.mac'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
align 4
start:
load_library lib0_name, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
stdcall [buf2d_create], buf_0 ;создаем буфер
stdcall [buf2d_line], buf_0, 110, 20, 125, 90, 0xffff00 ;рисуем линию
stdcall [buf2d_line], buf_0, 60, 120, 110, 20, 0xd000 ;рисуем линию
stdcall [buf2d_curve_bezier], buf_0, (10 shl 16)+20,(110 shl 16)+10,(50 shl 16)+90, dword 0xff
stdcall [buf2d_circle], buf_0, 125, 90, 30, 0xffffff ;рисуем окружность
stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000 ;рисуем окружность
stdcall [buf2d_img_hdiv2], buf_0 ;сжимаем изображение в буфере по высоте в 2 раза
stdcall [buf2d_img_wdiv2], buf_0 ;сжимаем изображение в буфере по ширине в 2 раза
stdcall [buf2d_create_f_img], buf_1,[buf_0] ;создаем маленький буфер buf_1, на основе сжатого изображения из buf_0
;если бы использовалась функция buf2d_create, тогда биты изображения
;пришлось бы копировать следущими строками:
;movzx ecx,word[buf_1.size_x]
;movzx eax,word[buf_1.size_y]
;imul ecx,eax
;imul ecx,3 ;ecx - колличество байт в маленьком буфере
;stdcall mem_copy, dword[buf_0],dword[buf_1],ecx
stdcall [buf2d_clear], buf_0,0xffffff
stdcall [buf2d_bit_blt], buf_0, 15,10, buf_1
stdcall [buf2d_bit_blt], buf_0, 110,65, buf_1
stdcall [buf2d_conv_24_to_8], buf_1
;stdcall [buf2d_bit_blt_alpha], buf_0, 1,1, buf_1,0xff8080 ;рисуем контуры изображения на фотографии
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изм. положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW, SSF_BEGIN_DRAW
;mov edx,0x32000000
mov edx,0x33000000
mcall SF_CREATE_WINDOW, (50 shl 16)+330,(30 shl 16)+275,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW, SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_1 ;удаляем буфер
mcall SF_TERMINATE_PROCESS
caption db 'Test buf2d library, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 10 ;+6 top
dd 160 ;+8 w
dd 128 ;+12 h
dd 0x80 ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_1:
dd 0 ;указатель на буфер изображения
dw 10 ;+4 left
dw 10 ;+6 top
.size_x: dd 80 ;+8 w
.size_y: dd 64 ;+12 h
dd 0x80 ;+16 color
db 24 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
lib0_name db 'buf2d.obj',0
;--------------------------------------------------
i_end: ;конец кода
rb 1024
stacktop:
cur_dir_path rb 4096
library_path rb 4096
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../KOSfuncs.inc'
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../dll.inc'
include '../../../../load_lib.mac'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
align 4
start:
load_library lib0_name, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
stdcall [buf2d_create], buf_0 ;создаем буфер
stdcall [buf2d_line], buf_0, 110, 20, 125, 90, 0xffff00 ;рисуем линию
stdcall [buf2d_line], buf_0, 60, 120, 110, 20, 0xd000 ;рисуем линию
stdcall [buf2d_curve_bezier], buf_0, (10 shl 16)+20,(110 shl 16)+10,(50 shl 16)+90, dword 0xff
stdcall [buf2d_circle], buf_0, 125, 90, 30, 0xffffff ;рисуем окружность
stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000 ;рисуем окружность
stdcall [buf2d_img_hdiv2], buf_0 ;сжимаем изображение в буфере по высоте в 2 раза
stdcall [buf2d_img_wdiv2], buf_0 ;сжимаем изображение в буфере по ширине в 2 раза
stdcall [buf2d_create_f_img], buf_1,[buf_0] ;создаем маленький буфер buf_1, на основе сжатого изображения из buf_0
;если бы использовалась функция buf2d_create, тогда биты изображения
;пришлось бы копировать следущими строками:
;movzx ecx,word[buf_1.size_x]
;movzx eax,word[buf_1.size_y]
;imul ecx,eax
;imul ecx,3 ;ecx - колличество байт в маленьком буфере
;stdcall mem_copy, dword[buf_0],dword[buf_1],ecx
stdcall [buf2d_clear], buf_0,0xffffff
stdcall [buf2d_bit_blt], buf_0, 15,10, buf_1
stdcall [buf2d_bit_blt], buf_0, 110,65, buf_1
stdcall [buf2d_conv_24_to_8], buf_1
;stdcall [buf2d_bit_blt_alpha], buf_0, 1,1, buf_1,0xff8080 ;рисуем контуры изображения на фотографии
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изм. положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW, SSF_BEGIN_DRAW
;mov edx,0x32000000
mov edx,0x33000000
mcall SF_CREATE_WINDOW, (50 shl 16)+330,(30 shl 16)+275,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW, SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_1 ;удаляем буфер
mcall SF_TERMINATE_PROCESS
caption db 'Test buf2d library, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 10 ;+6 top
dd 160 ;+8 w
dd 128 ;+12 h
dd 0x80 ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_1:
dd 0 ;указатель на буфер изображения
dw 10 ;+4 left
dw 10 ;+6 top
.size_x: dd 80 ;+8 w
.size_y: dd 64 ;+12 h
dd 0x80 ;+16 color
db 24 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
lib0_name db 'buf2d.obj',0
;--------------------------------------------------
i_end: ;конец кода
rb 1024
stacktop:
cur_dir_path rb 4096
library_path rb 4096
mem:
@@ -1,308 +1,314 @@
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../../KOSfuncs.inc'
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
IMAGE_FILE0_SIZE equ 640*480*3 ;размер файла с изображением 640 x 480
IMAGE_FILE1_SIZE equ 200*186*3 ;размер файла с изображением 200 x 100
fn_foto db 'foto.jpg',0
macro load_image_file path,buf,size { ;макрос для загрузки изображений
;path - может быть переменной или строковым параметром
if path eqtype '' ;проверяем задан ли строкой параметр path
jmp @f
local .path_str
.path_str db path ;формируем локальную переменную
db 0
@@:
;32 - стандартный адрес по которому должен быть буфер с системным путем
copy_path .path_str,[32],file_name,0x0
else
copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
end if
stdcall mem.Alloc, dword size ;выделяем память для изображения
mov [buf],eax
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем файл изображения
cmp ebx,0xffffffff
je @f
;определяем вид изображения и переводим его во временный буфер image_data
stdcall [img_decode], [buf],ebx,0
mov [image_data],eax
;преобразуем изображение к формату rgb
stdcall [img_to_rgb2], [image_data],[buf]
;удаляем временный буфер image_data
stdcall [img_destroy], [image_data]
@@:
}
align 4
start:
load_libraries l_libs_start,load_lib_end
;проверка на сколько удачно загузилась наша либа
mov ebp,lib0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mov ebp,lib1
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mcall 40,0x27
mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета
load_image_file fn_foto, image_data_foto,IMAGE_FILE0_SIZE
stdcall [buf2d_create_f_img], buf_0,[image_data_foto] ;создаем буфер
stdcall mem.Free,[image_data_foto] ;освобождаем память
load_image_file 'img0.png',image_data_gray,IMAGE_FILE1_SIZE
stdcall [buf2d_create_f_img], buf_1,[image_data_gray] ;создаем буфер
stdcall mem.Free,[image_data_gray] ;освобождаем память
load_image_file 'img1.png',image_data_rgb, IMAGE_FILE1_SIZE
stdcall [buf2d_create_f_img], buf_2,[image_data_rgb] ;создаем буфер
stdcall mem.Free,[image_data_rgb] ;освобождаем память
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8бит
stdcall [buf2d_conv_24_to_32],buf_2,buf_1 ;делаем буфер rgba 32бит
stdcall [buf2d_bit_blt], buf_0, 10,170, buf_2 ;рисуем изображение на фотографии
stdcall [buf2d_bit_blt_transp], buf_0, 210,270, buf_2 ;рисуем прозрачное изображение на фотографии
stdcall [buf2d_bit_blt_alpha], buf_0, 410,170, buf_1,0xff8080 ;рисуем контуры изображения на фотографии
align 4
red_win:
call draw_window
align 4
still: ;главный цикл
mcall 10
cmp al,0x1 ;изменилось положение окна
jz red_win
cmp al,0x2
jz key
cmp al,0x3
jz button
jmp still
align 4
key:
push eax ebx
mcall 2
;...
pop ebx eax
jmp still
align 4
draw_window:
pushad
mcall 12,1
mov edx,[sc.work]
or edx,0x33000000
mcall 0,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
stdcall [buf2d_draw], buf_0
mcall 12,2
popad
ret
system_dir0 db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
system_dir1 db '/sys/lib/'
name_libimg db 'libimg.obj',0
;library structures
l_libs_start:
lib0 l_libs name_buf2d, file_name, system_dir0, import_buf2d_lib
lib1 l_libs name_libimg, file_name, system_dir1, import_libimg
load_lib_end:
align 4
button:
mcall 17 ;получить код нажатой кнопки
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_1 ;удаляем буфер
stdcall [buf2d_delete],buf_2 ;удаляем буфер
mcall -1 ;выход из программы
image_data dd 0 ;память для преобразования картинки функциями libimg
image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
image_data_foto dd 0
run_file_70 FileInfoBlock
caption db 'Draw images 13.09.11',0 ;подпись окна
sc system_colors ;системные цвета
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 5 ;+6 top
dd 640 ;+8 w
dd 480 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_1:
dd 0 ;указатель на буфер изображения
dw 25 ;+4 left
dw 25 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_2:
dd 0 ;указатель на буфер изображения
dw 235 ;+4 left
dw 25 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
import_libimg:
dd alib_init1
img_is_img dd aimg_is_img
img_info dd aimg_info
img_from_file dd aimg_from_file
img_to_file dd aimg_to_file
img_from_rgb dd aimg_from_rgb
img_to_rgb dd aimg_to_rgb
img_to_rgb2 dd aimg_to_rgb2
img_decode dd aimg_decode
img_encode dd aimg_encode
img_create dd aimg_create
img_destroy dd aimg_destroy
img_destroy_layer dd aimg_destroy_layer
img_count dd aimg_count
img_lock_bits dd aimg_lock_bits
img_unlock_bits dd aimg_unlock_bits
img_flip dd aimg_flip
img_flip_layer dd aimg_flip_layer
img_rotate dd aimg_rotate
img_rotate_layer dd aimg_rotate_layer
img_draw dd aimg_draw
dd 0,0
alib_init1 db 'lib_init',0
aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
aimg_info db 'img_info',0
aimg_from_file db 'img_from_file',0
aimg_to_file db 'img_to_file',0
aimg_from_rgb db 'img_from_rgb',0
aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
aimg_to_rgb2 db 'img_to_rgb2',0
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
aimg_encode db 'img_encode',0
aimg_create db 'img_create',0
aimg_destroy db 'img_destroy',0
aimg_destroy_layer db 'img_destroy_layer',0
aimg_count db 'img_count',0
aimg_lock_bits db 'img_lock_bits',0
aimg_unlock_bits db 'img_unlock_bits',0
aimg_flip db 'img_flip',0
aimg_flip_layer db 'img_flip_layer',0
aimg_rotate db 'img_rotate',0
aimg_rotate_layer db 'img_rotate_layer',0
aimg_draw db 'img_draw',0
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
i_end:
rb 1024
stacktop:
cur_dir_path rb 4096
file_name:
rb 4096
plugin_path:
rb 4096
openfile_path:
rb 4096
filename_area:
rb 256
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../KOSfuncs.inc'
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
IMAGE_FILE0_SIZE equ 640*480*3 ;размер файла с изображением 640 x 480
IMAGE_FILE1_SIZE equ 200*186*3 ;размер файла с изображением 200 x 100
fn_foto db 'foto.jpg',0
macro load_image_file path,buf,size { ;макрос для загрузки изображений
;path - может быть переменной или строковым параметром
if path eqtype '' ;проверяем задан ли строкой параметр path
jmp @f
local .path_str
.path_str db path ;формируем локальную переменную
db 0
@@:
;32 - стандартный адрес по которому должен быть буфер с системным путем
copy_path .path_str,[32],file_name,0x0
else
copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
end if
stdcall mem.Alloc, dword size ;выделяем память для изображения
mov [buf],eax
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем файл изображения
cmp ebx,0xffffffff
je @f
;определяем вид изображения и переводим его во временный буфер image_data
stdcall [img_decode], [buf],ebx,0
mov [image_data],eax
;преобразуем изображение к формату rgb
stdcall [img_to_rgb2], [image_data],[buf]
;удаляем временный буфер image_data
stdcall [img_destroy], [image_data]
@@:
}
align 4
start:
load_libraries l_libs_start,load_lib_end
;проверка на сколько удачно загузилась наша либа
mov ebp,lib0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mov ebp,lib1
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mcall 40,0x27
mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета
load_image_file fn_foto, image_data_foto,IMAGE_FILE0_SIZE
stdcall [buf2d_create_f_img], buf_0,[image_data_foto] ;создаем буфер
stdcall mem.Free,[image_data_foto] ;освобождаем память
load_image_file 'img0.png',image_data_gray,IMAGE_FILE1_SIZE
stdcall [buf2d_create_f_img], buf_1,[image_data_gray] ;создаем буфер
stdcall mem.Free,[image_data_gray] ;освобождаем память
load_image_file 'img1.png',image_data_rgb, IMAGE_FILE1_SIZE
stdcall [buf2d_create_f_img], buf_2,[image_data_rgb] ;создаем буфер
stdcall mem.Free,[image_data_rgb] ;освобождаем память
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8бит
stdcall [buf2d_conv_24_to_32],buf_2,buf_1 ;делаем буфер rgba 32бит
stdcall [buf2d_bit_blt], buf_0, 10,170, buf_2 ;рисуем изображение на фотографии
stdcall [buf2d_bit_blt_transp], buf_0, 210,270, buf_2 ;рисуем прозрачное изображение на фотографии
stdcall [buf2d_bit_blt_alpha], buf_0, 410,170, buf_1,0xff8080 ;рисуем контуры изображения на фотографии
align 4
red_win:
call draw_window
align 4
still: ;главный цикл
mcall 10
cmp al,0x1 ;изменилось положение окна
jz red_win
cmp al,0x2
jz key
cmp al,0x3
jz button
jmp still
align 4
key:
push eax ebx
mcall 2
;...
pop ebx eax
jmp still
align 4
draw_window:
pushad
mcall 12,1
mov edx,[sc.work]
or edx,0x33000000
mcall 0,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
stdcall [buf2d_draw], buf_0
mcall 12,2
popad
ret
system_dir0 db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
system_dir1 db '/sys/lib/'
name_libimg db 'libimg.obj',0
;library structures
l_libs_start:
lib0 l_libs name_buf2d, file_name, system_dir0, import_buf2d_lib
lib1 l_libs name_libimg, file_name, system_dir1, import_libimg
load_lib_end:
align 4
button:
mcall 17 ;получить код нажатой кнопки
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_1 ;удаляем буфер
stdcall [buf2d_delete],buf_2 ;удаляем буфер
mcall -1 ;выход из программы
image_data dd 0 ;память для преобразования картинки функциями libimg
image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
image_data_foto dd 0
run_file_70 FileInfoBlock
caption db 'Draw images 13.09.11',0 ;подпись окна
sc system_colors ;системные цвета
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 5 ;+6 top
dd 640 ;+8 w
dd 480 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_1:
dd 0 ;указатель на буфер изображения
dw 25 ;+4 left
dw 25 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_2:
dd 0 ;указатель на буфер изображения
dw 235 ;+4 left
dw 25 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
import_libimg:
dd alib_init1
img_is_img dd aimg_is_img
img_info dd aimg_info
img_from_file dd aimg_from_file
img_to_file dd aimg_to_file
img_from_rgb dd aimg_from_rgb
img_to_rgb dd aimg_to_rgb
img_to_rgb2 dd aimg_to_rgb2
img_decode dd aimg_decode
img_encode dd aimg_encode
img_create dd aimg_create
img_destroy dd aimg_destroy
img_destroy_layer dd aimg_destroy_layer
img_count dd aimg_count
img_lock_bits dd aimg_lock_bits
img_unlock_bits dd aimg_unlock_bits
img_flip dd aimg_flip
img_flip_layer dd aimg_flip_layer
img_rotate dd aimg_rotate
img_rotate_layer dd aimg_rotate_layer
img_draw dd aimg_draw
dd 0,0
alib_init1 db 'lib_init',0
aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
aimg_info db 'img_info',0
aimg_from_file db 'img_from_file',0
aimg_to_file db 'img_to_file',0
aimg_from_rgb db 'img_from_rgb',0
aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
aimg_to_rgb2 db 'img_to_rgb2',0
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
aimg_encode db 'img_encode',0
aimg_create db 'img_create',0
aimg_destroy db 'img_destroy',0
aimg_destroy_layer db 'img_destroy_layer',0
aimg_count db 'img_count',0
aimg_lock_bits db 'img_lock_bits',0
aimg_unlock_bits db 'img_unlock_bits',0
aimg_flip db 'img_flip',0
aimg_flip_layer db 'img_flip_layer',0
aimg_rotate db 'img_rotate',0
aimg_rotate_layer db 'img_rotate_layer',0
aimg_draw db 'img_draw',0
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
i_end:
rb 1024
stacktop:
cur_dir_path rb 4096
file_name:
rb 4096
plugin_path:
rb 4096
openfile_path:
rb 4096
filename_area:
rb 256
mem:
@@ -1,308 +1,314 @@
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../../KOSfuncs.inc'
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
IMAGE_FILE1_SIZE equ 128*144*3 ;размер файла с изображением 128 x 144
macro load_image_file path,buf,size { ;макрос для загрузки изображений
;path - может быть переменной или строковым параметром
if path eqtype '' ;проверяем задан ли строкой параметр path
jmp @f
local .path_str
.path_str db path ;формируем локальную переменную
db 0
@@:
;32 - стандартный адрес по которому должен быть буфер с системным путем
copy_path .path_str,[32],file_name,0x0
else
copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
end if
stdcall mem.Alloc, dword size ;выделяем память для изображения
mov [buf],eax
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем файл изображения
cmp ebx,0xffffffff
je @f
;определяем вид изображения и переводим его во временный буфер image_data
stdcall [img_decode], [buf],ebx,0
mov [image_data],eax
;преобразуем изображение к формату rgb
stdcall [img_to_rgb2], [image_data],[buf]
;удаляем временный буфер image_data
stdcall [img_destroy], [image_data]
@@:
}
align 4
start:
load_libraries l_libs_start,load_lib_end
;проверка на сколько удачно загузилась наша либа
mov ebp,lib0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mov ebp,lib1
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mcall 40,0x27
mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета
stdcall [buf2d_create], buf_0 ;создаем буфер
load_image_file 'font8x9.bmp', image_data_foto,IMAGE_FILE1_SIZE
stdcall [buf2d_create_f_img], buf_1,[image_data_foto] ;создаем буфер
stdcall mem.Free,[image_data_foto] ;освобождаем память
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
stdcall [buf2d_bit_blt_alpha], buf_0, 70,10, buf_1,0x20d020 ;рисуем исходную текстовую матрицу 16*16
stdcall [buf2d_convert_text_matrix], buf_1
stdcall [buf2d_bit_blt_alpha], buf_0, 10,10, buf_1,0xff8080 ;рисуем преобразованную текстовую матрицу 1*256
stdcall [buf2d_draw_text], buf_0, buf_1,some_text,70,170,0x4040ff ;рисуем строку с текстом
align 4
red_win:
call draw_window
align 4
still: ;главный цикл
mcall 10
cmp al,0x1 ;изменилось положение окна
jz red_win
cmp al,0x2
jz key
cmp al,0x3
jz button
jmp still
align 4
key:
push eax ebx
mcall 2
;...
pop ebx eax
jmp still
align 4
draw_window:
pushad
mcall 12,1
mov edx,[sc.work]
or edx,0x33000000
mcall 0,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
stdcall [buf2d_draw], buf_0
mcall 12,2
popad
ret
system_dir0 db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
system_dir1 db '/sys/lib/'
name_libimg db 'libimg.obj',0
;library structures
l_libs_start:
lib0 l_libs name_buf2d, file_name, system_dir0, import_buf2d_lib
lib1 l_libs name_libimg, file_name, system_dir1, import_libimg
load_lib_end:
align 4
button:
mcall 17 ;получить код нажатой кнопки
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_1 ;удаляем буфер
mcall -1 ;выход из программы
image_data dd 0 ;память для преобразования картинки функциями libimg
image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
image_data_foto dd 0
run_file_70 FileInfoBlock
caption db 'Draw text 13.09.11',0 ;подпись окна
sc system_colors ;системные цвета
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 5 ;+6 top
dd 640 ;+8 w
dd 480 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_1:
dd 0 ;указатель на буфер изображения
dw 25 ;+4 left
dw 25 ;+6 top
dd 128 ;+8 w
dd 144 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
some_text db 'Пример вывода теста в буфер, возможен вывод:',13,13
db ' * в несколько строк',13
db ' * можно задавать цвет текста',13,13
db 'Сегодня 13 сентября 2011.',0
align 4
import_libimg:
dd alib_init1
img_is_img dd aimg_is_img
img_info dd aimg_info
img_from_file dd aimg_from_file
img_to_file dd aimg_to_file
img_from_rgb dd aimg_from_rgb
img_to_rgb dd aimg_to_rgb
img_to_rgb2 dd aimg_to_rgb2
img_decode dd aimg_decode
img_encode dd aimg_encode
img_create dd aimg_create
img_destroy dd aimg_destroy
img_destroy_layer dd aimg_destroy_layer
img_count dd aimg_count
img_lock_bits dd aimg_lock_bits
img_unlock_bits dd aimg_unlock_bits
img_flip dd aimg_flip
img_flip_layer dd aimg_flip_layer
img_rotate dd aimg_rotate
img_rotate_layer dd aimg_rotate_layer
img_draw dd aimg_draw
dd 0,0
alib_init1 db 'lib_init',0
aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
aimg_info db 'img_info',0
aimg_from_file db 'img_from_file',0
aimg_to_file db 'img_to_file',0
aimg_from_rgb db 'img_from_rgb',0
aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
aimg_to_rgb2 db 'img_to_rgb2',0
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
aimg_encode db 'img_encode',0
aimg_create db 'img_create',0
aimg_destroy db 'img_destroy',0
aimg_destroy_layer db 'img_destroy_layer',0
aimg_count db 'img_count',0
aimg_lock_bits db 'img_lock_bits',0
aimg_unlock_bits db 'img_unlock_bits',0
aimg_flip db 'img_flip',0
aimg_flip_layer db 'img_flip_layer',0
aimg_rotate db 'img_rotate',0
aimg_rotate_layer db 'img_rotate_layer',0
aimg_draw db 'img_draw',0
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_resize dd sz_buf2d_resize
buf2d_line dd sz_buf2d_line
buf2d_rect_by_size dd sz_buf2d_rect_by_size
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
buf2d_crop_color dd sz_buf2d_crop_color
buf2d_offset_h dd sz_buf2d_offset_h
buf2d_flood_fill dd sz_buf2d_flood_fill
buf2d_set_pixel dd sz_buf2d_set_pixel
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_resize db 'buf2d_resize',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
sz_buf2d_circle db 'buf2d_circle',0
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
sz_buf2d_crop_color db 'buf2d_crop_color',0
sz_buf2d_offset_h db 'buf2d_offset_h',0
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
i_end:
rb 1024
stacktop:
cur_dir_path rb 4096
file_name:
rb 4096
plugin_path:
rb 4096
openfile_path:
rb 4096
filename_area:
rb 256
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../KOSfuncs.inc'
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
IMAGE_FILE1_SIZE equ 128*144*3 ;размер файла с изображением 128 x 144
macro load_image_file path,buf,size { ;макрос для загрузки изображений
;path - может быть переменной или строковым параметром
if path eqtype '' ;проверяем задан ли строкой параметр path
jmp @f
local .path_str
.path_str db path ;формируем локальную переменную
db 0
@@:
;32 - стандартный адрес по которому должен быть буфер с системным путем
copy_path .path_str,[32],file_name,0x0
else
copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
end if
stdcall mem.Alloc, dword size ;выделяем память для изображения
mov [buf],eax
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем файл изображения
cmp ebx,0xffffffff
je @f
;определяем вид изображения и переводим его во временный буфер image_data
stdcall [img_decode], [buf],ebx,0
mov [image_data],eax
;преобразуем изображение к формату rgb
stdcall [img_to_rgb2], [image_data],[buf]
;удаляем временный буфер image_data
stdcall [img_destroy], [image_data]
@@:
}
align 4
start:
load_libraries l_libs_start,load_lib_end
;проверка на сколько удачно загузилась наша либа
mov ebp,lib0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mov ebp,lib1
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mcall 40,0x27
mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета
stdcall [buf2d_create], buf_0 ;создаем буфер
load_image_file 'font8x9.bmp', image_data_foto,IMAGE_FILE1_SIZE
stdcall [buf2d_create_f_img], buf_1,[image_data_foto] ;создаем буфер
stdcall mem.Free,[image_data_foto] ;освобождаем память
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
stdcall [buf2d_bit_blt_alpha], buf_0, 70,10, buf_1,0x20d020 ;рисуем исходную текстовую матрицу 16*16
stdcall [buf2d_convert_text_matrix], buf_1
stdcall [buf2d_bit_blt_alpha], buf_0, 10,10, buf_1,0xff8080 ;рисуем преобразованную текстовую матрицу 1*256
stdcall [buf2d_draw_text], buf_0, buf_1,some_text,70,170,0x4040ff ;рисуем строку с текстом
align 4
red_win:
call draw_window
align 4
still: ;главный цикл
mcall 10
cmp al,0x1 ;изменилось положение окна
jz red_win
cmp al,0x2
jz key
cmp al,0x3
jz button
jmp still
align 4
key:
push eax ebx
mcall 2
;...
pop ebx eax
jmp still
align 4
draw_window:
pushad
mcall 12,1
mov edx,[sc.work]
or edx,0x33000000
mcall 0,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
stdcall [buf2d_draw], buf_0
mcall 12,2
popad
ret
system_dir0 db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
system_dir1 db '/sys/lib/'
name_libimg db 'libimg.obj',0
;library structures
l_libs_start:
lib0 l_libs name_buf2d, file_name, system_dir0, import_buf2d_lib
lib1 l_libs name_libimg, file_name, system_dir1, import_libimg
load_lib_end:
align 4
button:
mcall 17 ;получить код нажатой кнопки
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_1 ;удаляем буфер
mcall -1 ;выход из программы
image_data dd 0 ;память для преобразования картинки функциями libimg
image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
image_data_foto dd 0
run_file_70 FileInfoBlock
caption db 'Draw text 13.09.11',0 ;подпись окна
sc system_colors ;системные цвета
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 5 ;+6 top
dd 640 ;+8 w
dd 480 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_1:
dd 0 ;указатель на буфер изображения
dw 25 ;+4 left
dw 25 ;+6 top
dd 128 ;+8 w
dd 144 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
some_text db 'Пример вывода теста в буфер, возможен вывод:',13,13
db ' * в несколько строк',13
db ' * можно задавать цвет текста',13,13
db 'Сегодня 13 сентября 2011.',0
align 4
import_libimg:
dd alib_init1
img_is_img dd aimg_is_img
img_info dd aimg_info
img_from_file dd aimg_from_file
img_to_file dd aimg_to_file
img_from_rgb dd aimg_from_rgb
img_to_rgb dd aimg_to_rgb
img_to_rgb2 dd aimg_to_rgb2
img_decode dd aimg_decode
img_encode dd aimg_encode
img_create dd aimg_create
img_destroy dd aimg_destroy
img_destroy_layer dd aimg_destroy_layer
img_count dd aimg_count
img_lock_bits dd aimg_lock_bits
img_unlock_bits dd aimg_unlock_bits
img_flip dd aimg_flip
img_flip_layer dd aimg_flip_layer
img_rotate dd aimg_rotate
img_rotate_layer dd aimg_rotate_layer
img_draw dd aimg_draw
dd 0,0
alib_init1 db 'lib_init',0
aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
aimg_info db 'img_info',0
aimg_from_file db 'img_from_file',0
aimg_to_file db 'img_to_file',0
aimg_from_rgb db 'img_from_rgb',0
aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
aimg_to_rgb2 db 'img_to_rgb2',0
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
aimg_encode db 'img_encode',0
aimg_create db 'img_create',0
aimg_destroy db 'img_destroy',0
aimg_destroy_layer db 'img_destroy_layer',0
aimg_count db 'img_count',0
aimg_lock_bits db 'img_lock_bits',0
aimg_unlock_bits db 'img_unlock_bits',0
aimg_flip db 'img_flip',0
aimg_flip_layer db 'img_flip_layer',0
aimg_rotate db 'img_rotate',0
aimg_rotate_layer db 'img_rotate_layer',0
aimg_draw db 'img_draw',0
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_resize dd sz_buf2d_resize
buf2d_line dd sz_buf2d_line
buf2d_rect_by_size dd sz_buf2d_rect_by_size
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
buf2d_crop_color dd sz_buf2d_crop_color
buf2d_offset_h dd sz_buf2d_offset_h
buf2d_flood_fill dd sz_buf2d_flood_fill
buf2d_set_pixel dd sz_buf2d_set_pixel
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_resize db 'buf2d_resize',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
sz_buf2d_circle db 'buf2d_circle',0
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
sz_buf2d_crop_color db 'buf2d_crop_color',0
sz_buf2d_offset_h db 'buf2d_offset_h',0
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
i_end:
rb 1024
stacktop:
cur_dir_path rb 4096
file_name:
rb 4096
plugin_path:
rb 4096
openfile_path:
rb 4096
filename_area:
rb 256
mem:
@@ -1,178 +1,183 @@
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../../KOSfuncs.inc'
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
buf2d_l equ word[edi+4] ;юЄёЄєя ёыхтр
buf2d_t equ word[edi+6] ;юЄёЄєя ётхЁїє
align 4
start:
load_library lib0_name, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS,sc,sizeof.system_colors ;яюыєўрхь ёшёЄхьэ√х ЎтхЄр
stdcall [buf2d_create], buf_0 ;ёючфрхь сєЇхЁ
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;шчь. яюыюцхэшх юъэр
jz red_win
cmp al,2
jz key
cmp al,3
jz button
cmp al,6
jz mouse
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW, SSF_BEGIN_DRAW
mov edx,[sc.work]
or edx,0x33000000
mcall SF_CREATE_WINDOW, (50 shl 16)+500,(30 shl 16)+370,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW, SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
; cmp ah,27 ;Esc
; je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;єфры хь сєЇхЁ
mcall SF_TERMINATE_PROCESS
align 4
mouse:
;юсЁрсрЄ√трхь юъэю ЁхфръЄюЁр
mcall SF_MOUSE_GET, SSF_BUTTON ;get mouse buttons
cmp al,1
jne @f
mcall SF_MOUSE_GET, SSF_WINDOW_POSITION ;get mouse coords
mov ebx,eax
shr ebx,16 ;т eax ъююЁфшэрЄр ьш°ш яю юёш 'x'
and eax,0xffff ;т eax ъююЁфшэрЄр ьш°ш яю юёш 'y'
mov edi,buf_0
sub ax,buf2d_t ;ёфтшурхь ъююЁфшэрЄ√ єўшЄ√тр  ёьх∙хэшх сєЇхЁр
sub bx,buf2d_l
;Ёшёютрэшх яЁш эрцрЄшш
;stdcall [buf2d_circle], edi, ebx, eax, 20, 0xff0000 ;Ёшёєхь юъЁєцэюёЄ№
;stdcall [buf2d_flood_fill], edi, ebx, eax, 0, 0xff,0xff0000 ;чрыштър ЎтхЄюь
sub eax,5
sub ebx,5
stdcall [buf2d_filled_rect_by_size], edi, ebx,eax, 10,10, 0xff0000 ;Ёшёєхь яЁ ьюєуюы№эшъ
stdcall [buf2d_draw], edi ;юсэюты хь ¤ъЁрэ
@@:
jmp still
caption db 'Press left mouse button',0
sc system_colors ;ёшёЄхьэ√х ЎтхЄр
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_resize dd sz_buf2d_resize
buf2d_line dd sz_buf2d_line
buf2d_rect_by_size dd sz_buf2d_rect_by_size
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
buf2d_crop_color dd sz_buf2d_crop_color
buf2d_offset_h dd sz_buf2d_offset_h
buf2d_flood_fill dd sz_buf2d_flood_fill
buf2d_set_pixel dd sz_buf2d_set_pixel
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_resize db 'buf2d_resize',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
sz_buf2d_circle db 'buf2d_circle',0
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
sz_buf2d_crop_color db 'buf2d_crop_color',0
sz_buf2d_offset_h db 'buf2d_offset_h',0
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
align 4
buf_0:
dd 0 ;єърчрЄхы№ эр сєЇхЁ шчюсЁрцхэш 
dw 5 ;+4 left
dw 5 ;+6 top
dd 480 ;+8 w
dd 320 ;+12 h
.color: dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
lib0_name db 'buf2d.obj',0
;--------------------------------------------------
i_end: ;ъюэхЎ ъюфр
rb 2*4096
stacktop:
cur_dir_path rb 4096
library_path rb 4096
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page Windows 1251 - Cyrillic
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../KOSfuncs.inc'
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
buf2d_l equ word[edi+4] ;юЄёЄєя ёыхтр
buf2d_t equ word[edi+6] ;юЄёЄєя ётхЁїє
align 4
start:
load_library lib0_name, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS,sc,sizeof.system_colors ;яюыєўрхь ёшёЄхьэ√х ЎтхЄр
stdcall [buf2d_create], buf_0 ;ёючфрхь сєЇхЁ
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;шчь. яюыюцхэшх юъэр
jz red_win
cmp al,2
jz key
cmp al,3
jz button
cmp al,6
jz mouse
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW, SSF_BEGIN_DRAW
mov edx,[sc.work]
or edx,0x33000000
mcall SF_CREATE_WINDOW, (50 shl 16)+500,(30 shl 16)+370,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW, SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
; cmp ah,27 ;Esc
; je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;єфры хь сєЇхЁ
mcall SF_TERMINATE_PROCESS
align 4
mouse:
;юсЁрсрЄ√трхь юъэю ЁхфръЄюЁр
mcall SF_MOUSE_GET, SSF_BUTTON ;get mouse buttons
cmp al,1
jne @f
mcall SF_MOUSE_GET, SSF_WINDOW_POSITION ;get mouse coords
mov ebx,eax
shr ebx,16 ;т eax ъююЁфшэрЄр ьш°ш яю юёш 'x'
and eax,0xffff ;т eax ъююЁфшэрЄр ьш°ш яю юёш 'y'
mov edi,buf_0
sub ax,buf2d_t ;ёфтшурхь ъююЁфшэрЄ√ єўшЄ√тр  ёьх∙хэшх сєЇхЁр
sub bx,buf2d_l
;Ёшёютрэшх яЁш эрцрЄшш
;stdcall [buf2d_circle], edi, ebx, eax, 20, 0xff0000 ;Ёшёєхь юъЁєцэюёЄ№
;stdcall [buf2d_flood_fill], edi, ebx, eax, 0, 0xff,0xff0000 ;чрыштър ЎтхЄюь
sub eax,5
sub ebx,5
stdcall [buf2d_filled_rect_by_size], edi, ebx,eax, 10,10, 0xff0000 ;Ёшёєхь яЁ ьюєуюы№эшъ
stdcall [buf2d_draw], edi ;юсэюты хь ¤ъЁрэ
@@:
jmp still
caption db 'Press left mouse button',0
sc system_colors ;ёшёЄхьэ√х ЎтхЄр
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_resize dd sz_buf2d_resize
buf2d_line dd sz_buf2d_line
buf2d_rect_by_size dd sz_buf2d_rect_by_size
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
buf2d_crop_color dd sz_buf2d_crop_color
buf2d_offset_h dd sz_buf2d_offset_h
buf2d_flood_fill dd sz_buf2d_flood_fill
buf2d_set_pixel dd sz_buf2d_set_pixel
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_resize db 'buf2d_resize',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
sz_buf2d_circle db 'buf2d_circle',0
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
sz_buf2d_crop_color db 'buf2d_crop_color',0
sz_buf2d_offset_h db 'buf2d_offset_h',0
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
align 4
buf_0:
dd 0 ;єърчрЄхы№ эр сєЇхЁ шчюсЁрцхэш 
dw 5 ;+4 left
dw 5 ;+6 top
dd 480 ;+8 w
dd 320 ;+12 h
.color: dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
lib0_name db 'buf2d.obj',0
;--------------------------------------------------
i_end: ;ъюэхЎ ъюфр
rb 2*4096
stacktop:
cur_dir_path rb 4096
library_path rb 4096
mem:
@@ -1,182 +1,187 @@
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../../KOSfuncs.inc'
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
buf2d_l equ word[edi+4] ;отступ слева
buf2d_t equ word[edi+6] ;отступ сверху
buf2d_w equ dword[edi+8]
buf2d_h equ dword[edi+12]
buf2d_color equ dword[edi+16] ;цвет фона буфера
align 4
start:
load_library lib0_name, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK,0xC0000027
stdcall [buf2d_create], buf_0 ;создаем буфер
;рисуем первоначальный кадр
stdcall [buf2d_filled_rect_by_size], buf_0, 100-50,70-25, 100,50, 0xffffff ;рисуем прямоугольник
stdcall [buf2d_line], buf_0, 10,10, 100,75, 0xff0000 ;рисуем простую линию
stdcall [buf2d_line_sm], buf_0, 100,75, 190,140, 0xff0000 ;рисуем сглаженную линию
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
cmp al,6
jz mouse
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
;mov edx,0x32000000
mov edx,0x33000000
mcall SF_CREATE_WINDOW,(50 shl 16)+330,(30 shl 16)+275,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW,SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
mcall SF_TERMINATE_PROCESS
align 4
mouse:
;обрабатываем окно редактора
mcall SF_MOUSE_GET,SSF_BUTTON
cmp al,1
jne @f
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
shr ebx,16 ;в eax координата миши по оси 'x'
and eax,0xffff ;в eax координата миши по оси 'y'
mov edi,buf_0
sub ax,buf2d_t ;сдвигаем координаты учитывая смещение буфера
cmp eax,buf2d_h
jge @f
sub bx,buf2d_l
cmp ebx,buf2d_w
jge @f
;рисование при нажатии
stdcall [buf2d_clear], edi, buf2d_color ;очищаем экран от предыдущих рисований
stdcall [buf2d_filled_rect_by_size], edi, 100-50,70-25, 100,50, 0xffffff ;рисуем прямоугольник
stdcall [buf2d_line], edi, 10,10, ebx,eax, 0xff0000 ;рисуем простую линию
stdcall [buf2d_line_sm], edi, 190,140, ebx,eax, 0xff0000 ;рисуем сглаженную линию
stdcall [buf2d_draw], edi ;обновляем экран
@@:
jmp still
caption db 'Press left mouse button, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_line_sm dd sz_buf2d_line_sm
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_line_sm db 'buf2d_line_sm',0
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 10 ;+6 top
dd 200 ;+8 w
dd 150 ;+12 h
dd 0x80 ;+16 color
db 24 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
lib0_name db 'buf2d.obj',0
;--------------------------------------------------
align 16
i_end: ;конец кода
rb 1024
stacktop:
cur_dir_path:
rb 4096
library_path:
rb 4096
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
use32
org 0
db 'MENUET01'
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../KOSfuncs.inc'
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
buf2d_l equ word[edi+4] ;отступ слева
buf2d_t equ word[edi+6] ;отступ сверху
buf2d_w equ dword[edi+8]
buf2d_h equ dword[edi+12]
buf2d_color equ dword[edi+16] ;цвет фона буфера
align 4
start:
load_library lib0_name, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK,0xC0000027
stdcall [buf2d_create], buf_0 ;создаем буфер
;рисуем первоначальный кадр
stdcall [buf2d_filled_rect_by_size], buf_0, 100-50,70-25, 100,50, 0xffffff ;рисуем прямоугольник
stdcall [buf2d_line], buf_0, 10,10, 100,75, 0xff0000 ;рисуем простую линию
stdcall [buf2d_line_sm], buf_0, 100,75, 190,140, 0xff0000 ;рисуем сглаженную линию
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
cmp al,6
jz mouse
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
;mov edx,0x32000000
mov edx,0x33000000
mcall SF_CREATE_WINDOW,(50 shl 16)+330,(30 shl 16)+275,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW,SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
mcall SF_TERMINATE_PROCESS
align 4
mouse:
;обрабатываем окно редактора
mcall SF_MOUSE_GET,SSF_BUTTON
cmp al,1
jne @f
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
mov ebx,eax
shr ebx,16 ;в eax координата миши по оси 'x'
and eax,0xffff ;в eax координата миши по оси 'y'
mov edi,buf_0
sub ax,buf2d_t ;сдвигаем координаты учитывая смещение буфера
cmp eax,buf2d_h
jge @f
sub bx,buf2d_l
cmp ebx,buf2d_w
jge @f
;рисование при нажатии
stdcall [buf2d_clear], edi, buf2d_color ;очищаем экран от предыдущих рисований
stdcall [buf2d_filled_rect_by_size], edi, 100-50,70-25, 100,50, 0xffffff ;рисуем прямоугольник
stdcall [buf2d_line], edi, 10,10, ebx,eax, 0xff0000 ;рисуем простую линию
stdcall [buf2d_line_sm], edi, 190,140, ebx,eax, 0xff0000 ;рисуем сглаженную линию
stdcall [buf2d_draw], edi ;обновляем экран
@@:
jmp still
caption db 'Press left mouse button, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_line_sm dd sz_buf2d_line_sm
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_line_sm db 'buf2d_line_sm',0
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 10 ;+6 top
dd 200 ;+8 w
dd 150 ;+12 h
dd 0x80 ;+16 color
db 24 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
lib0_name db 'buf2d.obj',0
;--------------------------------------------------
align 16
i_end: ;конец кода
rb 1024
stacktop:
cur_dir_path:
rb 4096
library_path:
rb 4096
mem:
@@ -1,219 +1,224 @@
use32
org 0
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
max_open_file_size equ 64*1024 ;64 Kb
align 4
open_file_vox dd 0 ;указатель на область для открытия файлов
run_file_70 FileInfoBlock
f_name db 'vaz2106.vox',0
vox_offs_tree_table equ 4
;поворот объекта на 90 градусов
;x0y0 - x1y0
;x1y0 - x1y1
;x0y1 - x0y0
;x1y1 - x0y1
align 4
proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword
mov ebx,[v_obj]
add ebx,vox_offs_tree_table
mov ecx,2
cld
@@:
mov eax,dword[ebx]
mov byte[ebx+1],al
mov byte[ebx+3],ah
shr eax,16
mov byte[ebx],al
mov byte[ebx+2],ah
add ebx,4
loop @b
ret
endp
align 4
start:
load_library name_buf2d, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK,0x27
stdcall [buf2d_create], buf_0 ;создаем буфер
stdcall [buf2d_create], buf_z
stdcall mem.Alloc,max_open_file_size
mov dword[open_file_vox],eax
copy_path f_name,[32],file_name,0
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov dword[run_file_70.Count], max_open_file_size
m2m [run_file_70.Buffer], [open_file_vox]
mov byte[run_file_70+20], 0
mov dword[run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем воксельный объект
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 0,0, 7
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 128,0, 7
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 0,128, 7
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 128,128, 7
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edx,0x33000000
mcall SF_CREATE_WINDOW,(50 shl 16)+330,(30 shl 16)+295,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW,SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_z
stdcall mem.Free,[open_file_vox]
mcall SF_TERMINATE_PROCESS
caption db 'Test buf2d library, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
;воксельные функции:
;buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
;buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g
;buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
;buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
;buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
;buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
;buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
;buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
;buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
;воксельные функции:
;sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
;sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
;sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
;sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
;sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
;sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
;sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
;sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
;sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 5 ;+6 top
dd 256 ;+8 w
dd 256 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_z:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 5 ;+6 top
dd 256 ;+8 w
dd 256 ;+12 h
dd 0 ;+16 color
db 32 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
;--------------------------------------------------
align 16
i_end: ;конец кода
file_name:
rb 4096
cur_dir_path:
rb 4096
library_path:
rb 4096
rb 1024
stacktop:
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
use32
org 0
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../KOSfuncs.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
max_open_file_size equ 64*1024 ;64 Kb
align 4
open_file_vox dd 0 ;указатель на область для открытия файлов
run_file_70 FileInfoBlock
f_name db 'vaz2106.vox',0
vox_offs_tree_table equ 4
;поворот объекта на 90 градусов
;x0y0 - x1y0
;x1y0 - x1y1
;x0y1 - x0y0
;x1y1 - x0y1
align 4
proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword
mov ebx,[v_obj]
add ebx,vox_offs_tree_table
mov ecx,2
cld
@@:
mov eax,dword[ebx]
mov byte[ebx+1],al
mov byte[ebx+3],ah
shr eax,16
mov byte[ebx],al
mov byte[ebx+2],ah
add ebx,4
loop @b
ret
endp
align 4
start:
load_library name_buf2d, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK,0x27
stdcall [buf2d_create], buf_0 ;создаем буфер
stdcall [buf2d_create], buf_z
stdcall mem.Alloc,max_open_file_size
mov dword[open_file_vox],eax
copy_path f_name,[32],file_name,0
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov dword[run_file_70.Count], max_open_file_size
m2m [run_file_70.Buffer], [open_file_vox]
mov byte[run_file_70+20], 0
mov dword[run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем воксельный объект
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 0,0, 7
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 128,0, 7
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 0,128, 7
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 128,128, 7
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edx,0x33000000
mcall SF_CREATE_WINDOW,(50 shl 16)+330,(30 shl 16)+295,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW,SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_z
stdcall mem.Free,[open_file_vox]
mcall SF_TERMINATE_PROCESS
caption db 'Test buf2d library, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
;воксельные функции:
;buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
;buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g
;buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
;buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
;buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
;buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
;buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
;buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
;buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
;воксельные функции:
;sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
;sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
;sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
;sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
;sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
;sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
;sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
;sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
;sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 5 ;+6 top
dd 256 ;+8 w
dd 256 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_z:
dd 0 ;указатель на буфер изображения
dw 20 ;+4 left
dw 5 ;+6 top
dd 256 ;+8 w
dd 256 ;+12 h
dd 0 ;+16 color
db 32 ;+20 bit in pixel
;--------------------------------------------------
system_path db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
;--------------------------------------------------
align 16
i_end: ;конец кода
file_name:
rb 4096
cur_dir_path:
rb 4096
library_path:
rb 4096
rb 1024
stacktop:
mem:
@@ -1,240 +1,244 @@
use32
org 0
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
max_open_file_size equ 64*1024 ;64 Kb
align 4
open_file_vox dd 0 ;указатель на область для открытия файлов
run_file_70 FileInfoBlock
f_name db 'vaz2106.vox',0
BUF_STRUCT_SIZE equ 21
vox_offs_tree_table equ 4
;поворот объекта на 90 градусов
;x0y0 - x1y0
;x1y0 - x1y1
;x0y1 - x0y0
;x1y1 - x0y1
align 4
proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword
mov ebx,[v_obj]
add ebx,vox_offs_tree_table
mov ecx,2
cld
@@:
mov eax,dword[ebx]
mov byte[ebx+1],al
mov byte[ebx+3],ah
shr eax,16
mov byte[ebx],al
mov byte[ebx+2],ah
add ebx,4
loop @b
ret
endp
align 4
start:
load_library name_buf2d, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
stdcall [buf2d_create], buf_0 ;создаем буфер
stdcall [buf2d_create], buf_z
stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z ;создаем воксельную кисть
stdcall mem.Alloc,max_open_file_size
mov [open_file_vox],eax
copy_path f_name,[32],file_name,0
mov eax,SF_FILE
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov dword[run_file_70.Count], max_open_file_size
m2m [run_file_70.Buffer], [open_file_vox]
mov byte[run_file_70+20], 0
mov dword[run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем воксельный объект
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox,\
[open_file_vox], 0,0, 0, 6 ;рисуем воксельный объект
stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_z, buf_vox,\
0,0, 0, 6, 3 ;рисуем тени
stdcall vox_obj_rot_z, [open_file_vox] ;поворачиваем
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 0,0, 0, 5
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 100,0, 0, 5
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 200,0, 0, 5
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW, SSF_BEGIN_DRAW
mov edx,0x33000000
mcall SF_CREATE_WINDOW, (50 shl 16)+410,(30 shl 16)+480,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW, SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_z
stdcall [buf2d_vox_brush_delete],buf_vox
stdcall mem.Free,[open_file_vox]
mcall SF_TERMINATE_PROCESS
caption db 'Test buf2d library, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
;воксельные функции:
buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
;buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g
;buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
;buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
;buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
;buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
;buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
;воксельные функции:
sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
;sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
;sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
;sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
;sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
;sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
;sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
align 4
buf_0: ;буфер основного изображения
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 3 ;+6 top
dd 6*64 ;+8 w
dd 7*64 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_z: ;буфер глубины
dd 0 ;указатель на буфер изображения
dw 0 ;+4 left
dw 0 ;+6 top
dd 6*64 ;+8 w
dd 7*64 ;+12 h
dd 0 ;+16 color
db 32 ;+20 bit in pixel
;данные для создания минимального единичного вокселя
align 4
vox_6_7_z:
dd 0,0,1,1,0,0,\
0,2,2,2,2,0,\
2,2,2,2,2,2,\
2,3,2,2,3,2,\
2,3,3,3,3,2,\
0,3,3,3,3,0,\
0,0,3,3,0,0
align 4
buf_vox:
db 6,7,4,3 ;w,h,h_osn,n
rb BUF_STRUCT_SIZE*(2+1)
;--------------------------------------------------
system_path db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
;--------------------------------------------------
align 16
i_end: ;конец кода
file_name rb 4096
cur_dir_path rb 4096
library_path rb 4096
rb 1024
stacktop:
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
use32
org 0
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../KOSfuncs.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
max_open_file_size equ 64*1024 ;64 Kb
align 4
open_file_vox dd 0 ;указатель на область для открытия файлов
run_file_70 FileInfoBlock
f_name db 'vaz2106.vox',0
BUF_STRUCT_SIZE equ 21
vox_offs_tree_table equ 4
;поворот объекта на 90 градусов
;x0y0 - x1y0
;x1y0 - x1y1
;x0y1 - x0y0
;x1y1 - x0y1
align 4
proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword
mov ebx,[v_obj]
add ebx,vox_offs_tree_table
mov ecx,2
cld
@@:
mov eax,dword[ebx]
mov byte[ebx+1],al
mov byte[ebx+3],ah
shr eax,16
mov byte[ebx],al
mov byte[ebx+2],ah
add ebx,4
loop @b
ret
endp
align 4
start:
load_library name_buf2d, library_path, system_path, import_buf2d_lib
cmp eax,-1
jz button.exit
mcall SF_SET_EVENTS_MASK, 0x27
stdcall [buf2d_create], buf_0 ;создаем буфер
stdcall [buf2d_create], buf_z
stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z ;создаем воксельную кисть
stdcall mem.Alloc,max_open_file_size
mov [open_file_vox],eax
copy_path f_name,[32],file_name,0
mov eax,SF_FILE
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov dword[run_file_70.Count], max_open_file_size
m2m [run_file_70.Buffer], [open_file_vox]
mov byte[run_file_70+20], 0
mov dword[run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем воксельный объект
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox,\
[open_file_vox], 0,0, 0, 6 ;рисуем воксельный объект
stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_z, buf_vox,\
0,0, 0, 6, 3 ;рисуем тени
stdcall vox_obj_rot_z, [open_file_vox] ;поворачиваем
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 0,0, 0, 5
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 100,0, 0, 5
stdcall vox_obj_rot_z, [open_file_vox]
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 200,0, 0, 5
align 4
red_win:
call draw_window
align 4
still:
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW, SSF_BEGIN_DRAW
mov edx,0x33000000
mcall SF_CREATE_WINDOW, (50 shl 16)+410,(30 shl 16)+480,,,caption
stdcall [buf2d_draw], buf_0
mcall SF_REDRAW, SSF_END_DRAW
popad
ret
align 4
key:
mcall SF_GET_KEY
cmp ah,27 ;Esc
je button.exit
jmp still
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_z
stdcall [buf2d_vox_brush_delete],buf_vox
stdcall mem.Free,[open_file_vox]
mcall SF_TERMINATE_PROCESS
caption db 'Test buf2d library, [Esc] - exit',0
;--------------------------------------------------
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
;воксельные функции:
buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
;buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g
;buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
;buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
;buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
;buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
;buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
;воксельные функции:
sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
;sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
;sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
;sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
;sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
;sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
;sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
align 4
buf_0: ;буфер основного изображения
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 3 ;+6 top
dd 6*64 ;+8 w
dd 7*64 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_z: ;буфер глубины
dd 0 ;указатель на буфер изображения
dw 0 ;+4 left
dw 0 ;+6 top
dd 6*64 ;+8 w
dd 7*64 ;+12 h
dd 0 ;+16 color
db 32 ;+20 bit in pixel
;данные для создания минимального единичного вокселя
align 4
vox_6_7_z:
dd 0,0,1,1,0,0,\
0,2,2,2,2,0,\
2,2,2,2,2,2,\
2,3,2,2,3,2,\
2,3,3,3,3,2,\
0,3,3,3,3,0,\
0,0,3,3,0,0
align 4
buf_vox:
db 6,7,4,3 ;w,h,h_osn,n
rb BUF_STRUCT_SIZE*(2+1)
;--------------------------------------------------
system_path db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
;--------------------------------------------------
align 16
i_end: ;конец кода
file_name rb 4096
cur_dir_path rb 4096
library_path rb 4096
rb 1024
stacktop:
mem:
@@ -1,287 +1,293 @@
use32
org 0
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
dd 1,start,i_end,mem,stacktop,0,sys_path
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../load_lib.mac'
include '../../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
IMAGE_FILE1_SIZE equ 200*186*3 ;размер файла с изображением 200 x 100
BUF_STRUCT_SIZE equ 21
buf2d_data equ dword[edi] ;данные буфера изображения
buf2d_w equ dword[edi+8] ;ширина буфера
buf2d_h equ dword[edi+12] ;высота буфера
buf2d_l equ word[edi+4]
buf2d_t equ word[edi+6] ;отступ сверху
buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера
buf2d_color equ dword[edi+16] ;цвет фона буфера
buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения
vox_offs_tree_table equ 4
macro load_image_file path,buf,size { ;макрос для загрузки изображений
;path - может быть переменной или строковым параметром
if path eqtype '' ;проверяем задан ли строкой параметр path
jmp @f
local .path_str
.path_str db path ;формируем локальную переменную
db 0
@@:
;32 - стандартный адрес по которому должен быть буфер с системным путем
copy_path .path_str,[32],file_name,0
else
copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
end if
stdcall mem.Alloc, dword size ;выделяем память для изображения
mov [buf],eax
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем файл изображения
cmp ebx,0xffffffff
je @f
;определяем вид изображения и переводим его во временный буфер image_data
stdcall [img_decode], [buf],ebx,0
mov [image_data],eax
;преобразуем изображение к формату rgb
stdcall [img_to_rgb2], [image_data],[buf]
;удаляем временный буфер image_data
stdcall [img_destroy], [image_data]
@@:
}
align 4
start:
load_libraries l_libs_start,load_lib_end
;проверка на сколько удачно загузилась наша либа
mov ebp,lib0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall SF_TERMINATE_PROCESS
@@:
mov ebp,lib1
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall SF_TERMINATE_PROCESS
@@:
mcall SF_SET_EVENTS_MASK,0x27
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors ;получаем системные цвета
load_image_file 'img1.png',image_data_rgb, IMAGE_FILE1_SIZE
stdcall [buf2d_create_f_img], buf_0,[image_data_rgb] ;создаем буфер
stdcall [buf2d_create_f_img], buf_1,[image_data_rgb] ;создаем буфер
stdcall [buf2d_create_f_img], buf_2,[image_data_rgb] ;создаем буфер
stdcall mem.Free,[image_data_rgb] ;освобождаем память
stdcall [buf2d_filter_dither], buf_1,2
stdcall [buf2d_filter_dither], buf_2,3
align 4
red_win:
call draw_window
align 4
still: ;главный цикл
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
key:
push eax ebx
mcall SF_GET_KEY
;...
pop ebx eax
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edx,[sc.work]
or edx,0x33000000
mcall SF_CREATE_WINDOW,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
stdcall [buf2d_draw], buf_0
stdcall [buf2d_draw], buf_1
stdcall [buf2d_draw], buf_2
mcall SF_REDRAW,SSF_END_DRAW
popad
ret
system_dir0 db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
system_dir1 db '/sys/lib/'
name_libimg db 'libimg.obj',0
;library structures
l_libs_start:
lib0 l_libs name_buf2d, file_name, system_dir0, import_buf2d_lib
lib1 l_libs name_libimg, file_name, system_dir1, import_libimg
load_lib_end:
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_1 ;удаляем буфер
stdcall [buf2d_delete],buf_2 ;удаляем буфер
mcall SF_TERMINATE_PROCESS
image_data dd 0 ;память для преобразования картинки функциями libimg
image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
image_data_foto dd 0
run_file_70 FileInfoBlock
caption db 'Draw images 28.11.20',0 ;подпись окна
sc system_colors ;системные цвета
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 5 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_1:
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 200 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_2:
dd 0 ;указатель на буфер изображения
dw 210 ;+4 left
dw 200 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
import_libimg:
dd alib_init1
img_is_img dd aimg_is_img
img_info dd aimg_info
img_from_file dd aimg_from_file
img_to_file dd aimg_to_file
img_from_rgb dd aimg_from_rgb
img_to_rgb dd aimg_to_rgb
img_to_rgb2 dd aimg_to_rgb2
img_decode dd aimg_decode
img_encode dd aimg_encode
img_create dd aimg_create
img_destroy dd aimg_destroy
img_destroy_layer dd aimg_destroy_layer
img_count dd aimg_count
img_lock_bits dd aimg_lock_bits
img_unlock_bits dd aimg_unlock_bits
img_flip dd aimg_flip
img_flip_layer dd aimg_flip_layer
img_rotate dd aimg_rotate
img_rotate_layer dd aimg_rotate_layer
img_draw dd aimg_draw
dd 0,0
alib_init1 db 'lib_init',0
aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
aimg_info db 'img_info',0
aimg_from_file db 'img_from_file',0
aimg_to_file db 'img_to_file',0
aimg_from_rgb db 'img_from_rgb',0
aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
aimg_to_rgb2 db 'img_to_rgb2',0
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
aimg_encode db 'img_encode',0
aimg_create db 'img_create',0
aimg_destroy db 'img_destroy',0
aimg_destroy_layer db 'img_destroy_layer',0
aimg_count db 'img_count',0
aimg_lock_bits db 'img_lock_bits',0
aimg_unlock_bits db 'img_unlock_bits',0
aimg_flip db 'img_flip',0
aimg_flip_layer db 'img_flip_layer',0
aimg_rotate db 'img_rotate',0
aimg_rotate_layer db 'img_rotate_layer',0
aimg_draw db 'img_draw',0
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_filter_dither dd sz_buf2d_filter_dither
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_filter_dither db 'buf2d_filter_dither',0
align 16
i_end:
sys_path rb 4096
file_name:
rb 4096
plugin_path:
rb 4096
openfile_path:
rb 4096
filename_area:
rb 256
rb 1024
stacktop:
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
use32
org 0
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
dd 1,start,i_end,mem,stacktop,0,sys_path
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../KOSfuncs.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
IMAGE_FILE1_SIZE equ 200*186*3 ;размер файла с изображением 200 x 100
BUF_STRUCT_SIZE equ 21
buf2d_data equ dword[edi] ;данные буфера изображения
buf2d_w equ dword[edi+8] ;ширина буфера
buf2d_h equ dword[edi+12] ;высота буфера
buf2d_l equ word[edi+4]
buf2d_t equ word[edi+6] ;отступ сверху
buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера
buf2d_color equ dword[edi+16] ;цвет фона буфера
buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения
vox_offs_tree_table equ 4
macro load_image_file path,buf,size { ;макрос для загрузки изображений
;path - может быть переменной или строковым параметром
if path eqtype '' ;проверяем задан ли строкой параметр path
jmp @f
local .path_str
.path_str db path ;формируем локальную переменную
db 0
@@:
;32 - стандартный адрес по которому должен быть буфер с системным путем
copy_path .path_str,[32],file_name,0
else
copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
end if
stdcall mem.Alloc, dword size ;выделяем память для изображения
mov [buf],eax
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем файл изображения
cmp ebx,0xffffffff
je @f
;определяем вид изображения и переводим его во временный буфер image_data
stdcall [img_decode], [buf],ebx,0
mov [image_data],eax
;преобразуем изображение к формату rgb
stdcall [img_to_rgb2], [image_data],[buf]
;удаляем временный буфер image_data
stdcall [img_destroy], [image_data]
@@:
}
align 4
start:
load_libraries l_libs_start,load_lib_end
;проверка на сколько удачно загузилась наша либа
mov ebp,lib0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall SF_TERMINATE_PROCESS
@@:
mov ebp,lib1
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall SF_TERMINATE_PROCESS
@@:
mcall SF_SET_EVENTS_MASK,0x27
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors ;получаем системные цвета
load_image_file 'img1.png',image_data_rgb, IMAGE_FILE1_SIZE
stdcall [buf2d_create_f_img], buf_0,[image_data_rgb] ;создаем буфер
stdcall [buf2d_create_f_img], buf_1,[image_data_rgb] ;создаем буфер
stdcall [buf2d_create_f_img], buf_2,[image_data_rgb] ;создаем буфер
stdcall mem.Free,[image_data_rgb] ;освобождаем память
stdcall [buf2d_filter_dither], buf_1,2
stdcall [buf2d_filter_dither], buf_2,3
align 4
red_win:
call draw_window
align 4
still: ;главный цикл
mcall SF_WAIT_EVENT
cmp al,1 ;изменилось положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button
jmp still
align 4
key:
push eax ebx
mcall SF_GET_KEY
;...
pop ebx eax
jmp still
align 4
draw_window:
pushad
mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edx,[sc.work]
or edx,0x33000000
mcall SF_CREATE_WINDOW,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
stdcall [buf2d_draw], buf_0
stdcall [buf2d_draw], buf_1
stdcall [buf2d_draw], buf_2
mcall SF_REDRAW,SSF_END_DRAW
popad
ret
system_dir0 db '/sys/lib/'
name_buf2d db 'buf2d.obj',0
system_dir1 db '/sys/lib/'
name_libimg db 'libimg.obj',0
;library structures
l_libs_start:
lib0 l_libs name_buf2d, file_name, system_dir0, import_buf2d_lib
lib1 l_libs name_libimg, file_name, system_dir1, import_libimg
load_lib_end:
align 4
button:
mcall SF_GET_BUTTON
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0 ;удаляем буфер
stdcall [buf2d_delete],buf_1 ;удаляем буфер
stdcall [buf2d_delete],buf_2 ;удаляем буфер
mcall SF_TERMINATE_PROCESS
image_data dd 0 ;память для преобразования картинки функциями libimg
image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
image_data_foto dd 0
run_file_70 FileInfoBlock
caption db 'Draw images 28.11.20',0 ;подпись окна
sc system_colors ;системные цвета
align 4
buf_0:
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 5 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_1:
dd 0 ;указатель на буфер изображения
dw 5 ;+4 left
dw 200 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_2:
dd 0 ;указатель на буфер изображения
dw 210 ;+4 left
dw 200 ;+6 top
dd 200 ;+8 w
dd 186 ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
import_libimg:
dd alib_init1
img_is_img dd aimg_is_img
img_info dd aimg_info
img_from_file dd aimg_from_file
img_to_file dd aimg_to_file
img_from_rgb dd aimg_from_rgb
img_to_rgb dd aimg_to_rgb
img_to_rgb2 dd aimg_to_rgb2
img_decode dd aimg_decode
img_encode dd aimg_encode
img_create dd aimg_create
img_destroy dd aimg_destroy
img_destroy_layer dd aimg_destroy_layer
img_count dd aimg_count
img_lock_bits dd aimg_lock_bits
img_unlock_bits dd aimg_unlock_bits
img_flip dd aimg_flip
img_flip_layer dd aimg_flip_layer
img_rotate dd aimg_rotate
img_rotate_layer dd aimg_rotate_layer
img_draw dd aimg_draw
dd 0,0
alib_init1 db 'lib_init',0
aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
aimg_info db 'img_info',0
aimg_from_file db 'img_from_file',0
aimg_to_file db 'img_to_file',0
aimg_from_rgb db 'img_from_rgb',0
aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
aimg_to_rgb2 db 'img_to_rgb2',0
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
aimg_encode db 'img_encode',0
aimg_create db 'img_create',0
aimg_destroy db 'img_destroy',0
aimg_destroy_layer db 'img_destroy_layer',0
aimg_count db 'img_count',0
aimg_lock_bits db 'img_lock_bits',0
aimg_unlock_bits db 'img_unlock_bits',0
aimg_flip db 'img_flip',0
aimg_flip_layer db 'img_flip_layer',0
aimg_rotate db 'img_rotate',0
aimg_rotate_layer db 'img_rotate_layer',0
aimg_draw db 'img_draw',0
align 4
import_buf2d_lib:
dd sz_lib_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_filter_dither dd sz_buf2d_filter_dither
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_filter_dither db 'buf2d_filter_dither',0
align 16
i_end:
sys_path rb 4096
file_name:
rb 4096
plugin_path:
rb 4096
openfile_path:
rb 4096
filename_area:
rb 256
rb 1024
stacktop:
mem:
@@ -1,460 +1,466 @@
;
; сшсышюЄхър фы  °шЇЁютрэш  яю рыуюЁшЄьє DES
;
format MS COFF
public EXPORTS
section '.flat' code readable align 16
include '../../../../macros.inc'
include '../../../../proc32.inc'
;description:
; ЇєэъЎш  °шЇЁютрэш  Їрщыют
;input:
; key - тїюфэющ ъы■ў 64 сшЄ
; mem_keys - ярь Є№ фы  ЇюЁьшЁютрэш  ъы■ўхщ (ЁрчьхЁ 120 срщЄ)
; block - єърчрЄхы№ эр яхЁт√щ °шЇЁєхь√щ 8 срщЄэ√щ сыюъ
; b_count - ўшёыю сыюъют фы  °шЇЁютрэш 
align 4
proc des_encryption, key:dword, mem_keys:dword, block:dword, b_count:dword
locals
n dd ? ;яхЁхьхээр  Ўшъыр
endl
pushad
stdcall encryption_key, [key],[mem_keys]
;эрўры№эр  яхЁхёЄрэютър ip
mov ecx,[b_count]
cmp ecx,1
jl .end_funct
mov edi,[block]
cld
@@:
mov esi,[mem_keys]
add esi,112
stdcall fun_convert_bits, edi, esi, oper_ip, 64
movsd
movsd
loop @b
mov ecx,[b_count]
mov esi,[block]
;cld
.cycle_3:
mov dword[n],0
.funct_f:
mov edi,[mem_keys]
add edi,112
;яхЁхёЄрты хь сыюъ R0(32) яю ьрЄЁшЎх e
stdcall fun_convert_bits, esi, edi, oper_e, 48
;edi - R0~e (48 сшЄ)
;esi - L0R0 (64 сшЄр)
stdcall fun_r0xorki_si, edi,[mem_keys],[n]
;edi - (R0~e xor ki)~Si (32 сшЄр)
;яхЁхёЄрэютър p
mov eax,edi
add eax,4
stdcall fun_convert_bits, edi, eax, oper_p, 32
;яш°хь R0 т L0, ш (L0 xor (R0~e xor ki)~Si) т R0
mov edx,dword[esi+4]
mov ebx,dword[esi]
xor edx,dword[eax]
mov dword[esi],edx
mov dword[esi+4],ebx
inc dword[n]
cmp dword[n],16
jl .funct_f
add esi,8 ;яхЁхїюф эр ёыхфє■∙шщ 64 сшЄэ√щ °шЇЁєхь√щ сыюъ
loop .cycle_3
;ъюэхўэр  яхЁхёЄрэютър ip_inv
mov ecx,[b_count]
mov edi,[block]
;cld
@@:
mov esi,[mem_keys]
add esi,112
stdcall fun_convert_bits, edi, esi, oper_ip_inv, 64
movsd
movsd
loop @b
.end_funct:
popad
ret
endp
;description:
; ЇєэъЎш  Ёрё°шЇЁютрэш  Їрщыют
;input:
; key - тїюфэющ ъы■ў 64 сшЄ
; mem_keys - ярь Є№ фы  ЇюЁьшЁютрэш  ъы■ўхщ (ЁрчьхЁ 120 срщЄ)
; block - єърчрЄхы№ эр яхЁт√щ Ёрё°шЇЁют√трхь√щ 8 срщЄэ√щ сыюъ
; b_count - ўшёыю сыюъют фы  Ёрё°шЇЁютрэш 
align 4
proc des_decryption, key:dword, mem_keys:dword, block:dword, b_count:dword
locals
n dd ? ;яхЁхьхээр  Ўшъыр
endl
pushad
stdcall encryption_key, [key],[mem_keys]
;эрўры№эр  яхЁхёЄрэютър ip
mov ecx,[b_count]
cmp ecx,1
jl .end_funct
mov edi,[block]
cld
@@:
mov esi,[mem_keys]
add esi,112
stdcall fun_convert_bits, edi, esi, oper_ip, 64
movsd
movsd
loop @b
mov ecx,[b_count]
mov esi,[block]
;cld
.cycle_3:
mov dword[n],16
.funct_f:
dec dword[n]
mov edi,[mem_keys]
add edi,112
;яхЁхёЄрты хь сыюъ L0(32) яю ьрЄЁшЎх e
add esi,4
stdcall fun_convert_bits, esi, edi, oper_e, 48
sub esi,4
;edi - L0~e (48 сшЄ)
;esi - L0R0 (64 сшЄр)
stdcall fun_r0xorki_si, edi,[mem_keys],[n]
;edi - (L0~e xor ki)~Si (32 сшЄр)
;яхЁхёЄрэютър p
mov eax,edi
add eax,4
stdcall fun_convert_bits, edi, eax, oper_p, 32
;яш°хь L0 т R0, ш (R0 xor (L0~e xor ki)~Si) т L0
mov edx,dword[esi]
mov ebx,dword[esi+4]
xor edx,dword[eax]
mov dword[esi+4],edx
mov dword[esi],ebx
cmp dword[n],0
jg .funct_f
add esi,8 ;яхЁхїюф эр ёыхфє■∙шщ 64 сшЄэ√щ °шЇЁєхь√щ сыюъ
loop .cycle_3
;ъюэхўэр  яхЁхёЄрэютър ip_inv
mov ecx,[b_count]
mov edi,[block]
;cld
@@:
mov esi,[mem_keys]
add esi,112
stdcall fun_convert_bits, edi, esi, oper_ip_inv, 64
movsd
movsd
loop @b
.end_funct:
popad
ret
endp
;description:
; яхЁхёЄрэютър сшЄют яю єър∙рээющ ьрЄЁшЎх
;input:
; m_inp - ярь Є№ ё шёїюфэ√ьш фрээ√ьш
; m_out - ярь Є№ фы  яЁхюсЁрчютрээ√ї фрээ√ї
; c_tbl - ЄрсышЎр фы  яхЁхёЄрэютъш
; tbl_s - ЁрчьхЁ ЄрсышЎ√ фы  яхЁхёЄрэютъш
align 4
proc fun_convert_bits, m_inp:dword, m_out:dword, c_tbl:dword, tbl_s:dword
pushad
mov esi,[m_inp]
mov edi,[m_out]
mov eax,[c_tbl]
mov ecx,[tbl_s]
xor edx,edx
mov dword[edi],edx
cmp ecx,32
jle @f
mov dword[edi+4],edx
@@:
inc edx
cld
.cycle_0:
movzx ebx,byte[eax]
btr ebx,5
jc .tbl_h
bt dword[esi],ebx
jnc @f
or dword[edi],edx
@@:
jmp @f
.tbl_h:
bt dword[esi+4],ebx
jnc @f
or dword[edi],edx
@@:
rol edx,1
jnc @f
add edi,4
@@:
inc eax
loop .cycle_0
popad
ret
endp
;description:
; ёыюцхэшх R0(48) xor Ki(48) ш 8 яЁхюсЁрчютрэшщ яю Si
;intput:
; data_r0 - R0 (48 сшЄ)
; data_key - єърчрЄхы№ эр ьрёёшт ъы■ўхщ (яю 48 сшЄ)
; n - эюьхЁ ъы■ўр т ьрёёштх
;output:
; data_r0 - (R0 xor Ki)~Si (32 сшЄр)
align 4
proc fun_r0xorki_si, data_r0:dword, data_key:dword, n:dword
pushad
mov edi,[data_r0]
mov eax,[n]
imul eax,7 ;56 сшЄ - ЁрёёЄю эшх ьхцфє ъы■ўрьш (ёрьш ъы■ўш 48 сшЄ)
add eax,[data_key]
mov ebx,dword[eax]
xor dword[edi],ebx
mov ebx,dword[eax+4] ;mov bx,word[eax+4]
xor dword[edi+4],ebx ;xor word[edi+4],bx
;edi - єърчрЄхы№ эр чэрўхэшх R0 xor Ki
mov eax,dword[edi]
mov ebx,dword[edi+4]
;bx:eax - 48 сшЄ чэрўхэшх R0 xor Ki
lea esi,[oper_s] ;т√сшЁрхь ЄрсышЎє S0
mov ecx,8
.cycle_0:
mov dl,al
and edx,31
shr dl,1
jnc @f
bts edx,4
@@:
bt eax,5
jnc @f
bts edx,5
@@:
add edx,esi
mov dl,byte[edx] ;dl - 4 сшЄэюх чэрўхэшх яюыєўхээюх шч Si
bt ecx,0
jc @f
;1) ecx - ўхЄэ√щ
mov byte[edi],dl
jmp .next
@@:
;2) ecx - эх ўхЄэ√щ
shl dl,4
or byte[edi],dl
inc edi
.next:
shr eax,6
ror ebx,6
mov edx,ebx
and edx,0xfc000000
or eax,edx
;шыш 6 Ёрч: shr ebx,1 rcr eax,1
add esi,64 ;яхЁхїюфшь эр ёыхфє■∙є■ ЄрсышЎє Si
loop .cycle_0
popad
ret
endp
;description:
; яЁюЎхфєЁр ЇюЁьшЁютрэш  ъы■ўхщ фы  °шЇЁютрэш 
;intput:
; key - тїюфэющ ъы■ў 64 сшЄ
; key_b - 16 яЁхюсЁрчютрээ√ї ъы■ўхщ яю 48 сшЄ
; ЁрчьхЁ ярь Єш key_b фюыцхэ с√Є№ эх ьхэ№°х 120 срщЄ
align 4
proc encryption_key, key:dword, key_b:dword
pushad
mov esi,[key]
mov edi,[key_b]
;яхЁхёЄрты хь тїюфэющ ъы■ў яю ьрЄЁшЎх
stdcall fun_convert_bits, esi, edi, oper_b, 56
;т ebx эрїюфшь C0
mov ebx,dword[edi]
and ebx,0xfffffff
;т edx эрїюфшь D0
mov edx,dword[edi+3]
shr edx,4
;эрїюфшь 16 яюфъы■ўхщ, фышээющ яю 56 сшЄ
;;;mov edi,[key_b]
lea esi,[oper_r]
.cycle_1:
mov cl,byte[esi]
cmp cl,0
je .cycle_end
shl ebx,cl
btr ebx,28
jnc @f
or ebx,1
@@:
btr ebx,29
jnc @f
or ebx,2
@@:
shl edx,cl
btr edx,28
jnc @f
or edx,1
@@:
btr edx,29
jnc @f
or edx,2
@@:
mov dword[edi+3],0
mov dword[edi],ebx
shl edx,4
or dword[edi+3],edx
add edi,7
shr edx,4
inc esi
jmp .cycle_1
.cycle_end:
;ёцрЄшх ъы■ўхщ ё 56 фю 48 сшЄ
mov edi,[key_b]
mov esi,edi
add esi,112 ;112 - рфЁхё чр яЁхфхырьш 16*7
mov ecx,16
cld
@@:
stdcall fun_convert_bits, edi, esi, oper_c, 48
movsd
movsw
mov byte[edi],0 ;юсЁхчрхь 7-щ срщЄ
inc edi
sub esi,6
loop @b
popad
ret
endp
align 4
oper_ip db 57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,\
61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7,\
56,48,40,32,24,16, 8, 0,58,50,42,34,26,18,10, 2,\
60,52,44,36,28,20,12, 4,62,54,46,38,30,22,14, 6
align 4
oper_ip_inv db 39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,\
37, 5,45,13,53,21,61,29,36, 4,44,12,52,20,60,28,\
35, 3,43,11,51,19,59,27,34, 2,42,10,50,18,58,26,\
33, 1,41, 9,49,17,57,25,32, 0,40, 8,48,16,56,24
align 4
oper_e db 31,0,1,2,3,4,\
3, 4, 5, 6, 7, 8,\
7, 8, 9,10,11,12,\
11,12,13,14,15,16,\
15,16,17,18,19,20,\
19,20,21,22,23,24,\
23,24,25,26,27,28,\
27,28,29,30,31, 0
align 4
oper_b db 56,48,40,32,24,16,8,\
0,57,49,41,33,25,17,\
9, 1,58,50,42,34,26,\
18,10, 2,59,51,43,35,\
62,54,46,38,30,22,14,\
6,61,53,45,37,29,21,\
13, 5,60,52,44,36,28,\
20,12, 4,27,19,11, 3
oper_r db 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,0
align 4
oper_c db 13,16,10,23,0,4,\
2,27,14, 5,20, 9,\
22,18,11, 3,25, 7,\
15, 6,26,19,12, 1,\
40,51,30,36,46,54,\
29,39,50,44,32,47,\
43,48,38,55,33,52,\
45,41,49,35,28,31
align 4
oper_s db 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,\
0,15, 7, 4,14, 2,13,1,10,6,12,11,9,5,3,8,\
4, 1,14, 8,13, 6,2,11,15,12,9,7,3,10,5,0,\
15,12, 8, 2, 4, 9,1,7,5,11,3,14,10,0,6,13,\
15, 1, 8,14, 6,11,3,4,9,7,2,13,12,0,5,10,\
3,13, 4, 7,15, 2,8,14,12,0,1,10,6,9,11,5,\
0,14, 7,11,10, 4,13,1,5,8,12,6,9,3,2,15,\
13, 8,10, 1, 3,15,4,2,11,6,7,12,0,5,14,9,\
10, 0, 9,14, 6, 3,15,5,1,13,12,7,11,4,2,8,\
13, 7, 0, 9, 3, 4,6,10,2,8,5,14,12,11,15,1,\
13, 6, 4, 9, 8,15,3,0,11,1,2,12,5,10,14,7,\
1,10,13, 0, 6, 9,8,7,4,15,14,3,11,5,2,12,\
7,13,14, 3, 0, 6,9,10,1,2,8,5,11,12,4,15,\
13, 8,11, 5, 6,15,0,3,4,7,2,12,1,10,14,9,\
10, 6, 9, 0,12,11,7,13,15,1,3,14,5,2,8,4,\
3,15, 0, 6,10, 1,13,8,9,4,5,11,12,7,2,14,\
2,12, 4, 1, 7,10,11,6,8,5,3,15,13,0,14,9,\
14,11, 2,12, 4, 7,13,1,5,0,15,10,3,9,8,6,\
4, 2, 1,11,10,13,7,8,15,9,12,5,6,3,0,14,\
11, 8,12, 7, 1,14,2,13,6,15,0,9,10,4,5,3,\
12, 1,10,15, 9, 2,6,8,0,13,3,4,14,7,5,11,\
10,15, 4, 2, 7,12,9,5,6,1,13,14,0,11,3,8,\
9,14,15, 5, 2, 8,12,3,7,0,4,10,1,13,11,6,\
4, 3, 2,12, 9, 5,15,10,11,14,1,7,6,0,8,13,\
4,11, 2,14,15, 0,8,13,3,12,9,7,5,10,6,1,\
13, 0,11, 7, 4, 9,1,10,14,3,5,12,2,15,8,6,\
1, 4,11,13,12, 3,7,14,10,15,6,8,0,5,9,2,\
6,11,13, 8, 1, 4,10,7,9,5,0,15,14,2,3,12,\
13, 2, 8, 4, 6,15,11,1,10,9,3,14,5,0,12,7,\
1,15,13, 8,10, 3,7,4,12,5,6,11,0,14,9,2,\
7,11, 4, 1, 9,12,14,2,0,6,10,13,15,3,5,8,\
2, 1,14, 7, 4,10,8,13,15,12,9,0,3,5,6,11
align 4
oper_p db 15,6,19,20,28,11,27,16,\
0,14,22,25, 4,17,30, 9,\
1, 7,23,13,31,26, 2, 8,\
18,12,29, 5,21,10, 3,24
align 16
EXPORTS:
dd sz_des_encryption, des_encryption
dd sz_des_decryption, des_decryption
dd 0,0
sz_des_encryption db 'des_encryption',0
sz_des_decryption db 'des_decryption',0
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page Windows 1251 - Cyrillic
;
; сшсышюЄхър фы  °шЇЁютрэш  яю рыуюЁшЄьє DES
;
format MS COFF
public EXPORTS
section '.flat' code readable align 16
include '../../../macros.inc'
include '../../../proc32.inc'
;description:
; ЇєэъЎш  °шЇЁютрэш  Їрщыют
;input:
; key - тїюфэющ ъы■ў 64 сшЄ
; mem_keys - ярь Є№ фы  ЇюЁьшЁютрэш  ъы■ўхщ (ЁрчьхЁ 120 срщЄ)
; block - єърчрЄхы№ эр яхЁт√щ °шЇЁєхь√щ 8 срщЄэ√щ сыюъ
; b_count - ўшёыю сыюъют фы  °шЇЁютрэш 
align 4
proc des_encryption, key:dword, mem_keys:dword, block:dword, b_count:dword
locals
n dd ? ;яхЁхьхээр  Ўшъыр
endl
pushad
stdcall encryption_key, [key],[mem_keys]
;эрўры№эр  яхЁхёЄрэютър ip
mov ecx,[b_count]
cmp ecx,1
jl .end_funct
mov edi,[block]
cld
@@:
mov esi,[mem_keys]
add esi,112
stdcall fun_convert_bits, edi, esi, oper_ip, 64
movsd
movsd
loop @b
mov ecx,[b_count]
mov esi,[block]
;cld
.cycle_3:
mov dword[n],0
.funct_f:
mov edi,[mem_keys]
add edi,112
;яхЁхёЄрты хь сыюъ R0(32) яю ьрЄЁшЎх e
stdcall fun_convert_bits, esi, edi, oper_e, 48
;edi - R0~e (48 сшЄ)
;esi - L0R0 (64 сшЄр)
stdcall fun_r0xorki_si, edi,[mem_keys],[n]
;edi - (R0~e xor ki)~Si (32 сшЄр)
;яхЁхёЄрэютър p
mov eax,edi
add eax,4
stdcall fun_convert_bits, edi, eax, oper_p, 32
;яш°хь R0 т L0, ш (L0 xor (R0~e xor ki)~Si) т R0
mov edx,dword[esi+4]
mov ebx,dword[esi]
xor edx,dword[eax]
mov dword[esi],edx
mov dword[esi+4],ebx
inc dword[n]
cmp dword[n],16
jl .funct_f
add esi,8 ;яхЁхїюф эр ёыхфє■∙шщ 64 сшЄэ√щ °шЇЁєхь√щ сыюъ
loop .cycle_3
;ъюэхўэр  яхЁхёЄрэютър ip_inv
mov ecx,[b_count]
mov edi,[block]
;cld
@@:
mov esi,[mem_keys]
add esi,112
stdcall fun_convert_bits, edi, esi, oper_ip_inv, 64
movsd
movsd
loop @b
.end_funct:
popad
ret
endp
;description:
; ЇєэъЎш  Ёрё°шЇЁютрэш  Їрщыют
;input:
; key - тїюфэющ ъы■ў 64 сшЄ
; mem_keys - ярь Є№ фы  ЇюЁьшЁютрэш  ъы■ўхщ (ЁрчьхЁ 120 срщЄ)
; block - єърчрЄхы№ эр яхЁт√щ Ёрё°шЇЁют√трхь√щ 8 срщЄэ√щ сыюъ
; b_count - ўшёыю сыюъют фы  Ёрё°шЇЁютрэш 
align 4
proc des_decryption, key:dword, mem_keys:dword, block:dword, b_count:dword
locals
n dd ? ;яхЁхьхээр  Ўшъыр
endl
pushad
stdcall encryption_key, [key],[mem_keys]
;эрўры№эр  яхЁхёЄрэютър ip
mov ecx,[b_count]
cmp ecx,1
jl .end_funct
mov edi,[block]
cld
@@:
mov esi,[mem_keys]
add esi,112
stdcall fun_convert_bits, edi, esi, oper_ip, 64
movsd
movsd
loop @b
mov ecx,[b_count]
mov esi,[block]
;cld
.cycle_3:
mov dword[n],16
.funct_f:
dec dword[n]
mov edi,[mem_keys]
add edi,112
;яхЁхёЄрты хь сыюъ L0(32) яю ьрЄЁшЎх e
add esi,4
stdcall fun_convert_bits, esi, edi, oper_e, 48
sub esi,4
;edi - L0~e (48 сшЄ)
;esi - L0R0 (64 сшЄр)
stdcall fun_r0xorki_si, edi,[mem_keys],[n]
;edi - (L0~e xor ki)~Si (32 сшЄр)
;яхЁхёЄрэютър p
mov eax,edi
add eax,4
stdcall fun_convert_bits, edi, eax, oper_p, 32
;яш°хь L0 т R0, ш (R0 xor (L0~e xor ki)~Si) т L0
mov edx,dword[esi]
mov ebx,dword[esi+4]
xor edx,dword[eax]
mov dword[esi+4],edx
mov dword[esi],ebx
cmp dword[n],0
jg .funct_f
add esi,8 ;яхЁхїюф эр ёыхфє■∙шщ 64 сшЄэ√щ °шЇЁєхь√щ сыюъ
loop .cycle_3
;ъюэхўэр  яхЁхёЄрэютър ip_inv
mov ecx,[b_count]
mov edi,[block]
;cld
@@:
mov esi,[mem_keys]
add esi,112
stdcall fun_convert_bits, edi, esi, oper_ip_inv, 64
movsd
movsd
loop @b
.end_funct:
popad
ret
endp
;description:
; яхЁхёЄрэютър сшЄют яю єър∙рээющ ьрЄЁшЎх
;input:
; m_inp - ярь Є№ ё шёїюфэ√ьш фрээ√ьш
; m_out - ярь Є№ фы  яЁхюсЁрчютрээ√ї фрээ√ї
; c_tbl - ЄрсышЎр фы  яхЁхёЄрэютъш
; tbl_s - ЁрчьхЁ ЄрсышЎ√ фы  яхЁхёЄрэютъш
align 4
proc fun_convert_bits, m_inp:dword, m_out:dword, c_tbl:dword, tbl_s:dword
pushad
mov esi,[m_inp]
mov edi,[m_out]
mov eax,[c_tbl]
mov ecx,[tbl_s]
xor edx,edx
mov dword[edi],edx
cmp ecx,32
jle @f
mov dword[edi+4],edx
@@:
inc edx
cld
.cycle_0:
movzx ebx,byte[eax]
btr ebx,5
jc .tbl_h
bt dword[esi],ebx
jnc @f
or dword[edi],edx
@@:
jmp @f
.tbl_h:
bt dword[esi+4],ebx
jnc @f
or dword[edi],edx
@@:
rol edx,1
jnc @f
add edi,4
@@:
inc eax
loop .cycle_0
popad
ret
endp
;description:
; ёыюцхэшх R0(48) xor Ki(48) ш 8 яЁхюсЁрчютрэшщ яю Si
;intput:
; data_r0 - R0 (48 сшЄ)
; data_key - єърчрЄхы№ эр ьрёёшт ъы■ўхщ (яю 48 сшЄ)
; n - эюьхЁ ъы■ўр т ьрёёштх
;output:
; data_r0 - (R0 xor Ki)~Si (32 сшЄр)
align 4
proc fun_r0xorki_si, data_r0:dword, data_key:dword, n:dword
pushad
mov edi,[data_r0]
mov eax,[n]
imul eax,7 ;56 сшЄ - ЁрёёЄю эшх ьхцфє ъы■ўрьш (ёрьш ъы■ўш 48 сшЄ)
add eax,[data_key]
mov ebx,dword[eax]
xor dword[edi],ebx
mov ebx,dword[eax+4] ;mov bx,word[eax+4]
xor dword[edi+4],ebx ;xor word[edi+4],bx
;edi - єърчрЄхы№ эр чэрўхэшх R0 xor Ki
mov eax,dword[edi]
mov ebx,dword[edi+4]
;bx:eax - 48 сшЄ чэрўхэшх R0 xor Ki
lea esi,[oper_s] ;т√сшЁрхь ЄрсышЎє S0
mov ecx,8
.cycle_0:
mov dl,al
and edx,31
shr dl,1
jnc @f
bts edx,4
@@:
bt eax,5
jnc @f
bts edx,5
@@:
add edx,esi
mov dl,byte[edx] ;dl - 4 сшЄэюх чэрўхэшх яюыєўхээюх шч Si
bt ecx,0
jc @f
;1) ecx - ўхЄэ√щ
mov byte[edi],dl
jmp .next
@@:
;2) ecx - эх ўхЄэ√щ
shl dl,4
or byte[edi],dl
inc edi
.next:
shr eax,6
ror ebx,6
mov edx,ebx
and edx,0xfc000000
or eax,edx
;шыш 6 Ёрч: shr ebx,1 rcr eax,1
add esi,64 ;яхЁхїюфшь эр ёыхфє■∙є■ ЄрсышЎє Si
loop .cycle_0
popad
ret
endp
;description:
; яЁюЎхфєЁр ЇюЁьшЁютрэш  ъы■ўхщ фы  °шЇЁютрэш 
;intput:
; key - тїюфэющ ъы■ў 64 сшЄ
; key_b - 16 яЁхюсЁрчютрээ√ї ъы■ўхщ яю 48 сшЄ
; ЁрчьхЁ ярь Єш key_b фюыцхэ с√Є№ эх ьхэ№°х 120 срщЄ
align 4
proc encryption_key, key:dword, key_b:dword
pushad
mov esi,[key]
mov edi,[key_b]
;яхЁхёЄрты хь тїюфэющ ъы■ў яю ьрЄЁшЎх
stdcall fun_convert_bits, esi, edi, oper_b, 56
;т ebx эрїюфшь C0
mov ebx,dword[edi]
and ebx,0xfffffff
;т edx эрїюфшь D0
mov edx,dword[edi+3]
shr edx,4
;эрїюфшь 16 яюфъы■ўхщ, фышээющ яю 56 сшЄ
;;;mov edi,[key_b]
lea esi,[oper_r]
.cycle_1:
mov cl,byte[esi]
cmp cl,0
je .cycle_end
shl ebx,cl
btr ebx,28
jnc @f
or ebx,1
@@:
btr ebx,29
jnc @f
or ebx,2
@@:
shl edx,cl
btr edx,28
jnc @f
or edx,1
@@:
btr edx,29
jnc @f
or edx,2
@@:
mov dword[edi+3],0
mov dword[edi],ebx
shl edx,4
or dword[edi+3],edx
add edi,7
shr edx,4
inc esi
jmp .cycle_1
.cycle_end:
;ёцрЄшх ъы■ўхщ ё 56 фю 48 сшЄ
mov edi,[key_b]
mov esi,edi
add esi,112 ;112 - рфЁхё чр яЁхфхырьш 16*7
mov ecx,16
cld
@@:
stdcall fun_convert_bits, edi, esi, oper_c, 48
movsd
movsw
mov byte[edi],0 ;юсЁхчрхь 7-щ срщЄ
inc edi
sub esi,6
loop @b
popad
ret
endp
align 4
oper_ip db 57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,\
61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7,\
56,48,40,32,24,16, 8, 0,58,50,42,34,26,18,10, 2,\
60,52,44,36,28,20,12, 4,62,54,46,38,30,22,14, 6
align 4
oper_ip_inv db 39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,\
37, 5,45,13,53,21,61,29,36, 4,44,12,52,20,60,28,\
35, 3,43,11,51,19,59,27,34, 2,42,10,50,18,58,26,\
33, 1,41, 9,49,17,57,25,32, 0,40, 8,48,16,56,24
align 4
oper_e db 31,0,1,2,3,4,\
3, 4, 5, 6, 7, 8,\
7, 8, 9,10,11,12,\
11,12,13,14,15,16,\
15,16,17,18,19,20,\
19,20,21,22,23,24,\
23,24,25,26,27,28,\
27,28,29,30,31, 0
align 4
oper_b db 56,48,40,32,24,16,8,\
0,57,49,41,33,25,17,\
9, 1,58,50,42,34,26,\
18,10, 2,59,51,43,35,\
62,54,46,38,30,22,14,\
6,61,53,45,37,29,21,\
13, 5,60,52,44,36,28,\
20,12, 4,27,19,11, 3
oper_r db 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,0
align 4
oper_c db 13,16,10,23,0,4,\
2,27,14, 5,20, 9,\
22,18,11, 3,25, 7,\
15, 6,26,19,12, 1,\
40,51,30,36,46,54,\
29,39,50,44,32,47,\
43,48,38,55,33,52,\
45,41,49,35,28,31
align 4
oper_s db 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,\
0,15, 7, 4,14, 2,13,1,10,6,12,11,9,5,3,8,\
4, 1,14, 8,13, 6,2,11,15,12,9,7,3,10,5,0,\
15,12, 8, 2, 4, 9,1,7,5,11,3,14,10,0,6,13,\
15, 1, 8,14, 6,11,3,4,9,7,2,13,12,0,5,10,\
3,13, 4, 7,15, 2,8,14,12,0,1,10,6,9,11,5,\
0,14, 7,11,10, 4,13,1,5,8,12,6,9,3,2,15,\
13, 8,10, 1, 3,15,4,2,11,6,7,12,0,5,14,9,\
10, 0, 9,14, 6, 3,15,5,1,13,12,7,11,4,2,8,\
13, 7, 0, 9, 3, 4,6,10,2,8,5,14,12,11,15,1,\
13, 6, 4, 9, 8,15,3,0,11,1,2,12,5,10,14,7,\
1,10,13, 0, 6, 9,8,7,4,15,14,3,11,5,2,12,\
7,13,14, 3, 0, 6,9,10,1,2,8,5,11,12,4,15,\
13, 8,11, 5, 6,15,0,3,4,7,2,12,1,10,14,9,\
10, 6, 9, 0,12,11,7,13,15,1,3,14,5,2,8,4,\
3,15, 0, 6,10, 1,13,8,9,4,5,11,12,7,2,14,\
2,12, 4, 1, 7,10,11,6,8,5,3,15,13,0,14,9,\
14,11, 2,12, 4, 7,13,1,5,0,15,10,3,9,8,6,\
4, 2, 1,11,10,13,7,8,15,9,12,5,6,3,0,14,\
11, 8,12, 7, 1,14,2,13,6,15,0,9,10,4,5,3,\
12, 1,10,15, 9, 2,6,8,0,13,3,4,14,7,5,11,\
10,15, 4, 2, 7,12,9,5,6,1,13,14,0,11,3,8,\
9,14,15, 5, 2, 8,12,3,7,0,4,10,1,13,11,6,\
4, 3, 2,12, 9, 5,15,10,11,14,1,7,6,0,8,13,\
4,11, 2,14,15, 0,8,13,3,12,9,7,5,10,6,1,\
13, 0,11, 7, 4, 9,1,10,14,3,5,12,2,15,8,6,\
1, 4,11,13,12, 3,7,14,10,15,6,8,0,5,9,2,\
6,11,13, 8, 1, 4,10,7,9,5,0,15,14,2,3,12,\
13, 2, 8, 4, 6,15,11,1,10,9,3,14,5,0,12,7,\
1,15,13, 8,10, 3,7,4,12,5,6,11,0,14,9,2,\
7,11, 4, 1, 9,12,14,2,0,6,10,13,15,3,5,8,\
2, 1,14, 7, 4,10,8,13,15,12,9,0,3,5,6,11
align 4
oper_p db 15,6,19,20,28,11,27,16,\
0,14,22,25, 4,17,30, 9,\
1, 7,23,13,31,26, 2, 8,\
18,12,29, 5,21,10, 3,24
align 16
EXPORTS:
dd sz_des_encryption, des_encryption
dd sz_des_decryption, des_decryption
dd 0,0
sz_des_encryption db 'des_encryption',0
sz_des_decryption db 'des_decryption',0
@@ -3,6 +3,6 @@ if not exist bin mkdir bin
@kpack bin\crypt_files.kex
if not exist bin\toolbar.png @copy toolbar.png bin\toolbar.png
if not exist bin\font8x9.bmp @copy ..\..\..\..\fs\kfar\font8x9.bmp bin\font8x9.bmp
@fasm.exe -m 16384 ..\trunk\crypt_des.asm bin\crypt_des.obj
@fasm.exe -m 16384 ..\crypt_des.asm bin\crypt_des.obj
@kpack bin\crypt_des.obj
pause
@@ -3,6 +3,6 @@ if not exist bin mkdir bin
@kpack bin\viev_exif.kex
if not exist bin\toolbar.png @copy toolbar.png bin\toolbar.png
if not exist bin\font8x9.bmp @copy ..\..\..\..\fs\kfar\font8x9.bmp bin\font8x9.bmp
@fasm.exe -m 16384 ..\trunk\exif.asm bin\exif.obj
@fasm.exe -m 16384 ..\exif.asm bin\exif.obj
@kpack bin\exif.obj
pause
File diff suppressed because it is too large. Load diff
@@ -42,10 +42,10 @@ use32 ;
dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
dd 0x0 ; указатель на строку с параметрами.
dd way_of_ini
include '../../../../macros.inc'
include '../../../../KOSfuncs.inc'
include '../../../../load_lib.mac'
include '../../box_lib/box_lib.mac'
include '../../../macros.inc'
include '../../../KOSfuncs.inc'
include '../../../load_lib.mac'
include '../box_lib/box_lib.mac'
@use_library ;use load lib macros
start:
;universal load library/librarys
@@ -1,441 +1,447 @@
; Copyright (c) 2009, <Lrz>
; 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 Alexey Teplov nickname <Lrz> ''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.
;*****************************************************************************
;;;;;;;;;;;;;;;;;;
format MS COFF
public EXPORTS
section '.flat' code readable align 16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Get info about
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include '../../../../macros.inc'
align 4
initialization_font:
; esp+0 = dd back
; чряюыэ хь ьрёёшт - ёЄЁєъЄє фы  яюыєўхэш  ъюы-тр Їрщыют
pushad
xor eax,eax
inc eax
mov [number_function],eax
;structure is completed
mov eax,70
mov ebx,dword struct_f_info
mcall
;IF ERROR FT then exit
test eax,eax
jnz .exit
;IF ERROR folder is not found then exit
test ebx,ebx
mov eax,ebx
jnz .exit
;Get quantity files
mov eax,[buffer_32.quantity_files]
imul eax,304
add eax,32 ; ??
push eax ;save eax т eax ЁрчьхЁ эєцэющ эрь ярь Єш т срщЄрї
;init memory
mov eax,68
mov ebx,11
mcall
test eax,eax
jz .exit
inc ebx ;т√фхышЄ№ сыюъ т ecx срщЄ
pop ecx
mov eax,68
mcall
mov dword [fulder_array_point],eax ;save point for memory's fulder
;т eax єърчрЄхы№ эр сыюъ
mov [buffer_read_d],eax ;point to new array
mov eax,[buffer_32.quantity_files]
mov [read_block],eax
;get in buffer info of files and sub dir current dir
mov eax,70
mov ebx,dword struct_f_info
mcall
;яюыєўшыш шэЇюЁьрЎш■ ю Їрщырї.
mov ebp, dword [buffer_read_d] ;point to structure
mov ecx, dword [ebp+4] ;ъюы-тю сыюъют ┴─┬╩
mov dword [save_ecx],ecx
add ebp, 32 ;ёьх∙рхьё  фю ┴─┬╩
mov dword [save_ebp],ebp
cld ;єёЄрэютър Їырур эряЁртыхэш 
align 4
.start_loop:
push ecx
lea edi,[ebp+0x28] ;т edi єърчрЄхы№ эр эрўрыю шьхэш.
xor eax,eax
mov ecx,263
repne scasb ;эрщфхь ъюэхЎ ёЄЁюъш
;;;;;;;;;;;;;;;;;;;;;;;
sub edi,5 ;.ksf,0
lea esi,[name_font]
mov eax,dword[edi]
or eax,0x20202000 ; ёфхырхь Ёрё°шЁхэшх ёЄЁюўэ√ьш сєътрьш.
cmp eax,dword[esi]
jnz @f
;;;;;;;; єЁр ¤Єю эр° Їрщы Є.х. эр° °ЁшЇЄ ь√ эр°ыш эєцэ√щ Їрщышъ ))
;ЄхяхЁ№ эєцэю Єюўэю єсхфшЄ№ё  ўЄю ¤Єю эр° ш Єюы№ъю эр° Їрщышъ
;чруЁєчшь чруюыютюъ Їрщыр ш єчэрхь хую ЁрчьхЁ уышЇр.
call alloc_mem ; т√фхышь ючє ётюшї яхЁхьхээ√ї
; ёхщўрё эрь эєцэю ёЇюЁьшЁютрЄ№ шь  Їрщыр ё яюыэ√ь яєЄхь
mov eax,dword [alloc_memory_point]
lea edi,dword [eax+4]
lea esi,[name_fulder]
mov ecx,name_fuld_end
rep movsb ;яхЁхэюёшь яєЄ№
mov al,'/'
stosb
lea esi,[ebp+0x28] ;т esi єърчрЄхы№ эр эрўрыю шьхэш.
align 4
.loop_b:
lodsb
stosb
test al,al
jnz .loop_b
; mov edi,name_of_file ; [ebp+0x28] ;т edi єърчрЄхы№ эр эрўрыю шьхэш.
;get in buffer info above own file
xor eax,eax
mov dword [number_function],eax
mov dword [index_start_block],eax ;яючшЎш  т Їрщых фы  ўЄхэш  фрээ√ї
mov dword [flags_],eax ;ёЄрЁ°р  яючшЎш  фы  ўЄхэш  фрээ√ї
mov dword [read_block],8 ;ёъюы№ъю срщЄ ўшЄрЄ№ эрь эєцэю 8 срщЄ
mov dword [buffer_read_d],file_buffer ; єърчрЄхы№ эр сєЇхЁ ъєфр сєфєЄ чряшёрэ√ фрээ√х
mov eax,dword [alloc_memory_point]
lea edi,dword [eax+4]
mov dword [offset_to_string],edi
mov eax,70
mov ebx,dword struct_f_info
mcall
;;;;;;;;;;;;;;;; яЁютхЁшь ЇюЁьрЄ чруюыютър
mov eax,ebx
mov eax,dword [file_buffer]
mov ebx,dword [type_fnt]
cmp eax,ebx
jnz @f
;;;;;;; юЄышўэю ёхщўрё яЁютхЁшыш ўЄю чруюыютюъ шьхээю ЄюЄ ъюЄюЁ√щ эрь эєцхэ
; ёхщўрё эєцэю яхЁхЁрёяЁхфхышЄ№ сыюъш Є.х. яю ьхЁх эрїюцфхэш  сєфхь яхЁхэюёшЄ№ сыюъш
; т эрўрыю сєЇхЁр
mov dword [save_point_nt],ebp
pop ecx
xor eax,eax
jmp .exit
align 4
@@: pop ecx
add ebp,304
dec ecx
jnz .start_loop
; loop .start_loop
or eax,-1
;;;;;;;; яЁю°ышё№ - тёх шэЄхЁхёє∙■∙шх °ЁшЇЄ√ яхЁхьхёЄшыш т эрўрыю сыюър.
align 4
.exit: mov dword [esp+28],eax
popad
ret
align 4
get_font:
; яюшёъ т ьрёёштх °ЁшЇЄр яЁш ёютярфхэшш єcыютшщ чруЁєчър °ЁшЇЄр
; esp+4 = dd width font shl 16 +hight font
; esp+0 = dd back
;pop eax
; pop dword [font_x_y]
;push eax
pushad
mov eax,dword [esp+32+4]
mov dword [font_x_y],eax
xor eax,eax
mov dword [number_function],eax
mov dword [index_start_block],eax ;яючшЎш  т Їрщых фы  ўЄхэш  фрээ√ї
mov dword [flags_],eax ;ёЄрЁ°р  яючшЎш  фы  ўЄхэш  фрээ√ї
mov dword [read_block],8 ;ёъюы№ъю срщЄ ўшЄрЄ№ эрь эєцэю 8 срщЄ
mov dword [buffer_read_d],file_buffer ; єърчрЄхы№ эр сєЇхЁ ъєфр сєфєЄ чряшёрэ√ фрээ√х
mov eax,dword [alloc_memory_point]
lea edi,dword [eax+4]
mov dword [offset_to_string],edi
mov eax,70
mov ebx,dword struct_f_info
mcall
;;;;;;;;;;;;;;;; яЁютхЁшь ЇюЁьрЄ чруюыютър
mov eax,ebx
mov eax,dword [file_buffer]
mov ebx,dword [type_fnt]
cmp eax,ebx
mov ecx,dword [file_buffer.font_size]
mov edx,dword [font_x_y]
cmp ecx,edx
mov ecx, 4096;dword [ebp+32] ;ЁрчьхЁ Їрщыр фю 4294967296 срщЄ Є.х. 4 ├с
mov dword [read_block],ecx
mov eax,68
mov ebx,12
mcall
mov dword [font_array_point],eax ;save point to array
mov dword [buffer_read_d],eax
;load font
mov ebx,dword struct_f_info
mov eax,70
mcall
test eax,eax
jnz .exit
lea eax,[buffer_read_d]
mov eax,dword [eax]
mov ebx,dword [eax+8]
add eax,ebx
; add eax,dword [eax+8]
; add eax,dword [buffer_read_d]
mov dword [font_array_data],eax
xor eax,eax
jmp .ok
;here error file system
align 4
.exit:
or eax,-1
align 4
.ok: mov dword [esp+28],eax ;тхЁэхь ю°шсъє
popad
ret 4
; яюшёъ т√тюф ёЄюЁюўъш яю ёшьтюы№эю ёЇюЁшЁютрээюую °ЁшЇЄюь ЄхъёЄр
; esp+12= dd x shl 16 + y x- ъююЁфшэрЄр яю ╒, y - ъююЁфшэрЄр яю Y
; esp+8 = dd point to color of background and font
; esp+4 = dd point to ASCIIZ
; esp+0 = dd back
align 4
font_draw_on_string:
pushad
mov esi,dword [esp+4+32] ;ASCIIZ
mov edx,dword [esp+12+32] ; x shl 16 +y
mov ecx,dword [font_x_y] ;ЁрчьхЁ уышЇр x shl 16 +y
mov edi,dword [esp+8+32] ;єърчрЄхы№ эр ярышЄЁє шч ЎтхЄр ш Їюэр
xor ebp,ebp ;ёь 65 ЇєэъЎш■ ))
cld
align 4
@@: ;pushad
xor eax,eax
lodsb
test al,al
jz .return
shl eax,4 ;єьэюцрхь эр 16 Є.ъ. ¤Єю т√ёюЄр уышЇр
mov ebx,dword [font_array_data] ; ЄєЄ Ёрёяюыюур■Єё  уышЇ√ ёшьтюыют
add ebx,eax
push esi
mov esi,1
mov eax,65
mcall
pop esi
add edx,8 shl 16 ;ёыхфє■∙шщ ёшьтюы °шЁшэр ёшьтюыр = 8 Єюўърь
jmp @b
align 4
.return:
popad
ret 12
align 4
; esp+4 = dd point to color of background and font
show_all_glif:
pushad
mov edx,10 shl 16+20 ;dword [esp+12+32] ; x shl 16 +y
mov ecx,128 shl 16 +256;dword [font_x_y] ;ЁрчьхЁ уышЇр x shl 16 +y
mov edi,dword [esp+4+32] ;єърчрЄхы№ эр ярышЄЁє шч ЎтхЄр ш Їюэр
xor ebp,ebp ;ёь 65 ЇєэъЎш■ ))
align 4
@@:
mov ebx,dword [font_array_data] ; ЄєЄ Ёрёяюыюур■Єё  уышЇ√ ёшьтюыют
mov esi,1
mov eax,65
mcall
popad
ret 4
align 4
free_fulder_info:
;юётюсюфшЄ№ ярь Є№ т√фхыхэє■ фы  яюыєўхэш  сыюъют ┴─┬╩
pushad
mov ecx, dword [fulder_array_point]
mov eax,68
mov ebx,13
mcall
test eax,eax
; jnz @f
mov dword [esp+28],eax ;тхЁэхь ю°шсъє
;align 4
;@@:
popad
ret
align 4
free_font:
;юётюсюфшЄ№ ярь Є№ т√фхыхэє■ фы  яюыєўхэш  сыюъют ┴─┬╩
pushad
mov ecx, dword [font_array_point]
mov eax,68
mov ebx,13
mcall
test eax,eax
; jnz @f
mov dword [esp+28],eax ;тхЁэхь ю°шсъє
;align 4
;@@:
popad
ret
align 4
; alloc mem get 4 Kb for own data
alloc_mem:
pushad
mov eax, dword [alloc_memory_point]
test eax,eax
jnz .mem_allocating
mov eax,68
mov ebx,12
mov ecx,4096
mcall
mov dword [alloc_memory_point],eax ; яЁш яхЁтюь тїюцфхэшш т√фхы хь 4 ъс ╬╟╙ ш ёюїЁрэ хь єърчрЄхы№
mov dword [eax],-1
popad
ret
align 4
.mem_allocating:
mov ebp, dword [eax]
mov eax,ebp
cmp eax, -1
jnz .mem_allocating
mov eax,68
mov ebx,12
mov ecx,4096
mcall
mov dword [ebp],eax ; яЁш яхЁтюь тїюцфхэшш т√фхы хь 4 ъс ╬╟╙ ш ёюїЁрэ хь єърчрЄхы№
mov dword [ebp],-1
popad
ret
align 16
EXPORTS:
dd sz_initialization_font, initialization_font
dd sz_get_font, get_font
dd sz_free_fulder_info, free_fulder_info
dd sz_free_font, free_font
dd sz_font_draw_on_string, font_draw_on_string
dd sz_show_all_glif, show_all_glif
; dd szVersion_ch, 0x00000001
; dd sz_option_box_draw, option_box_draw
; dd sz_option_box_mouse, option_box_mouse
dd szVersion_fn, 0x00000001
dd 0,0
sz_initialization_font db 'initialization_font',0
sz_get_font db 'get_font',0
sz_free_fulder_info db 'free_fulder_info',0
sz_free_font db 'free_font',0
sz_font_draw_on_string db 'font_draw_on_string',0
sz_show_all_glif db 'show_all_glif',0
;sz_check_box_mouse db 'check_box_mouse',0
;szVersion_ch db 'version_ch',0
;sz_option_box_draw db 'option_box_draw',0
;sz_option_box_mouse db 'option_box_mouse',0
szVersion_fn db 'version_fn',0
;;;;;;;;;;;
;;Data
;;;;;;;;;;;
align 4
;buffer_font file 'font_8x16.fon' ;°ЁшЇЄ ъюЄюЁ√ь сєфхь т√тюфшЄ№ raw ЇюЁьрЄ 1bpp
save_ecx dd 0x0
;buffer_font file 'font01.ksf' ;°ЁшЇЄ ъюЄюЁ√ь сєфхь т√тюфшЄ№ raw ЇюЁьрЄ 1bpp
alloc_memory_point dd 0x0 ; point to mem block in RAM 4096-4
;ёЄЁєъЄєЁр Єрър  т эрўрых т√фхыхэюую сыюър Ёрчьх∙рхЄё  єърчрЄхы№ эр фЁєующ т√фхыыэ√щ сыюъ т 4096-4, хёыш ¤Єю сыюъ яюёыхфэшщ, Єю dd -1
font_x_y dd 0x0
fulder_array_point dd 0x0
font_array_point dd 0x0
font_array_data dd 0x0 ; Ёхры№э√х фрээ√х Є.х. ьрЄЁшЎр °ЁшЇЄр
save_ebp dd 0x0
save_point_nt dd 0x0
name_fulder db '/sys/FONTS',0
name_fuld_end= ($-name_fulder) -1
name_font db '.ksf',0
type_fnt db 'kf01'
align 16
struct_f_info:
number_function dd 0x0
index_start_block dd 0x0
flags_ dd 0x0
read_block dd 0x0
buffer_read_d dd buffer_32
free_byte db 0x0
offset_to_string dd name_fulder
align 16
file_buffer:
.type_fnt dd 0x0
.font_size dd 0x0
align 16
buffer_32:
.head dd ?
.quantity_block dd ?
.quantity_files dd ?
rb 20
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page Windows 1251 - Cyrillic
; Copyright (c) 2009, <Lrz>
; 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 Alexey Teplov nickname <Lrz> ''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.
;*****************************************************************************
;;;;;;;;;;;;;;;;;;
format MS COFF
public EXPORTS
section '.flat' code readable align 16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Get info about
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include '../../../macros.inc'
align 4
initialization_font:
; esp+0 = dd back
; чряюыэ хь ьрёёшт - ёЄЁєъЄє фы  яюыєўхэш  ъюы-тр Їрщыют
pushad
xor eax,eax
inc eax
mov [number_function],eax
;structure is completed
mov eax,70
mov ebx,dword struct_f_info
mcall
;IF ERROR FT then exit
test eax,eax
jnz .exit
;IF ERROR folder is not found then exit
test ebx,ebx
mov eax,ebx
jnz .exit
;Get quantity files
mov eax,[buffer_32.quantity_files]
imul eax,304
add eax,32 ; ??
push eax ;save eax т eax ЁрчьхЁ эєцэющ эрь ярь Єш т срщЄрї
;init memory
mov eax,68
mov ebx,11
mcall
test eax,eax
jz .exit
inc ebx ;т√фхышЄ№ сыюъ т ecx срщЄ
pop ecx
mov eax,68
mcall
mov dword [fulder_array_point],eax ;save point for memory's fulder
;т eax єърчрЄхы№ эр сыюъ
mov [buffer_read_d],eax ;point to new array
mov eax,[buffer_32.quantity_files]
mov [read_block],eax
;get in buffer info of files and sub dir current dir
mov eax,70
mov ebx,dword struct_f_info
mcall
;яюыєўшыш шэЇюЁьрЎш■ ю Їрщырї.
mov ebp, dword [buffer_read_d] ;point to structure
mov ecx, dword [ebp+4] ;ъюы-тю сыюъют ┴─┬╩
mov dword [save_ecx],ecx
add ebp, 32 ;ёьх∙рхьё  фю ┴─┬╩
mov dword [save_ebp],ebp
cld ;єёЄрэютър Їырур эряЁртыхэш 
align 4
.start_loop:
push ecx
lea edi,[ebp+0x28] ;т edi єърчрЄхы№ эр эрўрыю шьхэш.
xor eax,eax
mov ecx,263
repne scasb ;эрщфхь ъюэхЎ ёЄЁюъш
;;;;;;;;;;;;;;;;;;;;;;;
sub edi,5 ;.ksf,0
lea esi,[name_font]
mov eax,dword[edi]
or eax,0x20202000 ; ёфхырхь Ёрё°шЁхэшх ёЄЁюўэ√ьш сєътрьш.
cmp eax,dword[esi]
jnz @f
;;;;;;;; єЁр ¤Єю эр° Їрщы Є.х. эр° °ЁшЇЄ ь√ эр°ыш эєцэ√щ Їрщышъ ))
;ЄхяхЁ№ эєцэю Єюўэю єсхфшЄ№ё  ўЄю ¤Єю эр° ш Єюы№ъю эр° Їрщышъ
;чруЁєчшь чруюыютюъ Їрщыр ш єчэрхь хую ЁрчьхЁ уышЇр.
call alloc_mem ; т√фхышь ючє ётюшї яхЁхьхээ√ї
; ёхщўрё эрь эєцэю ёЇюЁьшЁютрЄ№ шь  Їрщыр ё яюыэ√ь яєЄхь
mov eax,dword [alloc_memory_point]
lea edi,dword [eax+4]
lea esi,[name_fulder]
mov ecx,name_fuld_end
rep movsb ;яхЁхэюёшь яєЄ№
mov al,'/'
stosb
lea esi,[ebp+0x28] ;т esi єърчрЄхы№ эр эрўрыю шьхэш.
align 4
.loop_b:
lodsb
stosb
test al,al
jnz .loop_b
; mov edi,name_of_file ; [ebp+0x28] ;т edi єърчрЄхы№ эр эрўрыю шьхэш.
;get in buffer info above own file
xor eax,eax
mov dword [number_function],eax
mov dword [index_start_block],eax ;яючшЎш  т Їрщых фы  ўЄхэш  фрээ√ї
mov dword [flags_],eax ;ёЄрЁ°р  яючшЎш  фы  ўЄхэш  фрээ√ї
mov dword [read_block],8 ;ёъюы№ъю срщЄ ўшЄрЄ№ эрь эєцэю 8 срщЄ
mov dword [buffer_read_d],file_buffer ; єърчрЄхы№ эр сєЇхЁ ъєфр сєфєЄ чряшёрэ√ фрээ√х
mov eax,dword [alloc_memory_point]
lea edi,dword [eax+4]
mov dword [offset_to_string],edi
mov eax,70
mov ebx,dword struct_f_info
mcall
;;;;;;;;;;;;;;;; яЁютхЁшь ЇюЁьрЄ чруюыютър
mov eax,ebx
mov eax,dword [file_buffer]
mov ebx,dword [type_fnt]
cmp eax,ebx
jnz @f
;;;;;;; юЄышўэю ёхщўрё яЁютхЁшыш ўЄю чруюыютюъ шьхээю ЄюЄ ъюЄюЁ√щ эрь эєцхэ
; ёхщўрё эєцэю яхЁхЁрёяЁхфхышЄ№ сыюъш Є.х. яю ьхЁх эрїюцфхэш  сєфхь яхЁхэюёшЄ№ сыюъш
; т эрўрыю сєЇхЁр
mov dword [save_point_nt],ebp
pop ecx
xor eax,eax
jmp .exit
align 4
@@: pop ecx
add ebp,304
dec ecx
jnz .start_loop
; loop .start_loop
or eax,-1
;;;;;;;; яЁю°ышё№ - тёх шэЄхЁхёє∙■∙шх °ЁшЇЄ√ яхЁхьхёЄшыш т эрўрыю сыюър.
align 4
.exit: mov dword [esp+28],eax
popad
ret
align 4
get_font:
; яюшёъ т ьрёёштх °ЁшЇЄр яЁш ёютярфхэшш єcыютшщ чруЁєчър °ЁшЇЄр
; esp+4 = dd width font shl 16 +hight font
; esp+0 = dd back
;pop eax
; pop dword [font_x_y]
;push eax
pushad
mov eax,dword [esp+32+4]
mov dword [font_x_y],eax
xor eax,eax
mov dword [number_function],eax
mov dword [index_start_block],eax ;яючшЎш  т Їрщых фы  ўЄхэш  фрээ√ї
mov dword [flags_],eax ;ёЄрЁ°р  яючшЎш  фы  ўЄхэш  фрээ√ї
mov dword [read_block],8 ;ёъюы№ъю срщЄ ўшЄрЄ№ эрь эєцэю 8 срщЄ
mov dword [buffer_read_d],file_buffer ; єърчрЄхы№ эр сєЇхЁ ъєфр сєфєЄ чряшёрэ√ фрээ√х
mov eax,dword [alloc_memory_point]
lea edi,dword [eax+4]
mov dword [offset_to_string],edi
mov eax,70
mov ebx,dword struct_f_info
mcall
;;;;;;;;;;;;;;;; яЁютхЁшь ЇюЁьрЄ чруюыютър
mov eax,ebx
mov eax,dword [file_buffer]
mov ebx,dword [type_fnt]
cmp eax,ebx
mov ecx,dword [file_buffer.font_size]
mov edx,dword [font_x_y]
cmp ecx,edx
mov ecx, 4096;dword [ebp+32] ;ЁрчьхЁ Їрщыр фю 4294967296 срщЄ Є.х. 4 ├с
mov dword [read_block],ecx
mov eax,68
mov ebx,12
mcall
mov dword [font_array_point],eax ;save point to array
mov dword [buffer_read_d],eax
;load font
mov ebx,dword struct_f_info
mov eax,70
mcall
test eax,eax
jnz .exit
lea eax,[buffer_read_d]
mov eax,dword [eax]
mov ebx,dword [eax+8]
add eax,ebx
; add eax,dword [eax+8]
; add eax,dword [buffer_read_d]
mov dword [font_array_data],eax
xor eax,eax
jmp .ok
;here error file system
align 4
.exit:
or eax,-1
align 4
.ok: mov dword [esp+28],eax ;тхЁэхь ю°шсъє
popad
ret 4
; яюшёъ т√тюф ёЄюЁюўъш яю ёшьтюы№эю ёЇюЁшЁютрээюую °ЁшЇЄюь ЄхъёЄр
; esp+12= dd x shl 16 + y x- ъююЁфшэрЄр яю ╒, y - ъююЁфшэрЄр яю Y
; esp+8 = dd point to color of background and font
; esp+4 = dd point to ASCIIZ
; esp+0 = dd back
align 4
font_draw_on_string:
pushad
mov esi,dword [esp+4+32] ;ASCIIZ
mov edx,dword [esp+12+32] ; x shl 16 +y
mov ecx,dword [font_x_y] ;ЁрчьхЁ уышЇр x shl 16 +y
mov edi,dword [esp+8+32] ;єърчрЄхы№ эр ярышЄЁє шч ЎтхЄр ш Їюэр
xor ebp,ebp ;ёь 65 ЇєэъЎш■ ))
cld
align 4
@@: ;pushad
xor eax,eax
lodsb
test al,al
jz .return
shl eax,4 ;єьэюцрхь эр 16 Є.ъ. ¤Єю т√ёюЄр уышЇр
mov ebx,dword [font_array_data] ; ЄєЄ Ёрёяюыюур■Єё  уышЇ√ ёшьтюыют
add ebx,eax
push esi
mov esi,1
mov eax,65
mcall
pop esi
add edx,8 shl 16 ;ёыхфє■∙шщ ёшьтюы °шЁшэр ёшьтюыр = 8 Єюўърь
jmp @b
align 4
.return:
popad
ret 12
align 4
; esp+4 = dd point to color of background and font
show_all_glif:
pushad
mov edx,10 shl 16+20 ;dword [esp+12+32] ; x shl 16 +y
mov ecx,128 shl 16 +256;dword [font_x_y] ;ЁрчьхЁ уышЇр x shl 16 +y
mov edi,dword [esp+4+32] ;єърчрЄхы№ эр ярышЄЁє шч ЎтхЄр ш Їюэр
xor ebp,ebp ;ёь 65 ЇєэъЎш■ ))
align 4
@@:
mov ebx,dword [font_array_data] ; ЄєЄ Ёрёяюыюур■Єё  уышЇ√ ёшьтюыют
mov esi,1
mov eax,65
mcall
popad
ret 4
align 4
free_fulder_info:
;юётюсюфшЄ№ ярь Є№ т√фхыхэє■ фы  яюыєўхэш  сыюъют ┴─┬╩
pushad
mov ecx, dword [fulder_array_point]
mov eax,68
mov ebx,13
mcall
test eax,eax
; jnz @f
mov dword [esp+28],eax ;тхЁэхь ю°шсъє
;align 4
;@@:
popad
ret
align 4
free_font:
;юётюсюфшЄ№ ярь Є№ т√фхыхэє■ фы  яюыєўхэш  сыюъют ┴─┬╩
pushad
mov ecx, dword [font_array_point]
mov eax,68
mov ebx,13
mcall
test eax,eax
; jnz @f
mov dword [esp+28],eax ;тхЁэхь ю°шсъє
;align 4
;@@:
popad
ret
align 4
; alloc mem get 4 Kb for own data
alloc_mem:
pushad
mov eax, dword [alloc_memory_point]
test eax,eax
jnz .mem_allocating
mov eax,68
mov ebx,12
mov ecx,4096
mcall
mov dword [alloc_memory_point],eax ; яЁш яхЁтюь тїюцфхэшш т√фхы хь 4 ъс ╬╟╙ ш ёюїЁрэ хь єърчрЄхы№
mov dword [eax],-1
popad
ret
align 4
.mem_allocating:
mov ebp, dword [eax]
mov eax,ebp
cmp eax, -1
jnz .mem_allocating
mov eax,68
mov ebx,12
mov ecx,4096
mcall
mov dword [ebp],eax ; яЁш яхЁтюь тїюцфхэшш т√фхы хь 4 ъс ╬╟╙ ш ёюїЁрэ хь єърчрЄхы№
mov dword [ebp],-1
popad
ret
align 16
EXPORTS:
dd sz_initialization_font, initialization_font
dd sz_get_font, get_font
dd sz_free_fulder_info, free_fulder_info
dd sz_free_font, free_font
dd sz_font_draw_on_string, font_draw_on_string
dd sz_show_all_glif, show_all_glif
; dd szVersion_ch, 0x00000001
; dd sz_option_box_draw, option_box_draw
; dd sz_option_box_mouse, option_box_mouse
dd szVersion_fn, 0x00000001
dd 0,0
sz_initialization_font db 'initialization_font',0
sz_get_font db 'get_font',0
sz_free_fulder_info db 'free_fulder_info',0
sz_free_font db 'free_font',0
sz_font_draw_on_string db 'font_draw_on_string',0
sz_show_all_glif db 'show_all_glif',0
;sz_check_box_mouse db 'check_box_mouse',0
;szVersion_ch db 'version_ch',0
;sz_option_box_draw db 'option_box_draw',0
;sz_option_box_mouse db 'option_box_mouse',0
szVersion_fn db 'version_fn',0
;;;;;;;;;;;
;;Data
;;;;;;;;;;;
align 4
;buffer_font file 'font_8x16.fon' ;°ЁшЇЄ ъюЄюЁ√ь сєфхь т√тюфшЄ№ raw ЇюЁьрЄ 1bpp
save_ecx dd 0x0
;buffer_font file 'font01.ksf' ;°ЁшЇЄ ъюЄюЁ√ь сєфхь т√тюфшЄ№ raw ЇюЁьрЄ 1bpp
alloc_memory_point dd 0x0 ; point to mem block in RAM 4096-4
;ёЄЁєъЄєЁр Єрър  т эрўрых т√фхыхэюую сыюър Ёрчьх∙рхЄё  єърчрЄхы№ эр фЁєующ т√фхыыэ√щ сыюъ т 4096-4, хёыш ¤Єю сыюъ яюёыхфэшщ, Єю dd -1
font_x_y dd 0x0
fulder_array_point dd 0x0
font_array_point dd 0x0
font_array_data dd 0x0 ; Ёхры№э√х фрээ√х Є.х. ьрЄЁшЎр °ЁшЇЄр
save_ebp dd 0x0
save_point_nt dd 0x0
name_fulder db '/sys/FONTS',0
name_fuld_end= ($-name_fulder) -1
name_font db '.ksf',0
type_fnt db 'kf01'
align 16
struct_f_info:
number_function dd 0x0
index_start_block dd 0x0
flags_ dd 0x0
read_block dd 0x0
buffer_read_d dd buffer_32
free_byte db 0x0
offset_to_string dd name_fulder
align 16
file_buffer:
.type_fnt dd 0x0
.font_size dd 0x0
align 16
buffer_32:
.head dd ?
.quantity_block dd ?
.quantity_files dd ?
rb 20
@@ -22,7 +22,7 @@
;; References: ;;
;; 1. GIF LITE v3.0 (2004-2007) ;;
;; by Willow and Diamond ;;
;; svn://kolibrios.org/programs/media/gifview/trunk/gif_lite.inc ;;
;; /programs/other/outdated/gifview/gif_lite.inc ;;
;; 2. "GIF File Format Summary" ;;
;; from "Encyclopedia of Graphics File Formats" by O'Reilly ;;
;; http://www.fileformat.info/format/gif/ ;;
@@ -1,71 +1,74 @@
;*****************************************************************************
; Proc_Lib - library for common procedures
;
; Authors:
; Marat Zakiyanov aka Mario79, aka Mario
;*****************************************************************************
format MS COFF
public EXPORTS
section '.flat' code readable align 16
include '../../../../macros.inc'
;include '../../../../proc32.inc'
include '../../../../KOSfuncs.inc'
include 'opendial.mac'
include 'colrdial.mac'
;include 'debug.inc'
;-----------------------------------------------------------------------------
;--------------------------------------------------
; Open Dialog
;--------------------------------------------------
align 16
use_OpenDialog
;--------------------------------------------------
; Color Dialog
;--------------------------------------------------
align 16
use_ColorDialog
;--------------------------------------------------
align 16
lib_init:
xor eax, eax
ret
;--------------------------------------------------
align 16
EXPORTS:
dd sz_init, lib_init
dd sz_version, 0x00000001
dd sz_OpenDialog_init, OpenDialog.init
dd sz_OpenDialog_start, OpenDialog.start
dd sz_OpenDialog_set_file_name, OpenDialog.set_file_name
dd sz_OpenDialog_set_file_ext, OpenDialog.set_file_ext
dd szVersion_OpenDialog, 0x00010001
dd sz_ColorDialog_init, ColorDialog.init
dd sz_ColorDialog_start, ColorDialog.start
dd szVersion_ColorDialog, 0x00010001
dd 0,0
;-----------------------------------------------------------------------------
sz_init db 'lib_init',0
sz_version db 'version',0
sz_OpenDialog_init db 'OpenDialog_init',0
sz_OpenDialog_start db 'OpenDialog_start',0
sz_OpenDialog_set_file_name db 'OpenDialog_set_file_name',0
sz_OpenDialog_set_file_ext db 'OpenDialog_set_file_ext',0
szVersion_OpenDialog db 'Version_OpenDialog',0
sz_ColorDialog_init db 'ColorDialog_init',0
sz_ColorDialog_start db 'ColorDialog_start',0
szVersion_ColorDialog db 'Version_ColorDialog',0
;-----------------------------------------------------------------------------
; SPDX-License-Identifier: NOASSERTION
;
;*****************************************************************************
; Proc_Lib - library for common procedures
;
; Authors:
; Marat Zakiyanov aka Mario79, aka Mario
;*****************************************************************************
format MS COFF
public EXPORTS
section '.flat' code readable align 16
include '../../../macros.inc'
;include '../../../proc32.inc'
include '../../../KOSfuncs.inc'
include 'opendial.mac'
include 'colrdial.mac'
;include 'debug.inc'
;-----------------------------------------------------------------------------
;--------------------------------------------------
; Open Dialog
;--------------------------------------------------
align 16
use_OpenDialog
;--------------------------------------------------
; Color Dialog
;--------------------------------------------------
align 16
use_ColorDialog
;--------------------------------------------------
align 16
lib_init:
xor eax, eax
ret
;--------------------------------------------------
align 16
EXPORTS:
dd sz_init, lib_init
dd sz_version, 0x00000001
dd sz_OpenDialog_init, OpenDialog.init
dd sz_OpenDialog_start, OpenDialog.start
dd sz_OpenDialog_set_file_name, OpenDialog.set_file_name
dd sz_OpenDialog_set_file_ext, OpenDialog.set_file_ext
dd szVersion_OpenDialog, 0x00010001
dd sz_ColorDialog_init, ColorDialog.init
dd sz_ColorDialog_start, ColorDialog.start
dd szVersion_ColorDialog, 0x00010001
dd 0,0
;-----------------------------------------------------------------------------
sz_init db 'lib_init',0
sz_version db 'version',0
sz_OpenDialog_init db 'OpenDialog_init',0
sz_OpenDialog_start db 'OpenDialog_start',0
sz_OpenDialog_set_file_name db 'OpenDialog_set_file_name',0
sz_OpenDialog_set_file_ext db 'OpenDialog_set_file_ext',0
szVersion_OpenDialog db 'Version_OpenDialog',0
sz_ColorDialog_init db 'ColorDialog_init',0
sz_ColorDialog_start db 'ColorDialog_start',0
szVersion_ColorDialog db 'Version_ColorDialog',0
;-----------------------------------------------------------------------------
@@ -1,64 +1,66 @@
;-----------------------------------------------------------------------------+
; Library "utils" (c) Sergei Steshin (Akyltist) |
;-----------------------------------------------------------------------------+
; Charset:DOS-866 Font:Courier New Size:9pt |
; compiler: FASM 1.69.31 |
; version: 0.1.0 |
; last update: 31/03/2014 |
; e-mail: dr.steshin@gmail.com |
; license: BSD |
;-----------------------------------------------------------------------------+
format MS COFF
public EXPORTS
section '.flat' code readable writable align 16
include '../../../../proc32.inc'
include '_ftoa.inc'
include '_atof.inc'
include '_rand.inc'
;-----------------------------------------------------------------------------+
; float to ascii string |
;-----------------------------------------------------------------------------+
ftoa: ;
mov ebx, dword [esp+4] ; out string
mov eax, dword [esp+8] ; in value
stdcall FloatToString,eax,ebx ;
ret 8 ;
;-----------------------------------------------------------------------------+
; ascii string to float |
;-----------------------------------------------------------------------------+
atof: ;
mov ebx, dword [esp+4] ; out <- value
mov eax, dword [esp+8] ; in -> string
stdcall string2float,eax,ebx ;
ret 8 ;
;-----------------------------------------------------------------------------+
; returns a random integer in the range [ 0...99999 ] |
;-----------------------------------------------------------------------------+
random: ;
call _random ; out <- eax random
ret ;
;=============================================================================;
align 16
EXPORTS:
dd szFtoa , ftoa
dd szAtof , atof
dd szRandom , random
dd 0 , 0
szFtoa db 'ftoa' ,0
szAtof db 'atof' ,0
szRandom db 'random' ,0
section '.data' data readable writable align 16
; SPDX-License-Identifier: NOASSERTION
;
;-----------------------------------------------------------------------------+
; Library "utils" (c) Sergei Steshin (Akyltist) |
;-----------------------------------------------------------------------------+
; Charset:DOS-866 Font:Courier New Size:9pt |
; compiler: FASM 1.69.31 |
; version: 0.1.0 |
; last update: 31/03/2014 |
; e-mail: dr.steshin@gmail.com |
; license: BSD |
;-----------------------------------------------------------------------------+
format MS COFF
public EXPORTS
section '.flat' code readable writable align 16
include '../../../proc32.inc'
include '_ftoa.inc'
include '_atof.inc'
include '_rand.inc'
;-----------------------------------------------------------------------------+
; float to ascii string |
;-----------------------------------------------------------------------------+
ftoa: ;
mov ebx, dword [esp+4] ; out string
mov eax, dword [esp+8] ; in value
stdcall FloatToString,eax,ebx ;
ret 8 ;
;-----------------------------------------------------------------------------+
; ascii string to float |
;-----------------------------------------------------------------------------+
atof: ;
mov ebx, dword [esp+4] ; out <- value
mov eax, dword [esp+8] ; in -> string
stdcall string2float,eax,ebx ;
ret 8 ;
;-----------------------------------------------------------------------------+
; returns a random integer in the range [ 0...99999 ] |
;-----------------------------------------------------------------------------+
random: ;
call _random ; out <- eax random
ret ;
;=============================================================================;
align 16
EXPORTS:
dd szFtoa , ftoa
dd szAtof , atof
dd szRandom , random
dd 0 , 0
szFtoa db 'ftoa' ,0
szAtof db 'atof' ,0
szRandom db 'random' ,0
section '.data' data readable writable align 16
+2 -2
View File
@@ -1,6 +1,6 @@
ROOT=../../develop/libraries/framework/trunk
ROOT=../../develop/libraries/framework
include ../../develop/libraries/framework/trunk/config.mk
include ../../develop/libraries/framework/config.mk
# Note that kobra_st.o MUST be first and kobra.o last.
OBJECTS=kobra_st.o $(ROOT)/stdlib/heap.o $(ROOT)/stdlib/malloc.o $(ROOT)/stdlib/stdlib.o $(ROOT)/kolibri/kolibri.o $(ROOT)/libIPC/ipc.o kobra.o