PROCEDURE MAIN()
LOCAL A:={ "one ", "two ", "three" }
LOCAL AA:={ "AA-one ", "AA-two ", "AA-three", "AA-four " }
LOCAL c:="abcdefghij"
LOCAL enum:="b"
LOCAL bb, cc
LOCAL i
? "========================================================"
? "before loop: ENUM=",ENUM
? 'before loop: a[1]=',a[1], 'a[2]=',a[2], 'a[3]=',a[3]
FOR EACH enum IN A
? "start: ENUM=", ENUM
IF ENUM = 'two'
ENUM := UPPER( ENUM )
ENDIF
? "end: ENUM=", ENUM, "| index:", ENUM:__enumIndex, "| value:", ENUM:__enumValue, "| base: ", VALTYPE(ENUM:__enumBase)
NEXT
? "after loop ENUM=", ENUM
? 'after loop: a[1]=',a[1], 'a[2]=',a[2], 'a[3]=',a[3]
? "-----------------"
?
inkey(0)
? "========================================================"
? "Testing passing by reference"
? "before loop: ENUM=",ENUM
? 'after loop: a[1]=',a[1], 'a[2]=',a[2], 'a[3]=',a[3]
FOR EACH ENUM IN A
IF UPPER(ENUM) = 'TWO'
ENUM := UPPER( ENUM )
? "before passing by @ | ENUM=", ENUM, "| index:", ENUM:__enumIndex, "| value:", ENUM:__enumValue, "| base: ", VALTYPE(ENUM:__enumBase)
testBYREF( @ENUM )
? " after passing by @ | ENUM=", ENUM, "| index:", ENUM:__enumIndex, "| value:", ENUM:__enumValue, "| base: ", VALTYPE(ENUM:__enumBase)
ENDIF
NEXT
? "after loop ENUM=", ENUM
? 'after loop: a[1]=',a[1], 'a[2]=',a[2], 'a[3]=',a[3]
inkey(0)
? "========================================================"
? "Testing BREAK"
? "before loop: ENUM=",ENUM
? 'after loop: a[1]=',a[1], 'a[2]=',a[2], 'a[3]=',a[3]
BEGIN SEQUENCE
FOR EACH enum IN A DESCEND
? "loop: ENUM=", ENUM, "| index:", ENUM:__enumIndex, "| value:", ENUM:__enumValue, "| base: ", VALTYPE(ENUM:__enumBase)
TESTbreak( ENUM )
NEXT
RECOVER USING i
? "after loop ENUM=", ENUM
? 'after loop: a[1]=',a[1], 'a[2]=',a[2], 'a[3]=',a[3]
? "recover variable i=", i
END SEQUENCE
inkey(0)
? "========================================================"
? "before loop: ENUM=",ENUM
? 'before loop: c=',c
BEGIN SEQUENCE
FOR EACH enum IN c
? "start: ENUM=", ENUM
IF enum = 'd'
enum := UPPER( enum )
ENDIF
Testbreak( enum )
? "end: ENUM=", ENUM, "| index:", ENUM:__enumIndex, "| value:", ENUM:__enumValue, "| base: ", VALTYPE(ENUM:__enumBase)
NEXT
RECOVER USING i
? "after loop ENUM=", ENUM
? 'after loop: c=', c
? "recover variable i=", i
END SEQUENCE
? "========================================================"
FOR EACH enum,bb,cc IN A,AA,c
? enum, enum:__enumIndex, enum:__enumValue
? bb, bb:__enumIndex, bb:__enumValue
? cc, cc:__enumIndex, cc:__enumValue
NEXT
inkey(0)
? "========================================================"
FOR EACH enum,bb,cc IN A,AA,c DESCEND
? enum, enum:__enumIndex, enum:__enumValue
? bb, bb:__enumIndex, bb:__enumValue
? cc, cc:__enumIndex, cc:__enumValue
NEXT
FOR EACH enum IN a
BEGIN SEQUENCE
IF enum = '2'
BREAK
ENDIF
END SEQUENCE
NEXT
FOR EACH enum IN a
BEGIN SEQUENCE
IF enum = '2'
? "Breaking... enum=", enum
BREAK enum
ENDIF
RECOVER USING enum
? "after recovery: enum=", enum
END SEQUENCE
NEXT
RETURN
PROCEDURE TESTbreak( v )
IF v = '2' .or. v = 'd'
? "issuing break"
BREAK( v )
ENDIF
RETURN
PROCEDURE TESTBYREF( enum )
? "start of testBYREF ENUM=", ENUM
FOR EACH ENUM IN {1,2,3}
? " -testBYREF=", ENUM
NEXT
? "end of loop: ENUM=", ENUM
ENUM := "22222"
? "end of testBYREF ENUM=", ENUM
RETURN