<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
<FONT size=2>
 <BR>
struct_tm = RECORD<BR>
tm_sec: int;<BR>
tm_min: int;<BR>
tm_hour: int;<BR>
tm_mday: int;<BR>
tm_mon: int;<BR>
tm_year: int;<BR>
tm_wday: int;<BR>
tm_yday: int;<BR>
tm_isdst: int;<BR>
 <BR>
 <BR>
(* here *) <BR>
 <BR>
 <BR>
tm_gmtoff:INTEGER;<BR>
tm_zone: char_star;<BR>
END;<BR>
  <BR>
   <BR>
The fields after tm_isdst are not always present, and perhaps not always in that order.<BR>
Portable code, Modula-3, C, or otherwise, cannot refer to those last two fields.<BR>
C can do it with #ifdefs or autoconf-assisted and with some alternative if they are not present.<BR>
   <BR>
  <BR>
What to do?<BR>
Generally the vast majority of platform-dependency should and has been removed<BR>
from the system, for much easier (and therefore generally more correct) porting.<BR>
   <BR>
  <BR>
 <BR>
Today we declare struct_tm per-target.<BR>
Most targets do declare the fields, but:<BR>
Cygwin, Irix, HP-UX, Interix, Solaris do not.<BR>
"Most" therefore leaves at least Linux, *BSD, Darwin. <BR>
I do hope to bring up a few more targets, which may contribute<BR>
to one set or the other.<BR>
  <BR>
   <BR>
And I just checked that Solaris really doesn't provide the fields in C, so<BR>
we can claim that mainstream platforms are part of the "problem".<BR>
  <BR>
   <BR>
There are a few options:<BR>
  - leave it as system-dependent; my least favorite  <BR>
 <BR>
  - define it to have the common prefix and provide copying C wrappers  <BR>
  This allows for some portable uses. You can't just define the common  <BR>
  prefix and allow direct calls, as that would corrupt the stack where it is an output.  <BR>
  This would not allow for embedding the struct in any target-defined structs, but that probably never occurs.  <BR>
 <BR>
  - remove it from m3core and all functions that traffic in it -- localtime, mktime, etc. <BR>
  This is my favorite. ok?   <BR>
  Anyone that needs this functionality can chose from using interface Date, or writing portable C.  <BR>
  I'm going to go ahead and do this. ok?<BR>
 <BR>
  And in any case, rewrite m3-libs\m3core\src\time in #ifdef'ed C, at least wherever struct_tm is used. <BR>
  I'm going to go ahead and do this. ok?<BR>
 <BR>
 <BR>
 <BR>
- Jay<BR>
 <BR></FONT>                                     </body>
</html>