インターフェースの作成
本章では、OpenFrame ASMで提供されるofasmifツールを使用してアセンブラ・インターフェースを作成する方法について説明します。
1. インターフェース3バージョンの仕様ファイル
ofasmifは、インターフェース3バージョンの仕様ファイルを使用してcpp形式のインターフェース・ソースを生成します。インターフェースは、ASMから非ASMまたはその逆の呼び出しをサポートするために必要なプログラムです。
ENTRYインターフェースの仕様
ENTRYインターフェースの仕様(バージョン3)は、非ASMからASMを呼び出すために作成する必要があるファイルです。ファイルの構造は以下のとおりです。
{
"entry_list":
[
{
"entry_name" : "ENTRYNAME1",
"fixed_parameter_list" :
[
{
"param_size" : (PARASIZE),
"param_type" : (PARATYPE),
"pointer_offset_list" : [OFFSET_POSITION, ...],
"pointer_size_list" : [POINTER_SIZE, ...]
},
]
},
{
"entry_name" : "ENTRYNAME2",
"variable_parameter_list" :
{
"max_length" : (MAXLEN)
}
}
],
"program_name" : "PROGNAME",
"version" : 3,
"interface_type" : "entry"
}
-
entry_list
プログラムに存在するエントリの仕様がJSON配列形式で記述れています。
1つのエントリには、プログラムの開始点に対応するentry_nameとプログラムに入るときに渡されるパラメータの情報(fixed_parameter_list、variable_parameter_list)が定義されています。
-
entry_name
開始点に対応する名前です。(プログラム名とは異なります)
-
fixed_parameter_list
特定のエントリのパラメータ・リスト(固定数)情報がJSON配列形式で記述されています。各パラメータは、param_sizeとparam_typeで構成されます。
パラメータがポインター・タイプの場合は、pointer_offset_listとpointer_size_listが追加で構成される必要があります。
項目 説明 param_size
パラメータのバイト・サイズを指定します。
param_type
パラメータのタイプを指定します。
1つのエントリには、プログラムの開始点に対応するentry_nameとプログラムに入るときに渡されるパラメータの情報が定義されています。
-
P : ポインター・タイプのパラメータ
-
NP : 非ポインター・タイプのパラメータ
-
V : 可変長パラメータ
-
PCB : PCBタイプのパラメータ
pointer_offset_list
ポインター・タイプ・パラメータの場合、パラメータ構造体に含まれているポインターのオフセット・リストを指定します。構造体内でポインターのオフセット値を順番に定義します。
pointer_size_list
ポインター・タイプ・パラメータの場合、パラメータ構造体に含まれているポインターのサイズ・リストを指定します。
pointer_offset_listと同様に、ポインターのサイズを順番に定義します。リストの数は、pointer_offset_listに定義されている数と同じである必要があり、ペアで構成する必要があります。
-
-
variable_paramter_list
可変数のパラメータを持つパラメータ・リストの情報をJSONオブジェクト形式で記述します。
項目 説明 max_length
パラメータ・リストの最大パラメータの数を定義します。
-
-
program_name
アセンブラ・プログラム名を指定します。アセンブラ・プログラムは、拡張子が
.asmo
のファイルです。 -
interface_type
ENTRYインターフェースの場合は、「entry」を入力します。
-
version
インターフェース仕様のバージョンを入力します。インターフェースの仕様は、ofasmifコマンドのバージョンに従います。
現在、ofasmifコマンドが提供するインターフェース仕様の最新バージョンは4です。
EXITインターフェースの仕様
EXITインターフェースの仕様(バージョン3)は、ASMから非ASMを呼び出すために作成する必要があるファイルです。ファイルの構造は以下のとおりです。
{
"entry_list":
[
{
"entry_name" : "ENTRYNAME1",
"fixed_parameter_cnt" : (PARAMCOUNT)
}
],
"program_name" : "PROGNAME",
"version" : 3,
"interface_type" : "exit"
}
-
interface_type
EXITインターフェースの場合は、「exit」を入力します。
各項目の詳細については、ENTRYインターフェースの仕様を参照してください。fixed_parameter_cnt項目には、非ASMから渡されたパラメータの数を指定します。 |
LOADインターフェースの仕様
LOADインターフェースの仕様(バージョン3)は、ASMでCICS LOADコマンドを使用して他のモジュールを呼び出す場合に作成する必要があるファイルです。ファイルの構造は以下のとおりです。
{
"entry_list":
[
{
"entry_name" : "ENTRYNAME1",
"fixed_parameter_list" :
[
{
"param_size" : (PARASIZE),
"param_type" : (PARATYPE),
"pointer_offset_list" : [OFFSET_POSITION, ...],
"pointer_size_list" : [POINTER_SIZE, ...]
}
]
}
],
"program_name" : "PROGNAME",
"version" : 3,
"interface_type" : "load"
}
-
interface_type
LOADインターフェースの場合は、「load」を入力します。
各項目の詳細については、ENTRYインターフェースの仕様を参照してください。 |
2. インターフェース4バージョンの仕様ファイル
ofasmifは、インターフェース4バージョンの仕様ファイルを使用してcpp形式のインターフェース・ソースを生成します。インターフェースは、ASMから非ASMまたはその逆の呼び出しをサポートするために必要なプログラムです。
ENTRYインターフェースの仕様
ENTRYインターフェースの仕様(バージョン4)は、非ASMからASMを呼び出すために作成する必要があるファイルです。ファイルの構造は以下のとおりです。
{
"entry_list":
[
{
"entry_name" : "ENTRYNAME1",
"fixed_parameter_list" :
[
{
"param_size" : (PARASIZE),
"param_type" : (PARATYPE),
"pointer_offset_list" : [OFFSET_POSITION, ...],
"pointer_size_list" : [POINTER_SIZE, ...],
"child_list" :
[
{
"index" : (INDEX),
"param_size" : (PARASIZE),
"pointer_offset_list" : [OFFSET_POSITION, ...],
"pointer_size_list" : [POINTER_SIZE, ...]
},
...
]
},
...
]
},
{
"entry_name" : "ENTRYNAME2",
"variable_parameter_list" :
{
"max_length" : (MAXLEN)
}
},
...
],
"program_name" : "PROGNAME",
"version" : 4,
"interface_type" : "entry"
}
-
entry_list
プログラムに存在するエントリの仕様がJSON配列形式で記述されています。
1つのエントリには、プログラムの開始点に対応するentry_nameとプログラムに入るときに渡されるパラメータの情報(fixed_parameter_list、variable_parameter_list)が定義されています。
-
entry_name
開始点に対応する名前です。(プログラム名とは異なります)
-
fixed_parameter_list
特定のエントリのパラメータ・リスト(固定数)情報がJSON配列形式で記述されています。各パラメータは、param_sizeとparam_typeで構成されます。
パラメータがポインター・タイプの場合は、pointer_offset_listとpointer_size_listが追加で構成される必要があります。
項目 説明 param_size
パラメータのバイト・サイズを指定します。
param_type
パラメータのタイプを指定します。
1つのエントリには、プログラムの開始点に対応するentry_nameとプログラムに入るときに渡されるパラメータの情報が定義されています。
-
P : ポインター・タイプのパラメータ
-
NP : 非ポインター・タイプのパラメータ
-
V : 可変長パラメータ
-
PCB : PCBタイプのパラメータ
pointer_offset_list
ポインター・タイプ・パラメータの場合、パラメータ構造体に含まれているポインターのオフセット・リストを指定します。構造体内でポインターのオフセット値を順番に定義します。
pointer_size_list
ポインター・タイプ・パラメータの場合、パラメータ構造体に含まれているポインターのサイズ・リストを指定します。
pointer_offset_listと同様に、ポインターのサイズを順番に定義します。リストの数は、pointer_offset_listに定義されている数と同じである必要があり、ペアで構成する必要があります。
child_list
Pタイプ・パラメータに使用できます。Pタイプ・パラメータで指定した各ポインターが指すデータに追加のポインターが含まれている場合に使用します。このフィールドは再帰的に使用できます。
-
index : pointer_offset_list/pointer_size_listの何番目のポインターに対して定義するかを指定します。
-
param_size : ポインターが指すデータのサイズを指定します。pointer_size_list[index]と同じ値を指定します。
-
pointer_offset_list : ポインターが指すデータに含まれている各ポインターのオフセットを指定します。
-
pointer_size_list : ポインターが指すデータに含まれている各ポインターが指すデータのサイズを指定します。
-
-
variable_paramter_list
可変数のパラメータを持つパラメータ・リストの情報をJSONオブジェクト形式で記述します。
項目 説明 max_length
パラメータ・リストの最大パラメータの数を定義します。
-
-
program_name
アセンブラ・プログラム名を指定します。アセンブラ・プログラムは、拡張子が
.asmo
のファイルです。 -
interface_type
ENTRYインターフェースの場合は、「entry」を入力します。
-
version
インターフェース仕様のバージョンを入力します。インターフェースの仕様は、ofasmifコマンドのバージョンに従います。
現在、ofasmifコマンドが提供するインターフェース仕様の最新バージョンは4です。
EXITインターフェースの仕様
EXITインターフェースの仕様(バージョン4)は、ASMから非ASMを呼び出すために作成する必要があるファイルです。ファイルの構造は以下のとおりです。
{ "entry_list": [ { "entry_name" : "ENTRYNAME1", "fixed_parameter_list" : [ { "param_type" : "NP" }, { "param_size" : (PARASIZE), "param_type" : "P", "pointer_offset_list" : [OFFSET_POSITION, ...], "pointer_size_list" : [POINTER_SIZE, ...] } ] } ], "program_name" : "PROGNAME", "version" : 4, "interface_type" : "exit" }
-
interface_type
EXITインターフェースの場合は、「exit」を入力します。
各項目の詳細については、ENTRYインターフェースの仕様を参照してください。param_sizeは、param_typeが「NP」または「F」の場合は指定する必要はありません。
LOADインターフェースの仕様
LOADインターフェースの仕様(バージョン4)は、ASMでCICS LOADコマンドを使用して他のモジュールを呼び出す場合に作成する必要があるファイルです。ファイルの構造は以下のとおりです。
{ "entry_list": [ { "entry_name" : "ENTRYNAME1", "fixed_parameter_list" : [ { "param_size" : (PARASIZE), "param_type" : (PARATYPE), "pointer_offset_list" : [OFFSET_POSITION, ...], "pointer_size_list" : [POINTER_SIZE, ...] } ] } ], "program_name" : "PROGNAME", "version" : 4, "interface_type" : "load" }
-
interface_type
LOADインターフェースの場合は、「load」を入力します。
各項目の詳細については、ENTRYインターフェースの仕様を参照してください。 |
3. ofasmifコマンド
以下は、OpenFrame ASMで提供されるofasmifコマンドの使用方法です。
ofasmif [コマンドオプション...]
-
コマンド・オプション
以下は、ソース・ファイルをコンパイルするためのデフォルト・コマンド・オプションです。
オプション 説明 -i <ファイル名>
入力ファイルを設定します。cppファイルを作成し、g++でコンパイルを行います。インターフェース仕様ファイルとして認識されるには、ファイルの拡張子が「json」である必要があります。
--cpp-only
cppファイルのみを作成します。-iオプションと一緒に使用する必要があります。
--comp-only
既存のcppファイルをg++でコンパイルします。-iオプションと一緒に使用する必要があります。
-g <インターフェースタイプ>
作成するJSONファイルのインターフェース・タイプを指定します。
-n <プログラム名>
プログラム名として使用されるJSONファイル名を指定します。-gオプションと一緒に使用する必要があります。
-e <エントリ名>
作成するJSONファイルのエントリ名を指定します。-gオプションと一緒に使用する必要があり、指定しない場合はプログラム名がエントリ名として使用されます。
-t <パラメータタイプ>
パラメータ・タイプ(V、F、PCB、JCL)を指定します。-eオプションと一緒に使用する必要があります。
-m <パラメータ数>
パラメータの最大数を指定します。-t V(可変パラメータ)の場合に使用します。
-s <サイズリスト>
パラメータのサイズ・リストを指定します。-t F(固定パラメータ)の場合に使用します。
--ptr-offset <ポインターパラメータオフセットリスト>
-t F(固定パラメータ)でありポインター・パラメータが存在する場合、ポインター・パラメータのオフセット・リストを指定します。--ptr-sizeオプションと一緒に使用する必要があり、リストの配列が同じである必要があります。
--ptr-size <ポインターパラメータサイズリスト>
-t F(固定パラメータ)でありポインター・パラメータが存在する場合、ポインター・パラメータのサイズ・リストを指定します。--ptr-offsetオプションと一緒に使用する必要があり、リストの配列が同じである必要があります。
-p <ファイル名>
入力ファイルの段落を自動的に合わせます。
-h(H)
ヘルプを表示します。
インターフェースの作成例
以下は、ofasmif -gオプションを使用してパラメータ・タイプ別にさまざまなインターフェースを作成する例です。
-
基本的な最大パラメータ数が10個の可変パラメータ・エントリ・インターフェースを生成します。
ofasmif -g entry -n TEST -e TEST
-
可変パラメータを持つENTRYインターフェースを作成します。パラメータの最大数を指定する必要があります。
ofasmif -g entry -n TEST -e TEST -t V -m 10
-
固定パラメータを持つENTRYインターフェースを作成します。ポインター・パラメータがない場合の例です。
ofasmif -g entry -n TEST -e TEST -t F -s 100,200,300
-
固定パラメータを持つENTRYインターフェースを作成します。ポインター・パラメータがある場合の例です。
ofasmif -g entry -n TEST -e TEST -t F -s 100,14,24 --ptr-offset “[(),(0,4),(4,8)]” --ptr-size “[(),(100,200),(200,300)]”
-
PCBパラメータを持つENTRYインターフェースを作成します。PCBパラメータの最大数を指定します。
ofasmif -g entry -n TEST -e TEST -t PCB -m 100
-
JCLパラメータを持つENTRYインターフェースを作成します。
ofasmif -g entry -n TEST -e TEST -t JCL
-
EXITインターフェースを作成します。ポインター・パラメータがない場合の例です。
ofasmif -g exit -n TEST -e TEST -m 10
-
EXITインターフェースを作成します。ポインター・パラメータがある場合の例です。
ofasmif -g exit -n TEST -e TEST -t F -s 100,14,24 --ptr-offset “[(),(0,4),(4,8)]” --ptr-size “[(),(100,200),(200,300)]”
-
LOADインターフェースを作成します。固定パラメータを持つENTRYインターフェースの作成方法と同じです。
ofasmif -g load -n TEST -e TEST -t F -s 1024
-
ENTRYが複数ある場合にインターフェースを作成する例です。
ofasmif -g entry -n TEST -e ENTRY_1 -t F -s 100,200 -e ENTRY_2 -t V -m 10