この節ではテキストの入出力用コマンドについて説明します。
表 4-20 にテキスト入力制御用のコマンドを示します。
表 4-20 テキスト入力制御
コマンド |
スタックダイアグラム |
説明 |
---|---|---|
( ccc ) |
( -- ) |
コメントを開始します。習慣上スタックダイアグラム用に使用されます。 |
¥ rest-of-line |
( -- ) |
行の残りの部分をコメントとして扱います。 |
ascii ccc |
( -- char ) |
次のワードの最初の ASCII 文字の数値を取り出します。 |
accept |
( addr len1 -- len2 ) |
コンソールの入力デバイスから編集された入力行を獲得し、addr に格納します。len1 は許容される最大長です。len2 は実際に受け取られる長さです。 |
expect |
( addr len -- ) |
コンソールから入力行を獲得して表示し、addr に格納します。(代わりに accept を使用するよう推奨します。) |
key |
( -- char ) |
入力デバイスのキーボードから 1 文字を読みます。 |
key? |
( -- flag ) |
入力デバイスのキーボードでキーが押された場合 true。 |
parse |
( char -- str len ) |
入力バッファーからの、char で区切られたテキストを構文解析します。 |
parse-word |
( -- str len ) |
入力バッファーからの、空白文字で区切られたテキストを、先行空白文字を読み飛ばして構文解析します。 |
word |
( char -- pstr ) |
入力文字列から char で区切られる文字列を集め、メモリー位置 pstr に入れます。(代わりに parse を使用するよう推奨します。) |
コメントは、コードの機能を記述するために、(一般的にテキストファイル内の) Forth ソースコードに使用します。左側括弧「( 」がコメントを開始する Forth ワードです。右側括弧「)」の前までの文字はすべて、Forth インタプリタが無視します。 スタックダイアグラムは ( を使用するコメントとして取り扱われます。
「(」の後に空白文字を入れることを忘れないでください。それによって、「(」は Forth ワードとして認識されます。
¥ (バックスラッシュ) はテキスト行末でコメントが終わりになることを示します。
key はキーが押されるまで待ち、押されると、そのキーの ASCII 値をスタックに返します。
ascii は、ascii x の形式で使用され、文字 x の数字コードをスタックに返します。
key? はキーボードを走査して、ユーザーが新たになんらかのキーを押したかどうかを調べ、フラグをスタックに返します。つまり、キーが押されていた場合は true を、押されていない場合は false を返します。フラグの使い方については、「条件フラグ」の説明を参照してください。
表 4-21 に汎用のテキスト表示用コマンドを示します。
表 4-21 テキスト出力表示
コマンド |
スタックダイアグラム |
説明 |
---|---|---|
." ccc" |
( -- ) |
後の表示に備えて、文字列をコンパイルします。 |
(cr |
( -- ) |
出力カーソルを現在行の先頭に戻します。 |
cr |
( -- ) |
ディスプレイ上の行を終了し、次の行に進みます。 |
emit |
( char -- ) |
文字を表示します。 |
exit? |
( -- flag ) |
スクロール制御プロンプト More [<space>,<cr>,q] ? を有効にします。 リターンフラグは、ユーザーが出力を終了する場合 true です。 |
space |
( -- ) |
空白文字 (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-22 にテキスト文字列操作用のコマンドを示します。
表 4-22 テキスト文字列操作
コマンド |
スタックダイアグラム |
説明 |
---|---|---|
", |
( addr len -- ) |
addr から始まり、長さが len のバイトの配列をパックされた文字列としてコンパイルし、辞書の先頭に入れます |
" ccc" |
( -- addr len ) |
翻訳結果またはコンパイル結果の入力ストリーム文字列をまとめます。 |
." ccc" |
|
文字列 ccc を表示します。 |
.( ccc) |
( -- ) |
文字列 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 に格納します。 |
upc |
( char -- uppercase-char ) |
文字を大文字に変換します。 |
一部の文字列操作コマンドは、アドレス (それらの文字があるメモリー内の位置) と長さ (文字列の文字数) を指定します。その他のコマンドは、パックされた文字列、または長さを表すバイトを格納するメモリー位置である pstr とその後の一連の文字を使用します。コマンドのスタックダイアグラムは、どの形式が使用されるかを示します。たとえば、count はパックされた文字列を addr-length (アドレスと長さの組み合わせ) 文字列に変換します。
コマンド ." は ." string" の形式で使用します。このコマンドは、インタプリンタに遭遇するとただちにテキストを出力します。" (二重引用符) はテキスト文字列の終わりを示します。次の例を参照してください。
ok : testing 34 . ." This is a test" 55 . ; ok ok testing 34 This is a test55 ok |
コロン定義の外部に " を使用すると、それぞれ最高 80 文字までの解釈済み文字列を 2 つしか同時にアセンブルできません。この制限はコロン定義には当てはまりません。