Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 10 Aug 2015 08:29:10 +0100
branchjv
changeset 3594 f2577133d3d2
parent 3587 11eacbaa5be8 (current diff)
parent 3593 3476aa995618 (diff)
child 3596 ddb0e8c5cd93
Merge
Socket.st
bc.mak
stx_libbasic2.st
--- a/AbstractBackgroundJob.st	Tue Jul 21 06:55:26 2015 +0200
+++ b/AbstractBackgroundJob.st	Mon Aug 10 08:29:10 2015 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
 	      All Rights Reserved
@@ -28,7 +30,7 @@
 "{ NameSpace: Smalltalk }"
 
 Object subclass:#AbstractBackgroundJob
-	instanceVariableNames:'name job priority thread running'
+	instanceVariableNames:'name job priority thread running isDebuggerJob'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'System-Support'
@@ -142,6 +144,19 @@
 
 !AbstractBackgroundJob methodsFor:'accessing'!
 
+isDebuggerJob
+    ^ isDebuggerJob ? false
+!
+
+isDebuggerJob:aBoolean
+    "added to allow suppression of breakpoints/halts of a
+     job started by the debugger 
+     (if you ask what this is for,
+      try to put a breakpoint into the syntaxhighlighter in the old schema)"
+     
+    isDebuggerJob := aBoolean
+!
+
 job
     ^ job
 !
@@ -294,15 +309,24 @@
     | t |
 
     ((t := thread) isNil or:[t isDead]) ifTrue:[
-        thread := [
+        thread := 
             [
-                running := true.
-                self process
-            ] ensure: [
-                running := false.
-                thread := nil
-            ]
-        ] newProcess.
+                [
+                    ControlInterrupt handle:[:ex |
+                        self isDebuggerJob ifTrue:[
+                            Transcript showCR:'halt/breakpoint ignored in debugger job'.
+                            ex proceed.
+                        ].
+                        ex reject
+                    ] do:[    
+                        running := true.
+                        self process
+                    ].    
+                ] ensure: [
+                    running := false.
+                    thread := nil
+                ].    
+            ] newProcess.
         self setupThread: thread priority: prio.
         thread resume.
     ]
@@ -328,10 +352,10 @@
 !AbstractBackgroundJob class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic2/AbstractBackgroundJob.st,v 1.2 2015-02-21 22:43:08 vrany Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic2/AbstractBackgroundJob.st,v 1.2 2015-02-21 22:43:08 vrany Exp $'
+    ^ '$Header$'
 ! !
 
--- a/RunArray.st	Tue Jul 21 06:55:26 2015 +0200
+++ b/RunArray.st	Mon Aug 10 08:29:10 2015 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  This class is not covered by or part of the ST/X licence.
 
@@ -26,6 +28,8 @@
 "
 "{ Package: 'stx:libbasic2' }"
 
+"{ NameSpace: Smalltalk }"
+
 SequenceableCollection subclass:#RunArray
 	instanceVariableNames:'contentsArray'
 	classVariableNames:''
@@ -877,6 +881,17 @@
     ^ true
 !
 
+contains:aBlock 
+    "Return true, if aBlock returns true for any of the receiver's elements"
+
+    contentsArray notNil ifTrue:[
+        contentsArray pairWiseDo:[:len :val | 
+            (aBlock value:val) ifTrue:[^ true].
+        ].
+    ].    
+    ^ false
+!
+
 do:aBlock 
     "Evaluate aBlock with each of the receiver's elements as the 
     argument. "
@@ -891,8 +906,8 @@
 !
 
 runsDo:aBlock 
-    "Evaluate aBlock with each of the receiver's runs, passing
-     length and value as arguments."
+    "Evaluate aBlock with each of the receiver's runs, 
+     passing length and value as arguments."
 
     contentsArray notNil ifTrue:[
         contentsArray pairWiseDo:aBlock
@@ -916,6 +931,7 @@
     ]
 ! !
 
