[fpc-pascal] Boolean case statement

Vincent Snijders vsnijders at quicknet.nl
Tue Dec 5 22:44:12 CET 2006


Terry Kemp schreef:
> Hi All
> 
> how do you do a case statement on a record of booleans e.g...
> 
> Type
>  EngModeRec = Record
>   ManualOp: Boolean;
>   LeakTest: Boolean;
>   DrainFlush: Boolean;
>  end;
> 
> var
>  EngMode: EngModeRec;
> 
> I want to have...
> 
>  Case True of 
>   EngMode.ManualOp: ManualOpRun;
>   EngMode.LeakTest: LeakTestRun;
>   EngMode.DrainFlush: DrainFlushRun;
>  end; 
> 
> but of course this wont work :(
> 
>

You cannot use it like that. You would have to use an nested if then 
statement like:

if EngMode.ManualOp then ManualRun
else if EngMode.ManualOp then LeakTest
else etc.


I would use an enum:

type
   TEngMode = (emManualOp, emLeakTest, emDrainFlush);

var
   EngMode : TEngMode;

case EngMode of
   emManualOp: ManualRun;
   emLeakTest: LeakTestRun;
   emDrainFlush: DrainFlushTest;
end;

if several EngMode can occur at the same time (like can happen with 
EngModeRec) you can use

type
   TEngModeSet = set of TEngMode;

But then you cannot use case anymore to do the tests.

HTH,
Vincent



More information about the fpc-pascal mailing list