| |
| /* Copyright (c) Nate Robins, 1997. */ |
| |
| /* This program is freely distributable without licensing fees |
| and is provided without guarantee or warrantee expressed or |
| implied. This program is -not- in the public domain. */ |
| |
| #include <Screen.h> |
| #include <stdio.h> |
| #include "beos_x11.h" |
| |
| /* NOTE: These functions require a BApplication to be instantiated first */ |
| int DisplayWidth() { |
| BScreen s; |
| return s.Frame().IntegerWidth() + 1; |
| } |
| |
| int DisplayHeight() { |
| BScreen s; |
| return s.Frame().IntegerHeight() + 1; |
| } |
| |
| /* 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. |
| */ |
| |
| #if 0 // Not used currently... |
| |
| /* |
| *Returns pointer to first char ins search which is also in what, else NULL. |
| */ |
| static char *strscan (char *search, char *what) |
| { |
| int i, len = strlen (what); |
| char c; |
| |
| while ((c = *(search++))) { |
| for (i = 0; i < len; i++) |
| if (c == what [i]) |
| return (--search); |
| } |
| return (NULL); |
| } |
| |
| #endif |
| |
| /* |
| * 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 (char *string, int *x, int *y, |
| unsigned int *width, unsigned int *height) |
| { |
| 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); |
| } |