Attached is a patch against the most recent CVS snapshot of Kaffe.  A
number of things are fixed/added. A couple of changes could be
interpreted as personal preferences, so feel free to drop them (or,
let me know and I'll send a new diff).

I was looking into the time/date printing problem, and got a bit
sidetracked.  I endup tweaking the intialization of the TimeZone and
Calendar stuff, and tweaking the default locale format for time/date
printing (to match that of JDK 1.1.7...).  I also had some debugging
changes to other parts of kaffe (networking mostly), so I've included
those. 

I tried to fix System.c to detect the local timezone (via time() +
localtime()).  But, that returns 'MDT' for my machine, and
SimpleTimeZone only groks 'MST' with daylight hacks.  I'm tempted to
have System.c change 'xDx' -> 'xSx' just to get this to work better.
Ah, well.  Any suggestions?  I left the change in so Kaffe will get
the right timezone 50% of the time...

-Pat

Here's a (long) change-log-style description.

1999-05-13  Patrick A Tullmann  <[EMAIL PROTECTED]>

        * configure.in: be verbose about static/shared libraries,
        add check for ctime() and localtime() (for timezone check).
        * kaffe/kaffevm/debug.c,kaffe/kaffevm/debug.h: add NATIVENET
        flag for debugging network accesses.
        * kaffe/kaffevm/lookup.c: add more printf for the MLOOKUP
        debug method
        * kaffe/kaffevm/stackTrace.c,kaffe/kaffevm/stackTrace.h:
        clean up stale debug stuff, change 0 to NULL.
        * kaffe/kaffevm/support.c: add a number of asserts for 
        sanity checking method lookups and invocations.
        * libraries/clib/native/System.c: try to figure out the
        local timezone via localtime().  Default to 'PST'.  Not perfect.
        * libraries/clib/net/PlainSocketImpl.c: add a lot of debugging
        support via NATIVENET switch.
        * libraries/javalib/Makefile.am: add '-q' to the ZIP command
        so that it doesn't list the contents as it zips.
        * libraries/javalib/rebuildLib.in: remove '-verbose' from the
        JAVAC command line.
        * libraries/javalib/java/lang/System.java: Tweak static
        initializer to init SimpleTimeZone and GregorianCalendar
        without wasting time/space creating objects.
        * libraries/javalib/java/text/SimpleDateFormat.java: change
        order of field modifiers (cosmetic).
        * libraries/javalib/java/util/GregorianCalendar.java: 
        directly create the desired Calendar, instead of generic one
        plus modification to it.
        * libraries/javalib/java/util/SimpleTimeZone.java: add 
        daylight savings info to MST description.
        * libraries/javalib/java/util/TimeZone.java: throw an
        InternalError() if a defaultTimeZone cannot be found.
        getTimeZone(): use Hashtable.get() instead of iteration to lookup
        a timezone.
        * libraries/javalib/kaffe/text/dateformat/locale_en_US.java:
        Tweak time and date formats to match JDK 1.1.7 formats.

Index: configure.in
===================================================================
RCS file: /home/cvspublic/kaffe/configure.in,v
diff -u -b -r1.100 configure.in
@@ -260,6 +260,14 @@
 AC_SUBST_FILE(engine_frag)dnl
 engine_frag=$srcdir/kaffe/kaffevm/$with_engine/Makefile.frag
 
+dnl =========================================================================
+
+AC_MSG_CHECKING(library type)
+if test "$dynamic_libraries" = "no" ; then
+       AC_MSG_RESULT(static)
+else
+       AC_MSG_RESULT(shared)
+fi
 AC_CHECK_FUNCS(getpagesize)
 
 dnl =========================================================================
@@ -676,6 +684,7 @@
 AC_CHECK_FUNCS(memcpy memmove)
 AC_CHECK_FUNCS(mkdir)
 AC_CHECK_FUNCS(getcwd getwd gettimeofday ftime time uname getuid)
+AC_CHECK_FUNCS(ctime localtime)
 
 KSAVE_LIBS="$LIBS"
 LIBS="$M_LIBS $LIBS"
Index: kaffe/kaffevm/debug.c
===================================================================
RCS file: /home/cvspublic/kaffe/kaffe/kaffevm/debug.c,v
diff -u -b -r1.19 debug.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998 The University of Utah. All rights reserved.
+ * Copyright (c) 1998, 1999 The University of Utah. All rights reserved.
  *
  * See the file "license.terms" for information on usage and redistribution
  * of this file.
@@ -108,6 +108,7 @@
        D(NEWOBJECT,    "Show when new objects are allocated."),
        D(FINALIZE,     "Debug finalization."),
        D(LIBTOOL,      "Debug libtool stuff."),
+       D(NATIVENET,    "Show network accesses from the native code."),
 
        /* you can define combinations too */
        { "lookup", DBG_MLOOKUP|DBG_ELOOKUP|DBG_FLOOKUP, 
Index: kaffe/kaffevm/debug.h
===================================================================
RCS file: /home/cvspublic/kaffe/kaffe/kaffevm/debug.h,v
diff -u -b -r1.18 debug.h
@@ -85,6 +85,7 @@
 # define DBG_NEWOBJECT         DBG_BIT(41)
 # define DBG_FINALIZE          DBG_BIT(42)
 # define DBG_LIBTOOL           DBG_BIT(43)
+# define DBG_NATIVENET         DBG_BIT(44)
 
 /* let's reserve 50-63 for temporary uses */
 # define DBG_SLACKANAL         DBG_BIT(50) 
Index: kaffe/kaffevm/lookup.c
===================================================================
RCS file: /home/cvspublic/kaffe/kaffe/kaffevm/lookup.c,v
diff -u -b -r1.12 lookup.c
@@ -223,6 +223,7 @@
 {
        Method* mptr;
        int n;
+
        /*
         * Lookup method - this could be alot more efficient but never mind.
         * Also there is no attempt to honour PUBLIC, PRIVATE, etc.
@@ -234,10 +235,19 @@
                                SET_METHOD_NATIVECODE(mptr, 
(void*)throwAbstractMethodError);
                                mptr->accflags |= ACC_NATIVE;
                        }
+DBG(MLOOKUP,
+                       dprintf("findMethodLocal(%s,%s,%s) -> %p\n",
+                               class->name->data, name->data, signature->data, mptr); 
+)
+
                        return (mptr);
                }
        }
-       return (0);
+
+DBG(MLOOKUP,
+       dprintf("findMethodLocal(%s,%s,%s) -> BZZZT\n",
+               class->name->data, name->data, signature->data, mptr); )
+
+       return NULL;
 }
 
 /*
Index: kaffe/kaffevm/stackTrace.c
===================================================================
RCS file: /home/cvspublic/kaffe/kaffe/kaffevm/stackTrace.c,v
diff -u -b -r1.10 stackTrace.c
@@ -9,8 +9,6 @@
  * of this file. 
  */
 
-#define        DBG(s)
-
 #include "config.h"
 #include "config-std.h"
 #include "config-signal.h"
Index: kaffe/kaffevm/stackTrace.h
===================================================================
RCS file: /home/cvspublic/kaffe/kaffe/kaffevm/stackTrace.h,v
diff -u -b -r1.6 stackTrace.h
@@ -52,7 +52,7 @@
        }
 #define        STACKTRACESTEP(S)       ((S).frame = nextFrame((S).frame))
 #define STACKTRACEPC(S)                (PCFRAME((S).frame))
-#define        STACKTRACEMETHCREATE(S) (0)
+#define        STACKTRACEMETHCREATE(S) (NULL)
 #define        STACKTRACEEND(S)        ((S).frame == 0)
 
 #endif
Index: kaffe/kaffevm/support.c
===================================================================
RCS file: /home/cvspublic/kaffe/kaffe/kaffevm/support.c,v
diff -u -b -r1.33 support.c
@@ -65,6 +65,8 @@
        errorInfo info;
 
        if (mb == 0) {
+               assert(method_name);
+               assert(signature);
                if (isStaticCall) {
                        mb = lookupClassMethod((Hjava_lang_Class*)obj, method_name, 
signature, &info);
                }
@@ -72,6 +74,7 @@
                        mb = lookupObjectMethod((Hjava_lang_Object*)obj, method_name, 
signature, &info);
                }
        }
+
        /* No method or wrong type - throw exception */
        if (mb == 0) {
                throwError(&info);
@@ -94,6 +97,8 @@
        va_list argptr;
        jvalue retval;
 
+       assert(method_name || mb);
+
        va_start(argptr, isStaticCall);
        retval = do_execute_java_method_v(obj, method_name, signature, mb, 
isStaticCall, argptr);
        va_end(argptr);
@@ -686,6 +691,10 @@
        Method *meth;
        Utf8Const *name_utf8, *sig_utf8;
 
+       assert(cls);
+       assert(name);
+       assert(sig);
+
        name_utf8 = utf8ConstNew(name, -1);
        sig_utf8 = utf8ConstNew(sig, -1);
        meth = findMethod(cls, name_utf8, sig_utf8, einfo);
@@ -700,6 +709,9 @@
 Method*
 lookupObjectMethod(Hjava_lang_Object* obj, const char* name, const char* sig, 
errorInfo *einfo)
 {
+       assert(obj);
+       assert(name);
+       assert(sig);
        return (lookupClassMethod(OBJECT_CLASS(obj), name, sig, einfo));
 }
 
Index: libraries/clib/native/System.c
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/clib/native/System.c,v
diff -u -b -r1.15 System.c
@@ -277,7 +277,25 @@
        /* We should try to work this stuff out really - XXX */
        setProperty(p, "user.language", "EN");
        setProperty(p, "user.region", "US");
+
+       /* Figure out the local time zone. */
+#if defined(HAVE_CTIME) && defined(HAVE_LOCALTIME)
+       {
+               struct tm *timeODay;
+               time_t now;
+               if (-1 != time(&now))
+               {
+                       timeODay = localtime(&now);
+                       setProperty(p, "user.timezone", timeODay->tm_zone);
+               }
+               else
+               {
+                       setProperty(p, "user.timezone", "PST");
+               }
+       }
+#else
        setProperty(p, "user.timezone", "PST");
+#endif
 
        setProperty(p, "file.encoding.pkg", "kaffe.io");
        setProperty(p, "file.encoding", "Default");
Index: libraries/clib/net/PlainSocketImpl.c
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/clib/net/PlainSocketImpl.c,v
diff -u -b -r1.14 PlainSocketImpl.c
@@ -22,6 +22,7 @@
 #include "java_net_SocketOptions.h"
 #include "nets.h"
 #include <jsyscall.h>
+#include "../../../kaffe/kaffevm/debug.h"
 
 /*
  * Supported socket options
@@ -48,6 +49,49 @@
 #endif
   };
 
+#ifdef DEBUG
+       static const struct {
+               int opt;
+               char *name;
+       } optionNames[] = {
+#ifdef SO_SNDBUF
+               { java_net_SocketOptions_SO_SNDBUF, "SO_SNDBUF" },
+#endif
+#ifdef SO_RCVBUF
+               { java_net_SocketOptions_SO_RCVBUF, "SO_RCVBUF" },
+#endif
+#ifdef SO_LINGER
+               { java_net_SocketOptions_SO_LINGER, "SO_LINGER" },
+#endif
+#ifdef SO_REUSEADDR
+               { java_net_SocketOptions_SO_REUSEADDR, "SO_REUSEADDR" },
+#endif
+#ifdef TCP_NODELAY
+               { java_net_SocketOptions_TCP_NODELAY, "TCP_NODELAY" },
+#endif
+               { java_net_SocketOptions_SO_BINDADDR, "SO_BINDADDR" },
+               { java_net_SocketOptions_SO_TIMEOUT, "SO_TIMEOUT" },
+               { java_net_SocketOptions_IP_MULTICAST_IF, "IP_MULTICAST_IF" }
+       };
+#endif /*DEBUG*/
+
+#ifdef DEBUG
+static char *
+addr2dottedfour(unsigned int addr) 
+{
+       static char addrbuf[(4 * 3) + 3];
+       unsigned int top = (addr >> 24);
+       unsigned int tmid = (addr >> 16) & 0xFF;
+       unsigned int bmid = (addr >> 8) & 0xFF;
+       unsigned int bottom = addr & 0xFF;
+
+       sprintf(addrbuf, "%u.%u.%u.%u", top, tmid, bmid, bottom);
+       return addrbuf;
+}
+#endif /* def DEBUG */
+
+
+
 /*
  * Create a stream or datagram socket.
  */
@@ -65,11 +109,21 @@
                type = SOCK_STREAM;
        }
 
+       DBG(NATIVENET,
+           dprintf("socketCreate(%p, %s)\n", this, stream ? "stream" : "datagram");
+           )
+
        rc = KSOCKET(AF_INET, type, 0, &fd);
        if (rc) {
                unhand(unhand(this)->fd)->fd = -1;
                SignalError("java.io.IOException", SYS_ERROR(rc));
        }
+
+       DBG(NATIVENET,
+           dprintf("socketCreate(%p, %s) -> fd=%d\n", 
+                   this, stream ? "stream" : "datagram", fd);
+           )
+
        unhand(unhand(this)->fd)->fd = fd;
 }
 
