/* CIF PROCESS (150, 150), (150, 75) */ PROCESS challenge; STATE on; SUBSTRUCTURE in (via_toto); out (ret0); STATE hello; SUBSTRUCTURE /* CIF PROCEDURE (892, 436), (73, 35) */ PROCEDURE entry; /* CIF START (178, 136), (70, 35) */ START; /* CIF PROCEDURECALL (160, 186), (106, 35) */ CALL writeln('8'); /* CIF PROCEDURECALL (145, 236), (136, 35) */ CALL writeln('Hello!'); /* CIF RETURN (195, 286), (35, 35) */ RETURN ; ENDPROCEDURE; /* CIF START (349, 133), (70, 35) */ START; /* CIF NEXTSTATE (312, 183), (144, 35) */ NEXTSTATE wait_in_sub_hello; /* CIF STATE (582, 147), (144, 35) */ STATE wait_in_sub_hello; ENDSTATE; ENDSUBSTRUCTURE; /* CIF TEXT (242, 251), (334, 95) */ dcl myresult T_UInt8 := 4; -- Use a variable with the same name as a variable -- in the outer scope, to check that code generators -- use the proper one dcl result T_UInt32 := 9; /* CIF ENDTEXT */ /* CIF PROCEDURE (558, 143), (70, 33) */ PROCEDURE exit /* CIF COMMENT (648, 118), (157, 93) */ COMMENT 'Special exit procedure - called automatically when leaving the nested state'; /* CIF START (163, 119), (70, 35) */ START; /* CIF PROCEDURECALL (68, 169), (259, 35) */ CALL writeln('LEAVING the nested state'); /* CIF RETURN (180, 219), (35, 35) */ RETURN ; ENDPROCEDURE; /* CIF PROCEDURE (239, 522), (102, 35) */ PROCEDURE inner_proc; /* CIF TEXT (31, 41), (364, 93) */ fpar in toto T_UInt8; -- Redefine a variable declared in outer scope dcl result t_Boolean := true; /* CIF ENDTEXT */ /* CIF START (479, 97), (70, 35) */ START; /* CIF LABEL (471, 147), (86, 35) */ hey_joe: /* CIF PROCEDURECALL (457, 197), (113, 35) */ CALL writeln('10'); /* CIF TASK (453, 247), (121, 35) */ TASK result := false; /* CIF LABEL (473, 297), (82, 35) */ leaving: /* CIF RETURN (496, 347), (35, 35) */ RETURN ; ENDPROCEDURE; /* CIF PROCEDURE (554, 54), (73, 35) */ PROCEDURE entry /* CIF COMMENT (643, 31), (190, 83) */ COMMENT 'Special Entry procedure - called automatically upon entrance to the nested state'; /* CIF START (191, 78), (70, 35) */ START; /* CIF PROCEDURECALL (100, 128), (251, 35) */ CALL writeln('ENTERING NESTED STATE'); /* CIF RETURN (208, 178), (35, 35) */ RETURN ; ENDPROCEDURE; /* CIF START (1188, 7), (89, 35) */ START via_toto ; /* CIF PROCEDURECALL (1179, 57), (106, 35) */ CALL writeln('3'); /* CIF RETURN (1215, 107), (35, 35) */ RETURN ret0; /* CIF START (938, 8), (70, 35) */ START; /* CIF PROCEDURECALL (920, 58), (106, 35) */ CALL writeln('7'); /* CIF LABEL (917, 108), (111, 35) */ inside_label: /* CIF PROCEDURECALL (904, 158), (137, 35) */ CALL pow(3,3, result); /* CIF DECISION (936, 208), (74, 50) */ DECISION result; /* CIF ANSWER (861, 278), (92, 23) */ (myresult): /* CIF ANSWER (985, 278), (70, 23) */ ELSE: /* CIF TASK (962, 316), (115, 35) */ TASK myresult := 5; ENDDECISION; /* CIF LABEL (929, 366), (88, 35) */ nslabel: /* CIF NEXTSTATE (938, 416), (70, 35) */ NEXTSTATE hello; /* CIF LABEL (132, 324), (90, 35) */ CONNECTION to_label: /* CIF JOIN (159, 374), (35, 35) */ JOIN another_floating; /* CIF End Label */ ENDCONNECTION; /* CIF LABEL (512, 472), (141, 35) */ CONNECTION another_floating: /* CIF PROCEDURECALL (526, 522), (113, 35) */ CALL writeln('9'); /* CIF TASK (525, 572), (115, 35) */ TASK myresult := 1; /* CIF PROCEDURECALL (500, 622), (164, 35) */ CALL inner_proc(myresult); /* CIF RETURN (565, 672), (35, 35) */ RETURN ; /* CIF End Label */ ENDCONNECTION; /* CIF STATE (0, 0), (70, 35) */ STATE hello; /* CIF INPUT (0, 61), (70, 35) */ INPUT run; /* CIF PROCEDURECALL (-52, 111), (175, 35) */ CALL writeln('27 == ', result); /* CIF PROCEDURECALL (0, 161), (70, 35) */ CALL toto; /* CIF TASK (-27, 211), (125, 53) */ TASK myresult := 88, result := 33; /* CIF JOIN (17, 279), (35, 35) */ JOIN to_label; ENDSTATE; ENDSUBSTRUCTURE; /* CIF TEXT (506, 0), (298, 56) */ -- This system tests nested states dcl result T_uint32 :=0; /* CIF ENDTEXT */ /* CIF PROCEDURE (-19, 183), (70, 35) */ PROCEDURE foo; /* CIF START (190, 53), (70, 35) */ START; /* CIF RETURN (207, 103), (35, 35) */ RETURN ; ENDPROCEDURE; /* CIF PROCEDURE (-24, 247), (66, 35) */ PROCEDURE toto; /* CIF TEXT (371, 134), (298, 140) */ -- Declare your variables -- Syntax: DCL ; dcl i T_Int8 := 1; /* CIF ENDTEXT */ /* CIF START (178, 86), (70, 35) */ START; /* CIF DECISION (178, 136), (70, 50) */ DECISION i; /* CIF ANSWER (131, 206), (73, 23) */ (1): /* CIF TASK (96, 244), (143, 35) */ TASK i := (i + 1) mod 127; /* CIF RETURN (150, 294), (35, 35) */ RETURN ; /* CIF ANSWER (249, 206), (70, 23) */ ELSE: /* CIF PROCEDURECALL (249, 244), (70, 35) */ CALL foo; /* CIF RETURN (266, 294), (35, 35) */ RETURN ; ENDDECISION; ENDPROCEDURE; /* CIF START (-341, 99), (68, 37) */ START; /* CIF PROCEDURECALL (-360, 151), (106, 35) */ CALL writeln('1'); /* CIF NEXTSTATE (-342, 201), (70, 35) */ NEXTSTATE OFF; /* CIF STATE (157, 278), (73, 35) */ STATE Safe; /* CIF INPUT (102, 333), (70, 35) */ INPUT *; /* CIF PROCEDURECALL (84, 383), (106, 35) */ CALL writeln('5'); /* CIF PROCEDURECALL (72, 433), (130, 35) */ CALL pow(2,2, result); /* CIF PROCEDURECALL (53, 483), (168, 35) */ CALL writeln('4 == ', result); /* CIF NEXTSTATE (102, 533), (70, 35) */ NEXTSTATE -; /* CIF INPUT (297, 333), (88, 35) */ INPUT any_one; /* CIF PROCEDURECALL (284, 383), (113, 35) */ CALL writeln('6'); /* CIF NEXTSTATE (306, 433), (70, 35) */ NEXTSTATE on; ENDSTATE; /* CIF STATE (851, 72), (65, 35) */ STATE on; /* CIF INPUT (1043, 127), (88, 35) */ INPUT any_one; /* CIF NEXTSTATE (1030, 177), (113, 35) */ NEXTSTATE -; /* CIF INPUT (1153, 127), (78, 35) */ INPUT go_off; /* CIF NEXTSTATE (1161, 177), (62, 35) */ NEXTSTATE OFF; /* CIF CONNECT (884, 127), (0, 35) */ CONNECT ret0; /* CIF PROCEDURECALL (831, 177), (106, 35) */ CALL writeln('4'); /* CIF NEXTSTATE (850, 227), (67, 35) */ NEXTSTATE Safe; /* CIF CONNECT (568, 127), (0, 35) */ CONNECT ; /* CIF PROCEDURECALL (494, 177), (147, 35) */ CALL writeln('11 (end)'); /* CIF PROCEDURECALL (533, 227), (70, 35) */ CALL toto; /* CIF NEXTSTATE (533, 277), (70, 35) */ NEXTSTATE off; ENDSTATE; /* CIF STATE (-342, 201), (70, 35) */ STATE OFF; /* CIF INPUT (-342, 256), (70, 35) */ INPUT run; /* CIF PROCEDURECALL (-360, 306), (106, 35) */ CALL writeln('2'); /* CIF NEXTSTATE (-374, 357), (132, 35) */ NEXTSTATE on via via_toto /* CIF COMMENT (-222, 357), (219, 35) */ COMMENT 'Enter substate via entry point'; ENDSTATE; ENDPROCESS challenge;