あなたのアプリケーションでは、 included
のように、 複数のディレクトリ内のファイルを探さなければならない場合があります。
これを容易にするために、 Gforth では、 Forth 検索パスを一般化した等価なモノを提供することで、
あなた独自の検索パスを定義して使用できます。
open-path-file
( addr1 u1 path-addr – wfileid addr2 u2 0 | ior ) gforth-0.2 “open-path-file”
パス path-addr で、 指定のファイル addr1 u1 を探します。 見つかった場合(ior=0)は、 結果のパス(addr2 u2)と、 (読み取り専用の)ファイル・デスクリプタ(open file descriptor)(wfileid)を返します。 ファイルが見つからない場合、 ior は(現在の実装では)ファイルを開こうとした最後の試行時点で返されたものです(訳注:ファイルが見つからない場合、 つまり ior<>0 の場合、返されるのは ior のみです ( addr1 u1 path-addr – ior ) )。
file>path
( c-addr1 u1 path-addr – c-addr2 u2 ) gforth-1.0 “file>path”
path-addr に保存されたパス内で c-addr1 u1 という名前のファイルを検索します。 成功した場合、c-addr u2 は絶対ファイル名または現在の作業ディレクトリからの相対ファイル名になります。 ファイルを開けない場合は例外をスローします。
clear-path
( path-addr – ) gforth-0.5 “clear-path”
パス path-addr を空(empty)にします。
also-path
( c-addr len path-addr – ) gforth-0.4 “also-path”
ディレクトリ c-addr len を path-addr に追加します。
.path
( path-addr – ) gforth-0.4 “.path”
検索パス path-addr の内容を表示します。
path+
( path-addr "dir" – ) gforth-0.4 “path+”
ディレクトリ dir を検索パス path-addr に追加します(訳注: 検索パスの後ろに追加する)。
path=
( path-addr "dir1|dir2|dir3" – ) gforth-0.4 “path-equals”
パス path-addr に、 完全に新しい検索パスを作成します。 パス区切り文字は |
です。
カスタム検索パスの作成例を以下に示します:
variable mypath \ no special allocation required, just a variable mypath path= /lib|/usr/lib \ assign initial directories mypath path+ /usr/local/lib \ append directory mypath .path \ output:"/lib /usr/lib /usr/local/lib"
ファイルを検索し、 結果のパスを表示します(訳注: file>path
だと内部で throw しちゃうので、代わりに
opne-path-file
を使った例…だと思う):
s" libm.so" mypath open-path-file throw type close-file \ output:"/lib/libm.so"