123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- 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
- ([email protected]), GNU Pascal was
- started by Jukka Virtanen, Finland, ([email protected]).
-
-
- 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. You can use LXLITE for packing EMX binaries, but you won't be able
- to run them under DOS any more then. It might even not be possible
- to use them on lower OS/2 versions (like 2.x) depending on chosen
- type of compression.
- 5. 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
|