Browse Source

Linux Support: change Torque2D.makefile to Makefile to simplify compiling. Fix expandPath to avoid undefined behavior with vsnprintf. Remove unnecessary X11 keymapping. Fix string functions for UNIX platform to use the buffer's size.

Cameron Porter 11 years ago
parent
commit
281a65f23b

+ 3 - 3
engine/compilers/Make/Torque2D.makefile → engine/compilers/Make/Makefile

@@ -9,9 +9,9 @@ APP_TARGETS_DEBUG :=
 all: debug release
 
 clean:
-	rm -rf Debug
-	rm -rf Release
-	rm -rf lib
+	rm -rfv Debug
+	rm -rfv Release
+	rm -rfv lib
 
 .PHONY: all debug release clean
 

+ 3 - 2
engine/source/console/console.cc

@@ -1519,7 +1519,8 @@ bool expandPath( char* pDstPath, U32 size, const char* pSrcPath, const char* pWo
         }
            
         // Format the output path.
-        dSprintf( pathBuffer, sizeof(pathBuffer), "%s/%s", pathBuffer, pSrc );
+        dStrcat(pathBuffer, "/");
+        dStrcat(pathBuffer, pSrc);
 
         // Are we ensuring the trailing slash?
         if ( ensureTrailingSlash )
@@ -1709,4 +1710,4 @@ bool stripRepeatSlashes( char* pDstPath, const char* pSrcPath, S32 dstSize )
 }
 
 } // end of Console namespace
-
+

+ 2 - 0
engine/source/platform/platformFileIO.h

@@ -26,8 +26,10 @@
 #include "platform/platform.h"
 #endif
 
+#ifdef TORQUE_OS_LINUX
 // Need to remove this once Xlib stops leaking
 #undef Status
