atari-home.de - Foren

Software => Coding => Thema gestartet von: mstz am Sa 26.01.2013, 00:21:47

Titel: PurePascal: Frage zu Fdatime
Beitrag von: mstz am Sa 26.01.2013, 00:21:47
Hallo,

mit PurePascal habe ich derzeit das folgende Problem:

Definiert ist auf übliche Weise unter "type"

 DOSTIME = record
  time: Word;
  date: Word;
 end;
 dt = ^DOSTIME;

Der Aufruf von Fdatime erfolgt nun mit:

var
 timeptr: dt;

begin
  timeptr:=NIL;
  Fdatime( timeptr, filehandle, 0 );
 end;

Und laut der PurePascal Doku sollte der Aufruf von "Fdatime"
mit timeptr als erstem von drei Argumenten wie beschrieben erfolgen,
erzeugt auf meinem System aber Fehlermeldungen (falscher Typ des ersten Parameters).

Habt ihr Beispiele für die Verwendung von Fdatime oder Ideen, was schiefläuft?
(Auch laut der TOS-Doku sollte der erste Parameter ein Zeiger auf die Struktur DOSTIME sein.)

Danke im Voraus und viele Grüße
 Markus
Titel: Re: PurePascal: Frage zu Fdatime
Beitrag von: mfro am Sa 26.01.2013, 00:52:11
Hallo,

mit PurePascal habe ich derzeit das folgende Problem:

Definiert ist auf übliche Weise unter "type"

 DOSTIME = record
  time: Word;
  date: Word;
 end;
 dt = ^DOSTIME;

Der Aufruf von Fdatime erfolgt nun mit:

var
 timeptr: dt;

begin
  timeptr:=NIL;
  Fdatime( timeptr, filehandle, 0 );
 end;

Und laut der PurePascal Doku sollte der Aufruf von "Fdatime"
mit timeptr als erstem von drei Argumenten wie beschrieben erfolgen,
erzeugt auf meinem System aber Fehlermeldungen (falscher Typ des ersten Parameters).

Habt ihr Beispiele für die Verwendung von Fdatime oder Ideen, was schiefläuft?
(Auch laut der TOS-Doku sollte der erste Parameter ein Zeiger auf die Struktur DOSTIME sein.)

Danke im Voraus und viele Grüße
 Markus

timeptr darf kein NIL-Zeiger sein, sondern einer auf einen existierenden DOSTIME-record, meine ich. Dort werden die Werte reinkopiert.
Titel: Re: PurePascal: Frage zu Fdatime
Beitrag von: mstz am Sa 26.01.2013, 22:02:16
Hallo mfro,

ja, aber es funktioniert bei mir einfach nicht: auch

var
 timeptr: dt;

begin
  New( timeptr );
  Fdatime( timeptr, filehandle, 0 );
  Dispose( timeptr );
 end;

oder auch:

var
 timeptr: ^DOSTIME;
 dtime: DOSTIME;

begin
 timeptr:=@dtime;

 Fdatime( timeptr, filehandle, 0);
end;

scheitert mit "Error: Types of actual and formal var parameters must be identical". Der Blick in die Pure Pascal Doku zeigt aber:

procedure Fdatime( var timeptr: DOSTIME; handle, wflag: Integer);

was der Beschreibung widerspricht... Anyway: auch eine Variable vom Typ DOSTIME zu übergeben scheitert.

Unter Pure C funktioniert das ganze übrigens problemlos, z. B.:

unsigned getfdate( int handle )
{
 DOSTIME *timeptr;
 DOSTIME times;
 
 timeptr=×
 
 Fdatime( timeptr, handle, 0 );
}

Irgendetwas sehe ich hier nicht???

Viele Grüße
 Markus
Titel: Re: PurePascal: Frage zu Fdatime
Beitrag von: gstoll am So 27.01.2013, 07:28:55
rgendetwas sehe ich hier nicht???

USES TOS;

VAR
 timer: DOSTIME;
 filehandle : integer;

begin
   filehandle := 0;
 Fdatime( timer, filehandle, 0);
end.

Das obige sollte gehen.  DOSTIME ist übrigends schon in TOS.INT definiert, welche ja durch USES TOS eingebunden wird.
Titel: Re: PurePascal: Frage zu Fdatime
Beitrag von: mstz am So 27.01.2013, 20:46:38
Hallo Gerhard,

vielen Dank für den entscheidenden Hinweis, dass DOSTIME schon in der TOS.INT definiert ist.

Eigentlich sehr einfach, das Problem war die Neudefinition von "DOSTIME", zwar wie in der Doku zu Pure Pascal definiert, aber trotzdem falsch.

Als ich den Code von Pure C nach Pascal übetragen habe, ist mir das nicht aufgefallen. Jetzt kompiliert alles  :)

Beste Grüße
 Markus