Я пишу простую программу часов с NASM. Я использую Ubuntu 14.10 Vagrant box под OSX через iTerm. Терминал - xterm, поэтому он должен быть совместим с VT-100.Команды VT-100 работают странно
Мне нужно удалить одну строку. Например, я ожидаю, что следующее поведение:
Hello, this is clock program
13:01:25 UTC+4
следующий момент:
Hello, this is clock program
13:01:26 UTC+4
Я написал следующие функции. Для печати:
func_print:
mov eax, sys_write
mov ebx, stdout
int 0x80
ret
Для ясно:
clr db 0x1b, "[K"
clr_len equ $-clr
...
func_clear:
mov ecx, clr
mov edx, clr_len
call func_print
Для сохранения и восстановления позиций я использую VT-100 и его команды: [7
и [8
соответственно:
csave db 0x1b, "[7"
csave_len equ $-csave
crestore db 0x1b, "[8"
crestore_len equ $-crestore
Мой код:
global _start
_start:
mov ecx, welcome
mov edx, welcome_len
call func_print
call func_print
call func_save_cursor_pos
mov dword [tv_sec], 2
mov dword [tv_usec], 0
call func_sleep
call func_clear
call func_restore_cursor_pos
mov ecx, welcome
mov edx, welcome_len
call func_print
jmp func_exit
Однако результат:
[email protected]:~$ ./run.sh
Hello, this is the clock program
Hello, this is the clock program
Hello, this is the clock program
[email protected]:~$
Если изменить clr
путем добавления [1A
или [1B
это, кажется, удаление строки в гораздо выше, чем это необходимо или ниже:
[email protected]:~$ ./run.sh
Hello, this is the clock program
Hello, this is the clock program
Hello, this is the clock program
[email protected]:~$
Как я могу исправить это ? Каков правильный код?
Поскольку вы обновляете только одну строку, считаете ли вы использование '\ r' вместо этого? –
Это всего лишь пример, я хотел бы обновить любое количество строк, на самом деле – ka2m