NAME¶
h2pas - The C header to pascal unit conversion program.
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.
-
SEE ALSO¶
- ppc386(1) ppumove(1)