The following example shows how the Header-to-copy utility translates named declarations in C source code to their equivalent COBOL copyfile form.
C source:
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 output:
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 ensures the correct alignment of the field fid-ino (which is a long, alignment 4) by inserting a two-byte FILLER item after the two-byte fid-len field.
The correct alignment is subject to the -e and -a options as well as the #pragma pack directive.