h2pas

h2pas(1)            Free Pascal C header conversion utility           h2pas(1)



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, 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 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)



Free Pascal                       12 Dec 1999                         h2pas(1)