xref: /haiku/src/libs/glut/glutDstr.cpp (revision 820dca4df6c7bf955c46e8f6521b9408f50b2900)
1 /***********************************************************
2  *      Copyright (C) 1997, Be Inc.  Copyright (C) 1999, Jake Hamby.
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  *
9  *  FILE:	glutDstr.cpp
10  *
11  *	DESCRIPTION:	convert display string into a Be options variable
12  ***********************************************************/
13 
14 /***********************************************************
15  *	Headers
16  ***********************************************************/
17 #include <GL/glut.h>
18 #include <string.h>
19 #include <stdlib.h>
20 #include "glutint.h"
21 #include "glutState.h"
22 
23 /***********************************************************
24  *	FUNCTION:	glutInitDisplayString
25  *
26  *	DESCRIPTION:  sets the display string variable
27  ***********************************************************/
28 void APIENTRY
29 glutInitDisplayString(const char *string)
30 {
31   if (gState.displayString) {
32     free(gState.displayString);
33   }
34   if (string) {
35     gState.displayString = strdup(string);
36     if (!gState.displayString)
37       __glutFatalError("out of memory.");
38   } else
39     gState.displayString = NULL;
40 }
41 
42 /***********************************************************
43  *	FUNCTION:	__glutConvertDisplayModeFromString
44  *
45  *	DESCRIPTION:  converts the current display mode into a BGLView
46  *		display mode, printing warnings as appropriate.
47  *
48  *	PARAMETERS:	 if options is non-NULL, the current display mode is
49  *		returned in it.
50  *
51  *	RETURNS:	1 if the current display mode is possible, else 0
52  ***********************************************************/
53 int __glutConvertDisplayModeFromString(unsigned long *options) {
54 	ulong newoptions = 0;
55 
56 	char *word = strtok(gState.displayString, " \t");
57 	do {
58 		char *cstr = strpbrk(word, "=><!~");
59 		if(cstr)
60 			*cstr = '\0';
61 		// this is the most minimal possible parser.  scan for
62 		// options that we support, and add them to newoptions
63 		// this will certainly cause it to accept things that we
64 		// don't actually support, but if we don't support it, the
65 		// program's probably not going to work anyway.
66 		if(!strcmp(word, "alpha")) {
67 			newoptions |= BGL_ALPHA;
68 		} else if((!strcmp(word, "acc")) || (!strcmp(word, "acca"))) {
69 			newoptions |= BGL_ACCUM;
70 		} else if(!strcmp(word, "depth")) {
71 			newoptions |= BGL_DEPTH;
72 		} else if(!strcmp(word, "double")) {
73 			newoptions |= BGL_DOUBLE;
74 		} else if(!strcmp(word, "stencil")) {
75 			newoptions |= BGL_STENCIL;
76 		}
77 	} while((word = strtok(0, " \t")) != 0);
78 
79 	if (options)
80 		*options = newoptions;
81 
82 	return 1;	// assume we support it
83 }
84