例 - 名前付き宣言の翻訳

Header-to-copy ユーティリティが C ソース コード内の名前付き宣言を等価な COBOL COPY ファイル形式に翻訳する例を次に示します。

C のソース

typedef struct fsid { long val[2]; } fsid_t;
typedef unsigned long ino_t;  /* inode number (filesystem) */
typedef unsigned int  uint_t;
#define FHSIZE        32
#define MAXFIDSZ     (FHSIZE - sizeof(fsid_t) - sizeof(uint_t))
struct fileid {  /* this is for servers only! */
       uint_t  fid_len;
       ino_tfid_ino;
       uint_t  fid_gen;
       char fid_x[MAXFIDSZ - (sizeof(ino_t) + 2) - sizeof(uint_t)];  
};

生成される COBOL コード

 01  fsid           is typedef.
     02  val occurs 2     usage long.
 01  fsid-t         is typedef usage fsid.
 01  ino-t          is typedef usage uns-long.
 01  uint-t         is typedef usage uns-int.
 78  FHSIZE         value 32.
 78  MAXFIDSZ       value 28.
 01  fileid         is typedef.
     02  fid-len          usage uns-int.
     02  filler       pic x(2).
     02  fid-ino          usage uns-long.
     02  fid-gen          usage uns-int.
     02  fid-x        pic x(14).

H2cpy は、長整数型の fid-ino 項目が 4 バイトで正しく整列されるように、2 バイトの fid-len 項目の後に 2 バイトの FILLER 項目を挿入します。

整列すべきバイト数は、-e オプションや -a オプション、および #pragma pack 指令の指定によって左右されます。