Enum

Declares an enumerated type.

Syntax
   Enum [typename [ Explicit ] ]
      symbolname [= expression] [, ...]
      ...
   End Enum

Parameters
   typename
      Name of the Enum
   symbolname
      Name of the constant
   expression
      A constant expression
   Explicit
      Requires that symbols must be explicitly referred to by typename.
      symbolname

Description
   Enum, short for enumeration, declares a list of symbol names that 
   correspond to discrete values. If no initial value is given, the first 
   item will be set to 0.  Each subsequent symbol has a value one more than 
   the previous unless expression is given.

   Symbols may be each on their own line, or separated on a single line by 
   commas.

   An Enum is a useful way of grouping together a set of related Constants. 
   A symbol can be accessed like a constant, e.g: a = symbolname.  But if 
   the name clashes with another symbol, it must be resolved using typename
   .symbolname.  This resolution method is always required if you make the 
   enum Explicit.

   A non-Explicit Enum declared inside an Extern ... End Extern block will 
   add its constants to the parent namespace directly, as in C, instead of 
   acting as a namespace on its own. It disallows the typename.symbolname 
   style of access, and the constants may conflict with other symbols from 
   the parent namespace.

   Enum can not contain any member procedure or member data (only symbols), 
   but it can be included (named or unnamed) in a Type by having.

   An Enum instance can be passed, as any user defined instance, to a 
   procedure (including for the definition of Overloaded operators).
   The size of an Enum instance will be always that of an Integer (no 
   matter how many defined symbols are just declarations for the compiler 
   assignment).

Example
   Enum MyEnum
      option1 = 1
      option2
      option3
   End Enum

   Dim MyVar As MyEnum

   MyVar = option1

   Select Case MyVar
      Case option1
         Print "Option 1"
      Case option2
         Print "Option 2"
      Case option3
         Print "Option 3"
   End Select

   You can reference formerly declared symbol names within the same enum:
   Enum MyEnum
      option1 = 1
      option2
      option3
      __
      MAX_VALUE = __ -1
   End Enum

   Print "Option #1:", MyEnum.option1
   Print "Option #2:", MyEnum.option2
   Print "Option #3:", MyEnum.option3
   Print "Max Value:", MyEnum.MAX_VALUE

	Output:

   Option #1:     1
   Option #2:     2
   Option #3:     3
   Max Value:     3

Dialect Differences
   * Explicit Enum not available in the -lang qb dialect unless referenced 
     with the alias __Explicit.

Differences from QB
   * New to FreeBASIC

See also
   * Const
   * Operator
   * Table with variable types overview, limits and suffixes

