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.