[fpc-pascal]Apple Mac pointer problem

Stephen Downs stephend at e-tempest.co.uk
Fri Sep 24 09:44:50 CEST 2004


> -----Original Message-----
> From: Olle Raab [mailto:olle.r at automagika.se]
> Sent: 23 September 2004 21:45
> To: fpc-pascal at lists.freepascal.org
> Subject: Re: [fpc-pascal]Apple Mac pointer problem
> 
> 04-09-23 23.09, skrev Stephen Downs följande:
> 
> > -----Original Message-----
> > From:    Marcel Martin [mailto:mm10 at ellipsa.net]
> > Sent:    Thu 9/23/2004 9:18 PM
> > To:    fpc-pascal at lists.freepascal.org
> > Cc:
> > Subject:    Re: [fpc-pascal]Apple Mac pointer problem
> >
> > Stephen Downs a écrit :
> >>
> >> I am porting a Mac CodeWarrior project to FreePascal and have hit a
> >> compile problem with a pointer. In my original code I have a structure
> >> defined along the lines of
> >>
> >> testData = record
> >> testIndex :  array [0..12] of integer;
> >> end;
> >>
> >> testDataPointer = ^testData;
> >> testDataHandle = ^testDataPointer;
> >>
> >> Within my main code I open a file and try to read it into my structure
> >>
> >> testDataHdl := testDataHandle(NewHandleClear(sizeof(testData)));
> >> OSError := FSRead(fileRefNum, numberOfBytes, testDataHdl^)
> >>
> >> The FSRead line fails with error: 62: Incompatible type for arg no. 3:
> >> Got "testDataPointer", expected "Ptr" - the third parameter for FSRead
> is a
> >> pointer. I presume this is because FreePascal uses typed pointers.
> 
> The reason you get the error msg is that fpc supports UNIV as a dummy
> keyword. Is it is accepted but doesn't do anything.
> 
> Since the third param is declared UNIV you do not need any typecast in
> Metrowerks, but you need to cast to Ptr in fpc (as Marcel suggests).
> 
> From UI:
> 
> FUNCTION FSRead(refNum: INTEGER; VAR count: LONGINT; buffPtr: UNIV Ptr):
> OSErr;
> 
> >> I
> >> tried replacing testDataHdl^ by Ptr(testDataHdl)^ but that gives a
> >> similar error - Got "ShortInt", expected "Ptr"
> 
> The mac type Ptr is defined as usual in the UI, as a pointer to a signed
> byte, hence the reference to ShortInt in the error msg, which is a signed
> byte.
> 
> >> Does anyone know how I can get around this?
> >
> >> This is very likely a stupid suggestion but have you tried this
> >>
> >> Ptr(testDataHdl^)
> 
> > I had tried that and it compiles ok but when it runs, the FSRead
> statement
> > returns an error -36 which is an I/O error
> 
> Are you shure nothing else is wrong ?
> 
> If you read a binary file, alignment might not be the same.
> 
> Actually FPC does not align arrays the same as trad mac compilers.
> 

Thanks for everyones input (Harold - it a Mac thing !!). I'm away for a couple of days now so won't be able to follow up until next week but I guess I need to read up on alignment of binary data.

I assume from what you are saying is that Ptr(testDataHdl^) is the right way to do it in FreePascal but I need to check on how the data is read into the structure.

> Olle
> 
> 
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal






More information about the fpc-pascal mailing list