home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 September
/
Simtel20_Sept92.cdr
/
msdos
/
pgmutl
/
elan.zoo
/
clock
/
clock.eln
< prev
next >
Wrap
Text File
|
1988-10-13
|
4KB
|
162 lines
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).