Hello! In order to address the endian problem I use some auxiliary types to access the entities:
(* Standard types *) type t_32u=longint; // 32 bit unsigned t_bool=boolean; (* Endian types *) (*$a1 *) type t_intel_32u=object // Delphi forbids "packed object"; trusting $a1 instead... value: t_32u; procedure assign(q:t_32u); procedure do_add(q:t_32u); procedure do_sub(q:t_32u); procedure do_or(q:t_32u); procedure do_and(q:t_32u); procedure do_xor(q:t_32u); procedure do_and_not(q:t_32u); procedure do_not; function is_equal(const q:t_intel_32u):t_bool; end; t_motorola_32u=object private x: packed array [0..4-1] of t_8u; // or t_32u public function value:t_32u; procedure assign(q:t_32u); procedure do_add(q:t_32u); procedure do_sub(q:t_32u); procedure do_or(q:t_32u); procedure do_and(q:t_32u); procedure do_xor(q:t_32u); procedure do_and_not(q:t_32u); procedure do_not; function is_equal(const q:t_motorola_32u):t_bool; end; The corresponding code has some ifdefs. I then use these types to build my exchange types such as: type t_my_record=packed record a,b: t_motorola_32u; c: packed array [0..8-1] of t_motorola_32u; end; The interface for all these types is more or less the same. In the application I always read the values via "value" and write them via "assign". All exchange types should be packed records with only such types. BTW: I often use t_motorola_24u to access ASPI stuff... Jasper PS: Wouldn't it make sense to have such types in a standard library for FPC? ___________________________________________________________ WEB.DE DSL Doppel-Flat ab 19,99 €/mtl.! Jetzt auch mit gratis Notebook-Flat! http://produkte.web.de/go/DSL_Doppel_Flatrate/2 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal