home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / elan / clock / clssds.eln < prev    next >
Text File  |  1988-10-13  |  3KB  |  132 lines

  1.  
  2. reset 4 digit display:
  3.   enter graphics mode;
  4.   page;
  5.   LET starting y pos = 250;
  6.   LET starting x pos = 250;
  7.  
  8.   LET segment length = 75;
  9.   LET segment gap = 4;
  10.   
  11.   INT CONST segment size :: segment length + segment gap,
  12.             x step :: segment size + segment length DIV 5;
  13.  
  14.   INT CONST dsabl :: 0,
  15.             seg a :: 01,
  16.             seg b :: 02,
  17.             seg c :: 04,
  18.             seg d :: 08,
  19.             seg e :: 16,
  20.             seg f :: 32,
  21.             seg g :: 64,
  22.             enabl :: 128;
  23.  
  24.   LET pen = 1, rubber = 0.
  25.  
  26. BOOL PROC bit set (INT CONST code, seg):
  27.   code DIV seg    MOD 2 = 1
  28. ENDPROC bit set;
  29.  
  30. PROC to port (INT CONST addr, segs):
  31.   IF addr = 0
  32.   THEN
  33.     display separator
  34.   ELSE
  35.     decode address;
  36.     display digit
  37.   FI.
  38.  
  39.   display separator:
  40.     IF bit set (segs, enabl)
  41.     THEN
  42.       draw colon
  43.     ELSE
  44.       erase colon
  45.     FI.
  46.  
  47.   draw colon:
  48.     move (starting x pos + 3 * x step DIV 2,
  49.             starting y pos - segment length DIV 3);
  50.     draw (current x position,
  51.             current y position - segment length DIV 2);
  52.     move (starting x pos + 3 * x step DIV 2,
  53.             starting y pos - 4 * segment length DIV 3);
  54.     draw (current x position,
  55.             current y position - segment length DIV 2).
  56.  
  57.     erase colon:
  58.       color(rubber);
  59.       draw colon;
  60.       color(pen).
  61.  
  62.   decode address:
  63.     INT CONST y pos :: starting y pos;
  64.     INT CONST x pos ::
  65.         starting x pos + x step * (addr-1 + (addr-1) DIV 2).
  66.  
  67.   display digit:
  68.     IF bit set (segs, enabl)
  69.     THEN turn on selected segments
  70.     ELSE turn off all segments
  71.     FI.
  72.  
  73.   turn on selected segments:
  74.     IF bit set (segs, seg a) THEN draw seg a FI;
  75.     IF bit set (segs, seg b) THEN draw seg b FI;
  76.     IF bit set (segs, seg c) THEN draw seg c FI;
  77.     IF bit set (segs, seg d) THEN draw seg d FI;
  78.     IF bit set (segs, seg e) THEN draw seg e FI;
  79.     IF bit set (segs, seg f) THEN draw seg f FI;
  80.     IF bit set (segs, seg g) THEN draw seg g FI.
  81.  
  82.   draw seg a:
  83.     move (x pos - segment gap, y pos - 2 * segment size);
  84.     draw horizontal bar.
  85.  
  86.   draw seg b:
  87.     move (x pos, y pos - segment size - segment gap);
  88.     draw vertical bar.
  89.  
  90.   draw seg c:
  91.     move (x pos, y pos - segment gap);
  92.     draw vertical bar.
  93.  
  94.   draw seg d:
  95.     move (x pos - segment gap, y pos);
  96.     draw horizontal bar.
  97.  
  98.   draw seg e:
  99.     move (x pos - segment size, y pos - segment gap);
  100.     draw vertical bar.
  101.  
  102.   draw seg f:
  103.     move (x pos - segment size,
  104.           y pos - segment size - segment gap);
  105.     draw vertical bar.
  106.  
  107.   draw seg g:
  108.     move (x pos - segment gap, y pos - segment size);
  109.     draw horizontal bar.
  110.  
  111.   draw horizontal bar:
  112.     draw (current x position - segment length,
  113.           current y position).
  114.  
  115.   draw vertical bar:
  116.     draw (current x position,
  117.           current y position - segment length).
  118.  
  119. turn off all segments:
  120.     color (rubber);
  121.     draw seg a;
  122.     draw seg b;
  123.     draw seg c;
  124.     draw seg d;
  125.     draw seg e;
  126.     draw seg f;
  127.     draw seg g;
  128.     color (pen).
  129.  
  130. ENDPROC to port;
  131.  
  132.