+
 !RunArray methodsFor:'printing & storing'!
 
 displayOn:aGCOrStream 
@@ -1382,14 +1398,13 @@
     "Modified: 11.5.1996 / 13:35:17 / cg"
 ! !
 
-
 !RunArray class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic2/RunArray.st,v 1.37 2014-07-10 12:24:08 cg Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic2/RunArray.st,v 1.37 2014-07-10 12:24:08 cg Exp $'
+    ^ '$Header$'
 ! !
 
--- a/Socket.st	Tue Jul 21 06:55:26 2015 +0200
+++ b/Socket.st	Mon Aug 10 08:29:10 2015 +0100
@@ -27,6 +27,9 @@
 %{
 /* #define DGRAM_DEBUG /* */
 
+#ifdef __MINGW__
+# include <stdio.h>
+#endif
 #include "stxOSDefs.h"
 
 #ifdef WIN32
@@ -66,7 +69,9 @@
 #define SOCKET_FROM_FILE(f)             (SOCKET_FROM_FD(fileno(f)))
 #define SOCKET_FROM_FILE_OBJECT(f)      (__INST(handleType) == @symbol(socketHandle) ? SOCKET_FROM_FD(__FILEVal(f)) : SOCKET_FROM_FILE(__FILEVal(f)))
 
-#include <stdio.h>
+#ifndef __MINGW__
+# include <stdio.h>
+#endif
 #include <errno.h>
 
 #ifdef WANT__TCP_DOT_H
@@ -244,10 +249,10 @@
     which are meant to be compatible to ST-80's UnixSocketAccessor interface.
 
     TODO: cleanup historic leftovers,
-          change to raise more signals on errors.
+	  change to raise more signals on errors.
 
     [author:]
-        Claus Gittinger
+	Claus Gittinger
 "
 !
 
@@ -812,11 +817,11 @@
      not the whole smalltalk).
      See also: #newTCPclientToHost:port:withTimeout:"
 
-    ^ self 
-        newTCPclientToHost:hostNameOrAddress 
-        port:aPortOrServiceName 
-        domain:nil 
-        withTimeout:nil
+    ^ self
+	newTCPclientToHost:hostNameOrAddress
+	port:aPortOrServiceName
+	domain:nil
+	withTimeout:nil
 
     "
       Socket newTCPclientToHost:'www.exept.de' port:'http'
@@ -1809,17 +1814,17 @@
     |ok error socketAddress|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
     socketAddress := aSocketAddress.
     socketAddress isNil ifTrue:[
-        "ok, get a all zero socket address, so it is for anyHost
-         and the port will be assigned"
-        socketAddress := self socketAddressClass new.
+	"ok, get a all zero socket address, so it is for anyHost
+	 and the port will be assigned"
+	socketAddress := self socketAddressClass new.
     ].
     domain == #'AF_INET6' ifTrue:[
-        "accept also IPv4 connections on IPv6 sockets (this is off by default fow windows"
-        self setSocketOption:#'IPV6_V6ONLY' argument:false argument:nil.
+	"accept also IPv4 connections on IPv6 sockets (this is off by default fow windows"
+	self setSocketOption:#'IPV6_V6ONLY' argument:false argument:nil.
     ].
     ok := false.
 
