According to Berend De Schouwer:
I'd like to read bytes from a file, so I looked at some of the examples. I found an assign(file of byte...). Cool. It doesn't seem to work to great tho... How big does it read? Are you sure its just 1 byte?
Yes. See below for an example program which I just tested to work - with the alpha version gpc-970401.
How big is a byte anyway?
8 bits. :-)
Looking at the examples and the info file, I get confused. Is an integer 16bit or 32bit?
32.
What happens with type byte=0..255;
It will take 4 bytes. :-( Sorry - this is a known bug.
I tried defining them like in the info file (using __short__, etc.) but it doesn't compile. When I use the example's stuff it does compile.
See below for something which does compile.
Hmmm... I am converting some stuff from borland, and some from fpk, so I would like to know how to get 8, 16 and 32 bit signed and unsinged integers. I don't mind doing a search/replace on the source, but I do need to know how big each thing is.
The alpha version gpc-970401 has the following built-in types:
Byte unsigned 8 bits ByteInt signed 8 bits ShortWord unsigned 16 bits ShortInt signed 16 bits Word unsigned 32 bits Integer signed 32 bits LongWord unsigned 64 bits LongInt signed 64 bits
Single = ShortReal 32 Bits Double = Real 64 Bits Extended = LongReal 80 Bits on the PC, maybe 128 elsewhere
However there is one known problem with these types: You cannot `write' or `writeln' them to text file. (Binary files are okay.)
If you
writeln ( a [ 7 ] );
with `a' being an array of bytes, you might get some very strange result because `writeln' outputs the integer consisting of `a [ 7 ]' and the following three bytes.
To work around, cast these types to their base type:
writeln ( Integer ( a [ 7 ] ) );
(The same holds for an `Extended' which you must cast to `Real' in order to `writeln' it.)
AND how to apply them properly to files ;)
I hope the example below helps you. If you want to upgrade to gpc-970401, the URL is
ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/alpha/
Greetings,
Peter
Dipl.-Phys. Peter Gerwinski, Essen, Germany, free physicist and programmer peter.gerwinski@uni-essen.de - http://home.pages.de/~peter.gerwinski/ [970201] maintainer GNU Pascal [970401] - http://home.pages.de/~gnu-pascal/ [970125]
8< ---- test.pas -------------------------------------------------------------
{OK} (* This program will read its own source and output 'OK'. *)
Program Test;
Type ByteInt = __byte__ Integer; Byte = __unsigned__ ByteInt; ByteFile = file of Byte;
Var F: ByteFile; C: Char;
Procedure Assign ( Var T: ByteFile; Name: String );
Var B: BindingType;
begin (* Assign *) unbind ( T ); B:= binding ( T ); B.Name:= Name; bind ( T, B ); B:= binding ( T ); end (* Assign *);
begin Assign ( F, 'test.pas' ); reset ( F ); read ( F, C ); read ( F, C ); write ( C ); read ( F, C ); writeln ( C ); close ( F ); end.