Czy istnieje jakaś wbudowana instrukcja do czyszczenia okna konsoli w masmie?Próbowałem użyć clrscr z irvine32.inc,ale nie mogłem znaleźć kompatybilnej z nią macros.inc
Masz msvcrt.inc więc możesz zrobić system("cls");
Jest system( "cls" ); ale zaraz szereg super zaawansowanych programistów stwierdzi że używanie system() jest niebezpieczne. Ja stosowałem środek zastępczy
for (int i = 0; i < 20; i++) {
std::cout << std::endl;
}
Taki kod spowoduje 20 przejść do nowych linii (w potocznym języku : "Enterów"...)...
Albo clrscr(); z conio.h... No ja nie pomogę ci z kompatybilnością.
Do prostych apek w C używam czegoś takiego;
void clear_screen() {
int n;
for (n = 0; n < 10; n++)
printf( "\n\n\n\n\n\n\n\n\n\n" );
}
poznać np. ncurses, ale nie chce mi się.
ze źródeł Free Pascala:
procedure ClrScr;
var
DestCoor: TCoord;
numChars, x : DWord;
begin
DestCoor.X := WindMinX - 1;
DestCoor.Y := WindMinY - 1;
numChars := (WindMaxX - WindMinX + 1);
repeat
FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TextAttr,
numChars, DestCoor, x);
FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), #32,
numChars, DestCoor, x);
inc(DestCoor.Y);
until DWord(DestCoor.Y)=WindMaxY;
GotoXY(1, 1);
end;
wygląda więc że nie ma cudownego rozwiązania, wszyscy robią na około.
Poradziłem sobie prościej
ClearScreen PROTO
a później invoke ClearScreen ;)
Nie wiedziałem o jej istnieniu sprawdziłem zaimplementowana jest w pliku m32lib/clearscr.inc
Deklarowana w masm32.inc i jako makro cls w macros.asm
ClearScreen proc
; -----------------------------------------------------------
; This procedure reads the column and row count, multiplies
; them together to get the number of characters that will fit
; onto the screen, writes that number of blank spaces to the
; screen and reposition the prompt at position 0,0.
; -----------------------------------------------------------
LOCAL hOutPut:DWORD
LOCAL noc :DWORD
LOCAL cnt :DWORD
LOCAL sbi :CONSOLE_SCREEN_BUFFER_INFO
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hOutPut, eax
invoke GetConsoleScreenBufferInfo,hOutPut,ADDR sbi
mov eax, sbi.dwSize ; 2 word values returned for screen size
; -----------------------------------------------
; extract the 2 values and multiply them together
; -----------------------------------------------
push ax
rol eax, 16
mov cx, ax
pop ax
mul cx
cwde
mov cnt, eax
invoke FillConsoleOutputCharacter,hOutPut,32,cnt,NULL,ADDR noc
invoke locate,0,0
ret
ClearScreen endp