@@ -1833,52 +1838,52 @@
     int sockAddrOffs;
 
     if (fp == nil) {
-        goto getOutOfHere;
+	goto getOutOfHere;
     }
 
     if (! __isBytes(socketAddress)) {
-        error = __mkSmallInteger(-1);
-        goto getOutOfHere;
+	error = __mkSmallInteger(-1);
+	goto getOutOfHere;
     }
     /* get the socket-address */
     if (__isNonNilObject(socketAddress)){
-        int nIndex;
-        OBJ cls = __qClass(socketAddress);
-
-        sockAddrOffs = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
-        nIndex = __qSize(socketAddress) - OHDR_SIZE;
-        sockaddr_size = nIndex - sockAddrOffs;
-        if (sockaddr_size > sizeof(sa)) {
-            error=__mkSmallInteger(-2);
-            goto getOutOfHere;
-        }
-        memcpy(&sa, __byteArrayVal(socketAddress) + sockAddrOffs, sockaddr_size);
+	int nIndex;
+	OBJ cls = __qClass(socketAddress);
+
+	sockAddrOffs = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+	nIndex = __qSize(socketAddress) - OHDR_SIZE;
+	sockaddr_size = nIndex - sockAddrOffs;
+	if (sockaddr_size > sizeof(sa)) {
+	    error=__mkSmallInteger(-2);
+	    goto getOutOfHere;
+	}
+	memcpy(&sa, __byteArrayVal(socketAddress) + sockAddrOffs, sockaddr_size);
     }
 
     sock = SOCKET_FROM_FILE_OBJECT(fp);
 
 # ifdef SO_REUSEADDR
     if (reuse == true) {
-        int on = 1;
-        if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof (on)) < 0) {
-            DBGPRINTF(("SOCKET: setsockopt - SO_REUSEADDR failed\n"));
-        }
+	int on = 1;
+	if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof (on)) < 0) {
+	    DBGPRINTF(("SOCKET: setsockopt - SO_REUSEADDR failed\n"));
+	}
     }
 # endif /* SO_REUSEADDR */
 
 # ifdef BIND_BLOCKS
 #  ifdef DO_WRAP_CALLS
     do {
-        __threadErrno = 0;
-        ret = STX_WSA_NOINT_CALL3("bind", bind, sock, &sa, sockaddr_size);
+	__threadErrno = 0;
+	ret = STX_WSA_NOINT_CALL3("bind", bind, sock, &sa, sockaddr_size);
     } while ((ret < 0) && (__threadErrno == EINTR));
     if (ret < 0) {
-        errno = __threadErrno;
+	errno = __threadErrno;
     }
 #  else
     __BEGIN_INTERRUPTABLE__
     do {
-        ret = bind(sock, (struct sockaddr *)&sa, sockaddr_size);
+	ret = bind(sock, (struct sockaddr *)&sa, sockaddr_size);
     } while ((ret < 0) && (errno == EINTR));
     __END_INTERRUPTABLE__
 #  endif
