Moderators: simonsunnyboy, Mug UK, Zorro 2, Moderator Team

charles wrote:i been using pure pascal and gfa lately its good the gfa functions well and when making a stand alone executable , a file produced is labelled test.o
from what i know this file is a binary object file right?
now with pure pascal , the language allow object files to be included and used as modules
but the small problem i have is
the gfa .o is a different format
and
the little ttp program pure pascal threw in to make .o out of .pas files ,
doesn't fully convert a pas into a .o ,
or doesn't convert them atleast the way they have demonstration .o files on the disk allready.
whats missing or what have i missed?
how do i make a pure pascal .o file
(the editor uses it as long as {$L XXX.o} is included as directive)
or
how do i use some gfa code in .o format
within pure pascal ??
charles



PPU2O - Wandlung von bersetzten Pure Pascal Units in Pure C Objektfiles
========================================================================
Aufruf:
PPU2O unit1.ppu [unit2.ppu ...]
wandelt die angegebenen Units in Objektfiles unit1.o ... um.
Gewandelt wird immer in Pure C Objektformat, Umwandlung in DRI-Format
ist nicht m”glich.
Optionen:
(noch) keine.
PPU2O erlaubt es, Pure Pascal Programmteile von C oder Assemblerhaupt-
programmen aus aufzurufen.
Die Umwandlung durch PPU2O geschieht folgendermažen:
- Namen, die im Interfaceteil der Unit deklariert wurden, werden
im Objektfile global.
- Namen, die im Implementierungsteil der Unit deklariert wurden,
werden lokal.
- Namen, die aus anderen Units verwendet wurden, werden extern.
- Alle Namen werden bereits vom Pascal Compiler in Grožbuchstaben
gewandelt, aber sonst nicht ver„ndert. Wenn gleichlautende
Namen in verschiedenen Units vorhanden sind, kann es also
zu Mehrfachdefinitionen von Namen im Pure C Linker kommen,
auch wenn fr den Pascal Linker alles in Ordnung ist.
- Der Initialisierungsteil der Unit erh„lt den Namen der Unit.
Selbst wenn der Quelltext leer ist, enth„lt der generierte Code
Aufrufe zur Initialisierung der in USES-Klauseln aufgefhrten Units.
Es empfiehlt sich daher, ihn beim Programmstart aufzurufen, falls
der Pascalteil Routinen aus Bibliotheken bzw. anderen Units ver-
wendet.
Auch die verwendeten Pure Pascal Bibliotheks-Units mssen mit PPU2O
gewandelt und hinzugebunden werden, damit der Linker keine undefinierten
Symbole meldet.
Sollen von Pascal aus C Routinen oder Variablen angesprochen werden,
so sollten diese fr Pascal in einer "Dummy"-Unit deklariert werden,
die selbst nicht gewandelt und hinzugebunden wird. Der Pascal-Compiler
erzeugt einen Aufruf auf den Initialisierungsteil dieser Unit, der
als C-Funktion vorhanden sein sollte, aber leer sein kann.
Da nun der Pure Pascal Startupcode nicht durchlaufen wird (sondern der
von C bzw. ein eigener), sind bestimmte Variable der Unit SYSTEM
nicht initialisiert und deshalb nicht benutzbar:
- Variable AppFlag zur Unterscheidung von Accessories und Programmen
ist nicht gesetzt.
- Die Mechanismen zum Verlassen des Programms sind nicht initialisiert.
Deshalb Programm ber die C-Mechanismen (exit() etc.) verlassen.
- Die Kommandozeile ist nicht aufbereitet, deshalb sind die Funktionen
ParamCount und ParamStr nicht verwendbar.
- Variable BasePage ist nicht gesetzt.
- Variable StackLimit ist nicht gesetzt, damit funktioniert die
$S-Option (Stack overflow checking) nicht richtig und sollte
ausgeschaltet werden.
Die Aufrufkonventionen von Pure Pascal sind weitgehend mit Pure C
vertr„glich, in beiden Sprachen werden Parameter soweit wie m”glich
in Registern bergeben. Bei der Deklaration von Pascalroutinen in C
ist somit NICHT das Schlsselwort 'pascal' anzugeben.
N„heres zu den Aufrufkonventionen und zur internen Darstellung von
Pure Pascal Datentypen im Handbuch ab Seite 244 oder im Help unter:
Pascal/Pure Pascal intern.
Hier ein einfaches Beispiel, in dem eine in Pascal geschriebene
Funktion von C aus aufgerufen wird.
Zun„chst der Pascal Quelltext:
FAC_UNIT.PAS:
=========================================================================
Unit fac_unit;
interface
function fac( n : integer ) : integer;
implementation
function fac( n : integer ) : integer;
begin
if n <= 0 then
fac := 1
else
fac := fac( n - 1 ) * n;
end;
end.
=========================================================================
Hier das Hauptprogramm in C:
FAC_MAIN.C:
=========================================================================
#include <stdio.h>
extern void FAC_UNIT(void); /* Initialisierungsteil */
extern int FAC( int n ); /* function fac ... */
main()
{
int fac5;
FAC_UNIT(); /* Initialisiere die Unit */
fac5 = FAC(5); /* Aufruf der Funktion */
printf("fac(5) = %d\n", fac5);
return(0);
}
=========================================================================
Die Projektdatei fr Pure C:
=========================================================================
fac.prg
=
pcstart.o ; C-Startupcode
fac_main.c ; Hauptprogram in C
fac_unit.o ; Gewandelte Pascal Unit
system.o ; Gewandelte Pascal System Unit
pcstdlib.lib ; C-Standardbibliothek
=========================================================================
Zum Zusammenbauen mssen wir zun„chst in Pure Pascal den Quelltext
FAC_UNIT.PAS in FAC_UNIT.PPU bersetzen.
Dann mssen FAC_UNIT.PPU und die System Unit SYSTEM.PPU in Pure C
Objektdateien gewandelt werden:
PPU2O FAC_UNIT SYSTEM
Schliežlich veranlassen wir in Pure C mit Make ... die šbersetzung
von FAC_MAIN.C und das Linken des Programms.



wongck wrote:I thought all objects file are the same.

wongck wrote:I thought all objects file are the same.


charles wrote: its pure c object code that pure pascal can use as linkable code,,,
probally said that in the help files but they are all in hungaruian or german or duetche

charles wrote:i might just be able to understand c at some point ! maybe even learn too!

charles wrote:i set out tonight using devpac 3 and making object code but this did not every work correctly
when linked to pascal
charles wrote:so i eventually chased after c ,,(this is the first time i ever tryied c too!)
pure c seems easy to use and the compilier is almost exactually like pure pascal
charles wrote:now i wonder if i load my asm code into pure c
and compile
will this code be readable by pascal linked functions and procedures

joska wrote:If Pure Pascal is like Pure C, it can be configured to create objects in DRI format. The same applies to Devpac 3 IIRC (haven't used it since 1994). But doesn't Pure Pascal have it's own assembler?


Users browsing this forum: CommonCrawl [Bot] and 0 guests