書式: | include file.e unlock_file(fn, s) |
解説: | 既に開いているファイルまたはファイル全体をfnとして指定してアンロックします。以前にlock_file()を使用してファイルをロックしたに違いないと思います。DOSとWIN32では、sの引数として{最初のバイト, 最後のバイト}を指定することによってファイル内を指定バイト範囲内でアンロックできます。以前にlock_file()を使用してファイル内を指定バイト範囲内でロックしたに違いないと思います。Linux/FreeBSDでは、現在のところファイル全体をロックまたはアンロックをのみできます。ファイル全体をアンロックするときは引数sは{}である必要があります。Linux/FreeBSDでは、sは常に{}である必要があります。 |
注釈: | ほかのプロセスでロック済みのファイル使用できるようにするためには、速やかにファイルをアンロックする必要があります。 |
どのようなファイルでもロックでき、プログラム終了後に自動的にアンロックされます。 | |
なお、詳しい注釈と用例はlock_file()を参照してください。 | |
関連事項: | lock_file |
書式: | include machine.e (or safe.e) unregister_block(a) |
解説: | メモリーブロックをsafe.e(これはmachine.eのデバッグバージョンです)によって保守される安全なブロックのリストから削除します。ブロックの開始アドレスはaです。 |
注釈: | このルーチンはデバッグを行う場合でのみ使用されます。unregister_block()は以前register_block()を使用して登録したメモリーブロックの登録を削除します。ブロックの登録を削除することにより、safe.eによって保守される安全なブロックのリストから登録が削除されます。これによりプログラムがメモリーブロックに対して一切の不正な読み書きの操作を防止することができます。 |
詳細な注釈と用例はregister_block()を参照してください。 | |
関連事項: | register_block, safe.e |
書式: | include wildcard.e x2 = upper(x1) |
解説: | アトムまたはシーケンスを半角英数大文字へ変換します。 |
用例: | |
s = upper("Euphoria") -- s は "EUPHORIA" a = upper('g') -- a は 'G' s = upper({"Euphoria", "Programming"}) -- s は {"EUPHORIA", "PROGRAMMING"} | |
関連事項: | lower |
動作環境: | DOS32 |
書式: | include machine.e use_vesa(i) |
解説: | Euphoriaはuse_vesa(1)が指定されると強制的にVESAグラフィック規格を使用します。これによりEuphoriaプログラムにおいて特定のビデオカードでSVGAグラフィックスモードが使用可能になるかもしれません。use_vesa(0)が指定されるとEuphroiaオリジナルの方法を使うように設定を戻してビデオカードを使用します。 |
注釈: | 大多数の人々にとってこれを無視することができます。しかし、もしSVGAグラフィックスモードの使用が困難なときはプログラムの開始直前にどのような形式であってもgraphics_mode()を呼ぶ前にuse_vesa(1)を呼び出すことを試みてください。
use_vesa()には0また1以外の引数を使用してはいけません。 |
用例: | |
use_vesa(1) fail = graphics_mode(261) | |
関連事項: | graphics_mode |
書式: | include get.e s = value(st) |
解説: | Euphoriaオブジェクトの文字列表現を読み込んで、オブジェクトの値を計算します。実際はエラーステータスをひとつ含む2要素のシーケンスとして{エラーステータス, 値}が返されます: |
GET_SUCCESS -- 有効なオブジェクト表現が見つかりました。 GET_EOF -- 文字列は終端に達しました。 GET_FAIL -- 構文が違います。 GET_NOTHING -- 文字列は終端に達しましたが、任意の値は存在する一部を除き読み込めませんでした。 | |
注釈: | これはget()と動作が似ていますが、ファイルまたはデバイスではなく貴方が用意した文字列を読み込みます。
有効なEuphoriaオブジェクトの表現を読んだ後にvalue()は読むのを中止して、文字列内のどのような追加の文字であっても無視します。たとえば、"36"および"30P"の両方を与えると{GET_SUCCESS, 36}が返されます。 |
用例1: | |
s = value("12345"} -- s は {GET_SUCCESS, 12345} | |
用例2: | |
s = value("{0, 1, -99.9}") -- s は {GET_SUCCESS, {0, 1, -99.9}} | |
用例3: | |
s = value("+++") -- s は {GET_FAIL, 0} | |
関連事項: | get, sprintf, print |
書式: | include graphics.e s = video_config() |
解説: | 現在のビデオ設定の詳細情報をシーケンスとして返します: {カラーモニターか?, グラフィックスモード, テキスト列, テキスト桁, xピクセル, yピクセル, 色数, ページ数} 定数はgraphics.eで次のように定義されています: |
global constant VC_COLOR = 1, VC_MODE = 2, VC_LINES = 3, VC_COLUMNS = 4, VC_XPIXELS = 5, VC_YPIXELS = 6, VC_NCOLORS = 7, VC_PAGES = 8 | |
注釈: | このルーチンはプログラムを多種多様なグラフィックスモードで動作させることができるように各種情報を簡単なパラメータにします。
PCでは2種類のグラフィックスモードがあります。一つ目はテキストモードでテキストのみ出力できます。2つ目はピクセルグラフィックスモードでテキストと同様に様々な色を使用して色を変えたり、点を打ったりすることができます。VC_XPIXELSとVC_YPIXELSのフィールドが0であるとき、テキストモードです。なお、polygon(), draw_line(), およびellipse()といったこれらルーチンはピクセルグラフィックスモードでのみ動作します。 |
用例: | |
vc = video_config() -- モード3は25行のテキスト表示です: -- vc は {1, 3, 25, 80, 0, 0, 32, 8} | |
関連事項: | graphics_mode |
書式: | include get.e i = wait_key() |
解説: | ユーザが次に押したキーを返します。打鍵されるまで値を返しません。 |
注釈: | 次のようにget_key()を使用して同様の結果を得られます: |
while 1 do k = get_key() if k != -1 then exit end if end while | |
しかし、WindowsやLinux/FreeBSDのようなマルチタスクシステムでは、これでは"ビジーウェイト"を発生させてしまいシステムダウンとなってしまうか動作が遅くなる傾向があります。wait_key()はビジーウェイトを発生させないためユーザがキーを押すのをプログラムが待つあいだに、オペレーティングシステムは他の作業を行うことができるので有用です。
getc(0)を使うこともできますが、ファイル番号0に対してキーボード入力が行われるときはファンクションキー、矢印キーその他の特殊コードを取得できません。 | |
関連事項: | get_key, getc |
書式: | include file.e i1 = walk_dir(st, i2, i3) |
解説: | このルーチンはパス名としてstを与えてディレクトリを"渡り歩き"ます。i2は貴方が用意したルーチンのルーチンidです。walk_dir()はファイルおよびディレクトリにstに対してあなたのルーチンを一度ずつ呼び出します。もしi3が非0(真)ならば、stに存在するサブディレクトリを再帰的に渡り歩きます。 あなたが用意するルーチンはファイルおよびサブディレクトリごとにパス名とdir()のエントリを受け入れる必要があります。それは返値が0ならば処理を継続するか、非0ならばwalk_dir()を停止しなければならないということです。正常にwalk_dir()の実行が完了したときは0を返します。パス名stを開けないときは-1を返します。そうしなければ、あなたのルーチンが非0の値を返して、その返値を選択してしまいwalk_dir()は時期尚早に停止してしまいます。 |
注釈: | この仕組みにより、一度に一つのファイルを扱うことができる単純な関数を書いて、walk_dir()でプロセスの全てのファイルとディレクトリを扱うことができます。
規定値では、ファイルとサブディレクトリは英数順に呼び出されます。違う順列を使用するときは、dir()関数に変更を加えてmy_dirを作成して大域整数のルーチンidを設定を行い異なる方法でディレクトリエントリをソートします。規定のdir()関数はfile.eを参照してください。 あなたがwalk_dir()のために用意するパスにはワイルドカード (*または?)を含めることはできません。単一のディレクトリ(およびサブディレクトリ)のみ一度に検索が行えます。 |
用例: | |
function look_at(sequence path_name, sequence entry) -- この関数は引数として2つのシーケンスを受け入れます。 printf(1, "%s\\%s: %d\n", {path_name, entry[D_NAME], entry[D_SIZE]}) return 0 -- このまま。 end function exit_code = walk_dir("C:\\MYFILES", routine_id("look_at"), TRUE) | |
プログラム例: | euphoria\bin\search.ex |
関連事項: | dir, current_dir |
書式: | include file.e a1 = where(fn) |
解説: | この関数は現在のバイト位置を返します。この位置は読み書きとシークにより更新されます。それはファイルにおいて次にどのバイトが読み書きされるか判別します。 |
関連事項: | seek, open |
書式: | include wildcard.e i = wildcard_file(st1, st2) |
解説: | ファイル名st2がワイルドカードパターンst1に一致したときは1(真)を返します。そのほかは0(偽)を返します。これはDOSのワイルドカードマッチングと似ていますが、いくつかの場合で*は0またはそれ以上の任意の文字と一致し、?は任意の一文字に一致します。LinuxとFreeBSDでは文字比較において大文字と小文字の区別ができます。しかしDOSとWindowsではそれができません。 |
注釈: | この関数をプログラムでユーザが指定したパターンとマッチするファイル名をdir()ルーチンに渡して出力を調べるために使用するかもしれません。
DOSでは "*ABC.*"は全てのファイルにマッチします。 wildcard_file("*ABC.*", s)ではファイル名末尾の一部の"ABC"のみマッチし拡張子はマッチしません(そうあなたが想定しているときに)。 |
用例1: | |
i = wildcard_file("AB*CD.?", "aB123cD.e") -- i は DOS または Windowsのとき1、Linux または FreeBSDのとき0に設定されます。 | |
用例2: | |
i = wildcard_file("AB*CD.?", "abcd.ex") -- i は全てのシステムで0に設定されますが、 -- 理由としてファイルタイプは2文字であり1文字ではないからです。 | |
プログラム例: | bin\search.ex |
関連事項: | wildcard_match, dir |
書式: | include wildcard.e i = wildcard_match(st1, st2) |
解説: | この関数は、一般的な文字列に対して*や?といったワイルドカードを使用したパターンマッチングを行います。文字列st2がパターンst1と一致したときは1(真)を返します。そのほかは0(偽)を返します。*は0またはそれ以上の任意の文字と一致し、?は任意の一文字に一致します。文字比較において大文字と小文字の区別ができます。 |
注釈: | 大文字と小文字の区別を行わない比較をしたいときは、wildcatd_match()を呼ぶ前にst1およびst2に対してupper()またはlower()を経由して引数を渡します。
文字列内でパターンを検出したいときは、各パターンの末尾に*を付加してください: |
i = wildcard_match('*' & pattern & '*', string) | |
現在のところパターンで*または?をリテラルとして扱う方法はありません。 | |
用例1: | |
i = wildcard_match("A?B*", "AQBXXYY") -- i は 1 (真) | |
用例2: | |
i = wildcard_match("*xyz*", "AAAbbbxyz") -- i は 1 (真) | |
用例3: | |
i = wildcard_match("A*B*C", "a111b222c") -- i は 0 (偽) となります。理由として大文字/小文字に一致しないためです。 | |
プログラム例: | bin\search.ex |
関連事項: | wildcard_file, match, upper, lower, compare |
書式: | include graphics.e wrap(i) |
解説: | テキストを右端(i = 1)または先頭を切り捨てるか(i = 0)のいずれかでラップします。 |
注釈: | 規定値ではテキストはラップ処理が行われます。
テキストモードまたはピクセルグラフィックスモードで長い行を表示するときにwrap()を使用します。 |
用例: | |
puts(1, repeat('x', 100) & "\n\n") -- 現在行に80文字の'x'があり、次行に20文字の'x'があります。 wrap(0) puts(1, repeat('x', 100) & "\n\n") -- 1行に80文字の'x'が出力されます。 | |
関連事項: | puts, position |
書式: | x3 = xor_bits(x1, x2) |
解説: | x1とx2に対応するビット間に対して論理XOR(排他OR)演算を行います。x1とx2の2つ対応するビットがどちらか一方が1のときx3が1となります。両方とも同じ値ときは0になります。 |
注釈: | この関数の引数はアトムまたはシーケンスである必要があります。演算規約はシーケンスに対して適用されます。
整数・負数のいずれであっても、引数は32bit整数で表現可能な範囲である必要があります。 もし32bitの値をすべて操作するのであれば、変数を整数ではなくアトムとして宣言する必要があります。なおEuphoriaの整数型は31-bitまでの制限があります。 結果は負数として処理されます。そして最上位ビットが1のときは負数になります。 |
用例1: | |
a = xor_bits(#0110, #1010) -- a は #1100 | |
関連事項: | and_bits, or_bits, not_bits, int_to_bits, int_to_bytes |