Patch enabling lldb command line driver to run on windows.
CHANGES:
- Thread locking switched from pthreads to C++11 standard library.
- Abstracted platform specific header includes into 'platform.h'.
- Create editline emulator for windows.
- Emulated various platform dependant functions on windows.
TODO:
- User input currently handled by gets_s(), work started on better handler:
    see _WIP_INPUT_METHOD define blocks in 'ELWrapper.cpp'.
    Aim is to handle 'tab' auto completion on windows.
- Tidy up 'getopt.inc' from lldbHostCommon to serve as LLDB Drivers getopt windows implementation.

llvm-svn: 192714
diff --git a/lldb/tools/driver/Platform.cpp b/lldb/tools/driver/Platform.cpp
new file mode 100644
index 0000000..5b5286e
--- /dev/null
+++ b/lldb/tools/driver/Platform.cpp
@@ -0,0 +1,111 @@
+//===-- Platform.cpp --------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// this file is only relevant for Visual C++
+#if defined( _MSC_VER )
+
+#include <process.h>
+#include <assert.h>
+
+#include "Platform.h"
+
+// index one of the variable arguments
+//  presuming "(EditLine *el, ..." is first in the argument list
+#define GETARG( Y, X ) ( (void* ) *( ( (int**) &(Y) ) + (X) ) )
+
+// the control handler or SIGINT handler
+static sighandler_t _ctrlHandler = NULL;
+
+// the default console control handler
+BOOL
+WINAPI CtrlHandler (DWORD ctrlType)
+{
+    if ( _ctrlHandler != NULL )
+    {
+        _ctrlHandler( 0 );
+        return TRUE;
+    }
+    return FALSE;
+}
+
+int
+ioctl (int d, int request, ...)
+{
+    switch ( request )
+    {
+    // request the console windows size
+    case ( TIOCGWINSZ ):
+        {
+            // locate the window size structure on stack
+            winsize *ws = (winsize*) GETARG( d, 2 );
+            // get screen buffer information
+            CONSOLE_SCREEN_BUFFER_INFO info;
+            GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), &info );
+            // fill in the columns
+            ws->ws_col = info.dwMaximumWindowSize.X;
+            //
+            return 0;
+        }
+        break;
+    default:
+        assert( !"Not implemented!" );
+    }
+    return -1;
+}
+
+int
+kill (pid_t pid, int sig)
+{
+    // is the app trying to kill itself
+    if ( pid == getpid( ) )
+        exit( sig );
+    //
+    assert( !"Not implemented!" );
+    return -1;
+}
+
+int
+tcsetattr (int fd, int optional_actions, const struct termios *termios_p)
+{
+    assert( !"Not implemented!" );
+    return -1;
+}
+
+int
+tcgetattr (int fildes, struct termios *termios_p)
+{
+//  assert( !"Not implemented!" );
+    // error return value (0=success)
+    return -1;
+}
+
+sighandler_t
+signal (int sig, sighandler_t sigFunc)
+{
+    switch ( sig )
+    {
+    case ( SIGINT ):
+        {
+            _ctrlHandler = sigFunc;
+            SetConsoleCtrlHandler( CtrlHandler, TRUE );
+        }
+        break;
+    case ( SIGPIPE  ):
+    case ( SIGWINCH ):
+    case ( SIGTSTP  ):
+    case ( SIGCONT  ):
+        // ignore these for now
+        break;
+    default:
+        assert( !"Not implemented!" );
+    }
+    return 0;
+}
+
+#endif
\ No newline at end of file