// // MSG_WriteHexString // // Converts a hexidecimal string to its binary representation void MSG_WriteHexString(buf_t *b, const char *s) { byte output[255]; // Nothing to write? if (!(s && (*s))) { MSG_WriteByte(b, 0); return; } const size_t numdigits = strlen(s) / 2; if (numdigits > STACKARRAY_LENGTH(output)) { Printf (PRINT_HIGH, "MSG_WriteHexString: too many digits\n"); return; } for (size_t i = 0; i < numdigits; ++i) { output[i] = (char)(16 * toInt(s[2*i]) + toInt(s[2*i+1])); } MSG_WriteByte(b, (byte)numdigits); MSG_WriteChunk(b, output, numdigits); }
SDLVideo::SDLVideo(int parm) { const SDL_version *SDLVersion = SDL_Linked_Version(); if(SDLVersion->major != SDL_MAJOR_VERSION || SDLVersion->minor != SDL_MINOR_VERSION) { I_FatalError("SDL version conflict (%d.%d.%d vs %d.%d.%d dll)\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL, SDLVersion->major, SDLVersion->minor, SDLVersion->patch); return; } if (SDL_InitSubSystem (SDL_INIT_VIDEO) == -1) { I_FatalError("Could not initialize SDL video.\n"); return; } if(SDLVersion->patch != SDL_PATCHLEVEL) { Printf_Bold("SDL version warning (%d.%d.%d vs %d.%d.%d dll)\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL, SDLVersion->major, SDLVersion->minor, SDLVersion->patch); } // [Russell] - Just for windows, display the icon in the system menu and // alt-tab display #if WIN32 && !_XBOX HICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)); if (hIcon) { HWND WindowHandle; SDL_SysWMinfo wminfo; SDL_VERSION(&wminfo.version) SDL_GetWMInfo(&wminfo); WindowHandle = wminfo.window; SendMessage(WindowHandle, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); SendMessage(WindowHandle, WM_SETICON, ICON_BIG, (LPARAM)hIcon); } #endif I_SetWindowCaption(); sdlScreen = NULL; infullscreen = false; screenw = screenh = screenbits = 0; palettechanged = false; // Get Video modes SDL_PixelFormat fmt; fmt.palette = NULL; fmt.BitsPerPixel = 8; fmt.BytesPerPixel = 1; SDL_Rect **sdllist = SDL_ListModes(NULL, SDL_FULLSCREEN|SDL_SWSURFACE); vidModeIterator = 0; vidModeIteratorBits = 8; vidModeList.clear(); if(!sdllist) { // no fullscreen modes, but we could still try windowed Printf(PRINT_HIGH, "SDL_ListModes returned NULL. No fullscreen video modes are available.\n"); return; } else if(sdllist == (SDL_Rect **)-1) { I_FatalError("SDL_ListModes returned -1. Internal error.\n"); return; } else { vidMode_t CustomVidModes[] = { { 640, 480, 8 } ,{ 640, 400, 8 } ,{ 320, 240, 8 } ,{ 320, 200, 8 } }; // Add in generic video modes reported by SDL for(int i = 0; sdllist[i]; ++i) { vidMode_t vm; vm.width = sdllist[i]->w; vm.height = sdllist[i]->h; vm.bits = 8; vidModeList.push_back(vm); } // Now custom video modes to be added for (size_t i = 0; i < STACKARRAY_LENGTH(CustomVidModes); ++i) vidModeList.push_back(CustomVidModes[i]); // Reverse sort the modes std::sort(vidModeList.begin(), vidModeList.end(), std::greater<vidMode_t>()); // Get rid of any duplicates (SDL some times reports duplicates as well) vidModeList.erase(std::unique(vidModeList.begin(), vidModeList.end()), vidModeList.end()); } }