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