Man Linux: Main Page and Category List

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)