Czy istnieje jakaś wbudowana instrukcja do czyszczenia okna konsoli w masmie?

0

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

0

Masz msvcrt.inc więc możesz zrobić system("cls");

0

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ą.

0

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ę.

0

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.

0

Poradziłem sobie prościej
ClearScreen PROTO
a później invoke ClearScreen ;)

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1