home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 08 / tricks / zeitumst.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1989-05-17  |  2.5 KB  |  89 lines

  1. (* ------------------------------------------------------ *)
  2. (*                    ZEITUMST.PAS                        *)
  3. (*         (c) 1989 Werner Ruth  &  TOOLBOX               *)
  4. (* ------------------------------------------------------ *)
  5. PROGRAM at_sommer_winter_zeit;
  6. (*$V-*)
  7. USES DOS;                  { entfällt bei Turbo Pascal 3.0 }
  8.  
  9. { TYPE Registers = RECORD
  10.                      CASE INTEGER OF
  11.                        1: (ax, bx, cx, dx, bp, si, di,
  12.                            ds, es, flags: INTEGER);
  13.                        2: (al, ah, bl, bh, cl, ch, dl,
  14.                                       dh: BYTE);
  15.                    END;           Nur für Turbo Pascal 3.0 }
  16.  
  17. VAR regs          : Registers;
  18.     std, min, sek : BYTE;
  19.     sommerzeit    : BOOLEAN;
  20.  
  21.   FUNCTION Binaer(wert : BYTE) : BYTE;
  22.   BEGIN
  23.     Binaer := (wert SHR 4)*10 + wert AND 15;
  24.   END;
  25.  
  26.   PROCEDURE cmosuhr_lesen;
  27.   BEGIN
  28.     WITH regs DO BEGIN
  29.       ah := 2;
  30.       INTR($1a, regs);
  31.       std := binaer(ch);
  32.       min := binaer(cl);
  33.       sek := binaer(dh);
  34.     END;
  35.   END;
  36.  
  37.   FUNCTION BCD(wert : BYTE) : BYTE;
  38.   BEGIN
  39.     BCD := ((wert DIV 10) SHL 4) + (wert MOD 10);
  40.   END;
  41.  
  42.   PROCEDURE cmosuhr_schreiben(std, min, sek : BYTE);
  43.   BEGIN
  44.     WITH regs DO BEGIN
  45.       ah := 3;
  46.       ch := BCD(std);
  47.       cl := BCD(min);
  48.       dh := BCD(sek);
  49.       INTR($1a, regs);
  50.     END;
  51.   END;
  52.  
  53.   PROCEDURE puffer_belegen(x : SHORTINT);
  54.                                { INTEGER  Turbo Pascal 3.0 }
  55.   VAR wert : BYTE;
  56.   BEGIN
  57.     port[$70] := 11;
  58.     wert := Binaer(port[$71]);
  59.     wert := wert + x;
  60.     port[$70] := 11;
  61.     port[$71] := BCD(wert);
  62.   END;
  63.  
  64. BEGIN
  65.   sommerzeit := FALSE;
  66.   cmosuhr_lesen;
  67.   Write(std, '.', min, '.', sek);
  68.   port[$70] := 11;
  69.   IF Binaer(port[$71]) AND 1 = 0 THEN BEGIN
  70.     INC(std);           { std:=succ(std); Turbo Pascal 3.0 }
  71.     Write('  Normalzeit');
  72.     cmosuhr_schreiben(std, min, sek);
  73.     puffer_belegen(1);
  74.     sommerzeit := TRUE;
  75.   END ELSE BEGIN
  76.     Write('  Sommerzeit');
  77.     DEC(std);           { std:=pred(std); Turbo Pascal 3.0 }
  78.     puffer_belegen(-1);
  79.     cmosuhr_schreiben(std, min, sek);
  80.   END;
  81.   WriteLn(' war eingeschaltet');
  82.   cmosuhr_lesen;
  83.   Write(std, '.', min, '.', sek);
  84.   IF sommerzeit THEN Write('  Sommerzeit')
  85.                 ELSE Write('  Normalzeit');
  86.   WriteLn(' ist nun eingeschaltet');
  87. END.
  88. (* ------------------------------------------------------ *)
  89. (*                Ende von ZEITUMST.PAS                   *)