On Wednesday 27 February 2008 09:44, Michael Schnell wrote: > You can avoid cryptic language constructs in the main source code.
Or you can avoid cryptic languages altogether. :D > I did not yet use the preprocessor in Pascal but a standard way to > access memory mapped ports in C is something like this (from the top > of my head): > > > #define _port = 0x87 > > #define ByteIO(p) *(((volatile unsigned char)*)(p)) > > #define port=ByteIO(_port) -- 8< -- snip -- with Interfaces; with System.Storage_Elements; procedure Foo is -- -- Declare a reusable volatile 8 bit IO port type. -- type IO_Port is new Integer range 0 .. 255; for IO_Port'Size use 8; -- 8 bits, of course. pragma Atomic (IO_Port); -- Sort of superfluous here. pragma Volatile (IO_Port); -- Make address conversions directly visible, -- but only inside "Foo" here. use System.Storage_Elements; -- Now declare a (volatile) IO port variable, -- and tell its address. My_Port : IO_Port; for My_Port'Address use To_Address (16#87#); begin -- Assign the 0x55 value to the 0x87 address. My_Port := 2#01010101#; end Foo; -- 8< -- snip -- Although it's a whole lot of declarations for this simple: -- 8< -- _ada_foo: .LFB3: movb $85, 135 ret .LFE3: -- 8< -- So, given the right choices, neither C, nor a preprocessor is needed. And hell, preprocessors sometimes are even forbidden for a particular project. If you want to verify code you need the code which turns up after being preprocessed anyway. Vinzent. _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel