Michael Matz schrieb:
Hi,
On Tue, 11 May 2004, Bastian Schern wrote:
Leider ist "string_ptr" immer NULL. Wie kommt das?
COLUMNS ist standardmaessig nicht exported. Und zwar deshalb weil es keinen Sinn macht, da sich waehrend des Programmlaufes die Groesse des Terminals ja aendern kann, Aenderungen im Environment aber nicht mehr vom Parent (der Shell, also dem Programm was diese Variable erst einmal setzt) vorgenommen werden koennen.
D.h. entweder du machst ein "export COLUMNS LINES" vor Programmaufruf, oder implementierst es richtig: D.h. ueber Terminal ioctls (TIOCGWINSZ und struct winsize. Man bekommt das Signal SIGWINCH wenn sich die Terminalgroesse aendert). Koennte vielleicht overkill sein.
Cool! Ich habe das jetzt so gemacht: // void progress( float factor ) {{{ void progress( float factor ) { static struct winsize winsz; ioctl( 0, TIOCGWINSZ, &winsz ); int MAX_CHARS = winsz.ws_col; if( MAX_CHARS > 8 ) MAX_CHARS -= 8; cout << setw( static_cast<int>( factor * MAX_CHARS ) ) << setfill( '#' ) << ""; cout << setw( MAX_CHARS - static_cast<int>( factor * MAX_CHARS ) ) << setfill( '·' ) << ""; cout << " " << setw( 6 ) << setfill( ' ' ) << setprecision( 2 ) << fixed << right << static_cast<float>( factor * 100 ) << "%"; cout << flush; cout << "\r"; } // }}} Signalverarbeitung benötige ich nicht, da ich die Funktion nur aufrufe, wenn sich etwas geändert hat. Vielen Dank Bastian