------------------------SDT26Central----------------------------------------------------ObjectName----------------------------------------ObjectType----------------------------------------!%&()LinkEndpoints--------------------------------!%()HeadingText----------------------------------- Central--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------5--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------()[8(! process Central)]}-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------'()[w(!GSDL)]}-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------()[(! ! 22!(d)[U(! )[X(! 6)[[(! 6d! )]][ ^(! 6)][9(! 6^! !S)[8(! T!%()HeadingText-----------------------------------!%()PageOrder-------------------------------------Declarationisor_Idle-----------------------------WaitRegister-------------------------------------- /$!%&()LinkEndpoints--------------------------------Declaration--------------------------------------------------------------------------------------------------------------------------------------------- ----------------0--------IMER RegisterTimer;)]][9a(! 6^! !S)[8(! /* Maximum allowed time to register a card. */ SYNONYM REGTIME Duration=100; /* Max number of user cards in the data base. */ SYNONYM CARDMAX Natural=10; /* The  card can either be a supervisor card or a user card. */ NEWTYPE CardType LITERALS MainCard, UserCard ENDNEWTYPE CardType; /* When a card is validated these are the possible results. */ NEWTYPE ResultType LITERALS Ok, NotOk, Main EN DNEWTYPE ResultType; SYNTYPE CardBaseIndexType=Natural CONSTANTS 0:CARDMAX ENDSYNTYPE CardBaseIndexType; /* The structure containing a card and its code. */ NEWTYPE CardRecordType STRUCT CardData Charstring; CodeData KeyArrayType; ENDNEWTY PE CardRecordType; /* The database containing the cards and codes. */ NEWTYPE CardBaseType Array(CardBaseIndexType, CardRecordType); OPERATORS Full: CardBaseType -> Boolean; Register: CardBaseType, CardType, CardRecordType -> CardBaseType;  Validate: CardBaseType, CardRecordType -> ResultType; /*#ADT(B) #BODY SDL_Boolean #(Full) (#(CardBaseType) * Param1) { if(xEq_SDL_Charstring("V", Param1->A[#(CARDMAX)-1].CardData)) return SDL_False; else return SDL_True; } #(CardBaseType) *  #(Register) (#(CardBaseType) * Param1, #(CardType) Param2, #(CardRecordType) * Param3, #(CardBaseType) * Result) { int cnt; if (Param2 == #(MainCard, LITERAL)) { Param1->A[0].CardData = NULL; yAss_#(CardRecordType)(&(Param1->A[0]), Param3, XASS_MR_ASS_FR); } else if (Param2 == #(UserCard, LITERAL)) { for(cnt=1; cnt<=#(CARDMAX); cnt++) if (xEq_SDL_Charstring("V", Param1->A[cnt].CardData)) { Param1->A[cnt].CardData = NULL; yAss_#(CardRecordType)(&(Param1->A[cnt]), Param3, XASS_MR_ASS_FR); return Param1; } } return Param1; } #(ResultType) #(Validate) (#(CardBaseType) * Param1,  #(CardRecordType) * Param2) { int cnt; #(KeyArrayType) KeyArr1, KeyArr2; KeyArr1=Param1->A[0].CodeData; KeyArr2=Param2->CodeData; if (xEq_SDL_Charstring(Param2->CardData, Param1->A[0].CardData)) { if (yEq_#(KeyArrayType)(&KeyArr2, &KeyArr1)) return #(Main, LITERAL); } else { for(cnt=0; cnt<=#(CARDMAX); cnt++) { KeyArr1=Param1->A[cnt].CodeData; if (xEq_SDL_Charstring(Param2->CardData, Param1->A[cnt].CardData)) if (yEq_#(KeyArrayType)(&KeyArr2, &KeyArr1)) return #(Ok, LITERAL); } } return #(NotOk, LITERAL); } */ ENDNEWTYPE CardBaseType; )]][9d(! 6! !S)[8(!u DCL CardData Charstring, CodeData KeyArrayType, Data  CardRecordType, CardBase CardBaseType;)]]]]}MAX)-1].CardData)) return SDL_False; else return SDL_True; } #ifndef XNOPROTO extern #(CardBaseType) #(Register) (#(CardBaseType) Param1, #(CardType) 8 Param2, #(CardRecordType) Param3) #else extern #(CardBaseType) #(Register) (Param1, Param2, Param3) #(CardBaseType) Param1; #(CardType) Param2; #(CardRecordType) Param3; #endif { int cnt; if (Param2 == #(M1()[(! ! 22!(d)[h(! )[k(! 6)[n(! 6d! )]][ q(! 6%)][3v(! 6! ,!S)[8(! Idle)][(!!")[y(! 6! d!S!)[8(! CardAnd_ Code)][1(!~!"L~)[7|(! 6!! !S)[8(! (CardData, CodeData))]]][(!&X!"X&)[6(! 6RX! !S)[8(!2 Data!CardData:=CardData, Data!CodeData:=CodeData)][(! R!"R )[ (! 6RR! !S)[8(! Validate (CardBase, Data))][(!FFL!"FL)[8(! 6_! Main)][(! 6L! d!S!)[8(! Start_ Register)][(!FF!"FF)[6(! 6! ,!S)[8(!" SET (NOW+REGTIME, RegisterTimer))][(!FxF!"FFx)[(! 6F!Z)][3(! 6! d!S)[8(! WaitRegister)]]]]]]][(!R!"R)[8(! 6! Ok)][(! 6! d!S!)[8(! Ok)][(!x!"x)[(! 6!Z)][3(! 6! d!S)[8(! Idle)]]]]][(!!")[8(! 633! NotOk)][(! 6! d!S!)[8(! NotOk)][(!x!"x)[(! 6!Z)][3(! 6! d!S)[8(! Idle)]]]]]]]]]]]][2}(! 6^! d!S)[8(! )][(!,,!",,)[(! 6,!Z)][3(! 6! ,!S)[8(! Supervisor)][(!,,!",,)[(! 6! d!S!)[8(! CardAnd_ Cod e)][1(!!"^)[7(! 6!! !S)[8(! (CardData, CodeData))]]][m(!, ,R!",R, !)[6(! 6dR! !S)[8(!2 Data!CardData:=CardData, Data!CodeData:=CodeData)][(!,,L!",L,)[6j(! 6dL! !S)[8"(!0 CardBase:= Register (CardBase, MainCard, Data))][s(!,,F!",F,)[(! 6F! d!S!)[8(! Registered)][(!,,#!",,)[(! 6,!Z)][3p(! 6! d!S)[8(! Idle)]]]]]]]]]]]]]]]]}---------------------------------------------------------------------------------()[(! ! 22!(d)[(! 62! )[(! 6K)[(! 6Kd! )]][ (! 6)][3(! 6^! ,!S)[8%(! WaitRegister)][.(!"    X!"X )[(! 6^X! d!S!)[8(! CardAnd_ Code)][1R(!&X!"&X&)[7"(! 6XX!! !S)[8(! (CardData, CodeData))]]][1(!!")[6(! 6,! ,'!S)[8(! RESET (RegisterTimer))][4(!!")[ (! 6,! ,!S)[8(! Full (CardBase))][=(!L~!"(~L)[8(! 6L! false)][6(! 6~! !S)[8(!2 Data!CardData:=CardData, Data!CodeData:=CodeData)][(!Fx!"x)F)[6(! 6x! !S)[8(!0 CardBase:= Register (CardBase, UserCard, Data))][(!@r!"r@)[(! 6^r! d!S!*)[8(! Registered)][I(!!")[(! 6!Z)][3(! 6^! d!S)[8(! Idle)]]]]]]]]][7(!X+RR!"RX)[8(! 6ke! true)][(! 6! d!S!)[8(! Not_ Registered)][:(!RRF!"RF,R)[(! 6RF!Z)][3 (! 6F! d!S)[8(! Idle)]]]]]]]]]]][%(!"    X!"X )[(! 6L-X! d!S!)[8(! Register_ Timer)][((!!")[(! 6L! d!S!)[8(! Not_ Registered)][+.(!R!"R)[(! 6!Z)][3(! 6L! d!S)[8(! Idle)]]]]]]]]]]}-----------------------------------------------------------------(!4!5!7)[!(! Declaration!)[!(! Start_Supervisor_Idle!!2)[!(! WaitRegister!)]]]}---------------------------------------------------------------------Start_Supervisor_Idle-----------------------------WaitRegister-------------------------------------------------------------------------------------------------------------------------------------------- --------$----------------ainCard, LITERAL)) { Param1.A[0].CardData = NULL; yAss_#(CardRecordType)(&(Param1.A[0]), Param3, XASS_MR_ASS_FR); } else if (Param2 == #(UserCard, LITERAL)) { for(cnt=1; cnt<=#(CARDMAX); cnt++) if (xEq_SDL_Charstring("V", Param1.A[cnt2].CardData)) { Param1.A[cnt].CardData = NULL; yAss_#(CardRecordType)(&(Param1.A[cnt]), Param3, XASS_MR_ASS_FR); return Param1; } } return Param1; } #ifndef XNOPROTO extern #(ResultType) #(Validate) (#(CardBaseType) Param31, #(CardRecordType) Param2) #else extern #(ResultType) #(Validate) (Param1, Param2) #(CardBaseType) Param1; #(CardRecordType) Param2; #endif { int cnt; #(KeyArrayType) KeyArr1, KeyArr2; KeyArr1=Param1.A[0].CodeDat4a; KeyArr2=Param2.CodeData; if (xEq_SDL_Charstring(Param2.CardData, Param1.A[0].CardData)) { if (yEq_#(KeyArrayType)(KeyArr2, KeyArr1)) return #(Main, LITERAL); } else { for(cnt=0; cnt<=#(CARDMAX); cnt++) { KeyArr1=Param1.A[cnt]5.CodeData; if (xEq_SDL_Charstring(Param2.CardData, Param1.A[cnt].CardData)) if (yEq_#(KeyArrayType)(KeyArr2, KeyArr1)) return #(OK, LITERAL); } } return #(NotOK, LITERAL); } #endif */ ENDNEWTYPE CardBaseType; )]][9d6(! 6! !S)[8(!u DCL CardData Charstring, CodeData KeyArrayType, Data CardRecordType, CardBase CardBaseType;)]]]]}---------------------------------------------------------------------------