home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* ZEITUMST.PAS *)
- (* (c) 1989 Werner Ruth & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM at_sommer_winter_zeit;
- (*$V-*)
- USES DOS; { entfällt bei Turbo Pascal 3.0 }
-
- { TYPE Registers = RECORD
- CASE INTEGER OF
- 1: (ax, bx, cx, dx, bp, si, di,
- ds, es, flags: INTEGER);
- 2: (al, ah, bl, bh, cl, ch, dl,
- dh: BYTE);
- END; Nur für Turbo Pascal 3.0 }
-
- VAR regs : Registers;
- std, min, sek : BYTE;
- sommerzeit : BOOLEAN;
-
- FUNCTION Binaer(wert : BYTE) : BYTE;
- BEGIN
- Binaer := (wert SHR 4)*10 + wert AND 15;
- END;
-
- PROCEDURE cmosuhr_lesen;
- BEGIN
- WITH regs DO BEGIN
- ah := 2;
- INTR($1a, regs);
- std := binaer(ch);
- min := binaer(cl);
- sek := binaer(dh);
- END;
- END;
-
- FUNCTION BCD(wert : BYTE) : BYTE;
- BEGIN
- BCD := ((wert DIV 10) SHL 4) + (wert MOD 10);
- END;
-
- PROCEDURE cmosuhr_schreiben(std, min, sek : BYTE);
- BEGIN
- WITH regs DO BEGIN
- ah := 3;
- ch := BCD(std);
- cl := BCD(min);
- dh := BCD(sek);
- INTR($1a, regs);
- END;
- END;
-
- PROCEDURE puffer_belegen(x : SHORTINT);
- { INTEGER Turbo Pascal 3.0 }
- VAR wert : BYTE;
- BEGIN
- port[$70] := 11;
- wert := Binaer(port[$71]);
- wert := wert + x;
- port[$70] := 11;
- port[$71] := BCD(wert);
- END;
-
- BEGIN
- sommerzeit := FALSE;
- cmosuhr_lesen;
- Write(std, '.', min, '.', sek);
- port[$70] := 11;
- IF Binaer(port[$71]) AND 1 = 0 THEN BEGIN
- INC(std); { std:=succ(std); Turbo Pascal 3.0 }
- Write(' Normalzeit');
- cmosuhr_schreiben(std, min, sek);
- puffer_belegen(1);
- sommerzeit := TRUE;
- END ELSE BEGIN
- Write(' Sommerzeit');
- DEC(std); { std:=pred(std); Turbo Pascal 3.0 }
- puffer_belegen(-1);
- cmosuhr_schreiben(std, min, sek);
- END;
- WriteLn(' war eingeschaltet');
- cmosuhr_lesen;
- Write(std, '.', min, '.', sek);
- IF sommerzeit THEN Write(' Sommerzeit')
- ELSE Write(' Normalzeit');
- WriteLn(' ist nun eingeschaltet');
- END.
- (* ------------------------------------------------------ *)
- (* Ende von ZEITUMST.PAS *)