@@ -77,13 +131,20 @@
  * Connect the socket to someone.
  */
 void
-java_net_PlainSocketImpl_socketConnect(struct Hjava_net_PlainSocketImpl* this, struct 
Hjava_net_InetAddress* daddr, jint dport)
+java_net_PlainSocketImpl_socketConnect(struct Hjava_net_PlainSocketImpl* this,
+                                      struct Hjava_net_InetAddress* daddr, 
+                                      jint dport)
 {
        int fd;
        int r;
        struct sockaddr_in addr;
        size_t alen;
 
+       DBG(NATIVENET,
+           dprintf("socketConnect(%p, %s, %d)\n", 
+                   this, addr2dottedfour(unhand(daddr)->address), dport);
+           )
+
        memset(&addr, 0, sizeof(addr));
 #if defined(BSD44)
        addr.sin_len = sizeof(addr);
@@ -105,6 +166,13 @@
                SignalError("java.io.IOException", SYS_ERROR(r));
        }
 
+       DBG(NATIVENET,
+           dprintf("socketConnect(%p, %s, %d) -> (lport: %d)\n",
+                   this, addr2dottedfour(unhand(daddr)->address), dport,
+                   ntohs(addr.sin_port)
+                   );
+           )
+
        unhand(this)->address = daddr;
        unhand(this)->port = dport;
        unhand(this)->localport = ntohs(addr.sin_port);
