H2PAS - Free Pascal C header to pascal unit translator.

What follows below is the man page of h2pas. If you have installed the man pages then you can view them with the man command.

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

       h2pas - The C header to pascal unit conversion program.

       h2pas [options] filename

       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.

       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 decla-
       rations 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.

       The output of h2pas can be controlled with  the  following

       -d     use external; for all procedure and function decla-

       -D     use external libname name 'func_name' for  function
              and procedure declarations.

       -e     Emit  a  series of constants instead of an enumera-
              tion 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 dec-

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

FreePascal                 12 Dec 1999                          1

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

       -p     use  the  letter P in front of pointer type parame-
              ters instead of "^".

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

       -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.

       The following C declarations  and  statements  are  recog-

              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 recog-
              nized, 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  state-
              ment (this is buggy, however).

       preprocessor statements
              the  conditional  preprocessing commands are recog-
              nized and translated into  equivalent  pascal  com-
              piler directives. The special #ifdef __cplusplus is
              also recognized and removed.

              A typedef statement is changed into a  pascal  type
              statement.  The  following  basic  types are recog-

FreePascal                 12 Dec 1999                          2

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

              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.

                     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  argu-
       ments 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  vari-
              able  number of arguments are changed to a function
              with an array of const argument.

              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.

              If the -w option is specified, then  the  following
              modifiers  are  recognized: STDCALL , CDECL , CALL-
              defined  in the win32 headers.  If additionally the
              -x option is specified then the SYS_TRAP  specifier
              is also recognized.

FreePascal                 12 Dec 1999                          3

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

       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

       unions unions are changed to variant records.

              are changed to pascal records, with C packing.

              ppc386(1) ppumove(1)

FreePascal                 12 Dec 1999                          4