http://fpcamigawiki.alb42.de/api.php?action=feedcontributions&user=Alb42&feedformat=atomFreepascal Amiga wiki - User contributions [en]2024-03-29T02:05:34ZUser contributionsMediaWiki 1.35.1http://fpcamigawiki.alb42.de/index.php?title=Embedded_Images&diff=1193Embedded Images2023-01-07T21:24:20Z<p>Alb42: /* Data as object file */ Image for link name</p>
<hr />
<div>== Introduction ==<br />
<br />
This page describes how to use embedded bitmap images and palettes in Amiga Free Pascal.<br />
<br />
== Preparation ==<br />
<br />
We start with a PNG file created by Gimp for example and transferred to Amiga (I used Gimp already to scale the colors down to 256 colors). With [http://ppaint.com PPaint] the final color depth and palette ordering is done, the image can be also resized but cutting is also possible in the converter program. For the final conversation [https://aminet.net/package/gfx/conv/PicCon250 PicCon 2.5demo] is used.<br />
<br />
== Image to Program ==<br />
<br />
=== Prepare Image ===<br />
<br />
First you need to load the iff image created by PPaint to PicCon "Project/Open Picture" it will be shown on the screen.<br />
If the image contains a lot of empty background area you might want to cut it. You can directly select the area on the screen or use the "Edit/Autocrop" function.<br />
<br />
[[File:Piccon-autocrop.png]]<br />
<br />
You will get a black border around the area that will be exported.<br />
There are three ways to bring your image to you program (and finally to the screen) the first two options will embed the data to the executable (therefore you can just send a single file) and the last option will load the data from external files (which makes a smaller executable and makes it possible for smaller footprint because you can load the data later on demand)<br />
<br />
=== Prepare Settings ===<br />
<br />
We need to set the format for the data to be exported, usually we want to have plain bitplanes (which is the default, be better check)<br />
"Settings/Imageformat"<br />
<br />
[[File:Piccon-dataformat.png]]<br />
<br />
We also need to set the palette format in "Settings/Paletteformat"<br />
<br />
[[File:Piccon-palformat.png]]<br />
<br />
If we use OS 3+ it is best to use the LoadRGB32 format (Free Pascal default).<br />
OS 1.x does not know the LoadRGB32 functions, therefore one can use the LoadRGB4 format if the target is OS 1.x. But if you use the latest Free Pascal compiler for OS 1.x you can use LoadRGB32 for here as well (there is a wrapper for that in the pascal amiga units)<br />
<br />
=== Save Format ===<br />
As Last you need to define which format you want to save, ultimately define which way you want to bring the data to your program (the aforementioned three options) "Project/Save Data as..."<br />
<br />
[[File:Piccon-saveformat.png]]<br />
<br />
==== Data as Include ====<br />
<br />
PicCon can directly create Pascal code which can be used as includes with only tiny changes (or you can copy paste the code to your program for single source file programs)<br />
Select "Pascal src" as saveformat.<br />
Choose "Project/Save Image" to save the image data as a pascal include file (for example MyImage.inc).<br />
Choose "Project/Save palette" to save the palette data as an include file (for example MyPalette.inc).<br />
Both files are text files, therefore you can open them with any text editor, 2 things you should notice.<br />
<br />
First both constants created are named 'mydata' which is bad if you want to include them into the same file, so maybe rename one (or both) of these constants. For this Tutorial we assume the names where changed to MyImage and MyPalette (same as the files).<br />
<br />
Second at the end of the binary array you will notice an additional comma ',' after the last entry, which Free Pascal does not like there, you will have to remove it (I don't know, but it seems other Pascal compilers can work with that).<br />
<br />
Now you can include these two files to your code:<br />
<br />
<syntaxhighlight lang="Pascal"><br />
{$include MyImage.inc}<br />
{$include MyPalette.inc}<br />
</syntaxhighlight><br />
<br />
after the screen is open one can set the palette<br />
<syntaxhighlight lang="Pascal"><br />
uses<br />
AGraphics;<br />
<br />
{$include MyPalette.inc}<br />
<br />
procedure SetPalette(Screen: PScreen);<br />
begin<br />
LoadRGB32(@Screen^.ViewPort, @MyPalette[0]);<br />
end;<br />
</syntaxhighlight><br />
<br />
<br />
When you want to draw the actual image to that screen you need a TImage structure to use the binary in the include for that you need the size (width and height) and number of bitplanes of the saved image, all 3 values are shown when the image is successfully saved.<br />
<br />
[[File:Piccon-saved1.png]]<br />
<br />
for this example it is 272 width, 75 height and 3 bitplanes = depth.<br />
<br />
To draw this Bitmap you need to set the TImage structure and draw to rastport like that:<br />
<br />
<syntaxhighlight lang="Pascal"><br />
uses<br />
AGraphics;<br />
<br />
{$include MyImage.inc}<br />
<br />
// raw the image to rast port<br />
procedure DrawImage(RP: PRastPort);<br />
var<br />
MyImage: TImage;<br />
begin<br />
MyImage.LeftEdge := 0;<br />
MyImage.TopEdge := 0;<br />
// this 3 values are shown on finishing<br />
MyImage.Width := 272; // width of image<br />
MyImage.Height := 75; // Height of image<br />
MyImage.Depth := 3; // number of bitplanes<br />
//<br />
MyImage.ImageData := @myData[0]; // pointer to the actual image data<br />
//<br />
MyImage.PlanePick := (1 shl MyImage.Depth) - 1;<br />
MyImage.PlaneOnOff := 0; // to no skip any Planes<br />
MyImage.NextImage := nil;<br />
<br />
DrawImage(RP, @MyImage, 0,0); // draw the actual Image at 0,0 in the rastport <br />
end;<br />
</syntaxhighlight><br />
<br />
<br />
==== Data as object file ====<br />
<br />
Choose saveformat "Linkobject". (Project/Save data as.../Linkobject)<br />
<br />
Choose "Project/Save Image" to save the image data as a link file, it will ask for a name for the external definition, which is the name you will use in the pascal to identify that image for example 'MyImage' and the memory location for example 'ANY'. Save that as object file e.g. MyImg.o<br />
Choose "Project/Save palette" to save the palette data as a link file, it will ask for a name for the external definition, which is the name you will use in the pascal to identify this palette for example 'MyPalette' and the memory location for example 'ANY'. Save that as object file e.g. MyPal.o<br />
<br />
[[File:Piccon-linkname.png]]<br />
<br />
Now you can include these two files to your code:<br />
<br />
<syntaxhighlight lang="Pascal"><br />
{$L MyImg.o}<br />
var<br />
MyImg: Pointer; external name 'MyImage';<br />
<br />
{$L MyPal.o}<br />
var<br />
MyPal: LongWord; external name 'MyPalette';<br />
<br />
</syntaxhighlight><br />
<br />
after the screen is open one can set the palette<br />
<syntaxhighlight lang="Pascal"><br />
uses<br />
AGraphics;<br />
<br />
{$L MyPal.o}<br />
var<br />
MyPal: LongWord; external name 'MyPalette';<br />
<br />
procedure SetPalette(Screen: PScreen);<br />
begin<br />
LoadRGB32(@Screen^.ViewPort, @MyPal);<br />
end;<br />
</syntaxhighlight><br />
<br />
When you want to draw the actual image to that screen you need a TImage structure to use the binary in the include for that you need the size (width and height) and number of bitplanes of the saved image, all 3 values are shown when the image is successfully saved.<br />
<br />
[[File:Piccon-saved1.png]]<br />
<br />
for this example it is 272 width, 75 height and 3 bitplanes = depth.<br />
<br />
To draw this Bitmap you need to set the TImage structure and draw to rastport like that:<br />
<br />
<syntaxhighlight lang="Pascal"><br />
uses<br />
AGraphics;<br />
<br />
{$L MyImg.o}<br />
var<br />
MyImg: Pointer; external name 'MyImage';<br />
<br />
// raw the image to rast port<br />
procedure DrawImage(RP: PRastPort);<br />
var<br />
MyImage: TImage;<br />
begin<br />
MyImage.LeftEdge := 0;<br />
MyImage.TopEdge := 0;<br />
// this 3 values are shown on finishing<br />
MyImage.Width := 272; // width of image<br />
MyImage.Height := 75; // Height of image<br />
MyImage.Depth := 3; // number of bitplanes<br />
//<br />
MyImage.ImageData := @MyImg; // pointer to the actual image data<br />
//<br />
MyImage.PlanePick := (1 shl MyImage.Depth) - 1;<br />
MyImage.PlaneOnOff := 0; // to no skip any Planes<br />
MyImage.NextImage := nil;<br />
<br />
DrawImage(RP, @MyImage, 0,0); // draw the actual Image at 0,0 in the rastport <br />
end;<br />
</syntaxhighlight></div>Alb42http://fpcamigawiki.alb42.de/index.php?title=File:Piccon-linkname.png&diff=1192File:Piccon-linkname.png2023-01-07T21:23:27Z<p>Alb42: PicCon Link name</p>
<hr />
<div>== Summary ==<br />
PicCon Link name</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Embedded_Images&diff=1190Embedded Images2023-01-02T21:38:04Z<p>Alb42: First version of embedded image, nearly finished, only external binary is missing</p>
<hr />
<div>== Introduction ==<br />
<br />
This page describes how to use embedded bitmap images and palettes in Amiga Free Pascal.<br />
<br />
== Preparation ==<br />
<br />
We start with a PNG file created by Gimp for example and transferred to Amiga (I used Gimp already to scale the colors down to 256 colors). With [http://ppaint.com PPaint] the final color depth and palette ordering is done, the image can be also resized but cutting is also possible in the converter program. For the final conversation [https://aminet.net/package/gfx/conv/PicCon250 PicCon 2.5demo] is used.<br />
<br />
== Image to Program ==<br />
<br />
=== Prepare Image ===<br />
<br />
First you need to load the iff image created by PPaint to PicCon "Project/Open Picture" it will be shown on the screen.<br />
If the image contains a lot of empty background area you might want to cut it. You can directly select the area on the screen or use the "Edit/Autocrop" function.<br />
<br />
[[File:Piccon-autocrop.png]]<br />
<br />
You will get a black border around the area that will be exported.<br />
There are three ways to bring your image to you program (and finally to the screen) the first two options will embed the data to the executable (therefore you can just send a single file) and the last option will load the data from external files (which makes a smaller executable and makes it possible for smaller footprint because you can load the data later on demand)<br />
<br />
=== Prepare Settings ===<br />
<br />
We need to set the format for the data to be exported, usually we want to have plain bitplanes (which is the default, be better check)<br />
"Settings/Imageformat"<br />
<br />
[[File:Piccon-dataformat.png]]<br />
<br />
We also need to set the palette format in "Settings/Paletteformat"<br />
<br />
[[File:Piccon-palformat.png]]<br />
<br />
If we use OS 3+ it is best to use the LoadRGB32 format (Free Pascal default).<br />
OS 1.x does not know the LoadRGB32 functions, therefore one can use the LoadRGB4 format if the target is OS 1.x. But if you use the latest Free Pascal compiler for OS 1.x you can use LoadRGB32 for here as well (there is a wrapper for that in the pascal amiga units)<br />
<br />
=== Save Format ===<br />
As Last you need to define which format you want to save, ultimately define which way you want to bring the data to your program (the aforementioned three options) "Project/Save Data as..."<br />
<br />
[[File:Piccon-saveformat.png]]<br />
<br />
==== Data as Include ====<br />
<br />
PicCon can directly create Pascal code which can be used as includes with only tiny changes (or you can copy paste the code to your program for single source file programs)<br />
Select "Pascal src" as saveformat.<br />
Choose "Project/Save Image" to save the image data as a pascal include file (for example MyImage.inc).<br />
Choose "Project/Save palette" to save the palette data as an include file (for example MyPalette.inc).<br />
Both files are text files, therefore you can open them with any text editor, 2 things you should notice.<br />
<br />
First both constants created are named 'mydata' which is bad if you want to include them into the same file, so maybe rename one (or both) of these constants. For this Tutorial we assume the names where changed to MyImage and MyPalette (same as the files).<br />
<br />
Second at the end of the binary array you will notice an additional comma ',' after the last entry, which Free Pascal does not like there, you will have to remove it (I don't know, but it seems other Pascal compilers can work with that).<br />
<br />
Now you can include these two files to your code:<br />
<br />
<syntaxhighlight lang="Pascal"><br />
{$include MyImage.inc}<br />
{$include MyPalette.inc}<br />
</syntaxhighlight><br />
<br />
after the screen is open one can set the palette<br />
<syntaxhighlight lang="Pascal"><br />
uses<br />
AGraphics;<br />
<br />
{$include MyPalette.inc}<br />
<br />
procedure SetPalette(Screen: PScreen);<br />
begin<br />
LoadRGB32(@Screen^.ViewPort, @MyPalette[0]);<br />
end;<br />
</syntaxhighlight><br />
<br />
<br />
When you want to draw the actual image to that screen you need a TImage structure to use the binary in the include for that you need the size (width and height) and number of bitplanes of the saved image, all 3 values are shown when the image is successfully saved.<br />
<br />
[[File:Piccon-saved1.png]]<br />
<br />
for this example it is 272 width, 75 height and 3 bitplanes = depth.<br />
<br />
To draw this Bitmap you need to set the TImage structure and draw to rastport like that:<br />
<br />
<syntaxhighlight lang="Pascal"><br />
uses<br />
AGraphics;<br />
<br />
{$include MyImage.inc}<br />
<br />
// raw the image to rast port<br />
procedure DrawImage(RP: PRastPort);<br />
var<br />
MyImage: TImage;<br />
begin<br />
MyImage.LeftEdge := 0;<br />
MyImage.TopEdge := 0;<br />
// this 3 values are shown on finishing<br />
MyImage.Width := 272; // width of image<br />
MyImage.Height := 75; // Height of image<br />
MyImage.Depth := 3; // number of bitplanes<br />
//<br />
MyImage.ImageData := @myData[0]; // pointer to the actual image data<br />
//<br />
MyImage.PlanePick := (1 shl MyImage.Depth) - 1;<br />
MyImage.PlaneOnOff := 0; // to no skip any Planes<br />
MyImage.NextImage := nil;<br />
<br />
DrawImage(RP, @MyImage, 0,0); // draw the actual Image at 0,0 in the rastport <br />
end;<br />
</syntaxhighlight><br />
<br />
<br />
==== Data as object file ====<br />
<br />
Choose saveformat "Linkobject". (Project/Save data as.../Linkobject)<br />
<br />
Choose "Project/Save Image" to save the image data as a link file, it will ask for a name for the external definition, which is the name you will use in the pascal to identify that image for example 'MyImage' and the memory location for example 'ANY'. Save that as object file e.g. MyImg.o<br />
Choose "Project/Save palette" to save the palette data as a link file, it will ask for a name for the external definition, which is the name you will use in the pascal to identify this palette for example 'MyPalette' and the memory location for example 'ANY'. Save that as object file e.g. MyPal.o<br />
<br />
Now you can include these two files to your code:<br />
<br />
<syntaxhighlight lang="Pascal"><br />
{$L MyImg.o}<br />
var<br />
MyImg: Pointer; external name 'MyImage';<br />
<br />
{$L MyPal.o}<br />
var<br />
MyPal: LongWord; external name 'MyPalette';<br />
<br />
</syntaxhighlight><br />
<br />
after the screen is open one can set the palette<br />
<syntaxhighlight lang="Pascal"><br />
uses<br />
AGraphics;<br />
<br />
{$L MyPal.o}<br />
var<br />
MyPal: LongWord; external name 'MyPalette';<br />
<br />
procedure SetPalette(Screen: PScreen);<br />
begin<br />
LoadRGB32(@Screen^.ViewPort, @MyPal);<br />
end;<br />
</syntaxhighlight><br />
<br />
When you want to draw the actual image to that screen you need a TImage structure to use the binary in the include for that you need the size (width and height) and number of bitplanes of the saved image, all 3 values are shown when the image is successfully saved.<br />
<br />
[[File:Piccon-saved1.png]]<br />
<br />
for this example it is 272 width, 75 height and 3 bitplanes = depth.<br />
<br />
To draw this Bitmap you need to set the TImage structure and draw to rastport like that:<br />
<br />
<syntaxhighlight lang="Pascal"><br />
uses<br />
AGraphics;<br />
<br />
{$L MyImg.o}<br />
var<br />
MyImg: Pointer; external name 'MyImage';<br />
<br />
// raw the image to rast port<br />
procedure DrawImage(RP: PRastPort);<br />
var<br />
MyImage: TImage;<br />
begin<br />
MyImage.LeftEdge := 0;<br />
MyImage.TopEdge := 0;<br />
// this 3 values are shown on finishing<br />
MyImage.Width := 272; // width of image<br />
MyImage.Height := 75; // Height of image<br />
MyImage.Depth := 3; // number of bitplanes<br />
//<br />
MyImage.ImageData := @MyImg; // pointer to the actual image data<br />
//<br />
MyImage.PlanePick := (1 shl MyImage.Depth) - 1;<br />
MyImage.PlaneOnOff := 0; // to no skip any Planes<br />
MyImage.NextImage := nil;<br />
<br />
DrawImage(RP, @MyImage, 0,0); // draw the actual Image at 0,0 in the rastport <br />
end;<br />
</syntaxhighlight></div>Alb42http://fpcamigawiki.alb42.de/index.php?title=File:Piccon-saved1.png&diff=1189File:Piccon-saved1.png2023-01-02T21:37:22Z<p>Alb42: </p>
<hr />
<div></div>Alb42http://fpcamigawiki.alb42.de/index.php?title=File:Piccon-saveformat.png&diff=1186File:Piccon-saveformat.png2023-01-02T20:55:46Z<p>Alb42: PicCon save formats</p>
<hr />
<div>== Summary ==<br />
PicCon save formats</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=File:Piccon-palformat.png&diff=1185File:Piccon-palformat.png2023-01-02T20:50:11Z<p>Alb42: PicCon Palette format setting</p>
<hr />
<div>== Summary ==<br />
PicCon Palette format setting</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=File:Piccon-dataformat.png&diff=1184File:Piccon-dataformat.png2023-01-02T20:48:08Z<p>Alb42: PicCon Dataformat selector, usually we use Bitplanes</p>
<hr />
<div>== Summary ==<br />
PicCon Dataformat selector, usually we use Bitplanes</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=File:Piccon-autocrop.png&diff=1183File:Piccon-autocrop.png2023-01-02T20:40:50Z<p>Alb42: Choose Autocrop in PicCon to select the minimal area of the image</p>
<hr />
<div>== Summary ==<br />
Choose Autocrop in PicCon to select the minimal area of the image</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Amiga_OS4_Programs&diff=1182Amiga OS4 Programs2022-07-24T08:35:32Z<p>Alb42: Added more program links</p>
<hr />
<div>A list of applications and games made with Free Pascal for Amiga OS 4.x<br />
<br />
== GUI Utilities: ==<br />
* Mapparium [https://blog.alb42.de/programs/mapparium/] (GUI: LCL)<br />
: Openstreetmap viewer<br />
* MUIMapparium [https://blog.alb42.de/programs/muimapparium/] (GUI: MUI) [https://github.com/alb42/MUIMapparium Source]<br />
: Openstreetmap viewer<br />
* GPSTool [https://blog.alb42.de/programs/gpstool/] (GUI: LCL) [https://github.com/alb42/GPSTool Source]<br />
: Test your GPS device and record tracks<br />
* LEU [https://blog.alb42.de/programs/leu/] (GUI: MUIClass) [https://github.com/alb42/Leu Source]<br />
: A spreadsheet tool with import/export for Openoffice and Excel<br />
* MCAmiga (https://blog.alb42.de/programs/#MCAmiga) (GUI: Video unit) [https://github.com/alb42/MCAmiga Source]<br />
: A norton/midnight commander clone for all amiga systems<br />
* AskYourAmiga [https://blog.alb42.de/programs/#AYA] (GUI: MUIClass)<br />
: Wolfram Alpha search client<br />
* HEX2 [https://blog.alb42.de/programs/#Hex2] (GUI: MUIClass)<br />
: a calculator with variables support<br />
* MUIPlot [https://blog.alb42.de/programs/#MUIPlot] (GUI: MUIClass)<br />
: a simple function plotter<br />
* AmiTube [https://blog.alb42.de/amitube/] (GUI: MUIClass)<br />
: The first YouTube Client for Amiga<br />
<br />
== Games: ==<br />
* ColorIt [https://blog.alb42.de/programs/#ColorIt] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/ColorIt]<br />
: A little game with colors. The aim is to fill the complete board with the same color, by changing the flood color.<br />
<br />
* FPCMines [https://blog.alb42.de/programs/#FPCMines] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/Mines]<br />
: A Minesweeper clone</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=MorphOS_Programs&diff=1181MorphOS Programs2022-07-24T08:03:49Z<p>Alb42: Added more program links</p>
<hr />
<div>A list of applications and games made with Free Pascal for MorphOS.<br />
<br />
== GUI Utilities: ==<br />
* ArLAN [http://aminet.net/package/comm/net/ArLanMOS] (GUI: MUIClass)<br />
: Simple Gopher client<br />
* Mapparium [https://blog.alb42.de/programs/mapparium/] (GUI: LCL)<br />
: Openstreetmap viewer<br />
* MUIMapparium [https://blog.alb42.de/programs/muimapparium/] (GUI: MUI) [https://github.com/alb42/MUIMapparium Source]<br />
: Openstreetmap viewer<br />
* GPSTool [https://blog.alb42.de/programs/gpstool/] (GUI: LCL) [https://github.com/alb42/GPSTool Source]<br />
: Test your GPS device and record tracks<br />
* LEU [https://blog.alb42.de/programs/leu/] (GUI: MUIClass) [https://github.com/alb42/Leu Source]<br />
: A spreadsheet tool with import/export for Openoffice and Excel<br />
* MCAmiga (https://blog.alb42.de/programs/#MCAmiga) (GUI: Video unit) [https://github.com/alb42/MCAmiga Source]<br />
: A norton/midnight commander clone for all amiga systems<br />
* AskYourAmiga [https://blog.alb42.de/programs/#AYA] (GUI: MUIClass)<br />
: Wolfram Alpha search client<br />
* HEX2 [https://blog.alb42.de/programs/#Hex2] (GUI: MUIClass)<br />
: a calculator with variables support<br />
* MUIPlot [https://blog.alb42.de/programs/#MUIPlot] (GUI: MUIClass)<br />
: a simple function plotter<br />
* AmiTube [https://blog.alb42.de/amitube/] (GUI: MUIClass)<br />
: The first YouTube Client for Amiga<br />
<br />
== Games: ==<br />
* ColorIt [https://blog.alb42.de/programs/#ColorIt] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/ColorIt]<br />
: A little game with colors. The aim is to fill the complete board with the same color, by changing the flood color.<br />
<br />
* FPCMines [https://blog.alb42.de/programs/#FPCMines] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/Mines]<br />
: A Minesweeper clone</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Amiga_Programs&diff=1180Amiga Programs2022-07-24T08:02:40Z<p>Alb42: GUI Utilities added</p>
<hr />
<div>A list of applications and games made with Free Pascal for Amiga 68k.<br />
<br />
== GUI Utilities: ==<br />
* ArLAN [http://aminet.net/package/comm/net/ArLan] (GUI: MUIClass)<br />
: Simple Gopher client<br />
* Mapparium [https://blog.alb42.de/programs/mapparium/] (GUI: LCL)<br />
: Openstreetmap viewer<br />
* MUIMapparium [https://blog.alb42.de/programs/muimapparium/] (GUI: MUI) [https://github.com/alb42/MUIMapparium Source]<br />
: Openstreetmap viewer<br />
* GPSTool [https://blog.alb42.de/programs/gpstool/] (GUI: LCL) [https://github.com/alb42/GPSTool Source]<br />
: Test your GPS device and record tracks<br />
* LEU [https://blog.alb42.de/programs/leu/] (GUI: MUIClass) [https://github.com/alb42/Leu Source]<br />
: A spreadsheet tool with import/export for Openoffice and Excel<br />
* MCAmiga (https://blog.alb42.de/programs/#MCAmiga) (GUI: Video unit) [https://github.com/alb42/MCAmiga Source]<br />
: A norton/midnight commander clone for all amiga systems<br />
* AskYourAmiga [https://blog.alb42.de/programs/#AYA] (GUI: MUIClass)<br />
: Wolfram Alpha search client<br />
* HEX2 [https://blog.alb42.de/programs/#Hex2] (GUI: MUIClass)<br />
: a calculator with variables support<br />
* MUIPlot [https://blog.alb42.de/programs/#MUIPlot] (GUI: MUIClass)<br />
: a simple function plotter<br />
* AmiTube [https://blog.alb42.de/amitube/] (GUI: MUIClass)<br />
: The first YouTube Client for Amiga<br />
<br />
== Games: ==<br />
* ColorIt [https://blog.alb42.de/programs/#ColorIt] [https://github.com/alb42/fpc-tests/tree/master/lcl/ColorIt Source] (GUI: LCL)<br />
: A little game with colors. The aim is to fill the complete board with the same color, by changing the flood color.<br />
<br />
* FPCMines [https://blog.alb42.de/programs/#FPCMines] [https://github.com/alb42/fpc-tests/tree/master/lcl/Mines Source] (GUI: LCL)<br />
: A Minesweeper clone</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=AROS_Programs&diff=1179AROS Programs2022-07-24T08:02:14Z<p>Alb42: some more links I found in Aminet</p>
<hr />
<div>== GUI Utilities: ==<br />
* AWeather [http://archives.aros-exec.org/index.php?function=showfile&file=utility/workbench/aweather.i386-aros.zip] (GUI: MUIClass)<br />
: Desktop weather forecast<br />
* Show Windows [http://blog.alb42.de/2013/01/02/show-windows-program/] (GUI: FpGUI)<br />
: A program to list the current windows on screen with parent relations. (included in distro, or as [http://blog.alb42.de/fpc-aros/ seperate download]).<br />
* UI Designer [http://www.alb42.de/prgs/UI-Designer.lha] (GUI: FpGUI)<br />
: The UI designer of the fpgui package, easy creating GUIs by simple mouse clicks<br />
* AROS Debug View [http://blog.alb42.de/aros-debug-view/] (GUI: FpGUI)<br />
: A debug message viewer for AROS with filter and network support<br />
* APict [http://blog.alb42.de/fpc-aros/] (GUI: MUI)<br />
: A fast and easy Image Viewer<br />
* EdiSyn [http://blog.alb42.de/edisyn/] (GUI: LCL)<br />
: Your friendly Editor with Tabs and Syntaxhighlighting (Based on SynEdit Component of LCL)<br />
* PasteQuick [https://blog.alb42.de/programs/#PasteQuick] (GUI: LCL)<br />
: a pastebin.com client<br />
* Mapparium [https://blog.alb42.de/programs/mapparium/] (GUI: LCL)<br />
: Openstreetmap viewer<br />
* MUIMapparium [https://blog.alb42.de/programs/muimapparium/] (GUI: MUI) [https://github.com/alb42/MUIMapparium Source]<br />
: Openstreetmap viewer<br />
* GPSTool [https://blog.alb42.de/programs/gpstool/] (GUI: LCL) [https://github.com/alb42/GPSTool Source]<br />
: Test your GPS device and record tracks<br />
* LEU [https://blog.alb42.de/programs/leu/] (GUI: MUIClass) [https://github.com/alb42/Leu Source]<br />
: A spreadsheet tool with import/export for Openoffice and Excel<br />
* MCAmiga (https://blog.alb42.de/programs/#MCAmiga) (GUI: Video unit) [https://github.com/alb42/MCAmiga Source]<br />
: A norton/midnight commander clone for all amiga systems<br />
* AskYourAmiga [https://blog.alb42.de/programs/#AYA] (GUI: MUIClass)<br />
: Wolfram Alpha search client<br />
* HEX2 [https://blog.alb42.de/programs/#Hex2] (GUI: MUIClass)<br />
: a calculator with variables support<br />
* MUIPlot [https://blog.alb42.de/programs/#MUIPlot] (GUI: MUIClass)<br />
: a simple function plotter<br />
* AmiTube [https://blog.alb42.de/amitube/] (GUI: MUIClass)<br />
: The first YouTube Client for Amiga<br />
<br />
<br />
== Commandline Utilities: ==<br />
* SetPenColor [http://aros-exec.org/modules/newbb/viewtopic.php?post_id=68146#forumpost68146]<br />
: Utility to manipulate colors of a screen. Started out as an example on how to parse commandline parameters AROS-style.<br />
* PlayMP3 [http://aros-exec.org/modules/newbb/viewtopic.php?post_id=64417#forumpost64417]<br />
: Tool to play MP3-files using mpega.library. Initially created to show that FPC can be used to fullfill a bounty.<br />
* ExtractBinutils [http://magorium.alb42.de/pub/wikifiles/ExtractBinutils.i386-aros.zip]<br />
: Specialist tool that extract the Binutils from a AROS/i386 (ABIv0) nightly download .ISO file. [http://magorium.alb42.de/pub/projects/ExtractBinutils.src-aros.zip Source] includes ported [http://sourceforge.net/projects/isolib/ TISOLib] (thanks ALB)<br />
* fileop [http://aminet.net/package/util/shell/fileop.i386-aros] Source included<br />
: file operations under shell.<br />
<br />
== Workbench Utilities: ==<br />
* wbXcli [http://archives.aros-exec.org/?function=showfile&file=utility/workbench/wbxcli-i386-aros.zip]<br />
: A tool that can only be used as project tool. It launches any provided executable once icon clicked, with user definable parameter(s) by making use of the project's tooltypes. (It circumvents having to use IconX + script on many occasions)<br />
<br />
== Games: ==<br />
* Shift-It GL [http://blog.alb42.de/shift-it-gl] (GUI: OpenGL)<br />
: A little thinking game about removing equal colored blocks by moving them together. An OpenGL game completely written in Freepascal.<br />
<br />
* ColorIt [http://www.alb42.de/prgs/ColorIt.lha] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/ColorIt] (GUI: LCL)<br />
: A little game with colors. The aim is to fill the complete board with the same color, by changing the flood color.<br />
<br />
* FPCMines [http://www.alb42.de/prgs/FPCMines.lha] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/Mines] (GUI: LCL)<br />
: A Minesweeper clone for AROS<br />
<br />
* BinShifter [https://blog.alb42.de/programs/#BinShifter] (GUI_ LCL)<br />
: a 2048 game</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=AROS_Programs&diff=1178AROS Programs2022-07-24T07:45:08Z<p>Alb42: Added more program links</p>
<hr />
<div>== GUI Utilities: ==<br />
* AWeather [http://archives.aros-exec.org/index.php?function=showfile&file=utility/workbench/aweather.i386-aros.zip] (GUI: MUIClass)<br />
: Desktop weather forecast<br />
* Show Windows [http://blog.alb42.de/2013/01/02/show-windows-program/] (GUI: FpGUI)<br />
: A program to list the current windows on screen with parent relations. (included in distro, or as [http://blog.alb42.de/fpc-aros/ seperate download]).<br />
* UI Designer [http://www.alb42.de/prgs/UI-Designer.lha] (GUI: FpGUI)<br />
: The UI designer of the fpgui package, easy creating GUIs by simple mouse clicks<br />
* AROS Debug View [http://blog.alb42.de/aros-debug-view/] (GUI: FpGUI)<br />
: A debug message viewer for AROS with filter and network support<br />
* APict [http://blog.alb42.de/fpc-aros/] (GUI: MUI)<br />
: A fast and easy Image Viewer<br />
* EdiSyn [http://blog.alb42.de/edisyn/] (GUI: LCL)<br />
: Your friendly Editor with Tabs and Syntaxhighlighting (Based on SynEdit Component of LCL)<br />
* PasteQuick [https://blog.alb42.de/programs/#PasteQuick] (GUI: LCL)<br />
: a pastebin.com client<br />
* Mapparium [https://blog.alb42.de/programs/mapparium/] (GUI: LCL)<br />
: Openstreetmap viewer<br />
* MUIMapparium [https://blog.alb42.de/programs/muimapparium/] (GUI: MUI) [https://github.com/alb42/MUIMapparium Source]<br />
: Openstreetmap viewer<br />
* GPSTool [https://blog.alb42.de/programs/gpstool/] (GUI: LCL) [https://github.com/alb42/GPSTool Source]<br />
: Test your GPS device and record tracks<br />
* LEU [https://blog.alb42.de/programs/leu/] (GUI: MUIClass) [https://github.com/alb42/Leu Source]<br />
: A spreadsheet tool with import/export for Openoffice and Excel<br />
* MCAmiga (https://blog.alb42.de/programs/#MCAmiga) (GUI: Video unit) [https://github.com/alb42/MCAmiga Source]<br />
: A norton/midnight commander clone for all amiga systems<br />
* AskYourAmiga [https://blog.alb42.de/programs/#AYA] (GUI: MUIClass)<br />
: Wolfram Alpha search client<br />
* HEX2 [https://blog.alb42.de/programs/#Hex2] (GUI: MUIClass)<br />
: a calculator with variables support<br />
* MUIPlot [https://blog.alb42.de/programs/#MUIPlot] (GUI: MUIClass)<br />
: a simple function plotter<br />
* AmiTube [https://blog.alb42.de/amitube/] (GUI: MUIClass)<br />
: The first YouTube Client for Amiga<br />
<br />
<br />
== Commandline Utilities: ==<br />
* SetPenColor [http://aros-exec.org/modules/newbb/viewtopic.php?post_id=68146#forumpost68146]<br />
: Utility to manipulate colors of a screen. Started out as an example on how to parse commandline parameters AROS-style.<br />
* PlayMP3 [http://aros-exec.org/modules/newbb/viewtopic.php?post_id=64417#forumpost64417]<br />
: Tool to play MP3-files using mpega.library. Initially created to show that FPC can be used to fullfill a bounty.<br />
* ExtractBinutils [http://magorium.alb42.de/pub/wikifiles/ExtractBinutils.i386-aros.zip]<br />
: Specialist tool that extract the Binutils from a AROS/i386 (ABIv0) nightly download .ISO file. [http://magorium.alb42.de/pub/projects/ExtractBinutils.src-aros.zip Source] includes ported [http://sourceforge.net/projects/isolib/ TISOLib] (thanks ALB)<br />
<br />
== Workbench Utilities: ==<br />
* wbXcli [http://archives.aros-exec.org/?function=showfile&file=utility/workbench/wbxcli-i386-aros.zip]<br />
: A tool that can only be used as project tool. It launches any provided executable once icon clicked, with user definable parameter(s) by making use of the project's tooltypes. (It circumvents having to use IconX + script on many occasions)<br />
<br />
== Games: ==<br />
* Shift-It GL [http://blog.alb42.de/shift-it-gl] (GUI: OpenGL)<br />
: A little thinking game about removing equal colored blocks by moving them together. An OpenGL game completely written in Freepascal.<br />
<br />
* ColorIt [http://www.alb42.de/prgs/ColorIt.lha] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/ColorIt] (GUI: LCL)<br />
: A little game with colors. The aim is to fill the complete board with the same color, by changing the flood color.<br />
<br />
* FPCMines [http://www.alb42.de/prgs/FPCMines.lha] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/Mines] (GUI: LCL)<br />
: A Minesweeper clone for AROS<br />
<br />
* BinShifter [https://blog.alb42.de/programs/#BinShifter] (GUI_ LCL)<br />
: a 2048 game</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Trinity_in_Trouble&diff=1158Trinity in Trouble2021-06-18T17:15:02Z<p>Alb42: /* List of issues */ GFXBase Type fixed in trunk</p>
<hr />
<div><div style="background-color: #FFFF99; -khtml-border-radius: 15px; -moz-border-radius: 15px; -webkit-border-radius:<br />
15px; border: 2px solid #000; padding: 10px; margin:10px 200px 10px;"><br />
<center><br />
'''Note'''<br />
</center><br />
<br />
<center><br />
Based on Free Pascal branch "fixes 3.0"<br />
</center><br />
<br />
Feel free to add delete or change status.<br />
</div><br />
<br />
Our trinity consist of Amiga, AROS and MorphOS.<br />
<br />
Unfortunately, there are (still) some incompatibilities and/or some lack of consistency here and there. The idea is to have a list here that mentions them all. Layout may change, i simply had to start somewhere.<br />
<br />
NOTE: I thought there is no use to mention the Tag, Tags, Taglist, etc. inconsistency and additional incompatibilities that this causes. We are all aware of those and will hopefully get some unity in the future<br />
<br />
== Table of units ==<br />
<br />
The triforce repo introduced the usage of unit [//github.com/magorium/fpc-triforce/blob/master/Sys/Trinity/TriniTypes.pas trinitypes] in order to fight the type inconsistencies (at least for the new units, not the examples). The contents of trinitype will be extended as things progresses. A simple load-search-replace-save routine/program can be applied since the used types are fairly unique.<br />
<br />
{| class="wikitable"<br />
|+ List of available units per platform:<br />
|-<br />
! Unit !! Category !! OS3.x !! AROS !! MorphOS !! Remark(s)<br />
|-<br />
| [[#agraphics]] || graphics.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| ahi || ahi.device || class="working" | yes || class="progress" | MAG || class="working" | yes || <br />
|-<br />
| ahi_sub || ahi_sub.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| akeyboard || keyboard.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/akeyboard.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/akeyboard.pas test] || <br />
|-<br />
| amarquee || amarquee.library || class="working" | yes || class="unknown" | n/a || class="unknown" | n/a || <br />
|-<br />
| [[#amigados]] || dos.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| amigaguide || amigaguide.library || class="working" | yes || class="progress" | MAG || class="not" | no || No use though, AROS' lib functions are not implemented<br />
|-<br />
| [[#amigalib]] || amigalib || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigalib.pas test] || class="working" | yes || Unit amigalib has it's own status page, [[AmigaLib]]<br />
|-<br />
| amigaprinter || printer.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigaprinter.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/amigaprinter.pas test] || <br />
|-<br />
| aroslib || aros.library || class="unknown" | n/a || class="working" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/aroslib.pas yes] || class="unknown" | n/a || <br />
|-<br />
| [[#asl]] || asl.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| audio || audio.device || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| bootblock || bootblock.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| bullet || bullet.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| cd || cd.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| clipboard || clipboard.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| colorwheel || colorwheel.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| [[#commodities]] || commodities.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/commodities.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/commodities.pas test] ||<br />
|-<br />
| configregs || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configregs.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configregs.pas test] ||<br />
|-<br />
| configvars || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas test] ||<br />
|-<br />
| console || console.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/console.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/console.pas test] ||<br />
|-<br />
| conunit || console.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/conunit.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/conunit.pas test] ||<br />
|-<br />
| cgxvideo || || class="not" | no || class="not" | no || class="working" | [//svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343 yes] || Recently added to MorphOS by Chain-Q<br />
|-<br />
| cybergraphics || cybergraphics.library || class="working" | yes || class="working" | yes || class="working" | [//svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343 yes] || Recently added to MorphOS by Chain-Q<br />
|-<br />
| datatypes || datatypes.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/datatypes.pas test] || class="working" | yes || Unit source (AROS) is still a bit of a mess. Amiga version needs an overhaul (no PObject_ being used where it should -> concerns most if not all of declared functions).<br />
|-<br />
| diskfont || diskfont.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/diskfont.pas test] || A diskfont unit was added to MorphOS by Chain-Q<br />
|-<br />
| [[#exec]] || exec.library || class="working" | yes || class="working" | yes || class="working" | yes || MorphOS: noticed some things missing in comparison to SDK 3.9 (this is meant as a reminder to verify this unit)<br />
|-<br />
| [[#expansion]] || expansion.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansion.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansion.pas test] ||<br />
|-<br />
| expansionbase || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansionbase.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansionbase.pas test] ||<br />
|-<br />
| [[#gadtools]] || gadtools.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/gadtools.pas test] || <br />
|-<br />
| gameport || gameport.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| get9 || ? || class="unknown" | n/a || class="unknown" | n/a || class="working" | yes || silly MorphOS-only historic .library, Pascal interface unit exist as a joke, ignore this :) <br />
|-<br />
| gradientslider || gradientslider.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| gtlayout || gtlayout.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| guigfx || guigfx.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hardblocks || hardblocks.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hardware || hardware.resource || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| icon || icon.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/icon.pas test] ||<br />
|-<br />
| identify || identify.lbrary || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| iffparse || iffparse.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| input || input.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/input.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/input.pas test] || <br />
|-<br />
| inputevent || see input.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#intuition]] || intuition.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#keymap]] || keymap.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| kvm || ? || class="unknown" | n/a || class="unknown" | n/a || class="unknown" | n/a || This unit is now dropped. It was a helper unit for the KVM stuff, but it's no longer used, and it doesn't provide any other useful functionality. It's "API" was never meant for public use either. The idea was, mouse unit could be used w/o the video and keyboard, and doesn't depend on each other. But it doesn't really matter any more. I removed it from trunk.<br />
|-<br />
| layers || layers.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| locale || locale.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/locale.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/locale.pas test] || <br />
|-<br />
| lowlevel || lowlevel.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| lucyplay || lucyplay.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| mui || mui.library (ZUNE) || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| muihelper || see mui.library || class="not" | no || class="not" | no || class="working" | yes || MUIHelper contains some Pascal syntax-sugar and helpers for writing MUI code. It can be moved to ami-extra Package when it's verified it works everywhere.<br />
|-<br />
| mysticview || mysticview.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| nonvolatile || nonvolatile.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| parallel || parallel.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| picasso96api || picasso library || class="working" | yes || class="unknown" | n/a || class="unknown" | n/a || MorphOS and AROS don't have Picasso96 support.<br />
|-<br />
| preferences || preferences.library || class="working" | yes || class="not" | n/a || class="not" | no || <br />
|-<br />
| prefs || see preferences || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/prefs.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/prefs.pas test] || <br />
|-<br />
| prtbase || printer.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| prtgfx || ? || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| ptreplay || ptreplay.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| realtime || realtime.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| render || render.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| reqtools || reqtools.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| [[#rexx]] || rexxsyslib.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/rexx.pas test] || <br />
|-<br />
| romboot_base || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| scsidisk || scscidisk.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| serial || serial.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| tapedeck || tapedeck.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| timer || timer.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| tinygl || tinygl library || class="unknown" | n/a || class="unknown" | n/a || class="working" | yes || TinyGL is MorphOS specific and the unit there is only used to get the OpenGL package of FPC running.<br />
|-<br />
| trackdisk || trackdisk.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| translator || translator.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| triton || triton.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| tritonmacros || macros for triton || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| ttengine || ttengine.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| utility || utility.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#workbench]] || workbench.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/workbench.pas test] || <br />
|-<br />
| xadmaster || xadmaster.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| zlib || zlib.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
|<br />
<!-- Util Units --><br />
|-<br />
| <br />
|-<br />
| amigautils || amigautils || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| amsgbox || msgbox using easyasl || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| consoleio || crt using console || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| deadkeys || console deadkeys || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| doublebuffer || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| easyasl || easyasl.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hisoft || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| linklist || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| longarray || || class="working" | yes || class="working" | yes || class="not" | no || <br />
|-<br />
| pastoc || || class="working" | yes || class="not" | no || class="not" | no || This is deprecated, and must *not* be ported to other platforms.<br />
|-<br />
| pcq || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| systemvartags || || class="working" | yes || class="not" | no || class="not" | no || NOTE: this unit cannot be used when trying to create executables to be run on AROS-m68k because AROS misses bullet.library.<br />
|-<br />
| tagsarray || || class="working" | yes || class="working" | yes || class="not" | no || Tagsarray implementation is not thread safe, at least on classic.<br />
|-<br />
| timerutils || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere.<br />
|-<br />
| vartags || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| wbargs || || class="working" | yes || class="not" | no || class="not" | no || <br />
|}<br />
<br />
== List of issues ==<br />
<br />
=== agraphics ===<br />
<br />
* '''record: Isrvstr'''<br />
: AROS: Missing<br />
* <strike>'''var: GfxBase'''</strike> fixed in r49515<br />
: AROS: type is PGfxBase<br />
: Amiga: type is PLibrary<br />
: MorphOS: type is Pointer<br />
: Note: According to rkrm it should be PGfxBase<br />
<br />
=== amigados ===<br />
<br />
* <strike> '''function: DOSRename()''' </strike> fixed in r49515<br />
: aros: function DOSRename(const OldName: STRPTR; const NewName: STRPTR): LongInt; syscall AOS_DOSBase 13;<br />
: os4: function DosRename(const OldName: STRPTR; const NewName: STRPTR): LongBool; syscall IDos 108;<br />
: os3: FUNCTION DOSRename(const oldName : pCHAR location 'd1';const newName : pCHAR location 'd2') : LongBool; syscall _DOSBase 078;<br />
: mos: function dosRename(oldName: PChar location 'd1'; newName: PChar location 'd2'): LongInt; SysCall MOS_DOSBase 78;<br />
: remark: PChar vs STRPTR (should be STRPTR) and LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: Examine()''' </strike> fixed in r49515<br />
: aros: function Examine(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongInt; syscall AOS_DOSBase 17;<br />
: os4: function Examine(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongBool; syscall IDos 124;<br />
: os3: FUNCTION Examine(lock: BPTR location 'd1'; fileInfoBlock: pFileInfoBlock location 'd2'): LongBool; syscall _DOSBase 102;<br />
: mos: function Examine(lock: BPTR location 'd1'; fileInfoBlock: PFileInfoBlock location 'd2'): LongInt; SysCall MOS_DOSBase 102;<br />
: remark: LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: Execute()''' </strike> fixed in r49515<br />
: aros: function Execute(const String_: STRPTR; Input: BPTR; Output: BPTR): LongInt; syscall AOS_DOSBase 37;<br />
: os4: function Execute(const String_: STRPTR; File_: BPTR; File2: BPTR): LongBool; syscall IDos 204;<br />
: os3: FUNCTION Execute(const string_ : pCHAR location 'd1'; file_ : LONGINT location 'd2'; file2 : LONGINT location 'd3') : LongBool; syscall _DOSBase 222;<br />
: mos: function Execute(string1: PChar location 'd1'; file1 : BPTR location 'd2'; file2 : BPTR location 'd3'): LongBool;<br />
: remark: PChar vs STRPTR (should be STRPTR), BPTR vs LONGINT (should be BPTR) and LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: ExNext()''' </strike> fixed in r49515<br />
: aros: function ExNext(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongInt; syscall AOS_DOSBase 18;<br />
: os4: function ExNext(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongBool; syscall IDos 128;<br />
: os3: FUNCTION ExNext(lock: BPTR location 'd1'; fileInfoBlock: pFileInfoBlock location 'd2'): LongBool; syscall _DOSBase 108;<br />
: mos: function ExNext(lock: BPTR location 'd1'; fileInfoBlock: PFileInfoBlock location 'd2'): LongInt; SysCall MOS_DOSBase 108;<br />
: remark: LongInt vs LongBool (should be BOOL)<br />
<br />
=== amigalib ===<br />
<br />
* '''function: CreatePort()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DeletePort()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: CreateExtIO()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DeleteExtIO()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DoMethod()'''<br />
: Amiga version seems missing completely.<br />
: Implemented versions for AROS and MorphOS don't follow autodocs 100% and are inconsistent.<br />
* '''function: CoerceMethod()'''<br />
: MorphOS version seems missing completely (including CoerceMethodA().<br />
: Amiga version has CoerceMethodA() implemented but no CoerceMethod()<br />
: Implemented versions for AROS and Amiga don't follow autodocs 100% and are inconsistent.<br />
<br />
<br />
=== asl ===<br />
<br />
AROS' implementation of asl uses 'modern' function names, ending with or without an A depending whether it's a varargs version or not. Amiga and MorphOS implementations uses 'old-style' naming scheme as dictated by classic autodocs. In order to 'fix' this, unit trinity re-declares asl functions using the 'old-style' naming scheme (it was the quickest fix).<br />
<br />
=== exec ===<br />
<br />
* '''structure: Hook'''<br />
: AROS version, entries are not IPTR rather APTR. [http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node0617.html#line27 Amiga version] uses ULONG's for h_entry and h_subentry, but that doesn't comply on 64-bit. AROS version can be found [https://trac.aros.org/trac/browser/AROS/branches/ABI_V0-on-trunk-20141231/AROS/compiler/include/utility/hooks.h?rev=51123 here].<br />
: Remark: In case it's compatibility holding back the change, i'm willing to create a multiplatform advanced record solution<br />
* <strike>'''function: NewCreateTask()''' </strike> fixed in r49516<br />
: AROS: missing.<br />
: Note: Most probably introduced when v0-on-trunk became v0.<br />
* <strike>'''function: AVL_FindNextNodeByKey()''' </strike> fixed in r49516<br />
: AROS: Missing of 3th parameter 'comparefunction'<br />
: AROS sdk: struct AVLNode *AVL_FindNextNodeByKey(const struct AVLNode *node, AVLKey key, AVLKEYCOMP func) (A0, A1, A2)<br />
* <strike>'''function: AVL_FindPrevNodeByKey()''' </strike> fixed in r49516<br />
: AROS: Missing of 3th parameter 'comparefunction'<br />
: AROS sdk: struct AVLNode *AVL_FindPrevNodeByKey(const struct AVLNode *root, AVLKey key, AVLKEYCOMP func) (A0, A1, A2)<br />
* <strike>'''function: AVL_FindNode()''' </strike> fixed in r49516<br />
: AROS: 3th parameter Func is declared as type PAVLNODECOMP. Should be PAVLKEYCOMP.<br />
* <strike>'''function: AVL_RemNodeByKey()''' </strike> fixed in r49516<br />
: AROS: 3th parameter Func is declared as type PAVLNODECOMP. Should be PAVLKEYCOMP.<br />
<br />
=== commodities ===<br />
<br />
=== expansion ===<br />
(see also other expansion support units)<br />
<br />
* '''syscall routine: ReadExpansionRom'''<br />
: Amiga: declared as procedure. autodocs are inconsistent (both procedure and function are being mentioned). AROS (also 68k) tells it is indeed a function and returning a bool.<br />
* '''syscall routine: ConfigBoard()'''<br />
: Amiga: declared as procedure. autodocs are inconsistent (both procedure and function are being mentioned). AROS (also 68k) tells it is indeed a function and returning a bool.<br />
<br />
=== gadtools ===<br />
<br />
* '''unit: gadtools'''<br />
: <strike>MorphOS: unit missing</strike> Available in fpc-triforce repo (for link see unit table). Waiting for testing/approval.<br />
* '''varargs function: CreateGadget()'''<br />
: AROS: missing<br />
* '''varargs function: CreateMenus()'''<br />
: AROS: missing<br />
* '''varargs function: DrawBevelBox()'''<br />
: AROS: missing<br />
* '''varargs function: GetVisualInfo()'''<br />
: AROS: missing<br />
* '''varargs function: GT_GetGadgetAttrs()'''<br />
: AROS: missing<br />
* '''varargs function: GT_SetGadgetAttrs()'''<br />
: AROS: missing<br />
* '''varargs function: LayoutMenuItems()'''<br />
: AROS: missing<br />
* '''varargs function: LayoutMenus()'''<br />
: AROS: missing<br />
* '''function: CreateContext()'''<br />
: Amiga SDK: struct Gadget *CreateContext(struct Gadget **);<br />
: AROS SDK: struct Gadget *CreateContext(struct Gadget **glistpointer) (A0)<br />
: Amiga: FUNCTION CreateContext(glistptr : pGadget location 'a0'): pGadget; syscall GadToolsBase 114;<br />
: AROS: function CreateContext(GListPtr: PGadget): PGadget; syscall GadToolsBase 19;<br />
: Note: glistpointer is a pointer to a pointer<br />
<br />
=== intuition ===<br />
<br />
=== keymap ===<br />
<br />
=== rexx ===<br />
<br />
=== workbench ===<br />
<br />
=== uncategorized ===<br />
<br />
== Fixed in triforce ==<br />
<br />
Additional units, added to triforce repo. Note that all issues listed above are already addressed with using unit trinity.<br />
<br />
* <strike>'''unit: akeyboard'''</strike> <!-- 20150928 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/akeyboard.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/akeyboard.pas]<br />
<br />
* <strike>'''unit: diskfont'''</strike> <!-- 20150929 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/diskfont.pas]<br />
<br />
* <strike>'''unit: prefs'''</strike> <!-- 20151001 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/prefs.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/prefs.pas]<br />
<br />
* <strike>'''unit: AmigaPrinter'''</strike> <!-- 20151002 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigaprinter.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/amigaprinter.pas]<br />
<br />
* <strike>'''unit: Datatypes'''</strike> <!-- 20151003 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/datatypes.pas]<br />
<br />
* <strike>'''unit: input'''</strike> <!-- 20151005 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/input.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/input.pas]<br />
<br />
* <strike>'''unit: workbench'''</strike> <!-- 20151026 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/workbench.pas]<br />
<br />
* <strike>'''unit: icon'''</strike> <!-- 20151027 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/icon.pas]<br />
<br />
* <strike>'''unit: locale'''</strike> <!-- 20151103 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/locale.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/locale.pas]<br />
<br />
* <strike>'''unit: gadtools'''</strike> <!-- 20151119 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/gadtools.pas]<br />
<br />
* <strike>'''unit: commodities'''</strike> <!-- 20151223 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/commodities.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/commodities.pas]<br />
<br />
* <strike>'''unit: configregs'''</strike> <!-- 20160106 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configregs.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configregs.pas]<br />
<br />
* <strike>'''unit: configvars'''</strike> <!-- 20160107 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas]<br />
<br />
* <strike>'''unit: configregs'''</strike> <!-- 20160107 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas]<br />
<br />
* <strike>'''unit: expansionbase'''</strike> <!-- 20160108 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansionbase.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansionbase.pas]<br />
<br />
* <strike>'''unit: expansion'''</strike> <!-- 20160109 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansion.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansion.pas]<br />
<br />
* <strike>'''unit: rexx'''</strike> <!-- 20160116 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/rexx.pas]<br />
<br />
* <strike>'''unit: aroslib'''</strike> <!-- 20160117 --><br />
: AROS: added to triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas]<br />
<br />
== Fixed in current trunk ==<br />
<br />
* <strike>'''unit: systemvartags'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33222]<br />
: This utility unit is Amiga specific and implements most if not all vartags versions of library-calls rendering it incompatible with AROS and MorphOS<br />
<br />
* <strike>'''function: AddAppIconA()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: struct AppIcon *AddAppIconA(ULONG, ULONG, char *, struct MsgPort *, BPTR, struct DiskObject *, struct TagItem *);<br />
: Amiga: FUNCTION AddAppIconA(id : ULONG location 'd0'; userdata : ULONG location 'd1'; text_ : pCHAR location 'a0'; msgport : pMsgPort location 'a1'; lock : pFileLock location 'a2'; diskobj : pDiskObject location 'a3'; const taglist : pTagItem location 'a4') : pAppIcon; syscall WorkbenchBase 060;<br />
: Note: lock parameter is of type BPTR not pFileLock<br />
* <strike>'''varargs function: AddAppIcon()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
:Amiga: Missing<br />
<br />
* <strike>'''function: DeleteArgstring()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: VOID DeleteArgstring(UBYTE* argstring:A0)<br />
: Amiga: procedure DeleteArgstring(argstring: PChar location 'd0'); syscall RexxSysBase 132;<br />
: Note: d0 as location ?<br />
<br />
* <strike>'''function: MapANSI()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: LONG MapANSI( STRPTR, LONG, STRPTR, LONG, struct KeyMap * );<br />
: MorphOS: function MapANSI(CONST strg : pSHORTINT location 'a0'; count : longint location 'd0'; buffer : pSHORTINT location 'a1'; length : longint location 'd1'; CONST keyMap : pKeyMap location 'a2') : longint; SysCall KeymapBase 048;<br />
: Note: PShortInt vs STRPTR for buffer/strg argument<br />
* <strike>'''function: MapRawKey()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: WORD MapRawKey( struct InputEvent *, STRPTR, WORD, struct Keymap * );<br />
: MorphOS: function MapRawKey(CONST event : pInputEvent location 'a0'; buffer : pSHORTINT location 'a1'; length : longint location 'd1'; CONST keyMap : pKeyMap location 'a2') : INTEGER; SysCall KeymapBase 042;<br />
: Note: PShortInt vs STRPTR for buffer argument<br />
<br />
* <strike>'''function: SetPointer()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: SetPointer( Window, Pointer, Height, Width, XOffset, YOffset )<br />
: AROS SDK: void SetPointer(struct Window * window, const UWORD* pointer, LONG height, LONG width, LONG xOffset, LONG yOffset );<br />
: MorphOS SDK: VOID SetPointer( struct Window *window, UWORD *pointer, LONG height, LONG width, LONG xOffset, LONG yOffset );<br />
: Amiga: PROCEDURE SetPointer(window : pWindow location 'a0'; pointer_ : pword location 'a1'; height : LONGINT location 'd0'; width : LONGINT location 'd1'; xOffset : LONGINT location 'd2'; yOffset : LONGINT location 'd3'); syscall _IntuitionBase 270;<br />
: AROS: procedure SetPointer(Window: PWindow; Pointer_: PWord; Height: LongInt; Width: LongInt; XOffset: LongInt; YOffset: LongInt); syscall IntuitionBase 45;<br />
: MorphOS: procedure SetPointer(window : pWindow location 'a0'; VAR pointer : Word location 'a1'; height : LongInt location 'd0'; width : LongInt location 'd1'; xOffset : LongInt location 'd2'; yOffset : LongInt location 'd3'); SysCall IntuitionBase 270;<br />
: Note: Using a var for pointerdata seems a bad idea. If must, then please provide both options.<br />
<br />
* <strike>'''structure: TExpansionControl()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: field ec_Reserved11 is currently advertised with name ec_Z3_HighBase<br />
<br />
* <strike>'''type: Tag'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: "typedef ULONG Tag;"<br />
: Amiga: "Type Tag = LongInt;"<br />
* <strike>'''record field: ti_Data of record tTagItem'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: "ULONG ti_Data;"<br />
: Amiga: "ti_Data : LongInt;"<br />
<br />
* <strike>'''function: ASLRequestTags()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: <strike>AROS implementation seems missing.</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31663]<br />
: Amiga implements it in utility unit systemvartags (see also unit: systemvartags)<br />
: MorphOS implements it in unit ASL<br />
* <strike>'''function: AslRequest()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: autodocs: BOOL AslRequest( APTR,struct TagItem * );<br />
: Amiga: FUNCTION AslRequest(requester : POINTER location 'a0'; tagList : pTagItem location 'a1') : LongInt; syscall AslBase 060;<br />
: AROS: function AslRequest(Requester: Pointer; const Tags: array of const): LongBool;<br />
: MorphOS: function AslRequest(requester: Pointer location 'a0'; tagList : pTagItem location 'a1'): LongBool; SysCall AslBase 060;<br />
* <strike>'''function: RequestFile()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: BOOL RequestFile(struct FileRequester *);<br />
: Amiga: FUNCTION RequestFile(fileReq : pFileRequester location 'a0') : LongInt; syscall AslBase 042;<br />
: Remark: Here the boolean return type is allowed (as is used on the other platforms)<br />
* <strike>'''function: AslRequest()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: BOOL AslRequest(APTR,struct TagItem *);<br />
: Amiga: FUNCTION AslRequest(requester: POINTER location 'a0'; tagList: pTagItem location 'a1'): LongInt; syscall AslBase 060;<br />
: Remark: Here the boolean return type is allowed (as is used on the other platforms)<br />
<br />
<br />
* <strike>'''function: BltClear()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: PROCEDURE BltClear(memBlock : pCHAR location 'a1'; byteCount : ULONG location 'd0'; flags : ULONG location 'd1'); syscall GfxBase 300;<br />
: AROS: procedure BltClear(MemBlock: Pointer; ByteCount: LongWord; Flags: LongWord); syscall GfxBase 50; deprecated;<br />
: MorphOS: procedure BltClear(memBlock : pCHAR location 'a1'; byteCount : CARDINAL location 'd0'; flags : CARDINAL location 'd1'); SysCall GfxBase 300;<br />
: Note: Parameter MemBlock should really be a generic pointer.<br />
* <strike>'''function: VideoControl()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: FUNCTION VideoControl(colorMap : pColorMap location 'a0'; tagarray : pTagItem location 'a1') : LongBool; syscall GfxBase 708;<br />
: AROS: function VideoControl(Cm: PColorMap; Tags: PTagItem): LongWord; syscall GfxBase 118; unimplemented;<br />
: MorphOS: function VideoControl(colorMap : pColorMap location 'a0'; tagarray : pTagItem location 'a1') : LongBool; SysCall GfxBase 708;<br />
: Note: suggest to use LongBool as return-type.<br />
* <strike>'''function: LoadRGB4()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: PROCEDURE LoadRGB4(vp : pViewPort location 'a0';const colors : pWord location 'a1'; count : LONGINT location 'd0'); syscall GfxBase 192;<br />
: AROS: procedure LoadRGB4(Vp: PViewPort; Colors: PWord; Count: LongInt); syscall GfxBase 32;<br />
: MorphOS: procedure LoadRGB4(vp : pViewPort location 'a0'; VAR colors : Integer location 'a1'; count : LongInt location 'd0'); SysCall GfxBase 192;<br />
: Note: This time MorphOS is the odd one out using var for colour parameter.<br />
<br />
<br />
* <strike>'''function: GetAttr()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: MorphOS uses a var for parameter Return-Value while Amiga + AROS uses a pointer. Autodocs states it to be a pointer.<br />
* <strike>'''function: AllocMem()''' '''(high priority)'''</strike> Fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31600]<br />
: MorphOS implemented it as ExecAllocMem<br />
: Amiga + AROS version have this function declared as AllocMem(), which is ambiguous with Free Pascal's AllocMem function.<br />
* <strike>'''function: Info()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: AutoDocs: BOOL = Info( BPTR, struct InfoData * )<br />
: Amiga declaration: FUNCTION Info(lock : LONGINT location 'd1'; parameterBlock : pInfoData location 'd2') : LongBool; syscall _DOSBase 114;<br />
: AROS declaration: function Info(Lock: BPTR; ParameterBlock: PInfoData): LongInt; syscall AOS_DOSBase 19;<br />
: MorphOS declaration: function Info(lock : LongInt location 'd1'; parameterBlock: PInfoData location 'd2'): LongInt; SysCall MOS_DOSBase 114;<br />
* <strike>'''macros: All MUI macros'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31607]<br />
: Amiga: The OBJ_xxx() macros are not implemented as macro's at all, rather as a cast to a particular structure in order to obtain information -> that is totally completely wickedly wrong.<br />
: MorphOS: See Amiga.<br />
* <strike>'''Constants: MUIX_R, MUIX_C, MUIX_L, MUIX_N, MUIX_B, MUIX_I, MUIX_U, MUIX_PT and MUIX_PH'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31607]<br />
: AMIGA + AROS: these MUI constants uses c-language escape code characters, which won't work for Free Pascal.<br />
: MorphOS: declared them as they should.<br />
* <strike>'''function: NextTagItem()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: autodocs: struct TagItem *NextTagItem(struct TagItem **);<br />
: Amiga: function NextTagItem(Item : ppTagItem location 'a0') : pTagItem; syscall _UtilityBase 048;<br />
: AROS: function NextTagItem(var Item: PTagItem): PTagItem; syscall AOS_UtilityBase 8;<br />
: MorphOS: function NextTagItem(tagListPtr: pPTagItem location 'a0'): PTagItem; SysCall MOS_UtilityBase 048;<br />
* <strike>'''function: ReadPixelArray8()'''</strike> fixed in [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31852]<br />
: autodocs: LONG ReadPixelArray8(struct RastPort *, UWORD, UWORD, UWORD, UWORD, UBYTE *, struct RastPort *);<br />
: Amiga: FUNCTION ReadPixelArray8(rp: pRastPort location 'a0'; xstart: ULONG location 'd0'; ystart: ULONG location 'd1'; xstop: ULONG location 'd2'; ystop: ULONG location 'd3'; array_: pointer location 'a2'; temprp: pRastPort location 'a1'): LONGINT; syscall GfxBase 780;<br />
: AROS: function ReadPixelArray8(Rp: PRastPort; xStart, yStart, xStop, yStop: LongWord; Array_: PByte; TempRp: PRastPort): LongInt; syscall GfxBase 130;<br />
: MorphOS: function ReadPixelArray8(rp: pRastPort location 'a0'; xstart: CARDINAL location 'd0'; ystart: CARDINAL location 'd1'; xstop: CARDINAL location 'd2'; ystop: CARDINAL location 'd3'; array1: pCHAR location 'a2'; temprp: pRastPort location 'a1'): LongInt; SysCall GfxBase 780;<br />
: Remark: PChar for pointing to Array data ?<br />
* <strike>'''function: WritePixelArray8()'''</strike><br />
: See: ReadPixelArray8()<br />
* <strike>'''function: PolyDraw()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31852]<br />
: Autodocs: void PolyDraw( struct RastPort *, WORD, WORD * );<br />
: Amiga: PROCEDURE PolyDraw(rp : pRastPort location 'a1'; count : LONGINT location 'd0';const polyTable : pLongint location 'a0'); syscall GfxBase 336;<br />
: AROS: procedure PolyDraw(Rp: PRastPort; Count: LongInt; PolyTable: PSmallInt); syscall GfxBase 56;<br />
: MorphOS: procedure PolyDraw(rp : pRastPort location 'a1'; count : LongInt location 'd0'; VAR polyTable : INTEGER location 'a0'); SysCall GfxBase 336;<br />
: Remark: MorphOS' use of var for argument polyTable is imho just plain weird and also dictates the array to consist out of integers. Amiga version dictates using LongInt for the PolyTable array.<br />
* <strike>'''type: PPObject_'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Missing for Amiga and MorphOS<br />
* <strike>'''function: TextLength()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: types the string parameter as pShortInt. Autodocs/Amiga/AROS uses type STRPTR.<br />
* <strike>'''function: Text()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: still called Text() while Amiga and AROS named it GfxText(). Also the string parameter for MorphOS is declared as pShortInt. Autodocs/Amiga/AROS uses type STRPTR.<br />
* <strike>'''const: ACTION_READ'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: Defines this constant as 'R', which is incompatible with TDOSPacket.dp_Type (LONG)<br />
: Remark: Amiga + AROS defines this constant as ACTION_READ = $52; // 'R' <br />
* <strike>'''const: ACTION_WRITE'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: Defines this constant as 'W', which is incompatible with TDOSPacket.dp_Type (LONG)<br />
: Remark: Amiga + AROS defines this constant as ACTION_WRITE = $57; // 'W' <br />
* <strike>'''Function: ReadArgs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: autodocs: struct RDArgs * ReadArgs(STRPTR, LONG *, struct RDArgs *)<br />
: Amiga: FUNCTION ReadArgs(const arg_template : pCHAR location 'd1'; arra : pLONGINT location 'd2'; args : pRDArgs location 'd3') : pRDArgs; syscall _DOSBase 798;<br />
: AROS: function ReadArgs(const Template: STRPTR; var Array_: IPTR; RdArgs: PRDArgs): PRDArgs; syscall AOS_DOSBase 133;<br />
: MorphOS: function ReadArgs(arg_template: PChar location 'd1'; var array1: LongInt location 'd2'; args: PRDArgs location 'd3'): PRDArgs; SysCall MOS_DOSBase 798;<br />
: Remark: using var for Array_ parameter is ok, but restricts when attempting to pass f.i. a record structure. Why not declare both variants in such cases ?<br />
* <strike>'''macro: RASSIZE()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: missing<br />
: MorphOS: missing<br />
* <strike>'''Const: MIDDLEUP'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: Missing<br />
: MorphOS: Missing<br />
* <strike>'''Const: MIDDLEDOWN'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: Missing<br />
: MorphOS: Missing<br />
* <strike>'''unit: diskfont'''</strike> fixed in triforce[https://github.com/magorium/fpc-triforce/commit/95dc1c869dac53da5a70f908a2f63c06d0853bd4], fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: missing<br />
* <strike>'''unit: CyberGraphics'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343]<br />
: MorphOS: Missing<br />
<br />
* <strike>'''function: ObtainBestPen()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: Missing<br />
* <strike>''' macro: DrawCircle'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: missing<br />
: MorphOS: missing<br />
* <strike>'''varargs function: BestModeID()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: missing<br />
<br />
* <strike>'''function: AllocDosObjectTags()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: Function missing.<br />
* <strike>'''function FPuts()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Autodocs: LONG FPuts(BPTR, STRPTR)<br />
: Amiga1: FUNCTION FPuts(fh : LONGINT location 'd1';const str : pCHAR location 'd2') : LongBool; syscall _DOSBase 342;<br />
: Amiga2: FUNCTION FPuts(fh : LONGINT;const str : string) : BOOLEAN;<br />
: AROS: function FPuts(File_: BPTR; const String_: STRPTR): LongInt; syscall AOS_DOSBase 57;<br />
: MorphOS: function FPuts(fh : LongInt location 'd1'; str: PChar location 'd2'): LongInt; SysCall MOS_DOSBase 342;<br />
: Remark: note the use of different return-types as well as not using BPTR for filehandle type.<br />
: Note: returns zero on success, -1 if an error occurs, so please forget using a boolean return type.<br />
* <strike>'''function: VFPrintf()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: AutoDocs: LONG = VFPrintf(BPTR, STRPTR, LONG *)<br />
: Amiga declaration: FUNCTION VFPrintf(fh : LONGINT location 'd1';const format : pCHAR location 'd2';const argarray : POINTER location 'd3') : LONGINT; syscall _DOSBase 354;<br />
: AROS declaration: function VFPrintf(Fh: BPTR; const format: STRPTR; const ArgArray: PLongInt): LongInt; syscall AOS_DOSBase 59;<br />
: MorphOS declaration: function VFPrintf(fh : LongInt location 'd1'; format: PChar location 'd2'; argarray: Pointer location 'd3'): LongInt; SysCall MOS_DOSBase 354;<br />
: NOTE: the generic pointer declaration prevents using "VFPrintf(nil/0, 'text', vargs );" where vargs = array of long.<br />
: Remark: AFAIK for AROS it is theoretically possible to pass 64-bit formatted values.<br />
<br />
* <strike>'''function: SetAttrs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga + MorphOS implementations seems missing<br />
* <strike>'''function: SetGadgetAttrs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS version seems missing<br />
* <strike>'''function: EasyRequest()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Missing<br />
: AROS: version with no array of const is missing -> forced to use [TAG_END, 0] <- extra 0 required for AROS due to small issue<br />
: MorphOS: Missing<br />
* <strike>'''field: dri_pens of structure tDrawInfo'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Autodocs: UWORD *dri_Pens; /* pointer to pen array */<br />
: Amiga: dri_Pens : Pointer; { pointer to pen array }<br />
: AROS: dri_Pens : PWord; // pointer to pen array<br />
: MorphOS: dri_Pens : Pointer; { pointer to pen array }<br />
: Remark: afaik the pen array is an array of word (for all platforms), so the only really practical type for dri_pens would then be a Pointer to an unsigned word<br />
* <strike>'''varargs function: SetWindowPointer()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Seems missing<br />
: MorphOS: Seems missing<br />
* <strike>'''function: CloseScreen()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Amiga declaration is still pre v36 (procedure), and does not return a boolean value (function) on success/failure which is the case on v36+ systems.<br />
<br />
* <strike>'''structure: TWindow field WScreen'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32643]<br />
: Autodocs: struct Screen *WScreen;<br />
: Amiga: WScreen : Pointer;<br />
: AROS: WScreen : PScreen; <br />
: MorphOS: WScreen : Pointer; <br />
: Status: Needs complete rewrite of intuition unit<br />
<br />
* <strike>'''type: TDateTime'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32644]<br />
: Amiga + AROS: declares this structure (and accompanied pointer) as TDateTime, <br />
: MorphOS: declares this structure _TDateTime and accompanied pointer _PDateTime<br />
: Remark: TDateTime declared in AmigaDOS conflicts with Free Pascal's declared TDateTime structure.<br />
* <strike>'''function: DateToStr()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32644]<br />
: All: This function conflicts with Free Pascal own DateToStr function. Renamed to DOSSateToStr (and StrToDate to DOSStrToDate)<br />
<br />
* <strike>'''record TmemChunk'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32682]<br />
: MorphOS: the field names right now are nc_Next and nc_Bytes -> should read '''m'''c_Next and '''m'''c_Bytes<br />
* <strike>'''vararg function: SystemTags()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32682]<br />
: MorphOS: missing.<br />
<br />
* <strike>'''record: TNewBroker'''</strike> (was already) fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32660]<br />
: Amiga: This structure seems aligned wrongly.<br />
: Note1: Packrecords c failed, packrecords 2 seems to work, but its influence on other record structure (InputXpression) was not tested (it uses two bytes as first entry in its structure).<br />
: Note2: Amiga and morphos sdk seems to use pragmapack #2, so also for the second structure.<br />
* <strike>'''function CxBroker()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32705]<br />
: AutoDocs: CxObj *CxBroker(struct NewBroker *,LONG *);<br />
: Amiga: 238 FUNCTION CxBroker(nb : pNewBroker location 'a0'; error : pCxObj location 'd0') : pCxObj; syscall CxBase 036;<br />
: Note: according to autodocs, error is a pointer to a generic LONG, not pCxObj;<br />
* <strike>'''function CreateCxObj()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32702]<br />
: AutoDocs: co = CreateCxObj(type,arg1,arg2); D0 = D0 A0 A1<br />
: Amiga: 237 FUNCTION CreateCxObj(typ : ULONG location 'd0'; arg1 : LONGINT location 'a1'; arg2 : LONGINT location 'a2') : pCxObj; syscall CxBase 030;<br />
: Note: notice different use of address registers. I have not faintest idea why they don't match. Maybe there's a valid reason ? (although aros and mos also uses same registers as stated by autodocs).<br />
<br />
* <strike>'''function: WriteStr()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32709]<br />
: On MorphOS this function seems declared as Amiga-function, which clashes with Free Pascal build-in function WriteStr. Strange as WriteStr seems only declared as dos/stdio.h macro.<br />
<br />
* <strike>'''function: ChangeSprite()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33235]<br />
: Amiga: PROCEDURE ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; newData : pWORD location 'a2'); syscall GfxBase 420;<br />
: AROS: procedure ChangeSprite(Vp: PViewPort; s: PSimpleSprite; NewData: Pointer); syscall GfxBase 70; unimplemented;<br />
: MorphOS: procedure ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; VAR newData : Integer location 'a2'); SysCall GfxBase 420;<br />
: Note: MOS version uses var for sprite data parameter. Should be opaque pointer type (perhaps also for amiga ?)<br />
<br />
<br />
== Some of your finest ==<br />
<br />
* AslRequest()<br />
<source lang="pascal"><br />
{$IFDEF AMIGA}<br />
if (AslRequest(fr, nil) <> 0) then<br />
{$ENDIF}<br />
{$IFDEF AROS}<br />
if (AslRequestA(fr, nil)) then<br />
{$ENDIF}<br />
{$IFDEF MORPHOS}<br />
if (AslRequest(fr, nil)) then<br />
{$ENDIF}<br />
begin<br />
// Could we now please check what the requester returned ?<br />
end;<br />
</source><br />
<br />
<br />
== Hardening trinity ==<br />
<br />
In order to circumvent some of the inconsistencies and incompatibilities, there was need for a solution without tempering with the RTL and/or default support units.<br />
<br />
That's were unit trinity comes into play, which solves some of the encountered issues (the unit itself is a work in progress). It provides the user with a way to solve things and let sources compile without too much hassle/workarounds.<br />
<br />
The latest version of unit trinity is kindly provided by Magorium and can be found [https://github.com/magorium/fpc-triforce/tree/master/Base/Trinity here].</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Trinity_in_Trouble&diff=1157Trinity in Trouble2021-06-18T17:08:04Z<p>Alb42: /* exec */ AVL functions fixed in trunk</p>
<hr />
<div><div style="background-color: #FFFF99; -khtml-border-radius: 15px; -moz-border-radius: 15px; -webkit-border-radius:<br />
15px; border: 2px solid #000; padding: 10px; margin:10px 200px 10px;"><br />
<center><br />
'''Note'''<br />
</center><br />
<br />
<center><br />
Based on Free Pascal branch "fixes 3.0"<br />
</center><br />
<br />
Feel free to add delete or change status.<br />
</div><br />
<br />
Our trinity consist of Amiga, AROS and MorphOS.<br />
<br />
Unfortunately, there are (still) some incompatibilities and/or some lack of consistency here and there. The idea is to have a list here that mentions them all. Layout may change, i simply had to start somewhere.<br />
<br />
NOTE: I thought there is no use to mention the Tag, Tags, Taglist, etc. inconsistency and additional incompatibilities that this causes. We are all aware of those and will hopefully get some unity in the future<br />
<br />
== Table of units ==<br />
<br />
The triforce repo introduced the usage of unit [//github.com/magorium/fpc-triforce/blob/master/Sys/Trinity/TriniTypes.pas trinitypes] in order to fight the type inconsistencies (at least for the new units, not the examples). The contents of trinitype will be extended as things progresses. A simple load-search-replace-save routine/program can be applied since the used types are fairly unique.<br />
<br />
{| class="wikitable"<br />
|+ List of available units per platform:<br />
|-<br />
! Unit !! Category !! OS3.x !! AROS !! MorphOS !! Remark(s)<br />
|-<br />
| [[#agraphics]] || graphics.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| ahi || ahi.device || class="working" | yes || class="progress" | MAG || class="working" | yes || <br />
|-<br />
| ahi_sub || ahi_sub.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| akeyboard || keyboard.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/akeyboard.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/akeyboard.pas test] || <br />
|-<br />
| amarquee || amarquee.library || class="working" | yes || class="unknown" | n/a || class="unknown" | n/a || <br />
|-<br />
| [[#amigados]] || dos.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| amigaguide || amigaguide.library || class="working" | yes || class="progress" | MAG || class="not" | no || No use though, AROS' lib functions are not implemented<br />
|-<br />
| [[#amigalib]] || amigalib || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigalib.pas test] || class="working" | yes || Unit amigalib has it's own status page, [[AmigaLib]]<br />
|-<br />
| amigaprinter || printer.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigaprinter.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/amigaprinter.pas test] || <br />
|-<br />
| aroslib || aros.library || class="unknown" | n/a || class="working" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/aroslib.pas yes] || class="unknown" | n/a || <br />
|-<br />
| [[#asl]] || asl.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| audio || audio.device || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| bootblock || bootblock.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| bullet || bullet.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| cd || cd.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| clipboard || clipboard.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| colorwheel || colorwheel.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| [[#commodities]] || commodities.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/commodities.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/commodities.pas test] ||<br />
|-<br />
| configregs || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configregs.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configregs.pas test] ||<br />
|-<br />
| configvars || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas test] ||<br />
|-<br />
| console || console.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/console.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/console.pas test] ||<br />
|-<br />
| conunit || console.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/conunit.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/conunit.pas test] ||<br />
|-<br />
| cgxvideo || || class="not" | no || class="not" | no || class="working" | [//svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343 yes] || Recently added to MorphOS by Chain-Q<br />
|-<br />
| cybergraphics || cybergraphics.library || class="working" | yes || class="working" | yes || class="working" | [//svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343 yes] || Recently added to MorphOS by Chain-Q<br />
|-<br />
| datatypes || datatypes.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/datatypes.pas test] || class="working" | yes || Unit source (AROS) is still a bit of a mess. Amiga version needs an overhaul (no PObject_ being used where it should -> concerns most if not all of declared functions).<br />
|-<br />
| diskfont || diskfont.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/diskfont.pas test] || A diskfont unit was added to MorphOS by Chain-Q<br />
|-<br />
| [[#exec]] || exec.library || class="working" | yes || class="working" | yes || class="working" | yes || MorphOS: noticed some things missing in comparison to SDK 3.9 (this is meant as a reminder to verify this unit)<br />
|-<br />
| [[#expansion]] || expansion.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansion.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansion.pas test] ||<br />
|-<br />
| expansionbase || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansionbase.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansionbase.pas test] ||<br />
|-<br />
| [[#gadtools]] || gadtools.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/gadtools.pas test] || <br />
|-<br />
| gameport || gameport.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| get9 || ? || class="unknown" | n/a || class="unknown" | n/a || class="working" | yes || silly MorphOS-only historic .library, Pascal interface unit exist as a joke, ignore this :) <br />
|-<br />
| gradientslider || gradientslider.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| gtlayout || gtlayout.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| guigfx || guigfx.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hardblocks || hardblocks.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hardware || hardware.resource || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| icon || icon.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/icon.pas test] ||<br />
|-<br />
| identify || identify.lbrary || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| iffparse || iffparse.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| input || input.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/input.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/input.pas test] || <br />
|-<br />
| inputevent || see input.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#intuition]] || intuition.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#keymap]] || keymap.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| kvm || ? || class="unknown" | n/a || class="unknown" | n/a || class="unknown" | n/a || This unit is now dropped. It was a helper unit for the KVM stuff, but it's no longer used, and it doesn't provide any other useful functionality. It's "API" was never meant for public use either. The idea was, mouse unit could be used w/o the video and keyboard, and doesn't depend on each other. But it doesn't really matter any more. I removed it from trunk.<br />
|-<br />
| layers || layers.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| locale || locale.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/locale.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/locale.pas test] || <br />
|-<br />
| lowlevel || lowlevel.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| lucyplay || lucyplay.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| mui || mui.library (ZUNE) || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| muihelper || see mui.library || class="not" | no || class="not" | no || class="working" | yes || MUIHelper contains some Pascal syntax-sugar and helpers for writing MUI code. It can be moved to ami-extra Package when it's verified it works everywhere.<br />
|-<br />
| mysticview || mysticview.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| nonvolatile || nonvolatile.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| parallel || parallel.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| picasso96api || picasso library || class="working" | yes || class="unknown" | n/a || class="unknown" | n/a || MorphOS and AROS don't have Picasso96 support.<br />
|-<br />
| preferences || preferences.library || class="working" | yes || class="not" | n/a || class="not" | no || <br />
|-<br />
| prefs || see preferences || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/prefs.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/prefs.pas test] || <br />
|-<br />
| prtbase || printer.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| prtgfx || ? || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| ptreplay || ptreplay.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| realtime || realtime.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| render || render.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| reqtools || reqtools.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| [[#rexx]] || rexxsyslib.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/rexx.pas test] || <br />
|-<br />
| romboot_base || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| scsidisk || scscidisk.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| serial || serial.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| tapedeck || tapedeck.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| timer || timer.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| tinygl || tinygl library || class="unknown" | n/a || class="unknown" | n/a || class="working" | yes || TinyGL is MorphOS specific and the unit there is only used to get the OpenGL package of FPC running.<br />
|-<br />
| trackdisk || trackdisk.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| translator || translator.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| triton || triton.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| tritonmacros || macros for triton || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| ttengine || ttengine.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| utility || utility.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#workbench]] || workbench.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/workbench.pas test] || <br />
|-<br />
| xadmaster || xadmaster.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| zlib || zlib.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
|<br />
<!-- Util Units --><br />
|-<br />
| <br />
|-<br />
| amigautils || amigautils || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| amsgbox || msgbox using easyasl || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| consoleio || crt using console || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| deadkeys || console deadkeys || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| doublebuffer || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| easyasl || easyasl.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hisoft || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| linklist || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| longarray || || class="working" | yes || class="working" | yes || class="not" | no || <br />
|-<br />
| pastoc || || class="working" | yes || class="not" | no || class="not" | no || This is deprecated, and must *not* be ported to other platforms.<br />
|-<br />
| pcq || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| systemvartags || || class="working" | yes || class="not" | no || class="not" | no || NOTE: this unit cannot be used when trying to create executables to be run on AROS-m68k because AROS misses bullet.library.<br />
|-<br />
| tagsarray || || class="working" | yes || class="working" | yes || class="not" | no || Tagsarray implementation is not thread safe, at least on classic.<br />
|-<br />
| timerutils || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere.<br />
|-<br />
| vartags || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| wbargs || || class="working" | yes || class="not" | no || class="not" | no || <br />
|}<br />
<br />
== List of issues ==<br />
<br />
=== agraphics ===<br />
<br />
* '''record: Isrvstr'''<br />
: AROS: Missing<br />
* '''var: GfxBase'''<br />
: AROS: type is PGfxBase<br />
: Amiga: type is PLibrary<br />
: MorphOS: type is Pointer<br />
: Note: According to rkrm it should be PGfxBase<br />
<br />
=== amigados ===<br />
<br />
* <strike> '''function: DOSRename()''' </strike> fixed in r49515<br />
: aros: function DOSRename(const OldName: STRPTR; const NewName: STRPTR): LongInt; syscall AOS_DOSBase 13;<br />
: os4: function DosRename(const OldName: STRPTR; const NewName: STRPTR): LongBool; syscall IDos 108;<br />
: os3: FUNCTION DOSRename(const oldName : pCHAR location 'd1';const newName : pCHAR location 'd2') : LongBool; syscall _DOSBase 078;<br />
: mos: function dosRename(oldName: PChar location 'd1'; newName: PChar location 'd2'): LongInt; SysCall MOS_DOSBase 78;<br />
: remark: PChar vs STRPTR (should be STRPTR) and LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: Examine()''' </strike> fixed in r49515<br />
: aros: function Examine(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongInt; syscall AOS_DOSBase 17;<br />
: os4: function Examine(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongBool; syscall IDos 124;<br />
: os3: FUNCTION Examine(lock: BPTR location 'd1'; fileInfoBlock: pFileInfoBlock location 'd2'): LongBool; syscall _DOSBase 102;<br />
: mos: function Examine(lock: BPTR location 'd1'; fileInfoBlock: PFileInfoBlock location 'd2'): LongInt; SysCall MOS_DOSBase 102;<br />
: remark: LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: Execute()''' </strike> fixed in r49515<br />
: aros: function Execute(const String_: STRPTR; Input: BPTR; Output: BPTR): LongInt; syscall AOS_DOSBase 37;<br />
: os4: function Execute(const String_: STRPTR; File_: BPTR; File2: BPTR): LongBool; syscall IDos 204;<br />
: os3: FUNCTION Execute(const string_ : pCHAR location 'd1'; file_ : LONGINT location 'd2'; file2 : LONGINT location 'd3') : LongBool; syscall _DOSBase 222;<br />
: mos: function Execute(string1: PChar location 'd1'; file1 : BPTR location 'd2'; file2 : BPTR location 'd3'): LongBool;<br />
: remark: PChar vs STRPTR (should be STRPTR), BPTR vs LONGINT (should be BPTR) and LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: ExNext()''' </strike> fixed in r49515<br />
: aros: function ExNext(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongInt; syscall AOS_DOSBase 18;<br />
: os4: function ExNext(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongBool; syscall IDos 128;<br />
: os3: FUNCTION ExNext(lock: BPTR location 'd1'; fileInfoBlock: pFileInfoBlock location 'd2'): LongBool; syscall _DOSBase 108;<br />
: mos: function ExNext(lock: BPTR location 'd1'; fileInfoBlock: PFileInfoBlock location 'd2'): LongInt; SysCall MOS_DOSBase 108;<br />
: remark: LongInt vs LongBool (should be BOOL)<br />
<br />
=== amigalib ===<br />
<br />
* '''function: CreatePort()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DeletePort()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: CreateExtIO()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DeleteExtIO()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DoMethod()'''<br />
: Amiga version seems missing completely.<br />
: Implemented versions for AROS and MorphOS don't follow autodocs 100% and are inconsistent.<br />
* '''function: CoerceMethod()'''<br />
: MorphOS version seems missing completely (including CoerceMethodA().<br />
: Amiga version has CoerceMethodA() implemented but no CoerceMethod()<br />
: Implemented versions for AROS and Amiga don't follow autodocs 100% and are inconsistent.<br />
<br />
<br />
=== asl ===<br />
<br />
AROS' implementation of asl uses 'modern' function names, ending with or without an A depending whether it's a varargs version or not. Amiga and MorphOS implementations uses 'old-style' naming scheme as dictated by classic autodocs. In order to 'fix' this, unit trinity re-declares asl functions using the 'old-style' naming scheme (it was the quickest fix).<br />
<br />
=== exec ===<br />
<br />
* '''structure: Hook'''<br />
: AROS version, entries are not IPTR rather APTR. [http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node0617.html#line27 Amiga version] uses ULONG's for h_entry and h_subentry, but that doesn't comply on 64-bit. AROS version can be found [https://trac.aros.org/trac/browser/AROS/branches/ABI_V0-on-trunk-20141231/AROS/compiler/include/utility/hooks.h?rev=51123 here].<br />
: Remark: In case it's compatibility holding back the change, i'm willing to create a multiplatform advanced record solution<br />
* <strike>'''function: NewCreateTask()''' </strike> fixed in r49516<br />
: AROS: missing.<br />
: Note: Most probably introduced when v0-on-trunk became v0.<br />
* <strike>'''function: AVL_FindNextNodeByKey()''' </strike> fixed in r49516<br />
: AROS: Missing of 3th parameter 'comparefunction'<br />
: AROS sdk: struct AVLNode *AVL_FindNextNodeByKey(const struct AVLNode *node, AVLKey key, AVLKEYCOMP func) (A0, A1, A2)<br />
* <strike>'''function: AVL_FindPrevNodeByKey()''' </strike> fixed in r49516<br />
: AROS: Missing of 3th parameter 'comparefunction'<br />
: AROS sdk: struct AVLNode *AVL_FindPrevNodeByKey(const struct AVLNode *root, AVLKey key, AVLKEYCOMP func) (A0, A1, A2)<br />
* <strike>'''function: AVL_FindNode()''' </strike> fixed in r49516<br />
: AROS: 3th parameter Func is declared as type PAVLNODECOMP. Should be PAVLKEYCOMP.<br />
* <strike>'''function: AVL_RemNodeByKey()''' </strike> fixed in r49516<br />
: AROS: 3th parameter Func is declared as type PAVLNODECOMP. Should be PAVLKEYCOMP.<br />
<br />
=== commodities ===<br />
<br />
=== expansion ===<br />
(see also other expansion support units)<br />
<br />
* '''syscall routine: ReadExpansionRom'''<br />
: Amiga: declared as procedure. autodocs are inconsistent (both procedure and function are being mentioned). AROS (also 68k) tells it is indeed a function and returning a bool.<br />
* '''syscall routine: ConfigBoard()'''<br />
: Amiga: declared as procedure. autodocs are inconsistent (both procedure and function are being mentioned). AROS (also 68k) tells it is indeed a function and returning a bool.<br />
<br />
=== gadtools ===<br />
<br />
* '''unit: gadtools'''<br />
: <strike>MorphOS: unit missing</strike> Available in fpc-triforce repo (for link see unit table). Waiting for testing/approval.<br />
* '''varargs function: CreateGadget()'''<br />
: AROS: missing<br />
* '''varargs function: CreateMenus()'''<br />
: AROS: missing<br />
* '''varargs function: DrawBevelBox()'''<br />
: AROS: missing<br />
* '''varargs function: GetVisualInfo()'''<br />
: AROS: missing<br />
* '''varargs function: GT_GetGadgetAttrs()'''<br />
: AROS: missing<br />
* '''varargs function: GT_SetGadgetAttrs()'''<br />
: AROS: missing<br />
* '''varargs function: LayoutMenuItems()'''<br />
: AROS: missing<br />
* '''varargs function: LayoutMenus()'''<br />
: AROS: missing<br />
* '''function: CreateContext()'''<br />
: Amiga SDK: struct Gadget *CreateContext(struct Gadget **);<br />
: AROS SDK: struct Gadget *CreateContext(struct Gadget **glistpointer) (A0)<br />
: Amiga: FUNCTION CreateContext(glistptr : pGadget location 'a0'): pGadget; syscall GadToolsBase 114;<br />
: AROS: function CreateContext(GListPtr: PGadget): PGadget; syscall GadToolsBase 19;<br />
: Note: glistpointer is a pointer to a pointer<br />
<br />
=== intuition ===<br />
<br />
=== keymap ===<br />
<br />
=== rexx ===<br />
<br />
=== workbench ===<br />
<br />
=== uncategorized ===<br />
<br />
== Fixed in triforce ==<br />
<br />
Additional units, added to triforce repo. Note that all issues listed above are already addressed with using unit trinity.<br />
<br />
* <strike>'''unit: akeyboard'''</strike> <!-- 20150928 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/akeyboard.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/akeyboard.pas]<br />
<br />
* <strike>'''unit: diskfont'''</strike> <!-- 20150929 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/diskfont.pas]<br />
<br />
* <strike>'''unit: prefs'''</strike> <!-- 20151001 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/prefs.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/prefs.pas]<br />
<br />
* <strike>'''unit: AmigaPrinter'''</strike> <!-- 20151002 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigaprinter.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/amigaprinter.pas]<br />
<br />
* <strike>'''unit: Datatypes'''</strike> <!-- 20151003 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/datatypes.pas]<br />
<br />
* <strike>'''unit: input'''</strike> <!-- 20151005 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/input.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/input.pas]<br />
<br />
* <strike>'''unit: workbench'''</strike> <!-- 20151026 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/workbench.pas]<br />
<br />
* <strike>'''unit: icon'''</strike> <!-- 20151027 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/icon.pas]<br />
<br />
* <strike>'''unit: locale'''</strike> <!-- 20151103 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/locale.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/locale.pas]<br />
<br />
* <strike>'''unit: gadtools'''</strike> <!-- 20151119 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/gadtools.pas]<br />
<br />
* <strike>'''unit: commodities'''</strike> <!-- 20151223 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/commodities.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/commodities.pas]<br />
<br />
* <strike>'''unit: configregs'''</strike> <!-- 20160106 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configregs.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configregs.pas]<br />
<br />
* <strike>'''unit: configvars'''</strike> <!-- 20160107 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas]<br />
<br />
* <strike>'''unit: configregs'''</strike> <!-- 20160107 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas]<br />
<br />
* <strike>'''unit: expansionbase'''</strike> <!-- 20160108 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansionbase.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansionbase.pas]<br />
<br />
* <strike>'''unit: expansion'''</strike> <!-- 20160109 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansion.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansion.pas]<br />
<br />
* <strike>'''unit: rexx'''</strike> <!-- 20160116 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/rexx.pas]<br />
<br />
* <strike>'''unit: aroslib'''</strike> <!-- 20160117 --><br />
: AROS: added to triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas]<br />
<br />
== Fixed in current trunk ==<br />
<br />
* <strike>'''unit: systemvartags'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33222]<br />
: This utility unit is Amiga specific and implements most if not all vartags versions of library-calls rendering it incompatible with AROS and MorphOS<br />
<br />
* <strike>'''function: AddAppIconA()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: struct AppIcon *AddAppIconA(ULONG, ULONG, char *, struct MsgPort *, BPTR, struct DiskObject *, struct TagItem *);<br />
: Amiga: FUNCTION AddAppIconA(id : ULONG location 'd0'; userdata : ULONG location 'd1'; text_ : pCHAR location 'a0'; msgport : pMsgPort location 'a1'; lock : pFileLock location 'a2'; diskobj : pDiskObject location 'a3'; const taglist : pTagItem location 'a4') : pAppIcon; syscall WorkbenchBase 060;<br />
: Note: lock parameter is of type BPTR not pFileLock<br />
* <strike>'''varargs function: AddAppIcon()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
:Amiga: Missing<br />
<br />
* <strike>'''function: DeleteArgstring()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: VOID DeleteArgstring(UBYTE* argstring:A0)<br />
: Amiga: procedure DeleteArgstring(argstring: PChar location 'd0'); syscall RexxSysBase 132;<br />
: Note: d0 as location ?<br />
<br />
* <strike>'''function: MapANSI()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: LONG MapANSI( STRPTR, LONG, STRPTR, LONG, struct KeyMap * );<br />
: MorphOS: function MapANSI(CONST strg : pSHORTINT location 'a0'; count : longint location 'd0'; buffer : pSHORTINT location 'a1'; length : longint location 'd1'; CONST keyMap : pKeyMap location 'a2') : longint; SysCall KeymapBase 048;<br />
: Note: PShortInt vs STRPTR for buffer/strg argument<br />
* <strike>'''function: MapRawKey()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: WORD MapRawKey( struct InputEvent *, STRPTR, WORD, struct Keymap * );<br />
: MorphOS: function MapRawKey(CONST event : pInputEvent location 'a0'; buffer : pSHORTINT location 'a1'; length : longint location 'd1'; CONST keyMap : pKeyMap location 'a2') : INTEGER; SysCall KeymapBase 042;<br />
: Note: PShortInt vs STRPTR for buffer argument<br />
<br />
* <strike>'''function: SetPointer()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: SetPointer( Window, Pointer, Height, Width, XOffset, YOffset )<br />
: AROS SDK: void SetPointer(struct Window * window, const UWORD* pointer, LONG height, LONG width, LONG xOffset, LONG yOffset );<br />
: MorphOS SDK: VOID SetPointer( struct Window *window, UWORD *pointer, LONG height, LONG width, LONG xOffset, LONG yOffset );<br />
: Amiga: PROCEDURE SetPointer(window : pWindow location 'a0'; pointer_ : pword location 'a1'; height : LONGINT location 'd0'; width : LONGINT location 'd1'; xOffset : LONGINT location 'd2'; yOffset : LONGINT location 'd3'); syscall _IntuitionBase 270;<br />
: AROS: procedure SetPointer(Window: PWindow; Pointer_: PWord; Height: LongInt; Width: LongInt; XOffset: LongInt; YOffset: LongInt); syscall IntuitionBase 45;<br />
: MorphOS: procedure SetPointer(window : pWindow location 'a0'; VAR pointer : Word location 'a1'; height : LongInt location 'd0'; width : LongInt location 'd1'; xOffset : LongInt location 'd2'; yOffset : LongInt location 'd3'); SysCall IntuitionBase 270;<br />
: Note: Using a var for pointerdata seems a bad idea. If must, then please provide both options.<br />
<br />
* <strike>'''structure: TExpansionControl()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: field ec_Reserved11 is currently advertised with name ec_Z3_HighBase<br />
<br />
* <strike>'''type: Tag'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: "typedef ULONG Tag;"<br />
: Amiga: "Type Tag = LongInt;"<br />
* <strike>'''record field: ti_Data of record tTagItem'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: "ULONG ti_Data;"<br />
: Amiga: "ti_Data : LongInt;"<br />
<br />
* <strike>'''function: ASLRequestTags()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: <strike>AROS implementation seems missing.</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31663]<br />
: Amiga implements it in utility unit systemvartags (see also unit: systemvartags)<br />
: MorphOS implements it in unit ASL<br />
* <strike>'''function: AslRequest()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: autodocs: BOOL AslRequest( APTR,struct TagItem * );<br />
: Amiga: FUNCTION AslRequest(requester : POINTER location 'a0'; tagList : pTagItem location 'a1') : LongInt; syscall AslBase 060;<br />
: AROS: function AslRequest(Requester: Pointer; const Tags: array of const): LongBool;<br />
: MorphOS: function AslRequest(requester: Pointer location 'a0'; tagList : pTagItem location 'a1'): LongBool; SysCall AslBase 060;<br />
* <strike>'''function: RequestFile()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: BOOL RequestFile(struct FileRequester *);<br />
: Amiga: FUNCTION RequestFile(fileReq : pFileRequester location 'a0') : LongInt; syscall AslBase 042;<br />
: Remark: Here the boolean return type is allowed (as is used on the other platforms)<br />
* <strike>'''function: AslRequest()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: BOOL AslRequest(APTR,struct TagItem *);<br />
: Amiga: FUNCTION AslRequest(requester: POINTER location 'a0'; tagList: pTagItem location 'a1'): LongInt; syscall AslBase 060;<br />
: Remark: Here the boolean return type is allowed (as is used on the other platforms)<br />
<br />
<br />
* <strike>'''function: BltClear()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: PROCEDURE BltClear(memBlock : pCHAR location 'a1'; byteCount : ULONG location 'd0'; flags : ULONG location 'd1'); syscall GfxBase 300;<br />
: AROS: procedure BltClear(MemBlock: Pointer; ByteCount: LongWord; Flags: LongWord); syscall GfxBase 50; deprecated;<br />
: MorphOS: procedure BltClear(memBlock : pCHAR location 'a1'; byteCount : CARDINAL location 'd0'; flags : CARDINAL location 'd1'); SysCall GfxBase 300;<br />
: Note: Parameter MemBlock should really be a generic pointer.<br />
* <strike>'''function: VideoControl()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: FUNCTION VideoControl(colorMap : pColorMap location 'a0'; tagarray : pTagItem location 'a1') : LongBool; syscall GfxBase 708;<br />
: AROS: function VideoControl(Cm: PColorMap; Tags: PTagItem): LongWord; syscall GfxBase 118; unimplemented;<br />
: MorphOS: function VideoControl(colorMap : pColorMap location 'a0'; tagarray : pTagItem location 'a1') : LongBool; SysCall GfxBase 708;<br />
: Note: suggest to use LongBool as return-type.<br />
* <strike>'''function: LoadRGB4()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: PROCEDURE LoadRGB4(vp : pViewPort location 'a0';const colors : pWord location 'a1'; count : LONGINT location 'd0'); syscall GfxBase 192;<br />
: AROS: procedure LoadRGB4(Vp: PViewPort; Colors: PWord; Count: LongInt); syscall GfxBase 32;<br />
: MorphOS: procedure LoadRGB4(vp : pViewPort location 'a0'; VAR colors : Integer location 'a1'; count : LongInt location 'd0'); SysCall GfxBase 192;<br />
: Note: This time MorphOS is the odd one out using var for colour parameter.<br />
<br />
<br />
* <strike>'''function: GetAttr()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: MorphOS uses a var for parameter Return-Value while Amiga + AROS uses a pointer. Autodocs states it to be a pointer.<br />
* <strike>'''function: AllocMem()''' '''(high priority)'''</strike> Fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31600]<br />
: MorphOS implemented it as ExecAllocMem<br />
: Amiga + AROS version have this function declared as AllocMem(), which is ambiguous with Free Pascal's AllocMem function.<br />
* <strike>'''function: Info()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: AutoDocs: BOOL = Info( BPTR, struct InfoData * )<br />
: Amiga declaration: FUNCTION Info(lock : LONGINT location 'd1'; parameterBlock : pInfoData location 'd2') : LongBool; syscall _DOSBase 114;<br />
: AROS declaration: function Info(Lock: BPTR; ParameterBlock: PInfoData): LongInt; syscall AOS_DOSBase 19;<br />
: MorphOS declaration: function Info(lock : LongInt location 'd1'; parameterBlock: PInfoData location 'd2'): LongInt; SysCall MOS_DOSBase 114;<br />
* <strike>'''macros: All MUI macros'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31607]<br />
: Amiga: The OBJ_xxx() macros are not implemented as macro's at all, rather as a cast to a particular structure in order to obtain information -> that is totally completely wickedly wrong.<br />
: MorphOS: See Amiga.<br />
* <strike>'''Constants: MUIX_R, MUIX_C, MUIX_L, MUIX_N, MUIX_B, MUIX_I, MUIX_U, MUIX_PT and MUIX_PH'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31607]<br />
: AMIGA + AROS: these MUI constants uses c-language escape code characters, which won't work for Free Pascal.<br />
: MorphOS: declared them as they should.<br />
* <strike>'''function: NextTagItem()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: autodocs: struct TagItem *NextTagItem(struct TagItem **);<br />
: Amiga: function NextTagItem(Item : ppTagItem location 'a0') : pTagItem; syscall _UtilityBase 048;<br />
: AROS: function NextTagItem(var Item: PTagItem): PTagItem; syscall AOS_UtilityBase 8;<br />
: MorphOS: function NextTagItem(tagListPtr: pPTagItem location 'a0'): PTagItem; SysCall MOS_UtilityBase 048;<br />
* <strike>'''function: ReadPixelArray8()'''</strike> fixed in [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31852]<br />
: autodocs: LONG ReadPixelArray8(struct RastPort *, UWORD, UWORD, UWORD, UWORD, UBYTE *, struct RastPort *);<br />
: Amiga: FUNCTION ReadPixelArray8(rp: pRastPort location 'a0'; xstart: ULONG location 'd0'; ystart: ULONG location 'd1'; xstop: ULONG location 'd2'; ystop: ULONG location 'd3'; array_: pointer location 'a2'; temprp: pRastPort location 'a1'): LONGINT; syscall GfxBase 780;<br />
: AROS: function ReadPixelArray8(Rp: PRastPort; xStart, yStart, xStop, yStop: LongWord; Array_: PByte; TempRp: PRastPort): LongInt; syscall GfxBase 130;<br />
: MorphOS: function ReadPixelArray8(rp: pRastPort location 'a0'; xstart: CARDINAL location 'd0'; ystart: CARDINAL location 'd1'; xstop: CARDINAL location 'd2'; ystop: CARDINAL location 'd3'; array1: pCHAR location 'a2'; temprp: pRastPort location 'a1'): LongInt; SysCall GfxBase 780;<br />
: Remark: PChar for pointing to Array data ?<br />
* <strike>'''function: WritePixelArray8()'''</strike><br />
: See: ReadPixelArray8()<br />
* <strike>'''function: PolyDraw()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31852]<br />
: Autodocs: void PolyDraw( struct RastPort *, WORD, WORD * );<br />
: Amiga: PROCEDURE PolyDraw(rp : pRastPort location 'a1'; count : LONGINT location 'd0';const polyTable : pLongint location 'a0'); syscall GfxBase 336;<br />
: AROS: procedure PolyDraw(Rp: PRastPort; Count: LongInt; PolyTable: PSmallInt); syscall GfxBase 56;<br />
: MorphOS: procedure PolyDraw(rp : pRastPort location 'a1'; count : LongInt location 'd0'; VAR polyTable : INTEGER location 'a0'); SysCall GfxBase 336;<br />
: Remark: MorphOS' use of var for argument polyTable is imho just plain weird and also dictates the array to consist out of integers. Amiga version dictates using LongInt for the PolyTable array.<br />
* <strike>'''type: PPObject_'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Missing for Amiga and MorphOS<br />
* <strike>'''function: TextLength()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: types the string parameter as pShortInt. Autodocs/Amiga/AROS uses type STRPTR.<br />
* <strike>'''function: Text()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: still called Text() while Amiga and AROS named it GfxText(). Also the string parameter for MorphOS is declared as pShortInt. Autodocs/Amiga/AROS uses type STRPTR.<br />
* <strike>'''const: ACTION_READ'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: Defines this constant as 'R', which is incompatible with TDOSPacket.dp_Type (LONG)<br />
: Remark: Amiga + AROS defines this constant as ACTION_READ = $52; // 'R' <br />
* <strike>'''const: ACTION_WRITE'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: Defines this constant as 'W', which is incompatible with TDOSPacket.dp_Type (LONG)<br />
: Remark: Amiga + AROS defines this constant as ACTION_WRITE = $57; // 'W' <br />
* <strike>'''Function: ReadArgs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: autodocs: struct RDArgs * ReadArgs(STRPTR, LONG *, struct RDArgs *)<br />
: Amiga: FUNCTION ReadArgs(const arg_template : pCHAR location 'd1'; arra : pLONGINT location 'd2'; args : pRDArgs location 'd3') : pRDArgs; syscall _DOSBase 798;<br />
: AROS: function ReadArgs(const Template: STRPTR; var Array_: IPTR; RdArgs: PRDArgs): PRDArgs; syscall AOS_DOSBase 133;<br />
: MorphOS: function ReadArgs(arg_template: PChar location 'd1'; var array1: LongInt location 'd2'; args: PRDArgs location 'd3'): PRDArgs; SysCall MOS_DOSBase 798;<br />
: Remark: using var for Array_ parameter is ok, but restricts when attempting to pass f.i. a record structure. Why not declare both variants in such cases ?<br />
* <strike>'''macro: RASSIZE()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: missing<br />
: MorphOS: missing<br />
* <strike>'''Const: MIDDLEUP'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: Missing<br />
: MorphOS: Missing<br />
* <strike>'''Const: MIDDLEDOWN'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: Missing<br />
: MorphOS: Missing<br />
* <strike>'''unit: diskfont'''</strike> fixed in triforce[https://github.com/magorium/fpc-triforce/commit/95dc1c869dac53da5a70f908a2f63c06d0853bd4], fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: missing<br />
* <strike>'''unit: CyberGraphics'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343]<br />
: MorphOS: Missing<br />
<br />
* <strike>'''function: ObtainBestPen()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: Missing<br />
* <strike>''' macro: DrawCircle'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: missing<br />
: MorphOS: missing<br />
* <strike>'''varargs function: BestModeID()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: missing<br />
<br />
* <strike>'''function: AllocDosObjectTags()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: Function missing.<br />
* <strike>'''function FPuts()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Autodocs: LONG FPuts(BPTR, STRPTR)<br />
: Amiga1: FUNCTION FPuts(fh : LONGINT location 'd1';const str : pCHAR location 'd2') : LongBool; syscall _DOSBase 342;<br />
: Amiga2: FUNCTION FPuts(fh : LONGINT;const str : string) : BOOLEAN;<br />
: AROS: function FPuts(File_: BPTR; const String_: STRPTR): LongInt; syscall AOS_DOSBase 57;<br />
: MorphOS: function FPuts(fh : LongInt location 'd1'; str: PChar location 'd2'): LongInt; SysCall MOS_DOSBase 342;<br />
: Remark: note the use of different return-types as well as not using BPTR for filehandle type.<br />
: Note: returns zero on success, -1 if an error occurs, so please forget using a boolean return type.<br />
* <strike>'''function: VFPrintf()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: AutoDocs: LONG = VFPrintf(BPTR, STRPTR, LONG *)<br />
: Amiga declaration: FUNCTION VFPrintf(fh : LONGINT location 'd1';const format : pCHAR location 'd2';const argarray : POINTER location 'd3') : LONGINT; syscall _DOSBase 354;<br />
: AROS declaration: function VFPrintf(Fh: BPTR; const format: STRPTR; const ArgArray: PLongInt): LongInt; syscall AOS_DOSBase 59;<br />
: MorphOS declaration: function VFPrintf(fh : LongInt location 'd1'; format: PChar location 'd2'; argarray: Pointer location 'd3'): LongInt; SysCall MOS_DOSBase 354;<br />
: NOTE: the generic pointer declaration prevents using "VFPrintf(nil/0, 'text', vargs );" where vargs = array of long.<br />
: Remark: AFAIK for AROS it is theoretically possible to pass 64-bit formatted values.<br />
<br />
* <strike>'''function: SetAttrs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga + MorphOS implementations seems missing<br />
* <strike>'''function: SetGadgetAttrs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS version seems missing<br />
* <strike>'''function: EasyRequest()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Missing<br />
: AROS: version with no array of const is missing -> forced to use [TAG_END, 0] <- extra 0 required for AROS due to small issue<br />
: MorphOS: Missing<br />
* <strike>'''field: dri_pens of structure tDrawInfo'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Autodocs: UWORD *dri_Pens; /* pointer to pen array */<br />
: Amiga: dri_Pens : Pointer; { pointer to pen array }<br />
: AROS: dri_Pens : PWord; // pointer to pen array<br />
: MorphOS: dri_Pens : Pointer; { pointer to pen array }<br />
: Remark: afaik the pen array is an array of word (for all platforms), so the only really practical type for dri_pens would then be a Pointer to an unsigned word<br />
* <strike>'''varargs function: SetWindowPointer()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Seems missing<br />
: MorphOS: Seems missing<br />
* <strike>'''function: CloseScreen()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Amiga declaration is still pre v36 (procedure), and does not return a boolean value (function) on success/failure which is the case on v36+ systems.<br />
<br />
* <strike>'''structure: TWindow field WScreen'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32643]<br />
: Autodocs: struct Screen *WScreen;<br />
: Amiga: WScreen : Pointer;<br />
: AROS: WScreen : PScreen; <br />
: MorphOS: WScreen : Pointer; <br />
: Status: Needs complete rewrite of intuition unit<br />
<br />
* <strike>'''type: TDateTime'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32644]<br />
: Amiga + AROS: declares this structure (and accompanied pointer) as TDateTime, <br />
: MorphOS: declares this structure _TDateTime and accompanied pointer _PDateTime<br />
: Remark: TDateTime declared in AmigaDOS conflicts with Free Pascal's declared TDateTime structure.<br />
* <strike>'''function: DateToStr()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32644]<br />
: All: This function conflicts with Free Pascal own DateToStr function. Renamed to DOSSateToStr (and StrToDate to DOSStrToDate)<br />
<br />
* <strike>'''record TmemChunk'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32682]<br />
: MorphOS: the field names right now are nc_Next and nc_Bytes -> should read '''m'''c_Next and '''m'''c_Bytes<br />
* <strike>'''vararg function: SystemTags()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32682]<br />
: MorphOS: missing.<br />
<br />
* <strike>'''record: TNewBroker'''</strike> (was already) fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32660]<br />
: Amiga: This structure seems aligned wrongly.<br />
: Note1: Packrecords c failed, packrecords 2 seems to work, but its influence on other record structure (InputXpression) was not tested (it uses two bytes as first entry in its structure).<br />
: Note2: Amiga and morphos sdk seems to use pragmapack #2, so also for the second structure.<br />
* <strike>'''function CxBroker()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32705]<br />
: AutoDocs: CxObj *CxBroker(struct NewBroker *,LONG *);<br />
: Amiga: 238 FUNCTION CxBroker(nb : pNewBroker location 'a0'; error : pCxObj location 'd0') : pCxObj; syscall CxBase 036;<br />
: Note: according to autodocs, error is a pointer to a generic LONG, not pCxObj;<br />
* <strike>'''function CreateCxObj()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32702]<br />
: AutoDocs: co = CreateCxObj(type,arg1,arg2); D0 = D0 A0 A1<br />
: Amiga: 237 FUNCTION CreateCxObj(typ : ULONG location 'd0'; arg1 : LONGINT location 'a1'; arg2 : LONGINT location 'a2') : pCxObj; syscall CxBase 030;<br />
: Note: notice different use of address registers. I have not faintest idea why they don't match. Maybe there's a valid reason ? (although aros and mos also uses same registers as stated by autodocs).<br />
<br />
* <strike>'''function: WriteStr()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32709]<br />
: On MorphOS this function seems declared as Amiga-function, which clashes with Free Pascal build-in function WriteStr. Strange as WriteStr seems only declared as dos/stdio.h macro.<br />
<br />
* <strike>'''function: ChangeSprite()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33235]<br />
: Amiga: PROCEDURE ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; newData : pWORD location 'a2'); syscall GfxBase 420;<br />
: AROS: procedure ChangeSprite(Vp: PViewPort; s: PSimpleSprite; NewData: Pointer); syscall GfxBase 70; unimplemented;<br />
: MorphOS: procedure ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; VAR newData : Integer location 'a2'); SysCall GfxBase 420;<br />
: Note: MOS version uses var for sprite data parameter. Should be opaque pointer type (perhaps also for amiga ?)<br />
<br />
<br />
== Some of your finest ==<br />
<br />
* AslRequest()<br />
<source lang="pascal"><br />
{$IFDEF AMIGA}<br />
if (AslRequest(fr, nil) <> 0) then<br />
{$ENDIF}<br />
{$IFDEF AROS}<br />
if (AslRequestA(fr, nil)) then<br />
{$ENDIF}<br />
{$IFDEF MORPHOS}<br />
if (AslRequest(fr, nil)) then<br />
{$ENDIF}<br />
begin<br />
// Could we now please check what the requester returned ?<br />
end;<br />
</source><br />
<br />
<br />
== Hardening trinity ==<br />
<br />
In order to circumvent some of the inconsistencies and incompatibilities, there was need for a solution without tempering with the RTL and/or default support units.<br />
<br />
That's were unit trinity comes into play, which solves some of the encountered issues (the unit itself is a work in progress). It provides the user with a way to solve things and let sources compile without too much hassle/workarounds.<br />
<br />
The latest version of unit trinity is kindly provided by Magorium and can be found [https://github.com/magorium/fpc-triforce/tree/master/Base/Trinity here].</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Trinity_in_Trouble&diff=1156Trinity in Trouble2021-06-18T16:38:16Z<p>Alb42: /* List of issues */ some fixes in latest trunk</p>
<hr />
<div><div style="background-color: #FFFF99; -khtml-border-radius: 15px; -moz-border-radius: 15px; -webkit-border-radius:<br />
15px; border: 2px solid #000; padding: 10px; margin:10px 200px 10px;"><br />
<center><br />
'''Note'''<br />
</center><br />
<br />
<center><br />
Based on Free Pascal branch "fixes 3.0"<br />
</center><br />
<br />
Feel free to add delete or change status.<br />
</div><br />
<br />
Our trinity consist of Amiga, AROS and MorphOS.<br />
<br />
Unfortunately, there are (still) some incompatibilities and/or some lack of consistency here and there. The idea is to have a list here that mentions them all. Layout may change, i simply had to start somewhere.<br />
<br />
NOTE: I thought there is no use to mention the Tag, Tags, Taglist, etc. inconsistency and additional incompatibilities that this causes. We are all aware of those and will hopefully get some unity in the future<br />
<br />
== Table of units ==<br />
<br />
The triforce repo introduced the usage of unit [//github.com/magorium/fpc-triforce/blob/master/Sys/Trinity/TriniTypes.pas trinitypes] in order to fight the type inconsistencies (at least for the new units, not the examples). The contents of trinitype will be extended as things progresses. A simple load-search-replace-save routine/program can be applied since the used types are fairly unique.<br />
<br />
{| class="wikitable"<br />
|+ List of available units per platform:<br />
|-<br />
! Unit !! Category !! OS3.x !! AROS !! MorphOS !! Remark(s)<br />
|-<br />
| [[#agraphics]] || graphics.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| ahi || ahi.device || class="working" | yes || class="progress" | MAG || class="working" | yes || <br />
|-<br />
| ahi_sub || ahi_sub.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| akeyboard || keyboard.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/akeyboard.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/akeyboard.pas test] || <br />
|-<br />
| amarquee || amarquee.library || class="working" | yes || class="unknown" | n/a || class="unknown" | n/a || <br />
|-<br />
| [[#amigados]] || dos.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| amigaguide || amigaguide.library || class="working" | yes || class="progress" | MAG || class="not" | no || No use though, AROS' lib functions are not implemented<br />
|-<br />
| [[#amigalib]] || amigalib || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigalib.pas test] || class="working" | yes || Unit amigalib has it's own status page, [[AmigaLib]]<br />
|-<br />
| amigaprinter || printer.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigaprinter.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/amigaprinter.pas test] || <br />
|-<br />
| aroslib || aros.library || class="unknown" | n/a || class="working" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/aroslib.pas yes] || class="unknown" | n/a || <br />
|-<br />
| [[#asl]] || asl.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| audio || audio.device || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| bootblock || bootblock.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| bullet || bullet.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| cd || cd.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| clipboard || clipboard.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| colorwheel || colorwheel.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| [[#commodities]] || commodities.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/commodities.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/commodities.pas test] ||<br />
|-<br />
| configregs || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configregs.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configregs.pas test] ||<br />
|-<br />
| configvars || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas test] ||<br />
|-<br />
| console || console.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/console.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/console.pas test] ||<br />
|-<br />
| conunit || console.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/conunit.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/conunit.pas test] ||<br />
|-<br />
| cgxvideo || || class="not" | no || class="not" | no || class="working" | [//svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343 yes] || Recently added to MorphOS by Chain-Q<br />
|-<br />
| cybergraphics || cybergraphics.library || class="working" | yes || class="working" | yes || class="working" | [//svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343 yes] || Recently added to MorphOS by Chain-Q<br />
|-<br />
| datatypes || datatypes.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/datatypes.pas test] || class="working" | yes || Unit source (AROS) is still a bit of a mess. Amiga version needs an overhaul (no PObject_ being used where it should -> concerns most if not all of declared functions).<br />
|-<br />
| diskfont || diskfont.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/diskfont.pas test] || A diskfont unit was added to MorphOS by Chain-Q<br />
|-<br />
| [[#exec]] || exec.library || class="working" | yes || class="working" | yes || class="working" | yes || MorphOS: noticed some things missing in comparison to SDK 3.9 (this is meant as a reminder to verify this unit)<br />
|-<br />
| [[#expansion]] || expansion.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansion.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansion.pas test] ||<br />
|-<br />
| expansionbase || see expansion || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansionbase.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansionbase.pas test] ||<br />
|-<br />
| [[#gadtools]] || gadtools.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/gadtools.pas test] || <br />
|-<br />
| gameport || gameport.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| get9 || ? || class="unknown" | n/a || class="unknown" | n/a || class="working" | yes || silly MorphOS-only historic .library, Pascal interface unit exist as a joke, ignore this :) <br />
|-<br />
| gradientslider || gradientslider.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| gtlayout || gtlayout.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| guigfx || guigfx.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hardblocks || hardblocks.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hardware || hardware.resource || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| icon || icon.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/icon.pas test] ||<br />
|-<br />
| identify || identify.lbrary || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| iffparse || iffparse.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| input || input.device || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/input.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/input.pas test] || <br />
|-<br />
| inputevent || see input.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#intuition]] || intuition.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#keymap]] || keymap.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| kvm || ? || class="unknown" | n/a || class="unknown" | n/a || class="unknown" | n/a || This unit is now dropped. It was a helper unit for the KVM stuff, but it's no longer used, and it doesn't provide any other useful functionality. It's "API" was never meant for public use either. The idea was, mouse unit could be used w/o the video and keyboard, and doesn't depend on each other. But it doesn't really matter any more. I removed it from trunk.<br />
|-<br />
| layers || layers.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| locale || locale.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/locale.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/locale.pas test] || <br />
|-<br />
| lowlevel || lowlevel.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| lucyplay || lucyplay.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| mui || mui.library (ZUNE) || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| muihelper || see mui.library || class="not" | no || class="not" | no || class="working" | yes || MUIHelper contains some Pascal syntax-sugar and helpers for writing MUI code. It can be moved to ami-extra Package when it's verified it works everywhere.<br />
|-<br />
| mysticview || mysticview.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| nonvolatile || nonvolatile.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| parallel || parallel.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| picasso96api || picasso library || class="working" | yes || class="unknown" | n/a || class="unknown" | n/a || MorphOS and AROS don't have Picasso96 support.<br />
|-<br />
| preferences || preferences.library || class="working" | yes || class="not" | n/a || class="not" | no || <br />
|-<br />
| prefs || see preferences || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/prefs.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/prefs.pas test] || <br />
|-<br />
| prtbase || printer.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| prtgfx || ? || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| ptreplay || ptreplay.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| realtime || realtime.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| render || render.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| reqtools || reqtools.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| [[#rexx]] || rexxsyslib.library || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/rexx.pas test] || <br />
|-<br />
| romboot_base || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| scsidisk || scscidisk.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| serial || serial.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| tapedeck || tapedeck.gadget || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| timer || timer.device || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| tinygl || tinygl library || class="unknown" | n/a || class="unknown" | n/a || class="working" | yes || TinyGL is MorphOS specific and the unit there is only used to get the OpenGL package of FPC running.<br />
|-<br />
| trackdisk || trackdisk.device || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| translator || translator.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| triton || triton.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| tritonmacros || macros for triton || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| ttengine || ttengine.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| utility || utility.library || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| [[#workbench]] || workbench.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/workbench.pas test] || <br />
|-<br />
| xadmaster || xadmaster.library || class="working" | yes || class="progress" | MAG || class="not" | no || <br />
|-<br />
| zlib || zlib.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
|<br />
<!-- Util Units --><br />
|-<br />
| <br />
|-<br />
| amigautils || amigautils || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| amsgbox || msgbox using easyasl || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| consoleio || crt using console || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| deadkeys || console deadkeys || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| doublebuffer || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| easyasl || easyasl.library || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| hisoft || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| linklist || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| longarray || || class="working" | yes || class="working" | yes || class="not" | no || <br />
|-<br />
| pastoc || || class="working" | yes || class="not" | no || class="not" | no || This is deprecated, and must *not* be ported to other platforms.<br />
|-<br />
| pcq || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| systemvartags || || class="working" | yes || class="not" | no || class="not" | no || NOTE: this unit cannot be used when trying to create executables to be run on AROS-m68k because AROS misses bullet.library.<br />
|-<br />
| tagsarray || || class="working" | yes || class="working" | yes || class="not" | no || Tagsarray implementation is not thread safe, at least on classic.<br />
|-<br />
| timerutils || || class="working" | yes || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere.<br />
|-<br />
| vartags || || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| wbargs || || class="working" | yes || class="not" | no || class="not" | no || <br />
|}<br />
<br />
== List of issues ==<br />
<br />
=== agraphics ===<br />
<br />
* '''record: Isrvstr'''<br />
: AROS: Missing<br />
* '''var: GfxBase'''<br />
: AROS: type is PGfxBase<br />
: Amiga: type is PLibrary<br />
: MorphOS: type is Pointer<br />
: Note: According to rkrm it should be PGfxBase<br />
<br />
=== amigados ===<br />
<br />
* <strike> '''function: DOSRename()''' </strike> fixed in r49515<br />
: aros: function DOSRename(const OldName: STRPTR; const NewName: STRPTR): LongInt; syscall AOS_DOSBase 13;<br />
: os4: function DosRename(const OldName: STRPTR; const NewName: STRPTR): LongBool; syscall IDos 108;<br />
: os3: FUNCTION DOSRename(const oldName : pCHAR location 'd1';const newName : pCHAR location 'd2') : LongBool; syscall _DOSBase 078;<br />
: mos: function dosRename(oldName: PChar location 'd1'; newName: PChar location 'd2'): LongInt; SysCall MOS_DOSBase 78;<br />
: remark: PChar vs STRPTR (should be STRPTR) and LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: Examine()''' </strike> fixed in r49515<br />
: aros: function Examine(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongInt; syscall AOS_DOSBase 17;<br />
: os4: function Examine(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongBool; syscall IDos 124;<br />
: os3: FUNCTION Examine(lock: BPTR location 'd1'; fileInfoBlock: pFileInfoBlock location 'd2'): LongBool; syscall _DOSBase 102;<br />
: mos: function Examine(lock: BPTR location 'd1'; fileInfoBlock: PFileInfoBlock location 'd2'): LongInt; SysCall MOS_DOSBase 102;<br />
: remark: LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: Execute()''' </strike> fixed in r49515<br />
: aros: function Execute(const String_: STRPTR; Input: BPTR; Output: BPTR): LongInt; syscall AOS_DOSBase 37;<br />
: os4: function Execute(const String_: STRPTR; File_: BPTR; File2: BPTR): LongBool; syscall IDos 204;<br />
: os3: FUNCTION Execute(const string_ : pCHAR location 'd1'; file_ : LONGINT location 'd2'; file2 : LONGINT location 'd3') : LongBool; syscall _DOSBase 222;<br />
: mos: function Execute(string1: PChar location 'd1'; file1 : BPTR location 'd2'; file2 : BPTR location 'd3'): LongBool;<br />
: remark: PChar vs STRPTR (should be STRPTR), BPTR vs LONGINT (should be BPTR) and LongInt vs LongBool (should be BOOL)<br />
<br />
* <strike> '''function: ExNext()''' </strike> fixed in r49515<br />
: aros: function ExNext(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongInt; syscall AOS_DOSBase 18;<br />
: os4: function ExNext(Lock: BPTR; FileInfoBlock: PFileInfoBlock): LongBool; syscall IDos 128;<br />
: os3: FUNCTION ExNext(lock: BPTR location 'd1'; fileInfoBlock: pFileInfoBlock location 'd2'): LongBool; syscall _DOSBase 108;<br />
: mos: function ExNext(lock: BPTR location 'd1'; fileInfoBlock: PFileInfoBlock location 'd2'): LongInt; SysCall MOS_DOSBase 108;<br />
: remark: LongInt vs LongBool (should be BOOL)<br />
<br />
=== amigalib ===<br />
<br />
* '''function: CreatePort()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DeletePort()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: CreateExtIO()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DeleteExtIO()'''<br />
: Missing for AROS and MorphOS<br />
* '''function: DoMethod()'''<br />
: Amiga version seems missing completely.<br />
: Implemented versions for AROS and MorphOS don't follow autodocs 100% and are inconsistent.<br />
* '''function: CoerceMethod()'''<br />
: MorphOS version seems missing completely (including CoerceMethodA().<br />
: Amiga version has CoerceMethodA() implemented but no CoerceMethod()<br />
: Implemented versions for AROS and Amiga don't follow autodocs 100% and are inconsistent.<br />
<br />
<br />
=== asl ===<br />
<br />
AROS' implementation of asl uses 'modern' function names, ending with or without an A depending whether it's a varargs version or not. Amiga and MorphOS implementations uses 'old-style' naming scheme as dictated by classic autodocs. In order to 'fix' this, unit trinity re-declares asl functions using the 'old-style' naming scheme (it was the quickest fix).<br />
<br />
=== exec ===<br />
<br />
* '''structure: Hook'''<br />
: AROS version, entries are not IPTR rather APTR. [http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node0617.html#line27 Amiga version] uses ULONG's for h_entry and h_subentry, but that doesn't comply on 64-bit. AROS version can be found [https://trac.aros.org/trac/browser/AROS/branches/ABI_V0-on-trunk-20141231/AROS/compiler/include/utility/hooks.h?rev=51123 here].<br />
: Remark: In case it's compatibility holding back the change, i'm willing to create a multiplatform advanced record solution<br />
* '''function: NewCreateTask()'''<br />
: AROS: missing.<br />
: Note: Most probably introduced when v0-on-trunk became v0.<br />
* '''function: AVL_FindNextNodeByKey()'''<br />
: AROS: Missing of 3th parameter 'comparefunction'<br />
: AROS sdk: struct AVLNode *AVL_FindNextNodeByKey(const struct AVLNode *node, AVLKey key, AVLKEYCOMP func) (A0, A1, A2)<br />
* '''function: AVL_FindPrevNodeByKey()'''<br />
: AROS: Missing of 3th parameter 'comparefunction'<br />
: AROS sdk: struct AVLNode *AVL_FindPrevNodeByKey(const struct AVLNode *root, AVLKey key, AVLKEYCOMP func) (A0, A1, A2)<br />
* '''function: AVL_FindNode()'''<br />
: AROS: 3th parameter Func is declared as type PAVLNODECOMP. Should be PAVLKEYCOMP.<br />
* '''function: AVL_RemNodeByKey()'''<br />
: AROS: 3th parameter Func is declared as type PAVLNODECOMP. Should be PAVLKEYCOMP.<br />
<br />
=== commodities ===<br />
<br />
=== expansion ===<br />
(see also other expansion support units)<br />
<br />
* '''syscall routine: ReadExpansionRom'''<br />
: Amiga: declared as procedure. autodocs are inconsistent (both procedure and function are being mentioned). AROS (also 68k) tells it is indeed a function and returning a bool.<br />
* '''syscall routine: ConfigBoard()'''<br />
: Amiga: declared as procedure. autodocs are inconsistent (both procedure and function are being mentioned). AROS (also 68k) tells it is indeed a function and returning a bool.<br />
<br />
=== gadtools ===<br />
<br />
* '''unit: gadtools'''<br />
: <strike>MorphOS: unit missing</strike> Available in fpc-triforce repo (for link see unit table). Waiting for testing/approval.<br />
* '''varargs function: CreateGadget()'''<br />
: AROS: missing<br />
* '''varargs function: CreateMenus()'''<br />
: AROS: missing<br />
* '''varargs function: DrawBevelBox()'''<br />
: AROS: missing<br />
* '''varargs function: GetVisualInfo()'''<br />
: AROS: missing<br />
* '''varargs function: GT_GetGadgetAttrs()'''<br />
: AROS: missing<br />
* '''varargs function: GT_SetGadgetAttrs()'''<br />
: AROS: missing<br />
* '''varargs function: LayoutMenuItems()'''<br />
: AROS: missing<br />
* '''varargs function: LayoutMenus()'''<br />
: AROS: missing<br />
* '''function: CreateContext()'''<br />
: Amiga SDK: struct Gadget *CreateContext(struct Gadget **);<br />
: AROS SDK: struct Gadget *CreateContext(struct Gadget **glistpointer) (A0)<br />
: Amiga: FUNCTION CreateContext(glistptr : pGadget location 'a0'): pGadget; syscall GadToolsBase 114;<br />
: AROS: function CreateContext(GListPtr: PGadget): PGadget; syscall GadToolsBase 19;<br />
: Note: glistpointer is a pointer to a pointer<br />
<br />
=== intuition ===<br />
<br />
=== keymap ===<br />
<br />
=== rexx ===<br />
<br />
=== workbench ===<br />
<br />
=== uncategorized ===<br />
<br />
== Fixed in triforce ==<br />
<br />
Additional units, added to triforce repo. Note that all issues listed above are already addressed with using unit trinity.<br />
<br />
* <strike>'''unit: akeyboard'''</strike> <!-- 20150928 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/akeyboard.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/akeyboard.pas]<br />
<br />
* <strike>'''unit: diskfont'''</strike> <!-- 20150929 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/diskfont.pas]<br />
<br />
* <strike>'''unit: prefs'''</strike> <!-- 20151001 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/prefs.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/prefs.pas]<br />
<br />
* <strike>'''unit: AmigaPrinter'''</strike> <!-- 20151002 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigaprinter.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/amigaprinter.pas]<br />
<br />
* <strike>'''unit: Datatypes'''</strike> <!-- 20151003 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/datatypes.pas]<br />
<br />
* <strike>'''unit: input'''</strike> <!-- 20151005 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/input.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/input.pas]<br />
<br />
* <strike>'''unit: workbench'''</strike> <!-- 20151026 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/workbench.pas]<br />
<br />
* <strike>'''unit: icon'''</strike> <!-- 20151027 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/icon.pas]<br />
<br />
* <strike>'''unit: locale'''</strike> <!-- 20151103 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/locale.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/locale.pas]<br />
<br />
* <strike>'''unit: gadtools'''</strike> <!-- 20151119 --><br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/gadtools.pas]<br />
<br />
* <strike>'''unit: commodities'''</strike> <!-- 20151223 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/commodities.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/commodities.pas]<br />
<br />
* <strike>'''unit: configregs'''</strike> <!-- 20160106 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configregs.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configregs.pas]<br />
<br />
* <strike>'''unit: configvars'''</strike> <!-- 20160107 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas]<br />
<br />
* <strike>'''unit: configregs'''</strike> <!-- 20160107 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas]<br />
<br />
* <strike>'''unit: expansionbase'''</strike> <!-- 20160108 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansionbase.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansionbase.pas]<br />
<br />
* <strike>'''unit: expansion'''</strike> <!-- 20160109 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansion.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansion.pas]<br />
<br />
* <strike>'''unit: rexx'''</strike> <!-- 20160116 --><br />
: AROS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas]<br />
: MorphOS: missing | fixed in triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/rexx.pas]<br />
<br />
* <strike>'''unit: aroslib'''</strike> <!-- 20160117 --><br />
: AROS: added to triforce[https://github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas]<br />
<br />
== Fixed in current trunk ==<br />
<br />
* <strike>'''unit: systemvartags'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33222]<br />
: This utility unit is Amiga specific and implements most if not all vartags versions of library-calls rendering it incompatible with AROS and MorphOS<br />
<br />
* <strike>'''function: AddAppIconA()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: struct AppIcon *AddAppIconA(ULONG, ULONG, char *, struct MsgPort *, BPTR, struct DiskObject *, struct TagItem *);<br />
: Amiga: FUNCTION AddAppIconA(id : ULONG location 'd0'; userdata : ULONG location 'd1'; text_ : pCHAR location 'a0'; msgport : pMsgPort location 'a1'; lock : pFileLock location 'a2'; diskobj : pDiskObject location 'a3'; const taglist : pTagItem location 'a4') : pAppIcon; syscall WorkbenchBase 060;<br />
: Note: lock parameter is of type BPTR not pFileLock<br />
* <strike>'''varargs function: AddAppIcon()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
:Amiga: Missing<br />
<br />
* <strike>'''function: DeleteArgstring()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: VOID DeleteArgstring(UBYTE* argstring:A0)<br />
: Amiga: procedure DeleteArgstring(argstring: PChar location 'd0'); syscall RexxSysBase 132;<br />
: Note: d0 as location ?<br />
<br />
* <strike>'''function: MapANSI()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: LONG MapANSI( STRPTR, LONG, STRPTR, LONG, struct KeyMap * );<br />
: MorphOS: function MapANSI(CONST strg : pSHORTINT location 'a0'; count : longint location 'd0'; buffer : pSHORTINT location 'a1'; length : longint location 'd1'; CONST keyMap : pKeyMap location 'a2') : longint; SysCall KeymapBase 048;<br />
: Note: PShortInt vs STRPTR for buffer/strg argument<br />
* <strike>'''function: MapRawKey()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: WORD MapRawKey( struct InputEvent *, STRPTR, WORD, struct Keymap * );<br />
: MorphOS: function MapRawKey(CONST event : pInputEvent location 'a0'; buffer : pSHORTINT location 'a1'; length : longint location 'd1'; CONST keyMap : pKeyMap location 'a2') : INTEGER; SysCall KeymapBase 042;<br />
: Note: PShortInt vs STRPTR for buffer argument<br />
<br />
* <strike>'''function: SetPointer()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga SDK: SetPointer( Window, Pointer, Height, Width, XOffset, YOffset )<br />
: AROS SDK: void SetPointer(struct Window * window, const UWORD* pointer, LONG height, LONG width, LONG xOffset, LONG yOffset );<br />
: MorphOS SDK: VOID SetPointer( struct Window *window, UWORD *pointer, LONG height, LONG width, LONG xOffset, LONG yOffset );<br />
: Amiga: PROCEDURE SetPointer(window : pWindow location 'a0'; pointer_ : pword location 'a1'; height : LONGINT location 'd0'; width : LONGINT location 'd1'; xOffset : LONGINT location 'd2'; yOffset : LONGINT location 'd3'); syscall _IntuitionBase 270;<br />
: AROS: procedure SetPointer(Window: PWindow; Pointer_: PWord; Height: LongInt; Width: LongInt; XOffset: LongInt; YOffset: LongInt); syscall IntuitionBase 45;<br />
: MorphOS: procedure SetPointer(window : pWindow location 'a0'; VAR pointer : Word location 'a1'; height : LongInt location 'd0'; width : LongInt location 'd1'; xOffset : LongInt location 'd2'; yOffset : LongInt location 'd3'); SysCall IntuitionBase 270;<br />
: Note: Using a var for pointerdata seems a bad idea. If must, then please provide both options.<br />
<br />
* <strike>'''structure: TExpansionControl()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: field ec_Reserved11 is currently advertised with name ec_Z3_HighBase<br />
<br />
* <strike>'''type: Tag'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: "typedef ULONG Tag;"<br />
: Amiga: "Type Tag = LongInt;"<br />
* <strike>'''record field: ti_Data of record tTagItem'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: "ULONG ti_Data;"<br />
: Amiga: "ti_Data : LongInt;"<br />
<br />
* <strike>'''function: ASLRequestTags()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: <strike>AROS implementation seems missing.</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31663]<br />
: Amiga implements it in utility unit systemvartags (see also unit: systemvartags)<br />
: MorphOS implements it in unit ASL<br />
* <strike>'''function: AslRequest()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: autodocs: BOOL AslRequest( APTR,struct TagItem * );<br />
: Amiga: FUNCTION AslRequest(requester : POINTER location 'a0'; tagList : pTagItem location 'a1') : LongInt; syscall AslBase 060;<br />
: AROS: function AslRequest(Requester: Pointer; const Tags: array of const): LongBool;<br />
: MorphOS: function AslRequest(requester: Pointer location 'a0'; tagList : pTagItem location 'a1'): LongBool; SysCall AslBase 060;<br />
* <strike>'''function: RequestFile()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: BOOL RequestFile(struct FileRequester *);<br />
: Amiga: FUNCTION RequestFile(fileReq : pFileRequester location 'a0') : LongInt; syscall AslBase 042;<br />
: Remark: Here the boolean return type is allowed (as is used on the other platforms)<br />
* <strike>'''function: AslRequest()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Autodocs: BOOL AslRequest(APTR,struct TagItem *);<br />
: Amiga: FUNCTION AslRequest(requester: POINTER location 'a0'; tagList: pTagItem location 'a1'): LongInt; syscall AslBase 060;<br />
: Remark: Here the boolean return type is allowed (as is used on the other platforms)<br />
<br />
<br />
* <strike>'''function: BltClear()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: PROCEDURE BltClear(memBlock : pCHAR location 'a1'; byteCount : ULONG location 'd0'; flags : ULONG location 'd1'); syscall GfxBase 300;<br />
: AROS: procedure BltClear(MemBlock: Pointer; ByteCount: LongWord; Flags: LongWord); syscall GfxBase 50; deprecated;<br />
: MorphOS: procedure BltClear(memBlock : pCHAR location 'a1'; byteCount : CARDINAL location 'd0'; flags : CARDINAL location 'd1'); SysCall GfxBase 300;<br />
: Note: Parameter MemBlock should really be a generic pointer.<br />
* <strike>'''function: VideoControl()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: FUNCTION VideoControl(colorMap : pColorMap location 'a0'; tagarray : pTagItem location 'a1') : LongBool; syscall GfxBase 708;<br />
: AROS: function VideoControl(Cm: PColorMap; Tags: PTagItem): LongWord; syscall GfxBase 118; unimplemented;<br />
: MorphOS: function VideoControl(colorMap : pColorMap location 'a0'; tagarray : pTagItem location 'a1') : LongBool; SysCall GfxBase 708;<br />
: Note: suggest to use LongBool as return-type.<br />
* <strike>'''function: LoadRGB4()'''</strike> [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33225]<br />
: Amiga: PROCEDURE LoadRGB4(vp : pViewPort location 'a0';const colors : pWord location 'a1'; count : LONGINT location 'd0'); syscall GfxBase 192;<br />
: AROS: procedure LoadRGB4(Vp: PViewPort; Colors: PWord; Count: LongInt); syscall GfxBase 32;<br />
: MorphOS: procedure LoadRGB4(vp : pViewPort location 'a0'; VAR colors : Integer location 'a1'; count : LongInt location 'd0'); SysCall GfxBase 192;<br />
: Note: This time MorphOS is the odd one out using var for colour parameter.<br />
<br />
<br />
* <strike>'''function: GetAttr()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: MorphOS uses a var for parameter Return-Value while Amiga + AROS uses a pointer. Autodocs states it to be a pointer.<br />
* <strike>'''function: AllocMem()''' '''(high priority)'''</strike> Fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31600]<br />
: MorphOS implemented it as ExecAllocMem<br />
: Amiga + AROS version have this function declared as AllocMem(), which is ambiguous with Free Pascal's AllocMem function.<br />
* <strike>'''function: Info()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: AutoDocs: BOOL = Info( BPTR, struct InfoData * )<br />
: Amiga declaration: FUNCTION Info(lock : LONGINT location 'd1'; parameterBlock : pInfoData location 'd2') : LongBool; syscall _DOSBase 114;<br />
: AROS declaration: function Info(Lock: BPTR; ParameterBlock: PInfoData): LongInt; syscall AOS_DOSBase 19;<br />
: MorphOS declaration: function Info(lock : LongInt location 'd1'; parameterBlock: PInfoData location 'd2'): LongInt; SysCall MOS_DOSBase 114;<br />
* <strike>'''macros: All MUI macros'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31607]<br />
: Amiga: The OBJ_xxx() macros are not implemented as macro's at all, rather as a cast to a particular structure in order to obtain information -> that is totally completely wickedly wrong.<br />
: MorphOS: See Amiga.<br />
* <strike>'''Constants: MUIX_R, MUIX_C, MUIX_L, MUIX_N, MUIX_B, MUIX_I, MUIX_U, MUIX_PT and MUIX_PH'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31607]<br />
: AMIGA + AROS: these MUI constants uses c-language escape code characters, which won't work for Free Pascal.<br />
: MorphOS: declared them as they should.<br />
* <strike>'''function: NextTagItem()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31606]<br />
: autodocs: struct TagItem *NextTagItem(struct TagItem **);<br />
: Amiga: function NextTagItem(Item : ppTagItem location 'a0') : pTagItem; syscall _UtilityBase 048;<br />
: AROS: function NextTagItem(var Item: PTagItem): PTagItem; syscall AOS_UtilityBase 8;<br />
: MorphOS: function NextTagItem(tagListPtr: pPTagItem location 'a0'): PTagItem; SysCall MOS_UtilityBase 048;<br />
* <strike>'''function: ReadPixelArray8()'''</strike> fixed in [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31852]<br />
: autodocs: LONG ReadPixelArray8(struct RastPort *, UWORD, UWORD, UWORD, UWORD, UBYTE *, struct RastPort *);<br />
: Amiga: FUNCTION ReadPixelArray8(rp: pRastPort location 'a0'; xstart: ULONG location 'd0'; ystart: ULONG location 'd1'; xstop: ULONG location 'd2'; ystop: ULONG location 'd3'; array_: pointer location 'a2'; temprp: pRastPort location 'a1'): LONGINT; syscall GfxBase 780;<br />
: AROS: function ReadPixelArray8(Rp: PRastPort; xStart, yStart, xStop, yStop: LongWord; Array_: PByte; TempRp: PRastPort): LongInt; syscall GfxBase 130;<br />
: MorphOS: function ReadPixelArray8(rp: pRastPort location 'a0'; xstart: CARDINAL location 'd0'; ystart: CARDINAL location 'd1'; xstop: CARDINAL location 'd2'; ystop: CARDINAL location 'd3'; array1: pCHAR location 'a2'; temprp: pRastPort location 'a1'): LongInt; SysCall GfxBase 780;<br />
: Remark: PChar for pointing to Array data ?<br />
* <strike>'''function: WritePixelArray8()'''</strike><br />
: See: ReadPixelArray8()<br />
* <strike>'''function: PolyDraw()'''</strike> fixed in trunk [http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31852]<br />
: Autodocs: void PolyDraw( struct RastPort *, WORD, WORD * );<br />
: Amiga: PROCEDURE PolyDraw(rp : pRastPort location 'a1'; count : LONGINT location 'd0';const polyTable : pLongint location 'a0'); syscall GfxBase 336;<br />
: AROS: procedure PolyDraw(Rp: PRastPort; Count: LongInt; PolyTable: PSmallInt); syscall GfxBase 56;<br />
: MorphOS: procedure PolyDraw(rp : pRastPort location 'a1'; count : LongInt location 'd0'; VAR polyTable : INTEGER location 'a0'); SysCall GfxBase 336;<br />
: Remark: MorphOS' use of var for argument polyTable is imho just plain weird and also dictates the array to consist out of integers. Amiga version dictates using LongInt for the PolyTable array.<br />
* <strike>'''type: PPObject_'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Missing for Amiga and MorphOS<br />
* <strike>'''function: TextLength()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: types the string parameter as pShortInt. Autodocs/Amiga/AROS uses type STRPTR.<br />
* <strike>'''function: Text()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: still called Text() while Amiga and AROS named it GfxText(). Also the string parameter for MorphOS is declared as pShortInt. Autodocs/Amiga/AROS uses type STRPTR.<br />
* <strike>'''const: ACTION_READ'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: Defines this constant as 'R', which is incompatible with TDOSPacket.dp_Type (LONG)<br />
: Remark: Amiga + AROS defines this constant as ACTION_READ = $52; // 'R' <br />
* <strike>'''const: ACTION_WRITE'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: Defines this constant as 'W', which is incompatible with TDOSPacket.dp_Type (LONG)<br />
: Remark: Amiga + AROS defines this constant as ACTION_WRITE = $57; // 'W' <br />
* <strike>'''Function: ReadArgs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: autodocs: struct RDArgs * ReadArgs(STRPTR, LONG *, struct RDArgs *)<br />
: Amiga: FUNCTION ReadArgs(const arg_template : pCHAR location 'd1'; arra : pLONGINT location 'd2'; args : pRDArgs location 'd3') : pRDArgs; syscall _DOSBase 798;<br />
: AROS: function ReadArgs(const Template: STRPTR; var Array_: IPTR; RdArgs: PRDArgs): PRDArgs; syscall AOS_DOSBase 133;<br />
: MorphOS: function ReadArgs(arg_template: PChar location 'd1'; var array1: LongInt location 'd2'; args: PRDArgs location 'd3'): PRDArgs; SysCall MOS_DOSBase 798;<br />
: Remark: using var for Array_ parameter is ok, but restricts when attempting to pass f.i. a record structure. Why not declare both variants in such cases ?<br />
* <strike>'''macro: RASSIZE()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: missing<br />
: MorphOS: missing<br />
* <strike>'''Const: MIDDLEUP'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: Missing<br />
: MorphOS: Missing<br />
* <strike>'''Const: MIDDLEDOWN'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: Amiga: Missing<br />
: MorphOS: Missing<br />
* <strike>'''unit: diskfont'''</strike> fixed in triforce[https://github.com/magorium/fpc-triforce/commit/95dc1c869dac53da5a70f908a2f63c06d0853bd4], fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=31854]<br />
: MorphOS: missing<br />
* <strike>'''unit: CyberGraphics'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343]<br />
: MorphOS: Missing<br />
<br />
* <strike>'''function: ObtainBestPen()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: Missing<br />
* <strike>''' macro: DrawCircle'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: missing<br />
: MorphOS: missing<br />
* <strike>'''varargs function: BestModeID()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: missing<br />
<br />
* <strike>'''function: AllocDosObjectTags()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS: Function missing.<br />
* <strike>'''function FPuts()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Autodocs: LONG FPuts(BPTR, STRPTR)<br />
: Amiga1: FUNCTION FPuts(fh : LONGINT location 'd1';const str : pCHAR location 'd2') : LongBool; syscall _DOSBase 342;<br />
: Amiga2: FUNCTION FPuts(fh : LONGINT;const str : string) : BOOLEAN;<br />
: AROS: function FPuts(File_: BPTR; const String_: STRPTR): LongInt; syscall AOS_DOSBase 57;<br />
: MorphOS: function FPuts(fh : LongInt location 'd1'; str: PChar location 'd2'): LongInt; SysCall MOS_DOSBase 342;<br />
: Remark: note the use of different return-types as well as not using BPTR for filehandle type.<br />
: Note: returns zero on success, -1 if an error occurs, so please forget using a boolean return type.<br />
* <strike>'''function: VFPrintf()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: AutoDocs: LONG = VFPrintf(BPTR, STRPTR, LONG *)<br />
: Amiga declaration: FUNCTION VFPrintf(fh : LONGINT location 'd1';const format : pCHAR location 'd2';const argarray : POINTER location 'd3') : LONGINT; syscall _DOSBase 354;<br />
: AROS declaration: function VFPrintf(Fh: BPTR; const format: STRPTR; const ArgArray: PLongInt): LongInt; syscall AOS_DOSBase 59;<br />
: MorphOS declaration: function VFPrintf(fh : LongInt location 'd1'; format: PChar location 'd2'; argarray: Pointer location 'd3'): LongInt; SysCall MOS_DOSBase 354;<br />
: NOTE: the generic pointer declaration prevents using "VFPrintf(nil/0, 'text', vargs );" where vargs = array of long.<br />
: Remark: AFAIK for AROS it is theoretically possible to pass 64-bit formatted values.<br />
<br />
* <strike>'''function: SetAttrs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga + MorphOS implementations seems missing<br />
* <strike>'''function: SetGadgetAttrs()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: MorphOS version seems missing<br />
* <strike>'''function: EasyRequest()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Missing<br />
: AROS: version with no array of const is missing -> forced to use [TAG_END, 0] <- extra 0 required for AROS due to small issue<br />
: MorphOS: Missing<br />
* <strike>'''field: dri_pens of structure tDrawInfo'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Autodocs: UWORD *dri_Pens; /* pointer to pen array */<br />
: Amiga: dri_Pens : Pointer; { pointer to pen array }<br />
: AROS: dri_Pens : PWord; // pointer to pen array<br />
: MorphOS: dri_Pens : Pointer; { pointer to pen array }<br />
: Remark: afaik the pen array is an array of word (for all platforms), so the only really practical type for dri_pens would then be a Pointer to an unsigned word<br />
* <strike>'''varargs function: SetWindowPointer()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Seems missing<br />
: MorphOS: Seems missing<br />
* <strike>'''function: CloseScreen()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32642]<br />
: Amiga: Amiga declaration is still pre v36 (procedure), and does not return a boolean value (function) on success/failure which is the case on v36+ systems.<br />
<br />
* <strike>'''structure: TWindow field WScreen'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32643]<br />
: Autodocs: struct Screen *WScreen;<br />
: Amiga: WScreen : Pointer;<br />
: AROS: WScreen : PScreen; <br />
: MorphOS: WScreen : Pointer; <br />
: Status: Needs complete rewrite of intuition unit<br />
<br />
* <strike>'''type: TDateTime'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32644]<br />
: Amiga + AROS: declares this structure (and accompanied pointer) as TDateTime, <br />
: MorphOS: declares this structure _TDateTime and accompanied pointer _PDateTime<br />
: Remark: TDateTime declared in AmigaDOS conflicts with Free Pascal's declared TDateTime structure.<br />
* <strike>'''function: DateToStr()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32644]<br />
: All: This function conflicts with Free Pascal own DateToStr function. Renamed to DOSSateToStr (and StrToDate to DOSStrToDate)<br />
<br />
* <strike>'''record TmemChunk'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32682]<br />
: MorphOS: the field names right now are nc_Next and nc_Bytes -> should read '''m'''c_Next and '''m'''c_Bytes<br />
* <strike>'''vararg function: SystemTags()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32682]<br />
: MorphOS: missing.<br />
<br />
* <strike>'''record: TNewBroker'''</strike> (was already) fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32660]<br />
: Amiga: This structure seems aligned wrongly.<br />
: Note1: Packrecords c failed, packrecords 2 seems to work, but its influence on other record structure (InputXpression) was not tested (it uses two bytes as first entry in its structure).<br />
: Note2: Amiga and morphos sdk seems to use pragmapack #2, so also for the second structure.<br />
* <strike>'''function CxBroker()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32705]<br />
: AutoDocs: CxObj *CxBroker(struct NewBroker *,LONG *);<br />
: Amiga: 238 FUNCTION CxBroker(nb : pNewBroker location 'a0'; error : pCxObj location 'd0') : pCxObj; syscall CxBase 036;<br />
: Note: according to autodocs, error is a pointer to a generic LONG, not pCxObj;<br />
* <strike>'''function CreateCxObj()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32702]<br />
: AutoDocs: co = CreateCxObj(type,arg1,arg2); D0 = D0 A0 A1<br />
: Amiga: 237 FUNCTION CreateCxObj(typ : ULONG location 'd0'; arg1 : LONGINT location 'a1'; arg2 : LONGINT location 'a2') : pCxObj; syscall CxBase 030;<br />
: Note: notice different use of address registers. I have not faintest idea why they don't match. Maybe there's a valid reason ? (although aros and mos also uses same registers as stated by autodocs).<br />
<br />
* <strike>'''function: WriteStr()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32709]<br />
: On MorphOS this function seems declared as Amiga-function, which clashes with Free Pascal build-in function WriteStr. Strange as WriteStr seems only declared as dos/stdio.h macro.<br />
<br />
* <strike>'''function: ChangeSprite()'''</strike> fixed in trunk[http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=33235]<br />
: Amiga: PROCEDURE ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; newData : pWORD location 'a2'); syscall GfxBase 420;<br />
: AROS: procedure ChangeSprite(Vp: PViewPort; s: PSimpleSprite; NewData: Pointer); syscall GfxBase 70; unimplemented;<br />
: MorphOS: procedure ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; VAR newData : Integer location 'a2'); SysCall GfxBase 420;<br />
: Note: MOS version uses var for sprite data parameter. Should be opaque pointer type (perhaps also for amiga ?)<br />
<br />
<br />
== Some of your finest ==<br />
<br />
* AslRequest()<br />
<source lang="pascal"><br />
{$IFDEF AMIGA}<br />
if (AslRequest(fr, nil) <> 0) then<br />
{$ENDIF}<br />
{$IFDEF AROS}<br />
if (AslRequestA(fr, nil)) then<br />
{$ENDIF}<br />
{$IFDEF MORPHOS}<br />
if (AslRequest(fr, nil)) then<br />
{$ENDIF}<br />
begin<br />
// Could we now please check what the requester returned ?<br />
end;<br />
</source><br />
<br />
<br />
== Hardening trinity ==<br />
<br />
In order to circumvent some of the inconsistencies and incompatibilities, there was need for a solution without tempering with the RTL and/or default support units.<br />
<br />
That's were unit trinity comes into play, which solves some of the encountered issues (the unit itself is a work in progress). It provides the user with a way to solve things and let sources compile without too much hassle/workarounds.<br />
<br />
The latest version of unit trinity is kindly provided by Magorium and can be found [https://github.com/magorium/fpc-triforce/tree/master/Base/Trinity here].</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Library_units&diff=1153Library units2021-01-10T12:32:13Z<p>Alb42: Updated for OS4 units</p>
<hr />
<div><br />
{| class="wikitable"<br />
|+ List of available units per platform:<br />
! Unit !! Category !! OS3.x !! OS4.x !! AROS !! MorphOS !! Remark(s)<br />
|-<br />
| agraphics || graphics.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| ahi || ahi.device || class="working" | yes || class="not" | no || class="progress" | MAG || class="working" | yes || <br />
|-<br />
| ahi_sub || ahi_sub.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| akeyboard || keyboard.device || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/akeyboard.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/akeyboard.pas test] || <br />
|-<br />
| amarquee || amarquee.library || class="working" | yes || class="unknown" | n/a || class="unknown" | n/a || class="unknown" | n/a || <br />
|-<br />
| amigados || dos.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| amigaguide || amigaguide.library || class="working" | yes || class="not" | no || class="progress" | MAG || class="not" | no || No use though, AROS' lib functions are not implemented<br />
|-<br />
| amigalib || amigalib || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigalib.pas test] || class="working" | yes || Unit amigalib has it's own status page, [[AmigaLib]] (deprectaed fpc 3.1.1, revision 36777/36778<br />
|-<br />
| amigaprinter || printer.device || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/amigaprinter.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/amigaprinter.pas test] || <br />
|-<br />
| aroslib || aros.library || class="unknown" | n/a || class="unknown" | n/a || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/aroslib.pas yes] || class="unknown" | n/a || <br />
|-<br />
| asl || asl.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| audio || audio.device || class="working" | yes || class="not" | no || class="progress" | MAG || class="not" | no || <br />
|-<br />
| bootblock || bootblock.device || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| bullet || bullet.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| cd || cd.device || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| clipboard || clipboard.device || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| colorwheel || colorwheel.gadget || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| commodities || commodities.library || class="working" | yes || class="not" | no || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/commodities.pas test] || <br />
|-<br />
| configregs || see expansion || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configregs.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configregs.pas test] || <br />
|-<br />
| configvars || see expansion || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/configvars.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/configvars.pas test] || <br />
|-<br />
| console || console.device || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/console.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/console.pas test] || <br />
|-<br />
| conunit || console.device || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/conunit.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/conunit.pas test] || <br />
|-<br />
| cgxvideo || || class="not" | no || class="not" | no || class="not" | no || class="working" | [//svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343 yes] || Recently added to MorphOS by Chain-Q<br />
|-<br />
| cybergraphics || cybergraphics.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | [//svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=32343 yes] || Recently added to MorphOS by Chain-Q<br />
|-<br />
| datatypes || datatypes.library || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/datatypes.pas test] || class="working" | yes || Unit source (AROS) is still a bit of a mess. Amiga version needs an overhaul (no PObject_ being used where it should -> concerns most if not all of declared functions).<br />
|-<br />
| diskfont || diskfont.library || class="working" | yes || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/diskfont.pas test] || A diskfont unit was added to MorphOS by Chain-Q<br />
|-<br />
| exec || exec.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || MorphOS: noticed some things missing in comparison to SDK 3.9 (this is meant as a reminder to verify this unit)<br />
|-<br />
| expansion || expansion.library || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansion.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansion.pas test] || <br />
|-<br />
| expansionbase || see expansion || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/expansionbase.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/expansionbase.pas test] || <br />
|-<br />
| gadtools || gadtools.library || class="working" | yes || class="not" | no || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/gadtools.pas test] || <br />
|-<br />
| gameport || gameport.device || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| get9 || ? || class="unknown" | n/a || class="unknown" | n/a || class="unknown" | n/a || class="working" | yes || silly MorphOS-only historic .library, Pascal interface unit exist as a joke, ignore this :)<br />
|-<br />
| gradientslider || gradientslider.gadget || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| gtlayout || gtlayout.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| guigfx || guigfx.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| hardblocks || hardblocks.device || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| hardware || hardware.resource || class="working" | yes || class="not" | no || class="working" | yes || class="working" | yes || <br />
|-<br />
| icon || icon.library || class="working" | yes || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/icon.pas test] || <br />
|-<br />
| identify || identify.lbrary || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| iffparse || iffparse.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| input || input.device || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/input.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/input.pas test] || <br />
|-<br />
| inputevent || see input.device || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| intuition || intuition.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| keymap || keymap.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| kvm || ? || class="unknown" | n/a || class="unknown" | n/a || class="unknown" | n/a || class="unknown" | n/a || This unit is now dropped. It was a helper unit for the KVM stuff, but it's no longer used, and it doesn't provide any other useful functionality. It's "API" was never meant for public use either. The idea was, mouse unit could be used w/o the video and keyboard, and doesn't depend on each other. But it doesn't really matter any more. I removed it from trunk.<br />
|-<br />
| layers || layers.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| locale || locale.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| lowlevel || lowlevel.library || class="working" | yes || class="not" | no || class="progress" | MAG || class="not" | no || <br />
|-<br />
| lucyplay || lucyplay.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| mui || muimaster.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || Also for Zune.<br />
|-<br />
| mysticview || mysticview.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| nonvolatile || nonvolatile.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| parallel || parallel.device || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| picasso96api || picasso library || class="working" | yes || class="working" | yes || class="unknown" | n/a || class="unknown" | n/a || MorphOS and AROS don't have Picasso96 support.<br />
|-<br />
| preferences || preferences.library || class="working" | yes || class="not" | no || class="not" | n/a || class="not" | no || <br />
|-<br />
| prefs || see preferences || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/prefs.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/prefs.pas test] || <br />
|-<br />
| prtbase || printer.device || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| prtgfx || ? || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| ptreplay || ptreplay.library || class="working" | yes || class="not" | no || class="progress" | MAG || class="not" | no || <br />
|-<br />
| realtime || realtime.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| render || render.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| reqtools || reqtools.library || class="working" | yes || class="not" | no || class="progress" | MAG || class="not" | no || <br />
|-<br />
| rexx || rexxsyslib.library || class="working" | yes || class="not" | no || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/AROS/rexx.pas test] || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/rexx.pas test] || <br />
|-<br />
| romboot_base || || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| scsidisk || scscidisk.device || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| serial || serial.device || class="working" | yes || class="working" | yes || class="not" | no || class="not" | no || <br />
|-<br />
| tapedeck || tapedeck.gadget || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| timer || timer.device || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| tinygl || tinygl library || class="unknown" | n/a || class="unknown" | n/a || class="unknown" | n/a || class="working" | yes || TinyGL is MorphOS specific and the unit there is only used to get the OpenGL package of FPC running.<br />
|-<br />
| trackdisk || trackdisk.device || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| translator || translator.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| triton || triton.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| tritonmacros || macros for triton || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| ttengine || ttengine.library || class="working" | yes || class="not" | no || class="progress" | MAG || class="not" | no || <br />
|-<br />
| utility || utility.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || <br />
|-<br />
| workbench || workbench.library || class="working" | yes || class="working" | yes || class="working" | yes || class="progress" | [//github.com/magorium/fpc-triforce/blob/master/Sys/MorphOS/workbench.pas test] || <br />
|-<br />
| xadmaster || xadmaster.library || class="working" | yes || class="not" | no || class="progress" | MAG || class="not" | no || <br />
|-<br />
| zlib || zlib.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
! Unit !! Category !! OS3.x !! OS4.x !! AROS !! MorphOS !! Remark(s)<br />
|-<br />
| amigautils || amigautils || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| amsgbox || msgbox || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || moved to ami-extra<br />
|-<br />
| cliputils || clipboard helper || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || moved to ami-extra<br />
|-<br />
| consoleio || crt using console || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| deadkeys || console deadkeys || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| doublebuffer || || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| easyasl || easyasl.library || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| hisoft || || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| linklist || || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere and contains no deprecated code.<br />
|-<br />
| longarray || || class="working" | yes || class="not" | no || class="working" | yes || class="not" | no || deprecated do not use<br />
|-<br />
| muihelper || see mui.library || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || moved to ami-axtra. contains some Pascal syntax-sugar and helpers for writing MUI code.<br />
|-<br />
| pastoc || || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || This is deprecated, and must *not* be ported to other platforms.<br />
|-<br />
| pcq || || class="working" | yes || class="working" | yes || class="working" | yes || class="working" | yes || Moved to ami-extra<br />
|-<br />
| tagsarray || || class="working" | yes || class="not" | no || class="working" | yes || class="not" | no || deprecated. do not use. implementation is not thread safe, at least on classic.<br />
|-<br />
| timerutils || || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || Should be moved to ami-extra when it's verified it works elsewhere.<br />
|-<br />
| vartags || || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|-<br />
| wbargs || || class="working" | yes || class="not" | no || class="not" | no || class="not" | no || <br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Talk:Installation&diff=1152Talk:Installation2021-01-10T12:05:24Z<p>Alb42: Alb42 moved page Talk:Installation to Talk:Installation AROS: Describes AROS installation (leftover from original AROS only wiki)</p>
<hr />
<div>#REDIRECT [[Talk:Installation AROS]]</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Talk:Installation_AROS&diff=1151Talk:Installation AROS2021-01-10T12:05:24Z<p>Alb42: Alb42 moved page Talk:Installation to Talk:Installation AROS: Describes AROS installation (leftover from original AROS only wiki)</p>
<hr />
<div>You wrote: tar -zvxf AROS-*-pc-i386-sdk.tar.bz2<br />
Should that not read: tar -xjvf AROS-*-pc-i386-sdk.tar.bz2<br />
Because it is a bz2 file ?</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation&diff=1150Installation2021-01-10T12:05:23Z<p>Alb42: Alb42 moved page Installation to Installation AROS: Describes AROS installation (leftover from original AROS only wiki)</p>
<hr />
<div>#REDIRECT [[Installation AROS]]</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_AROS&diff=1149Installation AROS2021-01-10T12:05:23Z<p>Alb42: Alb42 moved page Installation to Installation AROS: Describes AROS installation (leftover from original AROS only wiki)</p>
<hr />
<div>== Installation of Free Pascal on a AROS machine ==<br />
<br />
=== You need: ===<br />
* a fully installed AROS<br />
** i386 ABIv0: Icaros, AEROS, nightly<br />
** ARM ABIv0/ABIv1: AEROS, nightly<br />
** x86_64, ABIv1: T100pUAD, nightly (non-SMP)<br />
** m68k: AROSVision, nightly<br />
* developer tools (try to type ''ld'' in a shell if you get ''"ld: no input files"'' then everything is ok) should be included in all major distributions. If not you have to download the nightly ISO or contrib from AROS page extract it and copy the ''Developer'' folder to your ''System:''<br />
* binary release of [//blog.alb42.de/fpc-aros/ fpc-aros] (i386, ARM, x86_64) or [//blog.alb42.de/fpc-amigaaros-m68k/ fpc-aros-m68k]<br />
<br />
=== Before installing ===<br />
If you want to install the Free Pascal from the archive and choose not to install it over an existing installation of Free Pascal (as can be found on distributions like Icaros), then you have to make sure the existing installation is 'deactivated'. <br />
<br />
You can check where and if an current installation is present by opening a shell and type "which fpc" (without the quotes) and pressing enter. If this prints a result then a current installation of Free Pascal is 'active'. An Installation will deactivate this folder on next reboot, if you want to keep it as fallback you should keep the folder in mind<br />
<br />
=== Easy way (stable version) ===<br />
<br />
An official installer is provided for:<br />
* [https://freepascal.org/down/arm/aros.html ARM AROS]<br />
* [https://freepascal.org/down/i386/aros.html i386 AROS]<br />
* [https://freepascal.org/down/m68k/amiga.html m68k AROS] It's actually m68k Amiga, but compatible<br />
<br />
Installation:<br />
* You need a Installer<br />
* Unpack the archive file to a temp folder<br />
* Start the installer follow instructions<br />
* Restart AROS<br />
<br />
=== For Experts (trunk version) ===<br />
<br />
Get the [https://blog.alb42.de/fpc-aros/ trunk package] for your AROS version<br />
<br />
Installation:<br />
<br />
* Unpack the archive file to a folder where you like to have the installation<br />
* Create an assign FreePascal: to the ''pp'' folder (for example in s:user-startup)<br />
* Add the binary location to path (for example in s:user-startup)<br />
** i386: ''setpath Freepascal:bin/i386-aros add''<br />
** ARM: ''setpath Freepascal:bin/arm-aros add''<br />
** x86_64: ''setpath Freepascal:bin/x86_64-aros add''<br />
** m68k: ''setpath Freepascal:bin/m68k-amiga add''<br />
<br />
* if you do not want to create an assign you can also edit the ''fpc.cfg'' and ''fp.cfg'' and add your personal path directly there<br />
<br />
== Compile Free Pascal i386-aros from Source ==<br />
<br />
A very brief description how Free Pascal for i386-aros can be compiled from the source. For the other targets are comparable.<br />
<br />
=== On a AROS i386 machine ===<br />
<br />
Every standard i386 AROS machine is suitable hosted or native, 500 MiB RAM should be available (maybe less will work I never tried) and around 300MiB harddisk space. You need an already installed Free Pascal compiler (see above), because Free Pascal is written in Pascal.<br />
<br />
* Get the latest Free Pascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Free Pascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* navigate to the compiler (in principle you could also start in the top dir, but then you get path problems unix <> amiga style pathes):<br />
<source lang=text><br />
cd compiler<br />
</source><br />
* Compile the compiler. It needs long time because the compiler will be build twice, frist with the "old" already installed fpc and the again with the freshly build fpc<br />
<source lang=text><br />
make<br />
</source><br />
* make an assign ''PP:'' to install the compiler (and later the units as well) for example:<br />
<source lang=text><br />
assign pp: dh1:pp<br />
</source><br />
* Install the compiler, if all went well it can be found in ''pp:bin/i386-aros''<br />
<source lang=text><br />
make install<br />
</source><br />
* As next step we compile an install the rtl so we change to rtl folder compile and install it. The rtl contains very basic functions of Free Pascal without them the compiler is rather useless (at least the system unit is always needed). The units will be installed into ''pp:units/i386-aros/rtl''<br />
<source lang=text><br />
cd /rtl<br />
make<br />
make install<br />
</source><br />
* Now we have an already useable fpc, but of course we want all the additional packages as well (and the FP-IDE). We compile all the packages. There are some more aros specific in ''arosunits'' included. The units will be also installed to ''pp:units/i386-aros'' every packages with its own folder.<br />
<source lang=text><br />
cd /packages<br />
make<br />
make install<br />
</source><br />
* As last point we can compile the FP-IDE and install it. It will also be installed to ''pp:bin/i386-aros''.<br />
<source lang=text><br />
cd /ide<br />
make<br />
make install<br />
</source><br />
* If you want to compile the ''fpcmake'' util (compare 5. Point) navigate to ''fpcsrc/utils/fpcm'' then run:<br />
<source lang=text><br />
fpcmake<br />
make<br />
make install<br />
</source><br />
* If you want save some space you can clean all the compiled objects from the harddisk (or want to force a recompile after changing include files)<br />
change to the directory you want to clean (or to top directory ''fpc'' if you want clean all) and run:<br />
<source lang=text><br />
make clean<br />
</source><br />
<br />
<br />
'''Attention:'''<br />
If you change something in the code you have to compile everything what depends on:<br />
For example if you changed something in ''rtl'', you have to clean and compile the ''packages'' again or you get magic number errors when you try to use the units from packages.<br />
<source lang=text><br />
cd /rtl<br />
make clean install<br />
cd /packages<br />
make clean install<br />
</source><br />
Usually the compiler does not need to be recompiled (with some obvious exceptions, when you fix bugs in compiler/compiler-related rtl code).<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
==== Docker container ====<br />
<br />
There is a ready to use docker container with Free Pascal and Lazarus<br />
<br />
* Download archive [http://www.alb42.de/prgs/CrossAmigaLazarus.tar.gz]<br />
* follow instructions inside the archive<br />
<br />
==== Create cross compiler ====<br />
<br />
This section describe how the Free Pascal compiler with all units can be created under a Linux system. This could be important if you start without a working Free Pascal at AROS.<br />
<br />
* A working Linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A Free Pascal compiler for this Linux (atm. Version = 3.2) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the pc-i386-sdk for AROS from the [http://aros.sourceforge.net/de/download.php AROS Page]<br />
* Unpack the sdk: (replace the * by the date of the downloaded file) it creates a folder with the name as the file, change into the directory<br />
<source lang=text><br />
tar -zvxf AROS-*-pc-i386-sdk.tar.bz2<br />
cd AROS-*-pc-i386-sdk<br />
</source><br />
* Compile and install the SDK (must be done as root, so change to root or use sudo)<br />
<source lang=text><br />
./AROS-SDK-Install<br />
</source><br />
* Add path to the SDK bin folder<br />
<source lang=text><br />
export PATH=$PATH:/usr/local/aros-sdk/bin/<br />
</source><br />
* Get the latest Free Pascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Free Pascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.3.1.i386-aros.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=i386 OS_TARGET=aros<br />
</source><br />
* now you have a complete archive with the AROS Free Pascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_AROS&diff=1148Installation AROS2021-01-09T18:58:14Z<p>Alb42: new 3.2 installer described/ docker container added</p>
<hr />
<div>== Installation of Free Pascal on a AROS machine ==<br />
<br />
=== You need: ===<br />
* a fully installed AROS<br />
** i386 ABIv0: Icaros, AEROS, nightly<br />
** ARM ABIv0/ABIv1: AEROS, nightly<br />
** x86_64, ABIv1: T100pUAD, nightly (non-SMP)<br />
** m68k: AROSVision, nightly<br />
* developer tools (try to type ''ld'' in a shell if you get ''"ld: no input files"'' then everything is ok) should be included in all major distributions. If not you have to download the nightly ISO or contrib from AROS page extract it and copy the ''Developer'' folder to your ''System:''<br />
* binary release of [//blog.alb42.de/fpc-aros/ fpc-aros] (i386, ARM, x86_64) or [//blog.alb42.de/fpc-amigaaros-m68k/ fpc-aros-m68k]<br />
<br />
=== Before installing ===<br />
If you want to install the Free Pascal from the archive and choose not to install it over an existing installation of Free Pascal (as can be found on distributions like Icaros), then you have to make sure the existing installation is 'deactivated'. <br />
<br />
You can check where and if an current installation is present by opening a shell and type "which fpc" (without the quotes) and pressing enter. If this prints a result then a current installation of Free Pascal is 'active'. An Installation will deactivate this folder on next reboot, if you want to keep it as fallback you should keep the folder in mind<br />
<br />
=== Easy way (stable version) ===<br />
<br />
An official installer is provided for:<br />
* [https://freepascal.org/down/arm/aros.html ARM AROS]<br />
* [https://freepascal.org/down/i386/aros.html i386 AROS]<br />
* [https://freepascal.org/down/m68k/amiga.html m68k AROS] It's actually m68k Amiga, but compatible<br />
<br />
Installation:<br />
* You need a Installer<br />
* Unpack the archive file to a temp folder<br />
* Start the installer follow instructions<br />
* Restart AROS<br />
<br />
=== For Experts (trunk version) ===<br />
<br />
Get the [https://blog.alb42.de/fpc-aros/ trunk package] for your AROS version<br />
<br />
Installation:<br />
<br />
* Unpack the archive file to a folder where you like to have the installation<br />
* Create an assign FreePascal: to the ''pp'' folder (for example in s:user-startup)<br />
* Add the binary location to path (for example in s:user-startup)<br />
** i386: ''setpath Freepascal:bin/i386-aros add''<br />
** ARM: ''setpath Freepascal:bin/arm-aros add''<br />
** x86_64: ''setpath Freepascal:bin/x86_64-aros add''<br />
** m68k: ''setpath Freepascal:bin/m68k-amiga add''<br />
<br />
* if you do not want to create an assign you can also edit the ''fpc.cfg'' and ''fp.cfg'' and add your personal path directly there<br />
<br />
== Compile Free Pascal i386-aros from Source ==<br />
<br />
A very brief description how Free Pascal for i386-aros can be compiled from the source. For the other targets are comparable.<br />
<br />
=== On a AROS i386 machine ===<br />
<br />
Every standard i386 AROS machine is suitable hosted or native, 500 MiB RAM should be available (maybe less will work I never tried) and around 300MiB harddisk space. You need an already installed Free Pascal compiler (see above), because Free Pascal is written in Pascal.<br />
<br />
* Get the latest Free Pascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Free Pascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* navigate to the compiler (in principle you could also start in the top dir, but then you get path problems unix <> amiga style pathes):<br />
<source lang=text><br />
cd compiler<br />
</source><br />
* Compile the compiler. It needs long time because the compiler will be build twice, frist with the "old" already installed fpc and the again with the freshly build fpc<br />
<source lang=text><br />
make<br />
</source><br />
* make an assign ''PP:'' to install the compiler (and later the units as well) for example:<br />
<source lang=text><br />
assign pp: dh1:pp<br />
</source><br />
* Install the compiler, if all went well it can be found in ''pp:bin/i386-aros''<br />
<source lang=text><br />
make install<br />
</source><br />
* As next step we compile an install the rtl so we change to rtl folder compile and install it. The rtl contains very basic functions of Free Pascal without them the compiler is rather useless (at least the system unit is always needed). The units will be installed into ''pp:units/i386-aros/rtl''<br />
<source lang=text><br />
cd /rtl<br />
make<br />
make install<br />
</source><br />
* Now we have an already useable fpc, but of course we want all the additional packages as well (and the FP-IDE). We compile all the packages. There are some more aros specific in ''arosunits'' included. The units will be also installed to ''pp:units/i386-aros'' every packages with its own folder.<br />
<source lang=text><br />
cd /packages<br />
make<br />
make install<br />
</source><br />
* As last point we can compile the FP-IDE and install it. It will also be installed to ''pp:bin/i386-aros''.<br />
<source lang=text><br />
cd /ide<br />
make<br />
make install<br />
</source><br />
* If you want to compile the ''fpcmake'' util (compare 5. Point) navigate to ''fpcsrc/utils/fpcm'' then run:<br />
<source lang=text><br />
fpcmake<br />
make<br />
make install<br />
</source><br />
* If you want save some space you can clean all the compiled objects from the harddisk (or want to force a recompile after changing include files)<br />
change to the directory you want to clean (or to top directory ''fpc'' if you want clean all) and run:<br />
<source lang=text><br />
make clean<br />
</source><br />
<br />
<br />
'''Attention:'''<br />
If you change something in the code you have to compile everything what depends on:<br />
For example if you changed something in ''rtl'', you have to clean and compile the ''packages'' again or you get magic number errors when you try to use the units from packages.<br />
<source lang=text><br />
cd /rtl<br />
make clean install<br />
cd /packages<br />
make clean install<br />
</source><br />
Usually the compiler does not need to be recompiled (with some obvious exceptions, when you fix bugs in compiler/compiler-related rtl code).<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
==== Docker container ====<br />
<br />
There is a ready to use docker container with Free Pascal and Lazarus<br />
<br />
* Download archive [http://www.alb42.de/prgs/CrossAmigaLazarus.tar.gz]<br />
* follow instructions inside the archive<br />
<br />
==== Create cross compiler ====<br />
<br />
This section describe how the Free Pascal compiler with all units can be created under a Linux system. This could be important if you start without a working Free Pascal at AROS.<br />
<br />
* A working Linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A Free Pascal compiler for this Linux (atm. Version = 3.2) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the pc-i386-sdk for AROS from the [http://aros.sourceforge.net/de/download.php AROS Page]<br />
* Unpack the sdk: (replace the * by the date of the downloaded file) it creates a folder with the name as the file, change into the directory<br />
<source lang=text><br />
tar -zvxf AROS-*-pc-i386-sdk.tar.bz2<br />
cd AROS-*-pc-i386-sdk<br />
</source><br />
* Compile and install the SDK (must be done as root, so change to root or use sudo)<br />
<source lang=text><br />
./AROS-SDK-Install<br />
</source><br />
* Add path to the SDK bin folder<br />
<source lang=text><br />
export PATH=$PATH:/usr/local/aros-sdk/bin/<br />
</source><br />
* Get the latest Free Pascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Free Pascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.3.1.i386-aros.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=i386 OS_TARGET=aros<br />
</source><br />
* now you have a complete archive with the AROS Free Pascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_Classic&diff=1147Installation Classic2021-01-09T18:34:25Z<p>Alb42: case corrections</p>
<hr />
<div>== Installation of Free Pascal on a Amiga classic (68k) machine ==<br />
<br />
=== You need: ===<br />
* an Amiga or emulated UAE<br />
* 68020 or better<br />
* OS 3.0 or better or AROS68k<br />
* much RAM<br />
* binary release of [https://freepascal.org/down/m68k/amiga.html Free Pascal for 68k Amiga]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a temp folder (not RAM: because usually it will be too big)<br />
* Start the installer follow instructions<br />
* Restart Amiga<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
==== Docker container ====<br />
<br />
There is a ready to use docker container with Free Pascal and Lazarus<br />
<br />
* Download archive [http://www.alb42.de/prgs/CrossAmigaLazarus.tar.gz]<br />
* follow instructions inside the archive<br />
<br />
==== Create cross compiler ====<br />
<br />
This section describe how the Free Pascal compiler with all units can be created under a linux system. This could be important if you start without a working Free Pascal at Amiga.<br />
<br />
* A working Linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A Free Pascal compiler for your Linux (atm. Version = 3.2) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the amiga binutils, e.g. [[Cross binutils vasm/vlink]]<br />
* Get the latest Free Pascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Free Pascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.3.1.m68k-amiga.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=m68k OS_TARGET=amiga<br />
</source><br />
: In case opting for the vasm/vlink binutils (instead of the gnu binutils):<br />
<source lang=text><br />
make zipinstall CPU_TARGET=m68k OS_TARGET=amiga CROSSOPT="-XV -Avasm"<br />
</source><br />
* now you have a complete archive with the Amiga Free Pascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_OS4&diff=1146Installation OS42021-01-09T18:31:39Z<p>Alb42: changes for new installer 3.2+, docker introduced</p>
<hr />
<div>== Installation of Free Pascal on a AmigaOS 4 machine ==<br />
<br />
=== You need: ===<br />
* an AmigaOS4 machine or emulated UAE<br />
* OS 4.0 or better<br />
* much RAM<br />
* binary release of [https://freepascal.org/down/powerpc/amigaos.html Free Pascal for PowerPC Amiga]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a temp folder (not RAM: because usually it will be too big)<br />
* Start the installer follow instructions<br />
* Restart Amiga<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
==== Docker container ====<br />
<br />
There is a ready to use docker container with Free Pascal and Lazarus<br />
<br />
* Download archive [http://www.alb42.de/prgs/CrossAmigaLazarus.tar.gz]<br />
* follow instructions inside the archive<br />
<br />
==== Create cross compiler ====<br />
<br />
This section describe how the Free Pascal compiler with all units can be created under a linux system. This could be important if you start without a working Free Pascal at Amiga.<br />
<br />
* A working linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* Latest stable Free Pascal compiler for your Linux (atm. Version = 3.2) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the AmigaOS4 binutils e.g. [[Cross binutils vasm/vlink]]<br />
* Get the latest Free Pascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Freepascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.3.1.powerpc-amiga.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=powerpc OS_TARGET=amiga<br />
</source><br />
: In case opting for the vasm/vlink binutils (instead of the gnu binutils):<br />
<source lang=text><br />
make zipinstall CPU_TARGET=powerpc OS_TARGET=amiga CROSSOPT="-XV -Avasm"<br />
</source><br />
<br />
* now you have a complete archive with the Amiga freepascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_Classic&diff=1145Installation Classic2021-01-09T18:23:36Z<p>Alb42: better link desc</p>
<hr />
<div>== Installation of Free Pascal on a Amiga classic (68k) machine ==<br />
<br />
=== You need: ===<br />
* an Amiga or emulated UAE<br />
* 68020 or better<br />
* OS 3.0 or better or AROS68k<br />
* much RAM<br />
* binary release of [https://freepascal.org/down/m68k/amiga.html Free Pascal for 68k Amiga]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a temp folder (not RAM: because usually it will be too big)<br />
* Start the installer follow instructions<br />
* Restart Amiga<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
==== Docker container ====<br />
<br />
There is a ready to use docker container with Free Pascal and Lazarus<br />
<br />
* Download archive [http://www.alb42.de/prgs/CrossAmigaLazarus.tar.gz]<br />
* follow instructions inside the archive<br />
<br />
==== create cross compiler ====<br />
<br />
This section describe how the freepascal compiler with all units can be created under a linux system. This could be important if you start without a working Free Pascal at Amiga.<br />
<br />
* A working linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A freepascal compiler for this linux (Version = 3.0) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the amiga binutils, e.g. [[Cross binutils vasm/vlink]]<br />
* Get the latest freepascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Freepascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.3.1.m68k-amiga.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=m68k OS_TARGET=amiga<br />
</source><br />
: In case opting for the vasm/vlink binutils (instead of the gnu binutils):<br />
<source lang=text><br />
make zipinstall CPU_TARGET=m68k OS_TARGET=amiga CROSSOPT="-XV -Avasm"<br />
</source><br />
* now you have a complete archive with the Amiga freepascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_Classic&diff=1144Installation Classic2021-01-09T18:15:02Z<p>Alb42: new 3.2 installer described/ docker container added</p>
<hr />
<div>== Installation of Free Pascal on a Amiga classic (68k) machine ==<br />
<br />
=== You need: ===<br />
* an Amiga or emulated UAE<br />
* 68020 or better<br />
* OS 3.0 or better or AROS68k<br />
* much RAM<br />
* binary release of [https://freepascal.org/down/m68k/amiga.html]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a temp folder (not RAM: because usually it will be too big)<br />
* Start the installer follow instructions<br />
* Restart Amiga<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
==== Docker container ====<br />
<br />
There is a ready to use docker container with Free Pascal and Lazarus<br />
<br />
* Download archive [http://www.alb42.de/prgs/CrossAmigaLazarus.tar.gz]<br />
* follow instructions inside the archive<br />
<br />
==== create cross compiler ====<br />
<br />
This section describe how the freepascal compiler with all units can be created under a linux system. This could be important if you start without a working Free Pascal at Amiga.<br />
<br />
* A working linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A freepascal compiler for this linux (Version = 3.0) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the amiga binutils, e.g. [[Cross binutils vasm/vlink]]<br />
* Get the latest freepascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Freepascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.3.1.m68k-amiga.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=m68k OS_TARGET=amiga<br />
</source><br />
: In case opting for the vasm/vlink binutils (instead of the gnu binutils):<br />
<source lang=text><br />
make zipinstall CPU_TARGET=m68k OS_TARGET=amiga CROSSOPT="-XV -Avasm"<br />
</source><br />
* now you have a complete archive with the Amiga freepascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Amiga_OS4_Programs&diff=1143Amiga OS4 Programs2021-01-05T12:03:23Z<p>Alb42: Stsart of List for Amiga OS4</p>
<hr />
<div>A list of applications and games made with Free Pascal for Amiga OS 4.x<br />
<br />
== Games: ==<br />
* ColorIt [https://blog.alb42.de/programs/#ColorIt] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/ColorIt]<br />
: A little game with colors. The aim is to fill the complete board with the same color, by changing the flood color.<br />
<br />
* FPCMines [https://blog.alb42.de/programs/#FPCMines] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/Mines]<br />
: A Minesweeper clone</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=MorphOS_Programs&diff=1142MorphOS Programs2021-01-05T12:02:57Z<p>Alb42: Start of list for MorphOS</p>
<hr />
<div>A list of applications and games made with Free Pascal for MorphOS.<br />
<br />
== Games: ==<br />
* ColorIt [https://blog.alb42.de/programs/#ColorIt] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/ColorIt]<br />
: A little game with colors. The aim is to fill the complete board with the same color, by changing the flood color.<br />
<br />
* FPCMines [https://blog.alb42.de/programs/#FPCMines] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/Mines]<br />
: A Minesweeper clone</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Amiga_Programs&diff=1141Amiga Programs2021-01-05T12:02:24Z<p>Alb42: Start for programs made with FPC Amiga 68k</p>
<hr />
<div>A list of applications and games made with Free Pascal for Amiga 68k.<br />
<br />
== Games: ==<br />
* ColorIt [https://blog.alb42.de/programs/#ColorIt] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/ColorIt]<br />
: A little game with colors. The aim is to fill the complete board with the same color, by changing the flood color.<br />
<br />
* FPCMines [https://blog.alb42.de/programs/#FPCMines] Source [https://github.com/alb42/fpc-tests/tree/master/lcl/Mines]<br />
: A Minesweeper clone</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Main_Page&diff=1140Main Page2021-01-05T11:59:32Z<p>Alb42: Links for all Amiga Systems</p>
<hr />
<div>== Free Pascal on Amiga, AROS and MorphOS ==<br />
<br />
__NOTOC__<br />
<br />
This Page is meant as an documentation project for the Amiga systems implementation of Free Pascal and related topics (like Lazarus, LCL, fpgui).<br />
Freepascal is available for all Amiga systems (Amiga classic, AmigaOS4, AROS and MorphOS). This should not be a complete Free Pascal manual, but a compendium for the Amiga systems specifics of Free Pascal.<br />
<br />
{| id="mp-upper" style="width: 100%; margin:4px 0 0 0; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;" |<br />
{| id="mp-left" style="width:100%; vertical-align:top; background:#f5fffa;"<br />
| style="padding:2px;" | <h2 id="mp-tfa-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Introduction<br />
<br />
</h2><br />
|-<br />
| style="color:#000;" | <div id="mp-tfa" style="padding:2px 5px"><br />
<br />
* [[Introduction to Amiga|Introduction to Amiga systems]] - Short FAQ for those unfamiliar with Amiga Systems<br />
** [[Introduction to Amiga68k|Amiga 68k]]<br />
** [[Introduction to AmigaOS4|Amiga OS 4]]<br />
** [[Introduction to AROS|AROS]]<br />
** [[Introduction to MorphOS|MorphOS]]<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-dyk-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"> <br />
<br />
Installation and Configuration<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-dyk"><br />
<br />
How to install Free Pascal on Amiga systems<br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
* [[Configuration]] - How to configure the compiler<br />
<br />
<br />
</div><br />
|}<br />
| style="border:1px solid transparent;" |<br />
| class="MainPageBG" style="width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;"|<br />
{| id="mp-right" style="width:100%; vertical-align:top; background:#f5faff;"<br />
| style="padding:2px;" | <h2 id="mp-itn-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Infos and Status<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px;" | <div id="mp-itn"><br />
<br />
* [[Specifics]] - Amiga Systems Specifics in Free Pascal.<br />
* [[Status]] - Status and known Bugs of Implementation and how to avoid<br />
** [[AROS Libraries]] - Overview of included AROS library<br />
** [[FPC trunk status| FPC RTL/Packages]] - Status of the FreePascal RTL and Packages<br />
** [[Library units]] - Status of the FreePascal Library units for Amiga systems<br />
** [[LCL status]] - Status of the LCL MUI/Zune implementation<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-otd-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Coding with FreePascal for Amiga systems<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-otd"><br />
<br />
* [[Tutorial:Start|Tutorials]] - Tutorials for Free Pascal on Amiga Systems<br />
* [[Source Examples]] - examples to use on Amiga systems<br />
* [[Amiga Programs]] - programs use Free Pascal on Amiga 68k or tested to work on.<br />
* [[Amiga OS4 Programs]] - programs use Free Pascal on Amiga OS4 or tested to work on.<br />
* [[MorphOS Programs]] - programs use Free Pascal on MorphOS or tested to work on.<br />
* [[AROS Programs]] - programs use Free Pascal on AROS or tested to work on.<br />
* [[Amiga compatible projects]] - Projects written in Free Pascal that are compatible with AROS<br />
<br />
</div><br />
|}<br />
|}<br />
<br />
{| id="mp-lower" style="margin:4px 0 0 0; width:100%; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:100%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;" |<br />
{| id="mp-bottom" style="width:100%; vertical-align:top; background:#faf5ff; color:#000;"<br />
| style="padding:2px;" | <h2 id="mp-tfp-h2" style="margin:3px; background:#ddcef2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding:0.2em 0.4em"><br />
<br />
Links<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px;" | <div id="mp-tfp"> <br />
* [//www.amigaos.net Amiga OS 4]<br />
* [//www.aros.org AROS Research Operating System]<br />
* [//www.morphos-team.net MorphOS]<br />
<br />
<br />
'''Forum links'''<br />
for all your Free Pascal related questions whether generic Pascal question(s) and/or questions about Free Pascal<br />
* [//forum.amiga.org/index.php?topic=70796.0 Amiga FreePascal discussion on Amiga.org]<br />
* [//morph.zone/modules/newbb_plus/viewtopic.php?topic_id=11617&forum=12 MorphOS FreePascal discussion on Morph.zone]<br />
* [//ae.amigalife.org/index.php?board=11.0 Dedicated Free Pascal sub-forum on AROS-Exec] <br />
<br />
<br />
<br />
* [//www.freepascal.org Free Pascal compiler], [//www.freepascal.org/docs-html/3.0.0/ Free Pascal manuals], [//wiki.freepascal.org/Category:Tutorials Free Pascal tutorials]<br />
* Free Pascal wiki-pages: [//wiki.freepascal.org/Amiga Amiga], [//wiki.freepascal.org/AmigaOS AmigaOS], [//wiki.freepascal.org/AROS AROS], [//wiki.freepascal.org/MorphOS MorphOS] and [//wiki.freepascal.org/Category:AmigaOS category AmigaOS].<br />
* [//www.alb42.de/fpc-docu/ AROS RTL reference manual]<br />
* [//fpgui.sourceforge.net fpGUI Toolkit], [//fpgui.sourceforge.net/apidocs/index.html fpGUI reference], [//github.com/graemeg/fpgui/ fpGUI GIT]<br />
* [//michalis.ii.uni.wroc.pl/~michalis/modern_pascal_introduction/modern_pascal_introduction.html Introduction to modern Pascal]<br />
<br />
<br />
* [//blog.alb42.de Blog of the porter] with download of binary package and source<br />
<br />
<br />
</div><br />
|}<br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Main_Page&diff=1139Main Page2021-01-05T11:56:58Z<p>Alb42: moved page to Amiga compatible projects</p>
<hr />
<div>== Free Pascal on Amiga, AROS and MorphOS ==<br />
<br />
__NOTOC__<br />
<br />
This Page is meant as an documentation project for the Amiga systems implementation of Free Pascal and related topics (like Lazarus, LCL, fpgui).<br />
Freepascal is available for all Amiga systems (Amiga classic, AmigaOS4, AROS and MorphOS). This should not be a complete Free Pascal manual, but a compendium for the Amiga systems specifics of Free Pascal.<br />
<br />
{| id="mp-upper" style="width: 100%; margin:4px 0 0 0; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;" |<br />
{| id="mp-left" style="width:100%; vertical-align:top; background:#f5fffa;"<br />
| style="padding:2px;" | <h2 id="mp-tfa-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Introduction<br />
<br />
</h2><br />
|-<br />
| style="color:#000;" | <div id="mp-tfa" style="padding:2px 5px"><br />
<br />
* [[Introduction to Amiga|Introduction to Amiga systems]] - Short FAQ for those unfamiliar with Amiga Systems<br />
** [[Introduction to Amiga68k|Amiga 68k]]<br />
** [[Introduction to AmigaOS4|Amiga OS 4]]<br />
** [[Introduction to AROS|AROS]]<br />
** [[Introduction to MorphOS|MorphOS]]<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-dyk-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"> <br />
<br />
Installation and Configuration<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-dyk"><br />
<br />
How to install Free Pascal on Amiga systems<br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
* [[Configuration]] - How to configure the compiler<br />
<br />
<br />
</div><br />
|}<br />
| style="border:1px solid transparent;" |<br />
| class="MainPageBG" style="width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;"|<br />
{| id="mp-right" style="width:100%; vertical-align:top; background:#f5faff;"<br />
| style="padding:2px;" | <h2 id="mp-itn-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Infos and Status<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px;" | <div id="mp-itn"><br />
<br />
* [[Specifics]] - Amiga Systems Specifics in Free Pascal.<br />
* [[Status]] - Status and known Bugs of Implementation and how to avoid<br />
** [[AROS Libraries]] - Overview of included AROS library<br />
** [[FPC trunk status| FPC RTL/Packages]] - Status of the FreePascal RTL and Packages<br />
** [[Library units]] - Status of the FreePascal Library units for Amiga systems<br />
** [[LCL status]] - Status of the LCL MUI/Zune implementation<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-otd-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Coding with FreePascal for Amiga systems<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-otd"><br />
<br />
* [[Tutorial:Start|Tutorials]] - Tutorials for Free Pascal on Amiga Systems<br />
* [[Source Examples]] - examples to use on Amiga systems<br />
* [[AROS Programs]] - programs use Free Pascal on AROS or tested to work on.<br />
* [[Amiga compatible projects]] - Projects written in Free Pascal that are compatible with AROS<br />
<br />
</div><br />
|}<br />
|}<br />
<br />
{| id="mp-lower" style="margin:4px 0 0 0; width:100%; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:100%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;" |<br />
{| id="mp-bottom" style="width:100%; vertical-align:top; background:#faf5ff; color:#000;"<br />
| style="padding:2px;" | <h2 id="mp-tfp-h2" style="margin:3px; background:#ddcef2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding:0.2em 0.4em"><br />
<br />
Links<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px;" | <div id="mp-tfp"> <br />
* [//www.amigaos.net Amiga OS 4]<br />
* [//www.aros.org AROS Research Operating System]<br />
* [//www.morphos-team.net MorphOS]<br />
<br />
<br />
'''Forum links'''<br />
for all your Free Pascal related questions whether generic Pascal question(s) and/or questions about Free Pascal<br />
* [//forum.amiga.org/index.php?topic=70796.0 Amiga FreePascal discussion on Amiga.org]<br />
* [//morph.zone/modules/newbb_plus/viewtopic.php?topic_id=11617&forum=12 MorphOS FreePascal discussion on Morph.zone]<br />
* [//ae.amigalife.org/index.php?board=11.0 Dedicated Free Pascal sub-forum on AROS-Exec] <br />
<br />
<br />
<br />
* [//www.freepascal.org Free Pascal compiler], [//www.freepascal.org/docs-html/3.0.0/ Free Pascal manuals], [//wiki.freepascal.org/Category:Tutorials Free Pascal tutorials]<br />
* Free Pascal wiki-pages: [//wiki.freepascal.org/Amiga Amiga], [//wiki.freepascal.org/AmigaOS AmigaOS], [//wiki.freepascal.org/AROS AROS], [//wiki.freepascal.org/MorphOS MorphOS] and [//wiki.freepascal.org/Category:AmigaOS category AmigaOS].<br />
* [//www.alb42.de/fpc-docu/ AROS RTL reference manual]<br />
* [//fpgui.sourceforge.net fpGUI Toolkit], [//fpgui.sourceforge.net/apidocs/index.html fpGUI reference], [//github.com/graemeg/fpgui/ fpGUI GIT]<br />
* [//michalis.ii.uni.wroc.pl/~michalis/modern_pascal_introduction/modern_pascal_introduction.html Introduction to modern Pascal]<br />
<br />
<br />
* [//blog.alb42.de Blog of the porter] with download of binary package and source<br />
<br />
<br />
</div><br />
|}<br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=AROS_compatible_projects&diff=1138AROS compatible projects2021-01-05T11:55:29Z<p>Alb42: Alb42 moved page AROS compatible projects to Amiga compatible projects: not only AROS should be covered</p>
<hr />
<div>#REDIRECT [[Amiga compatible projects]]</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Amiga_compatible_projects&diff=1137Amiga compatible projects2021-01-05T11:55:29Z<p>Alb42: Alb42 moved page AROS compatible projects to Amiga compatible projects: not only AROS should be covered</p>
<hr />
<div>This page lists projects, libraries, examples and other related material that is mostly cross compilable and therefore also work out of the box for AROS.<br />
<br />
== Test Projects ==<br />
* ALB's test project directory [https://github.com/alb42/fpc-tests]<br />
: Testprojects, example source codes and ready to compile Games and Tools<br />
<br />
== 3th Party components/object ==<br />
<br />
* DCPCrypt [http://sourceforge.net/projects/lazarus-ccr/files/DCPcrypt/]<br />
: Encryption and hash library for Free Pascal, more information can be found [http://wiki.lazarus.freepascal.org/DCPcrypt here].</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Main_Page&diff=1136Main Page2021-01-05T11:51:53Z<p>Alb42: better links to Forum posts</p>
<hr />
<div>== Free Pascal on Amiga, AROS and MorphOS ==<br />
<br />
__NOTOC__<br />
<br />
This Page is meant as an documentation project for the Amiga systems implementation of Free Pascal and related topics (like Lazarus, LCL, fpgui).<br />
Freepascal is available for all Amiga systems (Amiga classic, AmigaOS4, AROS and MorphOS). This should not be a complete Free Pascal manual, but a compendium for the Amiga systems specifics of Free Pascal.<br />
<br />
{| id="mp-upper" style="width: 100%; margin:4px 0 0 0; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;" |<br />
{| id="mp-left" style="width:100%; vertical-align:top; background:#f5fffa;"<br />
| style="padding:2px;" | <h2 id="mp-tfa-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Introduction<br />
<br />
</h2><br />
|-<br />
| style="color:#000;" | <div id="mp-tfa" style="padding:2px 5px"><br />
<br />
* [[Introduction to Amiga|Introduction to Amiga systems]] - Short FAQ for those unfamiliar with Amiga Systems<br />
** [[Introduction to Amiga68k|Amiga 68k]]<br />
** [[Introduction to AmigaOS4|Amiga OS 4]]<br />
** [[Introduction to AROS|AROS]]<br />
** [[Introduction to MorphOS|MorphOS]]<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-dyk-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"> <br />
<br />
Installation and Configuration<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-dyk"><br />
<br />
How to install Free Pascal on Amiga systems<br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
* [[Configuration]] - How to configure the compiler<br />
<br />
<br />
</div><br />
|}<br />
| style="border:1px solid transparent;" |<br />
| class="MainPageBG" style="width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;"|<br />
{| id="mp-right" style="width:100%; vertical-align:top; background:#f5faff;"<br />
| style="padding:2px;" | <h2 id="mp-itn-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Infos and Status<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px;" | <div id="mp-itn"><br />
<br />
* [[Specifics]] - Amiga Systems Specifics in Free Pascal.<br />
* [[Status]] - Status and known Bugs of Implementation and how to avoid<br />
** [[AROS Libraries]] - Overview of included AROS library<br />
** [[FPC trunk status| FPC RTL/Packages]] - Status of the FreePascal RTL and Packages<br />
** [[Library units]] - Status of the FreePascal Library units for Amiga systems<br />
** [[LCL status]] - Status of the LCL MUI/Zune implementation<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-otd-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Coding with FreePascal for Amiga systems<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-otd"><br />
<br />
* [[Tutorial:Start|Tutorials]] - Tutorials for Free Pascal on Amiga Systems<br />
* [[Source Examples]] - examples to use on Amiga systems<br />
* [[AROS Programs]] - programs use Free Pascal on AROS or tested to work on.<br />
* [[AROS compatible projects]] - Projects written in Free Pascal that are compatible with AROS<br />
<br />
</div><br />
|}<br />
|}<br />
<br />
{| id="mp-lower" style="margin:4px 0 0 0; width:100%; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:100%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;" |<br />
{| id="mp-bottom" style="width:100%; vertical-align:top; background:#faf5ff; color:#000;"<br />
| style="padding:2px;" | <h2 id="mp-tfp-h2" style="margin:3px; background:#ddcef2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding:0.2em 0.4em"><br />
<br />
Links<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px;" | <div id="mp-tfp"> <br />
* [//www.amigaos.net Amiga OS 4]<br />
* [//www.aros.org AROS Research Operating System]<br />
* [//www.morphos-team.net MorphOS]<br />
<br />
<br />
'''Forum links'''<br />
for all your Free Pascal related questions whether generic Pascal question(s) and/or questions about Free Pascal<br />
* [//forum.amiga.org/index.php?topic=70796.0 Amiga FreePascal discussion on Amiga.org]<br />
* [//morph.zone/modules/newbb_plus/viewtopic.php?topic_id=11617&forum=12 MorphOS FreePascal discussion on Morph.zone]<br />
* [//ae.amigalife.org/index.php?board=11.0 Dedicated Free Pascal sub-forum on AROS-Exec] <br />
<br />
<br />
<br />
* [//www.freepascal.org Free Pascal compiler], [//www.freepascal.org/docs-html/3.0.0/ Free Pascal manuals], [//wiki.freepascal.org/Category:Tutorials Free Pascal tutorials]<br />
* Free Pascal wiki-pages: [//wiki.freepascal.org/Amiga Amiga], [//wiki.freepascal.org/AmigaOS AmigaOS], [//wiki.freepascal.org/AROS AROS], [//wiki.freepascal.org/MorphOS MorphOS] and [//wiki.freepascal.org/Category:AmigaOS category AmigaOS].<br />
* [//www.alb42.de/fpc-docu/ AROS RTL reference manual]<br />
* [//fpgui.sourceforge.net fpGUI Toolkit], [//fpgui.sourceforge.net/apidocs/index.html fpGUI reference], [//github.com/graemeg/fpgui/ fpGUI GIT]<br />
* [//michalis.ii.uni.wroc.pl/~michalis/modern_pascal_introduction/modern_pascal_introduction.html Introduction to modern Pascal]<br />
<br />
<br />
* [//blog.alb42.de Blog of the porter] with download of binary package and source<br />
<br />
<br />
</div><br />
|}<br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Main_Page&diff=1135Main Page2021-01-05T11:39:27Z<p>Alb42: readded Tutorial link, correct aros-exec link</p>
<hr />
<div>== Free Pascal on Amiga, AROS and MorphOS ==<br />
<br />
__NOTOC__<br />
<br />
This Page is meant as an documentation project for the Amiga systems implementation of Free Pascal and related topics (like Lazarus, LCL, fpgui).<br />
Freepascal is available for all Amiga systems (Amiga classic, AmigaOS4, AROS and MorphOS). This should not be a complete Free Pascal manual, but a compendium for the Amiga systems specifics of Free Pascal.<br />
<br />
{| id="mp-upper" style="width: 100%; margin:4px 0 0 0; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;" |<br />
{| id="mp-left" style="width:100%; vertical-align:top; background:#f5fffa;"<br />
| style="padding:2px;" | <h2 id="mp-tfa-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Introduction<br />
<br />
</h2><br />
|-<br />
| style="color:#000;" | <div id="mp-tfa" style="padding:2px 5px"><br />
<br />
* [[Introduction to Amiga|Introduction to Amiga systems]] - Short FAQ for those unfamiliar with Amiga Systems<br />
** [[Introduction to Amiga68k|Amiga 68k]]<br />
** [[Introduction to AmigaOS4|Amiga OS 4]]<br />
** [[Introduction to AROS|AROS]]<br />
** [[Introduction to MorphOS|MorphOS]]<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-dyk-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"> <br />
<br />
Installation and Configuration<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-dyk"><br />
<br />
How to install Free Pascal on Amiga systems<br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
* [[Configuration]] - How to configure the compiler<br />
<br />
<br />
</div><br />
|}<br />
| style="border:1px solid transparent;" |<br />
| class="MainPageBG" style="width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;"|<br />
{| id="mp-right" style="width:100%; vertical-align:top; background:#f5faff;"<br />
| style="padding:2px;" | <h2 id="mp-itn-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Infos and Status<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px;" | <div id="mp-itn"><br />
<br />
* [[Specifics]] - Amiga Systems Specifics in Free Pascal.<br />
* [[Status]] - Status and known Bugs of Implementation and how to avoid<br />
** [[AROS Libraries]] - Overview of included AROS library<br />
** [[FPC trunk status| FPC RTL/Packages]] - Status of the FreePascal RTL and Packages<br />
** [[Library units]] - Status of the FreePascal Library units for Amiga systems<br />
** [[LCL status]] - Status of the LCL MUI/Zune implementation<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-otd-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Coding with FreePascal for Amiga systems<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-otd"><br />
<br />
* [[Tutorial:Start|Tutorials]] - Tutorials for Free Pascal on Amiga Systems<br />
* [[Source Examples]] - examples to use on Amiga systems<br />
* [[AROS Programs]] - programs use Free Pascal on AROS or tested to work on.<br />
* [[AROS compatible projects]] - Projects written in Free Pascal that are compatible with AROS<br />
<br />
</div><br />
|}<br />
|}<br />
<br />
{| id="mp-lower" style="margin:4px 0 0 0; width:100%; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:100%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;" |<br />
{| id="mp-bottom" style="width:100%; vertical-align:top; background:#faf5ff; color:#000;"<br />
| style="padding:2px;" | <h2 id="mp-tfp-h2" style="margin:3px; background:#ddcef2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding:0.2em 0.4em"><br />
<br />
Links<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px;" | <div id="mp-tfp"> <br />
* [//www.aros.org AROS Research Operating System]<br />
* [//ae.amigalife.org/ AROS discussion forum]<br />
* [//www.arosworld.org AROSWorld discussion forum]<br />
* [//www.amigacoding.de Amiga Development] discussion forum (AROS, Amiga and MorphOS)<br />
<br />
<br />
* [//www.freepascal.org Free Pascal compiler], [//www.freepascal.org/docs-html/3.0.0/ Free Pascal manuals], [//wiki.freepascal.org/Category:Tutorials Free Pascal tutorials]<br />
* Free Pascal wiki-pages: [//wiki.freepascal.org/Amiga Amiga], [//wiki.freepascal.org/AmigaOS AmigaOS], [//wiki.freepascal.org/AROS AROS], [//wiki.freepascal.org/MorphOS MorphOS] and [//wiki.freepascal.org/Category:AmigaOS category AmigaOS].<br />
* [//www.alb42.de/fpc-docu/ AROS RTL reference manual]<br />
* [//fpgui.sourceforge.net fpGUI Toolkit], [//fpgui.sourceforge.net/apidocs/index.html fpGUI reference], [//github.com/graemeg/fpgui/ fpGUI GIT]<br />
* [//michalis.ii.uni.wroc.pl/~michalis/modern_pascal_introduction/modern_pascal_introduction.html Introduction to modern Pascal]<br />
<br />
<br />
* [//blog.alb42.de Blog of the porter] with download of binary package and source<br />
<br />
<br />
* [//ae.amigalife.org/index.php?board=11.0 Dedicated Free Pascal sub-forum] for all your Free Pascal related questions whether generic Pascal question(s) and/or questions about Free Pascal with regards to Amiga(OS), AROS and/or MorphOS <br />
</div><br />
|}<br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Main_Page&diff=1134Main Page2021-01-05T11:35:55Z<p>Alb42: Reverted edits by Alb42 (talk) to last revision by Migario</p>
<hr />
<div>== Free Pascal on Amiga, AROS and MorphOS ==<br />
<br />
__NOTOC__<br />
<br />
This Page is meant as an documentation project for the Amiga systems implementation of Free Pascal and related topics (like Lazarus, LCL, fpgui).<br />
Freepascal is available for all Amiga systems (Amiga classic, AmigaOS4, AROS and MorphOS). This should not be a complete Free Pascal manual, but a compendium for the Amiga systems specifics of Free Pascal.<br />
<br />
{| id="mp-upper" style="width: 100%; margin:4px 0 0 0; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;" |<br />
{| id="mp-left" style="width:100%; vertical-align:top; background:#f5fffa;"<br />
| style="padding:2px;" | <h2 id="mp-tfa-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Introduction<br />
<br />
</h2><br />
|-<br />
| style="color:#000;" | <div id="mp-tfa" style="padding:2px 5px"><br />
<br />
* [[Introduction to Amiga|Introduction to Amiga systems]] - Short FAQ for those unfamiliar with Amiga Systems<br />
** [[Introduction to Amiga68k|Amiga 68k]]<br />
** [[Introduction to AmigaOS4|Amiga OS 4]]<br />
** [[Introduction to AROS|AROS]]<br />
** [[Introduction to MorphOS|MorphOS]]<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-dyk-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"> <br />
<br />
Installation and Configuration<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-dyk"><br />
<br />
How to install Free Pascal on Amiga systems<br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
* [[Configuration]] - How to configure the compiler<br />
<br />
<br />
</div><br />
|}<br />
| style="border:1px solid transparent;" |<br />
| class="MainPageBG" style="width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;"|<br />
{| id="mp-right" style="width:100%; vertical-align:top; background:#f5faff;"<br />
| style="padding:2px;" | <h2 id="mp-itn-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Infos and Status<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px;" | <div id="mp-itn"><br />
<br />
* [[Specifics]] - Amiga Systems Specifics in Free Pascal.<br />
* [[Status]] - Status and known Bugs of Implementation and how to avoid<br />
** [[AROS Libraries]] - Overview of included AROS library<br />
** [[FPC trunk status| FPC RTL/Packages]] - Status of the FreePascal RTL and Packages<br />
** [[Library units]] - Status of the FreePascal Library units for Amiga systems<br />
** [[LCL status]] - Status of the LCL MUI/Zune implementation<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-otd-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Coding with FreePascal for Amiga systems<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-otd"><br />
<br />
* [[Source Examples]] - examples to use on Amiga systems<br />
* [[AROS Programs]] - programs use Free Pascal on AROS or tested to work on.<br />
* [[AROS compatible projects]] - Projects written in Free Pascal that are compatible with AROS<br />
<br />
</div><br />
|}<br />
|}<br />
<br />
{| id="mp-lower" style="margin:4px 0 0 0; width:100%; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:100%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;" |<br />
{| id="mp-bottom" style="width:100%; vertical-align:top; background:#faf5ff; color:#000;"<br />
| style="padding:2px;" | <h2 id="mp-tfp-h2" style="margin:3px; background:#ddcef2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding:0.2em 0.4em"><br />
<br />
Links<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px;" | <div id="mp-tfp"> <br />
* [//www.aros.org AROS Research Operating System]<br />
* [//www.aros-exec.org AROS discussion forum]<br />
* [//www.arosworld.org AROSWorld discussion forum]<br />
* [//www.amigacoding.de Amiga Development] discussion forum (AROS, Amiga and MorphOS)<br />
<br />
<br />
* [//www.freepascal.org Free Pascal compiler], [//www.freepascal.org/docs-html/3.0.0/ Free Pascal manuals], [//wiki.freepascal.org/Category:Tutorials Free Pascal tutorials]<br />
* Free Pascal wiki-pages: [//wiki.freepascal.org/Amiga Amiga], [//wiki.freepascal.org/AmigaOS AmigaOS], [//wiki.freepascal.org/AROS AROS], [//wiki.freepascal.org/MorphOS MorphOS] and [//wiki.freepascal.org/Category:AmigaOS category AmigaOS].<br />
* [//www.alb42.de/fpc-docu/ AROS RTL reference manual]<br />
* [//fpgui.sourceforge.net fpGUI Toolkit], [//fpgui.sourceforge.net/apidocs/index.html fpGUI reference], [//github.com/graemeg/fpgui/ fpGUI GIT]<br />
* [//michalis.ii.uni.wroc.pl/~michalis/modern_pascal_introduction/modern_pascal_introduction.html Introduction to modern Pascal]<br />
<br />
<br />
* [//blog.alb42.de Blog of the porter] with download of binary package and source<br />
<br />
<br />
* [//ae.amigalife.org/index.php?board=11.0 Dedicated Free Pascal sub-forum] for all your Free Pascal related questions whether generic Pascal question(s) and/or questions about Free Pascal with regards to Amiga(OS), AROS and/or MorphOS <br />
</div><br />
|}<br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Main_Page&diff=928Main Page2021-01-05T10:25:17Z<p>Alb42: tutorial start to actual start page</p>
<hr />
<div>== Free Pascal on Amiga, AROS and MorphOS ==<br />
<br />
__NOTOC__<br />
<br />
This Page is meant as an documentation project for the Amiga systems implementation of Free Pascal and related topics (like Lazarus, LCL, fpgui).<br />
Freepascal is available for all Amiga systems (Amiga classic, AmigaOS4, AROS and MorphOS). This should not be a complete Free Pascal manual, but a compendium for the Amiga systems specifics of Free Pascal.<br />
<br />
{| id="mp-upper" style="width: 100%; margin:4px 0 0 0; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;" |<br />
{| id="mp-left" style="width:100%; vertical-align:top; background:#f5fffa;"<br />
| style="padding:2px;" | <h2 id="mp-tfa-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Introduction<br />
<br />
</h2><br />
|-<br />
| style="color:#000;" | <div id="mp-tfa" style="padding:2px 5px"><br />
<br />
* [[Introduction to Amiga|Introduction to Amiga systems]] - Short FAQ for those unfamiliar with Amiga Systems<br />
** [[Introduction to Amiga68k|Amiga 68k]]<br />
** [[Introduction to AmigaOS4|Amiga OS 4]]<br />
** [[Introduction to AROS|AROS]]<br />
** [[Introduction to MorphOS|MorphOS]]<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-dyk-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"> <br />
<br />
Installation and Configuration<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-dyk"><br />
<br />
How to install Free Pascal on Amiga systems<br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
* [[Configuration]] - How to configure the compiler<br />
<br />
<br />
</div><br />
|}<br />
| style="border:1px solid transparent;" |<br />
| class="MainPageBG" style="width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;"|<br />
{| id="mp-right" style="width:100%; vertical-align:top; background:#f5faff;"<br />
| style="padding:2px;" | <h2 id="mp-itn-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Infos and Status<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px;" | <div id="mp-itn"><br />
<br />
* [[Specifics]] - Amiga Systems Specifics in Free Pascal.<br />
* [[Status]] - Status and known Bugs of Implementation and how to avoid<br />
** [[AROS Libraries]] - Overview of included AROS library<br />
** [[FPC trunk status| FPC RTL/Packages]] - Status of the FreePascal RTL and Packages<br />
** [[Library units]] - Status of the FreePascal Library units for Amiga systems<br />
** [[LCL status]] - Status of the LCL MUI/Zune implementation<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-otd-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Coding with FreePascal for Amiga systems<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-otd"><br />
<br />
* [[Source Examples]] - examples to use on Amiga systems<br />
* [[AROS Programs]] - programs use Free Pascal on AROS or tested to work on.<br />
* [[AROS compatible projects]] - Projects written in Free Pascal that are compatible with AROS<br />
* [[Tutorial:Getting_Start|Tutorials]] - Tutorial pages in this Wiki<br />
<br />
</div><br />
|}<br />
|}<br />
<br />
{| id="mp-lower" style="margin:4px 0 0 0; width:100%; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:100%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;" |<br />
{| id="mp-bottom" style="width:100%; vertical-align:top; background:#faf5ff; color:#000;"<br />
| style="padding:2px;" | <h2 id="mp-tfp-h2" style="margin:3px; background:#ddcef2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding:0.2em 0.4em"><br />
<br />
Links<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px;" | <div id="mp-tfp"> <br />
* [//www.aros.org AROS Research Operating System]<br />
* [//ae.amigalife.org/index.php AROS discussion forum]<br />
* [//www.arosworld.org AROSWorld discussion forum]<br />
<br />
<br />
* [//www.freepascal.org Free Pascal compiler], [//www.freepascal.org/docs-html/3.0.0/ Free Pascal manuals], [//wiki.freepascal.org/Category:Tutorials Free Pascal tutorials]<br />
* Free Pascal wiki-pages: [//wiki.freepascal.org/Amiga Amiga], [//wiki.freepascal.org/AmigaOS AmigaOS], [//wiki.freepascal.org/AROS AROS], [//wiki.freepascal.org/MorphOS MorphOS] and [//wiki.freepascal.org/Category:AmigaOS category AmigaOS].<br />
* [//www.alb42.de/fpc-docu/ AROS RTL reference manual]<br />
* [//fpgui.sourceforge.net fpGUI Toolkit], [//fpgui.sourceforge.net/apidocs/index.html fpGUI reference], [//github.com/graemeg/fpgui/ fpGUI GIT]<br />
* [//michalis.ii.uni.wroc.pl/~michalis/modern_pascal_introduction/modern_pascal_introduction.html Introduction to modern Pascal]<br />
<br />
<br />
* [//blog.alb42.de Blog of the porter] with download of binary package and source<br />
<br />
<br />
* [//ae.amigalife.org/index.php?board=11.0 Dedicated Free Pascal sub-forum] for all your Free Pascal related questions whether generic Pascal question(s) and/or questions about Free Pascal with regards to Amiga(OS), AROS and/or MorphOS <br />
</div><br />
|}<br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_MorphOS&diff=924Installation MorphOS2020-05-16T21:05:38Z<p>Alb42: /* Crosscompile from Linux */ link to vasm/vlink creation</p>
<hr />
<div>== Installation of Free Pascal on a MorphOS machine ==<br />
<br />
=== You need: ===<br />
* an MorphOS machine<br />
* MorphOS 3.0 or better<br />
* much RAM<br />
* official MorphOS SDK <br />
* binary release of [http://blog.alb42.de/fpc-morphos/ FPC-MorphOS]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a folder where you like to have the installation<br />
* Create an assign FreePascal: to the ''pp'' folder (for example in s:user-startup)<br />
* Add the binary location to path ''Freepascal:bin/powerpc-morphos'' (for example in s:user-startup)<br />
* if you do not want to create an assign you can also edit the ''fpc.cfg'' and ''fp.cfg'' and add your personal path directly there<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
This section describe how the freepascal compiler with all units can be created under a linux system. This could be important if you start without a working freepascal at MorphOS.<br />
<br />
* A working linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A freepascal compiler for this linux (Version = 3.0) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the MorphOS binutils e.g. Gnu [[Cross MorphOS binutils]] or [[Cross binutils vasm/vlink]])<br />
<br />
* Get the latest freepascal source<br />
* via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Freepascal Development Page]<br />
** A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* make the compiler, e.g. <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.3.1.powerpc-morphos.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=powerpc OS_TARGET=morphos<br />
</source><br />
* copy the archive to your MorphOS and replace the binaries and units<br />
* make the cross compiler e.g. <code>crossall</code> and install it<br />
<source lang=text><br />
make crossall CPU_TARGET=powerpc OS_TARGET=morphos<br />
sudo make crossinstall CPU_TARGET=powerpc OS_TARGET=morphos<br />
</source></div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_OS4&diff=923Installation OS42020-05-16T21:04:42Z<p>Alb42: link how to create vasm/vlink</p>
<hr />
<div>== Installation of Free Pascal on a AmigaOS 4 machine ==<br />
<br />
=== You need: ===<br />
* an AmigaOS4 machine or emulated UAE<br />
* OS 4.0 or better<br />
* much RAM<br />
* official AmigaOS4 SDK <br />
* binary release of [http://blog.alb42.de/fpc-amigaos-4/ FPC-AmigaOS4]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a folder where you like to have the installation<br />
* Create an assign FreePascal: to the ''pp'' folder (for example in s:user-startup)<br />
* Add the binary location to path ''Freepascal:bin/powerpc-amiga'' (for example in s:user-startup)<br />
* if you do not want to create an assign you can also edit the ''fpc.cfg'' and ''fp.cfg'' and add your personal path directly there<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
This section describe how the freepascal compiler with all units can be created under a linux system. This could be important if you start without a working Free Pascal at Amiga.<br />
<br />
* A working linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A freepascal compiler for this linux (Version = 3.0) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the AmigaOS4 binutils e.g. [[Cross binutils vasm/vlink]]<br />
* Get the latest freepascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Freepascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.1.1.powerpc-amiga.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=powerpc OS_TARGET=amiga<br />
</source><br />
* now you have a complete archive with the Amiga freepascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_Classic&diff=922Installation Classic2020-05-16T21:03:58Z<p>Alb42: link how to create vasm/vlink</p>
<hr />
<div>== Installation of Free Pascal on a Amiga classic (68k) machine ==<br />
<br />
=== You need: ===<br />
* an Amiga or emulated UAE<br />
* 68020 or better<br />
* OS 3.0 or better or AROS68k<br />
* much RAM<br />
* ixemul.library 48+ (check on Aminet)<br />
* binary release of [http://blog.alb42.de/fpc-amigaaros-m68k/ FPC-m68k-Amiga]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a folder where you like to have the installation<br />
* Create an assign FreePascal: to the ''pp'' folder (for example in s:user-startup)<br />
* Add the binary location to path ''Freepascal:bin/m68k-amiga'' (for example in s:user-startup)<br />
* if you do not want to create an assign you can also edit the ''fpc.cfg'' and ''fp.cfg'' and add your personal path directly there<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
This section describe how the freepascal compiler with all units can be created under a linux system. This could be important if you start without a working Free Pascal at Amiga.<br />
<br />
* A working linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A freepascal compiler for this linux (Version = 3.0) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the amiga binutils, e.g. [[Cross binutils vasm/vlink]]<br />
* Get the latest freepascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Freepascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.1.1.m68k-amiga.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=m68k OS_TARGET=amiga<br />
</source><br />
* now you have a complete archive with the Amiga freepascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Cross_MorphOS_binutils&diff=921Cross MorphOS binutils2020-05-16T21:02:44Z<p>Alb42: vlink/vasm link</p>
<hr />
<div>How to create gnu binutils (as, ld) needed for FreePascal crosscompiling to MorphOS on a linux system.<br /><br />
(for vasm/vlink check [[Cross binutils vasm/vlink]])<br />
<br />
One needs:<br />
* working linux with gcc (e.g. ubuntu: <code>sudo apt install build-essentials</code>)<br />
* flex, bison (e.g. ubuntu: <code>sudo apt install flex bison</code>)<br />
* xz-utils (e.g. ubuntu: <code>sudo apt install xz-utils</code>) <br />
* latest sdk source from [https://www.morphos-team.net/sources MorphOS source page] (e.g. [https://www.morphos-team.net/files/src/sdk//sdk-source-20200422.tar.xz sdk-source-20200422])<br />
<br />
<br />
# unpack the source (e.g. <code>tar -xJf sdk-source-20200422.tar.xz</code>) <br /><br />
#* we only need the <code>sdk-source/binutils</code> folder, therefore its possible to only unpack that directory (e.g. when using GUI tools to unpack)<br />
# enter the <code>sdk-source/binutils</code> folder (e.g. <code>cd sdk-source/binutils</code>)<br />
# unpack the <code>binutils-x.xx.tar.xz</code> inside (e.g. <code>tar -xJf binutils-2.34.tar.xz</code>)<br />
# apply the patch for the same version number with <code>patch -p0 <./binutils-x.xx-morphos.diff</code> (e.g. <code>patch -p0 <./binutils-2.34-morphos.diff</code>)<br />
#* make sure you have the same version number of diff file as the directory<br />
# create a new directory build (e.g. <code>mkdir build</code>)<br />
# enter that directory (e.g. <code>cd build</code>)<br />
# configure the morphos binutils (e.g. <code>../binutils-2.34/configure CFLAGS="-DMORPHOS_TARGET" --target=ppc-morphos --enable-plugins=no --disable-initfini-array</code>)<br />
# compile the cross binutils for morphos (e.g. <code>make</code>)<br />
# you will find the compiled tools in the build directory, we are most interested in directories "gas" the assembler and "ld" the linker<br />
# copy and rename the assembler to <code>/usr/bin</code> with prefix powerpc-morphos (e.g. <code>cp gas/as-new /usr/bin/powerpc-morphos-as</code>)<br />
# copy and rename the linker to <code>/usr/bin</code> with prefix powerpc-morphos (e.g. <code>cp ld/ld-new /usr/bin/powerpc-morphos-ld</code>)<br />
<br />
Finished!</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_MorphOS&diff=914Installation MorphOS2020-05-16T15:16:48Z<p>Alb42: /* Crosscompile from Linux */ better instructions for linux crossinstaller</p>
<hr />
<div>== Installation of Free Pascal on a MorphOS machine ==<br />
<br />
=== You need: ===<br />
* an MorphOS machine<br />
* MorphOS 3.0 or better<br />
* much RAM<br />
* official MorphOS SDK <br />
* binary release of [http://blog.alb42.de/fpc-morphos/ FPC-MorphOS]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a folder where you like to have the installation<br />
* Create an assign FreePascal: to the ''pp'' folder (for example in s:user-startup)<br />
* Add the binary location to path ''Freepascal:bin/powerpc-morphos'' (for example in s:user-startup)<br />
* if you do not want to create an assign you can also edit the ''fpc.cfg'' and ''fp.cfg'' and add your personal path directly there<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
This section describe how the freepascal compiler with all units can be created under a linux system. This could be important if you start without a working freepascal at MorphOS.<br />
<br />
* A working linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A freepascal compiler for this linux (Version = 3.0) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the MorphOS binutils (How to create [[Cross MorphOS binutils]])<br />
<br />
* Get the latest freepascal source<br />
* via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Freepascal Development Page]<br />
** A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* make the compiler, e.g. <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.3.1.powerpc-morphos.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=powerpc OS_TARGET=morphos<br />
</source><br />
* copy the archive to your MorphOS and replace the binaries and units<br />
* make the cross compiler e.g. <code>crossall</code> and install it<br />
<source lang=text><br />
make crossall CPU_TARGET=powerpc OS_TARGET=morphos<br />
sudo make crossinstall CPU_TARGET=powerpc OS_TARGET=morphos<br />
</source></div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Cross_MorphOS_binutils&diff=913Cross MorphOS binutils2020-05-16T14:53:57Z<p>Alb42: short manual how to create cross binutils for morphos on linux</p>
<hr />
<div>How to create binutils (as, ld) needed for FreePascal crosscompiling to MorphOS on a linux system.<br />
<br />
One needs:<br />
* working linux with gcc (e.g. ubuntu: <code>sudo apt install build-essentials</code>)<br />
* flex, bison (e.g. ubuntu: <code>sudo apt install flex bison</code>)<br />
* xz-utils (e.g. ubuntu: <code>sudo apt install xz-utils</code>) <br />
* latest sdk source from [https://www.morphos-team.net/sources MorphOS source page] (e.g. [https://www.morphos-team.net/files/src/sdk//sdk-source-20200422.tar.xz sdk-source-20200422])<br />
<br />
<br />
# unpack the source (e.g. <code>tar -xJf sdk-source-20200422.tar.xz</code>) <br /><br />
#* we only need the <code>sdk-source/binutils</code> folder, therefore its possible to only unpack that directory (e.g. when using GUI tools to unpack)<br />
# enter the <code>sdk-source/binutils</code> folder (e.g. <code>cd sdk-source/binutils</code>)<br />
# unpack the <code>binutils-x.xx.tar.xz</code> inside (e.g. <code>tar -xJf binutils-2.34.tar.xz</code>)<br />
# apply the patch for the same version number with <code>patch -p0 <./binutils-x.xx-morphos.diff</code> (e.g. <code>patch -p0 <./binutils-2.34-morphos.diff</code>)<br />
#* make sure you have the same version number of diff file as the directory<br />
# create a new directory build (e.g. <code>mkdir build</code>)<br />
# enter that directory (e.g. <code>cd build</code>)<br />
# configure the morphos binutils (e.g. <code>../binutils-2.34/configure CFLAGS="-DMORPHOS_TARGET" --target=ppc-morphos --enable-plugins=no --disable-initfini-array</code>)<br />
# compile the cross binutils for morphos (e.g. <code>make</code>)<br />
# you will find the compiled tools in the build directory, we are most interested in directories "gas" the assembler and "ld" the linker<br />
# copy and rename the assembler to <code>/usr/bin</code> with prefix powerpc-morphos (e.g. <code>cp gas/as-new /usr/bin/powerpc-morphos-as</code>)<br />
# copy and rename the linker to <code>/usr/bin</code> with prefix powerpc-morphos (e.g. <code>cp ld/ld-new /usr/bin/powerpc-morphos-ld</code>)<br />
<br />
Finished!</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Installation_MorphOS&diff=912Installation MorphOS2020-05-16T13:59:29Z<p>Alb42: /* Crosscompile from Linux */ link to Cross MorphOS Binutils</p>
<hr />
<div>== Installation of Free Pascal on a MorphOS machine ==<br />
<br />
=== You need: ===<br />
* an MorphOS machine<br />
* MorphOS 3.0 or better<br />
* much RAM<br />
* official MorphOS SDK <br />
* binary release of [http://blog.alb42.de/fpc-morphos/ FPC-MorphOS]<br />
<br />
=== Installation ===<br />
<br />
* Unpack the archive file to a folder where you like to have the installation<br />
* Create an assign FreePascal: to the ''pp'' folder (for example in s:user-startup)<br />
* Add the binary location to path ''Freepascal:bin/powerpc-morphos'' (for example in s:user-startup)<br />
* if you do not want to create an assign you can also edit the ''fpc.cfg'' and ''fp.cfg'' and add your personal path directly there<br />
<br />
=== Crosscompile from Linux ===<br />
<br />
This section describe how the freepascal compiler with all units can be created under a linux system. This could be important if you start without a working freepascal at MorphOS.<br />
<br />
* A working linux system (CPU is not important, i386 and x64 tested other platform might work)<br />
* A freepascal compiler for this linux (Version = 3.0) (e.g. at Ubuntu/Debian <code lang=shell>apt-get install fpc</code>)<br />
* You need a the MorphOS binutils (TODO: source/manual [[Cross MorphOS binutils]])<br />
* Get the latest freepascal source<br />
** via svn: ''svn checkout [http://svn.freepascal.org/svn/fpc/trunk http://svn.freepascal.org/svn/fpc/trunk] fpc''<br />
** via zip: from the [http://freepascal.org/develop.var Freepascal Development Page]<br />
* A folder ''fpc'' is created with the sources inside, change to the folder<br />
<source lang=text><br />
cd fpc<br />
</source><br />
* Now everything is set for make the compiler, we choose <code>zipinstall</code> to create directly a packed version <code lang=shell>fpc-3.1.1.powerpc-morphos.tar.gz</code><br />
<source lang=text><br />
make zipinstall CPU_TARGET=powerpc OS_TARGET=morphos<br />
</source><br />
* now you have a complete archive with the MorphOS Free Pascal compiler with all units and some utilities</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Main_Page&diff=911Main Page2020-05-02T19:06:26Z<p>Alb42: new link for aros-exec, amigacoding does not exist anymore</p>
<hr />
<div>== Free Pascal on Amiga, AROS and MorphOS ==<br />
<br />
__NOTOC__<br />
<br />
This Page is meant as an documentation project for the Amiga systems implementation of Free Pascal and related topics (like Lazarus, LCL, fpgui).<br />
Freepascal is available for all Amiga systems (Amiga classic, AmigaOS4, AROS and MorphOS). This should not be a complete Free Pascal manual, but a compendium for the Amiga systems specifics of Free Pascal.<br />
<br />
{| id="mp-upper" style="width: 100%; margin:4px 0 0 0; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;" |<br />
{| id="mp-left" style="width:100%; vertical-align:top; background:#f5fffa;"<br />
| style="padding:2px;" | <h2 id="mp-tfa-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Introduction<br />
<br />
</h2><br />
|-<br />
| style="color:#000;" | <div id="mp-tfa" style="padding:2px 5px"><br />
<br />
* [[Introduction to Amiga|Introduction to Amiga systems]] - Short FAQ for those unfamiliar with Amiga Systems<br />
** [[Introduction to Amiga68k|Amiga 68k]]<br />
** [[Introduction to AmigaOS4|Amiga OS 4]]<br />
** [[Introduction to AROS|AROS]]<br />
** [[Introduction to MorphOS|MorphOS]]<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-dyk-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"> <br />
<br />
Installation and Configuration<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-dyk"><br />
<br />
How to install Free Pascal on Amiga systems<br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
* [[Configuration]] - How to configure the compiler<br />
<br />
<br />
</div><br />
|}<br />
| style="border:1px solid transparent;" |<br />
| class="MainPageBG" style="width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;"|<br />
{| id="mp-right" style="width:100%; vertical-align:top; background:#f5faff;"<br />
| style="padding:2px;" | <h2 id="mp-itn-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Infos and Status<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px;" | <div id="mp-itn"><br />
<br />
* [[Specifics]] - Amiga Systems Specifics in Free Pascal.<br />
* [[Status]] - Status and known Bugs of Implementation and how to avoid<br />
** [[AROS Libraries]] - Overview of included AROS library<br />
** [[FPC trunk status| FPC RTL/Packages]] - Status of the FreePascal RTL and Packages<br />
** [[Library units]] - Status of the FreePascal Library units for Amiga systems<br />
** [[LCL status]] - Status of the LCL MUI/Zune implementation<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-otd-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Coding with FreePascal for Amiga systems<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-otd"><br />
<br />
* [[Source Examples]] - examples to use on Amiga systems<br />
* [[AROS Programs]] - programs use Free Pascal on AROS or tested to work on.<br />
* [[AROS compatible projects]] - Projects written in Free Pascal that are compatible with AROS<br />
* [[Tutorial:Getting_Started|Tutorials]] - Tutorial pages in this Wiki<br />
<br />
</div><br />
|}<br />
|}<br />
<br />
{| id="mp-lower" style="margin:4px 0 0 0; width:100%; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:100%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;" |<br />
{| id="mp-bottom" style="width:100%; vertical-align:top; background:#faf5ff; color:#000;"<br />
| style="padding:2px;" | <h2 id="mp-tfp-h2" style="margin:3px; background:#ddcef2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding:0.2em 0.4em"><br />
<br />
Links<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px;" | <div id="mp-tfp"> <br />
* [//www.aros.org AROS Research Operating System]<br />
* [//ae.amigalife.org/index.php AROS discussion forum]<br />
* [//www.arosworld.org AROSWorld discussion forum]<br />
<br />
<br />
* [//www.freepascal.org Free Pascal compiler], [//www.freepascal.org/docs-html/3.0.0/ Free Pascal manuals], [//wiki.freepascal.org/Category:Tutorials Free Pascal tutorials]<br />
* Free Pascal wiki-pages: [//wiki.freepascal.org/Amiga Amiga], [//wiki.freepascal.org/AmigaOS AmigaOS], [//wiki.freepascal.org/AROS AROS], [//wiki.freepascal.org/MorphOS MorphOS] and [//wiki.freepascal.org/Category:AmigaOS category AmigaOS].<br />
* [//www.alb42.de/fpc-docu/ AROS RTL reference manual]<br />
* [//fpgui.sourceforge.net fpGUI Toolkit], [//fpgui.sourceforge.net/apidocs/index.html fpGUI reference], [//github.com/graemeg/fpgui/ fpGUI GIT]<br />
* [//michalis.ii.uni.wroc.pl/~michalis/modern_pascal_introduction/modern_pascal_introduction.html Introduction to modern Pascal]<br />
<br />
<br />
* [//blog.alb42.de Blog of the porter] with download of binary package and source<br />
<br />
<br />
* [//ae.amigalife.org/index.php?board=11.0 Dedicated Free Pascal sub-forum] for all your Free Pascal related questions whether generic Pascal question(s) and/or questions about Free Pascal with regards to Amiga(OS), AROS and/or MorphOS <br />
</div><br />
|}<br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Introduction_to_Amiga&diff=910Introduction to Amiga2020-05-02T19:05:16Z<p>Alb42: new link for aros-exec</p>
<hr />
<div>== Short overview ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! !! Amiga68k !! AmigaOS4 !! AROS !! MorphOS<br />
|-<br />
| Logo/Mascotte || Amiga checkmark || Boing Ball || Kitty || Morpho butterfly<br />
|-<br />
| Official name || Amiga OS || Amiga OS4 || AROS || MorphOS<br />
|-<br />
| Span || 1985-1993 || 2004-present || 1995-present || 2000-present<br />
|-<br />
| Latest version || 3.x || AmigaOS4.1SE || ABIv1 || MorphOS 3.9<br />
|-<br />
| Supported processor || Motorola 680x0 || 68k/PPC || 68k, arm, PPC, i386 || 68k/PPC<br />
|-<br />
| Website || n/a || [//www.amigaos.net/ Official] || [//www.aros.org Official] || [//www.morphos.de Official]<br />
|-<br />
| Wikipedia || [//en.wikipedia.org/wiki/AmigaOS Article] || [//en.wikipedia.org/wiki/AmigaOS_4 Article] || [//en.wikipedia.org/wiki/AROS_Research_Operating_System Article] || [//en.wikipedia.org/wiki/MorphOS Article]<br />
|-<br />
| SDK || || || || <br />
|-<br />
| Support Forums || n/a || [//forum.hyperion-entertainment.biz/ Official] || [//ae.amigalife.org/index.php Official] || [//morph.zone/ Official]<br />
|-<br />
| IRC || || || || <br />
|}<br />
<br />
<br />
Some interesting reading material with regards to the Amiga (and OS) history:<br />
* [//www.birdys.de/default.php?page=home Amiga history V3] (german) http:<br />
* [//www.amigahistory.co.uk/ Amiga History UK] (english)</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Main_Page&diff=909Main Page2020-05-02T18:53:14Z<p>Alb42: /* Free Pascal on Amiga, AROS and MorphOS */ link to Tutorials</p>
<hr />
<div>== Free Pascal on Amiga, AROS and MorphOS ==<br />
<br />
__NOTOC__<br />
<br />
This Page is meant as an documentation project for the Amiga systems implementation of Free Pascal and related topics (like Lazarus, LCL, fpgui).<br />
Freepascal is available for all Amiga systems (Amiga classic, AmigaOS4, AROS and MorphOS). This should not be a complete Free Pascal manual, but a compendium for the Amiga systems specifics of Free Pascal.<br />
<br />
{| id="mp-upper" style="width: 100%; margin:4px 0 0 0; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:50%; border:1px solid #cef2e0; background:#f5fffa; vertical-align:top; color:#000;" |<br />
{| id="mp-left" style="width:100%; vertical-align:top; background:#f5fffa;"<br />
| style="padding:2px;" | <h2 id="mp-tfa-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Introduction<br />
<br />
</h2><br />
|-<br />
| style="color:#000;" | <div id="mp-tfa" style="padding:2px 5px"><br />
<br />
* [[Introduction to Amiga|Introduction to Amiga systems]] - Short FAQ for those unfamiliar with Amiga Systems<br />
** [[Introduction to Amiga68k|Amiga 68k]]<br />
** [[Introduction to AmigaOS4|Amiga OS 4]]<br />
** [[Introduction to AROS|AROS]]<br />
** [[Introduction to MorphOS|MorphOS]]<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-dyk-h2" style="margin:3px; background:#cef2e0; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding:0.2em 0.4em;"> <br />
<br />
Installation and Configuration<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-dyk"><br />
<br />
How to install Free Pascal on Amiga systems<br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
* [[Configuration]] - How to configure the compiler<br />
<br />
<br />
</div><br />
|}<br />
| style="border:1px solid transparent;" |<br />
| class="MainPageBG" style="width:50%; border:1px solid #cedff2; background:#f5faff; vertical-align:top;"|<br />
{| id="mp-right" style="width:100%; vertical-align:top; background:#f5faff;"<br />
| style="padding:2px;" | <h2 id="mp-itn-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Infos and Status<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px;" | <div id="mp-itn"><br />
<br />
* [[Specifics]] - Amiga Systems Specifics in Free Pascal.<br />
* [[Status]] - Status and known Bugs of Implementation and how to avoid<br />
** [[AROS Libraries]] - Overview of included AROS library<br />
** [[FPC trunk status| FPC RTL/Packages]] - Status of the FreePascal RTL and Packages<br />
** [[Library units]] - Status of the FreePascal Library units for Amiga systems<br />
** [[LCL status]] - Status of the LCL MUI/Zune implementation<br />
<br />
</div><br />
|-<br />
| style="padding:2px;" | <h2 id="mp-otd-h2" style="margin:3px; background:#cedff2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding:0.2em 0.4em;"><br />
<br />
Coding with FreePascal for Amiga systems<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px 5px 5px;" | <div id="mp-otd"><br />
<br />
* [[Source Examples]] - examples to use on Amiga systems<br />
* [[AROS Programs]] - programs use Free Pascal on AROS or tested to work on.<br />
* [[AROS compatible projects]] - Projects written in Free Pascal that are compatible with AROS<br />
* [[Tutorial:Getting_Started|Tutorials]] - Tutorial pages in this Wiki<br />
<br />
</div><br />
|}<br />
|}<br />
<br />
{| id="mp-lower" style="margin:4px 0 0 0; width:100%; background:none; border-spacing: 0px;"<br />
| class="MainPageBG" style="width:100%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;" |<br />
{| id="mp-bottom" style="width:100%; vertical-align:top; background:#faf5ff; color:#000;"<br />
| style="padding:2px;" | <h2 id="mp-tfp-h2" style="margin:3px; background:#ddcef2; font-family:inherit; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding:0.2em 0.4em"><br />
<br />
Links<br />
<br />
</h2><br />
|-<br />
| style="color:#000; padding:2px;" | <div id="mp-tfp"> <br />
* [//www.aros.org AROS Research Operating System]<br />
* [//www.aros-exec.org AROS discussion forum]<br />
* [//www.arosworld.org AROSWorld discussion forum]<br />
* [//www.amigacoding.de Amiga Development] discussion forum (AROS, Amiga and MorphOS)<br />
<br />
<br />
* [//www.freepascal.org Free Pascal compiler], [//www.freepascal.org/docs-html/3.0.0/ Free Pascal manuals], [//wiki.freepascal.org/Category:Tutorials Free Pascal tutorials]<br />
* Free Pascal wiki-pages: [//wiki.freepascal.org/Amiga Amiga], [//wiki.freepascal.org/AmigaOS AmigaOS], [//wiki.freepascal.org/AROS AROS], [//wiki.freepascal.org/MorphOS MorphOS] and [//wiki.freepascal.org/Category:AmigaOS category AmigaOS].<br />
* [//www.alb42.de/fpc-docu/ AROS RTL reference manual]<br />
* [//fpgui.sourceforge.net fpGUI Toolkit], [//fpgui.sourceforge.net/apidocs/index.html fpGUI reference], [//github.com/graemeg/fpgui/ fpGUI GIT]<br />
* [//michalis.ii.uni.wroc.pl/~michalis/modern_pascal_introduction/modern_pascal_introduction.html Introduction to modern Pascal]<br />
<br />
<br />
* [//blog.alb42.de Blog of the porter] with download of binary package and source<br />
<br />
<br />
* [//ae.amigalife.org/index.php?board=11.0 Dedicated Free Pascal sub-forum] for all your Free Pascal related questions whether generic Pascal question(s) and/or questions about Free Pascal with regards to Amiga(OS), AROS and/or MorphOS <br />
</div><br />
|}<br />
|}</div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Tutorial:Getting_Started&diff=905Tutorial:Getting Started2019-01-01T15:38:22Z<p>Alb42: Next Link</p>
<hr />
<div><big>[[Tutorial:Start|Start]] [[Tutorial:Window|Next]]</big><br /><br />
<br />
This page is available in [[Tutorial:Einführung|german]]<br />
== Installation ==<br />
Check the installation guide for your platform: <br />
* [[Installation Classic|Amiga 68k]]<br />
* [[Installation OS4|Amiga OS4]]<br />
* [[Installation|AROS]]<br />
* [[Installation MorphOS|MorphOS]]<br />
In Short:<br />
* download the archive for your specified platform, unpack it where you want to have it, add the FreePascal: assign and add the path to your user-startup (or use the package installer for AROS)<br />
<br />
== Basic use ==<br />
=== Command-line based ===<br />
When using the command-line compiler, you can use your favorite editor (such as VIM, Annotate, etc) and compile your sources using the command-line compiler. In this Tutorial we will mainly use FP-IDE but here is a short introduction on how to use the command-line compiler:<br />
* open a shell<br />
* type <code>fpc -l</code> and press enter. Free Pascal will return with some information about the installed Free Pascal compiler. If you get this feedback returned from the compiler that means that the compiler is installed correctly (and working).<br />
* to compile a Pascal source file, just type <code>fpc sourcefile.pas</code>. Usually Pascal sources have the extension .pas but (other) Pascal compilers sometimes also uses the extensions .pp and/or .p<br />
* to compile a Lazarus project compile the .lpr file <code>fpc lazarusproject.lpr</code>. In case of a Delphi compatible project, the extension used is .dpr<br />
<br />
=== FP-IDE ===<br />
The Free Pascal IDE is a ANSI based editor with an embedded Pascal compiler, like the well known Turbo Pascal on MS-DOS. It uses the FreeVision package which is a open source package comparable to TurboVision used in Turbo Pascal. On Amiga and Amiga-a-like platforms FP-IDE needs a screen with at least 8 colors, although it works with a 4-color screen as well but in that case things look a little bit strange and some text may not be easy to read.<br />
To start the IDE, navigate to the <code>PP</code> folder and find the <code>FP-IDE</code> Icon.<br />
<br />
[[File:Tut1.png]]<br />
<br />
Double click the <code>FP-IDE</code> Icon to start the Editor. The editor will then present you with the FP-IDE Desktop. At the same time the IDE will also open a Shell window where the output (if any) of your program will appear when it is run from within the editor. So, it would be a good idea to arrange the windows in such a way that you are able to see both at the same time.<br />
<br />
[[File:Tut2.png]]<br />
<br />
In the window, at the top, you can see the menu line. It's an old DOS based program. The menu that the IDE uses is a bit different than your typical Amiga menu. You can use the mouse to navigate to the menu's and press the left mouse button to open and select menu entries. Or you can use the keyboard and press Left Alt-Key and one of the red characters (short-cut) of the Menu entries to open the Menu, select an Entry again with the red marked character and/or use the cursor keys together with the enter key to select a Menu Entry.<br />
The main (empty) middle part of the IDE leaves room for our editor window(s) that we will use later on in this tutorial.<br />
The lower hot-key line (status bar) shows some often used shortcuts such as Open and Compile, which are very useful.<br />
<br />
Since we would like to create a new file, let's navigate to the <code>File</code> Menu and select <code>New</code><br />
An editor should now open (you can open multiple editor windows, so go ahead and play around to get yourself familiar with how these windows work).<br />
<br />
[[File:Tut3.png]]<br />
<br />
On the upper left side you can find the close Button (the little green square). The window title which displays the current filename can be used to move the window around or you can double click on this title bar to maximize and/or restore the window (of course, the size of the windows has to be changed first in order to see its effect, just keep reading). The number one at the upper right of the edit window indicates the number of the editor window. The green arrow directly next to the number can also be used to maximize and restore the window.<br />
On the right side there is a checkered area with two arrows which represents the scrollbar for this editors window text. The scrollbar works like those that can be found/used on the Amiga (But it is not proportional, there is just a blue square that represent the current position as visible at the lower border). The border at the bottom of the window has a similar scrollbar but is used for horizontal scrolling. Between the two scrollbars in the lower right corner is the size gadget. Click and drag tis size-gadget in order to resize the window.<br />
At the lower left side you can find the current cursor position, showing <code>1:1</code> in the above picture.<br />
In the editor window itself you can find a blinking cursor, where you can start typing your code.<br />
Let's start with typing our very first program, of course this would be the well-known "Hello World"<br />
<source lang="pascal"><br />
program helloworld;<br />
begin<br />
writeln('Hello World');<br />
end.<br />
</source><br />
On some configurations it is sometimes difficult to find the right key that produces the correct quotation mark, especially on UAE (on a German keyboard seems Alt+Ä does work, for English it should be the single quotation mark directly on the keyboard). If you were able to determine the right key, it should show the quotation mark in a turquoise color, if instead the quote character is displayed in yellow then this indicates it is the wrong quote character. Notice that behind the last <code>end</code> there should be a dot (as every Pascal program is required to end with a dot).<br />
<br />
[[File:Tut4.png]]<br />
<br />
Before we can compile and run our program, we have to save it. To save the file, you can either use Menu entry (using the mouse and/or or keyboard) or press F2 directly. In case the editor window was not saved before, a save as dialog window will open. In order to navigate through directories, type the path into the edit field for <code>Name</code> and press the Enter key e.g. <code>work:</code>. The contents of the Drawer/Device will be shown in the area underneath. Use the Mouse or cursor-keys + Enter to navigate where you want to save your file. As is common for certain platforms, (<code>../</code> means parent directory and this entry is always located at the end of the list). e.g. Work:Sources in this example as can be seen in the lower part of the dialog window in the above picture.<br />
In the <code>Name</code> edit field, the currently selected file name is written. Delete the existing name and type <code>helloworld.pas</code> and then either hit your enter key or press the <code>OK</code> button (by either using the mouse or navigating to this button using the tab-key).<br />
<br />
[[File:Tut5.png]]<br />
<br />
Now that we have saved our program, we are now able to compile it. In order to do so, press F9 or choose Compile from the Compile Menu. Depending on your computer (especially with regards to Hard-drive speed) it will take some time to compile your source-code (On a real Amiga this takes around 30 secs, on NG Amiga's this should take only some seconds or even milliseconds).<br />
In case FP-IDE was able to compile your program correctly, its progress dialog should tell you "Compile successfully: Press any key". If the FP-IDE was unable to compiler your source-code, then it found some error(s). In case the latter, a green window opens with the error messages. Try to check the source carefully for typing errors (also note the different colors in which your code is being displayed , which can give you a hint about having used the wrong character(s) or having used uncompleted keywords). The compiler should tell you the exact (cursor) position of error. Inside the error window itself you can navigate to a specific error and press enter on the displayed error line in order to directly jump to the error in your source editor window. In case you have no idea what the error message is trying to tell you then maybe you want to ask us on Forum or IRC what's wrong. (in which case, always try to supply the code you are trying to compile together with the error message that you've received from the compiler).<br />
<br />
[[File:Tut6.png]]<br />
<br />
In order to run your program you can either press Ctrl-F9 or choose Run from the Run Menu. The Editor window closes very fast and then opens again. The Output of the program can be seen in the second window.<br />
<br />
[[File:Tut7.png]]<br />
<br />
Congratulations !.<br />
<br />
You've managed to write, compile and run your first Program on Amiga using Free Pascal and FP-IDE. Now you can extend your source to create a more meaningful program. Do not forget to save your progress (with F2 or Menu) compile (with F9) and run it (Ctrl-F9).<br />
<br />
In case you wish to know more about FP-IDE and its usage then you can always use the [http://www.freepascal.org/docs-html/3.0.0/user/user.html official Free Pascal User's Guide], specifically [http://www.freepascal.org/docs-html/3.0.0/user/userch6.html#x53-600006 the chapter that discusses the IDE]. <br />
<br />
This Tutorial should not be considered a (complete) tutorial for Pascal illiterates. If you are not familiar with the Pascal programming language, you really should try to find one of the many (online) available Pascal tutorials and try some of the accompanied examples on your Amiga (CRT and GRAPH units are not available so jump over parts using graphics for now). If you found a good Pascal tutorial you should announce the link to it here for other people.<br />
<br />
== Online Compiler ==<br />
<br />
As a easy alternative for simple programs or tests you can also use the Online FreePascal Compiler. It's a Webpage which compiles your source on a server and you can download the executable. It is limited to single file sources.<br />
<br />
How to use:<br />
* if you use a modern Browser go to the [http://home.alb42.de/fpamiga Javascript Version]<br />
* if you are using an old Amiga Browser (like iBrowse, AWeb or so) go to special Version for old Browsers [http://home.alb42.de/fpamiga/indexold.html Special Version]<br />
* Choose the platform to compile to<br />
* Press compile button<br />
* Use the "Executable" Link to download the compiled executable. (Or check the error message if the compilation failed)<br />
<br />
<br/><br />
<big>[[Tutorial:Start|Start]] Next</big></div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Tutorial:Window&diff=904Tutorial:Window2019-01-01T15:37:08Z<p>Alb42: Link</p>
<hr />
<div><big>[[Tutorial:Start|Start]] Next</big><br /><br />
<br />
== About Windows ==<br />
<br />
When Amiga was released in 1985 the availability of two interfaces to interact with the computer was quite a novel feature. Amiga's can be operated via command line interface and graphical user interface. For the latter free movable windows are very important. In this tutorial we will open a window using AmigaOS routines and perform some simple drawing. Along the way we have to deal with Tags, variable parameter, messaging, drawing principles and intuition structures.<br/><br />
<br />
The part of AmigaOS that handles Windows, Mouse and/or Keyboard input is named Intuition and is accessible by the developer through intuition.library and can be combined with use of graphics.library for drawing routines. There are more things involved but these two libraries are the most important. Both libraries with their functions can be accessed in Free Pascal with the units named intuition and agraphics. The latter had to be named AGraphics because Free Pascal itself already has a (generic) unit named graphics and which is available in the Lazarus component library. To prevent issues due to name collision we decided to change the name for Amiga platforms to agraphics. Unfortunately we have to deal with such name collisions for some of the units/libraries and also applies to some of the declared structures. A list with names that had to be changed can be found at our [[Specifics]] wiki Page.<br/><br />
<br />
== Tags, Taglists ==<br />
<br />
Some really cool innovations that the Amiga offers are hidden from the average user. The Taglist feature is such an innovation.<br />
Imagine you want to design a function that opens a window and which requires a lot of parameters in order to accomplish this. F.e. x and y coordinates, width, height, the type of window and even more if wanted. If you want to put them all into the parameter list of a declaration of a function or procedure then the list of parameters will become significant in length quickly and because of that such a lengthy list becomes very tedious to use. Usually such long lists of parameters can be avoided by using a record instead so that you would only have to supply a pointer to this record and which could then contain all parameters and other relevant information. But, after years of developing you'll notice that you need to add more and more parameters simply because more and more (powerful) features are added to their parameter list in order to be able to make use of this newly added window functionality.<br />
<br />
One way to solve that without destroying compatibility to old programs is, to create a new function or record which includes these new fields as well. MS-Windows for example did that very often. You will find many functions/records with an additional suffix "Ex" which is the extended version that is able to support new properties.<br/><br />
Amiga took a different path: Tags. You supply a list of Tags and Value pairs to the function. Every supplied Tag is just a simple integer number and corresponds to a single property of the window. Just as an example (a fictional example though, let's assume we have the following TAG-value-pairs: Left = 1, Top = 2, Width = 3, Height = 4). If we also assume that you ignore all Tags that you don't know about and by default fill all other (unknown) properties which are not provided with some meaningful default values then this offers a rather ingenious and clever way of being able to add new tag properties to such a tag-list without actually breaking either backward or forward compatibility.<br/><br />
A taglist could look like this (this is actually part of a real taglist that is used to open a window):<br />
{| class="wikitable"<br />
|-<br />
! Tag !! Value<br />
|-<br />
| WA_Width || 300<br />
|-<br />
| WA_Height || 200<br />
|-<br />
| WA_Title || 'My Window'<br />
|-<br />
| WA_DepthGadget || True<br />
|-<br />
| WA_SizeGadget || True<br />
|-<br />
| WA_DragBar || True<br />
|}<br />
<br />
As can been seen from the table above, there are different types (integer, string and boolean) that can be assigned as a Tag-value although the Tag's property name itself dictates which type that should actually be. But, in order to keep things simple we should be able to transfer all these different types using the same interface. There is a very simple but rather clever way that can solve this problem for us and that is by declaring tag values to be of type "PtrUInt" (or "NativeUInt", which is the same). This type is an unsigned integer value which is guaranteed to have enough room in order to even store a pointer. This way we are able to supply all our Tag-Values by simply casting them to PtrUInt. For example strings can be converted this way as a PChar (zero terminated C like strings) and would then be treated as any other common Pointer. Instead of casting (which is a rather tedious thing to do) there is also another solution available and that is offered by unit Utility, that offers a special set of wrapper functions named AsTag(). AsTag() will automatically convert all possible types into a PtrUint. You can find them in the utility unit. Another notable feature of such tag-lists is that the list itself always needs to end with a special closing tag named TAG_END. That let every other function that work with tag-lists know where the actual end of the list is located. The TAG_END-Tag does not really require an actual tag-value. Since its common for a picture to be able to tell more than a thousand words, adding a list of tag-value pairs to a list looks something like:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Tag !! Value<br />
|-<br />
| WA_Width || AsTag(300)<br />
|-<br />
| WA_Height || AsTag(200)<br />
|-<br />
| WA_Title || AsTag('My Window')<br />
|-<br />
| WA_DepthGadget || AsTag(True)<br />
|-<br />
| WA_SizeGadget || AsTag(True)<br />
|-<br />
| WA_DragBar || AsTag(True)<br />
|-<br />
| TAG_END<br />
|}<br />
<br />
Free Pascal is smart enough to create the string for WA_Title as type PChar. Be aware that this is not possible if the string is calculated at this point. Besides that, we also have to take into account whether or not the PChar that is going to be supplied to the function is copied or not (but more on that later).<br/><br />
<br />
Now, with all this gained knowledge let's try to open a window om our workbench. The Amiga Api offers quite some different functions that open a window:<br/><br />
* [http://www.alb42.de/fpc-docu/intuition/openwindow.html OpenWindow()] - This is an older declaration/interface that was used before taglists where invented but is still available for compatibility reasons.<br />
* [http://www.alb42.de/fpc-docu/intuition/openwindowtaglist.html OpenWindowTagList()] - This function requires a link to a tag-list for the second parameter. You create the tag-list before making the actual call to the function. This is very convenient in case you wish to manipulate the tag-list beforehand or programmaticaly.<br />
* [http://www.alb42.de/fpc-docu/intuition/openwindowtags.html OpenWindowTags()] - This function has a <code>array of PtrUInt</code> as second parameter which can be used to directly supply a list of tags and corresponding tag-values to the function.<br />
<br />
For example a simple way to create a window (with the given parameter) will be:<br />
<br />
<source lang="Pascal"><br />
OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
TAG_END <br />
])<br />
</source><br />
<br />
Of course we need to close the Window again, with [http://www.alb42.de/fpc-docu/intuition/closewindow.html CloseWindow()] which needs the pointer to the window we created. This is returned by the OpenWindow call and has the type [http://www.alb42.de/fpc-docu/intuition/pwindow.html PWindow] so we need to put that into a variable.<br />
<br />
<br />
<source lang="Pascal"><br />
program window;<br />
uses<br />
utility, intuition;<br />
var<br />
win: PWindow;<br />
begin <br />
win := OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
TAG_END <br />
]);<br />
CloseWindow(win);<br />
end.<br />
</source><br />
<br />
This program will open a window and close it directly again. We can introduce a <code>Sleep(1000)</code> to at least see the window. Next step is to keep the window open until the user pressed the close gadget, as you are used to it. For that we have to react to the event of clicking the gadget.<br />
<br />
=== Events ===<br />
currently the window does not have a close gadget, we need to activate that on the openwindow call with this flag: <code>WA_Flags, WFLG_CloseGadget</code>. Flags are parameter for the window. If you need several flags at once, just or them together.<br />
To have the close gadget is not enough we also have to activate the event, we supply an additional tag <code>OpenWindow()</code> call: <code>WA_IDCMP, IDCMP_CLOSEWINDOW</code> which tells the system that we want to be notified when the window gets closed. To get this event message we have to check the message port of the window. The message port is something like a post box where events about that window arrive. You can use the function [http://www.alb42.de/fpc-docu/exec/getmsg.html GetMsg()] from the exec unit. Now we need the message port of the window which is a field of the window we created called <code>win^.UserPort</code>. First we have to wait until a message appears using [http://www.alb42.de/fpc-docu/exec/waitport.html WaitPort()], it blocks the execution until a message appears in the message port and gives other tasks a chance to do something. Which is much better than asking the port as fast as possible until a message appears. After we get the message we can inspect the contents of it, if we finished with this message we reply to the sender that we processed the message an we do not need it anymore. The call to do that is [http://www.alb42.de/fpc-docu/exec/replymsg.html ReplyMsg()]. Do not access the message after this call usually the sender of the message will free the memory of it. The usual flow will be:<br />
<source lang="Pascal"><br />
repeat<br />
WaitPort(Win^.UserPort);<br />
Msg := GetMsg(Win^.UserPort);<br />
// Process Msg<br />
ReplyMsg(Msg);<br />
until done;<br />
</source><br />
Because we only called for a single message if a message arrive it will be our message, but because we later want to react on more messages we have to process the message first. Because that message is send to window by intuition it's type is not just [http://www.alb42.de/fpc-docu/exec/pmessage.html PMessage] but [http://www.alb42.de/fpc-docu/intuition/pintuimessage.html PIntuiMessage] which has the field <code>Msg^.IClass</code> which defines the type of message received. If that field is <code>IDCMP_CLOSEWINDOW</code> that message is a close window event. putting all together it looks like that:<br />
<br />
<source lang="Pascal"><br />
program window;<br />
uses<br />
exec, sysutils, utility, intuition;<br />
var<br />
win: PWindow;<br />
done: Boolean = False;<br />
Msg: PMessage;<br />
begin <br />
win := OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
WA_Flags, WFLG_CloseGadget,<br />
WA_IDCMP, IDCMP_CLOSEWINDOW,<br />
TAG_END <br />
]);<br />
repeat<br />
WaitPort(Win^.UserPort);<br />
Msg := GetMsg(Win^.UserPort);<br />
case PIntuiMessage(Msg)^.IClass of<br />
IDCMP_CloseWindow: Done := True;<br />
end;<br />
ReplyMsg(Msg);<br />
until done;<br />
CloseWindow(win);<br />
end.<br />
</source><br />
<br />
This way you get a window which behaves more or less like you would expect from a normal intuition window. Close bring to front/send to back and dragging works as expected but the size gadget do not work. The reason for this is that we did not set minimum and maximum sizes for the window to rescale to if we set the additional tags for the open window call:<br />
<source lang="Pascal"><br />
WA_MaxWidth, AsTag(640),<br />
WA_MaxHeight, AsTag(256),<br />
WA_MinWidth, AsTag(100),<br />
WA_MinHeight, AsTag(100),<br />
</source><br />
An empty window is not very impressive so we draw some stuff into. Drawing is always done with the functions found in agraphics unit working on the rastport of the window, which is something like a drawing board.<br />
As start we clear the contents of the Window and then draw a text to it. Clearing the Contents of window is easy, just call [http://www.alb42.de/fpc-docu/agraphics/setrast.html SetRast()] wit the rastport of the window and the Pen you want to use to clear (e.g. 0 = background color). To write a text we have to define the text color, text mode, text position and print the actual text. Basically you have 2 pens Pen A (= Foreground pen) and Pen B (= Background Pen), we only want to use a single color here because we cleared the background already so we only need to set pen A using [http://www.alb42.de/fpc-docu/agraphics/setapen.html SetAPen()] (e.g. Pen 1 = black) now we set the modus of the text printing, we only want the A Pen used so we "jam" one color to the rastport, Draw mode = JAM1 (if we want to use foreground and background color = jam two colors DrawMode = JAM2) The call to do that is: [http://www.alb42.de/fpc-docu/agraphics/setdrmd.html SetDrMd()]. At last we define a position in the window where we want to print the text (e.g. Pixel x=50, y=50) The call for that is called <code>Move()</code> in Amiga API but this names clashed with the <code>move()</code> function in the system unit (to copy memory areas), therefore this function is renamed [http://www.alb42.de/fpc-docu/agraphics/GFXMove.html gfxmove()] (You can check the [[Specifics#Changed_constants.2Ffunction_Names|Specifics]] Page for a list of such renamed functions.)<br />
Everything is setup so we can print out the text using the <code>Text()</code> function which is renamed to [http://www.alb42.de/fpc-docu/agraphics/gfxtext.html GFXMove()] with the same reason.<br />
We call this function directly after creation of the window.<br />
<source lang="Pascal"><br />
program window;<br />
uses<br />
exec, sysutils, utility, intuition, agraphics;<br />
<br />
procedure Paint(AWin: PWindow);<br />
var<br />
str: AnsiString;<br />
begin<br />
SetRast(AWin^.RPort, 0);<br />
str := 'Hello World';<br />
SetAPen(AWin^.RPort, 1);<br />
SetDrMd(AWin^.RPort, JAM1);<br />
GFXMove(AWin^.RPort, 50, 50);<br />
GFXText(AWin^.RPort, PChar(str), Length(str));<br />
end;<br />
<br />
var<br />
win: PWindow;<br />
done: Boolean = False;<br />
Msg: PMessage;<br />
begin <br />
win := OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_MaxWidth, AsTag(640),<br />
WA_MaxHeight, AsTag(256),<br />
WA_MinWidth, AsTag(100),<br />
WA_MinHeight, AsTag(100),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
WA_Flags, WFLG_CloseGadget,<br />
WA_IDCMP, IDCMP_CLOSEWINDOW,<br />
TAG_END <br />
]);<br />
Paint(Win); <br />
repeat<br />
WaitPort(Win^.UserPort);<br />
Msg := GetMsg(Win^.UserPort);<br />
case PIntuiMessage(Msg)^.IClass of<br />
IDCMP_CloseWindow: Done := True;<br />
end;<br />
ReplyMsg(Msg);<br />
until done;<br />
CloseWindow(win);<br />
end.<br />
</source><br />
if we run this, we notice two things, first our drawing destroys the window decoration and if we make the window as small as possible and big again, part of the "Hello World" is gone. The first thing is easy to solve. We create a simple window, but with that the rastport we draw to is the complete window, including the window decoration, so we can either care about that on every drawing or we change to a "Zero Zero" Window which gives you a rastport without the window decoration. "Zero Zero" because the 0,0 point is the left top edge of the user drawable area and not the real 0,0 of the window. It also protects the window decoration from overdrawing. To set our window to a "Zero Zero" window we need to add a new Flag to the OpenWindow taglist:<br />
<source lang="Pascal"><br />
WA_Flags, WFLG_CloseGadget or WFLG_GIMMEZEROZERO,<br />
</source><br />
Now the window looks like it should be, background and a black text in it, without decoration destroyed.<br />
When you resize the window (or move an other window in front of your window) it might be needed to refresh the drawing. Intution is able to send us a message when this is needed. The message is called <code>IDCMP_REFRESHWINDOW</code> with the same method as the Close window message we have to activate that message and process it, when it arrives. Activating be adding it to the <code>WA_IDCMP</code> tag of the openwindow tag list. And process it in the main loop calling the <code>Paint()</code> procedure again (thats the reason I created it as a procedure) all together it looks like that:<br />
<br />
<source lang="Pascal"><br />
program window;<br />
uses<br />
exec, sysutils, utility, intuition, agraphics;<br />
<br />
procedure Paint(AWin: PWindow);<br />
var<br />
str: AnsiString;<br />
begin<br />
SetRast(AWin^.RPort, 0);<br />
str := 'Hello World';<br />
SetAPen(AWin^.RPort, 1);<br />
SetDrMd(AWin^.RPort, JAM1);<br />
GFXMove(AWin^.RPort, 50, 50);<br />
GFXText(AWin^.RPort, PChar(str), Length(str));<br />
end;<br />
<br />
var<br />
win: PWindow;<br />
done: Boolean = False;<br />
Msg: PMessage;<br />
begin <br />
win := OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_MaxWidth, AsTag(640),<br />
WA_MaxHeight, AsTag(256),<br />
WA_MinWidth, AsTag(100),<br />
WA_MinHeight, AsTag(100),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
WA_Flags, WFLG_CloseGadget or WFLG_GIMMEZEROZERO,<br />
WA_IDCMP, IDCMP_CLOSEWINDOW or IDCMP_REFRESHWINDOW,<br />
TAG_END <br />
]);<br />
Paint(Win); <br />
repeat<br />
WaitPort(Win^.UserPort);<br />
Msg := GetMsg(Win^.UserPort);<br />
case PIntuiMessage(Msg)^.IClass of<br />
IDCMP_CloseWindow: Done := True;<br />
IDCMP_REFRESHWINDOW: Paint(Win);<br />
end;<br />
ReplyMsg(Msg);<br />
until done;<br />
CloseWindow(win);<br />
end.<br />
</source><br />
<br />
And finally we have it, a fully functioning Amiga API window with a little text inside. Of course you can extend the <code>Paint()</code> procedure with more lines or rectangles, and you can use the GZZHeight and GZZWidth fields of the <code>win</code> to determine the actual size of your drawing area.<br />
<br />
<big>[[Tutorial:Start|Start]] Next</big><br /></div>Alb42http://fpcamigawiki.alb42.de/index.php?title=Tutorial:Window&diff=903Tutorial:Window2018-12-31T14:57:22Z<p>Alb42: /* Tags, Taglists */ drawing, GZZ, refreshing</p>
<hr />
<div>== About Windows ==<br />
<br />
When Amiga was released in 1985 the availability of two interfaces to interact with the computer was quite a novel feature. Amiga's can be operated via command line interface and graphical user interface. For the latter free movable windows are very important. In this tutorial we will open a window using AmigaOS routines and perform some simple drawing. Along the way we have to deal with Tags, variable parameter, messaging, drawing principles and intuition structures.<br/><br />
<br />
The part of AmigaOS that handles Windows, Mouse and/or Keyboard input is named Intuition and is accessible by the developer through intuition.library and can be combined with use of graphics.library for drawing routines. There are more things involved but these two libraries are the most important. Both libraries with their functions can be accessed in Free Pascal with the units named intuition and agraphics. The latter had to be named AGraphics because Free Pascal itself already has a (generic) unit named graphics and which is available in the Lazarus component library. To prevent issues due to name collision we decided to change the name for Amiga platforms to agraphics. Unfortunately we have to deal with such name collisions for some of the units/libraries and also applies to some of the declared structures. A list with names that had to be changed can be found at our [[Specifics]] wiki Page.<br/><br />
<br />
== Tags, Taglists ==<br />
<br />
Some really cool innovations that the Amiga offers are hidden from the average user. The Taglist feature is such an innovation.<br />
Imagine you want to design a function that opens a window and which requires a lot of parameters in order to accomplish this. F.e. x and y coordinates, width, height, the type of window and even more if wanted. If you want to put them all into the parameter list of a declaration of a function or procedure then the list of parameters will become significant in length quickly and because of that such a lengthy list becomes very tedious to use. Usually such long lists of parameters can be avoided by using a record instead so that you would only have to supply a pointer to this record and which could then contain all parameters and other relevant information. But, after years of developing you'll notice that you need to add more and more parameters simply because more and more (powerful) features are added to their parameter list in order to be able to make use of this newly added window functionality.<br />
<br />
One way to solve that without destroying compatibility to old programs is, to create a new function or record which includes these new fields as well. MS-Windows for example did that very often. You will find many functions/records with an additional suffix "Ex" which is the extended version that is able to support new properties.<br/><br />
Amiga took a different path: Tags. You supply a list of Tags and Value pairs to the function. Every supplied Tag is just a simple integer number and corresponds to a single property of the window. Just as an example (a fictional example though, let's assume we have the following TAG-value-pairs: Left = 1, Top = 2, Width = 3, Height = 4). If we also assume that you ignore all Tags that you don't know about and by default fill all other (unknown) properties which are not provided with some meaningful default values then this offers a rather ingenious and clever way of being able to add new tag properties to such a tag-list without actually breaking either backward or forward compatibility.<br/><br />
A taglist could look like this (this is actually part of a real taglist that is used to open a window):<br />
{| class="wikitable"<br />
|-<br />
! Tag !! Value<br />
|-<br />
| WA_Width || 300<br />
|-<br />
| WA_Height || 200<br />
|-<br />
| WA_Title || 'My Window'<br />
|-<br />
| WA_DepthGadget || True<br />
|-<br />
| WA_SizeGadget || True<br />
|-<br />
| WA_DragBar || True<br />
|}<br />
<br />
As can been seen from the table above, there are different types (integer, string and boolean) that can be assigned as a Tag-value although the Tag's property name itself dictates which type that should actually be. But, in order to keep things simple we should be able to transfer all these different types using the same interface. There is a very simple but rather clever way that can solve this problem for us and that is by declaring tag values to be of type "PtrUInt" (or "NativeUInt", which is the same). This type is an unsigned integer value which is guaranteed to have enough room in order to even store a pointer. This way we are able to supply all our Tag-Values by simply casting them to PtrUInt. For example strings can be converted this way as a PChar (zero terminated C like strings) and would then be treated as any other common Pointer. Instead of casting (which is a rather tedious thing to do) there is also another solution available and that is offered by unit Utility, that offers a special set of wrapper functions named AsTag(). AsTag() will automatically convert all possible types into a PtrUint. You can find them in the utility unit. Another notable feature of such tag-lists is that the list itself always needs to end with a special closing tag named TAG_END. That let every other function that work with tag-lists know where the actual end of the list is located. The TAG_END-Tag does not really require an actual tag-value. Since its common for a picture to be able to tell more than a thousand words, adding a list of tag-value pairs to a list looks something like:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Tag !! Value<br />
|-<br />
| WA_Width || AsTag(300)<br />
|-<br />
| WA_Height || AsTag(200)<br />
|-<br />
| WA_Title || AsTag('My Window')<br />
|-<br />
| WA_DepthGadget || AsTag(True)<br />
|-<br />
| WA_SizeGadget || AsTag(True)<br />
|-<br />
| WA_DragBar || AsTag(True)<br />
|-<br />
| TAG_END<br />
|}<br />
<br />
Free Pascal is smart enough to create the string for WA_Title as type PChar. Be aware that this is not possible if the string is calculated at this point. Besides that, we also have to take into account whether or not the PChar that is going to be supplied to the function is copied or not (but more on that later).<br/><br />
<br />
Now, with all this gained knowledge let's try to open a window om our workbench. The Amiga Api offers quite some different functions that open a window:<br/><br />
* [http://www.alb42.de/fpc-docu/intuition/openwindow.html OpenWindow()] - This is an older declaration/interface that was used before taglists where invented but is still available for compatibility reasons.<br />
* [http://www.alb42.de/fpc-docu/intuition/openwindowtaglist.html OpenWindowTagList()] - This function requires a link to a tag-list for the second parameter. You create the tag-list before making the actual call to the function. This is very convenient in case you wish to manipulate the tag-list beforehand or programmaticaly.<br />
* [http://www.alb42.de/fpc-docu/intuition/openwindowtags.html OpenWindowTags()] - This function has a <code>array of PtrUInt</code> as second parameter which can be used to directly supply a list of tags and corresponding tag-values to the function.<br />
<br />
For example a simple way to create a window (with the given parameter) will be:<br />
<br />
<source lang="Pascal"><br />
OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
TAG_END <br />
])<br />
</source><br />
<br />
Of course we need to close the Window again, with [http://www.alb42.de/fpc-docu/intuition/closewindow.html CloseWindow()] which needs the pointer to the window we created. This is returned by the OpenWindow call and has the type [http://www.alb42.de/fpc-docu/intuition/pwindow.html PWindow] so we need to put that into a variable.<br />
<br />
<br />
<source lang="Pascal"><br />
program window;<br />
uses<br />
utility, intuition;<br />
var<br />
win: PWindow;<br />
begin <br />
win := OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
TAG_END <br />
]);<br />
CloseWindow(win);<br />
end.<br />
</source><br />
<br />
This program will open a window and close it directly again. We can introduce a <code>Sleep(1000)</code> to at least see the window. Next step is to keep the window open until the user pressed the close gadget, as you are used to it. For that we have to react to the event of clicking the gadget.<br />
<br />
=== Events ===<br />
currently the window does not have a close gadget, we need to activate that on the openwindow call with this flag: <code>WA_Flags, WFLG_CloseGadget</code>. Flags are parameter for the window. If you need several flags at once, just or them together.<br />
To have the close gadget is not enough we also have to activate the event, we supply an additional tag <code>OpenWindow()</code> call: <code>WA_IDCMP, IDCMP_CLOSEWINDOW</code> which tells the system that we want to be notified when the window gets closed. To get this event message we have to check the message port of the window. The message port is something like a post box where events about that window arrive. You can use the function [http://www.alb42.de/fpc-docu/exec/getmsg.html GetMsg()] from the exec unit. Now we need the message port of the window which is a field of the window we created called <code>win^.UserPort</code>. First we have to wait until a message appears using [http://www.alb42.de/fpc-docu/exec/waitport.html WaitPort()], it blocks the execution until a message appears in the message port and gives other tasks a chance to do something. Which is much better than asking the port as fast as possible until a message appears. After we get the message we can inspect the contents of it, if we finished with this message we reply to the sender that we processed the message an we do not need it anymore. The call to do that is [http://www.alb42.de/fpc-docu/exec/replymsg.html ReplyMsg()]. Do not access the message after this call usually the sender of the message will free the memory of it. The usual flow will be:<br />
<source lang="Pascal"><br />
repeat<br />
WaitPort(Win^.UserPort);<br />
Msg := GetMsg(Win^.UserPort);<br />
// Process Msg<br />
ReplyMsg(Msg);<br />
until done;<br />
</source><br />
Because we only called for a single message if a message arrive it will be our message, but because we later want to react on more messages we have to process the message first. Because that message is send to window by intuition it's type is not just [http://www.alb42.de/fpc-docu/exec/pmessage.html PMessage] but [http://www.alb42.de/fpc-docu/intuition/pintuimessage.html PIntuiMessage] which has the field <code>Msg^.IClass</code> which defines the type of message received. If that field is <code>IDCMP_CLOSEWINDOW</code> that message is a close window event. putting all together it looks like that:<br />
<br />
<source lang="Pascal"><br />
program window;<br />
uses<br />
exec, sysutils, utility, intuition;<br />
var<br />
win: PWindow;<br />
done: Boolean = False;<br />
Msg: PMessage;<br />
begin <br />
win := OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
WA_Flags, WFLG_CloseGadget,<br />
WA_IDCMP, IDCMP_CLOSEWINDOW,<br />
TAG_END <br />
]);<br />
repeat<br />
WaitPort(Win^.UserPort);<br />
Msg := GetMsg(Win^.UserPort);<br />
case PIntuiMessage(Msg)^.IClass of<br />
IDCMP_CloseWindow: Done := True;<br />
end;<br />
ReplyMsg(Msg);<br />
until done;<br />
CloseWindow(win);<br />
end.<br />
</source><br />
<br />
This way you get a window which behaves more or less like you would expect from a normal intuition window. Close bring to front/send to back and dragging works as expected but the size gadget do not work. The reason for this is that we did not set minimum and maximum sizes for the window to rescale to if we set the additional tags for the open window call:<br />
<source lang="Pascal"><br />
WA_MaxWidth, AsTag(640),<br />
WA_MaxHeight, AsTag(256),<br />
WA_MinWidth, AsTag(100),<br />
WA_MinHeight, AsTag(100),<br />
</source><br />
An empty window is not very impressive so we draw some stuff into. Drawing is always done with the functions found in agraphics unit working on the rastport of the window, which is something like a drawing board.<br />
As start we clear the contents of the Window and then draw a text to it. Clearing the Contents of window is easy, just call [http://www.alb42.de/fpc-docu/agraphics/setrast.html SetRast()] wit the rastport of the window and the Pen you want to use to clear (e.g. 0 = background color). To write a text we have to define the text color, text mode, text position and print the actual text. Basically you have 2 pens Pen A (= Foreground pen) and Pen B (= Background Pen), we only want to use a single color here because we cleared the background already so we only need to set pen A using [http://www.alb42.de/fpc-docu/agraphics/setapen.html SetAPen()] (e.g. Pen 1 = black) now we set the modus of the text printing, we only want the A Pen used so we "jam" one color to the rastport, Draw mode = JAM1 (if we want to use foreground and background color = jam two colors DrawMode = JAM2) The call to do that is: [http://www.alb42.de/fpc-docu/agraphics/setdrmd.html SetDrMd()]. At last we define a position in the window where we want to print the text (e.g. Pixel x=50, y=50) The call for that is called <code>Move()</code> in Amiga API but this names clashed with the <code>move()</code> function in the system unit (to copy memory areas), therefore this function is renamed [http://www.alb42.de/fpc-docu/agraphics/GFXMove.html gfxmove()] (You can check the [[Specifics#Changed_constants.2Ffunction_Names|Specifics]] Page for a list of such renamed functions.)<br />
Everything is setup so we can print out the text using the <code>Text()</code> function which is renamed to [http://www.alb42.de/fpc-docu/agraphics/gfxtext.html GFXMove()] with the same reason.<br />
We call this function directly after creation of the window.<br />
<source lang="Pascal"><br />
program window;<br />
uses<br />
exec, sysutils, utility, intuition, agraphics;<br />
<br />
procedure Paint(AWin: PWindow);<br />
var<br />
str: AnsiString;<br />
begin<br />
SetRast(AWin^.RPort, 0);<br />
str := 'Hello World';<br />
SetAPen(AWin^.RPort, 1);<br />
SetDrMd(AWin^.RPort, JAM1);<br />
GFXMove(AWin^.RPort, 50, 50);<br />
GFXText(AWin^.RPort, PChar(str), Length(str));<br />
end;<br />
<br />
var<br />
win: PWindow;<br />
done: Boolean = False;<br />
Msg: PMessage;<br />
begin <br />
win := OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_MaxWidth, AsTag(640),<br />
WA_MaxHeight, AsTag(256),<br />
WA_MinWidth, AsTag(100),<br />
WA_MinHeight, AsTag(100),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
WA_Flags, WFLG_CloseGadget,<br />
WA_IDCMP, IDCMP_CLOSEWINDOW,<br />
TAG_END <br />
]);<br />
Paint(Win); <br />
repeat<br />
WaitPort(Win^.UserPort);<br />
Msg := GetMsg(Win^.UserPort);<br />
case PIntuiMessage(Msg)^.IClass of<br />
IDCMP_CloseWindow: Done := True;<br />
end;<br />
ReplyMsg(Msg);<br />
until done;<br />
CloseWindow(win);<br />
end.<br />
</source><br />
if we run this, we notice two things, first our drawing destroys the window decoration and if we make the window as small as possible and big again, part of the "Hello World" is gone. The first thing is easy to solve. We create a simple window, but with that the rastport we draw to is the complete window, including the window decoration, so we can either care about that on every drawing or we change to a "Zero Zero" Window which gives you a rastport without the window decoration. "Zero Zero" because the 0,0 point is the left top edge of the user drawable area and not the real 0,0 of the window. It also protects the window decoration from overdrawing. To set our window to a "Zero Zero" window we need to add a new Flag to the OpenWindow taglist:<br />
<source lang="Pascal"><br />
WA_Flags, WFLG_CloseGadget or WFLG_GIMMEZEROZERO,<br />
</source><br />
Now the window looks like it should be, background and a black text in it, without decoration destroyed.<br />
When you resize the window (or move an other window in front of your window) it might be needed to refresh the drawing. Intution is able to send us a message when this is needed. The message is called <code>IDCMP_REFRESHWINDOW</code> with the same method as the Close window message we have to activate that message and process it, when it arrives. Activating be adding it to the <code>WA_IDCMP</code> tag of the openwindow tag list. And process it in the main loop calling the <code>Paint()</code> procedure again (thats the reason I created it as a procedure) all together it looks like that:<br />
<br />
<source lang="Pascal"><br />
program window;<br />
uses<br />
exec, sysutils, utility, intuition, agraphics;<br />
<br />
procedure Paint(AWin: PWindow);<br />
var<br />
str: AnsiString;<br />
begin<br />
SetRast(AWin^.RPort, 0);<br />
str := 'Hello World';<br />
SetAPen(AWin^.RPort, 1);<br />
SetDrMd(AWin^.RPort, JAM1);<br />
GFXMove(AWin^.RPort, 50, 50);<br />
GFXText(AWin^.RPort, PChar(str), Length(str));<br />
end;<br />
<br />
var<br />
win: PWindow;<br />
done: Boolean = False;<br />
Msg: PMessage;<br />
begin <br />
win := OpenWindowTags(nil, <br />
[<br />
WA_Width, AsTag(300),<br />
WA_Height, AsTag(200),<br />
WA_MaxWidth, AsTag(640),<br />
WA_MaxHeight, AsTag(256),<br />
WA_MinWidth, AsTag(100),<br />
WA_MinHeight, AsTag(100),<br />
WA_Title, AsTag('My Window'),<br />
WA_DepthGadget, AsTag(True),<br />
WA_SizeGadget, AsTag(True),<br />
WA_DragBar, AsTag(True),<br />
WA_Flags, WFLG_CloseGadget or WFLG_GIMMEZEROZERO,<br />
WA_IDCMP, IDCMP_CLOSEWINDOW or IDCMP_REFRESHWINDOW,<br />
TAG_END <br />
]);<br />
Paint(Win); <br />
repeat<br />
WaitPort(Win^.UserPort);<br />
Msg := GetMsg(Win^.UserPort);<br />
case PIntuiMessage(Msg)^.IClass of<br />
IDCMP_CloseWindow: Done := True;<br />
IDCMP_REFRESHWINDOW: Paint(Win);<br />
end;<br />
ReplyMsg(Msg);<br />
until done;<br />
CloseWindow(win);<br />
end.<br />
</source><br />
<br />
And finally we have it, a fully functioning Amiga API window with a little text inside. Of course you can extend the <code>Paint()</code> procedure with more lines or rectangles, and you can use the GZZHeight and GZZWidth fields of the <code>win</code> to determine the actual size of your drawing area.</div>Alb42