@@ -1888,68 +1893,68 @@
 # endif
     if (ret < 0) {
 # ifdef WIN32
-        if (errno == 0) {
-            errno = WSAGetLastError();
-        }
+	if (errno == 0) {
+	    errno = WSAGetLastError();
+	}
 # endif
-        DBGPRINTF(("SOCKET: bind failed errno=%d\n", errno));
-        error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
-        goto getOutOfHere;
+	DBGPRINTF(("SOCKET: bind failed errno=%d\n", errno));
+	error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
+	goto getOutOfHere;
     } else {
-        ok = true;
+	ok = true;
     }
 #endif /* NO_SOCKET */
 
 getOutOfHere: ;
 %}.
     ok ~~ true ifTrue:[
-        |errorHolder errorString|
-
-        error isInteger ifTrue:[
-            errorHolder := OperatingSystem errorHolderForNumber:error.
-            errorString := errorHolder errorString.
-        ] ifFalse:[
-            errorString := error.
-        ].
-        OpenError newException
-            errorString:('cannot bind socket to address: %1 (%2)'
-                            bindWith:socketAddress
-                            with:errorString);
-            errorCode:error;
-            osErrorHolder:errorHolder;
-            parameter:self;
-            raiseRequest.
-        "maybe someone catches the error and binds to some other port..."
-        ^ true.
+	|errorHolder errorString|
+
+	error isInteger ifTrue:[
+	    errorHolder := OperatingSystem errorHolderForNumber:error.
+	    errorString := errorHolder errorString.
+	] ifFalse:[
+	    errorString := error.
+	].
+	OpenError newException
+	    errorString:('cannot bind socket to address: %1 (%2)'
+			    bindWith:socketAddress
+			    with:errorString);
+	    errorCode:error;
+	    osErrorHolder:errorHolder;
+	    parameter:self;
+	    raiseRequest.
+	"maybe someone catches the error and binds to some other port..."
+	^ true.
     ].
 
     port := socketAddress port.
     port == 0 ifTrue:[
-        "this is a bind to a random port, now we can get the real port"
-        port := self getFullSocketAddress port.
+	"this is a bind to a random port, now we can get the real port"
+	port := self getFullSocketAddress port.
     ].
     ^ true
 
     "
      (Socket domain:#'AF_INET' type:#stream)
-        bindTo:(IPSocketAddress anyHost port:445) reuseAddress:false;
-        yourself.
+	bindTo:(IPSocketAddress anyHost port:445) reuseAddress:false;
+	yourself.
 
      (Socket domain:#'AF_INET' type:#stream)
-        bindTo:139 reuseAddress:false;
-        yourself.
+	bindTo:139 reuseAddress:false;
+	yourself.
 
      (Socket domain:#'AF_INET6' type:#stream)
-        bindTo:nil reuseAddress:false;
-        yourself.
+	bindTo:nil reuseAddress:false;
+	yourself.
 
      (Socket domain:#'AF_INET' type:#stream)
-        bindTo:(IPSocketAddress localHost port:2122) reuseAddress:false;
-        yourself.
+	bindTo:(IPSocketAddress localHost port:2122) reuseAddress:false;
+	yourself.
 
      (Socket domain:#'AF_UNIX' type:#stream)
-        bindTo:nil reuseAddress:false;
-        yourself.
+	bindTo:nil reuseAddress:false;
+	yourself.
     "
 !
 
@@ -2816,7 +2821,7 @@
 	SOCKET socket = SOCKET_FROM_FILE_OBJECT(fp);
 
 	if (@global(FileOpenTrace) == true) {
-	    fprintf(stderr, "close socket [ExternalStream] %"_lx_"\n", socket);
+	    console_fprintf(stderr, "close socket [ExternalStream] %"_lx_"\n", socket);
 	}
 
 	// whether the close() will be successful or not - the handle is invalid now!
@@ -3074,7 +3079,7 @@
     |ok error|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
 
 %{  /* STACK: 32000 */
@@ -3082,234 +3087,234 @@
     OBJ fp = __INST(handle);
 
     if (fp != nil) {
-        SOCKET sock = SOCKET_FROM_FILE_OBJECT(fp);
-        int opt = -1;
-        int level = -1;
-        int usize = -1;
-        int ret;
-        union u {
-            BOOL        u_bool;
-            int         u_int;
-            struct linger  u_linger;
+	SOCKET sock = SOCKET_FROM_FILE_OBJECT(fp);
+	int opt = -1;
+	int level = -1;
+	int usize = -1;
+	int ret;
+	union u {
+	    BOOL        u_bool;
+	    int         u_int;
+	    struct linger  u_linger;
 # ifdef IP_ADD_MEMBERSHIP
-            struct ip_mreq u_ip_mreq;
+	    struct ip_mreq u_ip_mreq;
 # endif
 # if defined(SO_RCVTIMEO) || defined(SO_SNDTIMEO)
-            struct timeval u_tv;
+	    struct timeval u_tv;
 # endif
 
 
-        } u;
+	} u;
 
 # ifdef IP_ADD_MEMBERSHIP
-        if (option == @symbol(IP_DROP_MEMBERSHIP)) {
-            opt = IP_DROP_MEMBERSHIP;
-            goto dropOrAdd;
-        }
-        if (option == @symbol(IP_ADD_MEMBERSHIP)) {
-            /* add membership to a multicast group */
-            opt = IP_ADD_MEMBERSHIP;
+	if (option == @symbol(IP_DROP_MEMBERSHIP)) {
+	    opt = IP_DROP_MEMBERSHIP;
+	    goto dropOrAdd;
+	}
+	if (option == @symbol(IP_ADD_MEMBERSHIP)) {
+	    /* add membership to a multicast group */
+	    opt = IP_ADD_MEMBERSHIP;
 dropOrAdd:
-            level = IPPROTO_IP;
-            usize = sizeof(u.u_ip_mreq);
-            if (__isByteArrayLike(arg1) && __isByteArrayLike(arg2)) {
-                memcpy(&u.u_ip_mreq.imr_multiaddr, __byteArrayVal(arg1), sizeof(u.u_ip_mreq.imr_multiaddr));
-                memcpy(&u.u_ip_mreq.imr_interface, __byteArrayVal(arg2), sizeof(u.u_ip_mreq.imr_interface));
-            }
-            else
-                goto argError;
-        }
+	    level = IPPROTO_IP;
+	    usize = sizeof(u.u_ip_mreq);
+	    if (__isByteArrayLike(arg1) && __isByteArrayLike(arg2)) {
+		memcpy(&u.u_ip_mreq.imr_multiaddr, __byteArrayVal(arg1), sizeof(u.u_ip_mreq.imr_multiaddr));
+		memcpy(&u.u_ip_mreq.imr_interface, __byteArrayVal(arg2), sizeof(u.u_ip_mreq.imr_interface));
+	    }
+	    else
+		goto argError;
+	}
 # endif /* IP_ADD_MEMBERSHIP */
 
 # ifdef SO_BROADCAST
-        if (option == @symbol(SO_BROADCAST)) {
-            /* Enables transmission and receipt of broadcast messages on the socket. */
-            opt = SO_BROADCAST;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_BROADCAST)) {
+	    /* Enables transmission and receipt of broadcast messages on the socket. */
+	    opt = SO_BROADCAST;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_BROADCAST */
 
 # ifdef SO_CONDITIONAL
 #  if 0
-        if (option == @symbol(SO_CONDITIONAL)) {
-            /* Enables sockets to delay the acknowledgment of a connection until after the WSAAccept condition function is called. */
-            opt = SO_CONDITIONAL;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_CONDITIONAL)) {
+	    /* Enables sockets to delay the acknowledgment of a connection until after the WSAAccept condition function is called. */
+	    opt = SO_CONDITIONAL;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 #  endif
 # endif /* SO_CONDITIONAL */
 
 # ifdef SO_DEBUG
-        if (option == @symbol(SO_DEBUG)) {
-            /* Records debugging information. */
-            opt = SO_DEBUG;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_DEBUG)) {
+	    /* Records debugging information. */
+	    opt = SO_DEBUG;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_DEBUG */
 
 # ifdef SO_DONTLINGER
-        if (option == @symbol(SO_DONTLINGER)) {
-            /* Does not block close waiting for unsent data to be sent.
-               Setting this option is equivalent to setting SO_LINGER with l_onoff set to zero. */
-            opt = SO_DONTLINGER;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_DONTLINGER)) {
+	    /* Does not block close waiting for unsent data to be sent.
+	       Setting this option is equivalent to setting SO_LINGER with l_onoff set to zero. */
+	    opt = SO_DONTLINGER;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_DONTLINGER */
 
 # ifdef SO_DONTROUTE
-        if (option == @symbol(SO_DONTROUTE)) {
-            /* Does not route: sends directly to interface.
-               Succeeds but is ignored on AF_INET sockets;
-               fails on AF_INET6 sockets with WSAENOPROTOOPT.
-               Not supported on ATM sockets (results in an error). */
-            opt = SO_DONTROUTE;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_DONTROUTE)) {
+	    /* Does not route: sends directly to interface.
+	       Succeeds but is ignored on AF_INET sockets;
+	       fails on AF_INET6 sockets with WSAENOPROTOOPT.
+	       Not supported on ATM sockets (results in an error). */
+	    opt = SO_DONTROUTE;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_DONTROUTE */
 
 #if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
-        if (option == @symbol(TCP_NODELAY)) {
-            /* enable/disable TCP_NODELAY (i.e. disable/enable the Nagle algorithm) */
-            opt = TCP_NODELAY;
-            level = IPPROTO_TCP;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(TCP_NODELAY)) {
+	    /* enable/disable TCP_NODELAY (i.e. disable/enable the Nagle algorithm) */
+	    opt = TCP_NODELAY;
+	    level = IPPROTO_TCP;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* TCP_NODELAY */
 
 # ifdef SO_KEEPALIVE
-        if (option == @symbol(SO_KEEPALIVE)) {
-            /* Sends keep-alives. Not supported on ATM sockets (results in an error). */
-            opt = SO_KEEPALIVE;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_KEEPALIVE)) {
+	    /* Sends keep-alives. Not supported on ATM sockets (results in an error). */
+	    opt = SO_KEEPALIVE;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_KEEPALIVE */
 
 # ifdef SO_LINGER
-        if (option == @symbol(SO_LINGER)) {
-            /* Lingers on close if unsent data is present. */
-            opt = SO_LINGER;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_linger);
-            if (arg1 == true) u.u_linger.l_onoff = TRUE;
-            else if (arg1 == false) u.u_linger.l_onoff = FALSE;
-            else goto argError;
-            if (arg2 == nil) u.u_linger.l_linger = 0;
-            else if (__isSmallInteger(arg2))u.u_linger.l_linger = __intVal(arg2);
-            else goto argError;
-            DBGPRINTF(("SOCKET: SO_LINGER %d %d\n", u.u_linger.l_onoff, u.u_linger.l_linger));
-        }
+	if (option == @symbol(SO_LINGER)) {
+	    /* Lingers on close if unsent data is present. */
+	    opt = SO_LINGER;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_linger);
+	    if (arg1 == true) u.u_linger.l_onoff = TRUE;
+	    else if (arg1 == false) u.u_linger.l_onoff = FALSE;
+	    else goto argError;
+	    if (arg2 == nil) u.u_linger.l_linger = 0;
+	    else if (__isSmallInteger(arg2))u.u_linger.l_linger = __intVal(arg2);
+	    else goto argError;
+	    DBGPRINTF(("SOCKET: SO_LINGER %d %d\n", u.u_linger.l_onoff, u.u_linger.l_linger));
+	}
 # endif /* SO_LINGER */
 
 # ifdef SO_OOBINLINE
-        if (option == @symbol(SO_OOBINLINE)) {
-            /* Receives OOB data in the normal data stream. */
-            opt = SO_OOBINLINE;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_OOBINLINE)) {
+	    /* Receives OOB data in the normal data stream. */
+	    opt = SO_OOBINLINE;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_OOBINLINE */
 
 # ifdef SO_RCVBUF
-        if (option == @symbol(SO_RCVBUF)) {
-            /* Specifies the total per-socket buffer space reserved for receives.
-               This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. */
-            opt = SO_RCVBUF;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_int);
-            if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
-            else goto argError;
-        }
+	if (option == @symbol(SO_RCVBUF)) {
+	    /* Specifies the total per-socket buffer space reserved for receives.
+	       This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. */
+	    opt = SO_RCVBUF;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_int);
+	    if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
+	    else goto argError;
+	}
 # endif /* SO_RCVBUF */
 
 # ifdef SO_SNDBUF
-        if (option == @symbol(SO_SNDBUF)) {
-            /* Specifies the total per-socket buffer space reserved for sends.
-               This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. */
-            opt = SO_SNDBUF;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_int);
-            if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
-            else goto argError;
-        }
+	if (option == @symbol(SO_SNDBUF)) {
+	    /* Specifies the total per-socket buffer space reserved for sends.
+	       This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. */
+	    opt = SO_SNDBUF;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_int);
+	    if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
+	    else goto argError;
+	}
 # endif /* SO_SNDBUF */
 
 # ifdef SO_REUSEADDR
-        if (option == @symbol(SO_REUSEADDR)) {
-            /* Allows the socket to be bound to an address that is already in use.  */
-            opt = SO_REUSEADDR;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_REUSEADDR)) {
+	    /* Allows the socket to be bound to an address that is already in use.  */
+	    opt = SO_REUSEADDR;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_OOBINLINE */
 
 # ifdef SO_EXCLUSIVEADDRUSE
-        if (option == @symbol(SO_EXCLUSIVEADDRUSE)) {
-            /* Enables a socket to be bound for exclusive access.
-               Does not require administrative privilege.  */
-            opt = SO_EXCLUSIVEADDRUSE;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_EXCLUSIVEADDRUSE)) {
+	    /* Enables a socket to be bound for exclusive access.
+	       Does not require administrative privilege.  */
+	    opt = SO_EXCLUSIVEADDRUSE;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_OOBINLINE */
 
 # ifdef SO_RCVTIMEO
-        if ((option == @symbol(SO_RCVTIMEO))
-         && __isSmallInteger(arg1)
-         && __isSmallInteger(arg2)) {
-            opt = SO_RCVTIMEO;
-            level = SOL_SOCKET;
-            u.u_tv.tv_sec = __intVal(arg1);
-            u.u_tv.tv_usec = __intVal(arg2);
-            usize = sizeof(u.u_tv);
-        }
+	if ((option == @symbol(SO_RCVTIMEO))
+	 && __isSmallInteger(arg1)
+	 && __isSmallInteger(arg2)) {
+	    opt = SO_RCVTIMEO;
+	    level = SOL_SOCKET;
+	    u.u_tv.tv_sec = __intVal(arg1);
+	    u.u_tv.tv_usec = __intVal(arg2);
+	    usize = sizeof(u.u_tv);
+	}
 # endif /* SO_RCVTIMEO */
 
 # ifdef SO_SNDTIMEO
-        if ((option == @symbol(SO_SNDTIMEO))
-         && __isSmallInteger(arg1)
-         && __isSmallInteger(arg2)) {
-            opt = SO_SNDTIMEO;
-            level = SOL_SOCKET;
-            u.u_tv.tv_sec = __intVal(arg1);
-            u.u_tv.tv_usec = __intVal(arg2);
-            usize = sizeof(u.u_tv);
-        }
+	if ((option == @symbol(SO_SNDTIMEO))
+	 && __isSmallInteger(arg1)
+	 && __isSmallInteger(arg2)) {
+	    opt = SO_SNDTIMEO;
+	    level = SOL_SOCKET;
+	    u.u_tv.tv_sec = __intVal(arg1);
+	    u.u_tv.tv_usec = __intVal(arg2);
+	    usize = sizeof(u.u_tv);
+	}
 # endif /* SO_SNDTIMEO */
 
 # if !defined(IPV6_V6ONLY) && defined(WIN32)
@@ -3318,34 +3323,30 @@
 # endif
 
 # if defined(IPV6_V6ONLY)
-        if (option == @symbol(IPV6_V6ONLY)) {
-            opt = IPV6_V6ONLY;
-            level = IPPROTO_IPV6;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
+	if (option == @symbol(IPV6_V6ONLY)) {
+	    opt = IPV6_V6ONLY;
+	    level = IPPROTO_IPV6;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
 #  ifdef WIN32
-#   if defined(__MINGW__) || defined(__MINGW64__)
-            __win32_printf("%d %d %d %d\n", level, opt, usize, u.u_int);
-#   else
-	        _win32_printf("%d %d %d %d\n", level, opt, usize, u.u_int);
-#   endif            
+	    console_fprintf(stderr, "%d %d %d %d\n", level, opt, usize, u.u_int);
 #  endif
-        }
+	}
 # endif /* IPV6_V6ONLY */
 
-        if (usize == -1) goto argError;
-
-        ok = (setsockopt(sock, level, opt, (char *)&u, usize) >= 0) ? true : false;
-        # ifdef WIN32
-        if (ok == false) {
+	if (usize == -1) goto argError;
+
+	ok = (setsockopt(sock, level, opt, (char *)&u, usize) >= 0) ? true : false;
+	# ifdef WIN32
+	if (ok == false) {
 #  ifdef WIN32
-            error = __mkSmallInteger(WSAGetLastError());
+	    error = __mkSmallInteger(WSAGetLastError());
 #  else
-            error = __mkSmallInteger(errno);
+	    error = __mkSmallInteger(errno);
 #  endif
-        }
+	}
 # endif
 
     }
@@ -3353,10 +3354,10 @@
 #endif /* NO_SOCKET */
 %}.
     ok isNil ifTrue:[
-        self primitiveFailed
+	self primitiveFailed
     ].
     ok ifFalse:[
-        '++++ Info: Socket>>#setSocketOption:... failed. error: ' infoPrint. error infoPrintCR.
+	'++++ Info: Socket>>#setSocketOption:... failed. error: ' infoPrint. error infoPrintCR.
     ].
 !
 
