Make XParseGeometry reusable by several ports
authorSylvain Beucler <beuc@beuc.net>
Fri, 9 Mar 2012 20:46:15 +0000 (20:46 +0000)
committerSylvain Beucler <beuc@beuc.net>
Fri, 9 Mar 2012 20:46:15 +0000 (20:46 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1091 7f0cb862-5218-0410-a997-914c9d46530a

CMakeLists.txt
src/Makefile.am
src/mswin/freeglut_init_mswin.c

index e74b37d..e17cd60 100644 (file)
@@ -37,6 +37,8 @@ SET(FREEGLUT_SRCS
 
 IF(WIN32)
        LIST(APPEND FREEGLUT_SRCS
+               src/Common/xparsegeometry_repl.c
+               src/Common/xparsegeometry_repl.h
                src/mswin/freeglut_cursor_mswin.c
                src/mswin/freeglut_display_mswin.c
                src/mswin/freeglut_ext_mswin.c
@@ -85,7 +87,7 @@ OPTION(BUILD_SHARED_LIBS "Build FreeGLUT shared library." ON)
 OPTION(BUILD_STATIC_LIBS "Build FreeGLUT static library." ON)
 
 FIND_PACKAGE(OpenGL REQUIRED)
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${OPENGL_INCLUDE_DIR})
+INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
 LIST(APPEND LIBS ${OPENGL_gl_LIBRARY})
 LIST(APPEND LIBS m)
 
@@ -130,7 +132,7 @@ CHECK_FUNCTION_EXISTS(_doprnt HAVE_DOPRNT)
 # ensure that all CMake-generated files are kept away from the main source tree.
 # As a result, the build directory must to be added to the include path list.
 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/config.h.in ${CMAKE_BINARY_DIR}/config.h)
-INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
+INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src)
 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
 
 # by default, at least on UNIX, we want to build both
index f748016..d1f44ce 100644 (file)
@@ -41,6 +41,8 @@ lib@LIBRARY@_la_SOURCES = Common/freeglut_callbacks.c \
 
 if TARGET_HOST_MS_WINDOWS
 lib@LIBRARY@_la_SOURCES += \
+       Common/xparsegeometry_repl.c \
+       Common/xparsegeometry_repl.h \
        mswin/freeglut_cursor_mswin.c \
        mswin/freeglut_display_mswin.c \
        mswin/freeglut_ext_mswin.c \
index 6f5d614..3df03d3 100644 (file)
@@ -195,144 +195,6 @@ from The Open Group.
 
 */
 
-#define NoValue         0x0000
-#define XValue          0x0001
-#define YValue          0x0002
-#define WidthValue      0x0004
-#define HeightValue     0x0008
-#define AllValues       0x000F
-#define XNegative       0x0010
-#define YNegative       0x0020
-
-/*
- *    XParseGeometry parses strings of the form
- *   "=<width>x<height>{+-}<xoffset>{+-}<yoffset>", where
- *   width, height, xoffset, and yoffset are unsigned integers.
- *   Example:  "=80x24+300-49"
- *   The equal sign is optional.
- *   It returns a bitmask that indicates which of the four values
- *   were actually found in the string.  For each value found,
- *   the corresponding argument is updated;  for each value
- *   not found, the corresponding argument is left unchanged.
- */
-
-static int
-ReadInteger(char *string, char **NextString)
-{
-    register int Result = 0;
-    int Sign = 1;
-
-    if (*string == '+')
-        string++;
-    else if (*string == '-')
-    {
-        string++;
-        Sign = -1;
-    }
-    for (; (*string >= '0') && (*string <= '9'); string++)
-    {
-        Result = (Result * 10) + (*string - '0');
-    }
-    *NextString = string;
-    if (Sign >= 0)
-        return Result;
-    else
-        return -Result;
-}
-
-int XParseGeometry (
-    const char *string,
-    int *x,
-    int *y,
-    unsigned int *width,    /* RETURN */
-    unsigned int *height)    /* RETURN */
-{
-    int mask = NoValue;
-    register char *strind;
-    unsigned int tempWidth = 0, tempHeight = 0;
-    int tempX = 0, tempY = 0;
-    char *nextCharacter;
-
-    if ( (string == NULL) || (*string == '\0'))
-      return mask;
-    if (*string == '=')
-        string++;  /* ignore possible '=' at beg of geometry spec */
-
-    strind = (char *)string;
-    if (*strind != '+' && *strind != '-' && *strind != 'x') {
-        tempWidth = ReadInteger(strind, &nextCharacter);
-        if (strind == nextCharacter)
-            return 0;
-        strind = nextCharacter;
-        mask |= WidthValue;
-    }
-
-    if (*strind == 'x' || *strind == 'X') {
-        strind++;
-        tempHeight = ReadInteger(strind, &nextCharacter);
-        if (strind == nextCharacter)
-            return 0;
-        strind = nextCharacter;
-        mask |= HeightValue;
-    }
-
-    if ((*strind == '+') || (*strind == '-')) {
-        if (*strind == '-') {
-            strind++;
-            tempX = -ReadInteger(strind, &nextCharacter);
-            if (strind == nextCharacter)
-                return 0;
-            strind = nextCharacter;
-            mask |= XNegative;
-        }
-        else
-        {
-            strind++;
-            tempX = ReadInteger(strind, &nextCharacter);
-            if (strind == nextCharacter)
-                return 0;
-            strind = nextCharacter;
-        }
-        mask |= XValue;
-        if ((*strind == '+') || (*strind == '-')) {
-            if (*strind == '-') {
-                strind++;
-                tempY = -ReadInteger(strind, &nextCharacter);
-                if (strind == nextCharacter)
-                    return 0;
-                strind = nextCharacter;
-                mask |= YNegative;
-            }
-            else
-            {
-                strind++;
-                tempY = ReadInteger(strind, &nextCharacter);
-                if (strind == nextCharacter)
-                    return 0;
-                strind = nextCharacter;
-            }
-            mask |= YValue;
-        }
-    }
-
-    /* If strind isn't at the end of the string the it's an invalid
-       geometry specification. */
-
-    if (*strind != '\0') return 0;
-
-    if (mask & XValue)
-        *x = tempX;
-    if (mask & YValue)
-        *y = tempY;
-    if (mask & WidthValue)
-        *width = tempWidth;
-    if (mask & HeightValue)
-        *height = tempHeight;
-    return mask;
-}
-
-
-
 /* -- PLATFORM-SPECIFIC INTERFACE FUNCTION -------------------------------------------------- */
 
 void (__cdecl *__glutExitFunc)( int return_value ) = NULL;