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 |