home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / toolbox / zeitumst.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1992-01-21  |  1.9 KB  |  82 lines

  1. (* ------------------------------------------------- *)
  2. (*                 ZEITUMST.PAS                      *)
  3. (*     (c) 1989, 1992 Werner Ruth & DMV-Verlag       *)
  4. (* ------------------------------------------------- *)
  5. PROGRAM at_sommer_winter_zeit;
  6. (*$V-*)
  7. USES DOS;
  8.  
  9. VAR regs          : Registers;
  10.     std, min, sek : BYTE;
  11.     sommerzeit    : BOOLEAN;
  12.  
  13.   FUNCTION Binaer(wert : BYTE) : BYTE;
  14.   BEGIN
  15.     Binaer := (wert SHR 4)*10 + wert AND 15;
  16.   END;
  17.  
  18.   PROCEDURE cmosuhr_lesen;
  19.   BEGIN
  20.     WITH regs DO BEGIN
  21.       ah := 2;
  22.       INTR($1a, regs);
  23.       std := binaer(ch);
  24.       min := binaer(cl);
  25.       sek := binaer(dh);
  26.     END;
  27.   END;
  28.  
  29.   FUNCTION BCD(wert : BYTE) : BYTE;
  30.   BEGIN
  31.     BCD := ((wert DIV 10) SHL 4) + (wert MOD 10);
  32.   END;
  33.  
  34.   PROCEDURE cmosuhr_schreiben(std, min, sek : BYTE);
  35.   BEGIN
  36.     WITH regs DO BEGIN
  37.       ah := 3;
  38.       ch := BCD(std);
  39.       cl := BCD(min);
  40.       dh := BCD(sek);
  41.       INTR($1a, regs);
  42.     END;
  43.   END;
  44.  
  45.   PROCEDURE puffer_belegen(x : SHORTINT);
  46.   VAR
  47.     wert : BYTE;
  48.   BEGIN
  49.     port[$70] := 11;
  50.     wert := Binaer(port[$71]);
  51.     wert := wert + x;
  52.     port[$70] := 11;
  53.     port[$71] := BCD(wert);
  54.   END;
  55.  
  56. BEGIN
  57.   sommerzeit := FALSE;
  58.   cmosuhr_lesen;
  59.   Write(std, '.', min, '.', sek);
  60.   port[$70] := 11;
  61.   IF Binaer(port[$71]) AND 1 = 0 THEN BEGIN
  62.     INC(std);
  63.     Write('  Normalzeit');
  64.     cmosuhr_schreiben(std, min, sek);
  65.     puffer_belegen(1);
  66.     sommerzeit := TRUE;
  67.   END ELSE BEGIN
  68.     Write('  Sommerzeit');
  69.     DEC(std);
  70.     puffer_belegen(-1);
  71.     cmosuhr_schreiben(std, min, sek);
  72.   END;
  73.   WriteLn(' war eingeschaltet');
  74.   cmosuhr_lesen;
  75.   Write(std, '.', min, '.', sek);
  76.   IF sommerzeit THEN Write('  Sommerzeit')
  77.                 ELSE Write('  Normalzeit');
  78.   WriteLn(' ist nun eingeschaltet');
  79. END.
  80. (* ------------------------------------------------- *)
  81. (*             Ende von ZEITUMST.PAS                 *)
  82.