Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 4977 → Rev 4976

/programs/system/board/trunk/board.asm
1,22 → 1,23
;------------------------------------------------------------------------------
;
; DEBUG BOARD for APPLICATIONS and KERNEL DEVELOPMENT
;
; See f63
;
; Compile with FASM for KolibriOS
;------------------------------------------------------------------------------
include 'lang.inc'
;
WRITE_LOG equ 1
P_LEN equ 11
;------------------------------------------------------------------------------
include 'lang.inc'
 
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd mem
dd mem
dd filename, 0x0
;------------------------------------------------------------------------------
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd mem ; memory for app
dd mem ; esp
dd filename , 0x0 ; I_Param , I_Icon
include '../../../macros.inc'
include '../../../debug.inc'
purge newline
23,8 → 24,10
MAXSTRINGS = 16
TMP = 80*(MAXSTRINGS+1)
;------------------------------------------------------------------------------
START:
START: ; start of execution
 
call CheckUnique
 
mov edi, filename
cmp [edi], byte 0
jnz param
35,6 → 38,13
test al,al
jnz @b
param:
 
; allow user to see messages written before start
; mov ecx,4096
;flush:
; mcall 63,2
; loop flush
 
mov ecx, TMP
xor eax, eax
mov edi, [targ]
48,7 → 58,7
sub eax, 399 shl 16
add eax, 399
mov [xstart], eax
mcall 48, 3, sc, sizeof.sys_colors_new
mcall 48,3,sc,sizeof.system_colors
 
mov esi, filename
call CreateFile
83,6 → 93,7
movzx ebx, byte[buffer_length]
mov [ebx+tmp], al
inc [buffer_length]
 
mov ebp, [targ]
.no4:
cmp al, 13
200,8 → 211,9
ret
;------------------------------------------------------------------------------
;************************ WINDOW DEFINITIONS AND DRAW ************************
;------------------------------------------------------------------------------
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mcall 12, 1 ; 1, start of draw
mcall 48, 5 ; GetClientTop
210,15 → 222,16
shl ecx, 16
add ecx, MAXSTRINGS*10+45 ; [y start] *65536 + [y size]
xor eax, eax ; function 0 : define and draw window
; mov edx,[sc.work] ; color of work area RRGGBB,8->color gl
mov edx, 0xffffff
or edx, 0x14000000
xor esi, esi
mcall ,[xstart],,,,title
mov ebx, 296 shl 16+31
mcall 8,,<4,13>,3,[sc.btn_face]
mov ebx,296 shl 16+5*6
mcall 8,,<5,12>,3,[sc.work]
mov edx, [vmode]
lea edx, [edx*4+duk]
mcall 4,<300,7>,,,4
mcall 4,<300,8>,,,4
call draw_text
mcall 12, 2 ; 2, end of draw
ret
225,8 → 238,10
;------------------------------------------------------------------------------
draw_text:
mov ebx, 15*65536+30 ; draw info text with function 4
; mov ecx,[sc.work_text]
xor ecx, ecx
or ecx, 0x40000000
; mov edi,[sc.work]
mov edi, 0xffffff
mov edx, text1
cmp [vmode], 0
258,15 → 273,16
cmp [edx], byte 'x'
jne newline
ret
 
;------------------------------------------------------------------------------
;********************************************
;* input: esi = pointer to the file name *
;------------------------------------------------------------------------------
;********************************************
 
CreateFile:
pusha
mov dword [InfoStructure+00], 2 ; create file
mov dword [InfoStructure+04], 0 ; reserved
mov dword [InfoStructure+08], 0 ; reserved
mov dword [InfoStructure],2 ; create file
mov dword [InfoStructure+4],0 ; reserved
mov dword [InfoStructure+8],0 ; reserved
mov dword [InfoStructure+12], 0 ; 0 bytes to write (just create)
mov dword [InfoStructure+16], 0 ; NULL data pointer (no data)
mov dword [InfoStructure+20], 0 ; reserved
278,17 → 294,19
.out:
popa
ret
;------------------------------------------------------------------------------
;------------------------------------------------
;********************************************
;* input: esi = pointer to the file name *
;* edx = pointer to data buffer *
;* ecx = data length *
;------------------------------------------------------------------------------
;********************************************
 