@@ -4158,8 +4159,8 @@
      server application."
 
     (self readWaitWithTimeout:timeoutSecondsOrNil) ifTrue:[
-        "a timeout occurred - no connection within timeout"
-        ^ nil
+	"a timeout occurred - no connection within timeout"
+	^ nil
     ].
     ^ self accept.
 ! !
@@ -4167,10 +4168,10 @@
 !Socket class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic2/Socket.st,v 1.314 2015-05-08 01:07:22 cg Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic2/Socket.st,v 1.314 2015-05-08 01:07:22 cg Exp $'
+    ^ '$Header$'
 ! !
 
--- a/bc.mak	Tue Jul 21 06:55:26 2015 +0200
+++ b/bc.mak	Mon Aug 10 08:29:10 2015 +0100
@@ -36,11 +36,10 @@
 MODULE_PATH=libbasic2
 RESFILES=libbasic2.$(RES)
 
-
 !ifdef USEBC
-WS2_32_LIB=ws2_32.lib
+WINSOCK_LIB=ws2_32.lib
 !else
-WS2_32_LIB=
+WINSOCK_LIB=
 !endif
 
 
@@ -48,7 +47,7 @@
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) $(COMMONSYMBOLS) -varPrefix=$(LIBNAME)
-LOCALLIBS=$(ZLIB_DIR)\$(ZLIB) $(WS2_32_LIB)
+LOCALLIBS=$(ZLIB_DIR)\$(ZLIB) $(WINSOCK_LIB)
 
 OBJS= $(COMMON_OBJS) $(WIN32_OBJS)
 
--- a/stx_libbasic2.st	Tue Jul 21 06:55:26 2015 +0200
+++ b/stx_libbasic2.st	Mon Aug 10 08:29:10 2015 +0100
@@ -121,9 +121,9 @@
 
     ^'
 !!ifdef USEBC
-WS2_32_LIB=ws2_32.lib
+WINSOCK_LIB=ws2_32.lib
 !!else
-WS2_32_LIB=ws2_32.lib
+WINSOCK_LIB=
 !!endif
 '
 
@@ -132,7 +132,7 @@
 
 additionalLinkLibraries_bc_dot_mak
 "/    ^ '$(ZLIB) $(BZ2LIB)'
-    ^ '$(ZLIB_DIR)\$(ZLIB) $(WS2_32_LIB)'
+    ^ '$(ZLIB_DIR)\$(ZLIB) $(WINSOCK_LIB)'
 
     "Modified: / 12-05-2015 / 19:00:25 / jv"
 !