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  statements  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 a cvar modifier. (This used to be the 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 enumerations to a series of integer constants.
     
 - 
unions 
 - Unions are changed to variant records.
     
 - 
structs 
 - Structs are changed to Pascal records, with C packing.