The following example shows how the Header-to-copy utility translates parameter passing conventions in C source code to their equivalent COBOL copyfile form.
C source:
typedef int (_far _pascal* FARPROC)(); typedef struct tagSEGINFO { UINT offSegment; UINT cbSegment; UINT flags; UINT cbAlloc; HGLOBAL h; UINT alignShift; UINT reserved[2]; } SEGINFO; typedef SEGINFO _far* LPSEGINFO; typedef struct tagPOINT { int x; int y; } POINT; void _far _pascal GetCodeInfo(FARPROC lpProc, SEGINFO _far* <_><_>lpSegInfo); BOOL _far _pascal PtInRect(const RECT _far*, POINT); void _far _pascal ClientToScreen(HWND, POINT _far*);
COBOL output:
01 FARPROC is typedef usage proc-pointer. 01 tagSEGINFO is typedef. 02 offsegment usage uns-int. 02 cbsegment usage uns-int. 02 flags usage uns-int. 02 cballoc usage uns-int. 02 h usage uns-int. 02 alignshift usage uns-int. 02 reserved occurs 2 usage uns-int. 01 SEGINFO is typedef usage tagseginfo. 01 LPSEGINFO is typedef usage data-pointer. 01 tagPOINT is typedef. 02 x usage int. 02 y usage int. 01 POINT is typedef usage tagpoint. end program "c-typedefs". program-id."c-typedefs" is external. special-names. call-convention pascal-convention-val is pascal-conv. $set constant GetCodeInfo "GetCodeInfo" entry GetCodeInfo pascal-conv using by value proc-pointer by reference seginfo . $set constant PtInRect "PtInRect" entry PtInRect pascal-conv using by reference rect by value point returning int . $set constant ClientToScreen "ClientToScreen" entry ClientToScreen pascal-conv using by value uns-int by reference point . end program "c-typedefs".
A parameter of data type POINT is passed both BY VALUE and BY REFERENCE.