h2pas1
The c header to pascal unit conversion program.
Usage
h2pas [options]
filename
Overview
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
externallibnamename'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).
-llibname-
specify the library name for external function declarations.
-ooutfile-
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, subtraction, multiplication, division, logical operators, comparison 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
varargument) by using the-pcommand 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
-woption is specified, then the following modifiers are recognized: STDCALL , CDECL , CALLBACK , PASCAL , WINAPI , APIENTRY , WINGDIAPI as defined in the win32 headers. If additionally the-xoption 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
-eoption 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.
Releases
5 releases since Debian 2.2 (Potato); the text changed 2 times.
-D since Debian 3.0 (Woody);
-d since Debian 3.0 (Woody);
-e since Debian 3.0 (Woody);
-i since Debian 3.0 (Woody);
-p since Debian 3.0 (Woody);
-s since Debian 3.0 (Woody);
-t since Debian 3.0 (Woody);
-v since Debian 3.0 (Woody);
-w since Debian 3.0 (Woody);
-x since Debian 3.0 (Woody).