@@ -114,7 +182,9 @@
  * Bind this socket to an address.
  */
 void
-java_net_PlainSocketImpl_socketBind(struct Hjava_net_PlainSocketImpl* this, struct 
Hjava_net_InetAddress* laddr, jint lport)
+java_net_PlainSocketImpl_socketBind(struct Hjava_net_PlainSocketImpl* this,
+                                   struct Hjava_net_InetAddress* laddr, 
+                                   jint lport)
 {
        int r;
        struct sockaddr_in addr;
@@ -122,6 +192,11 @@
        int on = 1;
        size_t alen;
 
+       DBG(NATIVENET,
+           dprintf("socketBind(%p, %s, %d)\n", 
+                   this, addr2dottedfour(unhand(laddr)->address), lport);
+           )
+
        memset(&addr, 0, sizeof(addr));
 #if defined(BSD44)
        addr.sin_len = sizeof(addr);
@@ -150,6 +225,11 @@
                lport = ntohs(addr.sin_port);
        }
        unhand(this)->localport = lport;
+
+       DBG(NATIVENET,
+           dprintf("socketBind(%p, %s, -) -> (lport: %d)\n", this,
+                   addr2dottedfour(unhand(laddr)->address), lport);
+           );
 }
 
 /*
@@ -160,6 +240,10 @@
 {
        int r;
 
+       DBG(NATIVENET,
+           dprintf("socketListen(%p, count=%d)\n", this, count);
+           )
+
        r = KLISTEN(unhand(unhand(this)->fd)->fd, count);
        if (r) {
                SignalError("java.io.IOException", SYS_ERROR(r));
@@ -185,6 +269,11 @@
        addr.sin_port = htons(unhand(sock)->localport);
        addr.sin_addr.s_addr = htonl(unhand(unhand(sock)->address)->address);
 
+       DBG(NATIVENET,
+           dprintf("socketAccept(%p, localport=%d, addr=%s)\n", 
+                   this, addr.sin_port, addr2dottedfour(ntohl(addr.sin_addr.s_addr)));
+           )
+
        alen = sizeof(addr);
        rc = KACCEPT(unhand(unhand(this)->fd)->fd, (struct sockaddr*)&addr, &alen, 
unhand(this)->timeout, &r);
        if (rc == EINTR) {
@@ -205,6 +294,11 @@
 
        unhand(unhand(sock)->address)->address = ntohl(addr.sin_addr.s_addr);
        unhand(sock)->port = ntohs(addr.sin_port);
+
+       DBG(NATIVENET,
+           dprintf("socketAccept(%p, localport=-, addr=-) -> (sock: %p; addr: %s; 
+port:%d)\n", 
+                   this, sock, addr2dottedfour(ntohl(addr.sin_addr.s_addr)), 
+addr.sin_port);
+           )
 }
 
 /*
@@ -216,6 +310,10 @@
        int r;
        jint len;
 
+       DBG(NATIVENET,
+           dprintf("socketAvailable(%p)\n", this);
+           )
+
 #if defined(HAVE_IOCTL) && defined(FIONREAD)
        /* XXX make part of system call interface to protect errno */
        r = ioctl(unhand(unhand(this)->fd)->fd, FIONREAD, &len);
