ITerm

ターミナル用文字バッファ管理クラス

ターミナル(コンソール)の基底クラスで、画面上の文字列を管理する。このクラスは、実際の画面描画についての手続きは含まれず、このクラスを継承したサブクラスによって画面描画を実装します。

メソッド

ITerm() - コンストラクタ

ITerm(uint8_t u8c, uint8_t u8l)
ITerm(uint8_t u8c, uint8_t u8l, SimpBuf_GChar* pAryLines, GChar* pBuff)

カラム数u8cと行数u8lを指定して、ターミナルを構築する。カラム数と行数はターミナルで管理できる最大の値を指定する。ターミナルのサイズ変更を行った場合でも各々の最大の値を超える変更は行われない。

pAryLinespBuffを指定する場合は、ITerm内でのメモリ確保は行われず、外部で確保済みの配列を利用する。

// 静的メモリ確保例
const uint8_t U8COL = 64;
const uint8_t U8LINE = 20;
static TWETERM::GChar screen_buf[U8COL * U8LINE];   // pBuff
static TWETERM::SimpBuf_GChar screen_lines[U8LINE]; // pAryLines

~ITrem() - デストラクタ

virtual ~ITerm()

動的にメモリを確保した場合は、そのメモリ領域を破棄します。

clear(), home(), clear_screen()

void clear()
void home()
void clear_screen()

clear()は画面バッファのクリア、home()はカーソル位置をホームポジションに移動、clear_screen()は両者を実行します。

clear_line()

void clear_line(uint8_t line, bool fill_blank = false)

指定行をクリアする。fill_blanktrueにすると指定行を空白で埋める。

refresh(), force_refresh()

virtual void refresh() = 0
void force_refresh()

サブクラスにより実装される画面更新描画のためのメソッドです。描画方法は2種類あり、メンバー変数u32Dirtyに定義されるビットマスクに対応した行のみを再描画するものと、force_refresh()メソッドによる画面全体を再描画するものがあります。

画面全体の再描画では、いったん背景を背景色で塗りつぶしてから再描画します。初回の描画ではforce_refresh()を行うようにしてください。

write()

ITerm& write(wchar_t c)
ITerm& write(char_t c)

ターミナルに1文字書き出します。カーソル位置に文字を書き出します。16bit wchar_t型のUnicodeを渡します。

char_t (char) 型のパラメータを渡した場合は、入力をUTF-8として取り扱います。例えば0x7F までのASCII文字はそのままwrite(wchar_t)が呼び出され、3バイトのUTF-8エンコードされた日本語文字は、連続して3バイトを投入した時点でwrite(wchar_t)が呼び出されます。

日本語文字セットを表示するためのフォントの取り扱いについてはTWEFONT::FontDefを参照してください。

get_height(), get_width()

uint8_t get_height() // 行数
uint8_t get_width()  // カラム数

ターミナルの行数、カラム数を返す。

move_cursor()

ITerm& move_cursor(uint8_t cols, uint8_t lines)
ITerm& operator ()(int cols, int lines)

//例
the_screen(1, 3) << "HELLO"; // 2カラム目、4行目に移動して HELLO を出力

カーソル位置を指定場所に移動する。

戻り値はITerm&(自身)で続けて出力メソッドなどを記述できる。

operator <<

ITerm& operator << (const char *s)
TWE::IStreamOut& operator << (TWE::IStreamSpecial& sc)
TWE::IStreamOut& operator << (ITerm& t, char_t c)
TWE::IStreamOut& operator << (ITerm& t, wchar_t c)
TWE::IStreamOut& operator << (ITerm& t, int i)
TWE::IStreamOut& operator << (ITerm& t, TermAttr a)
TWE::IStreamOut& operator << (TWE::IStreamOut& t, TermAttr a)

<<演算子を用いてターミナルに文字列を書き出します。

パラメータ

意味

const char *s

文字列 s をターミナルに書き出す (UTF-8のデコードを行います)

IStreamSpecial& sc

crlf (改行)など特殊文字を出力する

char_t c

文字 c をターミナルに書き出す (UTF-8のでコードを行います)

wchar_t c

文字 c (Unicode)をターミナルに書き出す

int i

printf("%d", i) に該当する出力を行います

TermAttr a

文字属性を設定します

メソッド (サブクラス実装用)

メソッド名

解説

post_refresh()

サブクラスでのrefresh()実装で、最後に呼び出す必要があります。必要な変数の初期化を行います。

resize_screen()

指定されたカラム数・行数に従い、バッファを再構成します。コンストラクタ指定の初期値を超えた指定はできません。

column_idx_to_vis()

uint16_t column_idx_to_vis(int16_t idx , int16_t lin) Unicodeで管理されている画面バッファー上の行位置・カラム位置(ともに0が先頭位置)から、画面上のカラム位置を計算します。日本語文字のような2文字幅文字を2カラムとして計算します。 "abcあいう"という文字列が格納された行のカラム位置4は"い"の文字が格納されますが、本関数で画面上のカラム位置を計算すると5になります。

column_vis_to_idx()

column_vis_to_idx(int16_t c_vis, int16_t lin)

画面上の行位置、カラム位置(ともに0が先頭位置)から、画面バッファー上のカラム位置を計算します。日本語文字のような2文字幅文字を2カラムとして計算します。 "abcあいう"という文字列が格納された行の画面上のカラム位置5または6は"い"の文字が格納されますが、本関数で画面バッファー上のカラム位置を計算すると4になります。

最終更新