/* * $Id$ */ 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 /* test(@a,b) test(a,@b) test(@a,@b) */ ? "========================================================" ? "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