Ver Fonte

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 há 11 anos atrás
pai
commit
281a65f23b

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

@@ -9,9 +9,9 @@ APP_TARGETS_DEBUG :=
 all: debug release
 all: debug release
 
 
 clean:
 clean:
-	rm -rf Debug
-	rm -rf Release
-	rm -rf lib
+	rm -rfv Debug
+	rm -rfv Release
+	rm -rfv lib
 
 
 .PHONY: all debug release clean
 .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.
         // Format the output path.
-        dSprintf( pathBuffer, sizeof(pathBuffer), "%s/%s", pathBuffer, pSrc );
+        dStrcat(pathBuffer, "/");
+        dStrcat(pathBuffer, pSrc);
 
 
         // Are we ensuring the trailing slash?
         // Are we ensuring the trailing slash?
         if ( ensureTrailingSlash )
         if ( ensureTrailingSlash )
@@ -1709,4 +1710,4 @@ bool stripRepeatSlashes( char* pDstPath, const char* pSrcPath, S32 dstSize )
 }
 }
 
 
 } // end of Console namespace
 } // end of Console namespace
-
+

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

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

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

@@ -27,11 +27,6 @@
 
 
 #ifndef _X86UNIXFONT_H_
 #ifndef _X86UNIXFONT_H_
 #define _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
 class x86UNIXFont : public PlatformFont
 {
 {

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

@@ -20,8 +20,6 @@
 // IN THE SOFTWARE.
 // IN THE SOFTWARE.
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-
-
 #include "platformX86UNIX/platformX86UNIX.h"
 #include "platformX86UNIX/platformX86UNIX.h"
 #include "platform/platformInput.h"
 #include "platform/platformInput.h"
 #include "platform/platformVideo.h"
 #include "platform/platformVideo.h"
@@ -34,7 +32,6 @@
 
 
 #include <X11/Xlib.h>
 #include <X11/Xlib.h>
 #include <X11/Xatom.h>
 #include <X11/Xatom.h>
-#include <X11/keysym.h>
 
 
 #include <SDL/SDL.h>
 #include <SDL/SDL.h>
 
 
@@ -297,24 +294,6 @@ InputManager* Input::getManager()
    return smManager;
    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)
 void NotifySelectionEvent(XEvent& event)
 {
 {

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

@@ -28,11 +28,6 @@
 #include "platformX86UNIX/x86UNIXInputManager.h"
 #include "platformX86UNIX/x86UNIXInputManager.h"
 #include "math/mMathFn.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>
 #include <SDL/SDL.h>
 
 
 // ascii table
 // ascii table
@@ -44,7 +39,7 @@ static U8 SDLtoTKeyMap[SDLtoTKeyMapSize];
 static bool keyMapsInitialized = false;
 static bool keyMapsInitialized = false;
 
 
 // helper functions
 // helper functions
-static void MapKey(Uint16 SDLkey, U8 tkey, KeySym xkeysym);
+static void MapKey(Uint16 SDLkey, U8 tkey);
 static void InitKeyMaps();
 static void InitKeyMaps();
 static inline U8 TranslateSDLKeytoTKey(SDLKey keysym);
 static inline U8 TranslateSDLKeytoTKey(SDLKey keysym);
 
 
@@ -65,11 +60,8 @@ extern "C" Uint16 X11_KeyToUnicode( SDLKey keysym, SDLMod modifiers );
 //==============================================================================
 //==============================================================================
 // Static helper functions
 // 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; 
    SDLtoTKeyMap[SDLkey] = tkey; 
 
 
    Uint16 key = 0;
    Uint16 key = 0;
@@ -86,56 +78,6 @@ static void MapKey(Uint16 SDLkey, U8 tkey, KeySym xkeysym)
    mod = KMOD_MODE;
    mod = KMOD_MODE;
    key = X11_KeyToUnicode( skey, mod );
    key = X11_KeyToUnicode( skey, mod );
    AsciiTable[tkey].goofy.ascii = key;
    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
    // set up the X to Torque key map
    // stuff
    // 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
    // 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 keysym;
    S32 tkeycode;
    S32 tkeycode;
-   KeySym xkey;
    // main numeric keys
    // 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
    // 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
    // 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
    // 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
    // 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
    // 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
    // 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;
    keyMapsInitialized = true;
 };
 };

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

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

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

@@ -27,7 +27,6 @@
 */
 */
 ConsoleFunctionWithDocs( isJoystickDetected, ConsoleBool, 1, 1, () )
 ConsoleFunctionWithDocs( isJoystickDetected, ConsoleBool, 1, 1, () )
 {
 {
-   argc; argv;
    UInputManager* manager = dynamic_cast<UInputManager*>(Input::getManager());
    UInputManager* manager = dynamic_cast<UInputManager*>(Input::getManager());
    if (manager)
    if (manager)
       return manager->joystickDetected();
       return manager->joystickDetected();
@@ -43,18 +42,9 @@ ConsoleFunctionWithDocs( isJoystickDetected, ConsoleBool, 1, 1, () )
 */
 */
 ConsoleFunctionWithDocs( getJoystickAxes, ConsoleString, 2, 2, (instance) )
 ConsoleFunctionWithDocs( getJoystickAxes, ConsoleString, 2, 2, (instance) )
 {
 {
-   argc; argv;
    UInputManager* manager = dynamic_cast<UInputManager*>(Input::getManager());
    UInputManager* manager = dynamic_cast<UInputManager*>(Input::getManager());
    if (manager)
    if (manager)
       return manager->getJoystickAxesString(dAtoi(argv[1]));
       return manager->getJoystickAxesString(dAtoi(argv[1]));
    else
    else
       return "";
       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_list args;
    va_start(args, format);
    va_start(args, format);
    vprintf(format, args);
    vprintf(format, args);
+   va_end(args);
 }   
 }   
 
 
 S32 dVprintf(const char *format, void *arglist)
 S32 dVprintf(const char *format, void *arglist)
@@ -365,23 +366,19 @@ S32 dSprintf(char *buffer, U32 bufferSize, const char *format, ...)
    va_list args;
    va_list args;
    va_start(args, format);
    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 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)
 S32 dStrrev(char *str)

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

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