diff options
| author | Manolo Gouy <Manolo> | 2016-03-28 09:25:11 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2016-03-28 09:25:11 +0000 |
| commit | 6284720098cb3682f950db427c95ac87c2a10b3c (patch) | |
| tree | dbcfaa3ff88b889c91856f79136a6e25cf7ca914 /src/Fl_System_Driver.cxx | |
| parent | 3dfec155adf812941e4478b210d1bee4dbd56c01 (diff) | |
Rewrite file src/Fl_arg.cxx under the driver model. Begin giving flesh to the Fl_System_Driver class.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11448 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_System_Driver.cxx')
| -rw-r--r-- | src/Fl_System_Driver.cxx | 143 |
1 files changed, 142 insertions, 1 deletions
diff --git a/src/Fl_System_Driver.cxx b/src/Fl_System_Driver.cxx index 8acd2d4b3..711d9abaa 100644 --- a/src/Fl_System_Driver.cxx +++ b/src/Fl_System_Driver.cxx @@ -17,8 +17,16 @@ // -#include "config_lib.h" #include <FL/Fl_System_Driver.H> +#include <stdlib.h> + +const int Fl_System_Driver::flNoValue = 0x0000; +const int Fl_System_Driver::flWidthValue = 0x0004; +const int Fl_System_Driver::flHeightValue = 0x0008; +const int Fl_System_Driver::flXValue = 0x0001; +const int Fl_System_Driver::flYValue = 0x0002; +const int Fl_System_Driver::flXNegative = 0x0010; +const int Fl_System_Driver::flYNegative = 0x0020; Fl_System_Driver::Fl_System_Driver() @@ -30,6 +38,139 @@ Fl_System_Driver::~Fl_System_Driver() { } +/* the following function was stolen from the X sources as indicated. */ + +/* Copyright Massachusetts Institute of Technology 1985, 1986, 1987 */ +/* $XConsortium: XParseGeom.c,v 11.18 91/02/21 17:23:05 rws Exp $ */ + +/* + 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, and that the name of M.I.T. not be used in advertising or + publicity pertaining to distribution of the software without specific, + written prior permission. M.I.T. makes no representations about the + suitability of this software for any purpose. It is provided "as is" + without express or implied warranty. + */ + +/* + * 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) +{ + 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 Fl_System_Driver::XParseGeometry(const char* string, int* x, int* y, + unsigned int* width, unsigned int* height) +{ + int mask = Fl_System_Driver::flNoValue; + 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 |= flWidthValue; + } + + if (*strind == 'x' || *strind == 'X') { + strind++; + tempHeight = ReadInteger(strind, &nextCharacter); + if (strind == nextCharacter) + return (0); + strind = nextCharacter; + mask |= flHeightValue; + } + + if ((*strind == '+') || (*strind == '-')) { + if (*strind == '-') { + strind++; + tempX = -ReadInteger(strind, &nextCharacter); + if (strind == nextCharacter) + return (0); + strind = nextCharacter; + mask |= flXNegative; + + } else { + strind++; + tempX = ReadInteger(strind, &nextCharacter); + if (strind == nextCharacter) + return(0); + strind = nextCharacter; + } + mask |= flXValue; + if ((*strind == '+') || (*strind == '-')) { + if (*strind == '-') { + strind++; + tempY = -ReadInteger(strind, &nextCharacter); + if (strind == nextCharacter) + return(0); + strind = nextCharacter; + mask |= flYNegative; + + } else { + strind++; + tempY = ReadInteger(strind, &nextCharacter); + if (strind == nextCharacter) + return(0); + strind = nextCharacter; + } + mask |= flYValue; + } + } + + /* If strind isn't at the end of the string the it's an invalid + geometry specification. */ + + if (*strind != '\0') return (0); + + if (mask & flXValue) + *x = tempX; + if (mask & flYValue) + *y = tempY; + if (mask & flWidthValue) + *width = tempWidth; + if (mask & flHeightValue) + *height = tempHeight; + return (mask); +} // // End of "$Id$". |
