home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / CLOCKSTP.ZIP / CLKDEMO.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-07-23  |  6.4 KB  |  170 lines

  1. PROGRAM ClkDemo;
  2.  
  3.  {This PROGRAM demonstates how to use the CLOCKS UNIT, including a
  4.   clock object, its methods, and related FUNCTIONs and PROCEDUREs.
  5.   Differences between CMOS and DOS clocks are shown.
  6.  
  7.   (C) Copyright 1989, Earl F. Glynn, Overland Park, KS.  Compuserve 73257,3527.
  8.   All Rights Reserved.  This Turbo Pascal 5.5 PROGRAM may be freely distributed
  9.   for non-commerical use.
  10.  
  11.   Several of the examples were derived from "The REXX Language" by
  12.   M.F. Cowlishaw, Prentice Hall, 1985.}
  13.  
  14.   USES
  15.     Clocks,
  16.     DOS;    {FindFirst,FindNext,SearchRec,AnyFile,DOSError}
  17.  
  18.   VAR
  19.     Clk1,Clk2,Clk3:  Clock;       {clock objects -- real time clocks}
  20.     stamp1,stamp2 :  ClockValue;  {static clocks -- time stamps}
  21.     stamp3,stamp4 :  ClockValue;
  22.     stamp5        :  ClockValue;
  23.     DirInfo       :  SearchRec;
  24.  
  25.   PROCEDURE ShowClocks;
  26.   BEGIN
  27.     Clk2.Start (CMOSClock);
  28.     Clk3.Start (DOSClock);
  29.     WRITELN ('  CMOS Clock:  ',Clk2.date('u'),' ',Clk2.time('N') );
  30.     WRITELN ('   DOS Clock:  ',Clk3.date('u'),' ',Clk3.time('L') );
  31.     WRITELN ('  Difference:  ',TimeDiff(Clk2.StartValue,Clk3.StartValue):8:2,
  32.              ' second(s)');
  33.   END {ShowClocks};
  34.  
  35.   PROCEDURE DisableInterrupts;
  36.     INLINE ($FA);
  37.  
  38.   PROCEDURE EnableInterrupts;
  39.     INLINE ($FB);
  40.  
  41.   PROCEDURE KillTime;
  42.     {The following could be used for a 5-second delay, but it re-enables
  43.      interrupts when they are disabled:
  44.  
  45.         WHILE clk1.elapsed < 5.0 DO (* nothing *);
  46.  
  47.      So,time will be wasted with a few calculations.}
  48.  
  49.     VAR
  50.       i:  WORD;
  51.       x:  REAL;
  52.   BEGIN
  53.     WRITELN ('''Kill'' some time ...');
  54.     FOR i := 1 TO 10000 DO
  55.       x := SQRT(i)
  56.   END;
  57.  
  58. BEGIN
  59.   Clk1.Start (CMOSClock);
  60.   WRITELN ('CMOS/DOS Clock Differences');
  61.   WRITELN ('--------------------------');
  62.   WRITELN ('Start Clocks');
  63.   ShowClocks;
  64.   KillTime;
  65.   ShowClocks;
  66.   WRITELN ('Disable Interrupts (DOS clock will stop):');
  67.   DisableInterrupts;
  68.   KillTime;
  69.   ShowClocks;
  70.   WRITELN ('Enable Interrupts');
  71.   EnableInterrupts;
  72.  
  73.   SetClock (1985,8,27, 16,54,22, 12, stamp1);  {These are not real-time clocks.}
  74.   SetClock (1900,1, 1,  0, 0, 0,  0, stamp2);
  75.   SetClock (2079,6, 5, 23,59,59, 99, stamp3);
  76.  
  77.   WRITELN ('Cowlishaw''s':52);
  78.   WRITELN ('now':39,'REXX Book':13,'First':13,'Last':13);
  79.   WRITELN ('Date/DateFormat Examples');
  80.   WRITELN ('------------------------');
  81.   WRITELN ('day this century - C':26,Clk2.Date('Century'):13,
  82.     DateFormat('C',stamp1):13, DateFormat('C',stamp2):13,
  83.     DateFormat('C',stamp3):13);
  84.   WRITELN ('day this year - D':26,   Clk2.Date('Days'):13,
  85.     DateFormat('D',stamp1):13, DateFormat('D',stamp2):13,
  86.     DateFormat('D',stamp3):13);
  87.   WRITELN ('dd/mm/yy - E':26,        Clk2.Date('European'):13,
  88.     DateFormat('E',stamp1):13, DateFormat('E',stamp2):13,
  89.     DateFormat('E',stamp3):13);
  90.   WRITELN ('month name - M':26,      Clk2.Date('MONTH'):13,
  91.     DateFormat('M',stamp1):13, DateFormat('M',stamp2):13,
  92.     DateFormat('M',stamp3):13);
  93.   WRITELN ('dd Mmm yyyy - N':26,     Clk2.Date('normal'):13,
  94.     DateFormat('N',stamp1):13, DateFormat('N',stamp2):13,
  95.     DateFormat('N',stamp3):13);
  96.   WRITELN ('yy/mm/dd - O':26,        Clk2.Date('Ordered'):13,
  97.      DateFormat('O',stamp1):13,DateFormat('O',stamp2):13,
  98.      DateFormat('O',stamp3):13);
  99.   WRITELN ('yyyymmdd - S':26,        Clk2.Date('standard'):13,
  100.     DateFormat('S',stamp1):13, DateFormat('S',stamp2):13,
  101.     DateFormat('S',stamp3):13);
  102.   WRITELN ('mm/dd/yy - U':26,        Clk2.Date('USA'):13,
  103.     DateFormat('U',stamp1):13, DateFormat('U',stamp2):13,
  104.     DateFormat('U',stamp3):13);
  105.   WRITELN ('day of week - W':26,     Clk2.Date('weekday'):13,
  106.     DateFormat('W',stamp1):13, DateFormat('W',stamp2):13,
  107.     DateFormat('W',stamp3):13);
  108.  
  109.   WRITELN;
  110.   WRITELN ('Time/TimeFormat Examples');
  111.   WRITELN ('------------------------');
  112.   WRITELN ('hh:mmxm - C':26,             Clk2.Time('Civil'):13,
  113.     TimeFormat('C',stamp1):13, TimeFormat('C',stamp2):13,
  114.     TimeFormat('C',stamp3):13);
  115.   WRITELN ('hours since midnight - H':26,Clk2.Time('Hours'):13,
  116.     TimeFormat('h',stamp1):13, TimeFormat('h',stamp2):13,
  117.     TimeFormat('h',stamp3):13);
  118.   WRITELN ('hh:mm:ss.xx - L':26,         Clk2.Time('long'):13,
  119.     TimeFormat('L',stamp1):13, TimeFormat('L',stamp2):13,
  120.     TimeFormat('L',stamp3):13);
  121.   WRITELN ('minutes since midnight - M', Clk2.Time('minutes'):13,
  122.     TimeFormat('m',stamp1):13, TimeFormat('m',stamp2):13,
  123.     TimeFormat('m',stamp3):13);
  124.   WRITELN ('hh:mm:ss - N':26,            Clk2.Time('normal'):13,
  125.     TimeFormat('n',stamp1):13, TimeFormat('n',stamp2):13,
  126.     TimeFormat('n',stamp3):13);
  127.   WRITELN ('seconds since midnight - S', Clk2.Time('seconds'):13,
  128.     TimeFormat('s',stamp1):13, TimeFormat('s',stamp2):13,
  129.     TimeFormat('s',stamp3):13);
  130.  
  131.   WRITELN;
  132.   WRITELN ('Time Differences/Elapsed Time');
  133.   WRITELN ('-----------------------------');
  134.   WRITELN (' ':20,'seconds':12,'hh:mm:ss':16);
  135.   WRITELN ('CMOS - DOS Clock:':20,
  136.     TimeDiff(Clk2.StartValue,Clk3.StartValue):12:2,
  137.     hhmmss(TimeDiff(Clk2.StartValue,Clk3.StartValue)):16);
  138.   SetClock (1989,1, 1,  0, 0, 0,  0, stamp4);
  139.   SetClock (1990,1, 1,  0, 0, 0,  0, stamp5);
  140.   WRITELN ('Jan 1-Dec 31 1989:':20,TimeDiff(stamp5,stamp4):12:0,
  141.     hhmmss(TimeDiff(stamp5,stamp4)):16);
  142.   WRITELN ('Dec 31-Jan 1 1989:':20,TimeDiff(stamp4,stamp5):12:0,
  143.     hhmmss(TimeDiff(stamp4,stamp5)):16);
  144.   SetClock (1992,1, 1,  0, 0, 0,  0, stamp4);
  145.   SetClock (1993,1, 1,  0, 0, 0,  0, stamp5);
  146.   WRITELN ('1992 (leap year):':20,TimeDiff(stamp5,stamp4):12:0,
  147.     hhmmss(TimeDiff(stamp5,stamp4)):16);
  148.   SetClock (2000,1, 1,  0, 0, 0,  0, stamp5);
  149.   WRITELN ('20th century:':20,TimeDiff(stamp5,stamp2):12:0,
  150.     hhmmss(TimeDiff(stamp5,stamp2)):16,' (100*365 days + 24 leap days)');
  151.   WRITELN ('Maximum Clock Range:':20,TimeDiff(stamp3,stamp2):12:0,
  152.     hhmmss(TimeDiff(stamp3,stamp2)):16,' (January 1, 1900 midnight -');
  153.   WRITELN ('June 5, 2079 23:59:59.99)':78);
  154.   WRITELN ('Elapsed time:':20,Clk1.Elapsed:12:0,
  155.     hhmmss(Clk1.Elapsed):16);
  156.  
  157.   WRITELN;
  158.   WRITELN ('Clocks.UnPackTime');
  159.   WRITELN ('-----------------');
  160.   FindFirst ('*.*',AnyFile,DirInfo);
  161.   WHILE DOSError = 0 DO BEGIN  {Note:  seconds on files are even numbers}
  162.     Clocks.UnPackTime (DirInfo.Time, stamp5);
  163.     WRITELN (DirInfo.Name:12,'  ',DirInfo.size:7,'  ',
  164.       COPY(DateFormat('Weekday',stamp5),1,3),' ',
  165.       DateFormat('USA',stamp5),' ',TimeFormat('Normal',stamp5));
  166.     FindNext (DirInfo)
  167.   END
  168.  
  169. END {ClkDemo}.
  170.