Zwężanie okna konsoli a śmieci na wyjściu

0

Mam problem w sytuacji kiedy konsola jest zwężona. Otóż pozostają śmieci ( pole "Destination" ) z wcześniejszego przebiegu pętli, która drukuje tekst i po tym przestawia kursor o 2 pozycje do góry + kasowanie linii.

Fragment pętli kodu wygląda tak:

// status aktualnie przetwarzanego pliku
		printf("File: %s | Resolution: %ix%i | Resize: %ix%i\033[K\n", buffer, width, height, nwidth, nheight);

		// zmiana wielkosci i stopien kompresji aktualnego pliku graficznego	
		MagickResizeImage(mWand, nwidth, nheight, filter, 1);
		MagickSetImageCompressionQuality(mWand, 90);

		// buffer: pelna sciezka do przekonwertowanego pliku
		sprintf(buffer, "%s/%s", pathDest, *(files+i));
		// zapis przekonwertowanego pliku do nowej lokalizacji
		MagickWriteImage(mWand, buffer);
			
		// drukowanie informacji o przebiegu konwersji
		printf("%3i) Destination: %s\033[K\n", i+1, buffer);
		progressBar(i, total, 20);
		printf("\033[F\033[F\033[K");	// przesuniecie kursora 2 stopnie do gory wraz z kasowaniem zawartosci tej czesci ekranu

Jeśli nie ma łamania linii w konsoli to jest OK:
ok.png

Po zmniejszeniu szerokości konsoli i rozciągnięciu go do prawidłowej wielkości mam dodatkowe śmieci ( pole "Destination" ):

bad.png

0

No cóż nie miałem wyjścia i rozwiązałem to w dość prymitywny sposób, poprzez sprawdzenie szerokości okna terminala i dopasowania paska dostępu tak aby się nie "łamał".

struct winsize console;
int maxstars = 0;
0

Cholerka zatwierdziło mi odpowiedź przez przypadek, tak więc kończę:

struct winsize console; // struktura dla pobrania szerokosci i wysokosci konsoli ( wymagany nagłowek: #include <sys/ioctl.h> )
int maxstars = 0;

/* POBRANIE ROZMIARU KONSOLI I USTAWIENIA SZEROKOSC PASKA POSTEPU */

ioctl(0, TIOCGWINSZ, &console);
maxstars = (console.ws_col < 40)?8:20;

....
// w pętli:
....

progressBar(i, total, maxstars);
printf("\033[F");

Innej opcji w tej sytuacji nie widzę, no chyba, że zastosowanie biblioteki ncurses, tak nie powinno być z tym problemów.

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