テキスト入出力の制御
この節ではテキストの入出力用コマンドについて説明します。これらのコマンドは文字列や文字配列を制御し、ユーザーからのコメント入力およびキーボードの走査制御を可能にします。
表 4-12 にテキスト入力制御用のコマンドを示します。
表 4-12 テキスト入力制御
コマンド
|
スタックダイアグラム
|
説明
|
( ccc ) |
( -- )
|
コメントを作成します。習慣上スタックダイアグラム用に使用されます。
|
¥ rest-of-line |
( -- )
|
行の残りの部分をコメントとして扱います。
|
ascii ccc |
( -- char )
|
次のワードの最初の ASCII 文字の数値を取り出します。
|
expect |
( addr +n -- )
|
割り当てられた入力デバイスのキーボードから編集結果の 1 行を受け取り、addr に格納します。
|
key |
( -- char )
|
割り当てられた入力デバイスのキーボードから 1 文字を読みます。
|
key? |
( -- flag )
|
入力デバイスのキーボードでキーが押された場合 true。
|
span |
( -- waddr )
|
expectで読み出された文字数を格納する変数。
|
word |
( char -- pstr )
|
入力文字列から char で区切られる文字列を集め、メモリー位置 pstr に入れます。
|
コメントは、コードの機能を記述するために、(一般的にテキストファイル内の) Forth ソースコードに使用します。( (左側括弧) がコメントを開始する Forth ワードです。右側括弧 ) の前までの文字はすべて、Forth インタプリタが無視します。スタックダイアグラムは ( を使用するコメントとして取り扱われます。
注 - ( の後に空白文字を入れることを忘れないでください。それによって、( は Forth ワードとして認識されます。
¥(バックスラッシュ) はテキスト行末でコメントが終わりになることを示します。
key はキーが押されるまで待ち、押されると、そのキーの ASCII 値をスタックに返します。
ascii は、ascii x の形式で使用され、文字 x の数字コードをスタックに返します。
key? はキーボードを走査して、ユーザーが新たになんらかのキーを押したかどうかを調べ、フラグをスタックに返します。つまり、キーが押されていた場合は true を、押されていない場合は false を返します。フラグの使い方については、「条件フラグ」 の説明を参照してください。
表 4-13 に汎用のテキスト表示用コマンドを示します。
表 4-13 テキスト出力表示
コマンド
|
スタックダイアグラム
|
説明
|
." ccc" |
( -- )
|
後の表示に備えて、文字列をコンパイルします。
|
(cr |
( -- )
|
出力カーソルを現在行の先頭に戻します。
|
cr |
( -- )
|
ディスプレイ上の行を終了し、次の行に進みます。
|
emit |
( char -- )
|
現在位置の文字を表示します。
|
exit? |
( -- flag )
|
スクロール制御プロンプト More [<space>,<cr>,q] ? を有効にします。
リターンフラグは、ユーザーが出力を終了する場合 true です。
|
space |
( -- )
|
空白文字 を表示します。
|
spaces |
( +n -- )
|
+n 箇の空白文字を表示します。
|
type |
( addr +n -- )
|
addr から始まる +n 箇の文字を表示します。
|
cr はキャリッジリターン文字を出力に送ります。次の例を参照してください。
ok 3 . 44 . cr 5 .
3 44
5
ok
|
emit は ASCII 値がスタックにある英字を表示します。
ok ascii a
61 ok 42
61 42 ok emit emit
Ba
ok
|
表 4-14 にテキスト文字列操作用のコマンドを示します。
表 4-14 テキスト文字列操作
コマンド
|
スタックダイアグラム
|
説明
|
", |
( addr len -- )
|
addr から始まり、長さが len のバイトの配列をパックされた文字列としてコンパイルし、辞書の先頭に入れます。
|
" ccc" |
( -- addr len )
|
翻訳結果またはコンパイル結果の入力ストリーム文字列をまとめます。文字列内に"(00,ff) を使用して任意のバイト値を含めることができます。
|
.( ccc) |
( -- )
|
文字列を即時に表示します。
|
-trailing |
( addr +n1 -- addr
+n2 )
|
後続空白文字を削除します。
|
bl |
( -- char )
|
空白文字の ASCII コード。10 進の 32。
|
count |
( pstr -- addr +n )
|
パックされている文字列をアンパックします。
|
lcc |
( char -- lowercase-char
)
|
文字を小文字に変換します。
|
left-parse-string |
( addr len char -- addrR lenR addrL lenL )
|
文字列を char で分割します (char は捨てられます)。
|
pack |
( addr len pstr -- pstr )
|
addr len からパックされた文字列を作り、 pstr に入れます。
|
"p" ccc |
( -- pstr )
|
入力ストリームから文字列をまとめ、パックされた文字列として格納します。
|
upc |
( char -- uppercase-char )
|
文字を大文字に変換します。
|
一部の文字列操作コマンドは、アドレス (それらの文字があるメモリー内の位置) と長さ (文字列の文字数) を指定します。その他のコマンドは、パックされた文字列、または長さを表すバイトを格納するメモリー位置である pstr とその後の一連の文字を使用します。コマンドのスタックダイアグラムは、どの形式が使用されるかを示します。たとえば、count はパックされた文字列を addr-len (アドレスと長さの組み合わせ) 文字列に変換します。
コマンド ." は ." string" の形式で使用します。このコマンドは必要なときにテキストを出力します。"(二重引用符) はテキスト文字列の終わりを示します。次の例を参照してください。
ok : testing 34 . ." This is a test" 55 . ;
ok
ok testing
34 This is a test55
ok
|