SYNOPSIS

h2pas [options] filename

DESCRIPTION

h2pas attempts to convert a C header file to a pascal unit. it can handle most C constructs that one finds in a C header file, and attempts to translate them to their pascal counterparts. see the CONSTRUCTS section for a full description of what the translator can handle.

USAGE

H2pas is a command-line tool that translates a C header file to a spascal unit. It reads the C header file and translates the C declarations to equivalent pascal declarations that can be used to access code written in C.

The output of the h2pas program is written to a file with the same name as the C header file that was used as input, but with the extension .pp. The output file that h2pas creates can be customized in a number of ways by means of many options.

OPTIONS

The output of h2pas can be controlled with the following options:

-d

use external; for all procedure and function declarations.

-D

use external libname name 'func\_name' for function and procedure declarations.

-e

Emit a series of constants instead of an enumeration type for the C enum construct.

-i

create an include file instead of a unit (omits the unit header).

-l libname

specify the library name for external function declarations.

-o outfile

Specify the output file name. Default is the input file name with the extension replaced by .pp "."

-p

use the letter P in front of pointer type parameters instead of "^".

-s

Strip comments from the input file. By default comments are converted to comments, but they may be displaced, since a comment is handled by the scanner.

-t

prepend typedef type names with the letter T (used to follow Borland's convention that all types should be defined with T).

-v

replace pointer parameters by call by reference parameters. Use with care because some calls can expect a NIL pointer.

-w

Header file is a win32 header file (adds support for some special macros).

-x

handle SYS\_TRAP of the PalmOS header files.

CONSTRUCTS

The following C declarations and statements are recognized:

defines

defines are changed into pascal constants if they are simple defines. macros are changed - wherever possible to functions; however the arguments are all integers, so these must be changed manually. Simple expressions in define staments are recognized, as are most arithmetic operators: addition, substraction, multiplication, division, logical operators, comparision operators, shift operators. The C construct ( A ? B : C) is also recognized and translated to a pascal construct with an IF statement (this is buggy, however).

preprocessor statements

the conditional preprocessing commands are recognized and translated into equivalent pascal compiler directives. The special #ifdef \_\_cplusplus is also recognized and removed.

typedef

A typedef statement is changed into a pascal type statement. The following basic types are recognized:

char

changed to char.

float

changed to real (=double in free pascal).

int

changed to longint.

long

changed to longint.

long int

changed to longint.

short

changed to integer.

unsigned

changed to cardinal.

unsigned char

changed to byte.

unsigned int

changed to cardinal.

unsigned long int

changed to cardinal.

unsigned short

changed to word.

void

ignored.

These types are also changed if they appear in the arguments of a function or procedure.

functions and procedures

functions and procedures are translated as well; pointer types may be changed to call by reference arguments (using the var argument) by using the -p command line argument. functions that have a variable number of arguments are changed to a function with an array of const argument.

specifiers

the extern specifier is recognized; however it is ignored. the packed specifier is also recognised and changed with the PACKRECORDS directive. The const specifier is also recognized, but is ignored.

modifiers

If the -w option is specified, then the following modifiers are recognized: STDCALL , CDECL , CALLBACK , PASCAL , WINAPI , APIENTRY , WINGDIAPI as defined in the win32 headers. If additionally the -x option is specified then the SYS\_TRAP specifier is also recognized.

enums

enum constructs are changed into enumeration types; bear in mind that in C enumeration types can have values assigned to them; Free Pascal also allows this to a certain degree. If you know that values are assigned to enums, it is best to use the -e option to change the enus to a series of integer constants.

unions

unions are changed to variant records.

structs

are changed to pascal records, with C packing.

RELATED TO h2pas-2.6.4…

  • ppc386(1) ppumove(1)