インターフェースの作成

本章では、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