softpipe: use the polygon stipple utility module
[mesa.git] / src / glut / beos / beos_x11.cpp
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 }