Splitting out more Windows-specific code in "freeglut_init.c"
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@993 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
e0b5c3f20a
commit
df4390f600
@ -565,40 +565,8 @@ void fgDeinitialize( void )
|
|||||||
fgState.Initialised = GL_FALSE;
|
fgState.Initialised = GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Everything inside the following #ifndef is copied from the X sources.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if TARGET_HOST_MS_WINDOWS
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Copyright 1985, 1986, 1987,1998 The Open Group
|
|
||||||
|
|
||||||
Permission to use, copy, modify, distribute, and sell this software and its
|
|
||||||
documentation for any purpose is hereby granted without fee, provided that
|
|
||||||
the above copyright notice appear in all copies and that both that
|
|
||||||
copyright notice and this permission notice appear in supporting
|
|
||||||
documentation.
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included
|
|
||||||
in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
||||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
||||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of The Open Group shall
|
|
||||||
not be used in advertising or otherwise to promote the sale, use or
|
|
||||||
other dealings in this Software without prior written authorization
|
|
||||||
from The Open Group.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
#if defined TARGET_HOST_MS_WINDOWS
|
||||||
#define NoValue 0x0000
|
#define NoValue 0x0000
|
||||||
#define XValue 0x0001
|
#define XValue 0x0001
|
||||||
#define YValue 0x0002
|
#define YValue 0x0002
|
||||||
@ -608,132 +576,12 @@ from The Open Group.
|
|||||||
#define XNegative 0x0010
|
#define XNegative 0x0010
|
||||||
#define YNegative 0x0020
|
#define YNegative 0x0020
|
||||||
|
|
||||||
/*
|
extern int XParseGeometry (
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int XParseGeometry (
|
|
||||||
const char *string,
|
const char *string,
|
||||||
int *x,
|
int *x,
|
||||||
int *y,
|
int *y,
|
||||||
unsigned int *width, /* RETURN */
|
unsigned int *width, /* RETURN */
|
||||||
unsigned int *height) /* 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;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
||||||
|
@ -154,5 +154,173 @@ void fghCloseDisplay ( void )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Everything down to the end of the next two functions is copied from the X sources.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright 1985, 1986, 1987,1998 The Open Group
|
||||||
|
|
||||||
|
Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
the above copyright notice appear in all copies and that both that
|
||||||
|
copyright notice and this permission notice appear in supporting
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of The Open Group shall
|
||||||
|
not be used in advertising or otherwise to promote the sale, use or
|
||||||
|
other dealings in this Software without prior written authorization
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user