1 2 /* Copyright (c) Nate Robins, 1997. */ 3 4 /* This program is freely distributable without licensing fees 5 and is provided without guarantee or warrantee expressed or 6 implied. This program is -not- in the public domain. */ 7 8 #include <Screen.h> 9 #include <stdio.h> 10 #include "beos_x11.h" 11 12 /* NOTE: These functions require a BApplication to be instantiated first */ 13 int DisplayWidth() { 14 BScreen s; 15 return s.Frame().IntegerWidth() + 1; 16 } 17 18 int DisplayHeight() { 19 BScreen s; 20 return s.Frame().IntegerHeight() + 1; 21 } 22 23 /* the following function was stolen from the X sources as indicated. */ 24 25 /* Copyright Massachusetts Institute of Technology 1985, 1986, 1987 */ 26 27 /* 28 Permission to use, copy, modify, distribute, and sell this software and its 29 documentation for any purpose is hereby granted without fee, provided that 30 the above copyright notice appear in all copies and that both that 31 copyright notice and this permission notice appear in supporting 32 documentation, and that the name of M.I.T. not be used in advertising or 33 publicity pertaining to distribution of the software without specific, 34 written prior permission. M.I.T. makes no representations about the 35 suitability of this software for any purpose. It is provided "as is" 36 without express or implied warranty. 37 */ 38 39 #if 0 // Not used currently... 40 41 /* 42 *Returns pointer to first char ins search which is also in what, else NULL. 43 */ 44 static char *strscan (char *search, char *what) 45 { 46 int i, len = strlen (what); 47 char c; 48 49 while ((c = *(search++))) { 50 for (i = 0; i < len; i++) 51 if (c == what [i]) 52 return (--search); 53 } 54 return (NULL); 55 } 56 57 #endif 58 59 /* 60 * XParseGeometry parses strings of the form 61 * "=<width>x<height>{+-}<xoffset>{+-}<yoffset>", where 62 * width, height, xoffset, and yoffset are unsigned integers. 63 * Example: "=80x24+300-49" 64 * The equal sign is optional. 65 * It returns a bitmask that indicates which of the four values 66 * were actually found in the string. For each value found, 67 * the corresponding argument is updated; for each value 68 * not found, the corresponding argument is left unchanged. 69 */ 70 71 static int 72 ReadInteger(char *string, char **NextString) 73 { 74 register int Result = 0; 75 int Sign = 1; 76 77 if (*string == '+') 78 string++; 79 else if (*string == '-') 80 { 81 string++; 82 Sign = -1; 83 } 84 for (; (*string >= '0') && (*string <= '9'); string++) 85 { 86 Result = (Result * 10) + (*string - '0'); 87 } 88 *NextString = string; 89 if (Sign >= 0) 90 return (Result); 91 else 92 return (-Result); 93 } 94 95 int XParseGeometry (char *string, int *x, int *y, 96 unsigned int *width, unsigned int *height) 97 { 98 int mask = NoValue; 99 register char *strind; 100 unsigned int tempWidth=0, tempHeight=0; 101 int tempX=0, tempY=0; 102 char *nextCharacter; 103 104 if ( (string == NULL) || (*string == '\0')) return(mask); 105 if (*string == '=') 106 string++; /* ignore possible '=' at beg of geometry spec */ 107 108 strind = (char *)string; 109 if (*strind != '+' && *strind != '-' && *strind != 'x') { 110 tempWidth = ReadInteger(strind, &nextCharacter); 111 if (strind == nextCharacter) 112 return (0); 113 strind = nextCharacter; 114 mask |= WidthValue; 115 } 116 117 if (*strind == 'x' || *strind == 'X') { 118 strind++; 119 tempHeight = ReadInteger(strind, &nextCharacter); 120 if (strind == nextCharacter) 121 return (0); 122 strind = nextCharacter; 123 mask |= HeightValue; 124 } 125 126 if ((*strind == '+') || (*strind == '-')) { 127 if (*strind == '-') { 128 strind++; 129 tempX = -ReadInteger(strind, &nextCharacter); 130 if (strind == nextCharacter) 131 return (0); 132 strind = nextCharacter; 133 mask |= XNegative; 134 135 } 136 else 137 { strind++; 138 tempX = ReadInteger(strind, &nextCharacter); 139 if (strind == nextCharacter) 140 return(0); 141 strind = nextCharacter; 142 } 143 mask |= XValue; 144 if ((*strind == '+') || (*strind == '-')) { 145 if (*strind == '-') { 146 strind++; 147 tempY = -ReadInteger(strind, &nextCharacter); 148 if (strind == nextCharacter) 149 return(0); 150 strind = nextCharacter; 151 mask |= YNegative; 152 153 } 154 else 155 { 156 strind++; 157 tempY = ReadInteger(strind, &nextCharacter); 158 if (strind == nextCharacter) 159 return(0); 160 strind = nextCharacter; 161 } 162 mask |= YValue; 163 } 164 } 165 166 /* If strind isn't at the end of the string the it's an invalid 167 geometry specification. */ 168 169 if (*strind != '\0') return (0); 170 171 if (mask & XValue) 172 *x = tempX; 173 if (mask & YValue) 174 *y = tempY; 175 if (mask & WidthValue) 176 *width = tempWidth; 177 if (mask & HeightValue) 178 *height = tempHeight; 179 return (mask); 180 } 181