
                               FreePascal FAQ
                                      
                      As distributed with FPC 0.99.14
                                      
   This FAQ might not be up to date. See [1]the FPC FAQ on internet for
   updates.
   
   This FAQ is in no way a substitute for the extensive documentation
   that accompanies FPC.
   
    1. [2]What is Free Pascal(FPC) ?
    2. [3]Which versions exist, and which one should I use?
    3. [4]Known bugs
    4. [5]Free Pascal and GNU Pascal - a comparison
    5. [6]Where can I get the compiler ?
    6. [7]What are the considerations in porting
    7. [8]I tried to compile my Delphi code with the Free Pascal
       Compiler,
    8. [9]I have to write a program for homework. Can you help?
    9. [10]How can I build a unit?
   10. [11]Will Free Pascal support TV (Turbo Vision) in the future?
   11. [12]How can I compile the system unit ?
   12. [13]I get an internal error 9999
   13. [14]How does function overloading work?
   14. [15]How can I call C functions ?
   15. [16]When will Free Pascal use DJGPP 2.0 under DOS/Windows ?
   16. [17]How can I use the graph unit with Free Pascal ?
   17. [18]Integrated Assembler syntax
   18. [19]How to access DOS memory / How to do graphics ?
   19. [20]Free Pascal without a math coprocessor
   20. [21]Accessing more than 4 megabytes
   21. [22]Access I/O ports
   22. [23]I'm using the Dos compiler under Windows 95
   23. [24]I'm using OS/2
   24. [25]INSTALL.EXE of Dos version 0.99.10 reports "Load error: no
       DPMI"
   25. [26]INSTALL.EXE of Dos version 0.99.10 does not run in Windows NT
   26. [27]I want a new version NOW
   27. [28]Where can I find a text mode IDE for Dos
   28. [29]How do I configure the Dos IDE
   29. [30]Why are the generated binaries so big?
   30. [31]Unit system, syslinux or syswin32 not found errors
       
   
    1. What is Free Pascal(FPC) ?
       Originally named FPK-Pascal, the Free Pascal compiler is a 32 bit
       Turbo Pascal compatible Pascal compiler for DOS, Linux, Win32,
       OS/2 and (based on an older version) the AmigaOS. More Operating
       systems are in the works.
       The compiler is written in Pascal and is able to compile its own
       sources. The source files are included.
       Free Pascal requires a fast computer to run efficiently (386-25
       Mhz for the Intel version and ideally a 68020 processor for the
       Motorola version). At least 2 megabytes of RAM is required. To
       remake the compiler more than 16 is recommended.
       Short history:
        6/1993 project start
       10/1993 first little programs work
        3/1995 the compiler compiles the own sources
        3/1996 released to the internet
        probably 2000 1.0 version
    2. Which versions exist, and which one should I use?
       Compilers with an even last number are release versions(e.g.
       0.99.8, 0.99.10, 0.99.12 and 0.99.14)
       Compilers and packages with an odd last number are development
       versions (e.g. 0.99.9, 0.99.11, 0.99.13 and 0.99.15).
       0.99.5 is an exception to this rule, since 0.99.5 IS a release (a
       release prior to the introduction of this odd/even system)
       Letters behind the version number (0.99.12b, 0.99.5d) indicate
       release versions with some bugs and problems in the original
       release (respectively 0.99.12 and 0.99.5) fixed.
       Normally you would want to use a release. Releases are considered
       stable, and easier to support. (the bugs, quirks and unintended
       "features" are wellknown after a period of time, and workarounds
       exist).
       Development snapshots which are generated daily reflect the
       current status of the compiler. Development versions probably have
       new features and larger bugs fixed since the last release, but
       might have some temporary stability drawbacks, (btw which are
       usually fixed quite soon)
       Most support for development snapshots are basically the advise to
       upgrading to newer snapshot in which the bugs are hopefully fixed.
       Since version 0.99.8 the stability of the compiler steadily
       increased, and development snapshots are often quite useful for
       certain categories of users. Ask in the maillists if it is worth
       the effort in your case.
       The current release version is 0.99.14 for the OS/2,Linux,Windows
       and Dos (Go32V2) targets,
       and 0.99.5d for the 680x0 based systems (mainly Amiga and Mac)
       The current development snapshot version is 0.99.13 or 0.99.15.
    3. Known bugs
       Go to the [32]bugs page
    4. Free Pascal and GNU Pascal - a comparison
       
        aim:
                Free Pascal tries to implement a Borland compatible
                pascal compiler on as many platforms as possible. GNU
                Pascal tries to implement a portable pascal compiler
                based on POSIX.
                
        Version:
                Currently, Free Pascal is at version 0.99.12 for the
                Intel version, and version 1.0 will be out soon, and
                version 0.99.5d for the Motorola/Intel version. Version
                0.99.5d differs from version 0.99.5 in that all run time
                library fixes have been applied, as well as all known
                code generation bugs. Version 0.99.12 differs from
                version 0.99.5c in that all parser bugfixes have also
                been applied and also a lot of Delphi 2 and Delphi 3
                extensions have been implemented. GNU Pascal is at
                version 2.7.2 (but this numbering is not really an
                indication, it follows the GNU C numbering, since it is a
                derivation of it)
                
        Operating systems:
                Free pascal runs on a limited number of systems : DOS,
                Win32, Linux, OS/2 and AmigaOS and is for the moment
                limited to the Intel and Motorola architectures. GNU
                Pascal runs basically on any system that can run GNU C.
                
        Sources:
                Free Pascal is entirely written in Pascal (about 4 Mb of
                source code), while GNU Pascal is written in C (it's an
                adaptation of the GNU C compiler : 2.8 Mb code + 8 MB of
                GNU C code)
                
        Language:
                Free Pascal supports the Borland Pascal dialect Borland,
                and implements the Delphi Object PAscal language. GNU
                Pascal supports ISO 7185, ISO 10206, (most of) Borland
                Pascal 7.0
                
        Extensions:
                Free Pascal implements function overloading, and operator
                overloading). GNU Pascal implements operator overloading.
                
        License:
                Both compilers come under the GNU GPL.
                
        Author:
                Free Pascal was started by Florian Klaempfl, Germany
                (klaempfl@haegar.cip.mw.tu-muenchen.de), GNU Pascal was
                started by Jukka Virtanen, Finland, (jtv@hut.fi).
                
   
    5. Where can I get the compiler ?
       Free Pascal is available for download from all [33]official
       mirrors
    6. What are the considerations in porting code to other processors?
       Because the compiler now supports processors other than the Intel,
       it is important to take a few precautions so that your code will
       execute correctly on all processors.
          + Limit your use of asm statements unless it is time critical
            code
          + Don't use the packed directive unless you know exactly what
            you are doing. Most processors require alignment of data, and
            using packed on objects,classes and records may break this
            requirement. If this is the case your code will simply crash
            on the target processors.
          + Clean up at the end of your program, i.e close all files on
            exit, as some operating systems don't like it when some files
            are left opened.
          + Try not to rely on the endian of the specific machines when
            doing arithmetic operations. Furthermore, reading and writing
            of binary data to/from files will probably require byte swaps
            across different endian machines (swap is your friend in this
            case)
          + Try limiting your local variables in subroutines to 32K, as
            this is the limit of some processors, use dynamic allocation
            instead.
          + Try limiting the size of parameters passed to subroutines to
            32K, as this is the limit of some processors, use const or
            var parameters instead.
   
    7. I tried to compile my Delphi code with the Free Pascal Compiler,
       it seems that it doesn't recognize the OOP.
       The compiler supports the Delphi OOP. There may be some bugs, of
       course, You should try the -S2, -Sd or -So switches (see the
       manuals for the meaning of these switches)
    8. I have to write a program for homework. Can you help?
       No. Please, don't send us mail about homework, we are no teachers.
       The Free Pascal development team tries to give good support for
       the Free Pascal compiler and are trying to always reply to emails.
       If we get emails like this, this becomes harder and harder.
    9. How can I build a unit?
       It works like in Turbo Pascal. The first keyword in the file must
       be UNIT (not case sensitive). The compiler will generate two
       files: XXX.PPU and XXX.O. The PPU file contains the interface
       information for the compiler and the O-file the machine code (an
       object file, whose precise structure depends on the assembler you
       used). To use this unit in another unit or program, you must
       include its name in the USES clause of your program.
   10. Will Free Pascal support TV (Turbo Vision) in the future?
       A Turbo Vision port, called Free Vision, has progressed nicely
       lately. It's already very usable, we are even writing an IDE in
       it. Due to copyrights problem the FreeVision source code is not
       available at the moment. You can download the IDE from the
       [34]development page. and get an idea of the look and feel though.
   11. How can I compile the system unit ?
       To recompile the system unit, it is recommended to have GNU make
       installed. typing 'make' in the rtl source directory will then
       recompile all RTL units including the system unit. You may choose
       to descend into the directory of your OS (e.g. rtl/go32v2) and do
       a 'make' there.
       It is possible to do all this manually, but you need more detailed
       knowledge of the RTL tree structure for that.
   12. I get an internal error 9999
       The latest versions of the Free Pascal Compiler come with a Error
       Handling routine which catches the segmentation fault, and lets
       the compiler exit gracefully. This is reported as an internal
       error 9999.
       Please try to reproduce the error and send [35]us a bug report.
       (For the curious, IE 9999 is not a specific bug. It is a safety
       measure which terminates if during compiling a certain condition
       is not met, which can be caused by several bugs. So if you report
       the bug, and get IE 9999 later in a different piece or part of
       sourcecode, it could be a completely different bug)
   13. How does function overloading work?
       function overloading is implemented, like in C++:
  procedure a(i : integer);

   begin
   end;

  procedure a(s : string);

   begin
   end;

  begin

   a('asdfdasf");
   a(1234);
  end.
       You must be careful. If one of your overloaded functions is in the
       interface part of your unit, then all overloaded functions must be
       in the interface part. If you leave one out, the compiler will
       complain with a 'This overloaded function can't be local' message.
       Overloaded functions must differ in their parameters, it's not
       enough if their return types are different.
   14. How can I call C functions ?
       C calling convention is implemented as follows: The compiler
       pushes the parameters from right to left, but the procedure has to
       clear the stack. For calling the C function strcmp declare the
       following:
  function strcmp(s1 : pchar;s2 : pchar) : integer;cdecl;external;
  Since 0.99.5, the older [C]; won't work!
   
   15. When will Free Pascal use DJGPP 2.0 under DOS/Windows ?
       As of version 0.99.0 Free Pascal uses DJGPP 2.0. DJGPP v1.2
       support has been removed since version FPC 0.99.8.
   16. How can I use the graph unit with Free Pascal ?
       Look at InitGraph.
   17. Integrated Assembler syntax
       The default assembler syntax (AT&T style) is different from the
       one in Borland Pascal (Intel style).
       However, as of version 0.99.0, the compiler supports Intel style
       assembly syntax. See the documentation for more info on how to use
       different assembler styles.
       A description of the AT&T syntax can be found in the DJGPP FAQ
       [36]http://www.delorie.com/djgpp/v2faq/faq102.html#Syntax or in
       Brennan's Guide to Inline Assembly
       [37]http://www.rt66.com/~brennan/djgpp/djgpp_asm.html. The
       documentation also contains a chapter where the difference between
       the Intel and AT&T style assembly is explained.
       Or you can use the convertor program at
       http://rcs.urz.tu-dresden.de/ schoenfu/zip/asmtrans.zip.
   18. How to access DOS memory / How to do graphics ?
       You can do like in TP, via absolute or mem, for larger blocks use
       the dosmemput/dosmemget routines in unit Go32
   19. Free Pascal without a math coprocessor
       On the Intel version the emulator is automatically loaded by the
       compiler, the file is bin\emu387.
  SET GO32=EMU C:\PP\BIN\EMU387
   
   20. Accessing more than 4 megabytes
       By default Free Pascal allocates only 4 meg. If it just allocated
       all it could get, people running windows would have problems as
       Windows would increase the swap file size to give the program more
       memory on and on, until the swap file drive would be full.
       You can specify the size of the heap with -Chxxxx. The default
       value is -Ch4000000. Try -Ch10000000, provided you got enough swap
       space.
       However, the heap size doesn't really matter anymore, since the
       Heap is able to grow. That is, if you've used all available heap
       space, the program will try to get more memory from the OS, thus
       the heap is limited to the maximum amount of free memory provided
       by the OS.
   21. Access I/O ports
       If you're under DOS, you should use the outport* and inport*
       procedures of the go32 unit.
       Since version 0.99.8, the Port array is supported like in TP, as
       long as you use the ports unit in your program.
   22. I'm using the Dos compiler under Windows 95
       There is a problem with the Dos compiler and Win 95 on computers
       with less than 16 MB. First set in the properties of the DOS box
       the DPMI memory size to max value. Now try to start a demo program
       in the DOS box, e.g. HELLO (starting takes some time). If this
       works you will be able to get the compiler to work by recompiling
       it with a smaller heap size, perhaps 2 or 4 MB (option -Chxxxx).
   23. I'm using OS/2
       Problems have been reported that the Go32v2 compiler does not run
       on some OS/2 installations. You can use the native OS/2 compiler,
       or compile a GO32V1 compiler yourself.
   24. INSTALL.EXE of Dos version 0.99.10 reports "Load error: no DPMI"
       The file cwsdpmi.exe is missing in the main directory of the zip
       archive. The above message pops up of no other DPMI services are
       available. Such services are for example available in a Dos window
       of Windows. You can either extract that file from basego32.zip or
       download it from
       [38]http://www.brain.uni-freiburg.de/~klaus/cwsdpmi.exe. Put it
       into the same directory as install.exe and run install again.
   25. INSTALL.EXE of Dos version 0.99.10 does not run in Windows NT
       This is an incompatibility of the mouse driver. Use this new
       version of install.exe instead:
       [39]ftp://ftp.freepascal.org/pub/fpc/snapshot/install.exe
   26. I want a new version NOW
       In the time between the release of new official versions, you can
       have a look at and test developer versions. Be warned though: this
       is work under progress, so in addition to old bugs fixed and new
       features added, this may also contain new bugs. The snapshot is
       generated automatically each night from the current source at that
       moment. Somethimes this may fail due to bigger changes not yet
       fully implemented. If your version doesn't work, try again one or
       two days later. Don't download the Go32V1 version for Dos, it's
       not supported any more.
       The latest snapshot can be downloaded from the [40]development web
       page.
       To install a snapshot, extract the zip archive into the existing
       program directory of the last official version of fee pascal
       (after making a backup of the original of course). Or extract it
       into an empty directory, then move the files to the program
       directory, overwriting existing files. Make sure that you extract
       the ZIP archiv such that the included directory structure remains
       intact, for example if you use PKUNZIP, use "pkuzip -d" instead of
       just "pkunzip".
   27. Where can I find a text mode IDE for Dos
       The development of the IDE (integrated development environment) is
       not yet finished. However a working test version of the IDE is
       available as snapshot. It requires the latest compiler snapshot be
       installed on top of the last official Dos version 0.99.12 for
       Go32V2. So if you have not already done it, first install the last
       official version (file dos09912.zip or dos09912full.zip, you find
       these in the [41]download section). Then get and extract the
       latest Dos snapshot for DOS-GO32V2 (snapshot.zip) into the
       directory containing the last official version. Then do the same
       with one of the IDE snapshots (the debugger does not work very
       well yet, so start with the version "IDE with compiler"). For more
       details on where to find and how to install a snapshot, please see
       the previous FAQ item. For additional instructions for required
       IDE configuration please also read the next FAQ item.
   28. How do I configure the Dos IDE
       Once you have installed the IDE (see the previous FAQ item), it
       requires two configuration changes before it can compile. This is
       due to the fact that the IDE includes its own compiler, it does
       not use ppc386.exe and thus it also does not use the configuration
       in the file ppc386.cfg. Thus if you try to compile, you get an
       error message telling that it can not compile the system unit. To
       fix this start fp.exe, select from the menu Compile, then Target
       then Go32V2. Next select the menu Options/Directories and in the
       line "Unit directories" enter the path to your copy of the rtl
       directory, usually c:\pp\units\go32v2\rtl. If you have done
       everything correct and it still doesn't work, you may have grabbed
       a snapshot that has a bug, in this case try again one or two days
       later.
   29. Why are the generated binaries so big?
       There are several reasons and remedies for this.
       
    1. If you are using 0.99.12: Due to some problems with the binary
       writer, the 0.99.12 and fixes weren't released with smartlinking
       RTLs. Smartlinking causes only actually used procedures, functions
       and constants to be linked in.
       You can remedy this by using a development version and creating a
       smartlinking RTL. See the [42]make cycle faq or use a later
       release if available.
    2. Generating debug code (-g options) is enabled. Use the strip
       utility (or stripw for the windows platform) to remove the
       debuginformation.
       The utility is supplied with the releases, except under Linux were
       it is part of the GNU binutils package.
    3. Under Dos(Go32V2) and windows targets you can use UPX to pack the
       .EXEs (just like e.g. pklite). The architecture of linux doesn't
       allow binary packing.
    4. Turning on optimalisations, both for supplied packages
       (RTL,API,FV,FCL) as for your own code, will also decrease
       code-size.
       
     Unit system, syslinux or syswin32 not found errors
   
   System (syslinux, syswin32 depending on platform) is Pascal's base
   unit which is invisibly used in all programs. This unit defines
   several standard procedures and structures, and must be found to be
   able to compile any pascal program by FPC.
   
   The location of the system.ppu and syslinux.o files are determined by
   the -Fu switch which can be specified commandline, but is usually in
   the ppc386.cfg (Win32: ppc386w.cfg) configuration file.
   If the compiler can't find this unit there are three possible causes:
    1. The ppc386.cfg isn't in the same path as the compiler (go32v2 and
       win32), or in /etc/ppc386.cfg or as .ppc386.cfg in your
       homedirectory (Linux).
    2. The ppc386.cfg doesn't contain the -Fu line, or a wrong one. See
       the [43]make cycle faq specially the chapters about the ppc386.cfg
       and the directory structure.
    3. The files ARE found but the wrong version or platform. Correct
       ppc386.cfg to point to the right versions, or reinstall the right
       versions.
       
   A handy trick can be executing "ppc386 programname -vt", this shows
   where the compiler is currently looking for the system unit's files.
   You might want to pipe this through more(dos,windows) or less(Linux),
   since it can generate more than one screen information:
