home *** CD-ROM | disk | FTP | other *** search
- program:
- initialize clock;
- REP
- operate clock;
- display and modify as required
- ENDREP.
-
- initialize clock:
- INT VAR month :: 6;
- INT VAR day :: 24;
- INT VAR hours :: 17;
- INT VAR minutes :: 58;
- INT VAR seconds :: 0;
- initialize operating modes;
- initialize display modes;
- initialize display.
-
- PROC increment0 (INT VAR cnt, INT CONST limit):
- cnt := (cnt + 1) MOD (limit + 1)
- ENDPROC increment0;
-
- PROC increment1 (INT VAR cnt, INT CONST limit):
- cnt := cnt MOD limit + 1
- ENDPROC increment1;
-
- operate clock:
- IF one second is over
- THEN
- increment0 (seconds, 59);
- IF one minute is over
- THEN
- increment0 (minutes, 59);
- IF one hour is over
- THEN
- increment0 (hours, 23);
- IF one day is over
- THEN
- increment1 (day, last day of current month);
- IF one month is over
- THEN increment1 (month, 12)
- FI
- FI
- FI
- FI
- FI.
-
- one second is over:
- sleep (1);
- true.
-
- one minute is over:
- seconds = 0.
-
- one hour is over:
- minutes = 0.
-
- one day is over:
- hours = 0.
-
- one month is over:
- day = 1.
-
- last day of current month:
- SELECT month OF
- CASE 2: 28
- CASE 4, 6, 9, 11: 30
- OTHERWISE 31
- ENDSELECT.
-
- initialize operating modes:
- LET display modes = 1;
- LET modify month mode = 2;
- LET modify day mode = 3;
- LET modify hours mode = 4;
- LET modify minutes mode = 5;
- LET last mode = modify minutes mode;
- INT VAR mode :: display modes.
-
- initialize display modes:
- LET hours and minutes = 1;
- LET day and month = 2;
- LET seconds only = 3;
- LET last display = seconds only;
- INT VAR displayed data :: hours and minutes.
-
- display and modify as required:
- change mode if required;
- IF mode = display modes
- THEN display data
- ELSE modify data
- FI.
-
- change mode if required:
- TEXT CONST button :: incharety;
- IF button m is in effect
- THEN change mode
- FI.
-
- button m is in effect:
- HEAD button = "m" OR HEAD button = "M".
-
- change mode:
- increment1 (mode, last mode).
-
- change display if required:
- IF button d is in effect
- THEN change displayed data
- FI.
-
- button d is in effect:
- HEAD button = "d" OR HEAD button = "D".
-
- change displayed data:
- increment1 (displayed data, last display).
-
- display data:
- change display if required;
- IF displayed data = hours and minutes
- THEN show (hours, ":", minutes)
- ELIF displayed data = day and month
- THEN show (day, " ", month)
- ELSE
- # displayed data = seconds only #
- show (" ", seconds)
- FI.
-
- modify data:
- SELECT mode OF
- CASE modify month mode:
- IF button d is in effect
- THEN increment1 (month, 12)
- FI;
- show (" ", month)
- CASE modify day mode:
- IF button d is in effect
- THEN increment1 (day, last day of current month)
- FI;
- show (day, " ")
- CASE modify hours mode:
- IF button d is in effect
- THEN increment0 (hours, 23)
- FI;
- show (hours, ":")
- OTHERWISE
- # modify minutes mode #
- IF button d is in effect
- THEN
- increment0 (minutes, 59);
- reset seconds
- FI;
- show (":", minutes);
- displayed data := hours and minutes
- ENDSELECT.
-
- reset seconds:
- seconds := 0.
-
- initialize display:
- reset display;
- show (hours, ":", minutes).
-