Difference between revisions of "Specifics"

From Freepascal Amiga wiki
Jump to navigation Jump to search
(Added new 'subsection' programming rules, added links to "Amiga User Interface Style Guide" and added table entry "embedded version IDs")
(started list of changed constants and unit names)
Line 1: Line 1:
 
== Specialities of AROS Freepascal ==
 
== Specialities of AROS Freepascal ==
  
in Relation to other Freepascal implementations.
+
=== in Relation to other Freepascal implementations ===
 
----
 
----
The compiler:
+
The '''compiler''' has additional features:
  
has additional features:
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 15: Line 14:
  
  
System unit:
+
'''System''' unit has some additional functions and variables:
 
 
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.
 
Be warned if you change any of the variables then your program will crash and most likely your computer as well.
Line 49: Line 46:
  
  
in Relation on how to follow certain Amiga programming rules.
+
=== 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.
 
Not really compiler related, but more about how ones program should behave, look and act on an amiganoid system.
Line 61: Line 58:
 
To put it simply, add a const string in generic version format:
 
To put it simply, add a const string in generic version format:
 
  $VER: <name> <version>.<revision> (<d>.<m>.<y>)  
 
  $VER: <name> <version>.<revision> (<d>.<m>.<y>)  
 +
|}
 +
----
 +
==== Changed Unit Names ====
 +
{| class="wikitable"
 +
|+
 +
!Library name in AROS !! corresponding Freepascal Unit !! Collision with
 +
|-
 +
|graphics.libray || agraphics || Graphics unit from LCL
 +
|-
 +
|dos.library || amigados || Dos unit from RTL
 +
|}
 +
 +
==== Changed constants/function Names ====
 +
{| class="wikitable"
 +
|+
 +
!type !! Original Name !! FreePascal Name !! Collision with
 +
|-
 +
| colspan=4 | '''Exec.Library (exec) '''
 +
|-
 +
|procedure || FreeMem || ExecFreeMem || FreeMem() in System
 +
|-
 +
|procedure || Insert || ExecInsert || Insert() in System
 +
|-
 +
|procedure || Exception || ExecException || Exception keyword
 +
|-
 +
| colspan=4 | '''Graphics.Library (agraphics)'''
 +
|-
 +
|procedure || Move || GfxMove || Move() in System
 +
|-
 +
|procedure || Move || GfxText || Text type
 +
|-
 +
| colspan=4 | '''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 ||
 
|}
 
|}

Revision as of 14:33, 22 September 2014

Specialities of AROS Freepascal

in Relation to other Freepascal implementations


The compiler has additional features:

Definition AROS There are several compiler defines (table G.4) available for Freepascal. The AROS version of FPC adds the definition AROS to that list. 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. This would also aid in porting platform specific sources and/or writing FreePascal programs that could be compiled using the old FPC 1.10 compiler for classic amiga's, MorphOS and/or AmigaOS 4. More on multiplatform programming can be found here.


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.

Debug(Msg: string); DebugLn(Msg: string); Write a message to debug out put of AROS, 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. DebugLn() adds a return after the message, Debug() does not.
function GetLibAdress(Base: Pointer; Offset: LongInt): Pointer; Function to calculate the function pointer from the library base and the offset. Needed to call AROS library functions. For an example see Call Library
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)
AOS_ThreadBase: Pointer; Real type is: PLibrary can be used to call all thread.library calls WARNING: can be nil if the Thread.library does not exist.


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 Freepascal Unit Collision with
graphics.libray agraphics Graphics unit from LCL
dos.library amigados Dos unit from RTL

Changed constants/function Names

type Original Name FreePascal Name Collision with
Exec.Library (exec)
procedure FreeMem ExecFreeMem FreeMem() in System
procedure Insert ExecInsert Insert() in System
procedure Exception ExecException Exception keyword
Graphics.Library (agraphics)
procedure Move GfxMove Move() in System
procedure Move 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