Dos,Windows:


ppc386 programname -vt |more



Linux:


ppc386 programname -vt |less

References

   1. http://www.freepascal.org/faq.html
   2. file://localhost/home/pfv/cvs/install/doc/faq.html#WhatIsFP
   3. file://localhost/home/pfv/cvs/install/doc/faq.html#versions
   4. file://localhost/home/pfv/cvs/install/doc/faq.html#KnownBugs
   5. file://localhost/home/pfv/cvs/install/doc/faq.html#FPandGNUPascal
   6. file://localhost/home/pfv/cvs/install/doc/faq.html#WhereToGetFP
   7. file://localhost/home/pfv/cvs/install/doc/faq.html#PortabilityTips
   8. file://localhost/home/pfv/cvs/install/doc/faq.html#OOP
   9. file://localhost/home/pfv/cvs/install/doc/faq.html#HOMEWORK
  10. file://localhost/home/pfv/cvs/install/doc/faq.html#HowcanIbuildaunit
  11. file://localhost/home/pfv/cvs/install/doc/faq.html#TurboVision
  12. file://localhost/home/pfv/cvs/install/doc/faq.html#CompileSystemUnit
  13. file://localhost/home/pfv/cvs/install/doc/faq.html#Internalerror9999
  14. file://localhost/home/pfv/cvs/install/doc/faq.html#Howdoesfunctionoverloadingwork
  15. file://localhost/home/pfv/cvs/install/doc/faq.html#HowToCallCFuncuntions
  16. file://localhost/home/pfv/cvs/install/doc/faq.html#DJGPP2support
  17. file://localhost/home/pfv/cvs/install/doc/faq.html#HowToUseGraph
  18. file://localhost/home/pfv/cvs/install/doc/faq.html#IntegratedAssemblerSyntax
  19. file://localhost/home/pfv/cvs/install/doc/faq.html#HowToAccessDosMemory
  20. file://localhost/home/pfv/cvs/install/doc/faq.html#FPwithoutfpu
  21. file://localhost/home/pfv/cvs/install/doc/faq.html#AccessingMoreThan4MB
  22. file://localhost/home/pfv/cvs/install/doc/faq.html#accessioports
  23. file://localhost/home/pfv/cvs/install/doc/faq.html#ImusingWin95
  24. file://localhost/home/pfv/cvs/install/doc/faq.html#ImusingOS2
  25. file://localhost/home/pfv/cvs/install/doc/faq.html#dpmi
  26. file://localhost/home/pfv/cvs/install/doc/faq.html#winnt
  27. file://localhost/home/pfv/cvs/install/doc/faq.html#snapshot
  28. file://localhost/home/pfv/cvs/install/doc/faq.html#ideinst
  29. file://localhost/home/pfv/cvs/install/doc/faq.html#ideconfig
  30. file://localhost/home/pfv/cvs/install/doc/faq.html#binariesbig
  31. file://localhost/home/pfv/cvs/install/doc/faq.html#systemnotfound
  32. http://www.freepascal.org/bugs.html
  33. http://www.freepascal.org/download.html
  34. http://www.freepascal.org/develop.html#snapshot
  35. http://www.freepascal.org/moreinfo.html
  36. http://www.delorie.com/djgpp/v2faq/faq102.html#Syntax
  37. http://www.rt66.com/~brennan/djgpp/djgpp_asm.html
  38. http://www.brain.uni-freiburg.de/~klaus/cwsdpmi.exe
  39. ftp://ftp.freepascal.org/pub/fpc/snapshot/install.exe
  40. http://www.freepascal.org/develop.html#snapshot
  41. http://www.freepascal.org/download.html
  42. http://www.freepascal.org/makecyc.html
  43. http://www.freepascal.org/makecyc.html