WriteToFile:
push ebx
mov dword [InfoStructure+00], 3 ; write to file
mov dword [InfoStructure],3 ; write to file
mov eax, [filepos]
mov dword [InfoStructure+04], eax ; lower position addr
mov dword [InfoStructure+08], 0 ; upper position addr (0 for FAT)
mov dword [InfoStructure+4],eax ; lower position addr
mov dword [InfoStructure+8],0 ; upper position addr (0 for FAT)
mov dword [InfoStructure+12], ecx ; number of bytes to write
mov dword [InfoStructure+16], edx ; pointer to data buffer
mov dword [InfoStructure+20], 0 ; reserved
302,11 → 320,12
pop ebx
ret
 
;------------------------------------------------------------------------------
;-------------------------------------------------
;********************************************
;* input: esi = pointer to string *
;* edi = pointer to string *
;* ecx = data length *
;------------------------------------------------------------------------------
;********************************************
StrCmp:
repe cmpsb
ja .a_greater_b
322,10 → 341,11
.end:
ret
 
;------------------------------------------------------------------------------
;-------------------------------------------------
;********************************************
;* input: edi = pointer to string *
;* ecx = data length *
;------------------------------------------------------------------------------
;********************************************
; 'a' - 'A' = 32 -> 'A'|32 = 'a'
ToLower:
xor eax, eax
336,19 → 356,20
.end:
ret
 
;------------------------------------------------------------------------------
;* get info on current thread, save pid/tid
;* look for another process with same name and different pid/tid
;* if found, close self
;* else continue normally
;------------------------------------------------------------------------------
 
;-------------------------------------------------
CheckUnique:
;get info on current thread, save pid/tid
;look for another process with same name and different pid/tid
;if found, close self
;else continue normally
 
.get_thread_info:
mov ebx, procinfo
mov ecx, -1
mcall 9
 
.get_pid: ; check_buffer
.get_pid:
; check_buffer
mov [process_count], eax
mov eax, [ebx+process_information.PID]
mov [pid_tid], eax
373,13 → 394,15
lea edi, [ebx+process_information.process_name]
push ecx
mov ecx, my_name_size-1
 
.lower_case:
call ToLower
lea esi, [my_name]
 
mov ecx, my_name_size
call StrCmp
 
pop ecx
 
cmp eax, 0
je .close_program
 
388,8 → 411,7
jmp .check_threads
 
.close_program:
; restore and active window of previous thread
mcall 18, 3
mcall 18,3 ; restore and active window of previous thread
mov eax, -1
mcall
 
397,10 → 419,8
ret
 
 
;------------------------------------------------------------------------------
;*********************************** DATA ************************************
;------------------------------------------------------------------------------
align 4
 
;--------------------------------------------------
InfoStructure:
dd 0x0 ; subfunction number
dd 0x0 ; position in the file in bytes
407,11 → 427,19
dd 0x0 ; upper part of the position address
dd 0x0 ; number of bytes to read
dd 0x0 ; pointer to the buffer to write data
db 0x0
dd 0x0 ; pointer to the filename
filepos dd 0x0
db 0
dd 0 ; pointer to the filename
 
filepos dd 0
default_filename db '/sys/boardlog.txt',0
;------------------------------------------------------------------------------
krnl_msg db 'K : '
duk db 'KernUser'
 
; DATA AREA
 
; 11,11 > 0,-1
; 5,11 > 0,-1
if lang eq ru
title db '„®áª  ®â« ¤ª¨ ¨ á®®¡é¥­¨©',0
else if lang eq it
421,12 → 449,10
else
title db 'General debug & message board',0
end if
;------------------------------------------------------------------------------
krnl_msg db 'K : '
duk db 'KernUser'
krnl_cnt dd 0
vmode dd 1
targ dd text2
 
my_name db 'board',0
my_name_size = $-my_name
process_count dd 0x0
437,17 → 463,24
offs dd ?
flag rb 1
rd 2
;x1pos dd ?
;y1pos dd ?
text1 rb 80*(MAXSTRINGS+1)
tmp1 db ?
rd 2
;x2pos dd ?
;y2pos dd ?
text2 rb 80*(MAXSTRINGS+1)
tmp2 db ?
xstart dd ?
sc sys_colors_new
 
sc system_colors
 
i_end:
buffer_length rb 1
;------------------------------------------------------------------------------
tmp rb 256
;------------------------------------------------------------------------------
filename rb 256
;------------------------------------------------------------------------------
align 4