------------------------SDT2;?Controller----------------------------------------------------ObjectName----------------------------------------ObjectType----------------------------------------!%&()LinkEndpoints--------------------------------1------------------------------------------------- Controller----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 5--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------()[8(! PROCESS Controller)]}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*()[(! f! 22!(d)[(! f)[(! 6)[(! 6d! )]][ (! 6r)][3(! 6! ,!S)[8(! WaitRegUser)][(!^!"^)[(! 6! d!S!)[8(! Card(Card))][(!&!"&)[%(! 6&! d!S)[8(! Display (EnterCode))][(!!")[ (! 6R! !S)[8(! CALL ReadCode (KeyMax, Code))][(!!")[8(! 6R! (TimedOut))][%(! 6! d!S)[8(!% FlashMessage (Timeout, InsertCard))][(!L!"L)[(! 6L!Z)][3(! 6L! d!S)[8(! WaitRegUser)]]]]][(! x x!"x  )[8(! 69! (Successful))][%(! 6! d!S)[8(! Display (PleaseWait))][(!xxL!"xLx)[ (! 6L!  ,!S)[8(! CALL Register (Card, Code))][(!"xx!"x)[8(! 6! OK)][%(! 6~! d!S)[8(!( FlashMessage (Registered, InsertCard))][(!x!"x)[(! 6!Z)][3(! 6~! d!S)[8(! WaitCard)]]]]][( !"xx!"x)[8(! 6'! NotOK)][%(! 6! d!S)[8(!$ FlashMessage (NotReg, InsertCard))][(!x !"x)[(! 6!Z)][3(! 6! d!S)[8(! WaitCard)]]]]]]]]]]]]]]]][2z(! 6,,! d!S)[8(! )][}(!!")[6](! 6,! d!S)[8(! DoorNr := DoorNr + 1)][`(!X!"X)[ (! 6,! d!S)[8(! Doors(DoorNr))][(! !" )[ (! 6 ! ,!S)[8(! OFFSPRING /= Null)][(!!")[8(! 6! false)][%(! 6! !S)[8(!V Display((('Door nr ' // mkstring(chr(48 + DoorNr)) )// ' could not be allocated')))][(!!")[6(! 6! ,!S)[8(! DoorBase(DoorNr) := offspring)][(!!")[ (! 6! ,!S)[8(! DoorNr < DoorMax)][(!*'K'K!"')[8(! 6d! true)][(! 6!)][)]()]][4(!&'X'X!"X&')[8(! 6q@! false)][ ((! 6! d!S)[8(! CALL MainCardExists)][ 1(!"L!"L)[(! 6Lr!! !S)[8(! New procedure)]]][+(!:!":)[8(! 6w! false)][%(! 6,:! d!S)[8(! Display (InsertMain))][ :(!,ll!"l,l)[7(! 6:!! !S)[8Z)][3(! 6F! d!S)[8(! WaitCard)]]]]]]]]]]}"@)[(! 6@!Z)][3(! 6~@! d)[8(! WaitCard)]]]f(! No main card registered)]]][(!!")[(! 6!Z)][3(! 6,! d!S)[8(! WaitRegUser)]]]]][.(!=()[(! f! 22!(P)[(! f)[(! 6)[(! 6d! )]][ (! 6r)][3(! 6^d! ,!S)[8(! !(!4:!5!7)[!(! DefinitionPage!)[!(! 1!!2!3)[!(! 2!!3)]]]}(! 3!!3)]]]]}-------------------------------!%()PageOrder-------------------------------------1-------------------------------------------------2finitionPage------------------------------------DefinitionPage------------------------------------ !%()HeadingText-----------------------------------2------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------()[w(!GSDL)]}-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------()[(! f! 22!(d)[h(! f)[k(! 6)[n(! 6d! )]][ t(! 6v)][9(! 62,! !S)[8(! IMPORTED PROCEDURE Display; FPAR IN Charstring; IMPORTED PROCEDURE FlashMessage; FPAR IN Charstring, IN Charstring; IMPORTED PROCEDURE ReadCode; FPAR IN Natural, IN/OUT KeyArrayType; RETURNS ReadResultType; IMPORTED PROCEDURE SelectDoor; FPAR IN/OUT Natural; RETURNS NewReadResultType; IMPORTED PROCEDURE Register; FPAR IN Charstring, IN KeyArrayType; RETURNS OKType; IMPORTED PROCEDURE Check; FPAR IN Charstring, IN KeyArrayType; RETURNS ResultType;)]][9w(! 62X! !S)[8 (!< NEWTYPE DoorBaseType Array( DoorNoType, Pid) ENDNEWTYPE;)]][9(! 62 ! !S)[8(![ DCL Card Charstring, Code KeyArrayType, DoorBase DoorBaseType, DoorNr Natural:=0;)]]]]}----------------------WaitCard)][(!,!",)[(! 6,! d!S!)[8(! Card(Card))][(!!")[%"(! 6! d!S)[8(! Display (EnterCode))][(!&X!"X&)[ (! 6,X! !S)[8(! CALL ReadCode (KeyMax, Co#de))][(!,R!"R,)[8(! 6! Successful)][%(! 6R! d!S)[8(! Display (PleaseWait))][(!$!")[ (! 6d! ,!S)[8(! CALL Check (Card, Code))][(!~!"~)[8(! 6~! Main)][%%(! 6d! ,!S)[8(! Display (RegisterCard))][(!Fx!"xF)[(! 6x!Z)][3(! 6x! d!S)[&8(! WaitRegUser)]]]]][(!"~XX!"X~)[8(! 6e! NotOK)][%(! 6! ,!S)[8(!( FlashMessage (Wrong'Input, InsertCard))][(!XFXx!"XxXF)[(! 6Xx!Z)][3(! 6x! d!S)[8(! WaitCard)]]]]][(!"~(!"~)[8(! 6~! OK)][%(! 6 ! ,!S)[8(! Display (SelectDoor))][(!Fx!"xF))[ (! 6 x! ,!S)[8(! CALL SelectDoor (DoorNr))][ (!"'&'&@!"&@)[8(! 6^! WrongInput)][%(! 6*@! ,!S)[8(!) FlashMessage (IllegalDoor, InsertCard))][(!&&!"&&)[(! 6&!Z)][3(! 6! d!S)[+8(! WaitCard)]]]]][(!"''@!"@)[8(! 6! Successful)][(! 6@! ,!S!)[8(! Unloc,k TO DoorBase (DoorNr))][(!!")[%(! 6! ,!S)[8(! Display (DoorOpened))][(!!"-)[(! 6!Z)][3(! 6 ! d!S)[8(! WaitDoor)]]]]]]][(!"''@!"@)[8(! 6! . TimedOut)][%(! 6L@! ,!S)[8(!% FlashMessage (Timeout, InsertCard))][(!!")[(! 6!Z)][3(! 6~/! d!S)[8(! WaitCard)]]]]]]]]]]]]][(!R!"R)[8(! 6! TimedOut)][%(! 6XR! ,!S)[80(!% FlashMessage (Timeout, InsertCard))][(!!")[(! 6!Z)][3(! 6! d!S)[8(! WaitCard)]]]]]]]]]]]][9[8(! Display (InsertCard))][(!. !". )[(! 6. !Z)][3T(! 6x. ! d)[8(! WaitCard)]]]]]]]]]]}L)[83!")[%(! 6F! d!S)[8(! Display (InsertCard))][(!X!"X)[(! 6!][3j(! 6! d)[8(! WaitCard)]]]]][m(!"LLFF!"FL)[8(! 6_! (SuccesFul))][%p(! 6! d4)[8(! Display(PleaseWait))][s(!FxF!"FFx)[ v(! 6! d)[8(! CALL Register(Card, Code))][y(!FF@!"5F@F)[8(! 6_'! (OK))][%|(! 6@! d)[8(! Display(InsertCard))][(!FF!"FF)[(! 6F!6Z)][3(! 6! d)[8(! WaitCard)]]]]][(!"FF'@'@@!"@@F)[8(! 6Y'! (NotOK))][%(! 6@! 7d)[8(!# FlashMessage(Timeout, InsertCard))][(!@@!"@@)[(! 6@!Z)][3(! 6! d)[8(! WaitCard)]]]]]]]]]8]]]]]]]}--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3(! 6! ,!S)[8(! WaitDoor)][(!,^!"^,)[(! 6F^! d!S!)[8(! Locked)][(!2erted)]]]]]]]]]]]]]]][(!*&kk!"&k)[8(! 6q! true)][(! 6!)][)()]]]]]]]]]]]}(! R!"R )[(! 6R!Z)][3(! 6LR! d)[8(! WaitCard)]]]]]]]]]]]][3N(! 6xl! d)[8(! WaitDoor)][W(!<!")[Q(! 6x! d!)[8(! locked)][Z(!f!"f)[%(! 6x! d)1RR:!"R:)[8(! 6k! true)][%(! 6:! d!S)[8(! Display (InsertCard))][ "(!lLl!"Ll>l)[(! 6L:!! !S)[8(!" Main card is already registered.)]]][(!RR!"RR)[(! 6R!Z)][3 ?(! 6! d!S)[8(! WaitCard)][ %(!L!"L)[(! 6L!! !S)[8(!" Wait for any card to be ins: