Verwendung des Pakets libcur
In diesem Abschnitt werden die Änderungen erläutert, die für Programme vorgenommen werden müssen, die das Paket libcur verwenden (Erweiterung des Pakets libcurses von AT & T).
Programme, die das Paket libcur verwenden (Erweiterung des Pakets libcurses von AT & T), müssen folgende Änderungen vornehmen:
- Entfernen Sie die Annahme, dass die Anzahl der Byte ein Zeichen in einem codierten Zeichensatz darstellen muss, auch die Anzeigespaltenbreite des Zeichens darstellt. Mit der Subroutine wcwidth (Breite) können Sie die Anzahl der Anzeigespalten ermitteln, die für den Breitzeichencode eines Zeichens erforderlich sind.
- NLSCHAR wird als WChar_Tneu definiert.
win->_y [y][x]verfügt über wchar_t -Codierungen.- Programme sollten keine bestimmten Codierungen auf dem WChar_Tannehmen.
- Programme sollten die Addstr, Waddstr, mvaddstrund mvwaddstr -Subroutinen anstelle der Hinzufügen -Familie von Subroutinen verwenden. Alle Zeichenfolgeargumente haben Mehrbyteformat.
- Die Hinzufügen und Waddch -Subroutinen akzeptieren eine WChar_T -Codierung des Zeichens. Programme, die diese Subroutinen verwenden, sollten sicherstellen, daß WChar_T beim Aufrufen dieser Funktionen verwendet wird. Die (x, y) werden um die Anzahl der Spalten erhöht, die von dem an diese Subroutinen übergebenen WChar_T belegt werden.
- Die Löschen, Wdelch, Mvdelchund Mvwdelch -Subroutinen unterstützen abhängig von der aktuellen Position von (x, y) das Löschen und Rückschritt bei Mehrbytezeichen. Wenn die aktuelle Spaltenposition (x, y) auf die erste oder zweite Spalte eines zweispaltigen Zeichens verweist, löscht die Subroutine Löschen beide Spalten und verschiebt den Rest der Zeile um die Anzahl der gelöschten Spalten.
- Die Insch, Winsch, Mvinschund Mvwinsch -Subroutinen können verwendet werden, um eine WChar_T -Codierung eines Zeichens an der aktuellen Position (x, y) einzufügen. Die Zeile wird um die Anzahl der Spalten verschoben, die von WChar_Tbenötigt werden.
- Das Paket libcur wird so geändert, dass es die in der Terminfo -Datenbank definierten Zeichen zum Zeichnen von Kästchen unterstützt und die Grafikzeichen im codierten Zeichensatz IBM-850 nicht voraussetzt. Das Paket 'libcur' unterstützt das Zeichnen von primären und alternativen Kästchen gemäß der Definition in den Einträgen box_chars_1 und box_chars_2 in der Datenbank 'terminfo'. Um dies zu verwenden, sollten Programme wie folgt geändert werden:
Drawing Primary box characters: wcolorout(win, Bxa); cbox(win); wcolorend(win); or, wcolorout(win, Bxa); drawbox(win, y,x, height, width); wcolorend(win); Drawing Alternate box characters: wcolorout(win, Bya) cboxalt(win); wcolorend(win); or, wcolorout(win, Bya); drawbox(win, y, x, height, width); wcolorend(win);BxaundByabeziehen sich auf die primären und alternativen Attribute, die in der terminfo -Datenbank definiert sind.Die folgenden Makros werden zur Datei cur01.h hinzugefügt:
cboxalt(win) drawboxalt(win, y,x, height, width) - Programme, die die Eingabe von Mehrbytezeichen unterstützen müssen, sollten _erweitert durch einen Aufruf von erweitert (TRUE)nicht auf TRUE setzen. Wenn das Flag _erweitert auf "true" gesetzt ist, gibt die Subroutine Wgetch WChar_T -Codierungen des Zeichens zurück. Bei Mehrbytezeichen kann diese Codierung von WChar_T mit vordefinierten Werten für Escapezeichenfolgen oder Funktionstasten in Konflikt stehen. Vermeiden Sie diesen Konflikt, wenn Sie codierte Mehrbytezeichensätze verwenden, indem Sie die erweiterte Einstellung vor der Eingabe auf "off" (erweitert (FALSE)) setzen. (Der Standardwert ist TRUE.)
Programme, die Mehrbytezeichen eingeben, sollten wie folgt vorgehen:
Input routine: Example: int c, count; char buf[]; extended(FALSE); /* obtain one byte at a time */ count =0; while(1){ c = wgetch(); /* get one byte at a time */ buf[count++] = c; if(count <=MB_CUR_MAX) if(mblen(buf, count) != -1) break; /* character found* / else /*Error. No character can be found */ /* Handle this case appropriately */ break; } /* buf contains the input multibyte sequence */ /* Now handle PF keys, or any escape sequence here */ - Die Zoll-, Winde-, Mvinch-und Mvwinch -Subroutinen geben die WChar_T zurück an der aktuellen Position (x, y). Beachten Sie, dass bei einem Doppelspaltenbreitenzeichen der WChar_T -Code des Doppelspaltenbreitenzeichens zurückgegeben wird, wenn sich der Punkt (x, y) in der ersten Spalte befindet. Wenn sich der Punkt (x, y) in der zweiten Spalte befindet, wird WEOF zurückgegeben.