<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Index: m3core/src/time/WIN32/DateWin32.m3<br>===================================================================<br>RCS file: /usr/cvs/cm3/m3-libs/m3core/src/time/WIN32/DateWin32.m3,v<br>retrieving revision 1.1.1.2<br>diff -u -r1.1.1.2 DateWin32.m3<br>--- m3core/src/time/WIN32/DateWin32.m3    24 Jan 2001 16:48:11 -0000    1.1.1.2<br>+++ m3core/src/time/WIN32/DateWin32.m3    8 Sep 2013 03:06:28 -0000<br>@@ -62,7 +62,7 @@<br>       <*ASSERT t > 0.0D0*><br>       firstDayOfEpoch := TRUE<br>     END;<br>-    ft := TimeWin32.ToFileTime(t);<br>+    TimeWin32.ToFileTime(t, ft);<br>     status := WinBase.FileTimeToSystemTime(ADR(ft), ADR(st));<br>     <*ASSERT status # 0*><br>     tzrc := WinBase.GetTimeZoneInformation(ADR(tz));<br>@@ -134,7 +134,7 @@<br> PROCEDURE FromTimeUTC(<*UNUSED*> z: TimeZone; t: Time.T): T =<br>   VAR d: T; st: WinBase.SYSTEMTIME; ft: WinBase.FILETIME;  status: INTEGER;<br>   BEGIN<br>-    ft := TimeWin32.ToFileTime(t);<br>+    TimeWin32.ToFileTime(t, ft);<br>     status := WinBase.FileTimeToSystemTime(ADR(ft), ADR(st));<br>     <*ASSERT status # 0 *><br>     d := FromSystemTime(st);<br>Index: m3core/src/time/WIN32/Time.m3<br>===================================================================<br>RCS file: /usr/cvs/cm3/m3-libs/m3core/src/time/WIN32/Time.m3,v<br>retrieving revision 1.7<br>diff -u -r1.7 Time.m3<br>--- m3core/src/time/WIN32/Time.m3    29 Jun 2009 19:20:44 -0000    1.7<br>+++ m3core/src/time/WIN32/Time.m3    8 Sep 2013 03:06:28 -0000<br>@@ -6,8 +6,6 @@<br> (*      modified on Wed Sep 22 14:53:33 PDT 1993 by steveg     *)<br> (*      modified on Thu Mar 11 13:01:04 PST 1993 by mjordan    *)<br> <br>-(* $Id: Time.m3,v 1.7 2009-06-29 19:20:44 jkrell Exp $ *)<br>-<br> MODULE Time;<br> <br> IMPORT WinBase;<br>Index: m3core/src/time/WIN32/TimeWin32.c<br>===================================================================<br>RCS file: /usr/cvs/cm3/m3-libs/m3core/src/time/WIN32/TimeWin32.c,v<br>retrieving revision 1.4<br>diff -u -r1.4 TimeWin32.c<br>--- m3core/src/time/WIN32/TimeWin32.c    14 Apr 2010 14:04:52 -0000    1.4<br>+++ m3core/src/time/WIN32/TimeWin32.c    8 Sep 2013 03:06:28 -0000<br>@@ -15,27 +15,25 @@<br> extern "C" {<br> #endif<br> <br>-FILETIME<br>+void<br> __cdecl<br>-TimeWin32__ToFileTime(double t)<br>+TimeWin32__ToFileTime(double t, FILETIME * ft)<br> {<br>-    FILETIME ft;<br>     LARGE_INTEGER li;<br> <br>     li.QuadPart = (__int64)(t * 1.0e7);<br>-    ft.dwLowDateTime = li.LowPart;<br>-    ft.dwHighDateTime = li.HighPart;<br>-    return ft;<br>+    ft->dwLowDateTime = li.LowPart;<br>+    ft->dwHighDateTime = li.HighPart;<br> }<br> <br> double<br> __cdecl<br>-TimeWin32__FromFileTime(FILETIME ft)<br>+TimeWin32__FromFileTime(const FILETIME * ft)<br> {<br>     LARGE_INTEGER li;<br> <br>-    li.LowPart = ft.dwLowDateTime;<br>-    li.HighPart = ft.dwHighDateTime;<br>+    li.LowPart = ft->dwLowDateTime;<br>+    li.HighPart = ft->dwHighDateTime;<br>     return ((double)li.QuadPart) / 1.0e7;<br> }<br> <br>Index: m3core/src/time/WIN32/TimeWin32.i3<br>===================================================================<br>RCS file: /usr/cvs/cm3/m3-libs/m3core/src/time/WIN32/TimeWin32.i3,v<br>retrieving revision 1.1.1.1<br>diff -u -r1.1.1.1 TimeWin32.i3<br>--- m3core/src/time/WIN32/TimeWin32.i3    24 Jan 2001 12:24:35 -0000    1.1.1.1<br>+++ m3core/src/time/WIN32/TimeWin32.i3    8 Sep 2013 03:06:28 -0000<br>@@ -9,8 +9,13 @@<br> <br> (* Conversions between a "Time.T" and a "WinBase.FILETIME". *)<br> <br>-PROCEDURE ToFileTime(n: Time.T): WinBase.FILETIME;<br>+(* READONLY is to avoid passing struct by value *)<br>+PROCEDURE FromFileTime(READONLY ft: WinBase.FILETIME): Time.T;<br> <br>-PROCEDURE FromFileTime(ft: WinBase.FILETIME): Time.T;<br>+<*EXTERNAL TimeWin32__ToFileTime*><br>+PROCEDURE ToFileTime(n: Time.T; (*OUT*)VAR ft: WinBase.FILETIME);<br>+<br>+<*EXTERNAL TimeWin32__FromFileTime*><br>+PROCEDURE FromFileTime(READONLY ft: WinBase.FILETIME): Time.T;<br> <br> END TimeWin32.<br>Index: m3core/src/time/WIN32/m3makefile<br>===================================================================<br>RCS file: /usr/cvs/cm3/m3-libs/m3core/src/time/WIN32/m3makefile,v<br>retrieving revision 1.2<br>diff -u -r1.2 m3makefile<br>--- m3core/src/time/WIN32/m3makefile    11 Feb 2008 08:56:15 -0000    1.2<br>+++ m3core/src/time/WIN32/m3makefile    8 Sep 2013 03:06:28 -0000<br>@@ -6,14 +6,9 @@<br> %      modified on Tue Jun 15 21:53:44 PDT 1993 by harrison<br> %      modified on Tue May  4 10:16:00 PDT 1993 by mjordan<br> <br>-if equal (OS_TYPE, "POSIX")<br>+% Cygwin could use some of this<br> <br> Module ("TimeWin32")<br>-<br>-else<br>-<br> implementation ("Time")<br>-Module ("TimeWin32")<br> implementation ("DateWin32")<br>-<br>-end<br>+c_source ("TimeWin32")<br>Index: libm3/src/os/WIN32/FSWin32.m3<br>===================================================================<br>RCS file: /usr/cvs/cm3/m3-libs/libm3/src/os/WIN32/FSWin32.m3,v<br>retrieving revision 1.9<br>diff -u -r1.9 FSWin32.m3<br>--- libm3/src/os/WIN32/FSWin32.m3    27 Aug 2013 15:23:30 -0000    1.9<br>+++ libm3/src/os/WIN32/FSWin32.m3    8 Sep 2013 03:06:28 -0000<br>@@ -442,8 +442,9 @@<br> <br> PROCEDURE SetModificationTime(p: Pathname.T; READONLY t: Time.T)<br>   RAISES {OSError.E} =<br>-  VAR h: File.T; lastWrite := TimeWin32.ToFileTime(t);<br>+  VAR h: File.T; lastWrite: WinBase.FILETIME;<br>   BEGIN<br>+    TimeWin32.ToFileTime(t, lastWrite);<br>     h := OpenFileReadonly(p);<br>     TRY<br>       IF WinBase.SetFileTime(<br><br><br><br><br><br><div>> Date: Sun, 8 Sep 2013 05:09:37 +0000<br>> To: m3commit@elegosoft.com<br>> From: jkrell@elego.de<br>> Subject: [M3commit] CVS Update: cm3<br>> <br>> CVSROOT:    /usr/cvs<br>> Changes by:      jkrell@birch.   13/09/08 05:09:37<br>> <br>> Modified files:<br>>    cm3/m3-libs/libm3/src/os/WIN32/: FSWin32.m3 <br>>      ./: FSWin32.m3 <br>>   cm3/m3-libs/m3core/src/time/WIN32/: DateWin32.m3 Time.m3 <br>>                                             TimeWin32.c TimeWin32.i3 <br>>                                         m3makefile <br>> Removed files:<br>>      cm3/m3-libs/m3core/src/time/WIN32/: TimeWin32.m3 <br>> <br>> Log message:<br>>       replace confusing Modula-3 with simple C<br>>  specifically converting between a 64bit integer<br>>   and a floating point value merely by casting,<br>>     instead of having to operate on the 32bit halves<br>>  don't pass/return structs by value to that C<br>>      specifically because the ABI of our generated C<br>>   doesn't pass/return them directly and therefore<br>>   doesn't interoperate with C well, currently<br>>       I didn't have good type information for a long time,<br>>      just struct sizes..which I guess would have sufficed.<br>>     This should be fixable, if we can stand to lose K&R compatibility<br>> <br></div>                                        </div></body>
</html>