forked from KolibriOS/kolibrios
create /programs/testing folder, upload GenFiles by 0CodErr
git-svn-id: svn://kolibrios.org@6573 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
fab76bf2c2
commit
e8ffe59ea7
441
programs/testing/genfiles/GenFiles.asm
Normal file
441
programs/testing/genfiles/GenFiles.asm
Normal file
@ -0,0 +1,441 @@
|
||||
; program to generate files ;
|
||||
; path to folder in edit1 ;
|
||||
; count of files in edit2 ;
|
||||
; to compile: nasm -f bin GenFiles.asm -o GenFiles ;
|
||||
ORG 0
|
||||
BITS 32
|
||||
; ------------------------------------- ;
|
||||
STACK_SIZE equ 256
|
||||
; ------------------------------------- ;
|
||||
EM_REDRAW equ 0b1
|
||||
EM_KEY equ 0b10
|
||||
EM_BUTTON equ 0b100
|
||||
EM_MOUSE equ 0b100000
|
||||
; ------------------------------------- ;
|
||||
BUTTON_START equ 2
|
||||
; ------------------------------------- ;
|
||||
ED_DISABLED equ 0b100000000000
|
||||
; ------------------------------------- ;
|
||||
EDIT1_MAX_LENGTH equ 1024
|
||||
EDIT2_MAX_LENGTH equ 10
|
||||
FILE_NAME_LENGTH equ 256
|
||||
; ------------------------------------- ;
|
||||
text_buffer1 equ END + STACK_SIZE
|
||||
text_buffer2 equ END + STACK_SIZE + (EDIT1_MAX_LENGTH + 2)
|
||||
file_name equ END + STACK_SIZE + (EDIT1_MAX_LENGTH + 2) + (EDIT2_MAX_LENGTH + 2)
|
||||
; ------------------------------------- ;
|
||||
MENUET01 db 'MENUET01'
|
||||
version dd 1
|
||||
program.start dd START
|
||||
program.end dd END
|
||||
program.memory dd END + STACK_SIZE + (EDIT1_MAX_LENGTH + 2) + (EDIT2_MAX_LENGTH + 2) + FILE_NAME_LENGTH
|
||||
program.stack dd END + STACK_SIZE
|
||||
program.params dd 0
|
||||
program.path dd 0
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
Events:
|
||||
.0: dd On_Idle
|
||||
.1: dd On_Redraw
|
||||
.2: dd On_Key
|
||||
.3: dd On_Button
|
||||
.4: dd 0
|
||||
.5: dd 0
|
||||
.6: dd On_Mouse
|
||||
; ------------------------------------- ;
|
||||
ButtonEvents:
|
||||
.0: dd 0
|
||||
.1: dd On_ButtonClose
|
||||
.2: dd On_ButtonStart
|
||||
; ------------------------------------- ;
|
||||
count dd 0
|
||||
; ------------------------------------- ;
|
||||
pb:
|
||||
.value dd 0
|
||||
.left dd 8
|
||||
.top dd 25
|
||||
.width dd 269
|
||||
.height dd 10
|
||||
.style dd 0
|
||||
.min dd 0
|
||||
.max dd 0
|
||||
.back_color dd 0x00C8D0D4
|
||||
.progress_color dd 0x8072B7EB
|
||||
.frame_color dd 0x00406175
|
||||
; ------------------------------------- ;
|
||||
edit1:
|
||||
.width dd 100
|
||||
.left dd 48
|
||||
.top dd 8
|
||||
.color dd 0X00FFFFFF
|
||||
.shift_color dd 0
|
||||
.focus_border_color dd 0
|
||||
.blur_border_color dd 0
|
||||
.text_color dd 0
|
||||
.max dd EDIT1_MAX_LENGTH
|
||||
.text dd text_buffer1
|
||||
.mouse_variable dd 0
|
||||
.flags dd 10b ; active
|
||||
.size dd 0
|
||||
.pos dd 0
|
||||
.offset dd 0
|
||||
.cl_curs_x dd 0
|
||||
.cl_curs_y dd 0
|
||||
.shift dd 0
|
||||
.shift_old dd 0
|
||||
; ------------------------------------- ;
|
||||
edit2:
|
||||
.width dd 60
|
||||
.left dd 216
|
||||
.top dd 8
|
||||
.color dd 0X00FFFFFF
|
||||
.shift_color dd 0
|
||||
.focus_border_color dd 0
|
||||
.blur_border_color dd 0
|
||||
.text_color dd 0
|
||||
.max dd EDIT2_MAX_LENGTH
|
||||
.text dd text_buffer2
|
||||
.mouse_variable dd 0
|
||||
.flags dd 1000000000000000b ; only numbers
|
||||
.size dd 0
|
||||
.pos dd 0
|
||||
.offset dd 0
|
||||
.cl_curs_x dd 0
|
||||
.cl_curs_y dd 0
|
||||
.shift dd 0
|
||||
.shift_old dd 0
|
||||
; ------------------------------------- ;
|
||||
progressbar_progress dd 0
|
||||
progressbar_draw dd 0
|
||||
; ------------------------------------- ;
|
||||
edit_box_draw dd 0
|
||||
edit_box_key dd 0
|
||||
edit_box_mouse dd 0
|
||||
edit_box_set_text dd 0
|
||||
; ------------------------------------- ;
|
||||
status_string dd sz_empty
|
||||
; ------------------------------------- ;
|
||||
box_lib dd 0
|
||||
; ------------------------------------- ;
|
||||
sz_box_lib db "/sys/lib/box_lib.obj",0
|
||||
; ------------------------------------- ;
|
||||
sz_progressbar_draw db 'progressbar_draw', 0
|
||||
sz_progressbar_progress db 'progressbar_progress', 0
|
||||
; ------------------------------------- ;
|
||||
sz_edit_box db "edit_box",0
|
||||
sz_edit_box_key db "edit_box_key",0
|
||||
sz_edit_box_mouse db "edit_box_mouse",0
|
||||
sz_edit_box_set_text db "edit_box_set_text",0
|
||||
; ------------------------------------- ;
|
||||
sz_path db "Path:",0
|
||||
sz_count db "Count:",0
|
||||
sz_start db "Start",0
|
||||
sz_caption db "Generate files",0
|
||||
; ------------------------------------- ;
|
||||
sz_empty db "",0
|
||||
sz_doing db "doing",0
|
||||
sz_done db "done ",0
|
||||
sz_error db "error",0
|
||||
; ------------------------------------- ;
|
||||
digits db "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
; ------------------------------------- ;
|
||||
START:
|
||||
; LoadLibrary:
|
||||
mov eax, 68
|
||||
mov ebx, 19
|
||||
mov ecx, sz_box_lib
|
||||
int 64
|
||||
mov [box_lib], eax
|
||||
|
||||
push dword[box_lib]
|
||||
push sz_edit_box
|
||||
call GetProcAddress
|
||||
mov [edit_box_draw], eax
|
||||
|
||||
push dword[box_lib]
|
||||
push sz_edit_box_key
|
||||
call GetProcAddress
|
||||
mov [edit_box_key], eax
|
||||
|
||||
push dword[box_lib]
|
||||
push sz_edit_box_mouse
|
||||
call GetProcAddress
|
||||
mov [edit_box_mouse], eax
|
||||
|
||||
push dword[box_lib]
|
||||
push sz_edit_box_set_text
|
||||
call GetProcAddress
|
||||
mov [edit_box_set_text], eax
|
||||
|
||||
push dword[box_lib]
|
||||
push sz_progressbar_draw
|
||||
call GetProcAddress
|
||||
mov [progressbar_draw], eax
|
||||
|
||||
push dword[box_lib]
|
||||
push sz_progressbar_progress
|
||||
call GetProcAddress
|
||||
mov [progressbar_progress], eax
|
||||
; ------------------------------------- ;
|
||||
; SetEventMask
|
||||
mov eax, 40
|
||||
mov ebx, EM_REDRAW | EM_KEY | EM_BUTTON | EM_MOUSE
|
||||
int 64
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
WaitEvent:
|
||||
mov eax, 10
|
||||
int 64
|
||||
call [eax * 4 + Events]
|
||||
jmp WaitEvent
|
||||
; ------------------------------------- ;
|
||||
%macro CreateNextFile 0
|
||||
; Base36(count)
|
||||
mov eax, [count]
|
||||
mov ecx, 36 ; because our base is 36
|
||||
mov esi, file_name
|
||||
mov edi, esi
|
||||
add esi, 7 ; base36(0xFFFFFFFF) = 1Z141Z3 : 7 simbols
|
||||
mov [esi], byte 0
|
||||
%%next:
|
||||
xor edx, edx
|
||||
div ecx
|
||||
dec esi
|
||||
mov dl, [edx + digits]
|
||||
mov [esi], dl
|
||||
test eax, eax
|
||||
jnz %%next
|
||||
mov eax, esi
|
||||
sub eax, edi
|
||||
mov ecx, 7 + 1
|
||||
sub ecx, eax
|
||||
rep movsb
|
||||
; ------------------------------------- ;
|
||||
push dword file_name
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword 0
|
||||
push dword 0
|
||||
push dword 0
|
||||
push dword 0
|
||||
push dword 2 ; SubFunction #2 Create/Rewrite file
|
||||
mov ebx, esp
|
||||
mov eax, 70 ; Function #70
|
||||
int 64
|
||||
add esp, 25 ; restore stack
|
||||
%endmacro
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
DoAction:
|
||||
; convert text in edit2 to number
|
||||
mov edx, [edit2.text]
|
||||
xor eax, eax
|
||||
xor ecx, ecx
|
||||
.convert:
|
||||
mov al, [edx]
|
||||
test al, al
|
||||
jz .converted
|
||||
lea ecx, [ecx + ecx * 4]
|
||||
lea ecx, [eax + ecx * 2 - 48]
|
||||
inc edx
|
||||
jmp .convert
|
||||
.converted:
|
||||
mov [count], ecx
|
||||
; ------------------------------------- ;
|
||||
mov [pb.max], ecx
|
||||
mov [pb.value], dword 0
|
||||
; draw progressbar
|
||||
push pb
|
||||
call [progressbar_draw]
|
||||
; ------------------------------------- ;
|
||||
cmp [count], dword 0
|
||||
jz .done
|
||||
; SetCurrentDirectory
|
||||
mov eax, 30
|
||||
mov ebx, 1
|
||||
mov ecx, [edit1.text]
|
||||
int 64
|
||||
;
|
||||
mov [status_string], dword sz_doing
|
||||
call DrawStatus
|
||||
.do:
|
||||
CreateNextFile
|
||||
test eax, eax
|
||||
jnz .error
|
||||
; increase progress
|
||||
push pb
|
||||
call [progressbar_progress]
|
||||
; CheckEvent
|
||||
mov eax, 11
|
||||
int 64
|
||||
call [eax * 4 + Events]
|
||||
dec dword [count]
|
||||
jnz .do
|
||||
.done:
|
||||
mov [status_string], dword sz_done
|
||||
call DrawStatus
|
||||
ret
|
||||
.error:
|
||||
mov [status_string], dword sz_error
|
||||
call DrawStatus
|
||||
ret
|
||||
; ------------------------------------- ;
|
||||
DrawStatus:
|
||||
mov eax, 4
|
||||
mov ecx, 0xC0000000
|
||||
mov ebx, (168 << 16) | 38
|
||||
mov edx, [status_string]
|
||||
mov edi, 0x00FFFFFF
|
||||
int 64
|
||||
ret
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
On_Idle:
|
||||
ret
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
On_Redraw:
|
||||
; RedrawStart
|
||||
mov eax, 12
|
||||
mov ebx, 1
|
||||
int 64
|
||||
; DrawWindow
|
||||
xor eax, eax
|
||||
mov ebx, 360
|
||||
mov ecx, 74
|
||||
mov edx, 0x34FFFFFF
|
||||
mov edi, sz_caption
|
||||
xor esi, esi
|
||||
int 64
|
||||
; draw progressbar
|
||||
push pb
|
||||
call [progressbar_draw]
|
||||
; draw edit1
|
||||
push edit1
|
||||
call [edit_box_draw]
|
||||
; draw edit2
|
||||
push edit2
|
||||
call [edit_box_draw]
|
||||
; DrawButton
|
||||
mov eax, 8
|
||||
mov ecx, (8 << 16) | 26
|
||||
mov ebx, (288 << 16) | 53
|
||||
mov edx, BUTTON_START
|
||||
mov esi, 0x00DDDDDD
|
||||
int 64
|
||||
; DrawTexts
|
||||
mov eax, 4
|
||||
mov ecx, 0x80000000
|
||||
; Path:
|
||||
mov ebx, (8 << 16) | 11
|
||||
mov edx, sz_path
|
||||
int 64
|
||||
; Count:
|
||||
mov ebx, (176 << 16) | 11
|
||||
mov edx, sz_count
|
||||
int 64
|
||||
; Start:
|
||||
mov ebx, (302 << 16) | 18
|
||||
mov edx, sz_start
|
||||
int 64
|
||||
; draw status
|
||||
mov ebx, (168 << 16) | 38
|
||||
mov edx, [status_string]
|
||||
int 64
|
||||
; RedrawFinish
|
||||
mov eax, 12
|
||||
mov ebx, 2
|
||||
int 64
|
||||
ret
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
On_Key:
|
||||
; GetKeyCode
|
||||
mov eax, 2
|
||||
int 64
|
||||
; notify edit1 about key event
|
||||
push edit1
|
||||
call [edit_box_key]
|
||||
; notify edit2 about key event
|
||||
push edit2
|
||||
call [edit_box_key]
|
||||
ret
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
On_Button:
|
||||
; GetButtonNumber
|
||||
mov eax, 17
|
||||
int 64
|
||||
movzx eax, ah
|
||||
call [eax * 4 + ButtonEvents]
|
||||
ret
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
On_ButtonClose:
|
||||
; Terminate
|
||||
or eax, -1
|
||||
int 64
|
||||
; ret is not needed here because we are not back after terminate
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
On_ButtonStart:
|
||||
mov [ButtonEvents.2], dword On_Idle ; disable ButtonStart | because
|
||||
or [edit1.flags], dword ED_DISABLED ; disable edit1 | we will
|
||||
or [edit2.flags], dword ED_DISABLED ; disable edit2 | in Action
|
||||
; redraw edit1 after change flag
|
||||
push edit1
|
||||
call [edit_box_draw]
|
||||
; redraw edit2 after change flag
|
||||
push edit2
|
||||
call [edit_box_draw]
|
||||
call DoAction
|
||||
mov [ButtonEvents.2], dword On_ButtonStart ; enable ButtonStart
|
||||
and [edit1.flags], dword ~ED_DISABLED ; enable edit1
|
||||
and [edit2.flags], dword ~ED_DISABLED ; enable edit2
|
||||
; redraw edit1 after change flag
|
||||
push edit1
|
||||
call [edit_box_draw]
|
||||
; redraw edit2 after change flag
|
||||
push edit2
|
||||
call [edit_box_draw]
|
||||
ret
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
On_Mouse:
|
||||
; notify edit1 about mouse event
|
||||
push edit1
|
||||
call [edit_box_mouse]
|
||||
; notify edit2 about mouse event
|
||||
push edit2
|
||||
call [edit_box_mouse]
|
||||
ret
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
GetProcAddress:
|
||||
mov edx, [esp + 8]
|
||||
xor eax, eax
|
||||
test edx, edx
|
||||
jz .end
|
||||
.next:
|
||||
xor eax, eax
|
||||
cmp [edx], dword 0
|
||||
jz .end
|
||||
mov esi, [edx]
|
||||
mov edi, [esp + 4]
|
||||
.next_:
|
||||
lodsb
|
||||
scasb
|
||||
jne .fail
|
||||
test al, al
|
||||
jnz .next_
|
||||
jmp .ok
|
||||
.fail:
|
||||
add edx, 8
|
||||
jmp .next
|
||||
.ok:
|
||||
mov eax, [edx + 4]
|
||||
.end:
|
||||
ret 8
|
||||
; ------------------------------------- ;
|
||||
align 4
|
||||
END:
|
2
programs/testing/genfiles/Tupfile.lua
Normal file
2
programs/testing/genfiles/Tupfile.lua
Normal file
@ -0,0 +1,2 @@
|
||||
if tup.getconfig("NO_NASM") ~= "" then return end
|
||||
tup.rule("GenFiles.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "GenFiles")
|
2
programs/testing/genfiles/make.bat
Normal file
2
programs/testing/genfiles/make.bat
Normal file
@ -0,0 +1,2 @@
|
||||
nasm -f bin GenFiles.asm -o GenFiles
|
||||
pause
|
Loading…
Reference in New Issue
Block a user