merge upstream
Build system / Check kernel codestyle (pull_request) Successful in 51s
Build system / Build (pull_request) Successful in 16m8s

This commit is contained in:
Max
2026-04-11 19:01:14 +00:00
381 changed files with 19610 additions and 17702 deletions
+6 -3
View File
@@ -1,3 +1,6 @@
; SPDX-License-Identifier: NOASSERTION
;
format coff
use32 ; Tell compiler to use 32 bit instructions
@@ -8,7 +11,7 @@ include '../../../programs/macros.inc'
purge section,mov,add,sub
include '../../../programs/develop/libraries/box_lib/trunk/box_lib.mac'
include '../../../programs/system/run/trunk/txtbut.inc'
include '../../../programs/system/run/txtbut.inc'
include '../../../programs/dll.inc'
public init_boxlib as '_kolibri_boxlib_init'
@@ -159,8 +162,8 @@ public path_show_draw as '_path_show_draw'
public fb_draw_panel as '_filebrowse_draw'
public fb_mouse as '_filebrowse_mouse'
public fb_key as '_filebrowse_key'
public fb_key as '_filebrowse_key'
public ted_but_sumb_upper as '_ted_but_sumb_upper'
public ted_but_sumb_lover as '_ted_but_sumb_lover'
public ted_but_convert_by_table as '_ted_but_convert_by_table'
+10 -7
View File
@@ -1,7 +1,10 @@
@@unpack$qqspvt1 equ unpack
include "..\..\system\skincfg\trunk\kglobals.inc"
include "..\..\system\skincfg\trunk\unpacker.inc"
IncludeIGlobals
IncludeUGlobals
; SPDX-License-Identifier: NOASSERTION
;
@@unpack$qqspvt1 equ unpack
include "..\..\system\skincfg\kglobals.inc"
include "..\..\system\skincfg\unpacker.inc"
IncludeIGlobals
IncludeUGlobals
+52 -53
View File
@@ -58,30 +58,30 @@ echo Building system
echo *
fasm system\calendar\calendar.asm %BIN%\calendar
fasm system\board\board.asm %BIN%\develop\board
fasm system\commouse\trunk\commouse.asm %BIN%\commouse
rem fasm system\commouse\trunk\commouse.asm %BIN%\commouse
fasm system\cpu\cpu.asm %BIN%\cpu
fasm system\cpuid\trunk\cpuid.asm %BIN%\cpuid
fasm system\skincfg\trunk\skincfg.asm %BIN%\skincfg
rem fasm system\cpuid\trunk\cpuid.asm %BIN%\cpuid
fasm system\skincfg\skincfg.asm %BIN%\skincfg
fasm system\docpack\docpack.asm %BIN%\docpack
fasm system\end\trunk\end.asm %BIN%\end
fasm system\end\end.asm %BIN%\end
fasm system\gmon\gmon.asm %BIN%\gmon
fasm system\icon\icon.asm %BIN%\icon
fasm system\kbd\trunk\kbd.ASM %BIN%\kbd
rem fasm system\kbd\trunk\kbd.ASM %BIN%\kbd
fasm system\launcher\launcher.asm %BIN%\launcher
fasm system\menu\menu.asm %BIN%\@menu
fasm system\mgb\trunk\mgb.asm %BIN%\mgb
rem fasm system\mgb\trunk\mgb.asm %BIN%\mgb
fasm system\mousemul\mousemul.asm %BIN%\mousemul
fasm system\PANEL\trunk\@TASKBAR.ASM %BIN%\@TASKBAR
fasm system\pcidev\trunk\pcidev.asm %BIN%\pcidev
fasm system\RB\trunk\@RB.ASM %BIN%\@RB
fasm system\taskbar\TASKBAR.ASM %BIN%\@TASKBAR
rem fasm system\pcidev\trunk\pcidev.asm %BIN%\pcidev
rem fasm system\RB\trunk\@RB.ASM %BIN%\@RB
fasm system\rdsave\rdsave.asm %BIN%\rdsave
fasm system\run\trunk\run.asm %BIN%\run
fasm system\setup\trunk\setup.asm %BIN%\setup
fasm system\skinsel\skinsel.asm %BIN%\skinsel
fasm system\ss\trunk\@ss.asm %BIN%\@ss
fasm system\vrr\trunk\vrr.asm %BIN%\vrr
fasm system\vrr_m\trunk\vrr_m.asm %BIN%\vrr_m
fasm system\zkey\trunk\zkey.asm %BIN%\zkey
fasm system\run\run.asm %BIN%\run
fasm system\setup\setup.asm %BIN%\setup
rem fasm system\skinsel\skinsel.asm %BIN%\skinsel
rem fasm system\ss\trunk\@ss.asm %BIN%\@ss
rem fasm system\vrr\trunk\vrr.asm %BIN%\vrr
rem fasm system\vrr_m\trunk\vrr_m.asm %BIN%\vrr_m
fasm system\zkey\zkey.asm %BIN%\zkey
echo *
echo Building develop
@@ -115,7 +115,7 @@ fasm fs\copy2\trunk\copy2.asm %BIN%\copy2
fasm fs\copyr\trunk\copyr.asm %BIN%\copyr
fasm fs\kfar\trunk\kfar.asm %BIN%\kfar
rem fasm fs\mfar\trunk\mfar.asm %BIN%\mfar
fasm fs\sysxtree\trunk\sysxtree.asm %BIN%\sysxtree
rem fasm fs\sysxtree\trunk\sysxtree.asm %BIN%\sysxtree
echo *
echo Building network
@@ -155,7 +155,7 @@ echo Building other
echo *
rem fasm other\archer\trunk\@rcher.asm %BIN%\@rcher
fasm other\calc\calc.asm %BIN%\calc
fasm other\mhc\trunk\mhc.asm %BIN%\mhc
rem fasm other\mhc\trunk\mhc.asm %BIN%\mhc
fasm other\period\period.asm %BIN%\period
fasm other\rtfread\rtfread.asm %BIN%\rtfread
@@ -164,17 +164,16 @@ echo Building media
echo *
rem media\ac97snd\trunk\ac97snd.asm ac97snd
fasm media\animage\animage.asm %BIN%\animage
fasm media\cdp\trunk\cdp.asm %BIN%\cdp
fasm media\gifview\trunk\gifview.asm %BIN%\gifview
fasm media\iconedit\trunk\iconedit.asm %BIN%\iconedit
fasm media\jpegview\trunk\jpegview.asm %BIN%\jpegview
fasm media\midamp\trunk\midamp.asm %BIN%\midamp
fasm media\midiplay\trunk\midiplay.asm %BIN%\midiplay
fasm media\mixer\trunk\mixer.asm %BIN%\mixer
fasm media\mv\trunk\mv.asm %BIN%\mv
fasm media\pic4\trunk\pic4.asm %BIN%\pic4
fasm media\sb\trunk\sb.asm %BIN%\sb
rem fasm media\cdp\trunk\cdp.asm %BIN%\cdp
rem fasm media\gifview\trunk\gifview.asm %BIN%\gifview
rem fasm media\iconedit\trunk\iconedit.asm %BIN%\iconedit
rem fasm media\jpegview\trunk\jpegview.asm %BIN%\jpegview
fasm media\midamp\midamp.asm %BIN%\midamp
fasm media\midiplay\midiplay.asm %BIN%\midiplay
rem fasm media\mixer\trunk\mixer.asm %BIN%\mixer
rem fasm media\mv\trunk\mv.asm %BIN%\mv
fasm media\pic4\pic4.asm %BIN%\pic4
rem fasm media\sb\trunk\sb.asm %BIN%\sb
fasm media\scrshoot\scrshoot.asm %BIN%\scrshoot
echo *
@@ -183,9 +182,9 @@ echo *
fasm games\15\trunk\15.asm %BIN%\games\15
fasm games\arcanii\trunk\arcanii.asm %BIN%\games\arcanii
fasm games\arcanoid\trunk\arcanoid.asm %BIN%\games\arcanoid
cd games\c4\trunk\
pushd games\c4\trunk\
nasmw -f bin -o ..\..\..\%BIN%\games\c4 c4.asm
cd ..\..\..
popd
fasm games\freecell\freecell.asm %BIN%\games\freecell
fasm games\mblocks\trunk\mblocks.asm %BIN%\games\mblocks
fasm games\phenix\trunk\phenix.asm %BIN%\games\phenix
@@ -204,28 +203,28 @@ echo *
fasm demos\3dcube2\3dcube2.asm %BIN%\3d\3dcube2
rem fasm demos\3detx60b\3detx60b.asm %BIN%\3d\3detx60b
fasm demos\3dtcub10\3dtcub10.asm %BIN%\3d\3dtcub10
cd demos\aclock\trunk\
pushd demos\aclock\
nasmw -t -f bin -o ..\..\..\%BIN%\demos\aclock aclock.asm
cd ..\..\..
popd
fasm demos\bcdclk\bcdclk.asm %BIN%\demos\bcdclk
fasm demos\bgitest\trunk\bgitest.asm %BIN%\fonts\bgitest
rem fasm demos\bgitest\trunk\bgitest.asm %BIN%\fonts\bgitest
fasm demos\colorref\colorref.asm %BIN%\demos\colorref
fasm demos\crownscr\crownscr.asm %BIN%\3d\crownscr
fasm demos\cslide\cslide.asm %BIN%\demos\cslide
fasm demos\eyes\eyes.asm %BIN%\demos\eyes
fasm demos\fire\fire.asm %BIN%\demos\fire
fasm demos\fire2\fire2.asm %BIN%\demos\fire2
fasm demos\firework\trunk\firework.asm %BIN%\demos\firework
fasm demos\firework\firework.asm %BIN%\demos\firework
fasm demos\free3d04\free3d04.asm %BIN%\3d\free3d04
fasm demos\magnify\trunk\magnify.asm %BIN%\magnify
fasm demos\movback\trunk\movback.asm %BIN%\demos\movback
fasm demos\plasma\trunk\plasma.asm %BIN%\demos\plasma
fasm demos\timer\trunk\timer.asm %BIN%\demos\timer
fasm demos\tinyfrac\trunk\tinyfrac.asm %BIN%\demos\tinyfrac
fasm demos\transp\trunk\transp.asm %BIN%\demos\transp
fasm demos\trantest\trunk\trantest.asm %BIN%\demos\trantest
fasm demos\tube\trunk\tube.asm %BIN%\demos\tube
fasm demos\unvwater\trunk\unvwater.asm %BIN%\demos\unvwater
rem fasm demos\magnify\trunk\magnify.asm %BIN%\magnify
fasm demos\movback\movback.asm %BIN%\demos\movback
fasm demos\plasma\plasma.asm %BIN%\demos\plasma
fasm demos\timer\timer.asm %BIN%\demos\timer
fasm demos\tinyfrac\tinyfrac.asm %BIN%\demos\tinyfrac
fasm demos\transp\transp.asm %BIN%\demos\transp
fasm demos\trantest\trantest.asm %BIN%\demos\trantest
fasm demos\tube\tube.asm %BIN%\demos\tube
fasm demos\unvwater\unvwater.asm %BIN%\demos\unvwater
echo *
echo Building depend application for fdd's nightbuild
@@ -234,12 +233,12 @@ echo __nightbuild fix yes >> config.inc
fasm media\kiv\kiv.asm %BIN%\nightbuild\kiv
fasm media\scrshoot\scrshoot.asm %BIN%\nightbuild\scrshoot
fasm media\animage\animage.asm %BIN%\nightbuild\animage
fasm media\midamp\trunk\midamp.asm %BIN%\nightbuild\midamp
fasm media\midamp\midamp.asm %BIN%\nightbuild\midamp
fasm develop\heed\trunk\heed.asm %BIN%\nightbuild\heed
fasm develop\tinypad\trunk\tinypad.asm %BIN%\nightbuild\tinypad
fasm system\skincfg\trunk\skincfg.asm %BIN%\nightbuild\skincfg
fasm system\skincfg\skincfg.asm %BIN%\nightbuild\skincfg
fasm system\hdd_info\hdd_info.asm %BIN%\nightbuild\hdd_info
fasm system\mgb\trunk\mgb.asm %BIN%\nightbuild\mgb
rem fasm system\mgb\trunk\mgb.asm %BIN%\nightbuild\mgb
fasm system\rdsave\rdsave.asm %BIN%\nightbuild\rdsave
fasm other\kpack\trunk\kpack.asm %BIN%\nightbuild\kpack
fasm other\rtfread\rtfread.asm %BIN%\nightbuild\rtfread
@@ -327,7 +326,7 @@ echo *
kpack %BIN%\copy2
kpack %BIN%\copyr
kpack %BIN%\kfar
kpack %BIN%\sysxtree
rem kpack %BIN%\sysxtree
echo *
echo Compressing network
@@ -367,7 +366,7 @@ echo *
rem kpack %BIN%\@rcher
kpack %BIN%\calc
kpack %BIN%\mhc
rem kpack %BIN%\mhc
kpack %BIN%\period
kpack %BIN%\rtfread
@@ -376,10 +375,10 @@ echo Compressing media
echo *
kpack %BIN%\animage
kpack %BIN%\cdp
kpack %BIN%\gifview
kpack %BIN%\iconedit
kpack %BIN%\jpegview
rem kpack %BIN%\cdp
rem kpack %BIN%\gifview
rem kpack %BIN%\iconedit
rem kpack %BIN%\jpegview
kpack %BIN%\midamp
kpack %BIN%\midiplay
kpack %BIN%\mixer
@@ -1,6 +1,6 @@
if tup.getconfig("NO_TCC") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_tcc.lua")
link_tcc("main.c", "kmatrix");
@@ -1,4 +1,4 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
tup.rule("life.asm", FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "life")
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,3 +1,9 @@
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
;
; TIMER (show how much system works)
;
@@ -17,7 +23,7 @@ use32
dd 0x0 , 0x0 ; I_Param , I_Icon
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
include '..\..\..\macros.inc'
include '..\..\macros.inc'
START: ; start of execution
mov eax, 40
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,3 +1,6 @@
; SPDX-License-Identifier: NOASSERTION
;
; tinyfrac.asm
;
; teeny program displays the Mandelbrot set.
@@ -82,7 +85,7 @@ use32
dd 0,0
include 'lang.inc'
include '..\..\..\macros.inc'
include '..\..\macros.inc'
START:
call draw_fractal
@@ -173,39 +176,39 @@ still:
call draw_fractal
jmp still
no_right:
cmp al,19 ;'r'
jne no_red
mov ah,3
call colorize
jmp still
no_red:
cmp al,34 ;'g'
jne no_green
mov ah,4
call colorize
jmp still
no_green:
cmp al,48 ;'b'
jne no_blue
mov ah,5
call colorize
jmp still
no_blue:
cmp al,17 ;'w'
jne no_set_as_wallpaper
mcall 15, 1, PIXWIDTH, PIXHEIGHT
mcall 15, 4, 1 ;mode 1-tiled, 0-stretch
mcall 15, 5, IMGBUF, 0, PIXWIDTH*3*PIXHEIGHT
mcall 15, 3
mcall 15, 3
no_set_as_wallpaper:
jmp still
colorize:
colorize:
shr eax,8
sub eax,3
imul eax,8
@@ -392,13 +395,13 @@ scale db STARTSCALE
draw_window:
pusha
mcall 12, 1
mcall 48, 4 ;get skin height
lea ecx, [50*65536+PIXHEIGHT+4+eax]
mcall 0,<50,PIXWIDTH+9>,,0x74000000,,header_txt ;draw window
call put_image
mcall 12, 2
popa
ret
@@ -425,4 +428,4 @@ STARTY dd 120
scaleaddy dd 120
scaleaddx dd 200
I_END:
I_END:
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,3 +1,6 @@
; SPDX-License-Identifier: NOASSERTION
;
;
; TRANSPARENT EXAMPLE
;
@@ -17,7 +20,7 @@ use32
dd 0x0 , 0x0 ; I_Param , I_Icon
include 'lang.inc'
include '..\..\..\macros.inc'
include '..\..\macros.inc'
START: ; start of execution
mov [procinfo.box.left], 100
@@ -25,7 +28,7 @@ START: ; start of execution
mov [procinfo.box.top], 80
mov [procinfo.box.height], 300
call draw_window
red:
red:
call get_transparent
call draw_window ; at first, draw the window
@@ -83,7 +86,7 @@ draw_window:
mcall
call draw_transparent
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mcall
@@ -192,4 +195,3 @@ title db 'Transparent',0
I_END:
procinfo process_information
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,3 +1,6 @@
; SPDX-License-Identifier: NOASSERTION
;
;
; TRIANGLE SPEED TEST 3
; 32 triangle draw use! 12300 triangle in sec on 800Mhz processor
@@ -19,7 +22,7 @@ use32
SCREEN_X equ 320 ;800
SCREEN_Y equ 200 ;600
include '..\..\..\macros.inc'
include '..\..\macros.inc'
include 'lang.inc'
include 'ascl.inc'
include 'ascgl.inc'
@@ -80,7 +83,7 @@ exit:
;Draw window
draw_window:
mov eax,12 ;Start
mov ebx,1
mcall
@@ -227,7 +230,7 @@ filled_triangle:
mov ecx,[@@ty2]
cmp ecx,[@@ty3]
jge @@end_loop23
mov ebx,[@@tx2]
shl ebx,12 ;7
@@loop23:
@@ -1,3 +1,6 @@
; SPDX-License-Identifier: NOASSERTION
;
;"Web" demo for KolibriOS, version 0.3
;Copyright Alexander Meshcheryakov (Self-Perfection), 2009
;Contact me: alexander.s.m@gmail.com
@@ -13,7 +16,7 @@ use32
db 'MENUET01'
dd 0x01,__start,__end,__memory,__stack,param,0
include '../../../macros.inc'
include '../../macros.inc'
background_cl = 0x000000
foreground_cl = 0xFFFFFF
@@ -31,7 +34,7 @@ CODE
mov ebx, EVM_REDRAW + EVM_KEY + EVM_BUTTON
cmovz ebx, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE
mcall 40
;Make cursor transparent
mov edi, transparent_cursor
xor eax, eax
@@ -40,7 +43,7 @@ CODE
mcall 37, 4, transparent_cursor, 2
mov ecx, eax
mcall 37, 5
;Preinit. Randomize start counter
mcall 3
mov [initial_counter], eax ;init with system time
@@ -51,7 +54,7 @@ CODE
mov dword [y_max], eax ;store x_max and y_max
shr eax, 1
mov dword [radius], eax ;store radius and x_center
;Calc line_number
mov ax, [y_max]
mov dx, 0
@@ -90,7 +93,7 @@ CODE
fninit
fldpi
fidiv word [half_line_number] ;Now st0 contains angle step of line start points
mov eax, [line_coords_array_pointer] ;cleanup: comment
movzx ecx, word [half_line_number]
shl ecx, 1
@@ -189,7 +192,7 @@ calculate_next_line_end_point:
add eax, dword [image_pointer]
inc eax
mov [eax], byte red_cl_index
movzx ebx, word [esi+end_y_offset]
movzx eax, word [x_max]
imul eax, ebx
@@ -210,9 +213,9 @@ calculate_next_line_end_point:
mov bx, word [esi+start_y_offset]
cmp bx, word [esi+end_y_offset]
jnz general_draw_line ;Jump to next test if dy!=0
pusha
movzx ecx, word [esi+end_x_offset]
sub cx, word [esi+start_x_offset]
@@ -279,7 +282,7 @@ general_draw_line:
neg cx
neg edi
@@:
;compare abs(y1 - y0) and abs(x1 - x0)
cmp bx, cx
jnc @f
@@ -348,7 +351,7 @@ line_drawing_end:
movzx ebx, [x_max]
movzx ecx, [y_max]
mov edx, 0x01000000 ;Window style ;Draw nothing
; mov edx, 0x00000000 ;Window style
; mov edx, 0x00000000 ;Window style
; mov esi, 0x00000000 ;Header color (prevent odd color line on top of window in random cases)
mcall ;Define window
@@ -453,4 +456,4 @@ f70: ; run
screensaver db ?
transparent_cursor rd 32*32
MEOS_APP_END
MEOS_APP_END
@@ -1,373 +1,379 @@
;------------------------------------------------------------------------------
; @SS - screensaver
;------------------------------------------------------------------------------
; last update: 30/03/2012
; changed by: Marat Zakiyanov aka Mario79, aka Mario
; changes: The program uses only 4 Kb memory is now.
; Code refactoring. Using transparent cursor.
; Fix bug - using lots of buttons from f.8.
;---------------------------------------------------------------------
; SCREENSAVER APPLICATION by lisovin@26.ru
;
; Compile with FASM for Menuet
;
;------------------------------------------------------------------------------
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd IM_END ; size of image
dd I_END ; memory for app
dd stack_top ; esp
dd I_Param ; boot parameters
dd 0x0 ; path
;------------------------------------------------------------------------------
include '..\..\..\macros.inc'
;include 'debug.inc'
;------------------------------------------------------------------------------
align 4
START:
mcall 68,11
mcall 40, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE
; boot parameters
cmp [I_Param], dword '@ss'
setz [screensaver]
cmp [I_Param],dword 'ZERO'
jne @f
mov [type],dword 0
;--------------------------------------
align 4
@@:
cmp [I_Param],dword 'ASSM'
jne bgr_changed
mov [type],dword 24
;------------------------------------------------------------------------------
align 4
bgr_changed:
mcall 14
mov [y_max],ax
shr eax,16
mov [x_max],ax
shl eax,16
mov [top_right_corner],eax
call create_ss
;------------------------------------------------------------------------------
align 4
still:
cmp al,2 ; key in buffer?
jz key
cmp al,5 ; background redraw?
jz bgr_changed
; mouse event
mcall 37,2 ; проверим кнопки
and al,3
cmp al,3 ; нажаты обе кнопки мыши?
jnz still
mcall 37,0 ; проверим координаты
cmp [top_right_corner],eax
jnz still
;------------------------------------------------------------------------------
align 4
key:
mcall ; eax = 2
jmp still
;------------------------------------------------------------------------------
align 4
create_ss:
mcall 40,100010b
;set_new_cursor_skin - transparent cursor
mcall 68,12,32*32*4 ; get memory for own cursor area
push eax
mov ecx,eax
mcall 37,4,,2 ; load own cursor
mov ecx,eax
mcall 37,5 ; set own cursor
pop ecx
mcall 68,13 ; free own cursor area
cmp [type],dword 0
je drawsswin
cmp [type],dword 24
je asminit
mov dword [delay],1
mov [lx1],10 ; for "draw line"
mov [lx2],40
mov [ly1],50
mov [ly2],100
mov [addx1],1
mov [addx2],1
mov [addy1],1
mov [addy2],1
jmp drawsswin
;--------------------------------------
align 4
asminit: ; for "assembler" - assembler sources demo
; get size of file
mov [fileinfo],dword 5
mov [fileinfo.point],dword fileinfo_buffer
mcall 70,fileinfo
test eax,eax
jnz .no_file
; get memory for file
mov ecx,[fileinfo_buffer+32]
mov [fileinfo.size],ecx
mcall 68,12
mov [fileinfo.point],eax
; load file
mov [fileinfo],dword 0
mcall 70,fileinfo
test eax,eax
jz @f
mcall 68,13,[fileinfo.point]
;--------------------------------------
align 4
.no_file:
mov [type],dword 0
jmp drawsswin
;--------------------------------------
align 4
@@:
mov dword [delay],1 ;25 - old value
;--------------------------------------
align 4
asminit1:
mov eax,[fileinfo.point]
mov [stringstart],eax
mov dword [stringlen],1
;--------------------------------------
align 4
newpage:
mov [stringpos],16
;--------------------------------------
align 4
drawsswin:
xor eax,eax
movzx ebx,[x_max]
movzx ecx,[y_max]
inc ebx
inc ecx
mcall ,,,0x01000000
xor edx,edx
;mcall 13 ;Leency - use transparent background
;--------------------------------------
align 4
tstill:
mcall 23,[delay]
test eax,eax
jnz thr_end
cmp [type],dword 0
je tstill
cmp [type],dword 24
je drawssasm
call draw_line
jmp tstill
;--------------------------------------
align 4
thr_end:
cmp [screensaver], 0
jz @f
mcall 70, f70
@@:
cmp [type],dword 24
jne @f
mcall 68,13,[fileinfo.point]
@@:
and [params], not 1
or eax,-1
mcall
;------------------------------------------------------------------------------
align 4
drawssasm:
mov edi,[stringstart]
add edi,[stringlen]
dec edi
mov eax,edi
sub eax,[fileinfo.point]
cmp eax,[fileinfo.size]
ja asminit1
cmp word [edi],0x0a0d
je addstring
cmp byte [edi],0x0a
jne noaddstring
dec edi
;--------------------------------------
align 4
addstring:
add [stringpos],16
add edi,2
mov [stringstart],edi
mov dword [stringlen],1
mov ax,[stringpos]
cmp ax,[y_max]
jb tstill
jmp newpage
;--------------------------------------
align 4
noaddstring:
mov ebx,[stringlen]
shl ebx,19
mov bx,[stringpos]
mov edx,[stringstart]
add edx,[stringlen]
dec edx
mcall 4,,0x104ba010,,1
inc dword [stringlen]
cmp [edi],byte ' '
je drawssasm
jmp tstill
;------------------------------------------------------------------------------
align 4
draw_line:
movzx esi,[x_max]
movzx edi,[y_max]
mov eax,[addx1]
add [lx1],eax
mov eax,[addy1]
add [ly1],eax
mov eax,[addx2]
add [lx2],eax
mov eax,[addy2]
add [ly2],eax
cmp [lx1],1
jge dl1
mov [addx1],1
;--------------------------------------
align 4
dl1:
cmp [lx2],1
jge dl2
mov [addx2],1
;--------------------------------------
align 4
dl2:
cmp [lx1],esi
jbe dl3
mov [addx1],0xffffffff
;--------------------------------------
align 4
dl3:
cmp [lx2],esi
jbe dl4
mov [addx2],0xffffffff
;--------------------------------------
align 4
dl4:
cmp [ly1],1
jge dl5
mov [addy1],1
;--------------------------------------
align 4
dl5:
cmp [ly2],2
jge dl6
mov [addy2],1
;--------------------------------------
align 4
dl6:
cmp [ly1],edi
jbe dl7
mov [addy1],-1
;--------------------------------------
align 4
dl7:
cmp [ly2],edi
jbe dl8
mov [addy2],-1
;--------------------------------------
align 4
dl8:
mov eax,[lx2]
cmp [lx1],eax
jz dnol
mov bx,word [lx1]
shl ebx,16
mov bx,word [lx2]
mov cx,word [ly1]
shl ecx,16
mov cx,word [ly2]
mov edx,[lcolor]
and edx,0xffffff
mcall 38
;--------------------------------------
align 4
dnol:
add [lcolor],0x010201
ret
;------------------------------------------------------------------------------
align 4 ; DATA AREA
type dd 12
delay dd 100
lx1 dd 10
lx2 dd 40
ly1 dd 50
ly2 dd 100
addx1 dd 1
addx2 dd 1
addy1 dd 1
addy2 dd 1
stringlen dd 1
stringstart dd 0
stringpos dw 16
params db 0 ;if bit 0 set-ssaver works if bit 1 set-setup works
fileinfo:
dd 0
dd 0
dd 0
.size: dd 0
.point: dd 0
db '/sys/macros.inc',0
f70: ; run
dd 7, 0, 0, 0, 0
db '/sys/@SS',0
screensaver db ?
;-------------------------------
IM_END: ; UNINITIALIZED DATA
top_right_corner rd 1
align 4
lcolor dd ?
x_max dw ? ; размеры экрана
y_max dw ?
I_Param:
fileinfo_buffer:
rb 40
;-------------------------------
rb 512
stack_top:
I_END:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
;------------------------------------------------------------------------------
; @SS - screensaver
;------------------------------------------------------------------------------
; last update: 30/03/2012
; changed by: Marat Zakiyanov aka Mario79, aka Mario
; changes: The program uses only 4 Kb memory is now.
; Code refactoring. Using transparent cursor.
; Fix bug - using lots of buttons from f.8.
;---------------------------------------------------------------------
; SCREENSAVER APPLICATION by lisovin@26.ru
;
; Compile with FASM for Menuet
;
;------------------------------------------------------------------------------
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd IM_END ; size of image
dd I_END ; memory for app
dd stack_top ; esp
dd I_Param ; boot parameters
dd 0x0 ; path
;------------------------------------------------------------------------------
include '..\..\macros.inc'
;include 'debug.inc'
;------------------------------------------------------------------------------
align 4
START:
mcall 68,11
mcall 40, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE
; boot parameters
cmp [I_Param], dword '@ss'
setz [screensaver]
cmp [I_Param],dword 'ZERO'
jne @f
mov [type],dword 0
;--------------------------------------
align 4
@@:
cmp [I_Param],dword 'ASSM'
jne bgr_changed
mov [type],dword 24
;------------------------------------------------------------------------------
align 4
bgr_changed:
mcall 14
mov [y_max],ax
shr eax,16
mov [x_max],ax
shl eax,16
mov [top_right_corner],eax
call create_ss
;------------------------------------------------------------------------------
align 4
still:
cmp al,2 ; key in buffer?
jz key
cmp al,5 ; background redraw?
jz bgr_changed
; mouse event
mcall 37,2 ; проверим кнопки
and al,3
cmp al,3 ; нажаты обе кнопки мыши?
jnz still
mcall 37,0 ; проверим координаты
cmp [top_right_corner],eax
jnz still
;------------------------------------------------------------------------------
align 4
key:
mcall ; eax = 2
jmp still
;------------------------------------------------------------------------------
align 4
create_ss:
mcall 40,100010b
;set_new_cursor_skin - transparent cursor
mcall 68,12,32*32*4 ; get memory for own cursor area
push eax
mov ecx,eax
mcall 37,4,,2 ; load own cursor
mov ecx,eax
mcall 37,5 ; set own cursor
pop ecx
mcall 68,13 ; free own cursor area
cmp [type],dword 0
je drawsswin
cmp [type],dword 24
je asminit
mov dword [delay],1
mov [lx1],10 ; for "draw line"
mov [lx2],40
mov [ly1],50
mov [ly2],100
mov [addx1],1
mov [addx2],1
mov [addy1],1
mov [addy2],1
jmp drawsswin
;--------------------------------------
align 4
asminit: ; for "assembler" - assembler sources demo
; get size of file
mov [fileinfo],dword 5
mov [fileinfo.point],dword fileinfo_buffer
mcall 70,fileinfo
test eax,eax
jnz .no_file
; get memory for file
mov ecx,[fileinfo_buffer+32]
mov [fileinfo.size],ecx
mcall 68,12
mov [fileinfo.point],eax
; load file
mov [fileinfo],dword 0
mcall 70,fileinfo
test eax,eax
jz @f
mcall 68,13,[fileinfo.point]
;--------------------------------------
align 4
.no_file:
mov [type],dword 0
jmp drawsswin
;--------------------------------------
align 4
@@:
mov dword [delay],1 ;25 - old value
;--------------------------------------
align 4
asminit1:
mov eax,[fileinfo.point]
mov [stringstart],eax
mov dword [stringlen],1
;--------------------------------------
align 4
newpage:
mov [stringpos],16
;--------------------------------------
align 4
drawsswin:
xor eax,eax
movzx ebx,[x_max]
movzx ecx,[y_max]
inc ebx
inc ecx
mcall ,,,0x01000000
xor edx,edx
;mcall 13 ;Leency - use transparent background
;--------------------------------------
align 4
tstill:
mcall 23,[delay]
test eax,eax
jnz thr_end
cmp [type],dword 0
je tstill
cmp [type],dword 24
je drawssasm
call draw_line
jmp tstill
;--------------------------------------
align 4
thr_end:
cmp [screensaver], 0
jz @f
mcall 70, f70
@@:
cmp [type],dword 24
jne @f
mcall 68,13,[fileinfo.point]
@@:
and [params], not 1
or eax,-1
mcall
;------------------------------------------------------------------------------
align 4
drawssasm:
mov edi,[stringstart]
add edi,[stringlen]
dec edi
mov eax,edi
sub eax,[fileinfo.point]
cmp eax,[fileinfo.size]
ja asminit1
cmp word [edi],0x0a0d
je addstring
cmp byte [edi],0x0a
jne noaddstring
dec edi
;--------------------------------------
align 4
addstring:
add [stringpos],16
add edi,2
mov [stringstart],edi
mov dword [stringlen],1
mov ax,[stringpos]
cmp ax,[y_max]
jb tstill
jmp newpage
;--------------------------------------
align 4
noaddstring:
mov ebx,[stringlen]
shl ebx,19
mov bx,[stringpos]
mov edx,[stringstart]
add edx,[stringlen]
dec edx
mcall 4,,0x104ba010,,1
inc dword [stringlen]
cmp [edi],byte ' '
je drawssasm
jmp tstill
;------------------------------------------------------------------------------
align 4
draw_line:
movzx esi,[x_max]
movzx edi,[y_max]
mov eax,[addx1]
add [lx1],eax
mov eax,[addy1]
add [ly1],eax
mov eax,[addx2]
add [lx2],eax
mov eax,[addy2]
add [ly2],eax
cmp [lx1],1
jge dl1
mov [addx1],1
;--------------------------------------
align 4
dl1:
cmp [lx2],1
jge dl2
mov [addx2],1
;--------------------------------------
align 4
dl2:
cmp [lx1],esi
jbe dl3
mov [addx1],0xffffffff
;--------------------------------------
align 4
dl3:
cmp [lx2],esi
jbe dl4
mov [addx2],0xffffffff
;--------------------------------------
align 4
dl4:
cmp [ly1],1
jge dl5
mov [addy1],1
;--------------------------------------
align 4
dl5:
cmp [ly2],2
jge dl6
mov [addy2],1
;--------------------------------------
align 4
dl6:
cmp [ly1],edi
jbe dl7
mov [addy1],-1
;--------------------------------------
align 4
dl7:
cmp [ly2],edi
jbe dl8
mov [addy2],-1
;--------------------------------------
align 4
dl8:
mov eax,[lx2]
cmp [lx1],eax
jz dnol
mov bx,word [lx1]
shl ebx,16
mov bx,word [lx2]
mov cx,word [ly1]
shl ecx,16
mov cx,word [ly2]
mov edx,[lcolor]
and edx,0xffffff
mcall 38
;--------------------------------------
align 4
dnol:
add [lcolor],0x010201
ret
;------------------------------------------------------------------------------
align 4 ; DATA AREA
type dd 12
delay dd 100
lx1 dd 10
lx2 dd 40
ly1 dd 50
ly2 dd 100
addx1 dd 1
addx2 dd 1
addy1 dd 1
addy2 dd 1
stringlen dd 1
stringstart dd 0
stringpos dw 16
params db 0 ;if bit 0 set-ssaver works if bit 1 set-setup works
fileinfo:
dd 0
dd 0
dd 0
.size: dd 0
.point: dd 0
db '/sys/macros.inc',0
f70: ; run
dd 7, 0, 0, 0, 0
db '/sys/@SS',0
screensaver db ?
;-------------------------------
IM_END: ; UNINITIALIZED DATA
top_right_corner rd 1
align 4
lcolor dd ?
x_max dw ? ; размеры экрана
y_max dw ?
I_Param:
fileinfo_buffer:
rb 40
;-------------------------------
rb 512
stack_top:
I_END:
@@ -1,125 +1,131 @@
;Оптимизированный компонент CheckBox (Исходный вариант от Maxxxx32)
;Оптимизирован вывод строки, надписи для CheckBox'a + теперь при проверке не ;происходит подсчет кол-ва символов в строке
;Оптимизация команд.
;21.02.2007 модернизация и поддержка двух разных вариантов с использованием сис цветов и старой схемой
;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения checkbox
;22.08.2006 произведена оптимизация команд, приняты во внимание замечания DIAMOND'а.
;<Lrz> - Теплов Алексей www.lrz.land.ru
;заголовок приложения
use32 ; транслятор, использующий 32 разрядных команды
org 0x0 ; базовый адрес кода, всегда 0x0
db 'MENUET01' ; идентификатор исполняемого файла (8 байт)
dd 0x1 ; версия формата заголовка исполняемого файла
dd start ; адрес, на который система передаёт управление
; после загрузки приложения в память
dd i_end ; размер приложения
dd i_end ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
dd i_end ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
dd 0x0,0x0 ; указатель на строку с параметрами.
; если после запуска неравно нулю, приложение было
; запущено с параметрами из командной строки
; указатель на строку, в которую записан путь,
; откуда запущено приложение
;------------------
include '..\..\..\..\macros.inc'
include 'check.inc' ;включить файл check.inc
; version_ch ;необходимый макрос для включения "старой" версии check_box
version_ch1 ;необходимый макрос для включения new версии check_box1
;Недопустимо включение двух макросво version_ch1 и version_ch - они взамоисключают друг- дргуга.
use_check_box ;используя макросы внести процедуры для рисования чек бокса
;Область кода
align 4
start: ;Точка входа в программу
mov eax,48 ;получить системные цвета
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
mcall
mov eax,40 ;установить маску для ожидаемых событий
mov ebx,0x25 ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
mcall
red_win:
call draw_window ;первоначально необходимо нарисовать окно
still: ;основной обработчик
mov eax,10 ;Ожидать события
mcall ;ожидать событие в течение 2 миллисекунд
cmp al,0x1 ;если изменилось положение окна
jz red_win
cmp al,0x3 ;если нажата кнопка то перейти
jz button
mouse_check_boxes check_boxes,check_boxes_end ;проверка чек бокса
jmp still ;если ничего из перечисленного то снова в цикл
button:
or eax,-1 ;в eax,-1 - 5 ,байтов у нас же только 3 выйти
mcall ;далее выполняется выход из программы
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
draw_window: ;рисование окна приложения
mov eax,12 ;в регистр внести значение = 12
mov ebx,1 ;присвоить 1
mcall
xor eax,eax ;обнулить eax
mov ebx,50*65536+180 ;[координата по оси x]*65536 + [размер по оси x]
mov ecx,30*65536+100 ;[координата по оси y]*65536 + [размер по оси y]
mov edx,[sc.work] ; color of work area RRGGBB,8->color gl
or edx,0xb3000000
mov edi,hed
mcall ;нарисовать окно приложения
draw_check_boxes check_boxes,check_boxes_end ;рисование чекбоксов
mov eax,12 ;Функция 12 - начать/закончить перерисовку окна.
mov ebx,2 ;Подфункция 2 - закончить перерисовку окна.
mcall
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные
;Формат данных чек бокса:
;10 - координата чек бокса по х
;30 - координата чек бокса по у
;0 - цвет заливки внутри чек бокса
;0xfffffff - цвет рамки чек бокса если нужно так используются ситемные цвета
;0 - цвет текста надписи если нужно так используются ситемные цвета
;ch_text.1 - указатель на начало строки
;ch_text.e1-ch_text.1 - длина строки
;
align 4
check_boxes:
;ch1 check_box 10,15,0xffffff,0,0,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
;ch2 check_box 10,30,0xffffff,0,0,ch_text.2,ch_text.e2-ch_text.2
;ch3 check_box 10,45,0xffffff,0,0,ch_text.3,ch_text.e3-ch_text.3
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные для check_box1 - использует системные цвета
;Формат данных чек бокса:
;10 - координата чек бокса по х
;30 - координата чек бокса по у
;ch_text.1 - указатель на начало строки
;ch_text.e1-ch_text.1 - длина строки
;
ch1 check_box1 10,15,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
ch2 check_box1 10,30,ch_text.2,ch_text.e2-ch_text.2
ch3 check_box1 10,45,ch_text.3,ch_text.e3-ch_text.3
check_boxes_end:
ch_text: ;сопровождающий текст для чек боксов
.1 db 'Check_Box #1'
.e1:
.2 db 'Check_Box #2'
.e2:
.3 db 'Check_Box #3'
.e3:
hed db 'Checkbox [21.02.2007]',0 ;заголовок приложения
align 16
sc system_colors
rb 0x100
i_end: ;конец кода
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
;Оптимизированный компонент CheckBox (Исходный вариант от Maxxxx32)
;Оптимизирован вывод строки, надписи для CheckBox'a + теперь при проверке не ;происходит подсчет кол-ва символов в строке
;Оптимизация команд.
;21.02.2007 модернизация и поддержка двух разных вариантов с использованием сис цветов и старой схемой
;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения checkbox
;22.08.2006 произведена оптимизация команд, приняты во внимание замечания DIAMOND'а.
;<Lrz> - Теплов Алексей www.lrz.land.ru
;заголовок приложения
use32 ; транслятор, использующий 32 разрядных команды
org 0x0 ; базовый адрес кода, всегда 0x0
db 'MENUET01' ; идентификатор исполняемого файла (8 байт)
dd 0x1 ; версия формата заголовка исполняемого файла
dd start ; адрес, на который система передаёт управление
; после загрузки приложения в память
dd i_end ; размер приложения
dd i_end ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
dd i_end ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
dd 0x0,0x0 ; указатель на строку с параметрами.
; если после запуска неравно нулю, приложение было
; запущено с параметрами из командной строки
; указатель на строку, в которую записан путь,
; откуда запущено приложение
;------------------
include '..\..\..\macros.inc'
include 'check.inc' ;включить файл check.inc
; version_ch ;необходимый макрос для включения "старой" версии check_box
version_ch1 ;необходимый макрос для включения new версии check_box1
;Недопустимо включение двух макросво version_ch1 и version_ch - они взамоисключают друг- дргуга.
use_check_box ;используя макросы внести процедуры для рисования чек бокса
;Область кода
align 4
start: ;Точка входа в программу
mov eax,48 ;получить системные цвета
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
mcall
mov eax,40 ;установить маску для ожидаемых событий
mov ebx,0x25 ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
mcall
red_win:
call draw_window ;первоначально необходимо нарисовать окно
still: ;основной обработчик
mov eax,10 ;Ожидать события
mcall ;ожидать событие в течение 2 миллисекунд
cmp al,0x1 ;если изменилось положение окна
jz red_win
cmp al,0x3 ;если нажата кнопка то перейти
jz button
mouse_check_boxes check_boxes,check_boxes_end ;проверка чек бокса
jmp still ;если ничего из перечисленного то снова в цикл
button:
or eax,-1 ;в eax,-1 - 5 ,байтов у нас же только 3 выйти
mcall ;далее выполняется выход из программы
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
draw_window: ;рисование окна приложения
mov eax,12 ;в регистр внести значение = 12
mov ebx,1 ;присвоить 1
mcall
xor eax,eax ;обнулить eax
mov ebx,50*65536+180 ;[координата по оси x]*65536 + [размер по оси x]
mov ecx,30*65536+100 ;[координата по оси y]*65536 + [размер по оси y]
mov edx,[sc.work] ; color of work area RRGGBB,8->color gl
or edx,0xb3000000
mov edi,hed
mcall ;нарисовать окно приложения
draw_check_boxes check_boxes,check_boxes_end ;рисование чекбоксов
mov eax,12 ;Функция 12 - начать/закончить перерисовку окна.
mov ebx,2 ;Подфункция 2 - закончить перерисовку окна.
mcall
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные
;Формат данных чек бокса:
;10 - координата чек бокса по х
;30 - координата чек бокса по у
;0 - цвет заливки внутри чек бокса
;0xfffffff - цвет рамки чек бокса если нужно так используются ситемные цвета
;0 - цвет текста надписи если нужно так используются ситемные цвета
;ch_text.1 - указатель на начало строки
;ch_text.e1-ch_text.1 - длина строки
;
align 4
check_boxes:
;ch1 check_box 10,15,0xffffff,0,0,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
;ch2 check_box 10,30,0xffffff,0,0,ch_text.2,ch_text.e2-ch_text.2
;ch3 check_box 10,45,0xffffff,0,0,ch_text.3,ch_text.e3-ch_text.3
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные для check_box1 - использует системные цвета
;Формат данных чек бокса:
;10 - координата чек бокса по х
;30 - координата чек бокса по у
;ch_text.1 - указатель на начало строки
;ch_text.e1-ch_text.1 - длина строки
;
ch1 check_box1 10,15,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
ch2 check_box1 10,30,ch_text.2,ch_text.e2-ch_text.2
ch3 check_box1 10,45,ch_text.3,ch_text.e3-ch_text.3
check_boxes_end:
ch_text: ;сопровождающий текст для чек боксов
.1 db 'Check_Box #1'
.e1:
.2 db 'Check_Box #2'
.e2:
.3 db 'Check_Box #3'
.e3:
hed db 'Checkbox [21.02.2007]',0 ;заголовок приложения
align 16
sc system_colors
rb 0x100
i_end: ;конец кода
@@ -1,3 +1,7 @@
; SPDX-License-Identifier: NOASSERTION
;
;
; SHAPED WINDOW - BASIC EXAMPLE
;
@@ -16,7 +20,7 @@ use32
dd E_END ; esp
dd 0, 0 ; no params, no path
include '..\..\..\..\macros.inc'
include '..\..\..\macros.inc'
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,126 +1,128 @@
;
; CPU SPEED INDICATIOR
;
; Compile with FASM
;
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x1000 ; memory for app
dd 0x1000 ; esp
dd 0x0,0x0 ; I_Param , I_Icon
include 'lang.inc'
include '..\..\..\..\macros.inc'
START: ; start of execution
mov eax,18
mov ebx,5
mcall
xor edx,edx
mov ebx,1000000
div ebx
mov ebx,10
mov edi,text+19
mov ecx,5
newnum:
xor edx,edx
mov ebx,10
div ebx
add dl,48
mov [edi],dl
sub edi,1
loop newnum
mov eax,48
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
mcall
red:
call draw_window ; at first, draw the window
still:
mov eax,10 ; wait here for event
mcall
cmp eax,1 ; redraw request ?
jz red
cmp eax,2 ; key in buffer ?
jz key
cmp eax,3 ; button in buffer ?
jz button
jmp still
key: ; key
mov eax,2 ; just read it and ignore
mcall
jmp still
button: ; button
mov eax,17 ; get id
mcall
cmp ah,1 ; button id=1 ?
jnz still
or eax,-1 ; close this program
mcall
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
mcall
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov ebx,100*65536+200 ; [x start] *65536 + [x size]
mov ecx,100*65536+65 ; [y start] *65536 + [y size]
mov edx,[sc.work] ; color of work area RRGGBB,8->color glide
or edx,0x33000000 ; color of grab bar RRGGBB,8->color
mov edi,title ; WINDOW LABEL
mcall
mov ebx,20*65536+14 ; draw info text with function 4
mov ecx,[sc.work_text]
mov edx,text
mov esi,24
mov eax,4
mcall
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mcall
ret
; DATA AREA
text:
db 'CPU RUNNING AT MHZ'
title db 'CPU SPEED',0
I_END:
sc system_colors
; SPDX-License-Identifier: NOASSERTION
;
;
; CPU SPEED INDICATIOR
;
; Compile with FASM
;
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x1000 ; memory for app
dd 0x1000 ; esp
dd 0x0,0x0 ; I_Param , I_Icon
include 'lang.inc'
include '..\..\..\macros.inc'
START: ; start of execution
mov eax,18
mov ebx,5
mcall
xor edx,edx
mov ebx,1000000
div ebx
mov ebx,10
mov edi,text+19
mov ecx,5
newnum:
xor edx,edx
mov ebx,10
div ebx
add dl,48
mov [edi],dl
sub edi,1
loop newnum
mov eax,48
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
mcall
red:
call draw_window ; at first, draw the window
still:
mov eax,10 ; wait here for event
mcall
cmp eax,1 ; redraw request ?
jz red
cmp eax,2 ; key in buffer ?
jz key
cmp eax,3 ; button in buffer ?
jz button
jmp still
key: ; key
mov eax,2 ; just read it and ignore
mcall
jmp still
button: ; button
mov eax,17 ; get id
mcall
cmp ah,1 ; button id=1 ?
jnz still
or eax,-1 ; close this program
mcall
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
mcall
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov ebx,100*65536+200 ; [x start] *65536 + [x size]
mov ecx,100*65536+65 ; [y start] *65536 + [y size]
mov edx,[sc.work] ; color of work area RRGGBB,8->color glide
or edx,0x33000000 ; color of grab bar RRGGBB,8->color
mov edi,title ; WINDOW LABEL
mcall
mov ebx,20*65536+14 ; draw info text with function 4
mov ecx,[sc.work_text]
mov edx,text
mov esi,24
mov eax,4
mcall
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mcall
ret
; DATA AREA
text:
db 'CPU RUNNING AT MHZ'
title db 'CPU SPEED',0
I_END:
sc system_colors
@@ -1,68 +1,74 @@
;Распространяется по лицензии GPL SEE YOU File FAQ.txt and HISTORY. Good Like!
;Оптимизированный компонент EditBox (Исходный вариант от Maxxxx32)
;Оптимизация команд.
;<Lrz> - Теплов Алексей www.lrz.land.ru
;заголовок приложения
include '..\..\..\..\macros.inc'
include 'editbox.inc'
KOS_APP_START
align 4
use_edit_box
;Область кода
code ;Точка входа в программу
mcall 40,0x27 ;установить маску для ожидаемых событий
;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении) и нажатие клавиши
red_win:
call draw_window ;первоначально необходимо нарисовать окно
align 4
still: ;основной обработчик
mcall 10 ;Ожидать события
dec eax
jz red_win
dec eax
jz key
dec eax
jz button
mouse_edit_boxes editboxes,editboxes_end
jmp still ;если ничего из перечисленного то снова в цикл
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
button:
mcall 17 ;получить идентификатор нажатой клавиши
test ah,ah ;если в ah 0, то перейти на обработчик событий still
jz still
mcall -1
key:
mcall 2 ;загрузим значение 2 в регистор eax и получим код нажатой клавиши
key_edit_boxes editboxes,editboxes_end
jmp still
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
align 4
draw_window: ;рисование окна приложения
mcall 12,1
mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed
draw_edit_boxes editboxes,editboxes_end ;рисование edit box'ов
mcall 12,2
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные
editboxes:
edit1 edit_box 168,5,10,0xffffff,0x6a9480,0,0,0,99,ed_buffer.2,ed_figure_only
edit2 edit_box 250,5,30,0xffffff,0x6a9480,0,0xAABBCC,0,308,hed,ed_focus,53,53
edit3 edit_box 35,5,50,0xffffff,0x6a9480,0,0,0,9,ed_buffer.3,ed_figure_only
edit4 edit_box 16,5,70,0xffffff,0x6a9480,0,0,0,1,ed_buffer.4,ed_figure_only
editboxes_end:
data_of_code dd 0
mouse_flag dd 0x0
hed db 'EDITBOX optimization and retype <Lrz> date 23.07.2008',0
rb 256
ed_buffer:
;.1: rb 514;256
.2: rb 101
.3: rb 11
.4: rb 3
;два запасных байта необходимы для того что бы не пепереписать следующией байты, в конце буфера 0
buffer_end:
align 16
KOS_APP_END
udata
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
;Распространяется по лицензии GPL SEE YOU File FAQ.txt and HISTORY. Good Like!
;Оптимизированный компонент EditBox (Исходный вариант от Maxxxx32)
;Оптимизация команд.
;<Lrz> - Теплов Алексей www.lrz.land.ru
;заголовок приложения
include '..\..\..\macros.inc'
include 'editbox.inc'
KOS_APP_START
align 4
use_edit_box
;Область кода
code ;Точка входа в программу
mcall 40,0x27 ;установить маску для ожидаемых событий
;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении) и нажатие клавиши
red_win:
call draw_window ;первоначально необходимо нарисовать окно
align 4
still: ;основной обработчик
mcall 10 ;Ожидать события
dec eax
jz red_win
dec eax
jz key
dec eax
jz button
mouse_edit_boxes editboxes,editboxes_end
jmp still ;если ничего из перечисленного то снова в цикл
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
button:
mcall 17 ;получить идентификатор нажатой клавиши
test ah,ah ;если в ah 0, то перейти на обработчик событий still
jz still
mcall -1
key:
mcall 2 ;загрузим значение 2 в регистор eax и получим код нажатой клавиши
key_edit_boxes editboxes,editboxes_end
jmp still
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
align 4
draw_window: ;рисование окна приложения
mcall 12,1
mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed
draw_edit_boxes editboxes,editboxes_end ;рисование edit box'ов
mcall 12,2
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные
editboxes:
edit1 edit_box 168,5,10,0xffffff,0x6a9480,0,0,0,99,ed_buffer.2,ed_figure_only
edit2 edit_box 250,5,30,0xffffff,0x6a9480,0,0xAABBCC,0,308,hed,ed_focus,53,53
edit3 edit_box 35,5,50,0xffffff,0x6a9480,0,0,0,9,ed_buffer.3,ed_figure_only
edit4 edit_box 16,5,70,0xffffff,0x6a9480,0,0,0,1,ed_buffer.4,ed_figure_only
editboxes_end:
data_of_code dd 0
mouse_flag dd 0x0
hed db 'EDITBOX optimization and retype <Lrz> date 23.07.2008',0
rb 256
ed_buffer:
;.1: rb 514;256
.2: rb 101
.3: rb 11
.4: rb 3
;два запасных байта необходимы для того что бы не пепереписать следующией байты, в конце буфера 0
buffer_end:
align 16
KOS_APP_END
udata
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,3 +1,7 @@
; SPDX-License-Identifier: NOASSERTION
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; MENU / DIALOG EXAMPLE
@@ -18,7 +22,7 @@ use32
dd 0x0 , 0x0 ; I_Param , I_Icon
include 'lang.inc'
include '..\..\..\..\macros.inc'
include '..\..\..\macros.inc'
include 'dialogs1.inc'
menu_history dd 0x0
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,3 +1,8 @@
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
;
; MENU EXAMPLE
;
@@ -13,11 +18,11 @@
dd mem, stacktop, file_name, sys_path
include 'lang.inc'
include '../../../../macros.inc'
include '../../../../proc32.inc'
include '../../../../KOSfuncs.inc'
include '../../../../load_lib.mac'
include '../../../../dll.inc'
include '../../../macros.inc'
include '../../../proc32.inc'
include '../../../KOSfuncs.inc'
include '../../../load_lib.mac'
include '../../../dll.inc'
KMENUITEM_NORMAL equ 0
KMENUITEM_SUBMENU equ 1
@@ -94,7 +99,7 @@ start: ; start of execution
stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_Help, [main_menu_Help]
stdcall [ksubmenu_add], [main_menu], eax
red:
red:
call draw_window ; draw window
stdcall [kmainmenu_draw], [main_menu]
@@ -108,7 +113,7 @@ still:
cmp eax,3
jz button
cmp eax,6
jne @f
jne @f
call mouse
jmp still
@@:
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,4 +1,7 @@
include "..\..\..\..\macros.inc"
; SPDX-License-Identifier: NOASSERTION
;
include "..\..\..\macros.inc"
initipc:
mov eax,9
@@ -218,4 +221,3 @@ stripc: times 84 db 0
fill_symbol db 0
prc: times 52 db 0
@@ -1,3 +1,9 @@
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
; Hello, World! - Programm example for CMD shell
; Compile with FASM
;
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,412 +1,415 @@
;
; Example for Inter Process Communication
;
; Compile with FASM
;
include 'lang.inc'
include '..\..\..\..\macros.inc'
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x60000 ; memory for app
dd 0x60000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
START: ; start of execution
mov eax,60 ; IPC
mov ebx,1 ; define receive area
mov ecx,received_messages ; pointer to start
mov edx,1000 ; size of area
mcall
mov eax,40 ; WANTED EVENTS
mov ebx,01000111b ; IPC 7 + defaults
mcall
mov [received_messages+8],dword 0*256+0
mov [received_messages+12],dword 0
red:
call draw_window ; at first, draw the window
still:
mov eax,23 ; wait here for event
mov ebx,50
mcall
cmp eax,1 ; redraw request ?
je red
cmp eax,2 ; key in buffer ?
je key
cmp eax,3 ; button in buffer ?
je button
cmp eax,7 ; IPC ?
jne no_ipc
call display_ipc_messages
jmp still
no_ipc:
jmp still
key: ; key
mov eax,2 ; just read it and ignore
mcall
jmp still
button: ; button
mov eax,17 ; get id
mcall
cmp ah,1 ; button id=1 ?
jne noclose
mov eax,-1 ; close this program
mcall
noclose:
cmp ah,2
jne no_read
call read_string
movzx eax,byte [message]
sub eax,48
imul eax,10
movzx ebx,byte [message+1]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [message+2]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [message+3]
add eax,ebx
sub eax,48
mov [PID],eax
mov eax,60 ; IPC
mov ebx,2 ; send message
mov ecx,[PID]
mov edx,message+4
mov esi,20;[message_size]
mcall
jmp still
no_read:
cmp ah,3
jne no_messages_pop ; pop the first out
call ipc_message_pop
jmp still
no_messages_pop:
jmp still
ipc_message_pop:
pusha
cmp [received_messages+4],dword 8
je already_empty
mov [received_messages],byte 1 ; lock the area
push dword [received_messages+4]
mov ecx,[received_messages+12]
sub [received_messages+4],ecx
sub [received_messages+4],dword 8
mov edi,received_messages+8
mov esi,edi
add esi,ecx
add esi,8
pop ecx
cld
rep movsb
call display_ipc_messages
mov [received_messages],byte 0 ; free the area
already_empty:
popa
ret
display_ipc_messages:
pusha
mov eax,13
mov ebx,25*65536+245
mov ecx,105*65536+90
mov edx,0xdddddd
mcall
cmp [received_messages+4],dword 8 ; empty list
je ipma1
mov ebx,25*65536+105 ; draw info text with function 4
mov ecx,0x224466
mov edx,received_messages+8
mov esi,40
mov [counter],0
newline2:
pusha
mov ecx,[edx]
and ecx,0xfff
mov edx,ebx
mov eax,47
mov ebx,4*65536
mov esi,0xff0000
mcall
popa
pusha
mov esi,20
add edx,8
add ebx,30*65536
mov eax,4
mcall
popa
add ebx,10
mov edi,[edx+4]
add edi,8
and edi,0xfff
add edx,edi
mov edi,[received_messages+4]
add edi,received_messages
cmp edx,edi
jge ipma1
inc [counter]
cmp [counter],8
jbe newline2
ipma1:
popa
ret
counter dd 0x0
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
mcall
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov ebx,100*65536+290 ; [x start] *65536 + [x size]
mov ecx,100*65536+220 ; [y start] *65536 + [y size]
mov edx,0x14ffffff ; color of work area RRGGBB,8->color gl
mov edi,title ; WINDOW LABEL
mcall
mov eax,9
mov ebx,process_info
mov ecx,-1
mcall
mov eax,47
mov ebx,4*65536
mov ecx,[process_info+30]
mov edx,180*65536+35
mov esi,0x000000
mcall
mov eax,8 ; MESSAGE
mov ebx,25*65536+87
mov ecx,50*65536+16
mov edx,2
mov esi,0x5588dd
mcall
;mov eax,8 ; POP
mov ebx,216*65536+53
mov ecx,80*65536+16
mov edx,3
mcall
mov eax,4
mov ebx,25*65536+35 ; draw info text with function 4
mov ecx,0x224466
mov edx,text
mov esi,40
newline:
mcall
add ebx,10
add edx,40
cmp [edx],byte 'x'
jne newline
call display_ipc_messages
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mcall
ret
read_string:
pusha
mov [addr],dword message
mov [ya],55
mov [xa],120
mov ecx,20
mov edi,[addr]
mov al,' '
cld
rep stosb
call print_text
mov edi,[addr]
f11:
mov eax,10
mcall
cmp eax,2
jz fbu
exit_readkey:
popa
ret
fbu:
mov eax,2
mcall ; get key
shr eax,8
cmp eax,13
je exit_readkey
cmp eax,8
jnz nobs
cmp edi,[addr]
jz f11
dec edi
mov [edi],byte ' '
call print_text
jmp f11
nobs:
cmp eax,31
jbe f11
cmp eax,95
jb keyok
sub eax,32
keyok:
mov [edi],al
call print_text
inc edi
mov esi,[addr]
add esi,20
cmp esi,edi
jnz f11
popa
ret
print_text:
mov eax,13
mov ebx,[xa]
shl ebx,16
add ebx,25*6
mov ecx,[ya]
shl ecx,16
mov cx,8
mov edx,0xffffff
mcall
mov eax,4
mov ebx,[xa]
shl ebx,16
add ebx,[ya]
mov ecx,0x000000
mov edx,[addr]
mov esi,25
mcall
ret
; DATA AREA
ya dd 0x0
xa dd 0x0
addr dd 0x0
text:
db 'PROCESS ID FOR THIS APP : '
db ' '
db ' PID:MESSAGE 0130 EXAMPLE MESSAGE '
db ' '
db ' '
db 'RECEIVED: POP '
db 'x' ; <- END MARKER, DO NOT DELETE
title db 'IPC - START AT LEAST 2',0
I_END:
PID: dd 0x0
message_size: dd 20
received_messages:
db 0 ; lock byte
db 0,0,0 ; reserved
dd 8 ; pointer to free msg position from received_messages
; Sender PID
; Msg length
; Msg data
rb 0x1000
message: times 70 db ?
process_info: times 256 dd ?
; SPDX-License-Identifier: NOASSERTION
;
;
; Example for Inter Process Communication
;
; Compile with FASM
;
include 'lang.inc'
include '..\..\..\macros.inc'
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x60000 ; memory for app
dd 0x60000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
START: ; start of execution
mov eax,60 ; IPC
mov ebx,1 ; define receive area
mov ecx,received_messages ; pointer to start
mov edx,1000 ; size of area
mcall
mov eax,40 ; WANTED EVENTS
mov ebx,01000111b ; IPC 7 + defaults
mcall
mov [received_messages+8],dword 0*256+0
mov [received_messages+12],dword 0
red:
call draw_window ; at first, draw the window
still:
mov eax,23 ; wait here for event
mov ebx,50
mcall
cmp eax,1 ; redraw request ?
je red
cmp eax,2 ; key in buffer ?
je key
cmp eax,3 ; button in buffer ?
je button
cmp eax,7 ; IPC ?
jne no_ipc
call display_ipc_messages
jmp still
no_ipc:
jmp still
key: ; key
mov eax,2 ; just read it and ignore
mcall
jmp still
button: ; button
mov eax,17 ; get id
mcall
cmp ah,1 ; button id=1 ?
jne noclose
mov eax,-1 ; close this program
mcall
noclose:
cmp ah,2
jne no_read
call read_string
movzx eax,byte [message]
sub eax,48
imul eax,10
movzx ebx,byte [message+1]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [message+2]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [message+3]
add eax,ebx
sub eax,48
mov [PID],eax
mov eax,60 ; IPC
mov ebx,2 ; send message
mov ecx,[PID]
mov edx,message+4
mov esi,20;[message_size]
mcall
jmp still
no_read:
cmp ah,3
jne no_messages_pop ; pop the first out
call ipc_message_pop
jmp still
no_messages_pop:
jmp still
ipc_message_pop:
pusha
cmp [received_messages+4],dword 8
je already_empty
mov [received_messages],byte 1 ; lock the area
push dword [received_messages+4]
mov ecx,[received_messages+12]
sub [received_messages+4],ecx
sub [received_messages+4],dword 8
mov edi,received_messages+8
mov esi,edi
add esi,ecx
add esi,8
pop ecx
cld
rep movsb
call display_ipc_messages
mov [received_messages],byte 0 ; free the area
already_empty:
popa
ret
display_ipc_messages:
pusha
mov eax,13
mov ebx,25*65536+245
mov ecx,105*65536+90
mov edx,0xdddddd
mcall
cmp [received_messages+4],dword 8 ; empty list
je ipma1
mov ebx,25*65536+105 ; draw info text with function 4
mov ecx,0x224466
mov edx,received_messages+8
mov esi,40
mov [counter],0
newline2:
pusha
mov ecx,[edx]
and ecx,0xfff
mov edx,ebx
mov eax,47
mov ebx,4*65536
mov esi,0xff0000
mcall
popa
pusha
mov esi,20
add edx,8
add ebx,30*65536
mov eax,4
mcall
popa
add ebx,10
mov edi,[edx+4]
add edi,8
and edi,0xfff
add edx,edi
mov edi,[received_messages+4]
add edi,received_messages
cmp edx,edi
jge ipma1
inc [counter]
cmp [counter],8
jbe newline2
ipma1:
popa
ret
counter dd 0x0
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
mcall
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov ebx,100*65536+290 ; [x start] *65536 + [x size]
mov ecx,100*65536+220 ; [y start] *65536 + [y size]
mov edx,0x14ffffff ; color of work area RRGGBB,8->color gl
mov edi,title ; WINDOW LABEL
mcall
mov eax,9
mov ebx,process_info
mov ecx,-1
mcall
mov eax,47
mov ebx,4*65536
mov ecx,[process_info+30]
mov edx,180*65536+35
mov esi,0x000000
mcall
mov eax,8 ; MESSAGE
mov ebx,25*65536+87
mov ecx,50*65536+16
mov edx,2
mov esi,0x5588dd
mcall
;mov eax,8 ; POP
mov ebx,216*65536+53
mov ecx,80*65536+16
mov edx,3
mcall
mov eax,4
mov ebx,25*65536+35 ; draw info text with function 4
mov ecx,0x224466
mov edx,text
mov esi,40
newline:
mcall
add ebx,10
add edx,40
cmp [edx],byte 'x'
jne newline
call display_ipc_messages
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mcall
ret
read_string:
pusha
mov [addr],dword message
mov [ya],55
mov [xa],120
mov ecx,20
mov edi,[addr]
mov al,' '
cld
rep stosb
call print_text
mov edi,[addr]
f11:
mov eax,10
mcall
cmp eax,2
jz fbu
exit_readkey:
popa
ret
fbu:
mov eax,2
mcall ; get key
shr eax,8
cmp eax,13
je exit_readkey
cmp eax,8
jnz nobs
cmp edi,[addr]
jz f11
dec edi
mov [edi],byte ' '
call print_text
jmp f11
nobs:
cmp eax,31
jbe f11
cmp eax,95
jb keyok
sub eax,32
keyok:
mov [edi],al
call print_text
inc edi
mov esi,[addr]
add esi,20
cmp esi,edi
jnz f11
popa
ret
print_text:
mov eax,13
mov ebx,[xa]
shl ebx,16
add ebx,25*6
mov ecx,[ya]
shl ecx,16
mov cx,8
mov edx,0xffffff
mcall
mov eax,4
mov ebx,[xa]
shl ebx,16
add ebx,[ya]
mov ecx,0x000000
mov edx,[addr]
mov esi,25
mcall
ret
; DATA AREA
ya dd 0x0
xa dd 0x0
addr dd 0x0
text:
db 'PROCESS ID FOR THIS APP : '
db ' '
db ' PID:MESSAGE 0130 EXAMPLE MESSAGE '
db ' '
db ' '
db 'RECEIVED: POP '
db 'x' ; <- END MARKER, DO NOT DELETE
title db 'IPC - START AT LEAST 2',0
I_END:
PID: dd 0x0
message_size: dd 20
received_messages:
db 0 ; lock byte
db 0,0,0 ; reserved
dd 8 ; pointer to free msg position from received_messages
; Sender PID
; Msg length
; Msg data
rb 0x1000
message: times 70 db ?
process_info: times 256 dd ?
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,268 +1,271 @@
;
; INFRARED
;
; Compile with FASM
;
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 1 ; required os
dd START ; program start
dd I_END ; program image size
dd 0x1000 ; required amount of memory
dd 0x1000 ; esp = 0x7FFF0
dd 0, 0
include '..\..\..\..\macros.inc'
START: ; start of execution
set_variables:
mov eax,46 ; reserve ports 0x3f0 - 0x3ff
mov ebx,0
mov ecx,0x3f0
mov edx,0x3ff
mcall
mov eax,45 ; reserve irq 4
mov ebx,0
mov ecx,4
mcall
mov eax,44 ; set read ports for irq 4
mov ebx,irqtable
; mov ecx,4
mcall
mov dh, 3 ; all ports have number 3xx hex
mov dl, 0xf3+8
mov al, 0x80
out dx, al
mov dl, 0xf1+8
mov al, 0
out dx, al
mov dl, 0xf0+8
mov al, 0x30 / 4
out dx, al
mov dl, 0xf3+8
mov al, 3
out dx, al
mov dl, 0xf4+8
mov al, 0xB
out dx, al
mov dl, 0xf1+8
mov al, 1
out dx, al
mov eax,5
mov ebx,100
mcall
mov dl, 0xf8
mov al, 'I'
out dx, al
mov eax,5
mov ebx,10
mcall
mov al, 'R'
out dx, al
mov eax,40 ; get com 1 data with irq 4
mov ebx,0000000000010000b shl 16 + 101b
mcall
red:
call draw_window
still:
mov eax,10 ; wait here for event
mcall
dec eax
jz red
dec eax
dec eax
jnz readir
button: ; button
mov al,17 ; get id
mcall
; we have only one button, close
mov eax,45 ; free irq
mov ebx,1
mov ecx,4
mcall
mov eax,46 ; free ports 0x3f0-0x3ff
mov ebx,1
mov ecx,0x3f0
mov edx,0x3ff
mcall
or eax,-1 ; close this program
mcall
pos dd 0x0
cdplayer:
dd 7
dd 0
dd 0
dd 0
dd 0
db '/sys/CDP',0
readir:
mov eax,42
mov ebx,4
mcall
cmp ebx,80
jne nocd
mov eax,70
mov ebx,cdplayer
mcall
nocd:
push ebx
mov eax,[pos]
add eax,1
cmp eax,10*20+1
jb noeaxz
mov esi,text+10*4
mov edi,text
mov ecx,10*21*4
cld
rep movsb
mov eax,13
mov ebx,20*65536+260
mov ecx,22*65536+220
mov edx,[wcolor]
mcall
mov eax,10*19+1
noeaxz:
mov [pos],eax
pop ebx
and ebx,0xff
call draw_data
jmp still
draw_data:
pusha
xchg eax,ebx
mov ecx,10
shl ebx,2
mov esi,3
newnum:
xor edx,edx
div ecx
add edx,48
mov [ebx+text-1],dl
dec ebx
dec esi
jnz newnum
call draw_text
popa
ret
irqtable:
dd 0x3f8+0x01000000 ; + 01 = read byte, 02 read word
dd 0
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
mcall
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov ebx,100*65536+300 ; [x start] *65536 + [x size]
mov ecx,100*65536+250 ; [y start] *65536 + [y size]
mov edx,[wcolor] ; color of work area RRGGBB,8->color
mov edi,labelt ; caption string
mcall
; ; WINDOW LABEL
; mov eax,4 ; function 4 : write text to window
; mov ebx,8*65536+8 ; [x start] *65536 + [y start]
; mov ecx,0x00ffffff ; color of text RRGGBB
; mov edx,labelt ; pointer to text beginning
; mov esi,labellen-labelt ; text length
; mcall
; CLOSE BUTTON
; mov eax,8 ; function 8 : define and draw button
; mov ebx,(300-19)*65536+12 ; [x start] *65536 + [x size]
; mov ecx,5*65536+12 ; [y start] *65536 + [y size]
; mov edx,1 ; button id
; mov esi,0x5599cc ; button color RRGGBB
; mcall
draw_text:
mov ebx,25*65536+35 ; draw info text with function 4
mov ecx,0xffffff
mov edx,text
mov esi,40
mov edi,20
newline:
mov eax,4
mcall
add ebx,10
add edx,esi
dec edi
jne newline
mov eax,12
mov ebx,2
mcall
ret
; DATA AREA
wcolor dd 0x13000000
labelt db 'INFRARED RECEIVER FOR IRMAN IN COM 1',0
text:
I_END:
; SPDX-License-Identifier: NOASSERTION
;
;
; INFRARED
;
; Compile with FASM
;
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 1 ; required os
dd START ; program start
dd I_END ; program image size
dd 0x1000 ; required amount of memory
dd 0x1000 ; esp = 0x7FFF0
dd 0, 0
include '..\..\..\macros.inc'
START: ; start of execution
set_variables:
mov eax,46 ; reserve ports 0x3f0 - 0x3ff
mov ebx,0
mov ecx,0x3f0
mov edx,0x3ff
mcall
mov eax,45 ; reserve irq 4
mov ebx,0
mov ecx,4
mcall
mov eax,44 ; set read ports for irq 4
mov ebx,irqtable
; mov ecx,4
mcall
mov dh, 3 ; all ports have number 3xx hex
mov dl, 0xf3+8
mov al, 0x80
out dx, al
mov dl, 0xf1+8
mov al, 0
out dx, al
mov dl, 0xf0+8
mov al, 0x30 / 4
out dx, al
mov dl, 0xf3+8
mov al, 3
out dx, al
mov dl, 0xf4+8
mov al, 0xB
out dx, al
mov dl, 0xf1+8
mov al, 1
out dx, al
mov eax,5
mov ebx,100
mcall
mov dl, 0xf8
mov al, 'I'
out dx, al
mov eax,5
mov ebx,10
mcall
mov al, 'R'
out dx, al
mov eax,40 ; get com 1 data with irq 4
mov ebx,0000000000010000b shl 16 + 101b
mcall
red:
call draw_window
still:
mov eax,10 ; wait here for event
mcall
dec eax
jz red
dec eax
dec eax
jnz readir
button: ; button
mov al,17 ; get id
mcall
; we have only one button, close
mov eax,45 ; free irq
mov ebx,1
mov ecx,4
mcall
mov eax,46 ; free ports 0x3f0-0x3ff
mov ebx,1
mov ecx,0x3f0
mov edx,0x3ff
mcall
or eax,-1 ; close this program
mcall
pos dd 0x0
cdplayer:
dd 7
dd 0
dd 0
dd 0
dd 0
db '/sys/CDP',0
readir:
mov eax,42
mov ebx,4
mcall
cmp ebx,80
jne nocd
mov eax,70
mov ebx,cdplayer
mcall
nocd:
push ebx
mov eax,[pos]
add eax,1
cmp eax,10*20+1
jb noeaxz
mov esi,text+10*4
mov edi,text
mov ecx,10*21*4
cld
rep movsb
mov eax,13
mov ebx,20*65536+260
mov ecx,22*65536+220
mov edx,[wcolor]
mcall
mov eax,10*19+1
noeaxz:
mov [pos],eax
pop ebx
and ebx,0xff
call draw_data
jmp still
draw_data:
pusha
xchg eax,ebx
mov ecx,10
shl ebx,2
mov esi,3
newnum:
xor edx,edx
div ecx
add edx,48
mov [ebx+text-1],dl
dec ebx
dec esi
jnz newnum
call draw_text
popa
ret
irqtable:
dd 0x3f8+0x01000000 ; + 01 = read byte, 02 read word
dd 0
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
mcall
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov ebx,100*65536+300 ; [x start] *65536 + [x size]
mov ecx,100*65536+250 ; [y start] *65536 + [y size]
mov edx,[wcolor] ; color of work area RRGGBB,8->color
mov edi,labelt ; caption string
mcall
; ; WINDOW LABEL
; mov eax,4 ; function 4 : write text to window
; mov ebx,8*65536+8 ; [x start] *65536 + [y start]
; mov ecx,0x00ffffff ; color of text RRGGBB
; mov edx,labelt ; pointer to text beginning
; mov esi,labellen-labelt ; text length
; mcall
; CLOSE BUTTON
; mov eax,8 ; function 8 : define and draw button
; mov ebx,(300-19)*65536+12 ; [x start] *65536 + [x size]
; mov ecx,5*65536+12 ; [y start] *65536 + [y size]
; mov edx,1 ; button id
; mov esi,0x5599cc ; button color RRGGBB
; mcall
draw_text:
mov ebx,25*65536+35 ; draw info text with function 4
mov ecx,0xffffff
mov edx,text
mov esi,40
mov edi,20
newline:
mov eax,4
mcall
add ebx,10
add edx,esi
dec edi
jne newline
mov eax,12
mov ebx,2
mcall
ret
; DATA AREA
wcolor dd 0x13000000
labelt db 'INFRARED RECEIVER FOR IRMAN IN COM 1',0
text:
I_END:
@@ -1,50 +1,56 @@
include '..\..\..\..\macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd 0
dd 0
start:
push 66
pop eax
push 4
pop ebx
mov cl, 45h ; NumLock scancode
xor edx, edx
mcall
mov al, 40 ; ёЄрЁ°шх сшЄ√ єцх юсэєыхэ√
mov bl, 2 ; ёЄрЁ°шх сшЄ√ єцх юсэєыхэ√
mcall
event:
push 10
pop eax
mcall
; є эрё ьюцхЄ с√Є№ Єюы№ъю юфэю ёюс√Єшх - эрцрЄр ъыртш°р
mov al, 2
mcall
cmp al, 2
jnz event
; є эрё хёЄ№ Єюы№ъю юфэр уюЁ ўр  ъыртш°р
push 70
pop eax
mov ebx, fileinfo
mcall
jmp event
fileinfo:
dd 7
dd 0
dd 0
dd 0
dd 0
db '/sys/calc',0
i_end:
align 16
rb 16
mem:
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page Windows 1251 - Cyrillic
include '..\..\..\macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd 0
dd 0
start:
push 66
pop eax
push 4
pop ebx
mov cl, 45h ; NumLock scancode
xor edx, edx
mcall
mov al, 40 ; ёЄрЁ°шх сшЄ√ єцх юсэєыхэ√
mov bl, 2 ; ёЄрЁ°шх сшЄ√ єцх юсэєыхэ√
mcall
event:
push 10
pop eax
mcall
; є эрё ьюцхЄ с√Є№ Єюы№ъю юфэю ёюс√Єшх - эрцрЄр ъыртш°р
mov al, 2
mcall
cmp al, 2
jnz event
; є эрё хёЄ№ Єюы№ъю юфэр уюЁ ўр  ъыртш°р
push 70
pop eax
mov ebx, fileinfo
mcall
jmp event
fileinfo:
dd 7
dd 0
dd 0
dd 0
dd 0
db '/sys/calc',0
i_end:
align 16
rb 16
mem:
@@ -1,130 +1,135 @@
;компонент OptionBox (основан на Checkbox)
;Огромная благодарность Maxxxx32, Diamond, Heavyiron и другим программистам, и их программам, без
;которых я не смог бы написать этот компонент.
;21.02.2007 модернизация и поддержка двух разных вариантов с использованием сис цветов и старой схемой
;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения optionkbox
;16.02.2007 дата создания компонента
;<Lrz> - Теплов Алексей www.lrz.land.ru
;заголовок приложения
use32 ; транслятор, использующий 32 разрядных команды
org 0x0 ; базовый адрес кода, всегда 0x0
db 'MENUET01' ; идентификатор исполняемого файла (8 байт)
dd 0x1 ; версия формата заголовка исполняемого файла
dd start ; адрес, на который система передаёт управление
; после загрузки приложения в память
dd i_end ; размер приложения
dd (i_end+0x100) and not 3 ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
dd (i_end+0x100) and not 3 ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
dd 0x0,0x0 ; указатель на строку с параметрами.
; если после запуска не равно нулю, приложение было
; запущено с параметрами из командной строки
; указатель на строку, в которую записан путь,
; откуда запущено приложение
;------------------
include '..\..\..\..\macros.inc'
include 'optionbox.inc' ;включить файл opeck.inc
version_op ;вариант, при котором используются цвета, которые задает пользователь
; version_op1 ;цвета берутся из системы
use_option_box ;используя макросы,внести процедуры для рисования optionbox
align 16
;Область кода
start: ;Точка входа в программу
mov eax,48 ;получить системные цвета
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
mcall
mov eax,40 ;установить маску для ожидаемых событий
mov ebx,0x25 ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
mcall
red_win:
call draw_window ;первоначально необходимо нарисовать окно
still: ;основной обработчик
mov eax,10 ;Ожидать события
mcall ;ожидать событие в течение 2 миллисекунд
cmp al,0x1 ;если изменилось положение окна
jz red_win
cmp al,0x3 ;если нажата кнопка то перейти
jz button
mouse_option_boxes option_boxes,option_boxes_end ;проверка чек бокса
jmp still ;если ничего из перечисленного то снова в цикл
button:
; mov eax,17 ;получить идентификатор нажатой клавиши
; mcall
; test ah,ah ;если в ah 0, то перейти на обработчик событий still
; jz still
or eax,-1 ;в eax,-1 - 5 ,байтов у нас же только 3 выйти
mcall ;далее выполняется выход из программы
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
draw_window: ;рисование окна приложения
mov eax,12 ;в регистр внести значение = 12
mov ebx,1 ;присвоить 1
mcall
xor eax,eax ;обнулить eax
mov ebx,50*65536+180 ;[координата по оси x]*65536 + [размер по оси x]
mov ecx,30*65536+200 ;[координата по оси y]*65536 + [размер по оси y]
mov edx,[sc.work] ; color of work area RRGGBB,8->color gl
or edx,0xb3000000
mov edi,hed
mcall ;нарисовать окно приложения
draw_option_boxes option_boxes,option_boxes_end ;рисование чекбоксов
mov eax,12 ;Функция 12 - начать/закончить перерисовку окна.
mov ebx,2 ;Подфункция 2 - закончить перерисовку окна.
mcall
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные
;Формат данных чек бокса:
;10 - координата чек бокса по х
;30 - координата чек бокса по у
;0
;0 - цвет рамки чек бокса
;0 - цвет текста надписи
;op_text.1 - указатель на начало строки
;option_group1 - это признак группы, т.е. этот код может обрабатывать много групп из optibox
;op_text.e1-op_text.1 - длина строки
;
align 16
option_boxes:
;op1 option_box1 option_group1,10,15,op_text.1,op_text.e1-op_text.1
;op2 option_box1 option_group1,10,30,op_text.2,op_text.e2-op_text.2
;op3 option_box1 option_group1,10,45,op_text.3,op_text.e3-op_text.3
;op11 option_box1 option_group2,10,80,op_text.1,op_text.e1-op_text.1
;op12 option_box1 option_group2,10,95,op_text.2,op_text.e2-op_text.2
;op13 option_box1 option_group2,10,110,op_text.3,op_text.e3-op_text.3
;
;struc option_box point_gr,left,top,color,border_color,text_color,text,text_length
op1 option_box option_group1,10,15,0xffffff,0,0,op_text.1,op_text.e1-op_text.1
op2 option_box option_group1,10,30,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2
op3 option_box option_group1,10,45,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
op11 option_box option_group2,10,80,0xffffff,0,0,op_text.1,op_text.e1-op_text.1
op12 option_box option_group2,10,95,0xffffff,0,0,op_text.2,op_text.e2-op_text.2
op13 option_box option_group2,10,110,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
option_boxes_end:
op_text: ; Сопровождающий текст для чек боксов
.1 db 'Option_Box #1'
.e1:
.2 db 'Option_Box #2'
.e2:
.3 db 'Option_Box #3'
.e3:
option_group1 dd op1 ;указатели, они отображаются по умолчанию, когда выводится
option_group2 dd op11 ;приложение
hed db 'Optionbox [21.02.2007]',0 ;заголовок приложения
sc system_colors
i_end: ;конец кода
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
;компонент OptionBox (основан на Checkbox)
;Огромная благодарность Maxxxx32, Diamond, Heavyiron и другим программистам, и их программам, без
;которых я не смог бы написать этот компонент.
;21.02.2007 модернизация и поддержка двух разных вариантов с использованием сис цветов и старой схемой
;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения optionkbox
;16.02.2007 дата создания компонента
;<Lrz> - Теплов Алексей www.lrz.land.ru
;заголовок приложения
use32 ; транслятор, использующий 32 разрядных команды
org 0x0 ; базовый адрес кода, всегда 0x0
db 'MENUET01' ; идентификатор исполняемого файла (8 байт)
dd 0x1 ; версия формата заголовка исполняемого файла
dd start ; адрес, на который система передаёт управление
; после загрузки приложения в память
dd i_end ; размер приложения
dd (i_end+0x100) and not 3 ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
dd (i_end+0x100) and not 3 ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
dd 0x0,0x0 ; указатель на строку с параметрами.
; если после запуска не равно нулю, приложение было
; запущено с параметрами из командной строки
; указатель на строку, в которую записан путь,
; откуда запущено приложение
;------------------
include '..\..\..\macros.inc'
include 'optionbox.inc' ;включить файл opeck.inc
version_op ;вариант, при котором используются цвета, которые задает пользователь
; version_op1 ;цвета берутся из системы
use_option_box ;используя макросы,внести процедуры для рисования optionbox
align 16
;Область кода
start: ;Точка входа в программу
mov eax,48 ;получить системные цвета
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
mcall
mov eax,40 ;установить маску для ожидаемых событий
mov ebx,0x25 ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
mcall
red_win:
call draw_window ;первоначально необходимо нарисовать окно
still: ;основной обработчик
mov eax,10 ;Ожидать события
mcall ;ожидать событие в течение 2 миллисекунд
cmp al,0x1 ;если изменилось положение окна
jz red_win
cmp al,0x3 ;если нажата кнопка то перейти
jz button
mouse_option_boxes option_boxes,option_boxes_end ;проверка чек бокса
jmp still ;если ничего из перечисленного то снова в цикл
button:
; mov eax,17 ;получить идентификатор нажатой клавиши
; mcall
; test ah,ah ;если в ah 0, то перейти на обработчик событий still
; jz still
or eax,-1 ;в eax,-1 - 5 ,байтов у нас же только 3 выйти
mcall ;далее выполняется выход из программы
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
draw_window: ;рисование окна приложения
mov eax,12 ;в регистр внести значение = 12
mov ebx,1 ;присвоить 1
mcall
xor eax,eax ;обнулить eax
mov ebx,50*65536+180 ;[координата по оси x]*65536 + [размер по оси x]
mov ecx,30*65536+200 ;[координата по оси y]*65536 + [размер по оси y]
mov edx,[sc.work] ; color of work area RRGGBB,8->color gl
or edx,0xb3000000
mov edi,hed
mcall ;нарисовать окно приложения
draw_option_boxes option_boxes,option_boxes_end ;рисование чекбоксов
mov eax,12 ;Функция 12 - начать/закончить перерисовку окна.
mov ebx,2 ;Подфункция 2 - закончить перерисовку окна.
mcall
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные
;Формат данных чек бокса:
;10 - координата чек бокса по х
;30 - координата чек бокса по у
;0
;0 - цвет рамки чек бокса
;0 - цвет текста надписи
;op_text.1 - указатель на начало строки
;option_group1 - это признак группы, т.е. этот код может обрабатывать много групп из optibox
;op_text.e1-op_text.1 - длина строки
;
align 16
option_boxes:
;op1 option_box1 option_group1,10,15,op_text.1,op_text.e1-op_text.1
;op2 option_box1 option_group1,10,30,op_text.2,op_text.e2-op_text.2
;op3 option_box1 option_group1,10,45,op_text.3,op_text.e3-op_text.3
;op11 option_box1 option_group2,10,80,op_text.1,op_text.e1-op_text.1
;op12 option_box1 option_group2,10,95,op_text.2,op_text.e2-op_text.2
;op13 option_box1 option_group2,10,110,op_text.3,op_text.e3-op_text.3
;
;struc option_box point_gr,left,top,color,border_color,text_color,text,text_length
op1 option_box option_group1,10,15,0xffffff,0,0,op_text.1,op_text.e1-op_text.1
op2 option_box option_group1,10,30,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2
op3 option_box option_group1,10,45,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
op11 option_box option_group2,10,80,0xffffff,0,0,op_text.1,op_text.e1-op_text.1
op12 option_box option_group2,10,95,0xffffff,0,0,op_text.2,op_text.e2-op_text.2
op13 option_box option_group2,10,110,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
option_boxes_end:
op_text: ; Сопровождающий текст для чек боксов
.1 db 'Option_Box #1'
.e1:
.2 db 'Option_Box #2'
.e2:
.3 db 'Option_Box #3'
.e3:
option_group1 dd op1 ;указатели, они отображаются по умолчанию, когда выводится
option_group2 dd op11 ;приложение
hed db 'Optionbox [21.02.2007]',0 ;заголовок приложения
sc system_colors
i_end: ;конец кода
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,232 +1,238 @@
;
; COMMUNICATING WITH MODEM: PORTS & IRQ
;
; Compile with FASM
;
include "lang.inc"
include "..\..\..\..\macros.inc"
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x1000 ; memory for app
dd 0x1000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
START: ; start of execution
mov eax,45 ; reserve irq 4
mov ebx,0
mov ecx,4
mcall
mov eax,46 ; reserve ports 0x3f8-0x3ff
mov ebx,0
mov ecx,0x3f8
mov edx,0x3ff
mcall
mov eax,44 ; read these ports at interrupt/irq 4
mov ebx,irqtable
mov ecx,4
mcall
mov eax,40 ; enable event for interrupt/irq 4
mov ebx,10000b shl 16 + 111b
mcall
call program_com1
mov eax, 48
mov ebx, 3
mov ecx, sc
mov edx, sizeof.system_colors
mcall
red:
call draw_window
still:
mov eax,10 ; wait here for event
mcall
cmp eax,1 ; redraw request ?
je red
cmp eax,2 ; key in buffer ?
je key
cmp eax,3 ; button in buffer ?
je button
cmp eax,16+4 ; data read by interrupt ?
je irq4
jmp still
key: ; key
mov eax,2 ; just read it and ignore
mcall
mov al,ah
mov dx,0x3f8
out dx,al
jmp still
button: ; button
or eax,-1 ; close this program
mcall
irq4:
mov eax,42
mov ebx,4
mcall
; eax = number of bytes left
; ecx = 0 success, =1 fail
; bl = byte
inc [pos]
and [pos],31
mov eax,[pos]
mov [string+eax], bl
call draw_string
jmp still
baudrate_9600 equ 12
baudrate_57600 equ 2
program_com1:
mov dx,0x3f8+3
mov al,0x80
out dx,al
mov dx,0x3f8+1
mov al,0x00
out dx,al
mov dx,0x3f8+0
mov al,baudrate_9600
out dx,al
mov dx,0x3f8+3
mov al,0x3
out dx,al
mov dx,0x3f8+4
mov al,0xb
out dx,al
mov dx,0x3f8+1
mov al,0x1
out dx,al
ret
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax, 12 ; function 12:tell os about windowdraw
mov ebx, 1 ; 1, start of draw
mcall
; DRAW WINDOW
mov eax, 0 ; function 0 : define and draw window
mov ebx, 100*65536+250 ; [x start] *65536 + [x size]
mov ecx, 100*65536+85 ; [y start] *65536 + [y size]
mov edx, [sc.work]
or edx, 0x03000000 ; color of work area RRGGBB,8->color gl
mcall
; WINDOW LABEL
mov eax, 4 ; function 4 : write text to window
mov ebx, 8*65536+8 ; [x start] *65536 + [y start]
mov ecx, [sc.grab_text]
or ecx, 0x10000000 ; font 1 & color ( 0xF0RRGGBB )
mov edx, title ; pointer to text beginning
mov esi, title.len ; text length
mcall
mov eax, 4 ; draw text
mov ebx, 20*65536+33
mov ecx, [sc.work_text]
mov edx, text+4
.nextstr:
mov esi, [edx-4]
test esi, 0xFF000000
jnz .finstr
mcall
add edx, esi
add edx, 4
add ebx, 10
jmp .nextstr
.finstr:
call draw_string
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mcall
ret
draw_string:
mov eax, 4
mov ebx, 20*65536+65
mov ecx, [sc.work_text]
mov edx, string
mov esi, 32
mcall
ret
; DATA AREA
if lang eq ru_RU
text mstr "ВВОДИМЫЕ СИМВОЛЫ ПЕРЕДАЮТСЯ МОДЕМУ.",\
"ДАННЫЕ ОТ МОДЕМА СЧИТЫВАЮТСЯ ПО",\
"ПРЕРЫВАНИЮ IRQ4 И ОТОБРАЖАЮТСЯ НИЖЕ."
title:
db 'МОДЕМ НА COM1'
.len = $ - title
else
text mstr "TYPED CHARACTERS ARE SENT TO MODEM.",\
"DATA FROM MODEM IS READ BY IRQ4",\
"INTERRUPT AND DISPLAYED BELOW."
title:
db 'MODEM AT COM1'
.len = $ - title
end if
pos dd 0x0
irqtable:
; port ; 1=byte, 2=word
dd 0x3f8 +0x01000000 ; read byte from port 0x3f8 at interrupt/irq 4
dd 0x0 ; no more ports ( max 15 ) to read
I_END:
string rb 32
sc system_colors
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
;
; COMMUNICATING WITH MODEM: PORTS & IRQ
;
; Compile with FASM
;
include "lang.inc"
include "..\..\..\macros.inc"
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x1000 ; memory for app
dd 0x1000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
START: ; start of execution
mov eax,45 ; reserve irq 4
mov ebx,0
mov ecx,4
mcall
mov eax,46 ; reserve ports 0x3f8-0x3ff
mov ebx,0
mov ecx,0x3f8
mov edx,0x3ff
mcall
mov eax,44 ; read these ports at interrupt/irq 4
mov ebx,irqtable
mov ecx,4
mcall
mov eax,40 ; enable event for interrupt/irq 4
mov ebx,10000b shl 16 + 111b
mcall
call program_com1
mov eax, 48
mov ebx, 3
mov ecx, sc
mov edx, sizeof.system_colors
mcall
red:
call draw_window
still:
mov eax,10 ; wait here for event
mcall
cmp eax,1 ; redraw request ?
je red
cmp eax,2 ; key in buffer ?
je key
cmp eax,3 ; button in buffer ?
je button
cmp eax,16+4 ; data read by interrupt ?
je irq4
jmp still
key: ; key
mov eax,2 ; just read it and ignore
mcall
mov al,ah
mov dx,0x3f8
out dx,al
jmp still
button: ; button
or eax,-1 ; close this program
mcall
irq4:
mov eax,42
mov ebx,4
mcall
; eax = number of bytes left
; ecx = 0 success, =1 fail
; bl = byte
inc [pos]
and [pos],31
mov eax,[pos]
mov [string+eax], bl
call draw_string
jmp still
baudrate_9600 equ 12
baudrate_57600 equ 2
program_com1:
mov dx,0x3f8+3
mov al,0x80
out dx,al
mov dx,0x3f8+1
mov al,0x00
out dx,al
mov dx,0x3f8+0
mov al,baudrate_9600
out dx,al
mov dx,0x3f8+3
mov al,0x3
out dx,al
mov dx,0x3f8+4
mov al,0xb
out dx,al
mov dx,0x3f8+1
mov al,0x1
out dx,al
ret
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax, 12 ; function 12:tell os about windowdraw
mov ebx, 1 ; 1, start of draw
mcall
; DRAW WINDOW
mov eax, 0 ; function 0 : define and draw window
mov ebx, 100*65536+250 ; [x start] *65536 + [x size]
mov ecx, 100*65536+85 ; [y start] *65536 + [y size]
mov edx, [sc.work]
or edx, 0x03000000 ; color of work area RRGGBB,8->color gl
mcall
; WINDOW LABEL
mov eax, 4 ; function 4 : write text to window
mov ebx, 8*65536+8 ; [x start] *65536 + [y start]
mov ecx, [sc.grab_text]
or ecx, 0x10000000 ; font 1 & color ( 0xF0RRGGBB )
mov edx, title ; pointer to text beginning
mov esi, title.len ; text length
mcall
mov eax, 4 ; draw text
mov ebx, 20*65536+33
mov ecx, [sc.work_text]
mov edx, text+4
.nextstr:
mov esi, [edx-4]
test esi, 0xFF000000
jnz .finstr
mcall
add edx, esi
add edx, 4
add ebx, 10
jmp .nextstr
.finstr:
call draw_string
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mcall
ret
draw_string:
mov eax, 4
mov ebx, 20*65536+65
mov ecx, [sc.work_text]
mov edx, string
mov esi, 32
mcall
ret
; DATA AREA
if lang eq ru_RU
text mstr "ВВОДИМЫЕ СИМВОЛЫ ПЕРЕДАЮТСЯ МОДЕМУ.",\
"ДАННЫЕ ОТ МОДЕМА СЧИТЫВАЮТСЯ ПО",\
"ПРЕРЫВАНИЮ IRQ4 И ОТОБРАЖАЮТСЯ НИЖЕ."
title:
db 'МОДЕМ НА COM1'
.len = $ - title
else
text mstr "TYPED CHARACTERS ARE SENT TO MODEM.",\
"DATA FROM MODEM IS READ BY IRQ4",\
"INTERRUPT AND DISPLAYED BELOW."
title:
db 'MODEM AT COM1'
.len = $ - title
end if
pos dd 0x0
irqtable:
; port ; 1=byte, 2=word
dd 0x3f8 +0x01000000 ; read byte from port 0x3f8 at interrupt/irq 4
dd 0x0 ; no more ports ( max 15 ) to read
I_END:
string rb 32
sc system_colors
@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
@@ -1,3 +1,9 @@
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
; <--- description --->
; compiler: FASM 1.67
; name: Basic window example for KolibriOS
@@ -9,7 +15,7 @@
; <--- include all KolibriOS stuff --->
include "lang.inc" ; Language support for locales: ru_RU (CP866), fr_FR, en_US.
include "..\..\..\..\macros.inc"
include "..\..\..\macros.inc"
; <--- start of KolibriOS application --->

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