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

  1. program:
  2.   initialize clock;
  3.   REP
  4.     operate clock;
  5.     display and modify as required
  6.   ENDREP.
  7.  
  8.   initialize clock:
  9.     INT VAR month :: 6;
  10.     INT VAR day :: 24;
  11.     INT VAR hours :: 17;
  12.     INT VAR minutes :: 58;
  13.     INT VAR seconds :: 0;
  14.     initialize operating modes;
  15.     initialize display modes;
  16.     initialize display.
  17.  
  18. PROC increment0 (INT VAR cnt, INT CONST limit):
  19.   cnt := (cnt + 1) MOD (limit + 1)
  20. ENDPROC increment0;
  21.  
  22. PROC increment1 (INT VAR cnt, INT CONST limit):
  23.   cnt := cnt MOD limit + 1
  24. ENDPROC increment1;
  25.  
  26.   operate clock:
  27.     IF one second is over
  28.     THEN
  29.       increment0 (seconds, 59);
  30.       IF one minute is over
  31.       THEN
  32.         increment0 (minutes, 59);
  33.         IF one hour is over
  34.         THEN
  35.           increment0 (hours, 23);
  36.           IF one day is over
  37.           THEN
  38.             increment1 (day, last day of current month);
  39.             IF one month is over
  40.             THEN increment1 (month, 12)
  41.             FI
  42.           FI
  43.         FI
  44.       FI
  45.     FI.
  46.  
  47.     one second is over:
  48.       sleep (1);
  49.       true.
  50.  
  51.     one minute is over:
  52.       seconds = 0.
  53.  
  54.     one hour is over:
  55.       minutes = 0.
  56.  
  57.     one day is over:
  58.       hours = 0.
  59.  
  60.     one month is over:
  61.       day = 1.
  62.  
  63.     last day of current month:
  64.       SELECT month OF
  65.         CASE 2: 28
  66.         CASE 4, 6, 9, 11: 30
  67.         OTHERWISE 31
  68.       ENDSELECT.
  69.  
  70.     initialize operating modes:
  71.       LET display modes = 1;
  72.       LET modify month mode = 2;
  73.       LET modify day mode = 3;
  74.       LET modify hours mode = 4;
  75.       LET modify minutes mode = 5;
  76.       LET last mode = modify minutes mode;
  77.       INT VAR mode :: display modes.
  78.  
  79.     initialize display modes:
  80.       LET hours and minutes = 1;
  81.       LET day and month = 2;
  82.       LET seconds only = 3;
  83.       LET last display = seconds only;
  84.       INT VAR displayed data :: hours and minutes.
  85.  
  86.   display and modify as required:
  87.     change mode if required;
  88.     IF mode = display modes
  89.     THEN display data
  90.     ELSE modify data
  91.     FI.
  92.  
  93.     change mode if required:
  94.       TEXT CONST button :: incharety;
  95.       IF button m is in effect
  96.       THEN change mode
  97.       FI.
  98.  
  99.       button m is in effect:
  100.         HEAD button = "m" OR HEAD button = "M".
  101.  
  102.       change mode:
  103.         increment1 (mode, last mode).
  104.       
  105.       change display if required:
  106.         IF button d is in effect
  107.         THEN change displayed data
  108.         FI.
  109.         
  110.         button d is in effect:
  111.           HEAD button = "d" OR HEAD button = "D".
  112.  
  113.         change displayed data:
  114.           increment1 (displayed data, last display).
  115.  
  116.     display data:
  117.       change display if required;
  118.       IF displayed data = hours and minutes
  119.       THEN show (hours, ":", minutes)
  120.       ELIF displayed data = day and month
  121.       THEN show (day, " ", month)
  122.       ELSE
  123.         # displayed data = seconds only #
  124.         show (" ", seconds)
  125.       FI.
  126.  
  127.     modify data:
  128.       SELECT mode OF
  129.         CASE modify month mode:
  130.           IF button d is in effect
  131.           THEN increment1 (month, 12)
  132.           FI;
  133.           show (" ", month)
  134.         CASE modify day mode:
  135.           IF button d is in effect
  136.           THEN increment1 (day, last day of current month)
  137.           FI;
  138.           show (day, " ")
  139.         CASE modify hours mode:
  140.           IF button d is in effect
  141.           THEN increment0 (hours, 23)
  142.           FI;
  143.           show (hours, ":")
  144.         OTHERWISE
  145.           # modify minutes mode #
  146.           IF button d is in effect
  147.           THEN
  148.             increment0 (minutes, 59);
  149.             reset seconds
  150.           FI;
  151.           show (":", minutes);
  152.           displayed data := hours and minutes
  153.       ENDSELECT.
  154.  
  155.       reset seconds:
  156.         seconds := 0.
  157.  
  158.   initialize display:
  159.     reset display;
  160.     show (hours, ":", minutes).
  161.  
  162.