From 4448079bc7024c68628a7a9890a02c693a1694f1 Mon Sep 17 00:00:00 2001 From: vkos Date: Sun, 25 Oct 2009 20:18:42 +0000 Subject: [PATCH] Using function get_option_str from libini instead of independent parsing. New import names git-svn-id: svn://kolibrios.org@1236 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/system/launch/trunk/console.asm | 2396 ---------------------- programs/system/launch/trunk/history.txt | 36 +- programs/system/launch/trunk/launch.asm | 196 +- programs/system/launch/trunk/launch.dbg | 349 ---- programs/system/launch/trunk/readme.txt | 8 +- 5 files changed, 123 insertions(+), 2862 deletions(-) delete mode 100755 programs/system/launch/trunk/console.asm delete mode 100755 programs/system/launch/trunk/launch.dbg diff --git a/programs/system/launch/trunk/console.asm b/programs/system/launch/trunk/console.asm deleted file mode 100755 index 2f01c48add..0000000000 --- a/programs/system/launch/trunk/console.asm +++ /dev/null @@ -1,2396 +0,0 @@ -; Функции работы с консолью для программ КолибриОС -; diamond, 2006-2008 -; Last changed by vkos, 14.02.2009 -; Added new exports in libs-dev style. - - -format MS COFF - -public EXPORTS - -section '.flat' code readable align 16 - -include 'font.inc' -include 'conscrl.inc' - -;void __stdcall START(dword state); -START: -; N.B. The current kernel implementation does not require -; evident heap initialization, because if DLL is loaded, heap is already initialized -; (if heap was not initialized, loader does this implicitly). -; So this action does nothing useful, but nothing harmful. - push 68 - pop eax - push 11 - pop ebx - int 0x40 - or eax, -1 - ret 4 - -; Инициализация консоли -; void __stdcall con_init(dword wnd_width, dword wnd_height, -; dword scr_width, dword scr_height, const char* title); - -align 4 -con_init: - pop eax - pop [con.wnd_width] - pop [con.wnd_height] - pop [con.scr_width] - pop [con.scr_height] - pop [con.title] - push eax - mov ecx, 4 - mov eax, con.wnd_width - mov esi, con.def_wnd_width -.1: - cmp dword [eax], -1 - jnz @f - mov ebx, [esi] - mov [eax], ebx -@@: - add eax, 4 - add esi, 4 - loop .1 - push ebx -; allocate memory for console data & bitmap data - mov eax, [con.scr_width] - mul [con.scr_height] - lea ecx, [eax+eax] - mov eax, [con.wnd_width] - mul [con.wnd_height] - imul eax, font_width*font_height - mov ebx, eax - push ebx ecx - add ecx, eax - push 68 - pop eax - push 12 - pop ebx - int 0x40 - pop ecx ebx - mov edx, con.nomem_err - test eax, eax - jz con.fatal - mov [con.data], eax - push edi - mov edi, eax - shr ecx, 1 - mov ax, 0x0720 - rep stosw - mov ecx, ebx - mov [con.image], edi - xor eax, eax - rep stosb - pop edi -; create console thread - push 51 - pop eax - xor ebx, ebx - inc ebx - mov ecx, con.thread - mov edx, con.stack_top - int 0x40 - mov edx, con.thread_err - test eax, eax - js con.fatal - mov [con.console_tid], eax - pop ebx - ret -con.fatal: -; output string to debug board and die - mov cl, [edx] - test cl, cl - jz @f - push 63 - pop eax - xor ebx, ebx - inc ebx - int 0x40 - inc edx - jmp con.fatal -@@: - or eax, -1 - int 0x40 - -; dword __stdcall con_get_flags(void); -con_get_flags: - mov eax, [con_flags] - ret - -; dword __stdcall con_set_flags(dword flags); -con_set_flags: - mov eax, [esp+4] - xchg eax, [con_flags] - ret 4 - -; dword __stdcall con_get_font_height(void); -con_get_font_height: - mov eax, font_height - ret - -; int __stdcall con_get_cursor_height(void); -con_get_cursor_height: - mov eax, [con.cursor_height] - ret - -; int __stdcall con_set_cursor_height(int new_height); -con_set_cursor_height: - mov eax, [esp+4] - cmp eax, font_height - jae @f - xchg eax, [con.cursor_height] - ret 4 -@@: - mov eax, [con.cursor_height] - ret 4 - -; void __stdcall con_write_asciiz(const char* string); -con_write_asciiz: - push ebx esi - or ebx, -1 - mov esi, [esp+12] - call con.write - pop esi ebx - ret 4 - -; void __stdcall con_write_string(const char* string, dword length); -con_write_length: - push ebx esi - mov esi, [esp+12] - mov ebx, [esp+16] - call con.write - pop esi ebx - ret 8 - -; Каждый символ классифицируется как один из -con.printfc.normal = 0 ; нормальный символ -con.printfc.percent = 1 ; '%' -con.printfc.dot = 2 ; '.' -con.printfc.asterisk = 3 ; '*' -con.printfc.zero = 4 ; '0' -con.printfc.digit = 5 ; ненулевая цифра -con.printfc.plus = 6 ; '+' -con.printfc.minus = 7 ; '-' -con.printfc.sharp = 8 ; '#' -con.printfc.space = 9 ; ' ' -con.printfc.long = 10 ; 'l' for 'long' -con.printfc.short = 11 ; 'h' for 'short' -con.printfc.dec = 12 ; 'd' = print decimal -con.printfc.oct = 13 ; 'o' = print octal -con.printfc.unsigned = 14 ; 'u' = print unsigned decimal -con.printfc.hex = 15 ; 'x' = print hexadecimal -con.printfc.pointer = 16 ; 'p' = print pointer -con.printfc.char = 17 ; 'c' = print char -con.printfc.string = 18 ; 's' = print string - -macro set char,type -{store byte con.printfc.#type at con.charcodes + char - ' '} - -con.charcodes: -times 'x'-' '+1 db con.printfc.normal - set '%', percent - set '.', dot - set '*', asterisk - set '0', zero - set '1', digit - set '2', digit - set '3', digit - set '4', digit - set '5', digit - set '6', digit - set '7', digit - set '8', digit - set '9', digit - set ' ', space - set '#', sharp - set '+', plus - set '-', minus - set 'X', hex - set 'x', hex - set 'c', char - set 'd', dec - set 'h', short - set 'i', dec - set 'l', long - set 'o', oct - set 'p', pointer - set 's', string - set 'u', unsigned -purge set -align 4 -con.charjump dd con_printf.normal - dd con_printf.percent - dd con_printf.dot - dd con_printf.asterisk - dd con_printf.zero - dd con_printf.digit - dd con_printf.plus - dd con_printf.minus - dd con_printf.sharp - dd con_printf.space - dd con_printf.long - dd con_printf.short - dd con_printf.dec - dd con_printf.oct - dd con_printf.unsigned - dd con_printf.hex - dd con_printf.pointer - dd con_printf.char - dd con_printf.string - -; int __cdecl con_printf(const char* format, ...) -con_printf: - xor eax, eax - pushad - call con.get_data_ptr - lea ebp, [esp+20h+8] - mov esi, [ebp-4] - sub esp, 64 ; reserve space for buffer -.loop: - xor eax, eax - lodsb - test al, al - jz .done - cmp al, '%' - jz .spec_begin -.normal: - call con.write_char_ex - inc dword [esp+64+28] - jmp .loop -.errspec: -.percent: - add esp, 12 - jmp .normal -.spec_begin: - xor ebx, ebx -; bl = тип позиции: -; 0 = начало -; 1 = прочитан ведущий 0 в спецификации формата -; 2 = читаем поле ширины -; 3 = читаем поле точности -; 4 = прочитано поле размера аргумента -; 5 = читаем поле типа -; bh = флаги: -; 1 = флаг '#', выводить 0/0x/0X -; 2 = флаг '-', выравнивание влево -; 4 = флаг '0', дополнение нулями -; 8 = флаг 'h', короткий аргумент - push -1 -; dword [esp+8] = precision - push -1 -; dword [esp+4] = width - push 0 -; byte [esp] = флаг 0/'+'/' ' -.spec: - xor eax, eax - lodsb - test al, al - jz .done - cmp al, ' ' - jb .normal - cmp al, 'x' - ja .normal - movzx ecx, byte [con.charcodes + eax - ' '] - jmp [con.charjump + ecx*4] - -.sharp: - test bl, bl - jnz .errspec - or bh, 1 - jmp .spec -.minus: - test bl, bl - jnz .errspec - or bh, 2 - jmp .spec -.plus: -.space: - test bl, bl - jnz .errspec - cmp byte [esp], '+' - jz .spec - mov byte [esp], al - jmp .spec -.zero: - test bl, bl - jnz .digit - test bh, 2 - jnz .spec - or bh, 4 - inc ebx - jmp .spec -.digit: - sub al, '0' - cmp bl, 2 - ja .precision - mov bl, 2 - xchg eax, [esp+4] - test eax, eax - js .spec - lea eax, [eax*5] - add eax, eax - add [esp+4], eax - jmp .spec -.precision: - cmp bl, 3 - jnz .errspec - xchg eax, [esp+8] - lea eax, [eax*5] - add eax, eax - add [esp+8], eax - jmp .spec -.asterisk: - mov eax, [ebp] - add ebp, 4 - cmp bl, 2 - ja .asterisk_precision - test eax, eax - jns @f - neg eax - or bh, 2 -@@: - mov [esp+4], eax - mov bl, 3 - jmp .spec -.asterisk_precision: - cmp bl, 3 - jnz .errspec - mov [esp+8], eax - inc ebx - jmp .spec -.dot: - cmp bl, 2 - ja .errspec - mov bl, 3 - and dword [esp+8], 0 - jmp .spec -.long: - cmp bl, 3 - ja .errspec - mov bl, 4 - jmp .spec -.short: - cmp bl, 3 - ja .errspec - mov bl, 4 - or bh, 8 - jmp .spec -.unsigned: -.dec: - push 10 - jmp .write_number -.pointer: - mov dword [esp+12], 8 - or bh, 4 - and bh, not 8 -.hex: - push 16 - jmp @f -.oct: - push 8 -@@: - mov byte [esp+4], 0 -.write_number: - pop ecx - push edi - lea edi, [esp+16+64-1] ; edi -> end of buffer - mov byte [edi], 0 - push edx - push eax - mov eax, [ebp] - add ebp, 4 - test bh, 8 - jz @f - movzx eax, ax - cmp byte [esp], 'd' - jnz @f - movsx eax, ax -@@: - xor edx, edx - test eax, eax - jns @f - cmp byte [esp], 'd' - jnz @f - inc edx - neg eax -@@: - push edx - xor edx, edx -; число в eax, основание системы счисления в ecx -@@: - cmp dword [esp+16+8], 0 - jnz .print_num - test eax, eax - jz .zeronum -.print_num: - div ecx - xchg eax, edx - cmp al, 10 - sbb al, 69h - das - cmp byte [esp+4], 'x' - jnz @f - or al, 20h -@@: - dec edi - mov [edi], al - xor eax, eax - xchg eax, edx - test eax, eax - jnz .print_num -.zeronum: - push 0 - mov edx, [esp+12] - lea eax, [esp+32+64-1] - sub eax, edi - cmp dword [esp+20+8], -1 - jz .noprec1 - cmp eax, [esp+20+8] - jae .len_found1 - mov eax, [esp+20+8] - jmp .len_found1 -.noprec1: - test bh, 4 - jnz .do_print_num -.len_found1: - test bh, 2 - jnz .do_print_num - cmp byte [esp+20], 0 - jz @f - inc eax -@@: - cmp byte [esp+20], 0 - jnz @f - cmp byte [esp+4], 0 - jz @f - inc eax -@@: - test bh, 1 - jz .nosharp1 - cmp cl, 8 - jnz @f - inc eax - jmp .nosharp1 -@@: - cmp cl, 16 - jnz .nosharp1 - inc eax - inc eax -.nosharp1: - cmp dword [esp+20+4], -1 - jz .do_print_num - sub eax, [esp+20+4] - jae .do_print_num - push ecx - mov ecx, eax - mov al, ' ' -@@: - xchg edi, [esp+20] - call con.write_char_ex - inc dword [esp+24+12+64+28] - xchg edi, [esp+20] - inc dword [esp+4] - inc ecx - jnz @b - pop ecx -.do_print_num: - mov al, '-' - cmp byte [esp+4], 0 - jnz .write_sign - mov al, [esp+20] - test al, al - jz .sign_written -.write_sign: - call .num_write_char -.sign_written: - test bh, 1 - jz .nosharp2 - mov al, '0' - cmp cl, 8 - jz @f - cmp cl, 16 - jnz .nosharp2 - call .num_write_char - mov al, [esp+8] -@@: - call .num_write_char -.nosharp2: - lea ecx, [esp+32+64-1] - sub ecx, edi - cmp dword [esp+20+8], -1 - jz .noprec2 - sub ecx, [esp+20+8] - jmp .lead_zeroes -.noprec2: - test bh, 4 - jz .do_print_num2 - add ecx, [esp] - sub ecx, [esp+20+4] -.lead_zeroes: - jae .do_print_num2 -@@: - mov al, '0' - call .num_write_char - inc ecx - jnz @b -.do_print_num2: - mov al, [edi] - test al, al - jz .num_written - call .num_write_char - inc edi - jmp .do_print_num2 -.num_written: - pop ecx - mov edi, [esp+12] - cmp dword [esp+16+4], -1 - jz .num_written2 -@@: - cmp ecx, [esp+16+4] - jae .num_written2 - mov al, ' ' - call con.write_char - inc ecx - jmp @b -.num_written2: - add esp, 16 -.spec_done: - add esp, 12 - jmp .loop -.char: - mov ecx, [esp+4] - cmp ecx, -1 - jnz @f - inc ecx -@@: - test ecx, ecx - jnz @f - inc ecx -@@: - test bh, 2 - jnz .char_left_pad - mov al, ' ' - dec ecx - jz .nowidth - add [esp+12+64+28], ecx -@@: - call con.write_char - loop @b -.nowidth: - mov al, [ebp] - add ebp, 4 - jmp .percent -.char_left_pad: - mov al, [ebp] - add ebp, 4 - call con.write_char_ex - add [esp+12+64+28], ecx - dec ecx - jz .nowidth2 - mov al, ' ' -@@: - call con.write_char - loop @b -.nowidth2: - jmp .spec_done -.string: - push esi - mov esi, [ebp] - test esi, esi - jnz @f - mov esi, con.aNull -@@: - add ebp, 4 - or ecx, -1 -@@: - inc ecx - cmp byte [esi+ecx], 0 - jnz @b - cmp ecx, [esp+12] - jb @f - mov ecx, [esp+12] -@@: - test bh, 2 - jnz .write_string - cmp dword [esp+8], -1 - jz .write_string - push ecx - sub ecx, [esp+12] - jae .nospace - mov al, ' ' -@@: - call con.write_char - inc dword [esp+20+64+28] - inc ecx - jnz @b -.nospace: - pop ecx -.write_string: - jecxz .string_written - add dword [esp+16+64+28], ecx - push ecx -@@: - lodsb - call con.write_char_ex - loop @b - pop ecx -.string_written: - pop esi - test bh, 2 - jz .spec_done - cmp dword [esp+4], -1 - jz .spec_done - sub ecx, [esp+4] - jae .spec_done - mov al, ' ' -@@: - call con.write_char - inc dword [esp+12+64+28] - inc ecx - jnz @b - jmp .spec_done -.done: - add esp, 64 - popad - jmp con.update_screen -.num_write_char: - xchg edi, [esp+20] - call con.write_char_ex - inc dword [esp+24+12+64+28] - xchg edi, [esp+20] - inc dword [esp+4] - ret - -con.write: -; esi = string, ebx = length (ebx=-1 for ASCIIZ strings) - push edi - call con.get_data_ptr - test ebx, ebx - jz .done -.loop: - lodsb - cmp ebx, -1 - jnz @f - test al, al - jz .done -@@: - call con.write_char_ex -.next: - cmp ebx, -1 - jz .loop - dec ebx - jnz .loop -.done: - pop edi - jmp con.update_screen - -con.get_data_ptr: - mov edi, [con.cur_y] - imul edi, [con.scr_width] - add edi, [con.cur_x] - add edi, edi - add edi, [con.data] - ret - -con.write_char_ex: - test byte [con_flags+1], 1 - jz con.write_special_char - -con.write_char: - push eax - stosb - mov al, byte [con_flags] - stosb - mov eax, [con.cur_x] - inc eax - mov [con.cur_x], eax - cmp eax, [con.scr_width] - jb @f - and [con.cur_x], 0 - call con.newline -@@: - pop eax - ret - -con.write_special_char: - cmp [con_esc], 0 - jnz .esc_mode -.normal_mode: - cmp al, 10 - jz .write_lf - cmp al, 13 - jz .write_cr - cmp al, 27 - jz .write_esc - cmp al, 8 - jz .write_bs - cmp al, 9 - jnz con.write_char -.write_tab: - mov al, ' ' - call con.write_char - test [con.cur_x], 7 - jnz .write_tab - ret -.write_cr: - and [con.cur_x], 0 - jmp con.get_data_ptr -.write_lf: - and [con.cur_x], 0 - jmp con.newline -.write_bs: - cmp [con.cur_x], 0 - jz @f - dec [con.cur_x] - dec edi - dec edi - ret -@@: - push eax - mov eax, [con.cur_y] - dec eax - js @f - mov [con.cur_y], eax - mov eax, [con.scr_width] - dec eax - mov [con.cur_x], eax - dec edi - dec edi -@@: - pop eax - ret -.write_esc: - mov [con_esc], 1 - mov [con_esc_attr_n], 1 - and [con_esc_attrs], 0 - ret -.esc_mode: - cmp [con_sci], 0 - jnz .esc_sci - cmp al, '[' - jnz @f - mov [con_sci], 1 - ret -@@: - push eax - mov al, 27 - call con.write_char - pop eax - jmp con.write_char -.esc_sci: -; this is real Esc sequence - cmp al, ';' - jz .next_arg - cmp al, '0' - jb .not_digit - cmp al, '9' - ja .not_digit - push eax ecx edx - sub al, '0' - movzx eax, al - mov ecx, [con_esc_attr_n] - mov edx, [con_esc_attrs+(ecx-1)*4] - lea edx, [edx*5] - lea edx, [edx*2+eax] - mov [con_esc_attrs+(ecx-1)*4], edx - pop edx ecx eax - ret -.next_arg: - push eax - mov eax, [con_esc_attr_n] - inc eax - cmp al, 4 - jbe @f - dec eax -@@: - mov [con_esc_attr_n], eax - and [con_esc_attrs+(eax-1)*4], 0 - pop eax - ret -.not_digit: - mov [con_esc], 0 - mov [con_sci], 0 ; in any case, leave Esc mode - cmp al, 'J' - jz .cls - cmp al, 'H' - jz .setcursor - cmp al, 'f' - jz .setcursor - cmp al, 'm' - jz .set_attr - cmp al, 'A' - jz .cursor_up - cmp al, 'B' - jz .cursor_down - cmp al, 'C' - jz .cursor_right - cmp al, 'D' - jz .cursor_left - ret ; simply skip unknown sequences -.cls: - push ecx - and [con.cur_x], 0 - and [con.cur_y], 0 - mov edi, [con.data] - push edi - mov ecx, [con.scr_width] - imul ecx, [con.scr_height] - mov ax, 0720h - rep stosw - pop edi ecx -.nosetcursor: - ret -.setcursor: - cmp [con_esc_attr_n], 2 - jnz .nosetcursor - mov eax, [con_esc_attrs] - cmp eax, [con.scr_width] - jae @f - mov [con.cur_x], eax -@@: - mov eax, [con_esc_attrs+4] - cmp eax, [con.scr_height+4] - jae @f - mov [con.cur_y], eax -.j_get_data: - jmp con.get_data_ptr -.cursor_up: - cmp [con_esc_attr_n], 1 - jnz .nosetcursor - mov eax, [con.cur_y] - sub eax, [con_esc_attrs] - jnc @f - xor eax, eax -@@: - mov [con.cur_y], eax - jmp .j_get_data -.cursor_down: - cmp [con_esc_attr_n], 1 - jnz .nosetcursor - mov eax, [con.cur_y] - add eax, [con_esc_attrs] - cmp eax, [con.scr_height] - jb @f - mov eax, [con.scr_height] - dec eax -@@: - mov [con.cur_y], eax - jmp .j_get_data -.cursor_right: - cmp [con_esc_attr_n], 1 - jnz .nosetcursor - mov eax, [con.cur_x] - add eax, [con_esc_attrs] - cmp eax, [con.scr_width] - jb @f - mov eax, [con.scr_width] - dec eax -@@: - mov [con.cur_x], eax - jmp .j_get_data -.cursor_left: - cmp [con_esc_attr_n], 1 - jnz .nosetcursor - mov eax, [con.cur_x] - sub eax, [con_esc_attrs] - jnc @f - xor eax, eax -@@: - mov [con.cur_x], eax - jmp .j_get_data -.set_attr: - push eax ecx edx - xor ecx, ecx -.set_one_attr: - mov eax, [con_esc_attrs+ecx*4] - cmp al, 0 - jz .attr_normal - cmp al, 1 - jz .attr_bold - cmp al, 5 - jz .attr_bgr_bold - cmp al, 7 - jz .attr_reversed - xor edx, edx - cmp al, 30 - jz .attr_color - mov dl, 4 - cmp al, 31 - jz .attr_color - mov dl, 2 - cmp al, 32 - jz .attr_color - mov dl, 6 - cmp al, 33 - jz .attr_color - mov dl, 1 - cmp al, 34 - jz .attr_color - mov dl, 5 - cmp al, 35 - jz .attr_color - mov dl, 3 - cmp al, 36 - jz .attr_color - mov dl, 7 - cmp al, 37 - jz .attr_color - xor edx, edx - cmp al, 40 - jz .attr_bgr_color - mov dl, 0x40 - cmp al, 41 - jz .attr_bgr_color - mov dl, 0x20 - cmp al, 42 - jz .attr_bgr_color - mov dl, 0x60 - cmp al, 43 - jz .attr_bgr_color - mov dl, 0x10 - cmp al, 44 - jz .attr_bgr_color - mov dl, 0x50 - cmp al, 45 - jz .attr_bgr_color - mov dl, 0x30 - cmp al, 46 - jz .attr_bgr_color - mov dl, 0x70 - cmp al, 47 - jnz .attr_continue -.attr_bgr_color: - mov eax, [con_flags] - and al, 0x8F - or al, dl - mov [con_flags], eax - jmp .attr_continue -.attr_color: - mov eax, [con_flags] - and al, 0xF8 - or al, dl - mov [con_flags], eax - jmp .attr_continue -.attr_normal: - mov byte [con_flags], 7 - jmp .attr_continue -.attr_reversed: - mov byte [con_flags], 0x70 - jmp .attr_continue -.attr_bold: - or byte [con_flags], 8 - jmp .attr_continue -.attr_bgr_bold: - or byte [con_flags], 0x80 -.attr_continue: - inc ecx - cmp ecx, [con_esc_attr_n] - jb .set_one_attr - pop edx ecx eax - ret - -con.newline: - mov eax, [con.cur_y] - inc eax - mov [con.cur_y], eax - cmp eax, [con.scr_height] - jb @f - call con.scr_scroll_up -@@: - call con.get_data_ptr - ret - -con.scr_scroll_up: - pushad - mov edi, [con.data] - mov esi, edi - add esi, [con.scr_width] - add esi, [con.scr_width] - dec [con.cur_y] - mov ecx, [con.scr_height] - dec ecx - imul ecx, [con.scr_width] - shr ecx, 1 - rep movsd - adc ecx, ecx - rep movsw - mov ax, 0x0720 - mov ecx, [con.scr_width] - rep stosw - popad - ret - -con.data2image: - pushad - mov edi, [con.image] - mov esi, [con.data] - mov eax, [con.wnd_ypos] - mul [con.scr_width] - add eax, [con.wnd_xpos] - lea esi, [esi+eax*2] - mov ecx, [con.wnd_height] -.lh: - push ecx - mov ecx, [con.wnd_width] -.lw: - push ecx edi - xor eax, eax - mov al, [esi+1] - push eax - and al, 0xF - mov ebx, eax ; цвет текста - pop eax - shr al, 4 - mov ebp, eax ; цвет фона - sub ebx, ebp - lodsb - inc esi -if font_width > 8 - lea edx, [eax+eax+font] -else - lea edx, [eax+font] -end if -.sh: - mov ecx, [edx] -repeat font_width - shr ecx, 1 - sbb eax, eax - and eax, ebx - add eax, ebp - mov [edi+%-1], al -end repeat - mov eax, [con.wnd_width] -; imul eax, font_width -; add edi, eax -if font_width = 6 - lea eax, [eax*2+eax] - lea edi, [edi+eax*2] -else if font_width = 7 - lea edi, [edi+eax*8] - sub edi, eax -else if font_width = 8 - lea edi, [edi+eax*8] -else if font_width = 9 - lea edi, [edi+eax*8] - add edi, eax -else if font_width = 10 - lea eax, [eax*4+eax] - lea edi, [edi+eax*2] -else -Unknown font_width value! -end if -if font_width > 8 - add edx, 256*2 - cmp edx, font+256*2*font_height -else - add edx, 256 - cmp edx, font+256*font_height -end if - jb .sh - pop edi ecx - add edi, font_width - sub ecx, 1 - jnz .lw - mov eax, [con.wnd_width] - imul eax, (font_height-1)*font_width - add edi, eax - pop ecx - mov eax, [con.scr_width] - sub eax, [con.wnd_width] - lea esi, [esi+eax*2] - dec ecx - jnz .lh - mov eax, [con.cur_y] - sub eax, [con.wnd_ypos] - jb .nocursor - cmp eax, [con.wnd_height] - jae .nocursor - inc eax - mul [con.wnd_width] - imul eax, font_height*font_width - mov edx, [con.cur_x] - sub edx, [con.wnd_xpos] - jb .nocursor - cmp edx, [con.wnd_width] - jae .nocursor - inc edx - imul edx, font_width - add eax, edx - add eax, [con.image] - mov edx, [con.wnd_width] - imul edx, font_width - neg edx - mov ecx, [con.cursor_height] - jecxz .nocursor -.cursor_loop: - push ecx - mov ecx, font_width - add eax, edx - push eax -@@: - xor byte [eax-1], 7 - dec eax - loop @b - pop eax - pop ecx - loop .cursor_loop -.nocursor: - popad - ret - -con_exit: - cmp byte [esp+4], 0 - jz .noexit - mov [con.thread_op], 1 - call con.wake - ret 4 -.noexit: - push esi - mov esi, [con.title] - mov edx, con.finished_title - mov ecx, 255 - call .strcpy - mov esi, con.aFinished - call .strcpy - mov byte [edx], 0 - pop esi - and [con.cursor_height], 0 - push con.finished_title - call con_set_title - ret 4 -.strcpy: - jecxz .ret -@@: - lodsb - test al, al - jz .ret - mov [edx], al - inc edx - loop @b -.ret: - ret - -con_set_title: - mov eax, [esp+4] - mov [con.title], eax - mov [con.thread_op], 2 - call con.wake - ret 4 - -; int __stdcall con_kbhit(void); -con_kbhit: - mov eax, [con.input_start] - cmp eax, [con.input_end] - setnz al - movzx eax, al - ret - -con.force_entered_char: - cmp [con.entered_char], -1 - jnz .ret - mov [con.thread_op], 4 - call con.wake -; wait for response - push ebx - push 5 - pop eax - push 2 - pop ebx -@@: - int 0x40 - cmp [con.entered_char], -1 - jz @b - pop ebx -.ret: - ret - -; int __stdcall con_getch(void); -con_getch: - call con.force_entered_char - movzx eax, byte [con.entered_char] - sar [con.entered_char], 8 - mov byte [con.entered_char+1], 0xFF - test al, al - jz @f - mov byte [con.entered_char], 0xFF -@@: - ret - -; int __stdcall con_getch2(void); -con_getch2: - call con.force_entered_char - mov eax, 0xFFFF - xchg ax, [con.entered_char] - ret - -; void __stdcall con_gets(char* str, int n); -con_gets: - pop eax - push 0 - push eax -; void __stdcall con_gets2(con_gets2_callback callback, char* str, int n); -con_gets2: - pushad - mov esi, [esp+20h+8] ; str - mov ebx, [esp+20h+12] ; n - sub ebx, 1 - jle .ret - mov byte [esi], 0 - xor ecx, ecx ; длина уже введённой строки - call con.get_data_ptr -.loop: - call con_getch2 - test al, al - jz .extended - cmp al, 8 - jz .backspace - cmp al, 27 - jz .esc - cmp al, 13 - jz .enter - cmp al, 9 - jz .tab - inc ecx - mov dl, al - call con.write_char_ex - push [con.cur_x] - push [con.cur_y] - push edi - push esi -@@: - lodsb - mov [esi-1], dl - mov dl, al - test al, al - jz @f - call con.write_char_ex - jmp @b -@@: - mov [esi], dl - pop esi - inc esi - pop edi - pop [con.cur_y] - pop [con.cur_x] -.update_screen_and_loop: - call con.update_screen - cmp ecx, ebx - jb .loop -.ret_us: - mov edx, [con.cur_x] -@@: - lodsb - test al, al - jz @f - inc edx - cmp edx, [con.scr_width] - jb @b - xor edx, edx - call con.newline - jmp @b -@@: - mov [con.cur_x], edx - call con.get_data_ptr - call con.update_screen - jmp .ret -.esc: - mov edx, [con.cur_x] -@@: - lodsb - test al, al - jz @f - inc edx - cmp edx, [con.scr_width] - jb @b - xor edx, edx - call con.newline - jmp @b -@@: - mov [con.cur_x], edx - call con.get_data_ptr - dec esi - xor ecx, ecx -@@: - mov byte [esi], 0 - cmp esi, [esp+20h+8] - jbe .update_screen_and_loop - mov al, 8 - call con.write_special_char - mov al, ' ' - call con.write_char - mov al, 8 - call con.write_special_char - dec esi - jmp @b -.delete: - cmp byte [esi], 0 - jz .loop - lodsb - call con.write_char_ex -.backspace: - cmp esi, [esp+20h+8] - jbe .loop - push esi - mov edx, [con.cur_x] -@@: - lodsb - test al, al - jz @f - inc edx - cmp edx, [con.scr_width] - jb @b - xor edx, edx - call con.newline - jmp @b -@@: - mov [con.cur_x], edx - call con.get_data_ptr - dec esi - mov al, 8 - call con.write_special_char - mov al, ' ' - call con.write_char - mov al, 8 - call con.write_special_char - mov dl, 0 -@@: - cmp esi, [esp] - jbe @f - mov al, 8 - call con.write_special_char - dec esi - xchg dl, [esi] - mov al, dl - call con.write_char - mov al, 8 - call con.write_special_char - jmp @b -@@: - pop esi - dec esi - mov [esi], dl - dec ecx - jmp .update_screen_and_loop -.enter: - mov edx, [con.cur_x] -@@: - lodsb - test al, al - jz @f - inc edx - cmp edx, [con.scr_width] - jb @b - xor edx, edx - call con.newline - jmp @b -@@: - mov [con.cur_x], edx - call con.get_data_ptr - mov al, 10 - mov [esi-1], al - mov byte [esi], 0 - call con.write_special_char - call con.update_screen - jmp .ret -.tab: - mov al, 0 - mov ah, 0xF -.extended: - xchg al, ah - cmp al, 0x4B - jz .left - cmp al, 0x4D - jz .right - cmp al, 0x47 - jz .home - cmp al, 0x4F - jz .end - cmp al, 0x53 - jz .delete -; give control to callback function - cmp dword [esp+20h+4], 0 - jz .loop -; remember length of text before and length of text after -; and advance cursor to the end of line - push ecx - push eax - lea edx, [esi+1] -@@: - lodsb - test al, al - jz @f - call con.write_char_ex - jmp @b -@@: - sub esi, edx - pop eax - push esi - dec edx - sub edx, [esp+28h+8] - push edx - push esp ; ppos - mov ecx, [esp+30h+4] - lea edx, [esp+30h+12] - push edx ; pn - lea edx, [esp+34h+8] - push edx ; pstr - push eax ; keycode - call ecx - call con.get_data_ptr - dec eax - js .callback_nochange - jz .callback_del - dec eax - jz .callback_output -; callback returned 2 - exit - add esp, 12 - jmp .ret -.callback_nochange: -; callback returned 0 - string was not changed, only restore cursor position - pop esi - pop ecx - test ecx, ecx - jz .cncs -@@: - mov al, 8 - call con.write_special_char - loop @b -.cncs: - pop ecx - add esi, [esp+20h+8] - jmp .callback_done -.callback_del: -; callback returned 1 - string was changed, delete old string and output new - mov ecx, [esp+8] - test ecx, ecx - jz .cds -@@: - mov al, 8 - call con.write_special_char - mov al, ' ' - call con.write_char_ex - mov al, 8 - call con.write_special_char - loop @b -.cds: -.callback_output: -; callback returned 2 - string was changed, output new string - pop edx - pop esi - pop ecx - mov esi, [esp+20h+8] - xor ecx, ecx -@@: - lodsb - test al, al - jz @f - call con.write_char_ex - inc ecx - jmp @b -@@: - dec esi - push ecx - sub ecx, edx - jz .cos -@@: - mov al, 8 - call con.write_special_char - dec esi - loop @b -.cos: - pop ecx -.callback_done: - call con.update_screen - mov ebx, [esp+20h+12] - dec ebx - cmp ecx, ebx - jae .ret_us - jmp .loop -.left: - cmp esi, [esp+20h+8] - jbe .loop - dec esi - mov al, 8 - call con.write_special_char - jmp .update_screen_and_loop -.right: - cmp byte [esi], 0 - jz .loop - lodsb - call con.write_char_ex - jmp .update_screen_and_loop -.home: - cmp esi, [esp+20h+8] - jz .update_screen_and_loop - dec esi - mov al, 8 - call con.write_special_char - jmp .home -.end: - lodsb - test al, al - jz @f - call con.write_char_ex - jmp .end -@@: - dec esi - jmp .update_screen_and_loop -.ret: - popad - ret 12 - -; void __stdcall con_cls(); -con_cls: - push edi - call con.write_special_char.cls - pop edi - call con.update_screen - ret - -; void __stdcall con_get_cursor_pos(int* px, int* py); -con_get_cursor_pos: - push eax ecx - mov eax, [esp+12] - mov ecx, [con.cur_x] - mov [eax], ecx - mov eax, [esp+16] - mov ecx, [con.cur_y] - mov [eax], ecx - pop ecx eax - ret 8 - -; void __stdcall con_set_cursor_pos(int px, int py); -con_set_cursor_pos: - push eax - mov eax, [esp+8] - cmp eax, [con.scr_width] - jae @f - mov [con.cur_x], eax -@@: - mov eax, [esp+12] - cmp eax, [con.scr_height] - jae @f - mov [con.cur_y], eax -@@: - pop eax - call con.update_screen - ret 8 - -con.update_screen: - push eax - mov eax, [con.cur_y] - sub eax, [con.wnd_ypos] - jb .up - cmp eax, [con.wnd_height] - jb .done - mov eax, [con.cur_y] - sub eax, [con.wnd_height] - inc eax - jmp .set -.up: - mov eax, [con.cur_y] -.set: - mov [con.wnd_ypos], eax -.done: - pop eax - mov [con.thread_op], 3 - -con.wake: - pushad - mov al, [con.thread_op] - cmp al, byte [con.ipc_buf+0x10] - jz .ret -@@: - push 60 - pop eax - push 2 - pop ebx - mov ecx, [con.console_tid] - mov edx, con.thread_op - push 1 - pop esi - int 0x40 - test eax, eax - jz @f - push 5 - pop eax - mov bl, 1 - int 0x40 - jmp @b -@@: -.ret: - popad - ret - -; Поток окна консоли. Обрабатывает ввод и вывод. -con.thread: -; Поток реагирует на IPC, которое используется только для того, чтобы его можно было "разбудить" - push 40 - pop eax - push 0x67 - pop ebx - int 0x40 - mov al, 60 - mov bl, 1 - mov ecx, con.ipc_buf - push 0x11 - pop edx - int 0x40 - mov al, 66 - mov bl, 1 - mov ecx, ebx - int 0x40 -con.redraw: - call con.draw_window -con.msg_loop: - cmp dword [con.bUpPressed], 0 - jnz .wait_timeout - push 10 - pop eax - jmp @f -.wait_timeout: - push 23 - pop eax - push 5 - pop ebx -@@: - int 0x40 - dec eax - jz con.redraw - dec eax - jz con.key - dec eax - jz con.button - cmp al, 4 - jz con.ipc - jmp con.mouse -con.button: -; we have only one button, close -con.thread_exit: - or eax, -1 - int 0x40 -con.key: - mov al, 2 - int 0x40 -; ah = scancode - cmp ah, 0xE0 - jnz @f - mov [con.bWasE0], 1 - jmp con.msg_loop -@@: - shr eax, 8 - xchg ah, [con.bWasE0] - test al, al - jle con.msg_loop - cmp al, 0x1D - jz con.msg_loop - cmp al, 0x2A - jz con.msg_loop - cmp al, 0x36 - jz con.msg_loop - cmp al, 0x38 - jz con.msg_loop - cmp al, 0x3A - jz con.msg_loop - cmp al, 0x45 - jz con.msg_loop - cmp al, 0x46 - jz con.msg_loop - mov edx, eax - push 66 - pop eax - push 3 - pop ebx - int 0x40 ; eax = control key state - test dh, dh - jnz .extended - bt [scan_has_ascii], edx - jnc .extended - test al, 0x30 - jnz .extended -; key has ASCII code - push eax edx - push 2 - pop ecx - test al, 3 - jnz @f - dec ecx -@@: - push 26 - pop eax - mov bl, 2 - mov edx, con.kbd_layout - int 0x40 - pop edx eax - mov dh, [con.kbd_layout+edx] - test al, 0xC - jz @f - sub dh, 0x60 - jmp @f -.extended: - mov dh, 0 ; no ASCII code -@@: -; dh contains ASCII-code; now convert scancode to extended key code - mov ecx, con.extended_alt - test al, 0x30 - jnz .xlat - mov ecx, con.extended_shift - test al, 3 - jnz .xlat - mov ecx, con.extended_ctrl - test al, 0xC - jnz .xlat - xchg dl, dh - cmp dh, 0x57 - jz @f - cmp dh, 0x58 - jnz .gotcode -@@: - add dh, 0x85-0x57 - jmp .gotcode -.xlat: - movzx eax, dl - mov dl, dh - mov dh, [eax+ecx] -.gotcode: - test dh, dh - jz con.msg_loop - cmp dh, 0x94 - jnz @f - mov dl, 0 -@@: -; dx contains full keycode - cmp [con.bGetchRequested], 0 - jz @f - mov [con.entered_char], dx - jmp con.msg_loop -@@: - mov eax, [con.input_end] - mov ecx, eax - add eax, 2 - cmp eax, con.input_buffer_end - jnz @f - mov eax, con.input_buffer -@@: - cmp eax, [con.input_start] - jnz @f -; buffer overflow, make beep and continue - push 55 - pop eax - mov ebx, eax - mov esi, con.beep - int 0x40 - jmp con.msg_loop -@@: - mov [ecx], dx - mov [con.input_end], eax - jmp con.msg_loop -con.ipc: - movzx eax, byte [con.ipc_buf+0x10] - mov byte [con.ipc_buf+4], 8 - mov byte [con.ipc_buf+0x10], 0 - dec eax - jz con.thread_exit - dec eax - jz con.set_title - dec eax - jz con.redraw_image - dec eax - jz con.getch - jmp con.msg_loop -con.set_title: - push 71 - pop eax - push 1 - pop ebx - mov ecx, [con.title] - int 0x40 - jmp con.msg_loop -con.redraw_image: - call con.data2image - call con.draw_image - jmp con.msg_loop -con.getch: - mov eax, [con.input_start] - cmp eax, [con.input_end] - jz .noinput - mov ecx, [eax] - mov [con.entered_char], cx - inc eax - inc eax - cmp eax, con.input_buffer_end - jnz @f - mov eax, con.input_buffer -@@: - mov [con.input_start], eax - jmp con.msg_loop -.noinput: - mov [con.bGetchRequested], 1 - jmp con.msg_loop -con.mouse: - xor eax, eax - xchg eax, dword [con.bUpPressed] - mov dword [con.bUpPressed_saved], eax - push 37 - pop eax - push 2 - pop ebx - int 0x40 - test al, 1 - jnz @f - cmp [con.vscroll_pt], -1 - jz .redraw_if_needed - or [con.vscroll_pt], -1 -.redraw_if_needed: - cmp dword [con.bUpPressed_saved], 0 - jnz con.redraw_image - jmp con.msg_loop -@@: - mov al, 37 - dec ebx - int 0x40 - movsx ebx, ax - sar eax, 16 - cmp [con.vscroll_pt], -1 - jnz .vscrolling - test ebx, ebx - js .redraw_if_needed - sub ax, [con.data_width] - jb .redraw_if_needed - cmp eax, con.vscroll_width - jae .redraw_if_needed - cmp ebx, con.vscroll_btn_height - jb .up - sub bx, [con.data_height] - jae .redraw_if_needed - cmp bx, -con.vscroll_btn_height - jge .down - add bx, [con.data_height] - sub bx, word [con.vscrollbar_pos] - jl .vscroll_up - cmp bx, word [con.vscrollbar_size] - jl .vscroll -.vscroll_down: - cmp [con.bScrollingDown_saved], 0 - jz .vscroll_down_first - cmp [con.bScrollingDown_saved], 1 - jz .vscroll_down_wasfirst - mov [con.bScrollingDown], 2 -.vscroll_down_do: - mov eax, [con.wnd_ypos] - add eax, [con.wnd_height] - dec eax - mov ebx, [con.scr_height] - sub ebx, [con.wnd_height] - cmp eax, ebx - jb @f - mov eax, ebx -@@: - mov [con.wnd_ypos], eax - jmp con.redraw_image -.vscroll_down_first: - push 26 - pop eax - push 9 - pop ebx - int 0x40 - mov [con.scroll_down_first_time], eax - mov [con.bScrollingDown], 1 - jmp .vscroll_down_do -.vscroll_down_wasfirst: - push 26 - pop eax - push 9 - pop ebx - int 0x40 - sub eax, [con.scroll_down_first_time] - cmp eax, 25 - jb @f - mov [con.bScrollingDown], 2 - jmp .vscroll_down_do -@@: - mov [con.bScrollingDown], 1 - jmp con.msg_loop -.vscroll_up: - cmp [con.bScrollingUp_saved], 0 - jz .vscroll_up_first - cmp [con.bScrollingUp_saved], 1 - jz .vscroll_up_wasfirst - mov [con.bScrollingUp], 2 -.vscroll_up_do: - mov eax, [con.wnd_ypos] - inc eax - sub eax, [con.wnd_height] - jns @f - xor eax, eax -@@: - mov [con.wnd_ypos], eax - jmp con.redraw_image -.vscroll_up_first: - push 26 - pop eax - push 9 - pop ebx - int 0x40 - mov [con.scroll_up_first_time], eax - mov [con.bScrollingUp], 1 - jmp .vscroll_up_do -.vscroll_up_wasfirst: - push 26 - pop eax - push 9 - pop ebx - int 0x40 - sub eax, [con.scroll_up_first_time] - cmp eax, 25 - jb @f - mov [con.bScrollingUp], 2 - jmp .vscroll_up_do -@@: - mov [con.bScrollingUp], 1 - jmp con.msg_loop -.up: - cmp [con.bUpPressed_saved], 0 - jz .up_first - cmp [con.bUpPressed_saved], 1 - jz .up_wasfirst - mov [con.bUpPressed], 2 -.up_do: - mov eax, [con.wnd_ypos] - dec eax - js @f - mov [con.wnd_ypos], eax -@@: - jmp con.redraw_image -.up_first: - push 26 - pop eax - push 9 - pop ebx - int 0x40 - mov [con.up_first_time], eax - mov [con.bUpPressed], 1 - jmp .up_do -.up_wasfirst: - push 26 - pop eax - push 9 - pop ebx - int 0x40 - sub eax, [con.up_first_time] - cmp eax, 25 - jb @f - mov [con.bUpPressed], 2 - jmp .up_do -@@: - mov [con.bUpPressed], 1 - jmp con.msg_loop -.down: - cmp [con.bDownPressed_saved], 0 - jz .down_first - cmp [con.bDownPressed_saved], 1 - jz .down_wasfirst - mov [con.bDownPressed], 2 -.down_do: - mov eax, [con.scr_height] - sub eax, [con.wnd_height] - jbe con.redraw_image - cmp [con.wnd_ypos], eax - jae con.redraw_image - inc [con.wnd_ypos] - jmp con.redraw_image -.down_first: - push 26 - pop eax - push 9 - pop ebx - int 0x40 - mov [con.down_first_time], eax - mov [con.bDownPressed], 1 - jmp .down_do -.down_wasfirst: - push 26 - pop eax - push 9 - pop ebx - int 0x40 - sub eax, [con.down_first_time] - cmp eax, 25 - jb @f - mov [con.bDownPressed], 2 - jmp .down_do -@@: - mov [con.bDownPressed], 1 - jmp con.msg_loop -.vscroll: - mov [con.vscroll_pt], ebx - call con.draw_image - jmp con.msg_loop -.vscrolling: - sub ebx, [con.vscroll_pt] - sub ebx, con.vscroll_btn_height - jge @f - xor ebx, ebx -@@: - movzx eax, [con.data_height] - sub eax, 2*con.vscroll_btn_height - sub eax, [con.vscrollbar_size] - cmp ebx, eax - jb @f - lea ebx, [eax-1] -@@: - xchg eax, ebx - mov edx, [con.scr_height] - sub edx, [con.wnd_height] - inc edx - mul edx - div ebx - cmp [con.wnd_ypos], eax - jz con.msg_loop - mov [con.wnd_ypos], eax - jmp con.redraw_image - -con.draw_window: - push 12 - pop eax - xor ebx, ebx - inc ebx - int 0x40 - mov al, 48 - mov bl, 4 - int 0x40 - mov ebx, [con.def_wnd_x-2] - mov bx, word [con.wnd_width] - imul bx, font_width - add bx, 5+5-1 - mov ecx, [con.def_wnd_y-2] - mov cx, word [con.wnd_height] - imul cx, font_height - lea ecx, [ecx+eax+5-1] - mov edx, 0x33000000 - mov edi, [con.title] -; place for scrollbar - mov eax, [con.wnd_height] - cmp eax, [con.scr_height] - jae @f - add ebx, con.vscroll_width -@@: - xor eax, eax - int 0x40 - call con.draw_image - push 12 - pop eax - push 2 - pop ebx - int 0x40 - ret - -con.draw_image: - xor edx, edx - mov ecx, [con.wnd_width] - imul ecx, font_width - mov [con.data_width], cx - shl ecx, 16 - mov cx, word [con.wnd_height] - imul cx, font_height - mov [con.data_height], cx - mov ebx, [con.image] - push 65 - pop eax - xor ebp, ebp - mov edi, con.colors - push 8 - pop esi - int 0x40 - mov al, 7 - mov edx, [con.wnd_height] - cmp edx, [con.scr_height] - jae .skip_vscroll - push ecx - mov edx, ecx - xor dx, dx - mov ebx, con.vscroll_btn3 - cmp [con.bUpPressed], 0 - jnz @f - mov ebx, con.vscroll_btn1 -@@: - mov ecx, con.vscroll_width*65536 + con.vscroll_btn_height - int 0x40 - pop edx - sub dx, con.vscroll_btn_height - mov ebx, con.vscroll_btn4 - cmp [con.bDownPressed], 0 - jnz @f - mov ebx, con.vscroll_btn2 -@@: - int 0x40 - push edx -; Вычисляем высоту бегунка - mov ax, dx - sub eax, con.vscroll_btn_height - mov ecx, eax - mul [con.wnd_height] - div [con.scr_height] - cmp eax, 5 - jae @f - mov al, 5 -@@: -; eax = высота бегунка. Вычисляем положение бегунка - mov [con.vscrollbar_size], eax - xchg eax, ecx - sub eax, ecx - mul [con.wnd_ypos] - mov ebx, [con.scr_height] - sub ebx, [con.wnd_height] - div ebx - pop edx - push edx -; ecx = высота бегунка, eax = положение - add eax, con.vscroll_btn_height - mov [con.vscrollbar_pos], eax - mov ebx, con.vscroll_bgr2 - cmp [con.bScrollingUp], 0 - jnz @f - mov ebx, con.vscroll_bgr1 -@@: - mov ecx, con.vscroll_width*65536 + con.vscroll_bgr_height - push eax - push 7 - pop eax - mov dx, con.vscroll_btn_height - call .vpattern - mov dx, word [con.vscrollbar_pos] - add dx, word [con.vscrollbar_size] - mov cx, con.vscroll_bgr_height - mov ebx, con.vscroll_bgr2 - cmp [con.bScrollingDown], 0 - jnz @f - mov ebx, con.vscroll_bgr1 -@@: - call .vpattern - mov ecx, [con.vscrollbar_pos] - mov dx, cx - add ecx, [con.vscrollbar_size] - sub ecx, con.vscroll_bar_height3 - push ecx - mov ebx, con.vscroll_bar1 - mov ecx, con.vscroll_width*65536 + con.vscroll_bar_height1 - int 0x40 - add dx, cx - mov cx, con.vscroll_bar_height2 - mov ebx, con.vscroll_bar2 - call .vpattern - mov ebx, con.vscroll_bar3 - mov cx, con.vscroll_bar_height3 - int 0x40 -.skip_vscroll: - ret - -.vpattern: - push edx - add dx, cx - cmp dx, [esp+8] - pop edx - jbe @f - mov cx, [esp+4] - sub cx, dx - jz .ret -@@: - int 0x40 - add dx, cx - cmp dx, [esp+4] - jb .vpattern -.ret: - ret 4 - -align 4 -con.colors dd 0x000000, 0x000080, 0x008000, 0x008080 - dd 0x800000, 0x800080, 0x808000, 0xC0C0C0 - dd 0x808080, 0x0000FF, 0x00FF00, 0x00FFFF - dd 0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF - -scan_has_ascii: - dd 11011111111111111111111111111110b - dd 00000010001111111111101111111111b - dd 00000000000000000000000000000000b - dd 0 - -con.extended_alt: - db 00h,01h,78h,79h,7Ah,7Bh,7Ch,7Dh,7Eh,7Fh,80h,81h,82h,83h,0Eh,0A5h - db 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1Ah,1Bh,1Ch,00h,1Eh,1Fh - db 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,00h,2Bh,2Ch,2Dh,2Eh,2Fh - db 30h,31h,32h,33h,34h,35h,00h,37h,00h,39h,00h,68h,69h,6Ah,6Bh,6Ch - db 6Dh,6Eh,6Fh,70h,71h,00h,00h,97h,98h,99h,4Ah,9Bh,9Ch,9Dh,4Eh,9Fh - db 0A0h,0A1h,0A2h,0A3h,00h,00h,00h,8Bh,8Ch,00h,00h,00h,00h,00h,00h,00h - times 20h db 0 -con.extended_ctrl: - times 0Fh db %-1 - db 0x94 - times 2Bh db %-1 - db 5Eh,5Fh,60h,61h,62h,63h,64h,65h,66h,67h,00h,00h - db 77h,8Dh,84h,8Eh,73h,8Fh,74h,90h,75h,91h,76h,92h,93h,00h,00h,00h,89h,8Ah - times 0x80-0x59 db 0 -con.extended_shift: - times 3Bh db %-1 - db 54h,55h,56h,57h,58h,59h,5Ah,5Bh,5Ch,5Dh,00h,00h - db 47h,48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh,50h,51h,52h,53h,00h,00h,00h,87h,88h - times 0x80-0x59 db 0 - -; В текущей реализации значения по умолчанию таковы. -; В будущем они, возможно, будут считываться как параметры из ini-файла console.ini. -con.def_wnd_width dd 80 -con.def_wnd_height dd 25 -con.def_scr_width dd 80 -con.def_scr_height dd 300 -con.def_wnd_x dd 200 -con.def_wnd_y dd 50 - -con.vscroll_pt dd -1 - -align 16 -EXPORTS: - dd szStart, START - dd szVersion, 0x00020005 - dd szcon_init, con_init - dd szcon_write_asciiz, con_write_asciiz - dd szcon_printf, con_printf - dd szcon_exit, con_exit - dd szcon_get_flags, con_get_flags - dd szcon_set_flags, con_set_flags - dd szcon_kbhit, con_kbhit - dd szcon_getch, con_getch - dd szcon_getch2, con_getch2 - dd szcon_gets, con_gets - dd szcon_gets2, con_gets2 - dd szcon_get_font_height, con_get_font_height - dd szcon_get_cursor_height,con_get_cursor_height - dd szcon_set_cursor_height,con_set_cursor_height - dd szcon_cls, con_cls - dd szcon_get_cursor_pos, con_get_cursor_pos - dd szcon_set_cursor_pos, con_set_cursor_pos - - dd szcon_init0, con_init - dd szcon_write_asciiz0, con_write_asciiz - dd szcon_printf0, con_printf - dd szcon_exit0, con_exit - dd szcon_get_flags0, con_get_flags - dd szcon_set_flags0, con_set_flags - dd szcon_kbhit0, con_kbhit - dd szcon_getch0, con_getch - dd szcon_getch20, con_getch2 - dd szcon_gets0, con_gets - dd szcon_gets20, con_gets2 - dd szcon_get_font_height0, con_get_font_height - dd szcon_get_cursor_height0,con_get_cursor_height - dd szcon_set_cursor_height0,con_set_cursor_height - dd szcon_cls0, con_cls - dd szcon_get_cursor_pos0, con_get_cursor_pos - dd szcon_set_cursor_pos0, con_set_cursor_pos - dd 0 - -con_flags dd 7 -con.cursor_height dd (15*font_height+50)/100 -con.input_start dd con.input_buffer -con.input_end dd con.input_buffer - -con_esc_attr_n dd 0 -con_esc_attrs dd 0,0,0,0 -con_esc db 0 -con_sci db 0 - -con.entered_char dw -1 -con.bGetchRequested db 0 -con.bWasE0 db 0 - -szStart db 'START',0 - -szcon_init db 'con.init',0 -szcon_write_asciiz db 'con.write_asciiz',0 -szcon_printf db 'con.printf',0 -szcon_exit db 'con.exit',0 -szVersion db 'version',0 -szcon_get_flags db 'con.get_flags',0 -szcon_set_flags db 'con.set_flags',0 -szcon_kbhit db 'con.kbhit',0 -szcon_getch db 'con.getch',0 -szcon_getch2 db 'con.getch2',0 -szcon_gets db 'con.gets',0 -szcon_gets2 db 'con.gets2',0 -szcon_get_font_height db 'con.get_font_height',0 -szcon_get_cursor_height db 'con.get_cursor_height',0 -szcon_set_cursor_height db 'con.set_cursor_height',0 -szcon_cls db 'con.cls',0 -szcon_get_cursor_pos db 'con.get_cursor_pos',0 -szcon_set_cursor_pos db 'con.set_cursor_pos',0 - -szcon_init0 db 'con_init',0 -szcon_write_asciiz0 db 'con_write_asciiz',0 -szcon_printf0 db 'con_printf',0 -szcon_exit0 db 'con_exit',0 -szcon_get_flags0 db 'con_get_flags',0 -szcon_set_flags0 db 'con_set_flags',0 -szcon_kbhit0 db 'con_kbhit',0 -szcon_getch0 db 'con_getch',0 -szcon_getch20 db 'con_getch2',0 -szcon_gets0 db 'con_gets',0 -szcon_gets20 db 'con_gets2',0 -szcon_get_font_height0 db 'con_get_font_height',0 -szcon_get_cursor_height0 db 'con_get_cursor_height',0 -szcon_set_cursor_height0 db 'con_set_cursor_height',0 -szcon_cls0 db 'con_cls',0 -szcon_get_cursor_pos0 db 'con_get_cursor_pos',0 -szcon_set_cursor_pos0 db 'con_set_cursor_pos',0 - -con.thread_err db 'Cannot create console thread!',13,10,0 -con.nomem_err db 'Not enough memory!',13,10,0 -con.aFinished db ' [Finished]',0 -con.aNull db '(null)',0 -con.beep db 0x90, 0x3C, 0x00 -con.ipc_buf dd 0,8,0,0 - db 0 - -section '.data' data readable writable align 16 - -con.finished_title rb 256 - -con.cur_x rd 1 -con.cur_y rd 1 -con.wnd_xpos rd 1 -con.wnd_ypos rd 1 - -con.wnd_width rd 1 -con.wnd_height rd 1 -con.scr_width rd 1 -con.scr_height rd 1 -con.title rd 1 -con.data rd 1 -con.image rd 1 -con.console_tid rd 1 -con.data_width rw 1 -con.data_height rw 1 -con.vscrollbar_size rd 1 -con.vscrollbar_pos rd 1 -con.up_first_time rd 1 -con.down_first_time rd 1 -con.scroll_up_first_time rd 1 -con.scroll_down_first_time rd 1 -con.bUpPressed_saved rb 1 -con.bDownPressed_saved rb 1 -con.bScrollingUp_saved rb 1 -con.bScrollingDown_saved rb 1 - -con.input_buffer rw 128 -con.input_buffer_end = $ - -con.kbd_layout rb 128 - -; 1 = exit, 2 = set title, 3 = redraw, 4 = getch -con.thread_op rb 1 -con.bUpPressed rb 1 -con.bDownPressed rb 1 -con.bScrollingUp rb 1 -con.bScrollingDown rb 1 - -con.stack rb 1024 -con.stack_top = $ diff --git a/programs/system/launch/trunk/history.txt b/programs/system/launch/trunk/history.txt index 311645911c..d99f539414 100755 --- a/programs/system/launch/trunk/history.txt +++ b/programs/system/launch/trunk/history.txt @@ -1,29 +1,35 @@ ==================== Русский ==================== -0.1.4 - 0.9.03.2009 - vkos +0.1.5 - 25.10.2009 - vkos + * Использование функции get_option_str из libini (последней ревизии) вместо самостоятельного разбора + * Переход на новые имена при импорте (совместимость с библиотеками) +0.1.4 - 09.03.2009 - vkos * Исправлена ошибка разбора параметров (из-за неё программа могла вообще не работать) 0.1.3 - 20.02.2009 - vkos + Запуск с параметрами 0.1.2.1 - 20.02.2009 - vkos * Исправлен вызов printf 0.1.2 - 15.02.2009 - vkos - * Более подробные сообщения -0.1.1 - 14.02.2009 - vkos - + Реализован вывод в консоль - * Удалён импорт libio, т.к. она пока не нужна -0.1 - 13.02.2009 - vkos - + Реализовано чтение конфигурации и запуск программы (без аргументов) - + * Более подробные сообщения +0.1.1 - 14.02.2009 - vkos + + Реализован вывод в консоль + * Удалён импорт libio, т.к. она пока не нужна +0.1 - 13.02.2009 - vkos + + Реализовано чтение конфигурации и запуск программы (без аргументов) + ==================== English ==================== -0.1.4 - 0.9.03.2009 - vkos +0.1.5 - 25.10.2009 - vkos + * Using function get_option_str from libini (last revision) instead of independent parsing + * New import names (compatibility with libraries) +0.1.4 - 09.03.2009 - vkos * Parsing of arguments is fixed (the problem may cause non-working program) 0.1.3 - 20.02.2009 - vkos + Launching with arguments 0.1.2.1 - 20.02.2009 - vkos * Calling of printf is fixed 0.1.2 - 15.02.2009 - vkos - * More text in messages -0.1.1 - 14.02.2009 - vkos - + Implemented console output - * Importing libio is deleted because we don't need it now -0.1 - 13.02.2009 - vkos - + Implemented: reading configuration and running programme + * More text in messages +0.1.1 - 14.02.2009 - vkos + + Implemented console output + * Importing libio is deleted because we don't need it now +0.1 - 13.02.2009 - vkos + + Implemented: reading configuration and running programme diff --git a/programs/system/launch/trunk/launch.asm b/programs/system/launch/trunk/launch.asm index 50a87ad31e..02f265b6fa 100755 --- a/programs/system/launch/trunk/launch.asm +++ b/programs/system/launch/trunk/launch.asm @@ -17,8 +17,10 @@ ;; For more details see readme.txt ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +format binary + APP_NAME fix 'Launch' -APP_VERSION fix '0.1.4' +APP_VERSION fix '0.1.5' use32 org 0x0 @@ -32,17 +34,23 @@ dd APP_STACK dd args dd path +define DEBUG_NO 0 +define DEBUG_CONSOLE 1 +define DEBUG_BOARD 2 ;; Not used now + define PATH_MAX_LEN 1024 define DEBUG_MAX_LEN 8 -define DEBUG_DEFAULT debug_no_num +define DEBUG_DEFAULT 0 define BUFF_SIZE 1024 -include 'macros.inc' -include 'proc32.inc' +include '../../../proc32.inc' +include '../../../macros.inc' include 'libio.inc' include 'mem.inc' include 'dll.inc' +;;-------------------------------------------------------------------------------------------------- +;; Basic initialization START: ;; Initialize process heap mcall 68,11 @@ -54,7 +62,9 @@ START: test eax, eax jnz exit -read_ini: +;;-------------------------------------------------------------------------------------------------- +;; Reading config +read_ini_path: ;; Read search path ;; First read config in /sys/etc invoke ini.get_str, etc_cfg, cfg_main, cfg_path, search_path, PATH_MAX_LEN, empty_str @@ -89,64 +99,26 @@ read_ini: ;; Read ini invoke ini.get_str, path, cfg_main, cfg_path, edi, PATH_MAX_LEN, empty_str -read_ini_debug: +read_ini_debug: ;; Read debug options ;; Read debug options from config files - invoke ini.get_str, etc_cfg, cfg_debug, cfg_debug, debug_option, DEBUG_MAX_LEN, DEBUG_DEFAULT - invoke ini.get_str, path, cfg_debug, cfg_debug, debug_option, DEBUG_MAX_LEN, debug_option - - ;; Now convert debug_option from string to number of debug mode - mov ebx, modes-4 -.convert: - mov al, byte [debug_option] - cmp al, 10 - jbe .converted - -.convert_nxt: - add ebx, 4 - mov esi, dword [ebx] - test esi, esi - je .set_default ;; String is incorrect, so set default - mov edi, debug_option -.conv_loop: - mov al, byte [esi] - cmp al, byte [edi] - jne .convert_nxt ;; Not equal, so try next - test al, al - je .found ;; Equal, end of loop - inc esi - inc edi - jmp .conv_loop - -.set_default: - mov al, byte [DEBUG_DEFAULT] - mov byte [debug_option], al - jmp .converted - -.found: - sub ebx, modes - shr ebx, 2 - add ebx, modes_nums - mov al, byte [ebx] - mov byte [debug_option], al - -.converted: - dec al - test al, al + invoke ini.get_option_str, etc_cfg, cfg_debug, cfg_debug, debug_strings, DEBUG_MAX_LEN, DEBUG_DEFAULT + invoke ini.get_option_str, path, cfg_debug, cfg_debug, debug_strings, DEBUG_MAX_LEN, eax + mov [debug_option], eax + + test eax, eax ;; No console je .ok - dec al - test al, al - je .con_init + + jmp .con_init -.noconsole: - mov al, 1 - mov byte [debug_option], al +.console_err: + mov dword [debug_option], 0 jmp .ok .con_init: stdcall dll.Load, consoleImport test eax, eax - jnz .noconsole - invoke con.init, -1, -1, -1, -1, WinTitle + jnz .console_err + invoke con.init, -1, -1, -1, -1, window_title .read_level: invoke ini.get_int, etc_cfg, cfg_debug, cfg_level, 0 @@ -154,10 +126,19 @@ read_ini_debug: mov dword [debug_level], eax .ok: +; read_ini_kobra: +; invoke ini.get_str, etc_cfg, cfg_kobra, cfg_use, kobra_use, KOBRA_USE_MAX_LEN, KOBRA_USE_DEFAULT +; invoke ini.get_str, path, cfg_kobra, cfg_use, kobra_use, KOBRA_USE_MAX_LEN, kobra_use +; +; ;; Now convert string option to acceptable type + + +;;-------------------------------------------------------------------------------------------------- +;; Parse command line options parse_args: ;; Now parse command line arguments ;; TODO: use optparse library - ;; Currently the only argument to parse is program name + ;; Currently the only argument to parse is program name with its' arguments .skip_spaces: mov ecx, -1 @@ -184,7 +165,8 @@ parse_args: dec edi ;; Now edi = program name - ;; End of preparations! Now we can find file and launch it. +;;-------------------------------------------------------------------------------------------------- +;; Finding file search_file: push edi mov esi, search_path @@ -197,7 +179,7 @@ search_file: .prn_dbg: push eax mov al, byte [debug_option] - dec al +; dec al test al, al je .prn_stp mov eax, dword [debug_level] @@ -253,15 +235,14 @@ search_file: cmp eax, 0 jl .loop +;;-------------------------------------------------------------------------------------------------- +;; Exit exit: push eax ;; If console is present we should write some info mov al, byte [debug_option] - cmp al, 2 - je .write_console - -.close: - mcall -1 + cmp al, DEBUG_CONSOLE + jne .close .write_console: pop eax @@ -275,52 +256,60 @@ exit: cinvoke con.printf, message_error, edi .wr_end: invoke con.exit, 0 - jmp .close + +.close: + mcall -1 + +;; End of code +;;-------------------------------------------------------------------------------------------------- align 16 importTable: -library \ - libini, 'libini.obj';, \ + +library libini, 'libini.obj' ;, \ ; libio, 'libio.obj', \ import libini, \ - ini.get_str ,'ini.get_str', \ -\; ini.set_str ,'ini.set_str', \ - ini.get_int ,'ini.get_int';, \ -\; ini.set_int ,'ini.set_int', \ -; ini.get_color,'ini.get_color', \ -; ini.set_color,'ini.set_color' + ini.get_str ,'ini_get_str', \ +\; ini.set_str ,'ini_set_str', \ + ini.get_int ,'ini_get_int', \ +\; ini.set_int ,'ini_set_int', \ +\; ini.get_color ,'ini_get_color', \ +\; ini.set_color ,'ini_set_color', \ + ini.get_option_str ,'ini_get_option_str';, \ ;import libio, \ -; file.find_first,'file.find_first', \ -; file.find_next ,'file.find_next', \ -; file.find_close,'file.find_close', \ -; file.size ,'file.size', \ -; file.open ,'file.open', \ -; file.read ,'file.read', \ -; file.write ,'file.write', \ -; file.seek ,'file.seek', \ -; file.tell ,'file.tell', \ -; file.eof? ,'file.eof?', \ -; file.truncate ,'file.truncate', \ -; file.close ,'file.close' +; file_find_first,'file_find_first', \ +; file_find_next ,'file_find_next', \ +; file_find_close,'file_find_close', \ +; file_size ,'file_size', \ +; file_open ,'file_open', \ +; file_read ,'file_read', \ +; file_write ,'file_write', \ +; file_seek ,'file_seek', \ +; file_tell ,'file_tell', \ +; file_eof? ,'file_eof?', \ +; file_truncate ,'file_truncate', \ +; file_close ,'file_close' consoleImport: library \ conlib, 'console.obj' -import conlib, \ - con.init, 'con.init',\ - con.exit, 'con.exit',\ - con.printf, 'con.printf';,\ -; con.write_asciiz, 'con.write_asciiz' +import conlib,\ + con.init, 'con_init',\ + con.exit, 'con_exit',\ + con.printf, 'con_printf' ;,\ +; con.write_asciiz, 'con_write_asciiz' align 16 APP_DATA: -WinTitle: +;; Window title +window_title: db APP_NAME, ' ', APP_VERSION, 0 +;; Messages message_dbg_not_found: db '%s not found', 10, 0 @@ -330,8 +319,11 @@ message_error: message_ok: db '%s loaded succesfully. PID: %d (0x%X)' +;; Empty string empty_str: db 0 + +;; Configuration path etc_cfg: db '/sys/etc/' cfg_name: @@ -339,6 +331,7 @@ cfg_name: cfg_ext: db '.cfg', 0 +;; String in config file cfg_main: db 'main', 0 cfg_path: @@ -348,7 +341,8 @@ cfg_debug: cfg_level: db 'level', 0 -modes: +;; List of debug modes for parsing debug option +debug_strings: dd debug_no dd debug_console dd 0 @@ -358,16 +352,19 @@ debug_no: debug_console: db 'console', 0 -modes_nums: -debug_no_num: - db 1 - -debug_console_num: - db 2 +; modes_nums: +; debug_no_num: +; db 1 +; +; debug_console_num: +; db 2 debug_level: dd 0 +debug_kobra: + db 0 + LaunchStruct FileInfoRun args: db 0 @@ -379,12 +376,15 @@ prog_args: path: rb 1024 +;; Search path will be here search_path: rb PATH_MAX_LEN +;; debug option as number debug_option: - rb DEBUG_MAX_LEN + dd 0 +;; Buffer buff: rb BUFF_SIZE diff --git a/programs/system/launch/trunk/launch.dbg b/programs/system/launch/trunk/launch.dbg deleted file mode 100755 index 2b21c59e8b..0000000000 --- a/programs/system/launch/trunk/launch.dbg +++ /dev/null @@ -1,349 +0,0 @@ -0x186 START -0x972 APP_END -0x267D MEM_END -0x267D APP_STACK -0x971 args -0xA75 path -0x0 RECT.left -0x4 RECT.top -0x8 RECT.right -0xC RECT.bottom -0x0 BOX.left -0x4 BOX.top -0x8 BOX.width -0xC BOX.height -0x0 process_information.cpu_usage -0x4 process_information.window_stack_position -0x6 process_information.window_stack_value -0x8 process_information.anonymous?K -0xA process_information.process_name -0x16 process_information.memory_start -0x1A process_information.used_memory -0x1E process_information.PID -0x22 process_information.box -0x22 process_information.box.left -0x26 process_information.box.top -0x2A process_information.box.width -0x2E process_information.box.height -0x32 process_information.slot_state -0x34 process_information.anonymous?L -0x36 process_information.client_box -0x36 process_information.client_box.left -0x3A process_information.client_box.top -0x3E process_information.client_box.width -0x42 process_information.client_box.height -0x46 process_information.wnd_state -0x47 process_information.anonymous?M -0x0 system_colors.frame -0x4 system_colors.grab -0x8 system_colors.grab_button -0xC system_colors.grab_button_text -0x10 system_colors.grab_text -0x14 system_colors.work -0x18 system_colors.work_button -0x1C system_colors.work_button_text -0x20 system_colors.work_text -0x24 system_colors.work_graph -0x0 FILEDATE.Second -0x1 FILEDATE.Minute -0x2 FILEDATE.Hour -0x3 FILEDATE.anonymous?0D -0x4 FILEDATE.Day -0x5 FILEDATE.Month -0x6 FILEDATE.Year -0x0 FILEINFO.Attributes -0x4 FILEINFO.IsUnicode -0x5 FILEINFO.anonymous?0U -0x8 FILEINFO.DateCreate -0x8 FILEINFO.DateCreate.Second -0x9 FILEINFO.DateCreate.Minute -0xA FILEINFO.DateCreate.Hour -0xB FILEINFO.DateCreate.anonymous?0D -0xC FILEINFO.DateCreate.Day -0xD FILEINFO.DateCreate.Month -0xE FILEINFO.DateCreate.Year -0x10 FILEINFO.DateAccess -0x10 FILEINFO.DateAccess.Second -0x11 FILEINFO.DateAccess.Minute -0x12 FILEINFO.DateAccess.Hour -0x13 FILEINFO.DateAccess.anonymous?0D -0x14 FILEINFO.DateAccess.Day -0x15 FILEINFO.DateAccess.Month -0x16 FILEINFO.DateAccess.Year -0x18 FILEINFO.DateModify -0x18 FILEINFO.DateModify.Second -0x19 FILEINFO.DateModify.Minute -0x1A FILEINFO.DateModify.Hour -0x1B FILEINFO.DateModify.anonymous?0D -0x1C FILEINFO.DateModify.Day -0x1D FILEINFO.DateModify.Month -0x1E FILEINFO.DateModify.Year -0x20 FILEINFO.Size -0x0 sub?0m.sec -0x1 sub?0m.min -0x2 sub?0m.hour -0x0 FileDateTime.time -0x0 sub?0x.day -0x1 sub?0x.month -0x2 sub?0x.year -0x0 FileDateTime.date -0x0 FileInfoBlock.Function -0x4 FileInfoBlock.Position -0x8 FileInfoBlock.Flags -0xC FileInfoBlock.Count -0x10 FileInfoBlock.Buffer -0x14 FileInfoBlock.anonymous?1B -0x15 FileInfoBlock.FileName -0x0 FileInfoHeader.Version -0x4 FileInfoHeader.FilesRead -0x8 FileInfoHeader.FilesCount -0xC FileInfoHeader.anonymous?1S -0x0 sub?1j.FileSizeLow -0x4 sub?1j.FileSizeHigh -0x0 FileInfoA.FileSize -0x0 FileInfoA.Attributes -0x4 FileInfoA.Flags -0x8 FileInfoA.DateCreate -0x8 FileInfoA.DateCreatesub?0m -0x8 FileInfoA.DateCreate.time -0x8 FileInfoA.DateCreatesub?0p -0x8 FileInfoA.DateCreate.sec -0x9 FileInfoA.DateCreate.min -0xA FileInfoA.DateCreate.hour -0xC FileInfoA.DateCreatesub?0x -0xC FileInfoA.DateCreate.date -0xC FileInfoA.DateCreatesub?10 -0xC FileInfoA.DateCreate.day -0xD FileInfoA.DateCreate.month -0xE FileInfoA.DateCreate.year -0x10 FileInfoA.DateAccess -0x10 FileInfoA.DateAccesssub?0m -0x10 FileInfoA.DateAccess.time -0x10 FileInfoA.DateAccesssub?0p -0x10 FileInfoA.DateAccess.sec -0x11 FileInfoA.DateAccess.min -0x12 FileInfoA.DateAccess.hour -0x14 FileInfoA.DateAccesssub?0x -0x14 FileInfoA.DateAccess.date -0x14 FileInfoA.DateAccesssub?10 -0x14 FileInfoA.DateAccess.day -0x15 FileInfoA.DateAccess.month -0x16 FileInfoA.DateAccess.year -0x18 FileInfoA.DateModify -0x18 FileInfoA.DateModifysub?0m -0x18 FileInfoA.DateModify.time -0x18 FileInfoA.DateModifysub?0p -0x18 FileInfoA.DateModify.sec -0x19 FileInfoA.DateModify.min -0x1A FileInfoA.DateModify.hour -0x1C FileInfoA.DateModifysub?0x -0x1C FileInfoA.DateModify.date -0x1C FileInfoA.DateModifysub?10 -0x1C FileInfoA.DateModify.day -0x1D FileInfoA.DateModify.month -0x1E FileInfoA.DateModify.year -0x28 FileInfoA.FileName -0x0 sub?27.FileSizeLow -0x4 sub?27.FileSizeHigh -0x0 FileInfoW.FileSize -0x0 FileInfoW.Attributes -0x4 FileInfoW.Flags -0x8 FileInfoW.DateCreate -0x8 FileInfoW.DateCreatesub?0m -0x8 FileInfoW.DateCreate.time -0x8 FileInfoW.DateCreatesub?0p -0x8 FileInfoW.DateCreate.sec -0x9 FileInfoW.DateCreate.min -0xA FileInfoW.DateCreate.hour -0xC FileInfoW.DateCreatesub?0x -0xC FileInfoW.DateCreate.date -0xC FileInfoW.DateCreatesub?10 -0xC FileInfoW.DateCreate.day -0xD FileInfoW.DateCreate.month -0xE FileInfoW.DateCreate.year -0x10 FileInfoW.DateAccess -0x10 FileInfoW.DateAccesssub?0m -0x10 FileInfoW.DateAccess.time -0x10 FileInfoW.DateAccesssub?0p -0x10 FileInfoW.DateAccess.sec -0x11 FileInfoW.DateAccess.min -0x12 FileInfoW.DateAccess.hour -0x14 FileInfoW.DateAccesssub?0x -0x14 FileInfoW.DateAccess.date -0x14 FileInfoW.DateAccesssub?10 -0x14 FileInfoW.DateAccess.day -0x15 FileInfoW.DateAccess.month -0x16 FileInfoW.DateAccess.year -0x18 FileInfoW.DateModify -0x18 FileInfoW.DateModifysub?0m -0x18 FileInfoW.DateModify.time -0x18 FileInfoW.DateModifysub?0p -0x18 FileInfoW.DateModify.sec -0x19 FileInfoW.DateModify.min -0x1A FileInfoW.DateModify.hour -0x1C FileInfoW.DateModifysub?0x -0x1C FileInfoW.DateModify.date -0x1C FileInfoW.DateModifysub?10 -0x1C FileInfoW.DateModify.day -0x1D FileInfoW.DateModify.month -0x1E FileInfoW.DateModify.year -0x28 FileInfoW.FileName -0x0 sub?2V.Zero -0x1 sub?2V.FileNameP -0x0 FileInfoRun.FileName -0x0 FileInfoRun.Function -0x4 FileInfoRun.Flags -0x8 FileInfoRun.Arguments -0xC FileInfoRun.Reserved0 -0x10 FileInfoRun.Reserved1 -0x0 FileInfo -0x0 FileInfo.Attributes -0x4 FileInfo.Flags -0x8 FileInfo.DateCreate -0x8 FileInfo.DateCreatesub?0m -0x8 FileInfo.DateCreate.time -0x8 FileInfo.DateCreatesub?0p -0x8 FileInfo.DateCreate.sec -0x9 FileInfo.DateCreate.min -0xA FileInfo.DateCreate.hour -0xC FileInfo.DateCreatesub?0x -0xC FileInfo.DateCreate.date -0xC FileInfo.DateCreatesub?10 -0xC FileInfo.DateCreate.day -0xD FileInfo.DateCreate.month -0xE FileInfo.DateCreate.year -0x10 FileInfo.DateAccess -0x10 FileInfo.DateAccesssub?0m -0x10 FileInfo.DateAccess.time -0x10 FileInfo.DateAccesssub?0p -0x10 FileInfo.DateAccess.sec -0x11 FileInfo.DateAccess.min -0x12 FileInfo.DateAccess.hour -0x14 FileInfo.DateAccesssub?0x -0x14 FileInfo.DateAccess.date -0x14 FileInfo.DateAccesssub?10 -0x14 FileInfo.DateAccess.day -0x15 FileInfo.DateAccess.month -0x16 FileInfo.DateAccess.year -0x18 FileInfo.DateModify -0x18 FileInfo.DateModifysub?0m -0x18 FileInfo.DateModify.time -0x18 FileInfo.DateModifysub?0p -0x18 FileInfo.DateModify.sec -0x19 FileInfo.DateModify.min -0x1A FileInfo.DateModify.hour -0x1C FileInfo.DateModifysub?0x -0x1C FileInfo.DateModify.date -0x1C FileInfo.DateModifysub?10 -0x1C FileInfo.DateModify.day -0x1D FileInfo.DateModify.month -0x1E FileInfo.DateModify.year -0x20 FileInfosub?1j -0x20 FileInfo.FileSize -0x20 FileInfosub?1m -0x20 FileInfo.FileSizeLow -0x24 FileInfo.FileSizeHigh -0x28 FileInfo.FileName -0x24 mem.Alloc -0x3A mem.ReAlloc -0x61 mem.Free -0x7B dll.Load -0x81 dll.Load.next_lib -0xBC dll.Load.exit -0x166 s_libdir.fname -0x15D s_libdir -0xC2 dll.Load.fail -0xCC dll.Link -0xFA dll.Init -0xF5 dll.Link.done -0xD7 dll.Link.next -0x112 dll.GetProcAddress -0x11A dll.GetProcAddress.next -0x139 dll.GetProcAddress.end -0x13D strcmp -0x136 dll.GetProcAddress.ok -0x154 strcmp.fail -0x157 strcmp.ok -0x3DD exit -0x430 importTable -0x1A8 read_ini -0x516 etc_cfg -0x52A cfg_main -0x52F cfg_path -0xE75 search_path -0x515 empty_str -0x448 ini.get_str -0x1CC read_ini.find_path_eol -0x525 cfg_ext -0x1E7 read_ini.find_search_eol -0x21D read_ini_debug -0x534 cfg_debug -0x1275 debug_option -0x557 debug_no_num -0x540 modes -0x264 read_ini_debug.convert -0x2AB read_ini_debug.converted -0x26D read_ini_debug.convert_nxt -0x289 read_ini_debug.set_default -0x27B read_ini_debug.conv_loop -0x295 read_ini_debug.found -0x557 modes_nums -0x313 read_ini_debug.ok -0x2C0 read_ini_debug.con_init -0x2B7 read_ini_debug.noconsole -0x46C consoleImport -0x4C0 WinTitle -0x484 con.init -0x2E1 read_ini_debug.read_level -0x53A cfg_level -0x44C ini.get_int -0x559 debug_level -0x313 parse_args -0x313 parse_args.skip_spaces -0xA71 prog_args -0x32D search_file -0x336 search_file.loop -0x33E search_file.prn_dbg -0x36C search_file.prn_end -0x36B search_file.prn_stp -0x358 search_file.prn_1 -0x4CD message_dbg_not_found -0x127D buff -0x48C con.printf -0x376 search_file.copy_path -0x382 search_file.copy_file -0x386 search_file.cp_file_loop -0x392 search_file.copy_end -0x55D LaunchStruct.Function -0x565 LaunchStruct.Arguments -0x561 LaunchStruct.Flags -0x571 LaunchStruct.Zero -0x572 LaunchStruct.FileNameP -0x55D LaunchStruct -0x3EC exit.write_console -0x3E7 exit.close -0x408 exit.write_error -0x3F1 exit.write_launched -0x4F0 message_ok -0x418 exit.wr_end -0x4DB message_error -0x488 con.exit -0x448 __libini_library_table__ -0x43C __libini_library_name__ -0x454 __ini.get_str_import_name__ -0x460 __ini.get_int_import_name__ -0x484 __conlib_library_table__ -0x478 __conlib_library_name__ -0x494 __con.init_import_name__ -0x4A0 __con.exit_import_name__ -0x4AC __con.printf_import_name__ -0x4C0 APP_DATA -0x51F cfg_name -0x54C debug_no -0x54F debug_console -0x558 debug_console_num -0x569 LaunchStruct.Reserved0 -0x56D LaunchStruct.Reserved1 -0x571 LaunchStructsub?2V -0x571 LaunchStruct.FileName -0x571 LaunchStructsub?2Y diff --git a/programs/system/launch/trunk/readme.txt b/programs/system/launch/trunk/readme.txt index 782e98cd19..d007d80599 100755 --- a/programs/system/launch/trunk/readme.txt +++ b/programs/system/launch/trunk/readme.txt @@ -1,5 +1,5 @@ ==================== Русский ==================== -Версия: 0.1.4 +Версия: 0.1.5 Launch - программа для запуска приложения из директорий поиска. При запуске читает файл launch.cfg в /sys/etc, затем в директории запуска. После этого смотрит параметры командной строки. Приоритет параметров - по @@ -10,10 +10,10 @@ main.path - debug.debug - опции отладки (no - нет отладки или console - вывод через консоль) debug.level - уровень отладки (0 - только сообщение удачно/неудачно, 1 - выводить сообщение для каждой директории) ПРЕДУПРЕЖДЕНИЕ: -для вывода в консоль нужна изменённая библиотека console.obj! +для работы нужна libini не старее ревизии #1235. ==================== English ==================== -Version: 0.1.4 +Version: 0.1.5 Launch is a programme that launches applications from search dirictories. On the start it reads file launch.cfg in /sys/etc and in current dirictory. Than it reads command line arguments. Priority of arguments is as reading. @@ -23,4 +23,4 @@ main.path - path to search dirictories debug.debug - debug options (no or console) debug.level - debug level (0 - show only ok/error messages, 1 - show for each directory) ATTENTION: -to use console output you need new console.obj library! \ No newline at end of file +you need libini from at least #1235 revision. \ No newline at end of file