@@ -241,6 +339,11 @@
                len = 0;
        }
 #endif
+
+       DBG(NATIVENET,
+           dprintf("socketAvailable(%p) -> %d\n", this, len);
+           )
+
        return (len);
 }
 
@@ -252,6 +355,10 @@
 {
        int r;
 
+       DBG(NATIVENET,
+           dprintf("socketClose(%p)\n", this);
+           )
+
        if (unhand(unhand(this)->fd)->fd != -1) {
                r = KSOCKCLOSE(unhand(unhand(this)->fd)->fd);
                unhand(unhand(this)->fd)->fd = -1;
@@ -262,10 +369,20 @@
 }
 
 void
-java_net_PlainSocketImpl_socketSetOption(struct Hjava_net_PlainSocketImpl* this, jint 
opt, struct Hjava_lang_Object* arg)
+java_net_PlainSocketImpl_socketSetOption(struct Hjava_net_PlainSocketImpl* this,
+                                        jint opt, 
+                                        struct Hjava_lang_Object* arg)
 {
        int k, r, v;
 
+       DBG(NATIVENET,
+           char *optstr = "UNKNOWN";
+           for (k = 0; k < sizeof(optionNames) / sizeof(optionNames[0]); k++) 
+                   if (optionNames[k].opt == opt)
+                           optstr = optionNames[k].name;
+           dprintf("socketSetOption(%p, %s, arg=%p)\n", this, optstr, arg);
+           )
+
        /* Do easy cases */
        for (k = 0; k < sizeof(socketOptions) / sizeof(*socketOptions); k++) {
                if (opt == socketOptions[k].jopt) {
@@ -301,6 +418,14 @@
        int k, r, v;
        int vsize = sizeof(v);
 
+       DBG(NATIVENET,
+           char *optstr = "UNKNOWN";
+           for (k = 0; k < sizeof(optionNames) / sizeof(optionNames[0]); k++) 
+                   if (optionNames[k].opt == opt)
+                           optstr = optionNames[k].name;
+           dprintf("socketGetOption(%p, %s)\n", this, optstr);
+           )
+
        /* Do easy cases */
        for (k = 0; k < sizeof(socketOptions) / sizeof(*socketOptions); k++) {
                if (opt == socketOptions[k].jopt) {
@@ -310,6 +435,9 @@
                        if (r) {
                                SignalError("java.net.SocketException", SYS_ERROR(r));
                        }
+                       DBG(NATIVENET,
+                           dprintf("socketGetOption(%p, -) -> %d\n", this, v);
+                           )
                        return v;
                }
        }
@@ -329,6 +457,9 @@
        default:
                SignalError("java.net.SocketException", "Unimplemented socket 
option");    
        } 
+       DBG(NATIVENET,
+           dprintf("socketGetOption(%p, -) -> %d\n", this, r);
+           )
        return (r);
 }
 
@@ -339,6 +470,11 @@
        int rc;
        int fd;
 
+       DBG(NATIVENET,
+           dprintf("socket_read(%p, %p, %d, %d)\n", 
+                   this, buf, offset, len);
+           )
+
        fd = unhand(unhand(this)->fd)->fd;
        if (fd < 0) {
                SignalError("java.io.IOException", "fd invalid"); 
@@ -363,8 +499,14 @@
 void
 java_net_PlainSocketImpl_write(struct Hjava_net_PlainSocketImpl* this, HArrayOfByte* 
buf, jint offset, jint len)
 {
-       int r, fd;
+        int r;
+       int fd;
        ssize_t nw;
+
+       DBG(NATIVENET,
+           dprintf("socket_write(%p, %p, %d, %d)\n", 
+                   this, buf, offset, len);
+           )
 
        fd = unhand(unhand(this)->fd)->fd;
        if (fd >= 0) {
Index: libraries/javalib/Makefile.am
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/Makefile.am,v
diff -u -b -r1.14 Makefile.am
@@ -669,7 +669,7 @@
 jar-classes $(LIBDIR)/Klasses.jar: $(LIBDIR)/stamp
        rm -f $(LIBDIR)/$(CLASSFILE)
        cp $(srcdir)/kaffe/lang/unicode.idx $(srcdir)/kaffe/lang/unicode.tbl 
$(LIBDIR)/kaffe/lang
-       (cd $(LIBDIR) && $(ZIP) -r $(CLASSFILE) $(SRCDIRS))
+       (cd $(LIBDIR) && $(ZIP) -rq $(CLASSFILE) $(SRCDIRS))
 
 .PHONY: build-classes Klasses
 build-classes Klasses: $(LIBDIR)/$(CLASSFILE)
Index: libraries/javalib/rebuildLib.in
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/rebuildLib.in,v
diff -u -b -r1.12 rebuildLib.in
@@ -45,4 +45,5 @@
 cd $SRCDIR
 
 echo "Compiling classes ..."
-$JAVAC -verbose -d $LIBDIR -classpath $CPATH ${1+"$@"}
+#$JAVAC -verbose -d $LIBDIR -classpath $CPATH ${1+"$@"}
+$JAVAC -d $LIBDIR -classpath $CPATH ${1+"$@"}
Index: libraries/javalib/java/lang/System.java
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/java/lang/System.java,v
diff -u -b -r1.11 System.java
@@ -17,9 +17,7 @@
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.PrintStream;
-import java.util.GregorianCalendar;
 import java.util.Properties;
-import java.util.SimpleTimeZone;
 
 final public class System
 {
@@ -31,18 +29,28 @@
        private static SecurityManager security;
 
 static {
+               // XXX what are the constraints on the initialization order in here?
+
        security = defaultSecurityManager;
 
        props = initProperties(new Properties());
 
-       // Initiate the timezone & calendar.
-       new SimpleTimeZone(0, "GMT");
-       new GregorianCalendar();
-
        // Initialise the I/O
        in = new BufferedInputStream(new FileInputStream(FileDescriptor.in), 128);
        out = new PrintStream(new BufferedOutputStream(new 
FileOutputStream(FileDescriptor.out), 128), true);
        err = new PrintStream(new BufferedOutputStream(new 
FileOutputStream(FileDescriptor.err), 128), true);   
+
+       // Initiate the default timezone implementation & default calendar 
+implementation.  
+       try
+       {
+               Class.forName("java.util.SimpleTimeZone");
+               Class.forName("java.util.GregorianCalendar");
+       }
+       catch (ClassNotFoundException _)
+       {
+               // Kaffe won't let exceptions be thrown this early in
+               // the init process, anyway...
+       }
 }
 
 private System() { }
Index: libraries/javalib/java/text/SimpleDateFormat.java
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/java/text/SimpleDateFormat.java,v
diff -u -b -r1.10 SimpleDateFormat.java
@@ -22,7 +22,7 @@
   extends DateFormat
 {
        private static final long serialVersionUID = 4774881970558875024L;
-       final private static String DEFAULTPATTERNCHARS = "GyMdkHmsSEDFwWahKz";
+       private static final String DEFAULTPATTERNCHARS = "GyMdkHmsSEDFwWahKz";
        private DateFormatSymbols syms;
        private String pattern;
 
Index: libraries/javalib/java/util/GregorianCalendar.java
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/java/util/GregorianCalendar.java,v
diff -u -b -r1.4 GregorianCalendar.java
@@ -29,8 +29,8 @@
        private Calendar dateChange = null;
 
 static {
-       stdDateChange = new GregorianCalendar();
-       stdDateChange.set(1582, Calendar.OCTOBER, 15);
+        // initialize the day that switched to Gregorian (from Julian) date keeping
+       stdDateChange = new GregorianCalendar(1582, Calendar.OCTOBER, 15);
 }
 
 public GregorianCalendar()
Index: libraries/javalib/java/util/SimpleTimeZone.java
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/java/util/SimpleTimeZone.java,v
diff -u -b -r1.5 SimpleTimeZone.java
@@ -35,7 +35,7 @@
        new SimpleTimeZone(-9*60*60*1000, "AST");
        new SimpleTimeZone(-8*60*60*1000, "PST", Calendar.APRIL, 1, Calendar.SUNDAY, 
2*60*60*1000, Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*60*60*1000);
        new SimpleTimeZone(-7*60*60*1000, "PNT");
-       new SimpleTimeZone(-7*60*60*1000, "MST");
+       new SimpleTimeZone(-7*60*60*1000, "MST", Calendar.APRIL, 1, Calendar.SUNDAY, 
+2*60*60*1000, Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*60*60*1000);
        new SimpleTimeZone(-6*60*60*1000, "CST");
        new SimpleTimeZone(-5*60*60*1000, "EST");
        new SimpleTimeZone(-5*60*60*1000, "IET");
@@ -69,7 +69,9 @@
        useDaylight = false;
 }
 
-public SimpleTimeZone(int rawOffset, String ID, int startMonth, int 
startDayOfWeekInMonth, int startDayOfWeek, int startTime, int endMonth, int 
endDayOfWeekInMonth, int endDayOfWeek, int endTime)
+public SimpleTimeZone(int rawOffset, String ID,
+                     int startMonth, int startDayOfWeekInMonth, int startDayOfWeek, 
+int startTime,
+                     int endMonth, int endDayOfWeekInMonth, int endDayOfWeek, int 
+endTime)
        {
        this.startYear = 0;
        this.rawOffset = rawOffset;
Index: libraries/javalib/java/util/TimeZone.java
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/java/util/TimeZone.java,v
diff -u -b -r1.4 TimeZone.java
@@ -17,8 +17,9 @@
   implements Serializable, Cloneable
 {
        private static final long serialVersionUID = 3581463369166924961L;
-       private static TimeZone defaultTimeZone;
+       private static TimeZone defaultTimeZone = null;
        private static Hashtable zones = new Hashtable();
+
        private String timezoneID = null;
 
 public TimeZone()
@@ -84,8 +85,10 @@
        if (defaultTimeZone == null) {
                String zne = System.getProperty("user.timezone", "GMT");
                defaultTimeZone = getTimeZone(zne);
-               if (defaultTimeZone == null) {
+               if (defaultTimeZone == null)
                        defaultTimeZone = getTimeZone("GMT");
+               if (defaultTimeZone == null) {
+                       throw new InternalError("Cannot intialize timezone.  GMT & " 
++zne+ " zones are undefined.");
                }
        }
        return (defaultTimeZone);
@@ -102,16 +105,8 @@
 
 public static synchronized TimeZone getTimeZone(String ID)
 {
-       Enumeration e = zones.elements();
-
-       while (e.hasMoreElements()) {
-               TimeZone tz = (TimeZone)e.nextElement();
-               if (ID.equals(tz.getID())) {
-                       return (tz);
-               }
-       }
-
-       return (null);
+       TimeZone tz = (TimeZone)zones.get(ID);
+       return tz;
 }
 
 abstract public boolean inDaylightTime(Date date);
Index: libraries/javalib/kaffe/text/dateformat/locale_en_US.java
===================================================================
RCS file: 
/home/cvspublic/kaffe/libraries/javalib/kaffe/text/dateformat/locale_en_US.java,v
diff -u -b -r1.2 locale_en_US.java
@@ -11,8 +11,8 @@
         */
 
        // Full, Long, Medium, Short
-       { "date", new String[]{ "EEEE, MMMM d, yyyy", "MMMM d, yyyy", "d-MMM-yy", 
"M/d/yy" } },
-       { "time", new String[]{ "h:mm:ss;SS 'o''''clock' a z", "h:mm:ss a z", "h:mm:ss 
a", "h:mm a" } },
+       { "date", new String[]{ "EEEE, MMMM d, yyyy", "MMMM d, yyyy", "dd-MMM-yy", 
+"M/d/yy" } },
+       { "time", new String[]{ "h:mm:ss 'o''''clock' a z", "h:mm:ss a z", "h:mm:ss 
+a", "h:mm a" } },
 
        /*
         * DateFormatSymbols information

Reply via email to