All pastes #829076 Raw Edit

Miscellany

public c v1 · immutable
#829076 ·published 2007-12-22 22:17 UTC
rendered paste body
// Emacs style mode select   -*- C++ -*- //-----------------------------------------------------------------------------//// $Id: i_video.c,v 1.2 2007-07-19 14:38:37 unix Exp $//// Copyright (C) 1993-1996 by id Software, Inc.//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.//// $Log: i_video.c,v $// Revision 1.2  2007-07-19 14:38:37  unix//// converted string end characters//// Revision 1.1.1.1  2007-07-19 14:34:10  unix//// First release//////// DESCRIPTION://	DOOM graphics stuff for X11, UNIX.// 19.07.2007: Rewritten for SDL Support by [unix]////-----------------------------------------------------------------------------static const charrcsid[] = "$Id: i_video.c,v 1.2 2007-07-19 14:38:37 unix Exp $";#include <stdlib.h>#include <unistd.h>#include <sys/ipc.h>#include <stdarg.h>#include <sys/time.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <errno.h>#include <signal.h>#include "doomstat.h"#include "i_system.h"#include "v_video.h"#include "m_argv.h"#include "d_main.h"#include "doomdef.h"#include "SDL.h"SDL_Surface *sdl_screen;SDL_Color	colors[256];SDL_Event	S_event;////  Translates the key currently in X_event//int xlatekey(SDL_keysym *key){    int rc = 0;           switch(key->sym)    {      case SDLK_LEFT:	rc = KEY_LEFTARROW;	break;      case SDLK_RIGHT:	rc = KEY_RIGHTARROW;	break;      case SDLK_DOWN:	rc = KEY_DOWNARROW;	break;      case SDLK_UP:	rc = KEY_UPARROW;	break;      case SDLK_ESCAPE:	rc = KEY_ESCAPE;	break;      case SDLK_RETURN:	rc = KEY_ENTER;		break;      case SDLK_TAB:	rc = KEY_TAB;		break;      case SDLK_F1:	rc = KEY_F1;		break;      case SDLK_F2:	rc = KEY_F2;		break;      case SDLK_F3:	rc = KEY_F3;		break;      case SDLK_F4:	rc = KEY_F4;		break;      case SDLK_F5:	rc = KEY_F5;		break;      case SDLK_F6:	rc = KEY_F6;		break;      case SDLK_F7:	rc = KEY_F7;		break;      case SDLK_F8:	rc = KEY_F8;		break;      case SDLK_F9:	rc = KEY_F9;		break;      case SDLK_F10:	rc = KEY_F10;		break;      case SDLK_F11:	rc = KEY_F11;		break;      case SDLK_F12:	rc = KEY_F12;		break;      case SDLK_1:	rc = 0x0031;	break;      case SDLK_2:	rc = 0x0032;	break;      case SDLK_3:	rc = 0x0033;	break;      case SDLK_4:	rc = 0x0034; 	break;      case SDLK_5:	rc = 0x0035;	break;      case SDLK_6:	rc = 0x0036;	break;      case SDLK_7:	rc = 0x0037;	break;      case SDLK_BACKSPACE:      case SDLK_DELETE:	rc = KEY_BACKSPACE;	break;      case SDLK_PAUSE:	rc = KEY_PAUSE;		break;      case SDLK_KP_EQUALS:      case SDLK_EQUALS:	rc = KEY_EQUALS;	break;      case SDLK_KP_MINUS:      case SDLK_MINUS:	rc = KEY_MINUS;		break;      case SDLK_RSHIFT:      case SDLK_LSHIFT:	rc = KEY_RSHIFT;	break;	      case SDLK_RCTRL:      case SDLK_LCTRL:	rc = KEY_RCTRL;	break;	      case SDLK_RALT:      case SDLK_LALT:      case SDLK_RMETA:      case SDLK_LMETA:	rc = KEY_RALT;	break;	case SDLK_SPACE: rc = ' '; break;		      default:	if (rc >= SDLK_SPACE && rc <= SDLK_BACKQUOTE)	 rc = rc - SDLK_SPACE + ' ';	if (key->sym >= 'a' && key->sym <= 'z') {		rc = key->sym;		break;		}	break;    }  return rc;  }void I_ShutdownGraphics(void){  SDL_FreeSurface(sdl_screen);  SDL_ShowCursor(SDL_ENABLE);  SDL_Quit;}//// I_StartFrame//void I_StartFrame (void){    // er?}static int	lastmousex = 0;static int	lastmousey = 0;boolean		mousemoved = false;int I_MState(Uint8 buttonstate){	return 0	| (buttonstate & SDL_BUTTON(1) ? 1 : 0)	| (buttonstate & SDL_BUTTON(2) ? 2 : 0)	| (buttonstate & SDL_BUTTON(3) ? 4 : 0);}void I_GetEvent(SDL_Event *sdl_event){	event_t event;    // put event-grabbing stuff in here   switch (sdl_event->type)    {      case SDL_KEYDOWN:      	event.type = ev_keydown;	event.data1 = xlatekey(&sdl_event->key.keysym);	D_PostEvent(&event);	// fprintf(stderr, "k");	break;      case SDL_KEYUP:	event.type = ev_keyup;	event.data1 = xlatekey(&sdl_event->key.keysym);	D_PostEvent(&event);	// fprintf(stderr, "ku");	break;      case SDL_MOUSEBUTTONDOWN:      case SDL_MOUSEBUTTONUP:      	event.type = ev_mouse;	event.data1 = I_MState(SDL_GetMouseState(NULL, NULL));	event.data2 = event.data3 = 0;	D_PostEvent(&event);	// fprintf(stderr, "bu");	break;      case SDL_MOUSEMOTION:	event.type = ev_mouse;	event.data1 = I_MState(sdl_event->motion.state);	event.data2 = sdl_event->motion.xrel << 5;	event.data3 = -sdl_event->motion.yrel << 5;	D_PostEvent(&event);	mousemoved = true;	break;	        default:	break;    }}//// I_StartTic//void I_StartTic (void){SDL_Event sdl_event;	while (SDL_PollEvent(&sdl_event))		I_GetEvent(&sdl_event);	mousemoved = false;}//// I_UpdateNoBlit//void I_UpdateNoBlit (void){    // what is this?}//// I_FinishUpdate//void I_FinishUpdate (void){  // if(SDL_MUSTLOCK(sdl_screen)) {   SDL_LockSurface(sdl_screen);   	//int w, i, h;	byte *src;	byte *dest;						// do scale	dest=sdl_screen->pixels;	src=screens[0];	memcpy(dest,src,(320*200));	SDL_UnlockSurface(sdl_screen); //} SDL_Flip(sdl_screen); 	}//// I_ReadScreen//void I_ReadScreen (byte* scr){    memcpy (scr, screens[0], SCREENWIDTH*SCREENHEIGHT);}//// Palette stuff.////static XColor	colors[256];void I_SetPalette(byte *palette){    register int	i;    register int	c;    static boolean	firstcall = true;	    // initialize the colormap	    if (firstcall)	    {		firstcall = false;		for (i=0 ; i<256 ; i++)		{		    colors[i].r = i;		    colors[i].g = i;		    colors[i].b = i;		}	    }	    // set the SDL colormap entries	    for (i=0 ; i<256 ; i++)	    {		c = gammatable[usegamma][*palette++];		colors[i].r = (c<<8) + c;		c = gammatable[usegamma][*palette++];		colors[i].g = (c<<8) + c;		c = gammatable[usegamma][*palette++];		colors[i].b = (c<<8) + c;	    }	    // store the colors to the current colormap	    SDL_SetColors(sdl_screen, colors, 0, 256);}//// I_SetPalette////// This function is probably redundant,//  if XShmDetach works properly.// ddt never detached the XShm memory,//  thus there might have been stale//  handles accumulating.//void grabsharedmemory(int size){}void I_InitGraphics(void){	SDL_Init(SDL_INIT_VIDEO);	sdl_screen=SDL_SetVideoMode(320, 200, 8, SDL_HWSURFACE|SDL_FULLSCREEN); //maybe hwpalette?	SDL_WM_GrabInput(SDL_GRAB_ON);		SDL_ShowCursor(SDL_DISABLE);}