Forth では、 すべてのタスクには、 「ユーザー領域」(user area)と呼ばれる、 基本的に同じタスク・ローカル・データがあります(初期の
Forth システムはマルチ・ユーザー・システムであり、 タスクごとに 1 人のユーザーが存在することがよくありました)。 task の結果、
たとえばnewtask
は、そのユーザー領域の開始アドレスです。 各タスクは、 システムによって定義されたユーザー・データ(例:
base
)を取得します。 あなたは以下を使用して追加のユーザー・データを定義できます:
User
( "name" – ) gforth-0.2 “User”
name という名前のユーザー変数(1 セル)を作成します。
name 実行時: ( – addr )
addr
は現在のタスクのユーザー変数のアドレスです。
AUser
( "name" – ) gforth-0.2 “AUser”
name というユーザー変数を作成します( User
とはクロス・コンパイラーでのみ違いが生じます)。
uallot
( n1 – n2 ) gforth-0.3 “uallot”
n1 バイトのユーザー・データを確保します。 確保した領域の先頭をユーザー領域内のオフセット値(n2)として返します。
UValue
( "name" – ) gforth-1.0 “UValue”
name はユーザー value です。
name 実行時: ( – x )
UDefer
( "name" – ) gforth-1.0 “UDefer”
name はタスク・ローカルの deferされたワードです。
Name 実行時: ( ... – ... )
ユーザー・データを扱う場合には、 以下のようなワード群もあります。
up@
( – addr ) new “up-fetch”
addr は現在のタスクのユーザー領域の先頭です(addr は現在のタスクの task 識別子としても機能します)。
user'
( "name" – u ) gforth-experimental “user”’
各タスクのユーザー領域のユーザー変数 name の、 ユーザー領域先頭からのオフセット値を U に返します。
's
( addr1 task – addr2 ) gforth-experimental “’s”
addr1 が現在のタスクのユーザー・データ内のアドレスである場合、 addr2 は 指定のタスク(task)のユーザー・データ内の対応するアドレスです。