例 1 - C および COBOL でのパラメーターの受け渡し

Header-to-copy ユーティリティが C ソース コード内のパラメーター受け渡し規約を等価な COBOL COPY ファイル形式に翻訳する例を次に示します。

C のソース

typedef unsigned char BYTE;
typedef char _far* LPSTR;
typedef int HFILE;
typedef Boolean (*XtFilePredicate)( /* String filename */ );
BYTE _far _pascal GetTempDrive(char);
long _far _pascal _llseek(HFILE, long, int);
long _far _pascal _hwrite(HFILE, const void _huge*, long);
LPSTR _far _pascal AnsiLower(LPSTR);
void _far _pascal Throw(const int _far*, int);
extern_pascal String XtFindFile( 
   CONST String    /* path */,
   Substitution    /* substitutions */,
   Cardinal    /* num_substitutions */,
   XtFilePredicate  /* predicate */
);

生成される COBOL コード

 01  BYTE             is typedef usage uns-char.
 01  LPSTR            is typedef usage data-pointer.
 01  HFILE            is typedef  usage int.
 01  XtFilePredicate  is typedef usage proc-pointer.
 end program "c-typedefs".
 program-id."c-typedefs" is external.
 special-names.
     call-convention pascal-convention-val is pascal-conv.
$set constant GetTempDrive "GetTempDrive"
 entry GetTempDrive pascal-conv using 
  by value     char
  returning    uns-char
     .
$set constant 1-llseek "_llseek"
 entry 1-llseek pascal-conv using
  by value     int
  by value     long
  by value     int
  returning    long
     .
$set constant 1-hwrite "_hwrite"
 entry 1-hwrite pascal-conv using
  by value     int
  by value     data-pointer
  by value     long
  returning    long
     .
$set constant AnsiLower "AnsiLower"
 entry AnsiLower pascal-conv using
  by reference any
  returning    data-pointer
.
$set constant Throw "Throw"
 entry Throw pascal-conv using
  by reference int
  by value     int
.
 end program "c-typedefs".
 program-id."c-typedefs" is external.
 special-names.
     call-convention default-convention-val is default-conv.
 end program "c-typedefs".
 program-id."c-typedefs" is external.
 special-names.
     call-convention default-convention-val is default-conv.
$set constant XtFindFile "XtFindFile"
 entry XtFindFile default-conv using
  by reference any
  by value     data-pointer
  by value     uns-int
  by value     proc-pointer
  returning    data-pointer.
     .
 end program "c-typedefs".

_hwrite ルーチンの void 型ポインターは、値で渡されるデータ ポインターを生成しますが、AnsiLower ルーチンの文字型ポインター、LPSTR は、あらゆるパラメーターを指定できる BY REFERENCE 句を生成します。通常は、COBOL のあらゆる英字項目が渡される可能性があり、文字型では制約が大きすぎるため、any が生成されます。

Throw ルーチンには、整数型項目が BY VALUE と BY REFERENCE の両方で渡されます。また、XtFindFile ルーチンには、手続きポインターが BY VALUE で渡されます。