+#endif
 
 class File
 {

+ 0 - 5
engine/source/platformX86UNIX/x86UNIXFont.h

@@ -27,11 +27,6 @@
 
 #ifndef _X86UNIXFONT_H_
 #define _X86UNIXFONT_H_
-// Needed by createFont
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xos.h>
-#include <X11/Xatom.h>
 
 class x86UNIXFont : public PlatformFont
 {

+ 0 - 21
engine/source/platformX86UNIX/x86UNIXInput.cc

@@ -20,8 +20,6 @@
 // IN THE SOFTWARE.
 //-----------------------------------------------------------------------------
 
-
-
 #include "platformX86UNIX/platformX86UNIX.h"
 #include "platform/platformInput.h"
 #include "platform/platformVideo.h"
@@ -34,7 +32,6 @@
 
 #include <X11/Xlib.h>
 #include <X11/Xatom.h>
-#include <X11/keysym.h>
 
 #include <SDL/SDL.h>
 
@@ -297,24 +294,6 @@ InputManager* Input::getManager()
    return smManager;
 }
 
-#ifdef LOG_INPUT
-//------------------------------------------------------------------------------
-void Input::log( const char* format, ... )
-{
-   if ( gInputLog == -1)
-      return;
-   
-   va_list argptr;
-   va_start( argptr, format );
-
-   const int BufSize = 4096;
-   char buffer[BufSize];
-   dVsprintf( buffer, BufSize, format, argptr );
-   x86UNIXWrite(gInputLog, buffer, dStrlen( buffer ));
-   va_end( argptr );
-}
-#endif // LOG_INPUT
-
 //------------------------------------------------------------------------------
 void NotifySelectionEvent(XEvent& event)
 {

+ 63 - 130
engine/source/platformX86UNIX/x86UNIXInputManager.cc

@@ -28,11 +28,6 @@
 #include "platformX86UNIX/x86UNIXInputManager.h"
 #include "math/mMathFn.h"
 
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xatom.h>
-#include <X11/keysym.h>
-
 #include <SDL/SDL.h>
 
 // ascii table
@@ -44,7 +39,7 @@ static U8 SDLtoTKeyMap[SDLtoTKeyMapSize];
 static bool keyMapsInitialized = false;
 
 // helper functions
-static void MapKey(Uint16 SDLkey, U8 tkey, KeySym xkeysym);
+static void MapKey(Uint16 SDLkey, U8 tkey);
 static void InitKeyMaps();
 static inline U8 TranslateSDLKeytoTKey(SDLKey keysym);
 
@@ -65,11 +60,8 @@ extern "C" Uint16 X11_KeyToUnicode( SDLKey keysym, SDLMod modifiers );
 //==============================================================================
 // Static helper functions
 //==============================================================================
-static void MapKey(Uint16 SDLkey, U8 tkey, KeySym xkeysym)
-{ 
-   DisplayPtrManager xdisplay;
-   Display* display = xdisplay.getDisplayPointer();
-
+static void MapKey(Uint16 SDLkey, U8 tkey)
+{
    SDLtoTKeyMap[SDLkey] = tkey; 
 
    Uint16 key = 0;
@@ -86,56 +78,6 @@ static void MapKey(Uint16 SDLkey, U8 tkey, KeySym xkeysym)
    mod = KMOD_MODE;
    key = X11_KeyToUnicode( skey, mod );
    AsciiTable[tkey].goofy.ascii = key;
-
-#if 0
-   if (xkeysym == 0)
-      return;
-
-   XKeyPressedEvent fooKey;
-   const int keybufSize = 256;
-   char keybuf[keybufSize];
-
-   // find the x keycode for the keysym
-   KeyCode xkeycode = XKeysymToKeycode(
-      display, xkeysym);
-
-//   Display *dpy = XOpenDisplay(NULL);
-//    KeyCode xkeycode = XKeysymToKeycode(
-//       dpy, xkeysym);
-
-   if (!xkeycode)
-      return;     
-
-   // create an event with the keycode
-   dMemset(&fooKey, 0, sizeof(fooKey));
-   fooKey.type = KeyPress;
-   fooKey.display = display;
-   fooKey.window = DefaultRootWindow(display);
-   fooKey.time = CurrentTime;
-   fooKey.keycode = xkeycode;
-
-   // translate the event with no modifiers (yields lowercase)
-   KeySym dummyKeySym;
-   int numChars = XLookupString(
-      &fooKey, keybuf, keybufSize, &dummyKeySym, NULL);
-   if (numChars)
-   {
-      //Con::printf("assigning lowercase string %c", *keybuf);
-      // ignore everything but first char
-      AsciiTable[tkey].lower.ascii = *keybuf;
-      AsciiTable[tkey].goofy.ascii = *keybuf;
-   }
-         
-   // translate the event with shift modifier (yields uppercase)
-   fooKey.state |= ShiftMask;
-   numChars = XLookupString(&fooKey, keybuf, keybufSize, &dummyKeySym, NULL);
-   if (numChars)
-   {
-      //Con::printf("assigning uppercase string %c", *keybuf);
-      // ignore everything but first char
-      AsciiTable[tkey].upper.ascii = *keybuf;
-   }
-#endif
 }
 
 //------------------------------------------------------------------------------
@@ -146,93 +88,84 @@ void InitKeyMaps()
    
    // set up the X to Torque key map
    // stuff
-   MapKey(SDLK_BACKSPACE, KEY_BACKSPACE, XK_BackSpace);
-   MapKey(SDLK_TAB, KEY_TAB, XK_Tab);
-   MapKey(SDLK_RETURN, KEY_RETURN, XK_Return);
-   MapKey(SDLK_PAUSE, KEY_PAUSE, XK_Pause);
-   MapKey(SDLK_CAPSLOCK, KEY_CAPSLOCK, XK_Caps_Lock);
-   MapKey(SDLK_ESCAPE, KEY_ESCAPE, XK_Escape);
+   MapKey(SDLK_BACKSPACE, KEY_BACKSPACE);
+   MapKey(SDLK_TAB, KEY_TAB);
+   MapKey(SDLK_RETURN, KEY_RETURN);
+   MapKey(SDLK_PAUSE, KEY_PAUSE);
+   MapKey(SDLK_CAPSLOCK, KEY_CAPSLOCK);
+   MapKey(SDLK_ESCAPE, KEY_ESCAPE);
 
    // more stuff
-   MapKey(SDLK_SPACE, KEY_SPACE, XK_space);
-   MapKey(SDLK_PAGEDOWN, KEY_PAGE_DOWN, XK_Page_Down);
-   MapKey(SDLK_PAGEUP, KEY_PAGE_UP, XK_Page_Up);
-   MapKey(SDLK_END, KEY_END, XK_End);
-   MapKey(SDLK_HOME, KEY_HOME, XK_Home);
-   MapKey(SDLK_LEFT, KEY_LEFT, XK_Left);
-   MapKey(SDLK_UP, KEY_UP, XK_Up);
-   MapKey(SDLK_RIGHT, KEY_RIGHT, XK_Right);
-   MapKey(SDLK_DOWN, KEY_DOWN, XK_Down);
-   MapKey(SDLK_PRINT, KEY_PRINT, XK_Print);
-   MapKey(SDLK_INSERT, KEY_INSERT, XK_Insert);
-   MapKey(SDLK_DELETE, KEY_DELETE, XK_Delete);
+   MapKey(SDLK_SPACE, KEY_SPACE);
+   MapKey(SDLK_PAGEDOWN, KEY_PAGE_DOWN);
+   MapKey(SDLK_PAGEUP, KEY_PAGE_UP);
+   MapKey(SDLK_END, KEY_END);
+   MapKey(SDLK_HOME, KEY_HOME);
+   MapKey(SDLK_LEFT, KEY_LEFT);
+   MapKey(SDLK_UP, KEY_UP);
+   MapKey(SDLK_RIGHT, KEY_RIGHT);
+   MapKey(SDLK_DOWN, KEY_DOWN);
+   MapKey(SDLK_PRINT, KEY_PRINT);
+   MapKey(SDLK_INSERT, KEY_INSERT);
+   MapKey(SDLK_DELETE, KEY_DELETE);
    
    S32 keysym;
    S32 tkeycode;
-   KeySym xkey;
    // main numeric keys
-   for (keysym = SDLK_0, tkeycode = KEY_0, xkey = XK_0;
-        keysym <= SDLK_9; 
-        ++keysym, ++tkeycode, ++xkey)
-      MapKey(static_cast<SDLKey>(keysym), tkeycode, xkey);
+   for (keysym = SDLK_0, tkeycode = KEY_0; keysym <= SDLK_9; ++keysym, ++tkeycode)
+      MapKey(static_cast<SDLKey>(keysym), tkeycode);
    
    // lowercase letters
-   for (keysym = SDLK_a, tkeycode = KEY_A, xkey = XK_a; 
-        keysym <= SDLK_z; 
-        ++keysym, ++tkeycode, ++xkey)
-      MapKey(static_cast<SDLKey>(keysym), tkeycode, xkey);
+   for (keysym = SDLK_a, tkeycode = KEY_A; keysym <= SDLK_z; ++keysym, ++tkeycode)
+      MapKey(static_cast<SDLKey>(keysym), tkeycode);
 
    // various punctuation
-   MapKey('|', KEY_TILDE, XK_grave);
-   MapKey(SDLK_BACKQUOTE, KEY_TILDE, XK_grave);
-   MapKey(SDLK_MINUS, KEY_MINUS, XK_minus);
-   MapKey(SDLK_EQUALS, KEY_EQUALS, XK_equal);
-   MapKey(SDLK_LEFTBRACKET, KEY_LBRACKET, XK_bracketleft);
-   MapKey('{', KEY_LBRACKET, XK_bracketleft);
-   MapKey(SDLK_RIGHTBRACKET, KEY_RBRACKET, XK_bracketright);
-   MapKey('}', KEY_RBRACKET, XK_bracketright);
-   MapKey(SDLK_BACKSLASH, KEY_BACKSLASH, XK_backslash);
-   MapKey(SDLK_SEMICOLON, KEY_SEMICOLON, XK_semicolon);
-   MapKey(SDLK_QUOTE, KEY_APOSTROPHE, XK_apostrophe);
-   MapKey(SDLK_COMMA, KEY_COMMA, XK_comma);
-   MapKey(SDLK_PERIOD, KEY_PERIOD, XK_period);
-   MapKey(SDLK_SLASH, KEY_SLASH, XK_slash); 
+   MapKey('|', KEY_TILDE);
+   MapKey(SDLK_BACKQUOTE, KEY_TILDE);
+   MapKey(SDLK_MINUS, KEY_MINUS);
+   MapKey(SDLK_EQUALS, KEY_EQUALS);
+   MapKey(SDLK_LEFTBRACKET, KEY_LBRACKET);
+   MapKey('{', KEY_LBRACKET);
+   MapKey(SDLK_RIGHTBRACKET, KEY_RBRACKET);
+   MapKey('}', KEY_RBRACKET);
+   MapKey(SDLK_BACKSLASH, KEY_BACKSLASH);
+   MapKey(SDLK_SEMICOLON, KEY_SEMICOLON);
+   MapKey(SDLK_QUOTE, KEY_APOSTROPHE);
+   MapKey(SDLK_COMMA, KEY_COMMA);
+   MapKey(SDLK_PERIOD, KEY_PERIOD);
+   MapKey(SDLK_SLASH, KEY_SLASH); 
 
    // numpad numbers
-   for (keysym = SDLK_KP0, tkeycode = KEY_NUMPAD0, xkey = XK_KP_0; 
-        keysym <= SDLK_KP9; 
-        ++keysym, ++tkeycode, ++xkey)
-      MapKey(static_cast<SDLKey>(keysym), tkeycode, xkey);
+   for (keysym = SDLK_KP0, tkeycode = KEY_NUMPAD0; keysym <= SDLK_KP9; ++keysym, ++tkeycode)
+      MapKey(static_cast<SDLKey>(keysym), tkeycode);
 
    // other numpad stuff
-   MapKey(SDLK_KP_MULTIPLY, KEY_MULTIPLY, XK_KP_Multiply);
-   MapKey(SDLK_KP_PLUS, KEY_ADD, XK_KP_Add);
-   MapKey(SDLK_KP_EQUALS, KEY_SEPARATOR, XK_KP_Separator);
-   MapKey(SDLK_KP_MINUS, KEY_SUBTRACT, XK_KP_Subtract);
-   MapKey(SDLK_KP_PERIOD, KEY_DECIMAL, XK_KP_Decimal);
-   MapKey(SDLK_KP_DIVIDE, KEY_DIVIDE, XK_KP_Divide);
-   MapKey(SDLK_KP_ENTER, KEY_NUMPADENTER, XK_KP_Enter);
+   MapKey(SDLK_KP_MULTIPLY, KEY_MULTIPLY);
+   MapKey(SDLK_KP_PLUS, KEY_ADD);
+   MapKey(SDLK_KP_EQUALS, KEY_SEPARATOR);
+   MapKey(SDLK_KP_MINUS, KEY_SUBTRACT);
+   MapKey(SDLK_KP_PERIOD, KEY_DECIMAL);
+   MapKey(SDLK_KP_DIVIDE, KEY_DIVIDE);
+   MapKey(SDLK_KP_ENTER, KEY_NUMPADENTER);
 
    // F keys
-   for (keysym = SDLK_F1, tkeycode = KEY_F1, xkey = XK_F1; 
-        keysym <= SDLK_F15; 
-        ++keysym, ++tkeycode, ++xkey)
-      MapKey(static_cast<SDLKey>(keysym), tkeycode, xkey);
+   for (keysym = SDLK_F1, tkeycode = KEY_F1; keysym <= SDLK_F15; ++keysym, ++tkeycode)
+      MapKey(static_cast<SDLKey>(keysym), tkeycode);
 
    // various modifiers
-   MapKey(SDLK_NUMLOCK, KEY_NUMLOCK, XK_Num_Lock);
-   MapKey(SDLK_SCROLLOCK, KEY_SCROLLLOCK, XK_Scroll_Lock);
-   MapKey(SDLK_LCTRL, KEY_LCONTROL, XK_Control_L);
-   MapKey(SDLK_RCTRL, KEY_RCONTROL, XK_Control_R);
-   MapKey(SDLK_LALT, KEY_LALT, XK_Alt_L);
-   MapKey(SDLK_RALT, KEY_RALT, XK_Alt_R);
-   MapKey(313, KEY_RALT, XK_Alt_R);   
-   MapKey(SDLK_LSHIFT, KEY_LSHIFT, XK_Shift_L);
-   MapKey(SDLK_RSHIFT, KEY_RSHIFT, XK_Shift_R);
-   MapKey(SDLK_LSUPER, KEY_WIN_LWINDOW, 0);
-   MapKey(SDLK_RSUPER, KEY_WIN_RWINDOW, 0);
-   MapKey(SDLK_MENU, KEY_WIN_APPS, 0);
-   MapKey(SDLK_MODE, KEY_OEM_102, 0);
+   MapKey(SDLK_NUMLOCK, KEY_NUMLOCK);
+   MapKey(SDLK_SCROLLOCK, KEY_SCROLLLOCK);
+   MapKey(SDLK_LCTRL, KEY_LCONTROL);
+   MapKey(SDLK_RCTRL, KEY_RCONTROL);
+   MapKey(SDLK_LALT, KEY_LALT);
+   MapKey(SDLK_RALT, KEY_RALT);
+   MapKey(313, KEY_RALT);   
+   MapKey(SDLK_LSHIFT, KEY_LSHIFT);
+   MapKey(SDLK_RSHIFT, KEY_RSHIFT);
+   MapKey(SDLK_LSUPER, KEY_WIN_LWINDOW);
+   MapKey(SDLK_RSUPER, KEY_WIN_RWINDOW);
+   MapKey(SDLK_MENU, KEY_WIN_APPS);
+   MapKey(SDLK_MODE, KEY_OEM_102);
 
    keyMapsInitialized = true;
 };

+ 0 - 2
engine/source/platformX86UNIX/x86UNIXInputManager.h

@@ -45,8 +45,6 @@ struct AsciiData
    KeyData goofy;
 };
 
-typedef struct _SDL_Joystick;
-
 struct JoystickAxisInfo
 {
       S32 type;

+ 1 - 11
engine/source/platformX86UNIX/x86UNIXInput_ScriptBinding.h

@@ -27,7 +27,6 @@
 */
 ConsoleFunctionWithDocs( isJoystickDetected, ConsoleBool, 1, 1, () )
 {
-   argc; argv;
    UInputManager* manager = dynamic_cast<UInputManager*>(Input::getManager());
    if (manager)
       return manager->joystickDetected();
@@ -43,18 +42,9 @@ ConsoleFunctionWithDocs( isJoystickDetected, ConsoleBool, 1, 1, () )
 */
 ConsoleFunctionWithDocs( getJoystickAxes, ConsoleString, 2, 2, (instance) )
 {
-   argc; argv;
    UInputManager* manager = dynamic_cast<UInputManager*>(Input::getManager());
    if (manager)
       return manager->getJoystickAxesString(dAtoi(argv[1]));
    else
       return "";
-}
-
-#ifdef LOG_INPUT
-ConsoleFunction( inputLog, ConsoleVoid, 2, 2, "inputLog( string )" )
-{
-   argc;
-   Input::log( "%s\n", argv[1] );
-}
-#endif //LOG_INPUT
+}

+ 6 - 9
engine/source/platformX86UNIX/x86UNIXStrings.cc

@@ -352,6 +352,7 @@ void dPrintf(const char *format, ...)
    va_list args;
    va_start(args, format);
    vprintf(format, args);
+   va_end(args);
 }   
 
 S32 dVprintf(const char *format, void *arglist)
@@ -365,23 +366,19 @@ S32 dSprintf(char *buffer, U32 bufferSize, const char *format, ...)
    va_list args;
    va_start(args, format);
 
-   S32 len = vsprintf(buffer, format, args);
+   S32 len = vsnprintf(buffer, bufferSize, format, args);
 
-   // Sanity!
-   AssertFatal(len <= bufferSize, "dSprintf - String format exceeded buffer size.  This will cause corruption.");
+   va_end(args);
 
-   return (len);
+   return len;
 }   
 
 
 S32 dVsprintf(char *buffer, U32 bufferSize, const char *format, va_list arglist)
 {
-   S32 len = vsprintf(buffer, format, arglist);
+   S32 len = vsnprintf(buffer, bufferSize, format, arglist);
 
-   // Sanity!
-   AssertFatal(len <= bufferSize, "dSprintf - String format exceeded buffer size.  This will cause corruption.");
-
-   return (len);
+   return len;
 }
 
 S32 dStrrev(char *str)

+ 1 - 4
engine/source/platformX86UNIX/x86UNIXWindow.cc

@@ -50,9 +50,6 @@
 #include <time.h> // nanosleep
 
 #ifndef DEDICATED
-#include <X11/Xlib.h>
-#include <X11/Xos.h>
-
 #include <SDL/SDL.h>
 #include <SDL/SDL_syswm.h>
 #include <SDL/SDL_version.h>
@@ -790,7 +787,7 @@ bool Platform::openWebBrowser( const char* webAddress )
    {
       // child
       char* argv[3];
-      argv[0] = "";
+      argv[0] = 0;
       argv[1] = const_cast<char*>(webAddress);
       argv[2] = 0;