Specifics
Specific implementations/changes for Free Pascal on Amiga systems
in Relation to other Free Pascal implementations
Compiler defines
There are several compiler defines (table G.4) available for Free Pascal. More on multiplatform programming can be found here.
Definition HASAMIGA | With this definition you can can determine if you are on any of the Amiga platforms (also future proof for future Amiga platforms). Use it to encapsulate code parts (or uses) for all Amiga-style systems {$ifdef HASAMIGA} {$endif} or disable parts which does not work on all Amiga-style systems via {$ifndef HASAMIGA} {$endif} |
---|---|
Definition AMIGA | This definition exists in FreePascal for Amiga m68k and Amiga PowerPC (OS4) only. Do separate Amiga m68k and OS4 you can use the processor defines M68K and POWERPC or the specialized defines AMIGA68k and AMIGAOS4. |
Definition MORPHOS | This definition exists in FreePascal for MorphOS. |
Definition AROS | This definition exists in FreePascal for AROS. This enables you to determine if your program is compiled/targeted for AROS or not. You can use {$IFDEF AROS} or {$IFNDEF AROS} to make use of this define.
NOTE: There is no dedicated AROS m68k Version, the released Version is the Amiga m68k version because AROS m68k is binary compatible to Amiga classic. |
Additional System unit contents
System unit has some additional functions and variables:
Be warned if you change any of the variables then your program will crash and most likely your computer as well.
SysDebug(Msg: ShortString); SysDebugLn(Msg: ShortString); | Write a message to debug output of the system. The way to get this vrey different in every
in hosted mode you can find this output in the shell you started AROS from. if you want to read the messages in AROS (or you have a native installation) you can use Sashimi to catch the output. SysDebugLn() adds a return after the message, SysDebug() does not. Take |
---|---|
AOS_WbMsg: Pointer; | Real Type is PWBStartup (from "Workbench" unit) can be used to determine if the program was started from WB (if this pointer is Nil then it was started from CLI) |
AOS_ExecBase: Pointer; | Real type is: PExecBase (from "Exec" Unit) can be used to call all exec.library calls, or to inspect system basic features |
AOS_DOSBase: Pointer; | Real type is: PDOSBase (from "AmigaDos" Unit) can be used to call all dos.library calls |
AOS_UtilityBase: Pointer; | Real type is: PUtilityBase (from "Utility" Unit) can be used to call all utility.library calls |
AOS_heapPool: Pointer; | Its a Pool Header created with (CreatePool from exec), all memory allocations are created in this pool, could be used to AllocPooled memory as well (even AllocMem, New and so on do it automatically) |
Threading
athreads | This unit is needed if the program wants to use threads. It must be added as very first uses in the main source file. it is compareable to the cthreads units of freepascal for linux. |
---|
Relation to other languages on AROS/Amiga
Not really compiler related, but more about how ones program should behave, look and act on an amiganoid system.
There is a document called "Amiga User Interface Style Guide" [1] that cover some of the basic techniques that should be practised when programming for amiganoid systems. Ofcourse, it would be impossible to follow them all (if even for the GUI differences) but there are a couple of interesting topics in there:
Embedded version IDs: [2] | Gives the programmer the ability to let the system 'interrogate' your program (executable) and displays version information (from either commandline tool version or by using the icon information menu from the workbench). To put it simply, add a const string in generic version format: $VER: <name> <version>.<revision> (<d>.<m>.<y>) |
---|
Changed Unit Names
Library name in AROS | corresponding Free Pascal Unit | Collision with |
---|---|---|
graphics.libray | agraphics | Graphics unit from LCL |
dos.library | amigados | Dos unit from RTL |
Changed constants/function Names
type | Original Name | Free Pascal Name | Collision with |
---|---|---|---|
Exec.Library (exec) | |||
procedure | FreeMem | ExecFreeMem | FreeMem() in System |
procedure | Insert | ExecInsert | Insert() in System |
procedure | Exception | ExecException | Exception keyword |
dos.Library (amigados) | |||
procedure | Close | DOSClose | Collides with Close() function in unit System |
procedure | Delay | DOSDelay | Collides with Delay() function in unit CRT |
procedure | Exit | DOSExit | Collides with Exit() function in unit System |
procedure | Flush | DOSFlush | Collides with Flush() function in unit System |
variable | Input | DOSInput | Collides with Input() variable in unit System |
procedure | Open | DOSOpen | For consistency with other dos functions |
variable | Output | DOSOutput | Collides with Output() variable in unit System |
procedure | Read | DOSRead | Collides with Read() function in unit System |
procedure | Rename | DOSRename | Collides with Rename() function in unit System |
procedure | Seek | DOSSeek | Collides with Seek() function in unit System |
procedure | Write | DOSWrite | Collides with Write() function in unit System |
Graphics.Library (agraphics) | |||
procedure | Move | GfxMove | Move() in System |
procedure | Text | GfxText | Text type |
Intuition.Library (intuition) | |||
const | SINGLE | SINGLE_PT | Single type |
const | FANFOLD | FANFOLD_PT | (renamed because of Single renaming) |
const | WBENCHSCREEN | WBENCHSCREEN_f | |
const | PUBLICSCREEN | PUBLICSCREEN_f | |
const | CUSTOMSCREEN | CUSTOMSCREEN_f | |
const | SCREENTYPE | SCREENTYPE_f | |
const | SHOWTITLE | SHOTITLE_f | |
const | BEEPING | BEEPING_f | |
const | CUSTOMBITMAP | CUSTOMBITMAP_f | |
const | SCREENBEHIND | SCREENBEHIND_f |