123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- MODULE Clock; (** fof , adaption of interface of Aos modules Clock to windows version **)
- (* ETH Oberon, Copyright 2003 ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich.
- Refer to the "General ETH Oberon System Source License" contract available at: http://www.oberon.ethz.ch/ *)
- (*
- history
- first version (windows): 01.04.2003, fof.
- todo
- *)
- IMPORT Kernel32;
- VAR tz*: LONGINT; (** system time zone offset in minutes (from -720 to 720) *)
- starttime*, startdate*: LONGINT; (** time this module was loaded (usually boot time) *)
- (** Get time (t) and date (d).
- day = d MOD 32, month = d DIV 32 MOD 16, year = 1900+d DIV 512,
- hour = t DIV 4096 MOD 32, minute = t DIV 64 MOD 64, second = t MOD 64 *)
- PROCEDURE Get* (VAR t, d: LONGINT);
- VAR st: Kernel32.SystemTime;
- BEGIN
- t := 0; d := 0;
- Kernel32.GetLocalTime(st);
- d := st.wYear - 1900; d := ASH(d, 4);
- d := d + st.wMonth; d := ASH(d, 5);
- d := d + st.wDay;
- t := st.wHour; t := ASH(t, 6);
- t := t + st.wMinute; t := ASH(t, 6);
- t := t + st.wSecond
- END Get;
- (** Set time (t) and date (d). *)
- PROCEDURE Set* (t, d: LONGINT);
- VAR st: Kernel32.SystemTime;retBOOL: Kernel32.BOOL; (* Dan 09.11.05 *)
- BEGIN
- st.wDay := SHORT(d MOD 20H); d := ASH(d, - 5);
- st.wMonth := SHORT(d MOD 10H); d := ASH(d, - 4);
- st.wYear := SHORT(d MOD 80H) + 1900;
- st.wMilliseconds := 0;
- st.wSecond := SHORT(t MOD 40H); t := ASH(t, - 6);
- st.wMinute := SHORT(t MOD 40H); t := ASH(t, - 6);
- st.wHour := SHORT(t MOD 20H);
- retBOOL := Kernel32.SetLocalTime(st)
- END Set;
- (* Get and Set taken from Module Oberon, (C) Copyright ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich *)
- BEGIN
- Get(starttime,startdate)
- END Clock.
|