diff --git a/programs/develop/libraries/console/console.asm b/programs/develop/libraries/console/console.asm index 4a0e1604d4..daaf8fa4d1 100644 --- a/programs/develop/libraries/console/console.asm +++ b/programs/develop/libraries/console/console.asm @@ -1225,7 +1225,7 @@ con_getch: ret con_getch_closed: - or eax, -1 + xor eax, eax ret ; int __stdcall con_getch2(void); @@ -1255,8 +1255,6 @@ con_gets2: call con.get_data_ptr .loop: call con_getch2 - cmp eax, -1 - jz .closed test al, al jz .extended cmp al, 8 @@ -1413,6 +1411,8 @@ con_gets2: mov al, 0 mov ah, 0xF .extended: + test ah, ah + jz .closed xchg al, ah cmp al, 0x4B jz .left @@ -2273,7 +2273,7 @@ con.vscroll_pt dd -1 align 16 EXPORTS: dd szStart, START - dd szVersion, 0x00020006 + dd szVersion, 0x00020007 dd szcon_init, con_init dd szcon_write_asciiz, con_write_asciiz dd szcon_printf, con_printf diff --git a/programs/develop/libraries/console/console.txt b/programs/develop/libraries/console/console.txt index a4d6a65a9c..26ce0895fa 100644 --- a/programs/develop/libraries/console/console.txt +++ b/programs/develop/libraries/console/console.txt @@ -86,7 +86,7 @@ dword __stdcall con_set_flags(dword new_flags); Esc[C - переместить курсор на позиций вправо Esc[D - переместить курсор на позиций влево */ -/* сигнал о закрытии окна консоли; +/* сигнал о закрытии окна консоли; появился в версии 6 библиотеки; флаг игнорируется функцией con_set_flags */ #define CON_WINDOW_CLOSED 0x200 Значение по умолчанию для флагов = 7. @@ -108,15 +108,15 @@ int __stdcall con_getch(void); Для обычных символов возвращается ASCII-код. Для расширенных символов (например, Fx и стрелочек) первый вызов функции возвращает 0, а повторный вызов возвращает расширенный код (подобно DOS-функциям ввода). -Начиная с версии 6 библиотеки, после закрытия окна консоли возвращается -значение -1. +Начиная с версии 7 библиотеки, после закрытия окна консоли возвращается +значение 0. word __stdcall con_getch2(void); Считывает один символ с клавиатуры. Младший байт содержит ASCII-код клавиши (0 для расширенных символов), старший - расширенный код (подобно BIOS-функциям ввода). -Начиная с версии 6 библиотеки, после закрытия окна консоли возвращается -значение -1 (0xFFFF при интерпретации как word). +Начиная с версии 7 библиотеки, после закрытия окна консоли возвращается +значение 0. int __stdcall con_kbhit(void); Возвращает 1, если какая-то клавиша была нажата, 0 иначе. Для считывания diff --git a/programs/develop/libraries/console/examples/test_getch.asm b/programs/develop/libraries/console/examples/test_getch.asm index 7b6e6c2118..100398b2ca 100644 --- a/programs/develop/libraries/console/examples/test_getch.asm +++ b/programs/develop/libraries/console/examples/test_getch.asm @@ -68,6 +68,8 @@ mainloop: jmp mainloop extended: call [con_getch] + test eax, eax + jz done push eax push eax push string_extended diff --git a/programs/develop/libraries/console/examples/test_gets.asm b/programs/develop/libraries/console/examples/test_gets.asm index 542ebb6c55..9d3eb1fff6 100644 --- a/programs/develop/libraries/console/examples/test_gets.asm +++ b/programs/develop/libraries/console/examples/test_gets.asm @@ -41,7 +41,7 @@ start: ; for (;;) ; { ; con_write_asciiz("Enter string (empty for exit): "); -; con_gets(s,256); +; if (!con_gets(s,256)) break; ; if (s[0] == '\n') break; ; con_write_asciiz("You entered: "); ; con_write_asciiz(s); @@ -52,6 +52,8 @@ mainloop: push 256 push s call [con_gets] + test eax, eax + jz done cmp [s], 10 jz done push str2 diff --git a/programs/develop/libraries/console/examples/test_gets2.asm b/programs/develop/libraries/console/examples/test_gets2.asm index 22ee326bd6..827743d03c 100644 --- a/programs/develop/libraries/console/examples/test_gets2.asm +++ b/programs/develop/libraries/console/examples/test_gets2.asm @@ -41,7 +41,7 @@ start: ; for (;;) ; { ; con_write_asciiz("Enter string (empty for exit): "); -; con_gets2(mycallback,s,256); +; if (!con_gets2(mycallback,s,256)) break; ; if (s[0] == '\n') break; ; con_write_asciiz("You entered: "); ; con_write_asciiz(s); @@ -53,6 +53,8 @@ mainloop: push s push mycallback call [con_gets2] + test eax, eax + jz done cmp [s], 10 jz done push str2