program VariantEnumResult;
type
Color = (Red, Green, Blue, Yellow);
ShapeKind = (Circle, Rectangle);
Shape = record
x, y: integer;
case kind: integer of
0: (radius: integer);
1: (width, height: integer);
end;
var
c: integer;
s: Shape;
function DoubleIt(n: integer): integer;
begin
result := n * 2;
end;
function ColorName(c: integer): string;
begin
case c of
0: result := 'Red';
1: result := 'Green';
2: result := 'Blue';
3: result := 'Yellow';
else
result := 'Unknown';
end;
end;
begin
{ Test enumerated types }
c := Red;
writeln('Red = ', c);
c := Blue;
writeln('Blue = ', c);
writeln('Ord(Green) = ', ord(Green));
writeln('Succ(Red) = ', succ(Red));
writeln('Pred(Blue) = ', pred(Blue));
{ Test inc/dec }
c := Red;
inc(c);
writeln('After inc(Red): ', c);
dec(c);
writeln('After dec back: ', c);
{ Test result variable }
writeln('DoubleIt(21) = ', DoubleIt(21));
writeln('ColorName(2) = ', ColorName(2));
{ Test variant record }
s.x := 10;
s.y := 20;
s.kind := 0;
s.radius := 5;
writeln('Circle at (', s.x, ',', s.y, ') radius=', s.radius);
s.kind := 1;
s.width := 30;
s.height := 40;
writeln('Rect at (', s.x, ',', s.y, ') ', s.width, 'x', s.height);
end.