> Vinzent H?fler> Probably you should used a "packed record", though. And it's > in no > Vinzent H?fler> way portable, of course. > Also correct. > Jonas
I use {$A-} abc= record something: byte; case byte of 1: (a,b: byte); 2: (c: word); end; {$A+} // or even a: byte; rsrvd1: array[1..3] of byte; b: word; ... {$IF sizeof(abc)<>1234} {$FATAL Неверный размер записи для заголовка (sizeof(abc)<>1234).} // I think, there is no need to translate:) {$ENDIF} because I read binaries generated by other programs. So it's mostly portable: if it was supposed to be really portable, I'd add endianness checking. What am I thinking of is a construction like xyz= object raw: abc; function GetA: byte; function GetB: byte; function GetC: word; property something: byte READ raw.something; property a: byte READ GetA; property b: byte READ GetB; property c: word READ GetC; procedure GetData(...); // obtain data for the first time, writes to the 'raw' end; function xyz.GetA: byte; begin if something=1 then GetA:= raw.a else Show_Fatal_Error_Message(Fatal_Error_ID); end; function xyz.GetB: byte; begin if something=1 then GetB:= raw.b else Show_Fatal_Error_Message(Fatal_Error_ID); end; function xyz.GetC: word; begin if something=2 then GetC:= raw.c else Show_Fatal_Error_Message(Fatal_Error_ID); end; But it's somewhat bulky (in the case of many types), so I hoped there is a language feature for my convenience (I don't know pascal very well and didn't understand corresponding documentation in the one way). _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal