home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 12 / praxis / uhr_res.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1988-09-27  |  2.5 KB  |  72 lines

  1. (*------------------------------------------------------- *)
  2. (*                  UHR_RES.PAS                           *)
  3. (*        residente Uhrzeit-Anzeige unter TURBO 4.0       *)
  4. (*         (c) 1988 by Dieter Bührer und TOOLBOX          *)
  5. (* ------------------------------------------------------ *)
  6.  
  7. PROGRAM UHR_RES;
  8.  
  9. {$M 1024,0,0}
  10.  
  11. USES Dos;
  12.  
  13. CONST Zeit        : REAL    = 0.0;
  14.       i           : INTEGER = 0;
  15.       TimerIntr             = $1C;
  16.       OldTimerVec :POINTER  = NIL;
  17.       CGA         :BOOLEAN  = FALSE;      (* für CGA TRUE *)
  18.  
  19. (* ------------------------------------------------------ *)
  20. PROCEDURE ZeitAnzeige;
  21.  
  22. INTERRUPT;
  23.  
  24. VAR CGAAnzeige: ARRAY [0..7,0..1] OF CHAR
  25.                                          ABSOLUTE $B800:$90;
  26.     HGCAnzeige: ARRAY [0..7,0..1] OF CHAR
  27.                                          ABSOLUTE $B000:$90;
  28.                        (* Offset $90 = Zeile 72 ( 0..79 ) *)
  29.                        (* CGA          = $B800 *)
  30.                        (* MGA/HERCULES = $B000 *)
  31.     DosZeit: LongInt ABSOLUTE $40:$6C;
  32.  
  33. CONST Flag       : BYTE = 0;
  34.       HilfAnzeige: ARRAY [0..7,0..1] OF CHAR =
  35.                 ((' ','p'),(' ','p'), (':','p'), (' ','p'),
  36.                  (' ','p'), (':','p'),(' ','p'), (' ','p'));
  37.  
  38. BEGIN { ZeitAnzeige }
  39.   IF Flag > 0 THEN BEGIN
  40.          (* nur bei jedem 2.Timertick Uhrzeit korrigieren *)
  41.     Flag := 0; EXIT;
  42.   END;
  43.   Inc(Flag);
  44.   Zeit := DosZeit/18.2;
  45.                  (* ungefähr 18.2 Timer-Ticks pro Sekunde *)
  46.   i           := Trunc (Zeit / 3600);
  47.   HilfAnzeige[0,0] := Chr((i DIV 10)+48);
  48.   HilfAnzeige[1,0] := Chr((i MOD 10)+48);
  49.   Zeit        := Zeit - (i*3600.0);
  50.   i           := Trunc (Zeit / 60);
  51.   HilfAnzeige[3,0] := Chr((i DIV 10)+48);
  52.   HilfAnzeige[4,0] := Chr((i MOD 10)+48);
  53.   i           := Trunc(Zeit - (i*60));
  54.   HilfAnzeige[6,0] := Chr((i DIV 10)+48);
  55.   HilfAnzeige[7,0] := Chr((i MOD 10)+48);
  56.                            (* Inverse Darstellung der Uhr *)
  57.   IF CGA THEN Move(HilfAnzeige,CGAAnzeige,16)
  58.   ELSE Move(HilfAnzeige,HGCAnzeige,16);
  59. END; { ZeitAnzeige }
  60.  
  61. BEGIN { UHR_RES }
  62.  IF (MEM[0000:1040] AND 48) <> 48 then CGA := TRUE
  63.  ELSE CGA := FALSE;
  64.  SetInTVec(TimerIntr,@ZeitAnzeige);
  65.  WriteLn('Uhrzeit installiert   C) D.Bührer 1988');
  66.  Keep(0);
  67.  (* ----------------------------------------------------- *)
  68.  (* R.AH:=$31;R.AL:=0;INTR($21;r);                        *)
  69.  (* Terminate but stay resident                           *)
  70.  (* ----------------------------------------------------- *)
  71. END. { UHR_RES }
  72.