/*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy,4)*/ system AlarmClock; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),131(25,45))*/ SIGNAL hourButton, mintueButton, intensityButton, alarmOnButton, setTimeButton, setAlarmButton, alarmTypeButton, snoozeButton, displayAlarmIntensity(integer), displayTime(integer,integer), displayAlarm(integer,integer), displayAlarmStatus(integer), displayAlarmType(integer), alarmStatus, storeAlarm(integer,integer), storeTime(integer,integer), increaseHour, increaseMinute, setAlarm, setTime, snooze, alarmSnoozing(integer), alarmType, increaseIntensity, displayAlarmOn(integer,integer), alarmOn(integer,integer), showTime(integer,integer), showAlarm(integer,integer), showAlarmStatus(integer), showAlarmIntensity(integer), showAlarmType(integer), showAlarmOn(integer,integer); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),134(85,45))*/ SIGNALLIST buttons = hourButton, mintueButton, intensityButton, alarmOnButton, setTimeButton, setAlarmButton, alarmTypeButton, snoozeButton; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),140(120,45))*/ SIGNALLIST buttonsToMemory = alarmType, increaseIntensity, snooze, alarmStatus; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),143(120,75))*/ SIGNALLIST buttonsToControl= increaseHour, increaseMinute, setAlarm, setTime; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),137(85,85))*/ SIGNALLIST toUser = showTime, showAlarm, showAlarmIntensity, showAlarmStatus, showAlarmType, showAlarmOn; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),152(125,105))*/ SIGNALLIST controlToDisplay = displayTime, displayAlarmOn, displayAlarm, displayAlarmStatus; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),155(85,120))*/ SIGNALLIST memoryToDisplay = displayAlarmStatus, displayAlarmIntensity, displayAlarmType; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),122(67,177))*/ channel /*#E*/ ch from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),119(115,175))*/ AlarmBlock to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),104(15,15))*/ env with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),123(42,187))*/ (toUser); from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),104(15,15))*/ env to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),119(115,175))*/ AlarmBlock with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),124(92,187))*/ (buttons); endchannel ch; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy(1),119(115,175))*/ block /*#E*/ AlarmBlock referenced; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmClock.ssy,4)*/ endsystem AlarmClock; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk,4)*/ block AlarmBlock; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),146(49,47))*/ signalroute /*#E*/ UToB from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),104(15,15))*/ env to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),116(80,40))*/ Buttons with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),147(57,57))*/ (buttons); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),128(64,69))*/ signalroute /*#E*/ BToM from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),116(80,40))*/ Buttons to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),119(25,95))*/ Memory with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),129(50,87))*/ (buttonsToMemory); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),137(125,69))*/ signalroute /*#E*/ BToC from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),116(80,40))*/ Buttons to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),122(130,95))*/ Control with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),138(120,82))*/ (buttonsToControl); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),227(85,97))*/ signalroute /*#E*/ MToAndFromC from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),122(130,95))*/ Control to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),119(25,95))*/ Memory with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),228(57,107))*/ storeAlarm,storeTime; from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),119(25,95))*/ Memory to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),122(130,95))*/ Control with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),229(97,107))*/ alarmSnoozing,alarmOn; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),164(55,130))*/ signalroute /*#E*/ MToD from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),119(25,95))*/ Memory to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),125(80,145))*/ Display with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),165(47,140))*/ (memoryToDisplay); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),173(119,123))*/ signalroute /*#E*/ CToD from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),122(130,95))*/ Control to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),125(80,145))*/ Display with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),174(112,140))*/ (controlToDisplay); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),182(50,150))*/ signalroute /*#E*/ DToU from /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),125(80,145))*/ Display to /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),104(15,15))*/ env with /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),183(20,160))*/ (toUser); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),116(80,40))*/ process /*#E*/ Buttons referenced; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),119(25,95))*/ process /*#E*/ Memory referenced; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),122(130,95))*/ process /*#E*/ Control referenced; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),125(80,145))*/ process /*#E*/ Display referenced; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),152(7,52))*/ connect /*#E*/ ch and /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),146(49,47))*/ UToB, /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk(1),182(50,150))*/ DToU; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\AlarmBlock.sbk,4)*/ endblock AlarmBlock; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr,4)*/ process Buttons; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),116(85,5))*/ start /*#E*/ ; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),119(85,25))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),119(85,25))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),125(5,40))*/ input /*#E*/ hourButton ; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),182(5,90))*/ output /*#E*/ increaseHour TO Control; grst3153_1: /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),230(90,135))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),134(45,40))*/ input /*#E*/ intensityButton; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),188(45,90))*/ output /*#E*/ increaseIntensity TO Memory; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),230(90,135))*/ join /*#E*/ grst3153_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),140(95,40))*/ input /*#E*/ setTimeButton; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),194(100,90))*/ output /*#E*/ setTime TO Control; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),230(90,135))*/ join /*#E*/ grst3153_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),146(135,40))*/ input /*#E*/ alarmTypeButton; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),200(140,90))*/ output /*#E*/ alarmType TO Memory; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),230(90,135))*/ join /*#E*/ grst3153_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),131(25,55))*/ input /*#E*/ mintueButton; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),185(25,105))*/ output /*#E*/ increaseMinute TO Control; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),230(90,135))*/ join /*#E*/ grst3153_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),137(70,55))*/ input /*#E*/ alarmOnButton; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),191(75,105))*/ output /*#E*/ alarmStatus TO Memory; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),230(90,135))*/ join /*#E*/ grst3153_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),143(115,55))*/ input /*#E*/ setAlarmButton; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),197(120,105))*/ output /*#E*/ setAlarm TO Control; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),230(90,135))*/ join /*#E*/ grst3153_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),149(155,55))*/ input /*#E*/ snoozeButton; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),203(160,105))*/ output /*#E*/ snooze TO Memory; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),230(90,135))*/ join /*#E*/ grst3153_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr(1),119(85,25))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Buttons.spr,4)*/ endprocess Buttons; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr,4)*/ process Control; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),128(5,25))*/ DCL alarmOnNow boolean, TimeHour integer := 0, TimeMinute integer :=0, AlarmHour integer:= 0, AlarmMinute integer:= 0, alarmIntensity integer, alarmType integer, alarmStatus integer; Timer timer_timeout; Timer timer_timeout2; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),119(60,10))*/ start /*#E*/ ; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),122(85,45))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),122(85,45))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),131(50,60))*/ input /*#E*/ setAlarm; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),314(15,75))*/ output /*#E*/ displayAlarm(AlarmHour,AlarmMinute) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),311(35,95))*/ nextstate /*#E*/ SettingAlarm; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),137(115,60))*/ input /*#E*/ setTime; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),155(95,75))*/ output /*#E*/ displayTime(TimeHour,TimeMinute) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),161(115,90))*/ nextstate /*#E*/ SettingTime; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),122(85,45))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),167(70,100))*/ state /*#E*/ SettingTime; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),293(155,110))*/ input /*#E*/ setTime; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),533(125,125))*/ output /*#E*/ StoreTime(TimeHour,TimeMinute) TO Memory; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),299(125,170))*/ output /*#E*/ displayTime(TimeHour,TimeMinute) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),440(145,185))*/ /*#E*/ SET(NOW +60, timer_timeout); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),305(145,200))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),170(45,125))*/ input /*#E*/ increaseHour; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),185(45,140))*/ decision /*#E*/ TimeHour = 23; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),197(27,147))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),194(20,155))*/ task /*#E*/ TimeHour := 0; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),191(80,155))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),182(50,155))*/ task /*#E*/ TimeHour := TimeHour +1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),185(45,140))*/ enddecision; grst3619_1: /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),209(60,175))*/ output /*#E*/ displayTime(TimeHour,TimeMinute) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),218(80,195))*/ nextstate /*#E*/ SettingTime; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),176(90,125))*/ input /*#E*/ increaseMinute; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),263(110,140))*/ decision /*#E*/ TimeMinute = 59; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),272(102,147))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),260(95,155))*/ task /*#E*/ TimeMinute := 0; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),269(145,155))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),266(120,155))*/ task /*#E*/ TimeMinute := TimeMinute +1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),263(110,140))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),209(60,175))*/ join /*#E*/ grst3619_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(1),167(70,100))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),386(75,15))*/ state /*#E*/ SettingAlarm; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),383(35,35))*/ input /*#E*/ increaseHour; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),374(30,50))*/ decision /*#E*/ AlarmHour = 23; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),407(17,57))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),371(5,65))*/ task /*#E*/ AlarmHour := 0; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),404(65,57))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),377(40,65))*/ task /*#E*/ AlarmHour := AlarmHour +1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),374(30,50))*/ enddecision; grst3619_2: /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),368(50,85))*/ output /*#E*/ displayAlarm(AlarmHour,AlarmMinute) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),365(70,105))*/ nextstate /*#E*/ SettingAlarm; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),380(100,35))*/ input /*#E*/ increaseMinute; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),359(100,50))*/ decision /*#E*/ AlarmMinute = 59; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),389(95,57))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),356(85,65))*/ task /*#E*/ AlarmMinute := 0; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),392(142,57))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),362(120,65))*/ task /*#E*/ AlarmMinute := AlarmMinute +1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),359(100,50))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),368(50,85))*/ join /*#E*/ grst3619_2; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),353(155,35))*/ input /*#E*/ setAlarm; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),524(115,85))*/ output /*#E*/ storeAlarm(AlarmHour,AlarmMinute) TO Memory; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),347(135,105))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),386(75,15))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),446(75,125))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),449(70,140))*/ input /*#E*/ timer_timeout; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),467(70,155))*/ decision /*#E*/ TimeMinute = 59; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),470(107,137))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),455(105,145))*/ task /*#E*/ TimeMinute := TimeMinute+1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),476(57,155))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),473(30,155))*/ task {/*#E*/ TimeMinute:= 0;}; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),479(25,170))*/ decision /*#E*/ TimeHour = 23; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),494(17,177))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),491(10,185))*/ task /*#E*/ TimeHour :=0; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),488(67,177))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),485(45,185))*/ task /*#E*/ TimeHour := TimeHour +1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),479(25,170))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),467(70,155))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),509(115,160))*/ /*#E*/ SET(NOW +60, timer_timeout); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),539(95,175))*/ output /*#E*/ StoreTime(TimeHour,TimeMinute) TO Memory; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),497(95,190))*/ output /*#E*/ displayTime(TimeHour,TimeMinute) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),518(160,195))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(2),446(75,125))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),557(80,10))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),560(55,25))*/ input /*#E*/ alarmOn(alarmIntensity,alarmType); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),578(75,40))*/ task /*#E*/ alarmOnNow := true; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),566(55,55))*/ output /*#E*/ displayAlarmOn(alarmIntensity,alarmType) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),572(80,70))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),557(80,10))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),584(80,90))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),593(15,105))*/ input /*#E*/ alarmSnoozing(alarmStatus); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),599(25,120))*/ decision /*#E*/ alarmOnNow = true; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),608(87,127))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),605(70,135))*/ /*#E*/ Set(NOW + 300, timer_timeout2); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),623(65,150))*/ task {/*#E*/ alarmStatus:=0; alarmOnNow := false;}; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),617(60,165))*/ output /*#E*/ displayAlarmStatus(alarmStatus); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),635(75,180))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),632(12,127))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),629(5,145))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),599(25,120))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),641(120,105))*/ input /*#E*/ timer_timeout2; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),647(125,120))*/ task /*#E*/ alarmStatus := 1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),653(125,140))*/ task /*#E*/ alarmOnNow := true; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),659(115,155))*/ output /*#E*/ displayAlarmStatus(alarmStatus); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),665(130,175))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr(3),584(80,90))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Control.spr,4)*/ endprocess Control; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr,4)*/ process Display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),206(25,15))*/ DCL TimeHour integer, TimeMinute integer, AlarmHour integer, AlarmMinute integer, alarmType integer, alarmStatus integer, alarmIntensity integer; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),119(85,5))*/ start /*#E*/ ; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),116(60,55))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),116(60,55))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),209(105,50))*/ input /*#E*/ displayAlarmOn(alarmIntensity,alarmType); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),215(120,155))*/ output /*#E*/ showAlarmOn(alarmIntensity,alarmType); grst8373_1: /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),188(85,180))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),125(5,70))*/ input /*#E*/ displayAlarmStatus(alarmStatus); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),158(5,120))*/ output /*#E*/ showAlarmStatus(alarmStatus); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),188(85,180))*/ join /*#E*/ grst8373_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),137(70,70))*/ input /*#E*/ displayTime(TimeHour,TimeMinute); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),170(70,120))*/ output /*#E*/ showTime(TimeHour,TimeMinute); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),188(85,180))*/ join /*#E*/ grst8373_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),140(140,70))*/ input /*#E*/ displayAlarm (AlarmHour,AlarmMinute); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),182(125,120))*/ output /*#E*/ showAlarm(AlarmHour, AlarmMinute); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),188(85,180))*/ join /*#E*/ grst8373_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),131(25,90))*/ input /*#E*/ displayAlarmIntensity(alarmIntensity); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),164(35,135))*/ output /*#E*/ showAlarmIntensity(alarmIntensity); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),188(85,180))*/ join /*#E*/ grst8373_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),128(105,90))*/ input /*#E*/ displayAlarmType(alarmType); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),173(100,135))*/ output /*#E*/ showAlarmType(alarmType); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),188(85,180))*/ join /*#E*/ grst8373_1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr(1),116(60,55))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Display.spr,4)*/ endprocess Display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr,4)*/ process Memory; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),128(25,10))*/ DCL TimeHour integer, TimeMinute integer, AlarmHour integer, AlarmMinute integer, alarmIntensity integer := 1, alarmStatus integer := 0, alarmType integer := 0; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),116(80,15))*/ start /*#E*/ ; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),119(80,30))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),119(80,30))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),125(15,50))*/ input /*#E*/ storeTime(TimeHour, TimeMinute); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),161(15,65))*/ decision /*#E*/ (TimeHour = AlarmHour) AND (TimeMinute = AlarmMinute); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),170(90,82))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),251(105,85))*/ decision /*#E*/ alarmStatus = 1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),260(97,92))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),257(90,110))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),254(157,92))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),167(125,110))*/ output /*#E*/ AlarmOn(alarmIntensity, alarmType) TO Control; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),212(145,125))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),251(105,85))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),179(15,82))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),176(5,90))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),161(15,65))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),131(90,50))*/ input /*#E*/ storeAlarm(AlarmHour, AlarmMinute); /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),155(115,65))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),119(80,30))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),182(50,115))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),185(40,135))*/ input /*#E*/ increaseIntensity; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),197(40,150))*/ decision /*#E*/ alarmIntensity = 3; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),206(27,157))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),203(5,165))*/ task {/*#E*/ alarmintensity := alarmIntensity +1;}; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),200(97,157))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),191(80,165))*/ task /*#E*/ alarmIntensity := 1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),197(40,150))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),296(35,180))*/ output /*#E*/ displayAlarmIntensity(alarmIntensity) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),221(55,195))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(1),182(50,115))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),242(75,10))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),245(70,25))*/ input /*#E*/ alarmStatus; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),263(70,40))*/ decision /*#E*/ alarmStatus = 1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),278(52,47))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),275(40,55))*/ task /*#E*/ alarmStatus:= 1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),272(117,47))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),269(100,55))*/ task /*#E*/ alarmStatus := 0; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),263(70,40))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),281(60,75))*/ output /*#E*/ displayAlarmStatus(alarmStatus) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),290(75,90))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),242(75,10))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),320(65,110))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),317(60,125))*/ input /*#E*/ alarmType; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),314(60,140))*/ decision /*#E*/ alarmType = 1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),332(37,147))*/ (false): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),308(30,155))*/ task /*#E*/ alarmType:= 1; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),329(107,147))*/ (true): /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),311(90,155))*/ task /*#E*/ alarmType := 0; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),314(60,140))*/ enddecision; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),305(50,175))*/ output /*#E*/ displayAlarmType(alarmType) TO display; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),302(65,190))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(2),320(65,110))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(3),356(80,15))*/ state /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(3),365(80,30))*/ input /*#E*/ snooze; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(3),371(65,45))*/ output /*#E*/ alarmSnoozing(alarmStatus) TO Control; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(3),377(80,60))*/ nextstate /*#E*/ idle; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr(3),356(80,15))*/ endstate; /*#SDTREF(SDL,C:\AlarmClock(GoodVersion)\Memory.spr,4)*/ endprocess Memory;