(57)【要約】汎用デジタル計算機内の情報の表示及び検索のための方法。全ての簡単な型式の情報がディメンションに沿って点として表され、複合情報型式は、多次元データスペース内の２以上のディメンションの共通部分として表される。点のコンテクストが、外部的に維持され、このデータスペースの点に連結される値を戻すため及びデータスペースと相互に作用する従来のデータ処理機能を呼び出すために使われるエバリュエータ機能によって選択的に使われる。多次元の表示及び検索方法を使用することによって、従来のコンピュータ計算のプロセス及び構造、例えば変数、配列、構造、リスト、オブジェクト、など、は、モデル化またはシミュレートされる。【特許請求の範囲】
【請求項１】
(a)少なくともディメンション名及び点型並びに一つ以上のゼロ以上の点からなる「ディメンション」データ構造を作るステップ、(b)少なくともディメンション名及び値から成っている一つ以上の「点」データ構造を作るステップと(c)少なくとも一つの値点及び全てのそのような点が互に異なるディメンション名を有する一つ以上の点を含み、全てのそのような点が一纏めにして「共通部分」と呼ばれている一つ以上の「バインディング」データ構造を作るステップ、(d)前記情報アイテムを表すのに有用な一群の「ディメンション」を選択して、前記選択された「ディメンション」の各々の中の前記情報アイテムを表わす「点」を作るステップ、（e）前記情報アイテムを表わし、前記情報アイテムを表す値「点」を含む「バインディング」及び前記選択された「ディメンション」からの前記「点」の全てを含む「共通部分」を前記メモリの中に記憶するステップを備えるデジタル計算機のメモリ内の情報アイテムを表す方法。
【請求項２】
一つ以上の情報アイテムがデジタル計算機のメモリの中に記憶され、(a)少なくとも一つ以上の「バインディング」から成る一つ以上の「領域」データ構造を作るステップ、及び(b)前記「領域」内に前記情報アイテムを表わす前記「バインディング」を記憶するステップをさらに備える請求項１の方法。
【請求項３】
前記「バインディング」データ構造は、更にその他の「バインディング」データ構造の強さに対する前記「バインディング」の相対強さを表すバインディング重みを含む請求項１の方法。
【請求項４】
前記「バインディング」は、それらの関連関連のバインディング重みに従う等級順に前記「領域」内に記憶される請求項３の方法。
【請求項５】
前記「共通部分」内のすべての「点」だけを含む「バインディング」のために前記メモリを検索するステップ及びそのような「バインディング」が前記メモリの中にある場合、前記「バインディング」に記憶された値「点」を復帰するステップを含む「共通部分」を評価するための方法を更に備える請求項１の方法。
【請求項６】
(a)どの二つの「点」も同じ「ディメンション」にない「点」の動的リストから成る「コンテクスト」データ構造をつくるステップ、及び（b）前記情報アイテムと別々にかつ無関係に前記「コンテクスト」データ構造を記憶するステップをさらに含む請求項１の方法。
【請求項７】
前記「バインディング」は、評価の間、考慮されるべき一つ以上の「領域」を表す情報を備える請求項２の方法。
【請求項８】
前記第１の「共通部分」内のあらゆる「点」及び前記コンテクストから選択されたゼロ以上の「点」の入っている「バインディング」を求めて前記メモリを検索するステッ及びそのような「バインディング」が前記メモリの中にある場合、前記「バインディング」に記憶された値「点」を戻すステップを含む第１の「共通部分」及び「コンテクスト」を評価するための方法をさらに備える請求項７の方法。
【請求項９】
前記第１の「共通部分」の中のあらゆる「点」及び前記コンテクストから選択されたゼロ以上の「点」を含む「バインディング」を求めて前記メモリを検索するステップ、及びそのような「バインディング」が非常に「ディメンション」データ構造が入っている「バインディング」データ構造に対して高く、その他の「バインディング」データ構造の強さに対するバインディングの相対強さを示すバインディング重みを含む場合、前記メモリの中にある場合、最も高い相対バインディング重みを有する前記「バインディング」に記憶された値「点」を復帰するステップを含む第１の「共通部分」及び「コンテクスト」を評価するための方法を更に備える請求項７の方法。
【請求項１０】
「コンテクスト」内の「点」が後入先出型スタック操作を有する「フレーム」データ構造で記憶され、「点」は現在の「フレーム」に挿入され、前記「フレーム」は、以前の「フレーム」の「点」を露出させるために続いて除かれる再帰的な評価ができるようにするための請求項６の方法、。
【請求項１１】
前記「コンテクスト」の中の「点」は、最新の「フレーム」に記憶されてその中で評価され、したがって、再帰的な評価を可能にする請求項１０の方法。
【請求項１２】
「共通部分」の評価が新しい「フレーム」の作成及びその「共通部分」の「点」の挿入を含む請求項１０の方法。
【請求項１３】
前記第１の「共通部分」の中のあらゆる「点」及び前記「コンテクスト」から選択された一つ以上の「点」が入っている「バインディング」に記憶された全ての値は、各値のために選択された「コンテクスト点」のリストと共に復帰させられる請求項９の方法。
【請求項１４】
前記復帰リストは、単一の最良復帰値を決定するために所定の格付けスキーマに従って評価される請求項１２の方法。
【請求項１５】
前記復帰リストは、バインディング重みの降順で整理されている請求項１３の方法。
【請求項１６】
少なくとも一つの「ディメンション」データ構造が(a）１組の実行可能なコンピュータ命令、（b）コンピュータ・データベースが入っているデータ検索システム、(c)
SQLデータベース・サーバに対する呼び出し、（d）オブジェクト・データベースから検索のためのアクセス方法のグループから選択された一つ以上のアイテムへの少なくとも一つのエントリー点を含む請求項１の方法。
【請求項１７】
未定義レファレンスの発生は、前記レファレンスまたは前記レファレンスへのポインタが入っている「点」の評価及び復帰を生ずるコンピュータプログラムを実行するための方法。
【請求項１８】
前記バインディング重みは、前記情報アイテムと関連している予め定められたスカラー値と等しい請求項３の方法。
【請求項１９】
「共通部分」の評価は、バインディング重みの不完全不同に依存する請求項１８の方法。
【請求項２０】
前記スカラー値は、時間または時間順取引を表わす請求項１８の方法。
【請求項２１】
コンピュータシステムの各所望の操作に先立って形式「 許容操作：Xオブジェクト：Y
」又は論理、はい／いいえまたは「 不許容操作Xオブジェクト：Y」 論理、はい／いいえの「共通部分」の 評価が行われ、「コンテクスト」は、例えばユーザ、端子、特権、オブジェクト、操作及び前記「共通部分」などの情報の適当な評価に必要な実行可能コードを含むセキュリティ操作を更に含む請求項１の方法。
【請求項２２】
「バインディング」を通して、その他の「点」についてメタデータを定める「ディメンション」及び「点」を更に含む請求項１の方法。
【請求項２３】
メタデータが、セキュリティ、ナビゲーション、分類、最適化、サーチ、検索、個人化、生成、情報のエキスポート及び正規化のために使われる請求項２２の方法。
【請求項２４】
「シーケンス」が「点」Sのリスト介して繰り返すために使用される「点」として定義されている請求項１の方法。
【請求項２５】
「シーケンス」による反復は、現在の「コンテクスト」の中の「点」sの変更によって動的に変えられることができる請求項２４の方法。
【請求項２６】
「点」が物理的環境を変換することによって「コンテクスト」に追加される請求項６の方法。
【請求項２７】
前記物理的環境は、「コンテクスト」内の「点」sの変換によって影響を受ける請求項６の方法。
【請求項２８】
前記「コンテクスト」は、そのような各未定義「点」の「ディメンション」のオートコンテクスト 「点」の値の置換を通して前記「共通部分」内の未定義「点」を、前記「共通部分」のどの「点」も未定義のままでなくなるか、オートコンテクスト点の評価はが失敗するかまたは、前記「共通部分」の評価が失敗するまで、反復して評価することによって、「共通部分」から推論によって決定され請求項７の方法。
【請求項２９】
評価の間、「共通部分」または現在の「コンテクスト」のどちらかにおいて特定されない点が現在の「コンテクスト」内にあると仮定されている請求項９の方法。
【請求項３０】
マルチパート事象をおのおのが事象の一部を表わしている「点」の構成的「バインディング」によって表されると認識する方法。
【請求項３１】
複数部分を有する事象の一部分を一つ以上の事象「点」、適用できる「コンテクスト」及び「コンテクスト」内の事象「点」を表わす値からなる「バインディング」として記載する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、汎用デジタル計算機内の情報表示及び検索の分野に関する。全ての簡単な（一次元の）形式の情報は、ディメンション（ベクトル）に沿って配列される点として表され、複合情報型は、多次元データスペースの２以上のディメンションの共通部分として表される。一つ以上の点から成るコンテクストが、データスベース内の値の評価に用いるために、確定されて局所的または全体的に維持される。エバリュエータ機能がこのデータスペースの点に結び付けられる値を戻すため及びそのデータスべースと相互作用する従来のデータ処理機能を呼び出すために用いられる。エバリュエータは、必要次第ベースでコンテクストから点を選択的に組み込むことによって値を分析する。コンテクストの表示及び検索方法を使用することによって、従来のコンピュータ計算のプロセス及び構造（変数、配列、構造、リスト、目的、など）は、モデル化されたり又はシミュレートされたりする。
【背景技術】
【０００２】
汎用デジタル計算機のメモリ内の情報の表示及びその情報の編成及び検索は、コンピュータ計算の古典的問題の一つである。非常に平凡になった英数字の単なる表示は、対応する文字及メタ文字に対する７ビット値（最初は）の標準の認められた順序での複雑なマッピングを必要とした大きな前進であった。値[
0,1,2 ... １２６］の文字[ NUL、SOH、STX
... ~ ]セットへの１対１のマッピングは標準化するのに簡単な作業ではなかった。そのようなマッピングがアスキー規格になったのは、１９６５年になってからであった。
【０００３】
コンピュータを使用するデータファイルの構成は、シーケンシャル・ファイル（それでは、既知で固定長さの一連の記録は一緒に連結された）によって、始って、所望の記録に到達するためにファイルの中への「オフセット」の計算によって検索されることができた。
したがって、８０バイトの記録からなるファイルの第n番目の記録に到達するためには、人は、単にファイルから読み込まれた最初の（ｎ
x ８０）バイトを廃棄して、すぐ後の８０バイトを検索しただけだった。
【０００４】
データ検索及び記憶技術の最近の発展は、所望の記録を検索するためにシーケンシャルサーチを必要とすることなく可変長さ記録ができるようにした索引順編成ファイル、及び最も最近では、情報の複数の「テーブル」に関係する共通の「キー」フィールドを使用するリレーショナル・データベースを含んでいた。
【０００５】
情報及びインデックスを操作することができる高水準言語と結合されるとき、リレーショナル・データベースは、情報を管理するための強力な道具になることができる。各テーブルは、定義済み形式（例えばアルファベット、日付、整数、実数等々）を有するフィールドに対応する列を有し、一方行はデータベース内の個々の記録に対応する通常二次元配列の情報として定義される。関係は、異なるテーブルの指定されたフィールド内の値のマッチングによって形成される。例えば、代表的な企業データベースは、例えば顧客番号、名前、ミドルイニシャル、性、番地、市、州、郵便番号、電話番号及び社会保障番号などのフィールドを含む「人」に関する情報を記憶するテーブルを有する。もう一つのテーブルは、購入された品目を、表にして、例えば品目番号、仕入れ数、仕入れ日、価格、値引き幅及び得意先番号などのフィールドを含んでいる。所定の顧客の顧客番号を知ることによって（おそらく、「人」テーブル内の顧客の名前を探した後で検索された）顧客によって購入されたあらゆる品目の一覧表が「購入される品目」テーブルから検索される。更なる関係は、それから、例えば、特定の品目の製造業者の識別、現在の在庫の中のその品目の総数及び企業の運営に必要なその他の情報を決定するためにそのような拡張システムにおいて可能である。
【０００６】
報告書作成、データ処理及びユーザ・インタフェース構成のための道具と共にパッケージにされて、リレーショナルデータベースは「第４世代言語」または単に「４GL」と称する。そのような4GLが企業コンピュータ計算に適用できることが分かったが、それらはある「実社会」の作業には不向きで、その他のものには扱いにくい。
【特許文献１】なし
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、「スーパリレイショナル」と言われるデータベース検索のための方法から成り、多数の方法で結合されて、従来の汎用デジタル計算機（例えばGScanまたはTeradataコンピュータシステムなどの特殊データベース・システムに対抗するものとして）を用いて記憶されアクセスされることができる任意に多数の簡単な情報記憶構造を提供することである。
【課題を解決するための手段】
【０００８】
本発明の方法において、全ての情報事象は、ディメンション線に沿った点とみなされる。例えば、あらゆる整数は、「整数」ディメンションに沿った点として、あらゆる実数は「実数」ディメンションに沿った点として及び犬のあらゆる品種は「イヌの品種（breed_of_dog）」ディメンションに沿った点として扱われる。事実、データ処理システムにおける表示を必要とするどんな概念または品目に対しても数ディメンションが存在する可能性がある。必要である全ては、与えられたディメンションに沿ったあらゆる点がそのディメンション（そのようなディメンションを「赤いもの」及び「果実」と考える）に沿った他の全ての点と同じ質の関心を有することである。
【０００９】
本発明の方法における点は、表記法の形式ディメンション ：ラベルのものであり、ここで、ディメンション がディメンション（例えば整数、実数または果実）の名前であり、ラベルが名前付きディメンション（例えば「３」、「３．１４１５９」または「リンゴ」）に沿った特定の点を指示する。
【００１０】
二つの点が同じディメンションに沿って入られていない限り、本発明の方法におけるバインディングが多次元空間の中で二つ以上のその他の点pの共通部分Iを持つ値点vの関連付けである。関連付けは、共通部分Iが値点vに結び付けられている括弧に囲まれ、value=v（すなわち「値」ディメンションに沿ったv）に共通部分を定める点p1、p2、...
Pnから成る表記
[P1, P2, ... Pn] = v
によって表される。
【００１１】
したがって参照に可能である一組の点p1、P2、...
Pn.を特定することによって値vを参照することが可能である。完全な共通部分が全てのpn点が特定されているものであり、不完全な共通部分は一つ以上の点が存在していないものである。
【００１２】
本発明の方法のコンテクストセットCは、どの二つの点も同じディメンションに属さないような一組の点cである。一つのコンテクストが以下の表記法を使用して表され
[p1, p2, ..pn｜c1,c2,…cn].
これは、この方法が点c1、c2、...
cnのコンテクストの内の共通部分p1、p2、...pnを評価することを意味する。P1（P2）...
Pnの中の特定された共通部分が完全な場合、更なる操作はすこしも生じる必要がない。しかし、その共通部分が不完全な場合、コンテクストCからとられた一つ以上の点が共通部分を完全なものにするために用いられる。例えば、バインディング：
[a,b,c ] =値
共通部分が不完全なので、[a,b]として参照されることができない。しかし、
[a, b |c, d, e]
のコンテクストを仮定すると、共通部分はそのコンテクストからcを用いて評価される。
【００１３】
エバリュエータEは、本発明の方法のコアにあり、それは、共通部分をＩとしたとき、Iが完全な共通部分であるかまたはコンテクストCを備えていると仮定するならば、値vを決定するプロセスである。すなわち、
E(I) = v 又は
E(I , C) = v
コンテクストCは、エバリュエータに対して外部に維持されるのが好ましく、コンテクストからの点は、必要に応じてベースで評価に用いるためにために選択される。エバリュエータは、また、あいまい性を分析することが可能でなければならない、すなわち、それは単一の値を復帰するために二つ以上の可能な（及び完全な）共通部分の間の選択をすることが可能でなければならない。いくつかのアプローチは、（簡単な点の重み付けなど）が可能で、本発明の方法において有効であることが分かった。
【００１４】
より完全に後述するように、本発明の方法は従来のリレーショナル・データベースのそれに同様の機能を与えるために用いる、それは、また、プログラミング言語（オブジェクト・フレームワーク）ルールベース・エキスパートシステム・シェル、リスト処理エンジン及び、現在特殊な目的のハードウェアおよびソフトウェアによって実行され多くのもっと拡張した機能として機能するために用いられてもよい。
【発明の効果】
【００１５】
多次元の表示及び検索方法を使用することによって、従来のコンピュータ計算のプロセス及び構造、例えば変数、配列、構造、リスト、オブジェクト、な、は、モデル化またはシミュレートされる。
【発明を実施するための最良の形態】
【００１６】
本発明の方法を説明するに当たって、それらに加えて慣例が上で概説したいくつかは、有効である。概説したものに加えていくつかの取り決めが有用である。以下のディメンションが、使われる。Nld（名前識別用）ディメンションは、ものに名前を付けるために用いられるすべての点を含んでいる。これらの点は、コンピュータのアプリケーションの中で使われる種々のラベル、名前、変数などを表す。「ディメンション」ディメンションには、多次元空間の中の各ディメンションのための点が入っている。それが同じ値点に結び付けられる所定のディメンション上の複数点を有するのに必要なとき、用いられる表記法の取決は、
ディメンション：p1,p2,...pn（点の明示リストを定める）
または
ディメンション：p1..p2（点の範囲を定める）
または単に
ディメンション：｛all｝（ディメンション上の全ての点を定める）
である。
【００１７】
「点データ構造」
#define
V4DP1_PntType_Int ０        『整数点値』
#define
V4DP1_PntType_Char 1          『 文字スtリング』
#define
V4DP1_PntType_ Dict ２         『辞典エントリー 』
#define
V4DP1_ PntType_Real３        
『実数*/
#define
V4DP1_PntType_Isct ４         『 共通部分（グルーピングは、共通部分ないの点の数である）』
#define
V4DP1_PntType_ Foreign 5      『 異質のデータ型（例：qtyuom）』
#define
V4DP1_PntType_ Special 6      『 特殊点（例えば｛ALL）｛CURRENT））｝
#define
V4DP1_PntType_Shell 7        
『 これは、その他の点のためのシェルである』
#define
V4DP1_PntType_FrgnDataEI ８   『異なるファイルのためフィールド仕様』
#define
V4DP1_PntType_FrgnStructEl ９ 『異なるファイルのための構造仕様』
#define
V4DP1_PntType_Cmpndlsct １０ 『 複合共通部分：dim=[
... ]、[ ... dim= ] ..。』
#define
V4DPI_PntType_V3Mod １１     『
V3 モジュールコール*/
#define V4DP1_PntType_V3ModRaw １２ 『翻訳なしの（「そのままで」通過した）
V3 モジュールコール』
#define
V4DP1_PntType_Context 13       『ある一つのコンテクスト点』
#define
V4DP1_PntType_List 14          
『「特殊な」（内部的に維持された）リスト*/
#define V4DP1_PntType_Pragma 15       『コンテクストの方へ押されないように、IntModsのためのジャンク保持する点*/
#define V4DP1_PntType_IntMod １６    
『内部（V4に対して）モジュールを経て評価する点』
#define V4DP1_PntType_Pntldx １７    
『内部点バッファを示す点（V4によって「拡大した」）』
#define
V4DP1_PntType_MemPtr １８    『 Aメモリ・ポインタ』
#define
V4DP1_PntType_V3PicMod 19        『 A V3 PIC モジュール （点？と同じ領域に記憶されたモジュール） 』
#define
V4DP1_PntType_BigText 20             『 大きなtext・ストリング ( 上記V3PicMod
参照) 』
#define
V4DP1_PntType_PIntMod 21          l『 Partial Eval IntMod（ 前の論議が継続評価である） 』
#define
V4DP1_PntType_Time 22     『 時間取引‐バインディングが逆「年代順に」検索される』
#define V4DP1_PntType_Binding 23                 『 バインディング情報−バインディングを消去トラッキングに用いられる 』
#define V4DP1_PntType_Logical 24                  『論理的 （YesNo） 』
#define V4DP1_PntVerify_InArea 1           『領域内の点をベリファイする』
#define V4DP1_PntVerify_Dict 2  『 辞書内の点をベリファイする 』
#define V4DP1_PntVerify_Range 3  『 点は範囲内になければならない 』
#define V4DP1_PntVerify_Ref 4  『 他の領域では点をREFとしてベリファイする』
#define V4DP1_Grouping_Single 0  『
Single Point 』 『 Numbers 1-12 indicate a mix-list of so many entries 『
#define V4DP1_Grouping All 15   『点はディメンション内のすべての点を表す （e.g. dim=all） 』
#define V4DP1_Grouping_Current 16           『 点はコンテクスト内のディメンションの現在の値を表す』 
#define V4DP1_Grouping_Binding 17           『点はこの共通部分をもたらすバインディング内の点の値を表す』
#define
V4DP1_Grouping_List 18    『 点は現在のリスト反復内の点の値を表す 』
#define V4DP1_Grouping_Now 19   『 点は現在の「時間」を表す 』
#define
V4DP1_Grouping_LastBind 20         『点は最後のバインディングのバインド点を表す 』
#define
V4DP1_AIphaVal_Max 1024  『 点値内の最大バイト 』
#define
V4DP1_CharString_Max 250             『文字ストリング内の最大バイト』
#define
V4DP1_PointHdr_Bytes 8    『点ヘッダー内のバイトの数 』
#define
V4DP1_FormatOpt_ShowDim 1        『 出力内の
"dim="を示す 』
#define
V4DP1_FormatOpt_ShowBytes 2     『 点を記憶するのに必要なバイトを示す 』
#define
V4DP1 FormatOpt_Trace V4DP1_FormatOpt_ShowDim｜DP1_FormatOpt_ShowBytes
#define
V4DP1_ FormatOpt_Default 0
struct
V4DP1＿Point
{
unsigned short Dim ;                 『この点のディメンション 』
unsigned
short Bytes ;                『この点のバイトの数』
unsigned
char PntType ;             『 点の形式-
V4DP1_PntType_xxx を参照』
unsigned
char Grouping ;             『 点のグループ化-
V4DP1_Grouping xxx参照 』
unsigned char LHSCnt ;             『共通部分の場合、点の数は "I"の前より下
(左側サイズ・カウントt) 』
CHARFIELD Nestedlsct : 1            『これが共通部分であれば、TRUE 、入子になっているば共通部分が中にある。 』
CHARFIELD
Quoted: 1 ;             『  TRUEであれば点は「引用」されて評価されるべきでない。 』 ＵＮＩＯＮ
{
int IntVal ;
char 『MemPtr
;                       『メモリへのポインタ 』
unsigned char AIphaVal[V4DP1_AIphaVal_Max] ;
} Value;
typedef struct V4DPI＿Point P ;       『 生活をさらに容易にするため 』
#define V4DP1_ShortAIphaVal_Max 8
#define V4DP1_ShortPointHdr_Bytes 4
#define V4DP1_ShortPoint_Limit
V4DP1_ShortAIphaVal_Max+V4DP1_PointHdr_Bytes struct V4DP1＿ShortPoint     『直接バインドリストの中に記憶された小点に用いられる 』
{ unsigned short Dim ;              『この点のディメンション』
unsigned short Bytes ;             『この点のバイトの数 』
unsigned char PntType ;          『点の形式 -  V4DP1
PntType xxx 参照』
union
{ int IntVal ;
char AIphaVal[V4DP1 ShortAlphaVal_Max] ;
} Value;
};
【００１８】
ディメンションデータの構造
#define V4DP1_WorkReIHNum 7             『 プロセス特殊作業領域のためのReIH  』
#define V4DP1_Dimlnfo_DimNameMax 31    『 ディメンション名内の最大バイト 』
#define
V4DP1_Dimlnfo_ReIHReview Const 1           『 バインディングはディメンション定義において定められ、変更できない 』
#define
V4DP1_Dimlnfo_ReIHReview Area 0    『領域がロード又はアンロードされるときはいつでも、HNumカテゴリを調べる』
#define
V4DP1_Dimlnfo_ReIHReview Bind 2    『 このディメンションに対する各バインディングで調べる（非常に高価な選択!!） 』
struct V4DP1_Dimlnfo
{
union V41S＿KeyPrefix
kp ;      『 Type=V4, SubType=Dimlnfo, Mode=lnt, Length=8 』
int
Dimld ;                                        『ディメンション・コード（Dim名のために辞書エントリーする） 』
char Dim Name[V4DP1_Dimlnfo_DimNameMax+1] ;
short
PointType ;                           
『このdimensionV4DP1 PntType xxxに考慮される点の形式』
short
PointVerify ;                          『このpoint-V4DP1 PntVerify_xxxを確認する（受け入れる）方法』
short
RangeOK ;                            『 点範囲（xxx..yyy）が許されればTRUE』
short
ListOK ;                                 『点リスト (xxx,yyy,zzz)が許されればTRUE
』
short IsModule ;                             『 点が外部（Ｖ3）モジュールにリンクすればTRUE  』
short UniqueOK ;                           『 TRUEならば、点を  dim={NEW} として特定することが可能になる』
short DictType ;                                 『辞書形式- V4DP1_DictType_xxx 』
int BindList ;                         『TRUE ならばディメンションはBindList
エントリーへのキーとなることができる』
short
ExpandMacro ;                       『以下のマクロ内のバイトの数（すなわち、拡張が構文解析中であれば、TRUE） 』
char MacroBuf[100+1] ;                  『点受け入れについての拡張のためのマクロバッファ 』
short
ReIHNum ;                               『このディメンションに対する相対階層構造数（バインディングのための）』
char ReIHCategory[31+1] ;             『 バインディングのためのカテゴリー・コード 』
short
ReIHReview              
『
ReIHNumCategory-V4DP1_Dimlnfo_ReIHReview_xxxを&shy;レビューする頻度』
char AcceptorModule[31+1] ;         『 V3 アクセプタモジュールの名前 』
int AcceptorObject[2] ;                     『アクセプタモジュールのためのOBJREF 』
char DisplayerModule[31+1] ;        『 V3 ディスプレーヤ・ モジュールの名前 』
int DisplayerObject[2] ;                    『ディスプレーヤのための OBJREF 』
『以下の
MUSTはディメンション情報の終わりにある !!! 』
struct V4DP1＿Point AutoCtxPnt ;       『ゼロでない場合、Auto-Context
に用いられるべき点がルックアップする』
struct
V4DP1＿DimUnique             『 一つのディメンションのための次の利用可能な点の数を保持する記録の構造』
{
union V41＿KeyPrefix
kp ;           『 Type=V4, SubType=Dimlnfo, Mode=lnt, Length=8 』
int Dimld ;                                          『 ディメンション・コード 』
unsigned long NextAvaiIPntNum ;        
『 次男利用可能な数 (ReIH のプレフィックス!)
[SHOULD BE UNSIGNED!!!] 』
#define V4DP1_PointlntMix_Max 12
struct V4DP1＿Poin_tIntMix           『整数範囲のリストを定める 』
{
struct { int BeginInt,Endlnt ;        『 範囲内のはじめと終わり
(end=begin for single) 』
} Entry[V4DP1_PointlntMix_Max] ;
#define V4DP1_PointAlphaMix_Max 12         『 Alphaの最大数が 適切に混合する 』
struct V4DP＿Point_AIphaMix
struct V4DP1_Point_ AIphaMix
{struct{ unsigned short Beginlndex ;
unsigned short
Endindex ;
}EntryV4DPI_PointAlphaMix_Max] x ;
unsigned short Endindex ;
}Entry[V4DPI_PointAlphaMix_Max] ;
union V4DPI＿PointMask
{ struct
{ unsigned Areald : 8 ;          『領域「所有（owning）」 点』
unsigned long Pointid : 24 ;       
『Point
Id 』
}fld;
int all ;
#define XTRHNUMDIM(dimid) (dimid&raquo;13)                         『 ディメンション
IDからハイアラーキー数を抽出する 』
#define
ADDHNUMDIM(hnum,dimid) ((hnum<<13)j(dimid&0x1 FFF))  『ディメンションにハイアラーキー数を加える 』
#define XTRHNUMDICT(dictnum)
((((unsigned long)dictnum)&raquo;28)&7)   『 辞書エントリーからハイアラーキー数を抽出する』
#define ADDHNUMDICT(hnum,dictnum)
((hnum<<28)1(dictnum&OxOFFFFFFF)) #define ISDICTEXT(dictnum)
((dictnum&raquo;28)!=0)    『 辞書数が範囲外であれば真』
#define
MAXDIMNUM OxFFFF              『 最高許容ディメンション数
(3 ビット接頭語含む) 』
#define
DIMDICT (int 』)-1            『ディメンション名を探すためにDictEntryGet を見分けるための特殊フラグ 』
#define V4DPI_DictType_Dim 1     『 ディメンション・エントリー 』
#define V4DPI_DictType_Int 2             
『内部(領域への) エントリー 』
#define V4DPI_DictType_Ext 3              『 外部エントリー（他の領域にあるバインディング内にッ参加できる） 』
#define V4DPI_DictEntryVal_Max 31          『辞書エントリーの中のバイトの最大数  』 struct V4DPI＿DictEntry
{
union V4IS＿KeyPrefix
kp ;                      『 Type=V4, SubType=Dict, Mode=Alpha, 』
char EntryVal[V4DPI_DictEntryVal_Max+4]
;  『辞書エントリー』
』 int Entryld                                            『 対応する数字エントリ（EntryValにすぐ続く） 』
};
struct V4DPI＿RevDictEntry
{
union V4IS＿KeyPrefix
kp ;                      『 Type=V4, SubType=RevDict, Mode=lnt, Len=8
int Entryld ;                                                    『数字エントリー(ref) 』
char EntryVal[V4DPI DictEntryVal Max+4]
;    『 対応する辞書エントリー 』
『 特殊ディメンションを定義する』
#define Dim_ Dim 1                                      『ディメンション  ディメンション 』
#define Dim_BindHNum 2                         『BindHNum』 
#define Dim_BindCategory 3
#define 
Dim_BindLifeTime 4
#define Dim_BindWeight 5
#define Dim_StartDimlndex 10                   『 他のディメンションに対する開始数（最後の上のものより大きくなければならない）』
【００１９】
バインディング・データ構造
struct V4DPI_Binding
{
union V4IS＿KeyPrefix
kp ;                    『 Type=V4, SubType=Value, Mode=lnt, Len=8 』
int
Valueld ;                           
『 この値に対するキー（リンク機構のための下記のバインドリスト参照）』
unsigned short Bytes ;                         
『このバインディング内のバイト数』
unsigned short Isctlndex ;                『共通部分のスタートのためにバッファーに入るインデックス』int BindWgt ;                      『 バインディング重み 』
char Buffer[V4IS BktSize Max] ;             『 この点におけるそのときのIsct
を評価する (注:「int」揃えでなければならない!!!)』
};
『
BindListの書式 （これは救いようのないほどかなり複雑で図式的である 』         
header info (V4DPI＿Bind
List)
BindList_Value entry                                 Buffer[ValueStart]にすぐ続く点
BindList_ Value entry                                降順重みでの多重点
BindList_ Value entry                             「一致」すべき最初のものがとるべきものであるように
BindList_
Dim                              バッファにおいて[DimStart] 及び以下の点へのオフセットのリストを含む 
（注:
この尿なものすべてが浮動できるように最初のお布施てとは０である）
dim=value point                                         バッファ[PointStart]でスタート
dim=value
point                    これらの点は逐次であり、「サイズ」フィールドによってオフセットされる
#define V4DPI BindList_ BufMax 10000        『 バインディング内の最大倍と数 』 struct V4DPI_BindList
{
union V4IS                                       KeyPrefix
kp ;         『Type=Binding,
AuxVal=Dim, key=point, Mode=lnt, Len=8 』
int DimPntVal ;                                    『 点値 （しばしば Nld点） 』
unsigned short Bytes ;                     『このバインディング内のバイト数』
unsigned short ValueCnt ;          『 値の数 』
unsigned short ValueStart ;       
『 値を求めて以下のインデックスをスタート 』
unsigned short DimStart ;          『 dim=値点のスタートへの以下のインデックス 』
unsigned short PointCnt ;           』dimの数=値点 『
unsigned short PointStart ;       
『以下のバッファ内でスタート 『
int LUBindld ;                                     『このリストに対する最後に使用したバインド 』
unsigned char Buffer[V4DPI BindList BufMax] ;        『データバッファー (注:
「int」そろえでなければならない)
』
#define V4DP__ IsctDimMax 30        『共通部分の中のディメンションの最大数 』 
struct V4DPI__BindList_Value
{
struct V4DPI_ShortPoint sp ;        
『 バインド点値
(sp. Bytes == 0 であれば
sp.Value.IntVal は
Valueldである)
』
int BindWgt ;                                      『バインディング重み 』
unsigned char Bytes ;                  『このエントリーの中のバイト（そろえた）の数 』
unsigned char Bindld ;                    『 この値に対するバインディング
Id 』
unsigned char IndexCnt ;                               『 以下のインデックス・エントリーの数 』
unsigned char DimPos[V4DPI_IsctDimMax] ;
『 dim=この値に関連する値 の以下のDimEntrylndex 内の位置』
};
typedef struct V4DPI＿BindList_Value BLV   ;   『生活を容易にするため 』
#define V4DPI_BindList_DimMax 500           『以下の最大ディメンション 』
struct V4DPI__BindList_Dim
{
short DimCnt ;                                               『以下に索引付けされたディメンションの数 』
unsigned short Dim Entrylndex[V4DPI
BindList DimMax] ; 『
Index to dim=「ブラインドリスト・バッファ」内の値』
struct V4DP1_BindPointVal          『「ブラインディング点」に対する「値」の「書式」』l
{ unsigned short Dim ;              
『「ディメンション」 』
unsigned short Bindld ;                『 リスト内の「バインディングId」 』
int
DimPntVal ;                                『 バインディングリストのための「点値」（キーを形成するために用いられたこれらの最初の３フィールド）』
unsigned short Areald ;                    
『 バインディングリストを含む領域のAreald 』
};
struct V4DPI__EvalList
{ short Init ;                      
『これが初期化された場合
TRUE 』
short SkipCnt ;                               『値を復帰する前にスキップするための呼び出しの数 (値を復帰させるためには0)
』
short RetumCnt ;                               『値を復帰させるための回数 』
short AreaCnt ;                      『 以下の領域の数』
short
AreaMatch ;                             『最後に一致した以下のareanblへIsctEvalによってセットする 』
struct
{ struct V4DPI__BindList*nbl ;             『 この領域に対するバインドリスト』
struct V4DPI__BindList_Dim *nbld ;  『ディメンションリストへのポインタ』
struct
V4DPI__BindList_Value *nblv ;            
『 リスト内の現在の値へのポインタ 』
int Valx ;                                                 『 現在の値のインデックス(0乃至 nbl->値Cnt)
』
int CurWgt ;                                          『現在のコンテンダーの重み (-1 は次を選ぶ,
0= これ以上なし)』
char
DimTest[V4DPI__BindList_DimMax] ;   『nbld内のディメンションによって、
O=テストなし, 1=テストOK,
- 1 =テスト間違い 』
int
Areald ;                                          『 領域ID
』
} Area[16] ;
};
#define V4DPI_AreaBindlnfo_Dim_Max 250  『 以下のレコード内のディメンションの最大数』
struct V4DPI__AreaBindlnfo
{
union V4IS__KeyPrefix kp ;                  
『 タイプ = V4, サブタイプ=Bindlnfo,
モード=lnt, 長さ=8
』
int key                                    
『今に対して０ 』
unsigned short Bytes ;                                   『このレコード内のバイト数 』
short DimCnt ;                                                  『以下のディメンション数 』
unsigned
short DimsWithBind[V4DPI AreaBindlnfo Dim_Max] ; 『バインドレコードのある領域内のディメンッジョンのリスト 』
【００２０】
エバリュエータの機能性
struct kwlist
{ int value ; char entry[15]
struct kwlist comlist[] _ { { 1, "AREA:'), { 2,
"BIND" }, { 3, "CONTEXT'), { 4, "DIMENSION" },
{ 5, "INCLUDE" }, { 6, "POINT" }, { 7,
"=" }, { 8, "BUCKET" }, { 9, "SET" }, { 10,
"EXIT" }, { 11, "APPEND" }, { 12, "INSERT" }, {
13,
{ 14, "DUMP" }, { 15,
"EVALUATE" }, { 16, "IF" }, { 17, "ELSE" }, { 18,
"ENDIF" },
{ 19, "ARGUMENTS" }, { 20,
"ECHO" }, { 21, "ELSEIF" }, { 22, "ERROR" },
{ 23, "IF1" }, {-1,""} } ;
struct
kwlist dimlist[] _ { { 0,          1,
"ACCEPTOR" }, { 2, "BINDING" }, { 3, "DISPLAYER"
}, { 4, "MACRO" },
{ 5, "MULTIPLE" }, {6, "RANGE" }, { 8,
"UNIQUE" }, { 9, "VERIFY" }, { 10, "INTERNAL" },
{ 11, "EXTERNAL" }, { 12, "DIMENSION" },
{ 13, "HEIRARCHY" }, { 14,
"CATEGORY" }, { 15, "REVIEW" }, { 16,
"AUTOCONTEXT" }, {-1,
struct kwlist dimrlist[] ={ {
V4DPI_Dimlnfo_ReIHReview_Const, "CONSTANT" },
{V4DPI_Dimlnfo_ReIHReview_Area; "AREA:'), 
{ V4DPI_Dimlnfo_ReIHReview_Bind,
"BINDING" }, {-1, ""}
struct kwlist arealist[]=
{ { 1, "CREATE" }, { 2, "READ" }, { 3, "UPDATE"
}, { 4, "CLOSE" }, { 5, "CREATEIF" }, {-1, ""} }
;
struct
kwlist ahilist[] _ { { 0, 1,
"HEIRARCHY"}, { 2, "EXTDICTUPD"}, { 3,
"INTDICTUPD" }, { 4,"BINDINGUPD" },
{ 5, "PRIMARY" }, { 6,
"SLAVE" }, { 7, "CATEGORIES" }, { 8,
"NOEXTDICTUPD" },
{ 9, "NOINTDICTUPD" }, { 10,
"NOBINDINGUPD" }, { 11, "NEWMACRO" }, { 12,
"BUCKETSIZE" }, {-1,""}
struct kwlist ctxlist[] _ { { 1,
"ADD"), {4, "EXAMINE"), {2, "POP"), {3,
"PUSH"), {-1, “”}
struct kwlist setlist[] _ { {0,";"}, { 1,
"ECHO" }, { 2, "NOECHO" }, { 3, "RESULTS" }, { 4,
"NORESULTS" },
{ 5, "TRACE"}, { 6,
"NOTRACE" }, { 7, "MACROBIND" }, { 8,
"MACROCALL"}, {9, "TEXTBIND"},
{ 10, "PARAMETER"}, {-1,
struct kwlist iflist[] _ { { 1, "DEFINED"}, {2,
"EMPTY" }, {3, "SAME"), {4, "NUMERIC"), {-1,””}
};
struct kwlist pntlist[]=
{ V4DPI_PntType_Char, "ALPHA' j,
{V4DPI_PntType_Cmpndlsct, "COMPOUND"), {
V4DPI_PntType_FrgnDataEI, "DATAEL" },
{V4DP1_PntType_Dict, "DICTIONARY"},
{V4DPI_PntType_Foreign, "FOREIGN”}, { V4DPI_PntType_Int,
"INTEGER" },
{ V4DPI_PntType_Isct, "INTERSECTION"), { V4DPi_
PntType_IntMod, "INTMOD" },
{V4DPI_PntType_Pntldx, "POINTINDEX”}, {
V4DPI_PntType_Shell, "SHELL" },
{ V4DPI_PntType_Special, "SPECIAL" },
{V4DPI_PntType_FrgnStructEl, "STRUCTEL”},
{V4DPI_PntType_V3Mod, "V3MOD"},
{V4DPI_PntType_V3ModRaw, "V3MODRAW”}, {
V4DPI_PntType_Context, "CONTEXT"),
{ V4DPI_PntType_List, "LIST"),
{V4DPI_PntType_Pragma, "PRAGMA" },
{V4DPI_PntType MemPtr, "MEMPTR" },
{ V4DPI_PntType V3PicMod, "V3PICMOD" }, { V4DPI_
PntType BigText, "BIGTEXT" },
{ V4DPI_PntType PIntMod, "PINTMOD" }, {
V4DPI_PntType Time, "TIME" },
{ V4DPI_PntType Binding, "BINDING"
}, { V4DPI_PntType Logical, "LOGICAL" }, {-1,””},
};
『v4eval_Eval
&#8211; テキスト・ストリングを評価する  』
『Call: xxx = v4eval_Eval( tcb , ctx, multeval , inittrace,
initresult)
ここで tcb はトークン制御ブロック
(V4LEX＿TknCtrIBLk) へのポインタである。
ctx は現在のコンテクストである。,
multevalはマルチ・ライン評価に対して真であり、単一命令に対しては偽であり,
inittraceは初期トレース設定であり、
initresultは初期結果設定である。』         
v4eval_Eval(tcb, ctx, multeval,inittrace,
initresult)
struct V4LEX__TknCtrIBlk *tcb ;
struct V4C Context *ctx ;
int multeval,inittrace,initresult ;
eval_it:         strcat(tbuf,"\r")
; v4Iex_InitTCB(&ttcb) ;v4Iex_Nestlnput(&ttcb,0,tbuf,V4LEX_InpMode
String) ; v4dpi_PointParse(ctx,&isctpt,&ttcb) ;
v4eval_ChkEOL(&ttcb) ;if (v4dp_
IsctEval(&valpt,&isctpt,ctx,NULLP,FALSE,&aid,NULLP) == NULLP)
v4_error(tcb,"V4","EvaI","MACNOTDEF","No
such macro currently defined: %s",cname) ;    『このエントリーに対するキーを設定する 』
bt = (struct V4LEX＿BigText *)v4mm_AllocChunk(sizeof *bt,FALSE) ;
bt->kp.fld.KeyType = V4IS_KeyType_V4 ;
bt->kp.fld.KeyMode = V4IS_KeyMode_Int ; 
bt->kp.fld.Bytes = V4IS_IntKey_Bytes
; bt->kp.fld.AuxVal = V4IS_SubType_BigText ; 
bt->Key = valpt.Value.IntVal ;
if (v4is_PositionKey(aid,bt,&btx,0,V4IS_PosDCKL) !=
V4RES PosKey)
v4
error(tcb,"V4","Eval","LOADMACFAIL","Could
not load macro (%s) from V4 area (%d)",cname,aid) ;
strcpy(mname,
cname) ;             『再び参照する場合に名前を保存する。 』
v4is_GetData(aid,bt,sizeof *bt,0) ;             『 btにコピーする。 』
if (gotfile)                        『ファイルするためのコピーならばそれをする。 』
{ for(i=0;filename[i]!=0;i++) {
filename[i] = tolower(filename[i])
if ((fp = fopen(v3 logical
decoder(filename,FALSE),(gotfile =_
V_OpCode_Rangle ? "w" :
"a"))) == NULLP)
v4_error(tcb,"V4","Eval","FOPENERR","Could
not writeappend to file %s (%d)",filename,errno) ;
fputs(bt->BigBuf,fp) ; fclose(fp) ;
}
else                           『拡張マクロならば、語彙的にさっと変わる。』
{
v41ex_Nestlnput(tcb,NULLP,bt->BigBuf,V4LEX_InpMode_String) ; 
tcb->ilvl[tcb->ilx].arglist
= (char*)v4mm AllocChunk(strlen(argbuf)+1) ;
strcpy(tcb->ilvl[tcb->ilx].arglist,argbuf)
;             『引数リストをレベルバッファにコピーする。』 
};
break;
case 0:     『行の終わり(すなわち、空白)。 』が続く;
case
13:    『「{/} を得た-
新規な「マクロ」又はテキストエントリーを創る。 』
if (bt != NULLP) { memset(bt,0,sizeof
*bt) ; }
else
{ bt = (struct V4LEX＿BigText
*)v4mm AllocChunk(sizeof 』bt,FALSE)
; } ; 『一時バッファを割り当てる 。』
v4lex_NextTkn(tcb,0) ;                                            『 マクロ／エントリー名を得る。』
strcpy(mname,tcb->keyword) ;        『 名前とすべての臨時スタッフを行の終わりまで（下に）コピ−する。』
『Parse
rest of: {macro [( argument name list)] "optional args" } < file』
gotnest =
FALSE; v4lex_NextTkn(tcb,V4LEX_Option_RetEOL) ; 
argbuf[0] = 0 ;             『 パラメータ名リストを消去する。 』
if
(tcb->opcode == V_OpCode_LParen)
{
strcay(argbuf,"Argument ") ;                     『引数を扱うためのダミー命令を設定。 』
for(i=O;i<V4LEX_Tkn_ArgMax;i++)
{ v4lex NextTkn(tcb,0) ;
if (tcb->type != V4LEX_TknType_Keyword)
v4_error(tcb,"V4","Eval",
"INVMACARGNAME","Not a valid macro argument name") ;
strcat(argbuf,tcb->keyword)
; strcat(argbuf,"           『引数名のトラックを維持』
v4lex NextTkn(tcb,0) ; if (tcb->opcode ==
V_OpCode_Comma) continue; 
if (tcb->opcode == V OpCode RParen) break ;
v4_error(tcb,"V4","Eval","INVMACARGTERM","Expecting
comma or right paren after argument name") ;
} ; strcat(argbuf,";") ;
v4lex NextTkn(tcb,V4LEXOption RetEOL) ;
if (tcb->type == V4LEX TknType String)
{ strcpy(xdims,tcb->string) ; v4lex
NextTkn(tcb,V4LEXOption RetEOL) ; } else { xdims[0] = 0 ; } ;
if (tcb->opcode == V OpCode RBrace)
{ v4lex NextTkn(tcb,V4LEXOption RetEOL)
; if (tcb->opcode != V_OpCode Langle)
v4 error(tcb,"W",
"Eval", "MISSINGLBRKT',"Expecting \"<\" after
closing brace in macrotext declaration") ;
v4lex_NextTkn(tcb,V4LEX_Option_RetEOL) ;
if (tcb->type == V4LEX_TknType_Keyword)
{ for(i=strlen(tcb->keyword)-1;
i>=O;i--) { tcb->keyword[i] = tolower(tcb&shy;>keyword[i]) ; } ;
strcpy(tcb->string,tcb->keyword) ;
strcat(tcb->string,".v4b") ;
if ((incfp = fopen(v3 logical
decoder(tcb->string,TRUE),"r")) _= 0)
v4
error(tcb,"V4","Eval","INVINCFILE","Could
not access file to INCLUDE %s (%d)",tcb->string,ermo) ;
gotnest
= TRUE ; strcpy(tbuf,tcb->string) ; v4eval_ChkEOL(tcb) ; 『EOLを照合 』
if (gotnest) {
v4lex_Nestlnput(tcb,incfp,tbuf,V4LEX_InpMode_File) ; gotnest = tcb&shy;>ilx ; }
;
tcb->need_input_line = TRUE ;                                             『 Force to new line 』
if
(strlen(textbind) > 0)    『Handle different depending on textmacro 』
{ for(mp=bt->BigBuf,』mp=NULLP,savemp=NULLP,nest= 1;;) {v4lex Read
NextLine(tcb,1);
if (gotnest) { if (gotnest != tcb->ilx) break ; }
else { if (strncmp(tcb->ilvl[tcb->ilx].input
str,"{",1) == 0) nest++ ;
if (strncmp(tcb->iivl[tcb->ilx].input_str,"!{",2)
_= 0) nest++ ;
if
(strncmp(tcb->ilvl[tcb->iix].input_str,"}",1) _= 0) nest--; 
if
(strncmp(tcb->ilvl[tcb->ilx].input_str,"!)",2) _= 0) nest-- ; 
if (nest <= 0) { tcb->need input_line = TRUE ;
break;
} ; strcat(mp,tcb->ilvl[tcb->ilx].input_str) ; mp +=
strlen(tcb->iivl[tcb->ilx].input str) ; 
*mp = NULLP ;
} else
{ mp = bt->BigBuf ;
if (strlen(argbuf) > 0) { strcpy(mp,argbuf) ; mp +=
strlen(argbuf) 
*mp=0;
for(savemp=NULLP;; )
{
v4lex_NextTkn(tcb,V4LEX_Option_ForceAsls);
if (gonest) { if (gotnest != cb->ilx);
break ; }
else
{ if (savemp != NULLP)                                『マクロ定義‐２パート・プロセスの終わりを探す 』
{ if (strcmp(tcb->string,mname) == 0)
{ mp = savemp ; break; } else { savemp = NULLP ; continue;
} ;
if (strcmp(tcb->string,"}P) _=
0) savemp = mp ;『（セカンド・パート）』
};
strcat(mp,tcb->string)
; strcat(mp,"                       mp
+= (strlen(tcb->string)+1) ; } ; *(mp-1) = NULLP ;
bt->Bytes = (char 』)mp - (char*)bt + 1 ;                                                         『 エントリーの長さを得る 』
if (strlen(macrobind) == 0 &&
strlen(textbind) == 0) break;             『 「セット・マクロバインド」がないとき、すぐローカルに保存 』 
strcpy(bindbuf,(strlen(macrobind) > 0
? macrobind : textbind)) ; 
for(i=0,1=0; ; i++)
{switch (bindbuf[i])
{case 0:                                 tbuf[I]
= 0 ; goto eval_it2 ;
case'*':                                  tbuf[I]
= 0 ; strcat(tbuf,mname) ;
if
(strlen(xdims) > 0) { strcat(tbuf,"”);                                          strcat(tbuf,xdims);};
I
= strlen(tbuf) ; break ;
default:                        tbuf[I++]
= bindbuf[i]; break;
eval_it2: strcat(tbuf," Y');
v4lex_InitTCB(&ttcb) ;
v4lex_Nestlnput(&ttcb,0,tbuf,V4LEX_InpMode_String)
;
v4dpi_PointParse(ctx,&isctpt,&ttcb);
v4dpi_PointParse(ctx,&valpt,&ttcb); v4eval_ChkEOL(&ttcb) ;                                                                                    『 EOLを照合 』
v4ctx_FrameAddDim(ctx,V4C_Frameld_Real,&valpt,0);                      『 現在のコンテクストに点を追加 』
v4dpi_BindListMake(&bindpt,&valpt,&isctpt,&nbl,ctx,&aid)
;
『このエントリーのためのキーを設定 』
bt->kp.fld.KeyType = V4IS_bKeyType_V4
; bt->kp.fld.KeyMode = V4lS_KeyMode_Int ; 
bt->kp.fld.Bytes = V4lS_IntKey_Bytes ;
bt->kp.fld.AuxVal = V4lS_SubType_BigText ; bt->Key =
valpt.Value. IntVal ;
『次にそれをすべて書き出せ』
v4is_Insert(aid,bt,bt,bt&shy;>Bytes,V4IS_PCB_DataMode_Data,V4IS_DataCmp_Non
e,0,FALSE,FALSE,0) ;
if (results) printf("Wrote macro %s to area
%d\n",m name, aid) ; break;
case 11:                     『[共通部分を]
値を添付』
case
12:                    『 [共通部分]
値を挿入』
v4dpi_PointParse(ctx,&isctpt,tcb) ;
v4dpi_PointParse(ctx,&valpt,tcb) ;
if (valpt.Grouping == V4DPI_Grouping Current)      『 コンテクストからの値を引き出すか?
{CONTEXT) 』
{ if ((dpt = v4ctx_DimValue(ct(,valpt.Dim, FALSE)) ==
NULLP)
v4_error(tcb,"V4", "App
Ins","PTNOTINCTX","Could not find value point in current
context") ;
memcpy(&valpt,dpt,dpt->Bytes) ;
v4eval_ChkEOL(tcb) ;                                                『 EOL を照合』
bind = (struct V4DPI＿Binding
v4dpi_IsctEval(&point,&isctpt,ctx,NULLP,trace,&aid,NUL LP) ;
if
(bind == NULLP) v4
error(0,"V4","Append","NOAPNDINSPT","No
point found to APPENDINSERT to") ;
memcpy(&bindpt,bind,
bind->Bytes) ;          
『バインディングを一時バッファにコピー 』
bind = &bindpt ;
dpt = (struct V4DPI_Point 』)&bind->Buffer ;    『ポインタに点のリストを作らせる 』
isct = (struct
V4DPI_Point*)&bind->Buffer[bind->Isctlndex] ;
memcpy(&isctpt,isct,isct->Bytes) ;  『 共通部分を一時バッファにコピーする』 
Ip
= (struct V4L__ListPoint *)&dpt->Value ;                『リストにリンクさせる』 
v41_ListPoint_Modify(Ip,(cx==11
? V4L_ListAction_Append :V4L_List Action_Insert),&valpt) ;
dpt->Bytes =
ALIGN((char*)&dpt->Value.AIphaVal[Ip->Bytes] - (char *)dpt) ;
bind->Isctlndex = ALIGN(dpt->Bytes) ;        『後部共通部分のための新しいオフセットを得る 』
memcpy(&bind->Buffer[bind->Isctlndex],&isctpt,isctpt.
Bytes) ; 『共通部分を戻す 』
bind->Bytes = (char 』)&bind->Buffer[bind->Isctlndex+isctpt.Bytes]
- (char *)bind ;     
『バインディングをそれが来たところから書き直す 』
v4is_Replace(aid,bind,bind,bind,bind->Bytes,V4IS_PCB_DataMode_Index,V4IS_DataCmp
_Non e,0,0) ;
if (results)
{
v4dpi_PointToString(&result,dpt,ctx,-1) ; printf("List =
%s\n",result): break ;
case 19:                       『 「引数」名前リスト 』
b=0;  『 すべてが同じ文字で始まる場合、トラックするのに使われえる 』
for(i=0;i<V4LEX_Tkn_ArgMax;i++)
{ v41ex NextTkn(tcb,V4LEX Option RetEOL) ;
if (tcb->type != V4LEX TknType Keyword) break; if (b ==
0) { b = tcb->keyword[0] ; )
else { if (b != tcb->keyword[0]) b =
TRUE;};
strcpy(tcb->ilvl[tcb->ilx].macarg[i].name,tcb->keyword)
;                  『このレベルに対する名前リスト内にちょっと保存する 』
tcb->ilvl[tcb->ilx].HaveMacroArgNames
= b ;        『 名前を得たフラグ 』
break;
case 1:                         『 AREA mode [fileame options] 』
memset(&pcb,0,sizeof pcb）;
strcpy(pcb.V3name（testu）」）;
pcb.BktSize = 8192 ;
pcb.DataMode =
V41S_PCB_DataMode_Auto;pcb.AccessMode =-１;
pcb.DfltPutMode = V41S_PCB_GP_Insert;
pcb.MinCmpBytes = 500;
pcb.DfltDataMode = 500;
memset(&ahi,0,sizeof ahi）;ahi.IsPrimary
=TRUE;
strcpy(ahi.BindCatList（KERNEL）」）;
ahi.BindingsUpd = TRUE; ahi.IntDictUpd =
TRUE; ahi.ExtDictUpd = TRUE;
switch (v4eval NextKeyWord(arealist,tcb))
{default:v4_error(tcb,"V4","Eval","INVAREAACCKW";
"Invalid AREA access keyword:
%s",tcb->keyword) ;
case 1:『 CREATE 』 pcb.OpenMode =
V41S_PCB_OM_New;
ahi.ReIHNum = 5; break;
case 2: 『 READ 』 pcb.OpenMode =
V41S_SP_CB_OM_Read ; break;
case 3: 『 UPDATE』  pcb.OpenMode =
V41S_PCB_OM_Update; break ;
case 4:『 CLOSE 』  v4ctx AreaClose(ctx,-1) ;
goto end area ;
case 5: 『 CREATEIF』 pcb.OpenMode =
V41S_PCB_OM_Newlf ;
ahi. ReIHNum = 5; break;
【発明を実施するための最良の形態実施例】
【００２１】
手続き型言語（データ）
従来の高水準プログラミング言語の可変構造に近づくために本発明の方法を使用する際に、例えば、人は次のようにディメンション及びバインディングを定めるだろう：
Nld（プログラムの中のものの名前のためのディメンション）。
Program （システムの中の各プログラムに対応する点のためのディメンション）。
Proc（プログラムにおいて表明された各手順に対応する点のためのディメンション）。
Invoke（各手順呼出し（実行されるプログラムとしてつくられた）に対応する点のためのディメンション）。
プログラムの変数は、次に、以下のバインディングとみなされる：
グロ−バルヒープ[ NId=var（Program=name）]
ローカルダイナミック[NId=var, Proc=procedure,
Invoke=frame]
ローカルヒープ[NId=var, Proc=procedure]
【００２２】
このような構造において、Program、Proc及びInvokeはコンテクトCの一部として確定される場合、同様に従来のプログラミングに記載の、変数の各形式はNId点（すなわち変数名）によって、単に参照される。コンテクストの保守はプログラムと関係なく実行される（フレーム、ヒープ、スタック及びその他のメモリ構造を管理するコンパイラによって生成される内部コードの操作に類似の方法で）。
【００２３】
データベース定義例
Data El= (5109,1, CHECK NUMBER,APO_CHECK
NUMBER,1,0,1,0,4,0)
Bind [Field=CHECK DATE FileRef=5109
DataEl]
DataEl= (5109,2, CHECK DATE,EXEC
KO_DATE,1,0,1,4,4,0)
Bind
[Field=CASH_ACCOUNT FileRef=5109 DataEI] 
DataEl=(5109,3,CASH ACCOUNT,APO_CASH
ACCOUNT, 15,0,1,8,2,0)
Bind [Field=TTL_CHECK AMT FileRef=5109
DataEI]
DataEl=(5109,4,TTL_CHECK_AMT,EXEC_KO_MONEY,1,0,1,12,4,2)
Bind [Field=TTL_DISCOUNT_AMT
FileRef=5109 DataEI] 
DataEl=(5109,5,TTL_DISCOUNT_AMT,EXEC_KO_MONEY,1,0,1,16,4,2)
Bind [Field=TTL_APPLY_AMT FileRef=5109
DataEI] DataEl=(5109,6,TTL_APPLY_AMT,EXEC_KO_MONEY,1,0,1,20,4,2)
Bind
[Field=SORT1 FileRef=5109 DataEI] 
DataEl=(5109,7,SORT1,EXEC
KKO ALPHA,3,0,1,24,10,0) 
Bind
[Field=NAME FileRef=5109 DataEI]
DataEl=(5109,8,
NAME, EXECO ALPHA,3,0,1,34,30,0)
Bind
[Field=ADDRESS1 FileRef=5109 DataEI]
DataEl=(5109,9,ADDRESS1,EXEC_KO
ALPHA,3,0,1,64,30,0)
Bind [Field=ADDRESS2 Fi[eRef=5109
DataEI] 
DataEl=(5109,10,ADDRESS2,EXEC_KO_ALPHA,3,0,1,94,30,0)
Bind [Field=CITY FileRef=5109 DataEI]
DataEi=(5109,11, CITY,
EXEC_KO_ALPHA,3,0,1,124,30,0) 
Bind [Field=ADDRESS3 FileRef=5109
DataEI]
DataEl=(5109,12,ADDRESS3,EXEC_KO_ALPHA,3,0,1,154,30,0)
Bind [Field=ADDRESS4 FileRef=5109
DataEI] 
DataEl=(5109,13,ADDRESS4,EXEC_KO_ALPHA,
3,0,1,184,30,0)
Bind [Field=ZIP FileRef=5109 DataEI] 
DataEl=(5109,14,ZIP,APO_GEN_UZIP,1,0,1,216,4,0)
Bind [Field=ZIPXTRA FileRef=5109 DataEI]
DataEl=(5109,15,ZIPXTRA,
EXEC_KO_ZIPXTRA, 3,0,1, 220,16, 0)
Bind [Field=STATE FileRef=5109 DataEI]
DataEI=(5109,16, STATE,
EXEC_KO_UCALPHA,3,0,1,236,2,0) 
Bind [Field=COUNT FileRef=5109 DataEI]
DataEl=(5109,17, COUNT, EXEC_KO_INTEGER,
15,0,1,238,2, 0)
Bind [Field=SEL_INDEX FileRef=5109
DataEI] 
DataEl=(5109,18,SEL_INDEX,
EXEC_KO_INTEGER,15,0,2,0,2,0)
Bind [Field=APOPNITM_ID FileRef=5109
DataEI] 
DataEi=(5109,19,APOPNITM_ID,APO
APOPNITM_ID,1,0,2,4,4,0)
Bind [Field=VENDOR_INVOICE FileRef=5109
DataEI] 
DataEl=(5109,20,VENDOR_INVOICE,APO_VENDOR_INVOICE,
3,0,2,8,15, 0)
Bind [Field=VENDOR_INV DATE FileRef=5109
DataEI] 
DataEl=(5109,21,VENDOR_INV_DATE,EXEC_KO_DATE,
1,0,2,24,4,0)
Bind [Field=COMMENTS FileRef=5109
DataEl] 
DataEl=(5109,22, COMMENTS, EXEC_KO_ALPHA,3,0,2,28,30,0)
Bind [Field=CHECK AMT FileRef=5109
DataEl] 
DataEl=(5109,23,CHECK AMT,EXEC
KO_MONEY,1,0,2,60,4,2) 
Bind [Field=DISCOUNT AMT FileRef=5109
DataEI] 
DataEl=(5109,24,DIS0(50NT
AMT,EXEC_KO_MONEY,1,0,2,64,4,2)
Bind [Field=APPLY AMT FileRef=5109 DataEl]
DataEl=(5109,25,APPLY AMT,EXEC KO MONEY,
1,0,2,68,4,2)
Bind [Field=ALL FileRef=5109 DataEl] 
DataEl=(5109,26,ALL,EXEC KO ALPHA, 3,0,2,0,72,0) 
Bind [Field=ITEMFileRef=5109DataEI]
DataEl=(5109,27,ITEM, STRUCT1,3,0,1,240,25200,2) 
Bind [FileRef=5109 Structure=2]
StructEl=(5109,2,27,72,350&#8222;240)
Bind
[Field=DEF＿AP_CHECK_
PRINT FileRef=5109 DataEI]
DataEl=(5109,28,DEF＿AP_CHECK_PRINT,STRUCT0,3,0,0,0,25440,2)
Bind
[FileRef=5109 Structure=1] StructEI=(5109,1,28,25440,0&#8222;0)
Bind [Field=VENDOR REF FileRef=5110
DataEI]
【００２４】
手続き型言語（制御の流れ）
上記のデータ構造に加えて、プログラム制御の流れは、以下のディメンション及びバインディングを必要とする：
Level・（Begin/End構造の入れ子式レベルのためのディメンション）。
Step・・（各手順のプログラム文のためのディメンション）。
Label・・（任意のラベルのためのディメンション）
したがって、流れを与えるバインディングは、そうである：
[Proc, Level, Step, NId=NextStep] = step Goto:
[Proc, Level, Step, NId=NextStep] = step
一方、条件分岐があるレベルまで評価して、このレベルをコンテクストセット（CS）に挿入する。
手順へ入るときに、Proc、Frame、Level及びStepはCSに入れられるが、古いCSが新しいCSに配置されるようなコンテクスの操作と同様である。そのとき、手順から復帰するのは単に古いCSの回復だけである。
【００２５】
帰納的機能（エバリュエータ内の）の例
Set Echo
Bind [Factorial Int: {all}] Muit( Int: {Binding}
[Factorial I Minus( Int: {Binding} Int: 1) ] )
Bind [Factorial Int: 1] Int: 1
= [Factorial Int: 5]
INT(12): 120
【００２６】
オブジェクト向けプログラムの例
Example
Dim
Host Dict
Dim
OpMode Dict Bind 5
Dim
Method Dict Bind 5 
Dim
Keyword Dict Bind 5 
Bind
[DCL DataType:NewAddress] Alpha:"Alpha:50"
Bind [DataType DataType:newAddress] DataType:AdrField 
Bind [Host:DecAlpha DCL DataType:UDate] Alpha-."
int64" !            Set
up "Inheritance"
Bind [OpMode=OOPS NId={All} DataType:{All}] [NId={Binding}
[DataType DataType:{Binding}]]
Bind [OpMode=OOPS NId={All} Keyword:{All}] [NId={Binding}
[DataType Keyword:{Binding}]] !            Set
Up "Polymorphism"
Bind
[Method=Format Keyword={All}] [Displayer Keyword={Binding}]
Context
Push OOPS
Context Add OpMode=OOPS !
!   Define
Two "Instances"
Bind [Keyword=MinDays Desc] Alpha="Minimum Days to
Age" 
Bind [Keyword=MinDays DataType] DataType: Integer
Bind
[Keyword=MinDays Desc] Alpha="Date of Aging"
Bind[Keyword=MinDaysDataType]DataType:Udate
!  Manipulate
Objects
=[Method=Format
Keyword=MinDays]
V3MODULE(16):lTX_NUM
=[Method=Format Keyword=AgeDate] '
V#MODULE(20):ITX DATE 
={Dcl
Keyword=AgeDate]
ALPHA(12):INT
Context
Add Host: DecAlpha =[Dcl Keyword=AgeDate]
ALPHA(16):"int64"
Context
Pop
【００２７】
タイムベースシステムの例
Dim
Time Time
Dim Tran Time Uniqu
Dim B Binding
Bind [freddy time={now}] alpha='now is
the time" Bind [TranID Tran=(New)] int=123
Bind [Tranld Tran={New)] int=2345
Bind [TranID Tran={New)] alpha="ho
ho ho" = [Tranld]
ALPHA(20):
"ho ho ho" 
= [freddy]
ALPHA(24):"now
is the time" Eval Remove Point( B={LastBind) )
=(Tranld]
INT(12):2345 
Bind [Tranld Tran={New)] alpha-='the
next one"
= [Tranld]
ALPHA(24):"the next one"
Bind [Next Int={All)]
[IntMod=Next_IsctVal Int=(Binding)]
Bind [Describe Iter=[Next Int={Binding)],[IntMod=Echo
Iter={Context)] [IntMod=MakeSeq_IsctVal @[Tranld] Int=1 Int=2 Int=3]
Eval
[Describe]
2345 
123
【００２８】
レファレンス‐データ及び構造の操作のためのオペレータ
itx_Point - V4点からテキストへ変換
構文
itx_point( 点,バッファ,フラグ)
point     
a v4 点(V4Point)
buffer    テキスト・ストリング／更新されるべきバッファ(alpha)
flags     
標準itx フラグの任意の組み合わせ(int)
説明
このモジュールはその内部表現（ポインターとして）から印刷可能な書式へ点を変換するために用いられる。
例
dcl v4point pt,*res ; 
ループ
{ xti_Point(tty_Get(`Eval ?’),pt,0) ; res := v4_EvalPoint(pt) ;
sys_address(res)である場合、 {itx_Point(res,buf,0) ; p’結果は ’,bufである;};
};
/undefined_nodule// - 自動ローディング未定義モジュール
構文
v3_Set_Parameter(/undefined_ odule/ ,
string)
string   未定義モジュールが参照されるときはいつでも評価されるべきV4共通部分ストリングは定義されるべき実際のモジュールと入れ替えられる一つ以上のアステリスクを含むことができる。(alpha)
【００２９】
説明
「v3
Set Parameter」モジュールのこのフォーマットは、未定義V3モジュールが参照されるときはいつでも、拡張されて評価されるべきV4共通部分「マスク」を定義するために用いる。
例
以下の例はV4にアステリスクがある未定義モジュールに置換し、結果として生ずる共通部分を評価し、結果として生ずるモジュール参照をロードする。
v3 セット・パラメータ/未定義_モジュール/,”[*
Dim:Macro]”) ; 
v4_AreaClose - Closing a V4 Area
構文
v4_AreaClose( areaid )
areaid               
クローズされるべき数値領域id (int) 
【００３０】
説明
「v4
AreaClose」モジュールは、呼び出し「v4 Area0pen」によって以前に切開されたV4領域を閉じるために用いる。領域は閉じられる及び、領域に対する全てのリファレンスは現在のコンテクストから除かれる。
全ての領域がV3/V4終了次第閉じられる点に注意。
例
id := v4 Area0pen('clientstuff',nil) ;
・・・
v4 AreaClose(id) ;
v4 Area0pen − V4 領域を開けること
構文
areaid = v4 Area0pen（ファイル名、nil）
ファイル名      V4領域として開かれるファイルの名（string）
Nil            「nil」は、読取り専用（nil）のために開く初期設定値を示す
上の形式は、読出し専用アクセスのための既存のV4領域を開く。
下の形式は、より一般化されたバージョンであって、読取り/更新のための既存の領域を開くとともに新しい領域をつくるために用いられてもよい。
areaid = v4 Area0pen（ファイル名、ahibuf）
ファイル名      V4領域として開かれるファイルの名（string）
Ahibuf          領域の鮮明度に関する情報が入っている構造
v4__ahiに対するリファレンス。（V4C AreaHlnfo）
下の書式は、最も一般的な形式である：
areaid= v4 Area0pen（pcbbuf、ahibuf）
pcbbuf      新しい領域ファイルを宣言するための詳細な情報が入っているv4__pcb構造に対するリファレンス。
（V4lS__
ParControlBlk）
ahibuf      領域の定義に関する情報が入っている構造v4__ahiに対するリファレンス（V4C__AreaHlnfo）
【００３１】
説明
モジュール「v4
AreaOpen」は、V4多次元データベースによってアクセスするための新規または既存のV4領域を開くために用いられる。呼び出しの異なるいくつかのモードが利用可能である：
例
v4 AreaOpen('v3 syslib:v4kemel',nil) ;『 Open V4仁（読取り専用』
v4 BigBufGet/v4 BigBufPut（Big Buffersを読み書きすること ）
構文
bytes= v4 BigBufGet（bufid、dstbuf）
bytes    このモジュールは、ビッグバッファ（int）のバイトの数を戻す
burid    バッファ識別子／キー（int）
dstbuf    「ビッグバッファ」を書いている「ビッグバッファ」（V4LEX
BigText）によって更新されるv3ストリングバッファは、以下のモジュールで行われる：
aid= v4 BigBufPut(bufid , srcbuf )
aid    「大きいバッファ」がどの領域に入れられたかを指示する領域識別子。（int）
bufid    記憶するためのバッファID（int）
srcbuf    記憶されるべきv3バッファ。
(V4LEX BigText)
【００３２】
説明
「ビッグバッファ」は、テキストまたは任意の他のデータの一つ以上の行が入っているV4領域の中のエントリーである。
例
del struct V4LEX__ BigText bt ;
del sr text,sa ;
v4 AreaOpen("v3Iib",nil) ;
v4 BigBufGet("[V3__IOUNIT Dim: Macro]"), bt) ;
loop(text==bt.bigbuf;str len(text);)
{ sa == str break('\n',text) ; p sa;）;
v4 BindPoint−最後のバインディングに対応するV4 Point を戻す
構文
point = v4 BindPoint(dimid)
点      最後のバインディングに対応する点（v4point）
dimid    戻された点（v4point）のために使用される形式「バインド」のディメンション
【００３３】
説明
このモジュールは、現在のV4環境の中で作られたラストバインディングに対応する点を戻す。
例
v4_Bind (poi nt,value);
bpoint := v4 BindPoint(v4 Dimld('Binding')) ;
v4 Bind −共通部分を一つの値にバインディングする
構文
aid= v4 Bind( intersection, value)
aid    バインディングが記憶された領域ID（int）
intersection    一つの共通部分に対応するV4点または有効なV4共通部分の書式内のテキスト・ストリングのいずれであってっもよい。
value    有効なV4点の書式内のV4点またはテキスト・ストリングのいずれであってもよい。
【００３４】
説明
「v4_ind」モジュールは、共通部分内の点を一つの値点に結び付けるために用いられる。コールの書式は、以下の通りである
dcl_v4point *isct,*val;
xti_Point(tty_Get('Enter Isct ? '),isct,0) ;
xti_Point(tty_Get(' and value ? '),val,0) ;
v4_Bind(isct,val) ;
v4_Close −V4IS 領域を閉じること
構文
pcb    V4IS領域のパラメータ制御ブロック。
（V4IS__ParControlBIk）
【００３５】
説明
pcbにおいて特定されたV4IS領域を閉じる。
例
pcb.FileName := `important.dat' ;
pcb.OpenMode := xxx v4 Open(pcb) ;
v4_Close(pcb) ;
v4_ContextAdd - 一つの「点」を「コンテクスト」に追加すること
新しい点を追加するかまたはある点をすでにコンテクスト内にあるディメンションの代わりに置き換えると行われている：
構文
v4_ContextAdd(frameid , point))
frameid
点が追加されることになっているフレームのID（現フレームのためには０を使用）。（int）
point    V4点またはある点を表しているテキスト・ストリングであってもよい。(v4point/string)
【００３６】
説明
指定された点を指定されたフレームのための現在のコンテクストに追加する。ほとんどの場合に、前記点は「frameid
０」によって参照される現行フレームに追加されるべきである。ある点が同じディメンションを有するコンテクストにすでに存在する場合、それは新しい点と取り替えられる。
例
v4 ContextAdd(0,'Client:ABC') ;
xti_Point('Vendor:1233',pt,0) ;
v4_ContextAdd(O,pt) ;
v4_ContextPop（コンテクスト・フレームのポッピング）
構文
v4_ContextPop( framenum）
framenum    ポップオフされるべきフレーム番号。このフレーム番号の後プッシュされたすべてのフレームもポップされるだろうことに注意。（int）
【００３７】
説明
このモジュールは、現在のコンテクストから一つ以上のフレームをポップオフする。フレーム番号が与えられて非ゼロならば、指定されたフレームまでの全てのフレームがポップされる。
framenum：= v4_ContextPush('Level12』）;
…
v4_ContexPop(framenum);
v4_ContextPush−Pushing新しいコンテクスト・フレームをプッシュすること
構文
frameid = v4_ContextPush( framename）
frameid    このコンテクスト・プッシュのために生成されたユニークなフレーム番号。
framename  このフレームに名をつけているテキスト・ストリング。フレーム名が、必ずしもユニークである必要はない。
【００３８】
説明
このモジュールは、framenameの名前を有する新しいフレームを現在のV4コンテクスト上にプッシュする。frameidは、戻されて、次のコンテクストコ−ルにおいて使われてもよい。
例
framenum：= v4 ContextPush(str concat(Level),Ivl+=1）;
v4_DataEIVal−ある値をバッファから抽出すること
構文
value = v4_DataELVal( buffer, des/despt )
value    バッファから抽出された結果として生じるV3値
buffer    通常複数フィールド（アルファ）が入っている記録バッファ
des    データ・エレメント記述子または点（v4point）
【００３９】
説明
このモジュールは、フィールドのデータ・エレメント構造に基づいて値（すなわちフィールド）をバッファから抽出するために用いられる。
v4_DimGet−ディメンションIDを得ること
構文
dimid = v4_DimGet( dimname）
dimid = v4_DirnGet(point)
dimid    ディメンションの数字ＩＤ（int）
dimname
ディメンションのテキスト名（string）
point
任意のV4点に対応するディメンションＩＤを、また、得ることができる。（v4point）
【００４０】
説明
このモジュールは、ディメンション名と関連しているディメンションＩＤを復帰させるかまたは特定の点に対するディメンションＩＤを復帰させる。
xti Point(tty_get("Enter Point？「）,point,0）;
dimid := v4 DimGet(point) ;
v4_DimMake−「新ディメンション」をつくること
構文
dimid = v4-DimMake( diminfo）
dimid      新ディメンションのユニークな数字識別子（int）
diminfo
新ディメンションを定める構造。（V4DPI__Dimlnfo）
【００４１】
説明
新ディメンションをこのコールによってつくることができる。引数（diminfo）は適切に設定されなければならないかまたは、すべての種類のひどい誤りが生じる可能性がある。
例
dcl struct V4DP1＿Dimlnfoジ;
di.DimName := `Customer' ; di.PointType := #V4DP1_PntType Integer ;
di.UniqueOK := /true/;
v4_DimMake(di);
v4_Eval及びv4_EvalPoint−共通部分を評価すること
構文
logical = v4_Eval( updateval, isctptlstring )
logical       (int)
updateeval
isct        (v4point/string)
第２のコールは、さらに一般的で、共通部分の値に対応するV4点を単に戻させる：
valpt = v4 EvalPoint( isctpt/string )
valpt    評価共通部分の値（v4point）
isctpt    共通部分に変換されるべき共通部分またはストリング（v4point/string）
【００４２】
説明
共通部分の評価は、二つコールの中の一つを介してなされるされることができる。第１のコールは、それが可変V3を結果で更新するという点で、より便利な形式である（V4からV3への必要な転換を実行すること：
v4_Get−
V4IS   レコード取得
モジュール、「v4_et」は記録をV4IS領域から読み込むために用いられる：
構文
v4 Get( pcb）
pcb      領域のパラメータ制御ブロック（V4IS
ParControIBlk）
【００４３】
説明
指定された領域からレコードを得る。
例
pcb.Df[tGetBuf == iobuf ; pcb.DfltGetMode := V4IS_PCB_GP_Next ;
v4_Get(pcb);  『次のレコードを読み込む』
v4 IsctMake -    『共通部分を作ること』
構文
point= v4 IsctMake( src, appndpt ) point
共通部分（v4point）に対応する点
src          添付されるべきベース共通部分または新しい共通部分（v4point/無）をスタートさせるゼロ
appndpt      添付される点（v4point）
【００４４】
説明
V4共通部分をこのモジュールで、点ごとに、蓄積できる。新しい共通部分をつくるためには、ゼロに等しいsrcで最初にコールせよ。共通部分に点を追加するためには、第１のコールで復帰された点でモジュールをコールせよ。
例
isct：= v4_IsctMake(nil,pt1);  『新しいisct
を作る』
v4_lsctMake(isct,pt2);『 第2の点を付加する  』
v4_Open−Opening V4IS_Area
構文
v4 Open(pcb）
pcb      領域パラメータ制御ブロック（V4IS＿ParControlBlk）
【００４５】
説明
V4IS領域がこのコールによって入出力するためにつくられるかまたは開かれる。詳細はこのマニュアルの終りにあるパラメータ制御ブロックの定義を参照。
v4_PointCopy−Copying V4 Point
構文
v4_PointCopy( dstpoint, srcpoint)
dstpoint
更新されるべき点（v4point）
srcpoint
コピーされるべき点（v4point）
【００４６】
説明
このモジュールは、点をコピーする。それは、主にv4
xxxモジュールの多数によって復帰された点をコピーするために用いられる。これらの点は限られた寿命を有する及び、点がさらに長い期間必要とされる場合、それはより永久的なホームにコピーされるべきである。dstpointが非初期化ポインタである場合、注意する、コピーの前空間を割り当ててそれに入れることに注意。
v4_PointMake - Making a V4 Point
構文
point = v4_PointMake(src , dimnum , value [, endvalue] )
point      結果として生じる点に対するリファレンス（v4point）
src        新しい点をつくるゼロまたは新しい値/範囲によって更新されるべき既存の点(v4point/nil)
dimnum      この点のためのディメンションＩＤ（int）
value        この点または…に対する値(int/string)
endvalue      endvalueが特定されている場合、値は「value..endvalue」になる(int/string)
【００４７】
説明
このモジュールは、モジュールへの複数コールによって単一の値または複数値を有する点をつくるために用いられる。
例
newpt：= v4_PointMake(nil,v4_DimId('Months'）,9301,9302）;
v4_PointMake(newpt,nil,9305) ;
v4_PointMake(newpt,nil,9307,9312) ;
itx_Point(newpt,buf,0);
p buf;
Months：9301..9302,9305,9307..9312
v4_PointRemove−ある「領域」から「点」を除くこと
構文
v4 PointRemove( point)
point    除かれるべき点
（v4point）
【００４８】
説明
このモジュールは、現在のV4ランタイム環境のために指定された点を除くことを試みる。
現在、一つの形式の点だけを除去できる‐バインディング点。
例
v4_Bind（isct,value）;
bindpt：= v4_BindPoint(xxx);
v4_PointRemove(bindpt);    『バインディング点を除く』
v4_Put−V4IS レコードを書き込むこと
構文
v4_Put(pcb）
pcb    領域のためのパラメータ制御ブロック。
（V4IS＿ParControIBIk）
説明
pcbにおいて特定されたパラメータに基づいてレコードを挿入、交換または削除。
例
pcb.PutBuf == iobuf; pcb.PutMode：= #V4IS_PCB_GP_Keyed;
v4 Put(pcb);
v4 ScanForDim-「パターン」のための「領域」をスキャンすること
構文
handle = v4 ScanForDim( handle, dimid, filterisct, isct, val, misct,
xisctp )
handle        ディメンションの数字ＩＤ（int）
dimid         ディメンションのテキスト名（int）
filterisct      フィルタとして作用する共通部分。この点の中の全て点を含む共通部分だけが比較される。（v4point）
isct      これは、現在の整合のための共通部分によって更新される（v4point）
val      これは、現在の整合の値によって更新される（v4point）
misct    もしあれば、これはfilterisctに整合されたisctの点によって更新される（v4point）
xisctp      与えられていれば、これは整合されなかったisct内の点によって更新される。（v4point）
【００４９】
説明
下のモジュールは、特定のディメンションが入っているバインディングのための現在のコンテクスト内の全てのオープン領域をスキャンするために用いられる、
v4 SetTrace−「トレース」機能を制御すること
構文
oldset = v4 SetTrace( newset )
oldset      このコールより前のトレース・セッティング（int）
newset      新しいトレース・セッティング。
値のための下記参照。
（int）
【００５０】
説明
引数に基づいてV4トレーシング機能を設定する。トレースは、以下のテーブルに記載されているように、種々のモードで作動可能にできる‐
例
oldsetting := v4_SetTrace(/true/) ;
v4_ValueGet−V3 値をV4 点値で更新すること
構文
logical = v4 ValueGet( v3dst, point)
logical      モジュールが続けば真、さもなければ不正。
（int）
v3dst      任意のV3変数
point      値を抽出されるべき点。（v4point）
【００５１】
説明
このモジュールは、点の「値」部分を抽出して、それをV3書式に変換し、かつその値でv3dstを更新するために用いられる。
xti_Point−V3 ストリングをV4点に変換すること
構文
xti_point( buffer, point, flags)
buffer      点を記述しているテキスト・バッファ（string）
point      ポインタまたはV4点のどちらかとして宣言されたV3変数。（v4point）
flags  （int）
【００５２】
説明
テキスト・バッファをV4点に変換する。第２の引数は、ポインタまたはV4点のどちらかとしてと宣言されなければならない。非初期化ポインタ（すなわち、sysアドレスは、０である）として与えられれば、メモリは自動的にその点に割り当てられる。
mod_Unload−現在のランタイム環境からV3 モジュールをアンロードすること
構文
mod Unload( modulen)
module    アンロードされるべきV3モジュールの名前（string）
【００５３】
説明
現在のV3環境から特定されたモジュールをアンロードする。モジュールは、独立のPICモジュールとして（すなわちパッケージの一部としてではなく）以前にロードされていたに違いない。
例
mod Unload('exec sec login') ;
V4 インタプリタ
マクロ 
【００５４】
V4インタプリタは、精巧なマクロ定義及び拡張能力を有する。マクロが、局所的に限定されて使われるかまたは後の環境において用いるためにV4領域の中に記憶されることができる。V4マクロの主たる目的は、概念を複数バインディングとして定義するためのクリーンな、使いやすい方法を提供することである。
例えば、V4を介してデータファイル（V4IS）を参照することは、エリア名、領域に対するキー、下部構造限定する方法、などを定めるいくつかのバインディングを必要とする。これらは、ベンダー・データベースにアクセスするために以下に示すように明確に行われることができる‐
Bind [Filename FileRef=9999] Alpha=". ./nsd/apvenmas.dat"
Bind [Buffer FileRef=9999 VendorPCB={All}] VendorPCB={Binding}
Bind [Buffer FileRef=9999] Open_V4IS ( [FileName FileRef=9999]
[FileRef=9999 Structure=1] VendorPCB=O )
Bind [Record FileRef=9999 Vendor_Ref={All}] 
Get_V4IS(
[Buffer FileRef=9999] [DataEl FileRef=9999 [FileRef=9999 Key=1 Part=1]]
Vendor_Ref=(Binding) RecPtr=O )
Bind [Record FileRef=9999 Vendor_Id={All}]
Get_V4IS( [Buffer FileRef=9999] [DataEl FileRef=9999 [FileRef=9999 Key=2
Part=1]] Vendor_Id={Binding} RecPtr-0 )
Bind [Value Field={All} Vendor_Ref=(All}] Field_V4IS( [Record
FileRef=9999 Vendor_Ref={Binding)] [DataEl FileRef=9999 Field={Binding}] )
Bind [Value Field={All} Vendor Id={All}] Field_V4IS( [Record
FileRef=9999 Vendor_Id={Binding}] [DataEl FileRef=9999 Field={Binding}] )
Bind [Value Field={All} Vendor_Ref={All} Month={All}] S1 bcField_V4IS(
[Record FileRef=9999 Vendor_Ref={Binding}] [DataEl FileRef=9999
Field={Binding}] [DataEl FileRef=9999 Field= Purch Month] Month={Binding} )
Bind [Value Field={All} Vendor-Ref--{All) Index={All}] S1 bxField V4IS(
[Record FileRef=9999 Vendor Ref={Binding}] [DataEl FileRef=9999
Field={Binding}] Index=(Binding) )
及びあらゆるデータベースがアクセスであるために繰り返される。又は、マクロが一度定められて、次に、各データベースごとに呼び出されてもよい
{/ADCL(aFileRef, aFileName, aRefField, aldField, aRepeatField,
aRepeatIndex )
Bind [Buffer FileRef:aFileRef AreaPCB={All}] AreaPCB={Binding} ;
Bind [Buffer FileRef:aFileRef]
Open_V4IS( aFileName [FileRef:aFileRef Structure: 1] AreaPCB: 0) ;
Bind [Record FileRef:aFileRef aRefField: {All}]
Get_V4IS( [Buffer FileRef:aFileRef]
[DataEl FileRef:aFileRef
[FileRef:aFileRef Key: 1 Part: 1]] aRefField* RecPtr: 0) ;
Bind [Value Field: {All} aRefField: {All}]
Field_V4IS( [Record FileRef:aFileRef aRefField*] [DataEl FileRef:aFileRef
Field*]) ;
定義済みaldFieldであれば;
Bind [Record FileRef:aFileRef aldField: {All}]
Get V4IS( [Buffer FileRef:aFileRef] [DataEl FileRef:aFileRef
[FileRef:aFileRef Key: 2 Part: 1]] aldField* RecPtr:O) ;
Bind [Value Field: {All} aldField: {All}] Field_V4IS( [Record
FileRef:aFileRef aldField*] [DataEl FileRef:aFileRef Field*]) ; end ;
定義済みaRepeatFieldであれば;
Bind [Value Field: {All} aRefField: {All} ARepeatField: {All}]
S1bcField_V4IS( [Record FileRef:aFileRef aRefField*] [DataEl
FileRef:aFileRef Field*] [DataEl FileRef:aFileRef Field: aRepeatField]
aRepeatField*) ; end ;
定義済みaRepeatlndexの場合、
Bind [Value Field: {All} aRefField: {All} aRepeatlndex: {All)] S1
bxField_V4IS( [Record FileRef:aFileRef aRefField*] [DataEl FileRef:aFileRef
Field*] aRepeatlndex*) ; end ;
｝/ADCL
ADCL(5203, "v3_sapsdat:apvenmas.dat",
vendor_ref,IdField=vendor_id, Repeatlndex=Line )
追加の領域を定義することは、全ての必要なパラメータが容易に定義される単一の追加の行を必要とするだけである点に注意。
【００５５】
マクロを定義
マクロ定義は、マクロ定義行、ボディ部及びマクロ・トレーラ行から成る。マクロヘッダー行は、マクロ名及びマクロボディ部の全体にわたって参照される任意のパラメータを宣言する。ボディ部は、任意の数のV4解釈のコマンド及びマクロ中だけでで利用可能である特殊ないくつかのコマンドをプラスしたものから成る。トレーラは、マクロの終わりを示す行である。
【００５６】
マクロヘッダ行
マクロヘッダー行の書式は、macronameがマクロの名前である{Imacroname
(param l , param2, ... paramn )であり、（paraml、...
paramnがマクロの中で参照されるパラメータの名前である。各パラメータを単一の文字（通常文字「a」）で始めることが望ましい。全てのパラメータが同じ文字出始められる場合、マクロ呼出しは、単一文字接頭辞の有無にかかわらずパラメータを参照できるできる。
【００５７】
マクロ・ボディ行
マクロのボディ部は、単にV4コマンドのリストである。実際に何かをするコマンドに加えて、条件つきの実行のためのいくつかのコマンドは、例えば「If」及び「If1」である。マクロ・ボディ部の全てのコマンドは、セミコロンによって終わらなければならない！
【００５８】
マクロ・トレーラ行
マクロ・トレーラ行は、マクロを終える。書式は、macronameがヘッダー行の名前にマッチしなければならない
}Imacroname
である。
【００５９】
マクロ呼出し
マクロは、手続きコールのものと同様の構文
macroname( argl（arg2）...）
macroname(paramname=arg paramname=arg）...）
を使用して呼び出される。上記のように、二つ書式が可能である。
第１の書式は、引数をそれらがマクロ・ヘッダー行において定義される順序で単にリストするだけである。第２の形式は、パラメータ名（単一文字接頭辞の有無にかかわらず）によってパラメータ値の仕様を可能にする。二つ書式を混合して整合させることが可能である。パラメータに明確に割り当てられない引数は、「次の」パラメータに割り当てられる。実際には、選択できる引数の前の全ての指定引数でマクロを定義することは、良い考えである。次に呼出しにおいて、指定引数はパラメータ名なしで与えられることができ、任意の選択できる引数は名前によってリストされることができる。
【００６０】
V4領域のマクロを使用
V4領域の節約マクロに関するもっと多くの情報のためにはSet
MacroBindコマンドを、そしてそれらを参照する方法についての説明のためにはSet
MacroCallを参照せよ。
【００６１】
マクロのコンテンツを抽出
マクロのコンテンツを以下の
macroname() >file
macroname() >>file
で抽出することが可能である。
第１の形式は、マクロのコンテンツをファイルにコピーする。第２の形式は、コンテンツをファイルに添付する。
【００６２】
コマンド
Area− V4 領域を開く／作ること
構文
Area Readファイル名ファイル名...
Area modeファイル名オプション
mode
領域は、開けられるためにどんな状態である新しい領域をつくるCreate、既存の領域を読取るためのRead、既存の領域を読取りおよび／または更新するためのUpdate、領域を、それがもう存在しない場合、つくるためのCreatelf、及び領域を閉じるためのClose。
【００６３】
ファイル名      領域の名前
options        新しい領域をつくるときのオプションのリスト
説明
Areaコマンドは、V4環境内の領域をつくり、開きそして閉じる。一つ以上の領域が単一コマンドで読みのためにオープンであってもよい。V4カーネル領域は、常に開いた第１の領域であるべきで、ファイル名「v4kernel」としてリファレンスであってもよい。
新しい領域をつくるとき、種々のオプションが利用可能である。
これらは下のテーブルに纏められている
Hierarchy number      領域を一つの階層構造に割り当てる。これは、１から７までの番号である。V4カーネルは、常に番号１である。
ExtDictUpd      外部辞書の更新を可能にする。
IntDictUpd      内部辞書の更新を可能にする。
BindingUpd      バインディングの更新を可能にする。
Primary          主たる領域
Slave            従属領域。
Categories list      カテゴリが以下のリストの通りである
NoExtDictUpd        外部辞書の更新を許さない
NoIntDictUpd        内部辞書の更新を許さない
NoBindingUpd        バインディングを許さない
NewMacro macroname      領域がつくられる（Createlfモードとともに用いるために）ときはいつでも、呼び出されるべきマクロを特定する。
BucketSize bytes          領域のバケット・サイズを特定する。バインディング点に許されたバインディングの総数は、間接的にバケット・サイズに関する。ほとんどの場合に、初期設定値バケット・サイズは、受け入れられるはずである。
例
Area Read v4kernel
Area Create Demo Hierarchy 5 Primary
Dimension−「新しいディメンション構文」を宣言すること
ディメンション名形式属性
name        ディメンションの名前
type
ディメンション形式またはディメンションの使われ方‖
attributes      選択できる属性のリスト
【００６４】
説明
このコマンドは、ある領域内の新しいディメンションを定義するために用いられる。ディメンション形式は、下記の（各形式の詳細な説明は後述する）テーブルからの形式の一つでなければならない。
Alpha                文字列
BigText               テキストの大きな複数行チャンク）
Binding              
V4バインディング
Compound           
反復において使用する複合共通部分
Context              コンテクスト点（評価時に構成要素に拡長される）
DataEl               データ要素仕様（オフセット、長さ、データ型、その他）
Dictionary    
数として記憶され、キーワードとして表示される辞書点
Foreign              異質のデータ構造
Integer               整数
Intersection          一つの共通部分
IntMod                内部モジュール
List                  値のリスト
Logical               論理的（真/不正）値
MemPtr              メモリ・ポインタ
PIntMod              不完全内部モジュール
Pointlndex            V4に割当られたデータ構造を表している数
Pragma               実際的な点（通常不可視の）
Shell                 シェル点、値がその他の点である
Special              「｛xxx）」構成で特定された点
StructEL             構造仕様
Time                 時間または取引き点
V3Mod               V3モジュールへのリンク
V3PicMod            V3モジュールのPIC定義へのリンク
V3ModRaw           V3モジュールへのリンク
【００６５】
属性は、また、宣言を更に洗練するために指定されることがある。
これらは、以下に要約される
Acceptor module      ディメンションのためのV3アクセプタ・モジュールを定義する。
AutoContext point   
自動コンテクスト検索において使用されるV4点を定義する。
この特徴に関する詳細な情報のためには下記参照
Binding num         このディメンションにバインディング重み数を割り当てる。
詳細は下記を参照。
Displayer module    
このディメンションのためのV3 表示装置モジュールを定義する
Macro string        点をつくるとき使用されるマクロ・ストリングを宣言する。現在使われていない。
Multiple logical      複数値を単一の点として指定できるようにする（例：dim：a,b,c）
Range logical        値の範囲を単一の点として指定できるようにする（例：dim:a..b）
Unique              ユーザがこのディメンション上に新しい点｛新しい）構成でつくることができるようにする。
Verify               現在使われていない
Internal              
周知
External             
Internalの反対
Dimension        
周知
Heirarchy n        
このディメンションのためのHeirarchyを特定                       
する
Category xxx       現在使われていない
Review how        現在使われていない
Auto-Context
AutoContext属性は、間接的に、ある点が共通部分の評価の間、その点がコンテクストにおいて現在定義されていない場合どのように「評価される」べきかを特定するために用いることができる。
【００６６】
例えば、カストマのディメンションがDimension
Customer Integer AutoContext Nld：NeedCustomerとして定義されていて、次のバインディングBinding[
NeedCustomer Dim：Customer Order：{any}]
[BilltoCus Order*]が行われた場合、及び我々が(Order: 543210 Date: 4/15/93
Item: 123)のコンテクストにいて、[ItemPrice Item: 123 Date:
1/1/93..12/31/93 Customer: 5678]を整合させる（評価によって）ことを試みる場合、我々が現在のコンテクストの中にカストマのディメンションのどの点をも持っていないので、どんな整合をも行うことができないと思われる。しかし、V4は、
[ NeedCustomer Dim：Customer ]
を評価して、この整合のためのCustomerディメンションに対する値として結果を使用することを自動的に試みるであろう。これは、上記バインディング整合させて、現在のオーダーに対するbillto顧客を決定するために再評価し、それが等しかった場合、Customer：５６７８によって、整合を続けることができる。
【００６７】
バインディング番号
バインディング番号は、大V4環境の重要な面である。これらの番号は、バインディングが記憶されるべき方法を制御する。バインディングの間、V4はバインディング共通部分の中の全ての点を左から右へスキャンし、最も高いバインディング番号を有する第１のディメンションを追跡する。これは、バインディングを記憶するための主たる「キー」として使用されるディメンションになる。
このために、バインディング番号を有する全てのディメンションはnumber-整数、辞典、タイム、その他として記憶されなければならず、Alpha、外的な、データ要素、その他はバインディング番号を備えることができない。
【００６８】
Append-リストに点を添付する
構文
Append isct point
isct            リストまで評価する共通部分
point          添付されるべき点
説明
このコマンドは、指定された点をisctによって参照されたリストに添付する。共通部分は一つのリスト点まで評価しなければならないかまたは、誤りが生成される。
例
Dim ModuleList List
Bind [Module:xyz Package:packl] ModuleList: ()
・・・
Append [Module:xyz Package:packlj Variable:foo
Insert -ポイントをリストの始めに挿入する
構文
Insert isct value
isct        一つのリストまで評価する共通部分
point       リストの初めで挿入されるべき点
【００６９】
説明
このコマンドは、isctによって示されているリストの初めに、点を挿入する。
Bind isct point
isct          共通部分
point        共通部分の値として結び付けられるべき点
説明
バインド（Bind）コマンドは、共通部分を値点に結び付ける。
例
Bind [OHQty Item:xyz Location:loc23] Quantity: 999
Context Add-       点をContextに追加すること
構文
Context Add point
point              現在のコンテクストに追加されるべき点
【００７０】
説明
点は、現在のコンテクストの現フレームに追加される。点が共通部分である場合、それはコンテクストに追加される前に評価される。
例
Context Add [Preferred Location Customer: 1234]
Context Examine- 現在のコンテクストを調べること
構文
Context Examine
説明
このコマンドは、ユーザのコンソールに現在コンテクストにおいてアクティブ全ての点のリストを生成する。
Context Pop-「フレーム」を 「コンテクスト」からポップオフすること
構文
Context Pop [name]
name        〜へポップオフすべきフレーム名
説明
このコマンドは、現在のコンテクスト・フレームからポップするかまたは名前付きフレームがポップされるまで、複数フレームからポップオフする。
Context Push-「新規フレーム」を「コンテクスト」に押しつけること
構文
Context Push name
name          フレームの名前
【００７１】
説明
これは、新しいフレームを指定名付き現在のコンテクストに押しつける。「プッシュ」の後コンテクストに追加された点は、フレームと関連していて、」コンテクスト・フレームがポップオフされるとき、コンテクストから除かれる。
Dump -全ての「所定のディメンション」を含むすべての「共通部分」をダンプする
構文
Dump dimension [filter]
dimension        サーチ・ディメンション。
全ての現在の領域内の全てのバインディングのスキャンが指定されたディメンションが入っているすべての共通部分のために行われるであろう。
filter            オプション・フィルタ共通部分。
所定であるならば、フィルタ内の点の全てが入っている共通部分だけが出力される。
説明
「ダンプ」コマンドは、現在のコンテクストのための全てのオープン領域内の全てのバインディングを徹底的に検索するために用いられる。ディメンションが入っているすべてのバインディングがリストされるだろう。フィルタが特定されている場合、共通部分がディメンションを含まなければならないだけでなく、また、フィルタ内の全ての点にマッチしている点を持っていなければならない。
例
下の例は、「日付」ディメンションを含み、さらに点「Company：CDF」及び任意のIMRef点を含む全てのバインディングを検索する。
Dump Dim:Date [Company:CDF IMRef: {all}]
Evaluate−共通部分を評価する
構文
Evaluate intersection
intersection           
評価されるべき共通部分
【００７２】
説明
このコマンドは、指定共通部分を評価する。共通部分が完全に評価されることができない場合、誤りが生成される。
例
下の例は、現在のオーダーのBillTo顧客のための１９９３年３月１日現在、アイテム#1234の価格を算出する
Eval [Price IMRef: 1234 Date: 3/1/93 [BilltoCusRef Order*] ]
Exit -       V４インタプリータから出て行く
構文
Exit
説明
「終了」コマンドは、全てのオープン領域を閉じてV4インタプリタから出て行く。
Include−ファイルからのコマンドを実行する
構文
Include file        ファイル
実行されるべきV4インタプリタ・コマンドが入っているファイル
説明
このコマンドは、コマンド入力を指定ファイルに再び向け直す。ファイル内の全ての行がV4コマンド、マクロ膨張またはマクロ定義として実行されるだろう。「備える」コマンドは任意の合理的な限界まで入れ子にされてもよい。
= - Evaluate an Intersection Syntax
= intersection
intersection          評価されるべき共通部分
【００７３】
説明
このコマンドは、共通部分を評価して、結果として生ずる点をユーザのコンソールに出力する。
Set Echo −「コマンド行」の「エコーイング」を作動可能にする
構文
Set Echo ON
Set Echo Off
Set Echo n
Set Echo ALL
説明
このコマンドは、V4インタプリタに入力ラインをエコー動作を作動可能または作動不能にする。備えられたファイルのエコー状態は、備えるコマンド出す状態未満のものである。エコーを「オン」に設定することは、現在のレベルだけのエコー動作を作動可能にする。「オール」にエコーを設定することは、現在のレベル及び全ての入れ子状レベルのためにエコー作業を作動可能にする。
番号nにエコーを設定することは、現在のレベル及びn-1入れ子状レベルのためにエコー作業を作動可能にする。
Set Parameter−「グローバル置換パラメータ 」を設定
構文
Set Parameter letter value
letter        パラメータを意味する「A」から「Z」までの文字、
value        パラメータと関連させられるべきあらゆる値
説明
グローバルパラメータをV4解釈実行セッション内のどんな時でもセットし、リセットできる。パラメータをそれの名前を中括弧で囲むことによって参照されてもよい。
例
Set Parameter A Vendor
Bind [Name {A}: 123] Alpha: "Smith Supplies"
Set Result−「バインディング」のエコーを作動可能／作動不能にする
構文
Set Results ON
Set Results OFF
【００７４】
説明
各「バインド」コマンドのあと、この「セット」オプションはバインディング情報の出力動作を制御する。
Set Trace mode-評価追跡を作動可能／作動不能にする
構文
Set Trace mode 
mode    異なる追跡モードのための。現在の値は、追跡を作動不能にする０、公称追跡のための１及び完全な追跡のための８である。
構文
Set MacroBind isctmask point
isctmask        完全な共通部分を形成するために現在のマクロ名によって使われる共通部分マスク。
point           マクロを格納するために用いられる点。この点は通常マクロが上記の共通部分が格納される同じ領域の新しい点として書き込まれることを確実にするために「dimension:
{new}」として指定される。
説明
このオプションは、マクロがV4領域に格納される方法を制御するために用いられる。共通部分マスク（isctmask）は、現在のマクロの名前で置き替えられる星印「*」が含むべきである。前記点は評価され、前記点と関連している整数値がマクロを「BigText」書式で格納するためのユニークなキーとして使われる。共通部分及び値は一緒にバインドされ、選択されたバインディング領域はまた、実際のマクロを格納するためにも用いられる。
例
Dim Macro Int Unique
Set MacroBind [* Dim:Macro] Macro: {new}
Set MacroCall−「マクロ」の「アクセス」を決定する
構文
Set MacroCall isctmask
isctmask          共通部分マスク
説明
このコマンドは、マクロがV4インタプリタによって見いだされる方法を制御するためにる。ほとんどの場合、共通部分マスク（isctmask）は、マクロを格納するために用いられる「Set
MacroBind」設定のものと同一である。
例
Set MacroCall [* Dim:Macro]
Set TextBind−「領域」内の「ビッグテキスト・バッファ」の「保存」を制御する
Set TextBind isctmask point
isctmask        完全な共通部分を形成するために現在のマクロ名によって使われる共通部分マスク。
point           マクロを記憶するために用いられる点。この点は通常マクロが上記の共通部分が格納される同じ領域の新しい点として書き込まれることを確                     
実にするために「dimension: {new}」として特定れる。
説明
例
Set TextBind [Macro: {Context} Dim:Macro] [Macro: {New}]
【００７５】
ディメンション型
Alpha             
文字列
BigText            テキストの大きな複数行のチャンク
Binding           
V4バインディング
Compound        
繰返しにおいて使用される複合共通部分
Context           コンテクスト点（評価時に成分に拡大された）
DataEl            データ要素仕様（オフセット、長さ、データタイプ、その他）
Dictionary         辞書点（番号として記憶され、キーワードとして表示される）
Foreign            異なるデータ構造
Integer            整数
Intersection       共通部分
IntMod            内部モジュール
List               値のリスト
Logical            論理的（真/偽）値
MemPtr           メモリ・ポインタ
PIntMod           部分内部モジュール
Pointlndex         V4割当てデータ構造を表している番号
Pragma            実際的な点（通常不可視の）
Shell              シェル点、値がその他の点である
Special            「｛xxx）」構成で特定された点
StructEL           構造仕様
Time               時間または取引き点
V3Mod             V3モジュールへのリンク
V3PicMod          V3モジュールのPIC定義へのリンク
V3ModRaw         V3モジュールへのリンク
Alpha−文字列
語法
通常単一または二重の引用符で囲まれた大文字及び小文字の英数字。
引用符が明示されない場合、キーワードは大文字に変換されて記憶される。
記憶方法
２５５バイトまでのストリングは、第１のバイト内のストリングの長さを有する隣接するバイトの形で記憶される。
例
Dim ModuleName Alpha
Bind [Name Module: 1233] Alpha: "Conversion Mod"
特殊なケース
Alphaディメンションは、一つの定義されたディメンションである。
ディメンション名で始められない引用符で囲まれたストリングがAlphaディメンション
の点であると推定される。
Alpha: "Now is the time"は
”Now
is the time”
と同じである
BigText -大きなテキスト配列
【００７６】
語法
このディメンション型は、V4点として大量のテキストを（BigBuf書式を経て）格納するために用いられる。
記憶方法
点自体は、整数値として記憶され、実際のデータを得るためのキーとして使われる。
Binding−バインディング点
語法
バインディング点を明示的に参照できない。これらは、共通部分が値点にバインドされるときはいつでも、つくられる内部点である。つくられる最後のバインディング点は、binddimを経て参照できる‐{Binding}
記憶方法
バインド点は、特殊なデータ構造として記憶される
struct V4DP1＿QBindPointVal『 バインディング点のための値の書式』
{ unsigned short Dim ;       『 ディメンション』
unsigned short Bindld ;      『リストのバインディングId 』
int DimPntVal ;  『リストをバインドするための点値（これらの最初の３フィールドはキーを形成するために用いられる） 』
unsigned short Areald ;  『バインディングリストが入っている領域の領域ＩＤ』
Compound−繰り返しのための複合共通部分
語法
記憶方法
例
！      順次Textファイルを通して順番に配列する方法
Bind [Sequence FileName={ALL}] [IntMod=MakeSeq_TextFile
Fi[eName={BINDING}]
Bind [Next
Sequence=NextFile_FileDesc={ALL}] [IntMod=Next_TextFile FileDesc={BINDING}]
Bind [Loop SegPnt={ALL}] Iter=[Next
SegPnt={BINDING}],[IntMod=Echo Iter={Context}]   
Bind [List FileName={ALL)] Iter=[Next SegPnt={Binding)],[IntMod=Echo
Iter={Context}] [Sequence FileName={BINDING)]
=[List FileName=
Context -コンテクスト点
語法
コンテクスト点は、その他の点のリストから成る。コンテクスト点が評価されるべき共分成分点として使われるとき、それの成分の各々が前記コンテクストに追加される。したがって、それは明示的にマッチされるべき点でない。
記憶方法
コンテクスト点は一つの任意の他のV4のリストとして記憶される。
DataEl−データ要素
語法
(fileref, element, name, dimname, v3datatype, keynum, owner, offset,
bytes, decimals)
fileref             ファイル参照番号
element           このフィールドに対する素子数
name             このフィールドの名前
dimname         
ディメンション名（またはV3オブジェクト名）
v3datatype        V3データ型コード（参照/DT_xxx/）
keynum          
フィールドがキーである場合、キー番号
owner            
このフィールドを所有している構造ID
offset             オーナ構造内のオフセット
bytes             このフィールドに対するバイトの数
decimals         
このフィールドに包含される小数位の数
記憶方法
点は、パック書式内に上のフィールドを含む小さいデータ構造として記憶される。
Dictionary−辞書エントリー
語法
辞書エントリーは、V4辞書の中に内蔵的に格納され、従って整数として扱われる一つの任意のキーワードである。この数は、辞書エントリーがマルチ領域V4環境において、正しく維持されうるように、領域階層及びユニークな辞書エントリー数でコード化される。
辞書エントリーが通常アルファ・キーワードより少ない空間をとるが、必要な追加の検索を必要とするので、入出力時に初期化するためにより長い時間がかかる。アルファ・フィールドがバインディングポテンシャルを必要とするとき、辞書エントリーが一番多く使われる。辞書を使うとデザイナーが点をキーワードとして参照できるようにし、なおＶ４にその点を整数として扱わせる。
記憶方法
辞書エントリーは、４バイトの整数である。
Foreign−プログラムに基づいてアクセスされた異質のデータ
Integer -整数
語法
整数が入力されてすべての他の言語におけるように使われる。
記憶方法
現在、V4は４バイトの整数をサポートする。
例
Dim MonthofYear Integer
Intersection−V4 共通部分
語法
共通部分は、
共通部分を開始する左括弧
一つ以上の点  
任意の垂直線
前記垂直線の後の任意の点
共通部分を終える閉じ右ブラケット。
から構成されている。
共通部分が任意の所定のディメンション内に一つ以上の点を含むことができない！
記憶方法
共通部分は、点の値部分に記憶される。点（V4プログラムが構築されるとき、決められる）の最大サイズがあるのでがあるので、共通部分の複雑さに限界がある。
IntMod−V4 内部モジュール
語法
IntModディメンションは、デザイナーにV4のすぐ内部にある種々の計算プリミティブをデザイナーに与える。IntMod点は、二価の共通部分として扱われる。第１の値は、特定の内部モジュールを参照する。第２の値は、モジュールに対する引数である点のリストである。第２の引数がリストなので、ディメンションの重複に関して制限が全くない。
IntModのための構文は、それを点の手続き型言語モジュール名（arg1
arg2 ... argn）のものと同様に保持するように定められた
List−点のリスト
【００７７】
語法
リストは単に、小括弧の中に囲まれた点のリストである。制限がリストの中の点には制限が全くなく、点は共通部分またはその他のリストであってもよい。
Logical−論理的真及び偽
語法
このディメンション型は、簡単なブールの真／偽を記憶するために用いられる。
点は、以下のキーワードのどれによって特定されてもよい
真
偽
はい
いいえ
記憶方法
この型の点は、整数０または１として記憶される。
MemPtr−メモリ・ポインタ
語法
メモリ・ポインタは、特定のメモリロケーションを参照するために用いられる。これらは、主に特殊なV3またはV4モジュール（例えばV4
handling IntMod V4IS）のためのものである。メモリ・ポインタを入力時に定義できない。出力時に、それらは１６進の値として表示される。
記憶方法
メモリ・ポインタは、ホスト・プラットフォームに従い３２ビットまたは６４ビット・ポインタとして記憶される。
PIntMod−パーシャル内部モジュール
語法
PIntModディメンション型が、使われる
例
Dim Real Int
Dim Service Dict
Bind [GasPrice] Real: 105
Bind [GasPrice Type:Unleaded] []Plus( Real:
10 )
Bind [GasPrice Service:Full] []Plus( Real:
7 )
Bind [GasPrice Service:Full] []Plus Real: 7
]
Pointlndex -内部点に対するインデックス
語法
この型の点は、詳細にわたるおそらく不可解な割当及び作業が必要な特殊なV3及びV4モジュールによってつくられる。一つの例がリストからシーケンスの生成にある。V4シーケンスは、時間とともに変化するものもある若干の点を表している単一点でなければならない。Pointlndex点型は、V4がある点に対するユニークなＩＤを割り当てて、その点を時間と共に寸法/位置を変えることのある内部V4
データ構造にリンクできるようにすることを可能にする。
記憶方法
【００７８】
この型の点は、整数として記憶される。しかし、この型の各アクティブ点は、相当な寸法のものであってもよいメモリ・チャンクに連結する。
Pragma
語法
これは、あるものを働かせるためにV4によって必要とされる点のために用いられる内部ディメンション型である。V4の正常ユーザは、この種の点に遭遇しないであろう。
記憶方法
この点型の標準モデルはない。
Shell−もう一つの点を保持するためのダミー・ディメンション
語法
このディメンション型は、他のディメンション上の点であるに過ぎない点を有する「ダミー」ディメンションである。
それは、主に共通部分において共通のディメンションを共有する複数点を識別するために用いられる
（共通部分はどの所定のディメンションにも一つ以上の点を含むことことができないことを思い出されたい）。
記憶方法
この型は、もう一つの点をそれの値として記憶するにすぎない。
Special−特殊な点
語法
「（xxx）」形式の値を有する全ての点は、点型Specialを割り当てられる。
V4は、適当な時に実際のV4点に対するこの型の点を評価する。
記憶方法
全ての特殊な点は、V4点ヘッダー領域において表される。
StructEl - Structure Elements
語法
この点型は、V3データ構造（ある構造内のフィールドに対立するものとして）を表すために用いられる。
この点型の成分は、以下の通り、
（fileref, structnum, element, bytes, occurs,
countfield, offset)
fileref            ファイル参照番号
structnum        ユニークな構造数
element         
ユニークな要素番号
bytes            
この構造の一回の発生におけるバイトの総数
occurs            この構造が親に生じる回数の総数
countfield          カウントフィールドに対する参照（一つが存在すれば）
offset              親構造における始動オフセット
記憶方法
この点型は、特殊なV4圧縮されたデータ構造として表される。
Time−時間/取引ＩＤ
語法
この型の点は、時間または取引ＩＤを表す。これらの点を含むバインディングは、他のバインディングといくぶん違って整合される。相違は、ディメンション点がコンテクストに明確にない場合、「現在の」値がとられ、「現在の」値に最も近いが、それより大きくないそのディメンション上の点が整合されることである。これが意味することは、特定のコンテクスト点が全く特定されない場合、そのディメンション上の最新の点が特例点であるということである。
【００７９】
これは、基本的に我々が時間をいかに取り扱うかである‐特定の時間が言及されない場合、現在の時間がとられ、与えられた最後の「ステートメント」が我々が参照しているものである。特定の時間が与えられる場合（それは過古または未来である）、それは一時的基準点になる。
記憶方法
時間点は、整数値として記憶される。
バインディング内の時間点によって、最新のものが常に最初に検査されるように、バインディング重みの算出を変える。
例
Dim Time Time
Dim Tran Time Unique
Bind [Tranld Tran={New}] int=123
Bind [Tranld Tran={New}] int=2345
Bind [Tranld Tran={New}] alpha="ho ho
ho" = [Tranld]
Alpha: "ho ho ho"
Dim B Binding
= Remove_Point(B={LastBind})
= [Tranld]
Int: 2345
V3Mod−V3 モジュールによる評価
語法
この点型は、V4バインディングが任意の型の計算のためにV3モジュールにアクセスできるようにする。
V3モジュールに対する引数は、コールにおける追加のディメンション点である。正確な書式は以下の通りである、
[v3mod:module Dim:result argot argot ... ]
v3mod        型のディメンションは、V3Modである
module       V3の名前は、コールされるべきモジュールである
result         V3から復帰された値のディメンションである。V4エバリュエータは、V3値をこのディメンションと整合した書式に変換する
argpt          V3モジュールに通されるべき引数。これらは、V4書式からV3書式へ変換される。
記憶方法
これらの点は、V3モジュールを表している文字列として記憶される。
例
Bind [ItemPrice IMRef={ALL}]
[V3Mod=CalcPrice Dim=lnt
[PriceType [PriceRule]] [Discount
[PriceRule]] IMRef={BINDING}]
/* CalcPrice−「規則」に基づいて アイテム価格を計算するためのダミーモジュール
*/
{/CalcPrice(rule,discount,imref) p return(123456)
;}
V3PicMod−
V4 領域内のV3 モジュールコードへのリンク
語法
この点型は、V4領域の中のPicMod（位置独立コード）書式に記憶されたV3モジュール「コード」を表すために用いられる。
記憶方法
これらの点は、値がモジュール定義にアクセスするためにV4領域にキーをつくり込むために用いられる整数である。
V3ModRaw−V3 Moduleへのコール
語法
この点型は、それがV3をモジュールをコールするという点で、V3Mod点型と同様である。それは、変換がV3とV4データ型の間で行われないという点で異なる。V3に通された全ての引数はV4点としてのもので、V3からのすべての結果は有効なV4点であると思われる。
記憶方法
点をV3モジュール名に対応する文字列として記憶する。
内部モジュール
Echo−点をユーザのコンソールにエコーすること
構文
エコー（点点...）
point        テキスト表示書式に変換されて、ユーザのコンソールに出力すべき点。
説明
全ての引数点を評価して、ユーザのコンソールにそれらを表示する
Eval−コマンド・ストリングを実行する
構文
Eval (stringpt )
stringpt          評価のためのV4コマンド・インタプリタに通される文字列点。
説明
stringptは評価され、結果として生じるストリングは、V4コマンド・エバリュエータに通される。
例
Eval(Alpha: "Include test" )
Next_TextFile−テキストファイルの次の行を得ること
構文
alpha = Next_TextFile( filedesc )
alpha         filedescによって記載されたシーケンスの次の行に対応するアルファ値
filedesc          
テキストファイルを記載している記述子（MakeSeq_TextFileによって前に生成された）
説明
このモジュールはAlphaディメンション上の点としてを復帰し、filedescによって記載されたテキストファイルの次の行である。
ファイルの終わりで、このモジュールは、評価しない。
例
Context Push MakeSeq_TextFile(
"file.txt" )
= Next_TextFile(seqpnt* )
MakeSeq_TextFile−テキストファイルからシーケンスを作ること
構文
seqpnt = MakeSeq_TextFile ( filename )
seqpnt       ファイルに対応する復帰されたシーケンス点
filename      既存のテキストファイルを参照するストリング。
説明
ファイル名点は評価され、結果として生じるアルファ・ストリングはファイル名として扱われる。ファイルはV4によって開かれ、シーケンス点はオープン・ファイルからつくられる。
ListPoint_GetEl−リオストの中の特定点を得ること
構文
point= ListPoint_GetEl (list index)
point          リストの中のインデックスな要素に対応する点
list            点のリスト
index
復帰するリストの要素番号（１は、第１で、２は第２の代わりでであるなど。）
説明
リスト内のインデックス点を復帰する。
例
= ListPoint_GetEl( List: ('now' 'is' 'the')
int: 2 )
Alpha: 'is'
ListPoint_Size−あるリスト内の点の番号を得ること
構文
size = ListPoint_Size ( listpoint dimpoint
)
point        リスト内のインデックス番目の要素に対応する点
list          点のリスト
index        復帰するリスト内の要素番号（１は、第１であり、２は第２の代わり、などである。）
説明
dimpoint上の点としてlistpointのサイズをを復帰する
Next_ListPoint−シーケンス内の次の点を得ること
構文
point = Next_ListPoint ( seglist index
seqpnt )
point          リスト内のインデックス番目の要素に対応する点
seglist         シーケンス・リスト
index          復帰するリストの要素番号（１は第１であり、２は第２の代わりなどである。）
seqpnt         シーケンス点
説明
シーケンス内の次の点を復帰する。
FastNext_ListPoint−シーケンス（高速バージョン）内の次の点を得ること
構文
point= FastNext_ListPoint seqpnt
point            リストのインデックス番目の要素に対応する点
seqpnt           シーケンス点
説明
Next_ListPointの無意味な言葉の全てを通り抜けることなくシーケンス内の次の点を復帰する。
MakeSeq_ListPoint - Making a Sequence from
a List
構文
seqpnt = MakeSeq_ListPoint (list)
point            リストのインデックス番目の要素に対応する点
list              あるシーケンスに変換されるべき点のリスト
説明
リストから新しいシーケンスをつくって、リストを通して順番付けるために用いられてもよい新しいシーケンスを復帰する。
Skip ListPoint −シーケンス内の点をスキップすること
構文
point = Skip_ListPoint (seglist skipnum
seqpnt )
point           
リスト内のインデックス番目の要素に対応する点
seqlist           シーケンス・リスト
skipnum         リストにおいてスキップする点の正または負の番号
seqpnt           シーケンス点
説明
スキップ点、リスト内で前方または後方に。
Pos_ListPoint−シーケンス内の特定な点までの位置
構文
point = Pos_ListPoint ( seglist posnum
seqpnt )
point            リストのインデックス番目の要素に対応する点
seglist          
点のリスト
posnum          リスト内の位置
seqpnt           シーケンス点
説明
リスト/シーケンス内の特定の点までの位置。最初の点は、posnum
= １である。
Add_ListPoint−シーケンスに点を追加すること
構文
point = Add_ListPoint (seqlist skipnum
seqpnt addpoint )
point        リストのインデックス番目の要素に対応する点
seglist       点のリスト
skipnum        スキップする点の数
seqpnt        
シーケンス点
addpoint       追加されるべき点
説明
シーケンスに点を追加する。
Open_V4IS −V4IS 領域を開けること
構文
dimptr = Open_V4IS (filename structses dim)
dimptr            
オープン・ファイルのためのpcbに対応するdimディメンション上の点
filename          
オープンされるべきalphaファイル/領域名
structses          
オープンされるべき領域の特定のファイルを記載する構造要素点。
dim                
戻り値のために使用されるディメンション
説明
ファイル名によって特定されたV4IS領域を開き、structsesによって特定された内部バッファを割り当て、そしてdimディメンション上の点としてのオープン領域と関連しているpcbへポインタを戻す。
Get_V4IS - V4IS 領域からレコードバッファを得ること
構文
dimptr = Get_V4IS (pcbptr keyfielddes
keyvalue dim)
dimptr            
点dim上の記録へのポインタ。
pcbptr            
前記領域のためのpcbへのポインタ
keyfiledes         
キーに対応するデータ要素記述子
keyvalue          
使用されるキー
dim               
戻り結果のためのディメンション
説明
領域内の指定された記録を得る。記録を見つけられない場合、モジュールは評価しない。
Field V4IS -フィールドの値をバッファから引き出すこと
構文
valuept = Field_V4IS (recptr despt )
valuept               
バッファから検索された値に対応する点。前記点のディメンションは、desptに埋め込まれたディメンションによって決定される。
recptr                
レコード・バッファへのポインタ
despt                 
データ要素記述子
説明
このモジュールは、フィールドを記録バッファから引き出し、、データ要素記述子点内の特定されたディメンション上の点として結果を戻す。
S1bcField_V4IS−フィールドの値をサブストラクチャから（Contentによって）引き出すこと
構文
valuept = S1bcField_V4IS (recptr des searchdes
searchval )
valuept         
サブストラクチャから抽出された点
recptr           
記録ポインタ
des             
抽出されるべき点のためのデータ要素記述子
searchdes        検索されたサブストラクチャ内のフィールドのためのデータ要素記述子
searchval            
サブストラクチャ内で探す値
説明
このモジュールは、同じサブストラクチャ内のもう一つのフィールドの値に基づいて反復するサブストラクチャのフィールドの特定のインスタンスを見いだすために用いられる。
【００８０】
例
インベントリー記録が履歴情報のための反復するサブストラクチャを有したと仮定する。サブストラクチャ内の一つのフィールドは月あり、もう一つはその月現在のytd売上高であった。S1bcField_V4ISモジュールは、サブストラクチャをはっきりと検索する必要なく特定の月のytd売上高を得るために使用できる。
S1bcField_V4IS( [CurrentRec] [YTDSales
Dim:IM] [MonthofSale Dim:IM] Month*)
Field_V4IS−フィールドの値をサブストラクチャから（インデックスによって）引き出すこと
構文
valuept = S1 bxField_V4lS (recptr des
index) 
recptr               
記録ポインタ
des                  
抽出されるべきデータ要素
index                
戻すべきサブストラクチャ内の要素番号（１は第１、２は第２の代わりなどである。）
説明
このモジュールは、レコード・バッファからdesのインデックス番目の発生を抽出する。
Set_Context−コンテキスト点を設定すること
構文
Set_Context (point)
point                  
任意のV4点
説明
現在のコンテクスト（現フレーム）に、前記点を追加する。
Load_V3PicMod−V4
領域からV3
モジュールをロードすること
構文
Load_V3PicMod (modulept)
module              
モジュール名（テキスト）を特定する点
説明
指定されたモジュールをV4領域から現在のV3ランタイム環境に、ロードする。
例
v3_set_parameter(/undefined_module/,
"Eval Load_V3PicMod([V3Mod=* Module])") ;
Unload_V3PicMod −V3
モジュールをランタイム環境からアンロードすること
構文
Unload_V3PicMod (modulename )
modulename              モジュールのアルファ名
説明
現在実行中のV3環境からモジュールをアンロードする。
MakeSeq_DimUnique−
【００８１】
構文
listseq= MakeSeq_DimUnique (dim listdim)
listseq         前記シーケンスを表している点
dim              
ユニークな属性によって宣言されて、dim: {new} constructによってつくられた一つ以上の点を備えていたディメンション。
listdim           
前記値を戻すために使用されるディメンション。
説明
ユニークな属性によって宣言されたディメンションは、V4ハンドラによって追席される。新しい点がつくられるたびに、それは内部リストに記憶される。このモジュールは、全てのそのような点のシーケンスを（現在V4コンテクストにロードされている全ての領域に対して）つくるために用いられる。
DimUnique−ディメンションからリストを作ること
構文
listpt = DimUnique (dim listdim )
listp           
指定されたディメンション上の点の全てのリストを表している点
dim        
使用するディメンション（「Dim：xxx」として指定された）
listdim     
戻されたリスト（「Dim:xxx）として指定された）のために使用するディメンション
【００８２】
説明
このモジュールは、特定のディメンション上の全ての点のリストを作る。
Plus - Adding/Concatenating Points 
構文
result= Plus( arglist)
result            
結果として生じる点
arglist           
加え合わされる点のリスト。
説明
プラス・モジュールは、arglist内の全ての点を加えるかまたは連結する。全ての点が数字の場合、結果は、最初の引数のディメンションに戻された点の和である。点が全て数字とは限らない場合、結果は、点のストリング表示の連結である。
Minus−数値的引算
構文
result= Minus (arg1 arg2 )
result         
最初の引数のディメンションに戻された結果
arg1          
最初の数
arg2          
最初の数から減じられることになっている第２の数
説明
結果の点は、arg1からarg2の整数引算である。
Mult - Numeric Multiplication result = Mult
(arg1 arg2 )
result         
最初の引数のディメンションにおいて結果として生じる点
arg1           
最初の数
arg2           
最初の数を乗じられる第２の引数。
【００８３】
説明
このモジュールは、それの二つ引数を単に掛け合わせるだけである。
例
！      簡単な帰納的関数
Bind [Factorial Int: {all}] Mult( Int:
{Binding) [Factorial I Minus( Int: {Binding) Int: 1) ] )
Bind [Factorial Int: 1] Int: 1
= [Factorial Int: ５
]
Next_IsctVal -共通部分シーケンスの次の評価を復帰する。
構文
point= Next_IsctVal ( seqpnt)
point                  
次の評価に対応する点
seqpnt                
シーケンス点
説明
このモジュールは、シーケンス上の次の評価を実行して,結果を戻すために用いられる。
MakeSeq_IsctVal−共通部分からシーケンスを作る
構文
seqpnt = MakeSeq_IsctVal (isct seqpntdim
optionalstart optionalend )
seqpnt             
結果として生じるシーケンス点
isct                 
シーケンスの基礎として使用される共通部分
seqpntdim          
戻された結果のためのディメンション
optionalstart        選択できる始動インデックス
optionalend        
選択できる終端指数
【００８４】
説明
このモジュールは、共通部分の全てのありうる評価のシーケンスを作るために用いられる。最初の点は、現在のコンテクスト内の共通部分の正常評価であろう。次の点は、最初の結果が評価されなかった場合、結果であっただろうものすべてであろう。optionalstart及びoptionalend点は、シーケンスがスタートし停止するところを制御するために与えられてもよい。
例
このモジュールが、時間ディメンション点で連結された値のセット／リストを通して順序付けるために用いられる。正味の効果は、各次の点が次の時間的に前の点であろうことであろう。
Remove_Point - Remove a Point from a V4
Area
構文
Remove_Point (point)
point            
除かれる点
説明
指定された点をV4領域から除く。現在、バインディングとして点除くことができる点は、...ただ
Logical And - Perform Logical And'ing
構文
point = LogicalAnd (argl arg2 [resultdim ]
)
point             
論理的にarg1とarg2を加算した結果。
resultdim点が与えられている場合、...
arg1             
アンドの最初の引数
arg2             
アンドの第２の引数
resultdim        
結果として生じる点のためのディメンション
説明
それの二つ引数の論理積演算を実行する。
Logical_Or -二つの点の論理和演算をする 
構文
point= LogicalOr (arg1 arg2 [resultpoint] )
point
point              
論理和の結果
arg1               
論理和の最初の引数
arg2               
論理和の第２の引数
resultpoint         結果として生じる点のためのディメンション
【００８５】
説明
二つ引数点の論理和を求める。
Logical_Not -引数の論理的否定を評価する
構文
point= LogicalNot (argl [resultpoint] )
point               
最初の引数を補足する結果
arg1               
補足される点
resultpoint         
結果のためのディメンション
説明
それの引数を論理的に補足する。
IfTrue−条件つき評価
構文
point= IfTrue (logical truepoint
falsepoint)
point       truepointまたはfalsepointのいずれかの評価をもたらしている点
logical     論理的真若しくは論理的偽、または０を超える数について評価している点
truepoint               
論理が真である場合評価される点。
falsepoint              
論理が偽である場合、評価される点。
説明
このモジュールは、それの最初の引数（論理的な）を評価する。
結果が真の場合、truepointが評価される。
結果が偽の場合、falsepointが評価される。
注
truepointなまたはfalsepointにいずれかが共通部分である場合、それらは引用符で囲まれるべきである。
IfDefined−条件つき評価
構文
point = IfDefined (isctpoint definedpoint
undefpoint ) point = IfDefined (isctpoint undefpoint)
point            
結果として生じる点
isctpoint        「試験される」引用符付き共通部分
definedpoin     isctpoinが定義済みならばt評価されて戻される点
undefpoint       isctpointが未定義ならば評価されて戻される点。
【００８６】
説明
このモジュールは、最初に、引用符付きisctpointが定義されている（評価されることができる）かどうかを決める。可能ならば、definedpointは評価されて戻される。definepointが与えられていない場合には、isctpointの評価は、戻される。いずれにせよ、共通部分を評価できない場合、結果はundefpointの評価である
Error -エラーを 生成し表示する
構文
Error (arglist)
arglist              
連結されて出力される引数のリスト。
説明
連結するアンド出力arglistの中にアンドその次に点、V4誤りを生成する。
Echo−ユーザのコンソール上の引数を連結して表示する
構文
Echo( arglist）
arglist           
点のリスト
説明
ユーザのコンソール上のarglistにある点を連結して表示する。
EvalList−リスト内の全ての点を評価する
構文
EvalList (list)
list                
評価される点のリスト
説明
このモジュールは、リスト内の全ての点を通って進んでそれぞれを評価するに過ぎない。
ForEachPushAndEval−リスト内の点を繰り返して評価する
構文
ForEachPushAndEval (list evallist)
list                 
点のリスト
evallist             
評価される点のリスト
【００８７】
説明
このモジュールは、リスト内の各点を通って進んで、それをコンテクスト上に押し付け、次に、evallist内の各点を評価する。それは、手続き型言語内のループコンストラクトと同様に作動する。ForEachApply−リストを通して順番を付け点を共通部分に適用する
構文
reslist = ForEachApply (list isct [context]
)
reslist            
追加の点でisctの反復評価から生じる点のリスト
list               
リストのインデックス番目の要素に対応する点
isct               
評価される共通部分（リストから点を追加して）
context           
選択できるコンテクスト点または点のリスト。
【００８８】
説明
このモジュールは、リスト内の各点を通って進んで、点をisctに加え、そして次に、一時的共通部分を評価する。ラスト引数（コンテクスト）は、このモジュールの持続時間の間に、コンテクスト点を特定するために与えられてもよい。
ForEachPushAndApply−シーケンス／リストを繰り返し、共通部分を評価する
構文
reslist = ForEachPushAndApply（リストevalなoptcontext）
reslist                
evalの反復評価から生ずる点のリスト
list                   
点のリスト
eval                   各点のために評価される共通部分
optcontext           
選択できるコンテクスト点またはリスト
【００８９】
説明
このモジュールは、リスト内の各点を通って進んで、点を現在のコンテクストに押し付け、そして次に、evalを評価する。結果として生じるreslistは、評価から生じる点のリストである。
Sum−リスト内のすべての点を合計する
構文
result = Sum( list initpoint)
result       リスト内の全ての点の和
list         合計される点のリスト
initpoint    和の初めの点を特定している点、通常フォーム「ディメンション：０」のもの
説明
「和」モジュールは結果を初めの点（initpoint）に設定して、次に、リスト内の各数値点結果に加える。
Min−リスト内の最小点を見いだす
構文
result= Min (list)
result              
リスト内の最小点
list                  
数値点のリスト
説明
このモジュールは、リスト内の最小数値点を戻す。
Max−リスト内の最大点を見いだす
構文
result = Max (list)
result               
リスト内の最大点
list                  
数値点の任意のリスト
説明
このモジュールは、引数リスト内の最大数値点を戻す。
ListFromRange−値の範囲からリストをつくる
構文
list = ListFromRange (low high resultdim )
list                   
結果として生じるリスト点
low         
リスト内の最初のまたは低い点
high                  
リスト内の最後または高い点
resultdim             
結果のディメンション
説明
このモジュールは、ある範囲の特定された始点と終点からリストをつくる。
ListFromStartNumber−始点及び番号からリストをつくる
構文
list = ListFromStartNumber( start number
resultdim )
list                 
結果として生じるリスト点
start               
リストの始点
number            
リストの点の数
resultdim           
結果のためのディメンション
説明
このモジュールは、原点及び点の数からリストをつくる。
【００９０】
リファレンス
序文
構造定義‐トークンジェネレータdcl struct V4LEX
dcl struct V4LEX＿TknCtrIBlk
{
int tcb_lines;                       『
TCBを通して処理された行総数』
int tcb_tokens;                     『トークン総数』
short opcode ;                      『型が句読点であれば、Opcode-V_Oper_xxx』
short prec ;                        『句読点ならば、デフォルトオペレ−タ順位文法』
short type ;                        『トークン結果−V4LEX
TknType xxxを参照』
short need_input_line ;              『新しいゼロ以外のもしも必要性は、行を入力した』
short ifxilx ;                        『
ifxを定義しているilx 』
short ifx ;                          『下に対するインデックス』
struct ifs[20]｛
short doif ;                          『IF部分のコマンドを実行する』
short doelse ;                        『ELSE部分のコマンドを実行する』
short inif ;                          『
IF部分ないにあれば真』
string #V4LEX_Tkn_KeywordMax name;『選択できるIFレベル名』
short ilx;                            『下へのインデックス』
struct ilvl[#V4LEX_Tkn_InpLvlMax] int mode
;『入力モード-V4LEX_InpMode_xxx』
pointer file ;                        『入力ファイルdescポインタ）』
pointer strptr ;                      『=
V4LEX_InpMode_Stringであれば、ストリングに対するに対する点』
alpha #V4LEX_Tkn_InpLineMax input_str ;『 現在の入力行』
pointer input_ptr ;                  『入力strの次のバイトへのポインタ』
short echo ;                        『真ならば、エコー入力行』
string #V4LEX_Tkn_PromptMax-1 prompt ;『入力がユーザTTYであれば、プロンプト』
short statement_start_line ;         『行番号現在のステートメントは、閉路をスタートさせた』
short current_line ;              
『現在の行番号』
short total_lines ;                    
『このファイル内の行総数』
string 127 file_name ;                
『このレベルのためのファイル名（または何もなし）』
short last_page_printed ;            
『誤りを起こさせる（余分のプリントアウトを避けるために）』
pointer arglist ;                     
『マクロ引数のストリングへのポインタ』
short BoudnMacroArgs ;             
『下のマクロargsが連結されていたならば、真』
short HaveMacroArgNames ;         
『我々が下のマクロ引数名を得たならば、真』
struct macarg[#V4LEX_Tkn_ArgMax]｛
string #V4LEX_Tkn_KeywordMax name ;『選択できるマクロ引数名』
pointer value ;                       
『マクロ引数へのポインタ』
pointer prior_input_ptr ;             
『トークンについて開始するポインタ（先取りのために』
short have_lookahead ;               
『真であれば、前のトークンを再トークン化する』
short lookahead_flags ;               
『前のコールから次のトークンへのフラグ』
short have_value ;                    
『ラストトークンは、値（単項マイナスのための）を戻す』
short in_ comment;                  
『真ならば、コメント内にある』
short check_initialized ;             
『真ならば、初期化されたスタック・バールを検査する』
string #V4LEX _Tkn_KeywordMax keyword ;『キーワードであれば、キーワード・ストリングである』
short keyword_len ;                   
『キーワードの長さ』
short actual_keyword_len ;            
『可能な打ちきり前の実際の長さ』
short default_radix ;                  
『文字通りの整数のデフォルト基数（通常１０）』
short radix                          
;『現在のリテラル整数の基数（通常１０）』
short literal_len ;                     
『リテラルならば長さである』
int integer ;                           『リテラル整数ならば値』
short decimal_places ;                  『小数位の番号』
real floating ;
string #V4LEX_Tkn_StringMax-1 string ;
struct poundparam[26] {string
#V4LEX_Tkn_KeywordMax value; } ;『 #A# ... #Z#のための値』
del value V4LEX_TknType_String      『ストリングリテラル（引用符で囲まれた）』
del value V4LEX_TknType_Keyword    『キーワード（大文字に変換された）』
del value V4LEX_TknType_Integer
del value V4LEX_TknType_Float 20
del value V4LEX_TknType_EOL
del value V4LEX_TknType_Punc        『句読点（tcb->keywordに記憶された）』
del value V4LEX_InpMode_Stdin       『入力をstdinから引き出す』
del value V4LEX_InpMode_File        『ファイルから引き出す』
del value V4LEX_InpMode_String      『ストリングから引き出す』
del value V4LEX_Option_PushCur      『次のコールが再びそれを戻すように現在のコールをリプッシュする』
del value V4LEX_Option_RetEOL      『EOLを「トークン」として戻す（行分析のために）』
del value V4LEX_Option_ForceKW    『次のトークンをキーワードとして押し込もうとする』
del value V4LEX _ption_NegLit        『先行「−」を負数の一部として扱う』
del value V4LEX_Option_ForceAsIs    『入力をトークンに分解して、「そのままで」を戻す』
『ストリングとして（マクロデフォルトを受け付けるために）』
del value V4LEX_Option_ExpandArgs『「#n#」の膨張を強いる』
del value V4LEX_RPPFIag_EOL          『行末を表現の終わりとして扱う』
del value V4LEX_RPPFIag_Semi        『「;」を表現の終わりとして扱う』
del value V4LEX_RPPFIag_PushParens  『丸括弧、大括弧、その他をオペレータとしてプッシュする』
del value V4LEX_RPPFIag_ImplyAnd『二つ隣接値の間に暗示"&"を導入する』
del value V4LEX_RPPFIag_ColonKW『「キーワード」をコロンの後に押し込む』
データStructures（Parsing）
del value V4LEX_RPP_LineMax『分解行内の最大文字』
del value V4LEX_RPP_AIphaValMax『アルファトークン内の最大文字』
del value V4LEX_RPP_TokenMax『トークンの最大数』
del struct V4LEX＿RevPolParse『逆ポーランド構文解析を保持する構造』
{alpha #V4LEX_RPP_LineMax ParseLine ;『構文解析された行』
short MapCount ;『かつて「ビットマップ」として評価されるべき下記の最初の「n」』
short Count ;『下の番号』
struct Token [#V4LEX_RPP_TokenMax]
{ short Type ;『トークン型』
short Prec ;『優先順位（演算子の場合）』
short dps ;『小数位』
short OpCode ;    『オペコード（０のもしも否定オペレータ）−V
Oper xxx示す』
int IntVal ;  『トークンの整数値』
real Floating ; 『浮動値』
string #V4LEX_RPP_AIphaValMax-1 AIphaVal
; 『トークンのアルファ値』
｝;
｝;
データ構造‐ビッグテキスト
dcl value V4LEX_BigText_Max  『ビッグバッファの最大バイト』
dcl struct V4LEX＿BigText    『
V4「ビッグテキスト」エントリーの書式』
{ int kp[2] ;  『型=
V4、サブタイプ=ビッグテキスト、モード=lnt、Len=8
』
int Key ;    『エントリのためのキー（通常｛ユニークなV4点｝）』
int Bytes ;
alpha #V4LEX_BigText_Max BigBuf ;    『テキストのためのバッファ』
｝;
データ構造‐V4IS
dcl struct V4iS__ParControIBlk
{string 31 V3name ;  『 ０誤り制御装置へのリンク機構に対するV3名』
string 120 Filename;  『領域ファイル名 』
int OpenMode,LockMode,BktSize ;
int AccessMode ;
int MinCmpBytes;    『この数より大きいすべてのレコードを圧縮する』
int MaxRecordLen ;    『許容される最大レコード長』
int ReIHNum ;    『相対的な階層構造番号（異質のものに対してだけ０）』
string 250 BindCatList ;      『 領域のためのバインディングカテゴリー』
pointer FilePtr ;    『実際のファイルにポイントする』
int GetMode,PutMode;    『モードを得て及び入れる』
int DfItGetMode,DfItPutMode ;
int GetLen ;
int GetCount,PutCount ;
int DataMode,DfltDataMode ;
int Areald ;  『このPCBと関連している領域ID
』
int Datald ;  『 現在／最後にが関連したデータID
』
pointer DfItPutBufPtr,PutBufPtr ;    『
Bufferを入れる』
int DfItPutBufLen,PutBufLen ;
pointer DfItGetBufPtr,GetBufPtr ;
int DfItGetBufLen,GetBufLen ;
pointer DfItKeyPtr,KeyPtr ;
int DfitKeyNum,KeyNum ;
int DfItFileRef,FileRef;    『現在のファイルレファレンス（内部のためには０）』
pointer DataPtr;『
V4MM Bufferのデータにポイントするように更新された』
int DataLen;  『コピーがなければlenへ』
pointer Keylnfo;  『新しい領域のできるときにキー情報を指摘』
short AuxLinkCnt;  『下のリンクPCBの番号*/
struct Link[10]
{ int LinkFileRef ;  『我々がつながっているFileRef
』
pointer PCBPtr;    『AuxVaIが異なる領域にあればその他のPCBにリンク』、
pointer ffs;        『異なるファイル情報に対するリンク』
データ構造‐ディメンション
dcl struct V4DP1__Dimlnfo
{ int KeyPrefix ;  『 タイプ=v4、サブタイプ=DimINfo、モード=lnt、長さ=8
』
int Dimld;  『Dimコード（実際にDim名のためのdictエントリ）』
string 31 DimName ;
short PointType ;    『このディメンションための型（V$DPI
PntType xxx）』
short PointVerify ;    『この点を確認する（受け付ける）方法』
short RangeOK ;    『点範囲（xxx.yyy）が許容されれば、真』
short ListOK ;    『点リスト（xxx,yyy,zzz）が許容されれば、真』
short IsModule ;    『点が外部（V3）モジュールにリンクしていれば、真』
short UniqueOK ;    『点をdim={NEW}として特定することを認められた』
short DictType ;    『辞書型（V4DPI_DictType
xxx）』
int BindList ;    『ディメンションは、BindListエントリに対するキーになることができる』
short ExpandMacro ;      『下のマクロ内のバイトの数』
string 100 MacroBuf ;    『点受入れを詳述するマクロ・バッファ』
short ReIHNum ;    『相対的階層構造番号（バインディングのための）』
string 31 ReIHCategory ;    『バインディングのためのカテゴリ・コード』
short ReIHReview ;    『ReIHNumを調査する時点』
string 31 AcceptorModule ;    『
V3 Acceptorモジュールの名』
int AcceptorObject[2] ;    『アクセプタモジュールのためのOBJREF』
string 31 DisplayerModule ;    『
V3 ディスプレーヤ・モジュール名』
int DisplayerObject[2] ;    『 ディスプレーヤのためのOBJREF
』
『以下のMUSTが、ディメンション情報の終わりにある!!
』
alpha 300 AutoCtxPnt ;『ヌルでなければ、Auto-Contextのために用いられるべきである』
｝;
dcl struct V4C__AreaHlnfo
{short ReIHNum ;    『相対的階層構造番号』
short ExtDictExists ;    『外部辞書がこの領域において終了』
short IntDictExists ;    『内部辞書がこの領域に存在する』
short ExtDictUpd ;    『真であれば、外部辞書を更新してよい』
short IntDictUpd ;      『真ならば、内部辞書を更新』*/
short BindingsExist ;    『真ならば、バインディングが存在する』
short BingingsUpd ;    『 真ならばバインディングを更新してよい』
short IsPrimary ;    『真ならば、主領域、（さもなければスレーブ）』
string 250 BindCatList ;    『カテゴリを連結するストリング・リスト』
short BindCatUpd ;    『１は置換、２は添付』
【産業上の利用可能性】
【００９１】
本発明は、汎用デジタル計算機上のデータ処理及び表示において有効である。
【図面の簡単な説明】
【００９２】
【図１】ディメンション構造を示す。
【図２】点構造を示す。
【図３】共通部分構造構造を示す。
【図４】バインディング構造を示す。
【図５】領域構造
【図６】及びコンテクスト構造
【図１】
2006505030.tif 000002
【図２】
2006505030.tif 000003
【図３】
2006505030.tif 000004
【図４】
2006505030.tif 000005
【図５】
2006505030.tif 000006
【図６】
2006505030.tif 000007