Make XParseGeometry reusable by several ports (2)
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1092 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
426ce85a73
commit
3ab598b0fb
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -152,6 +152,8 @@ freeglut/freeglut/src/Common/freeglut_teapot_data.h svn_keywords=Author+Date+Id+
|
|||||||
freeglut/freeglut/src/Common/freeglut_videoresize.c svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/src/Common/freeglut_videoresize.c svn_keywords=Author+Date+Id+Revision
|
||||||
freeglut/freeglut/src/Common/freeglut_window.c svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/src/Common/freeglut_window.c svn_keywords=Author+Date+Id+Revision
|
||||||
freeglut/freeglut/src/Common/freeglutdll.def svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/src/Common/freeglutdll.def svn_keywords=Author+Date+Id+Revision
|
||||||
|
freeglut/freeglut/src/Common/xparsegeometry_repl.c -text
|
||||||
|
freeglut/freeglut/src/Common/xparsegeometry_repl.h -text
|
||||||
freeglut/freeglut/src/Makefile.am svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/src/Makefile.am svn_keywords=Author+Date+Id+Revision
|
||||||
freeglut/freeglut/src/mswin/freeglut_cursor_mswin.c svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/src/mswin/freeglut_cursor_mswin.c svn_keywords=Author+Date+Id+Revision
|
||||||
freeglut/freeglut/src/mswin/freeglut_display_mswin.c svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/src/mswin/freeglut_display_mswin.c svn_keywords=Author+Date+Id+Revision
|
||||||
|
162
freeglut/freeglut/src/Common/xparsegeometry_repl.c
Normal file
162
freeglut/freeglut/src/Common/xparsegeometry_repl.c
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Common/xparsegeometry_repl.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
}
|
52
freeglut/freeglut/src/Common/xparsegeometry_repl.h
Normal file
52
freeglut/freeglut/src/Common/xparsegeometry_repl.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XPARSEGEOMETRY_REPL_H
|
||||||
|
#define XPARSEGEOMETRY_REPL_H
|
||||||
|
|
||||||
|
#define NoValue 0x0000
|
||||||
|
#define XValue 0x0001
|
||||||
|
#define YValue 0x0002
|
||||||
|
#define WidthValue 0x0004
|
||||||
|
#define HeightValue 0x0008
|
||||||
|
#define AllValues 0x000F
|
||||||
|
#define XNegative 0x0010
|
||||||
|
#define YNegative 0x0020
|
||||||
|
|
||||||
|
extern int XParseGeometry (
|
||||||
|
const char *string,
|
||||||
|
int *x,
|
||||||
|
int *y,
|
||||||
|
unsigned int *width, /* RETURN */
|
||||||
|
unsigned int *height); /* RETURN */
|
||||||
|
|
||||||
|
#endif
|
Reference in New Issue
Block a user