Mercurial > hg > forks > pwpunix
changeset 78:4ee1ecd46d7b
Removed the unused and incomplete X11 driver.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 14 Aug 2012 05:38:40 +0300 |
parents | deedd4fae98d |
children | 3abba0311c07 |
files | pwplib/X11.c |
diffstat | 1 files changed, 0 insertions(+), 416 deletions(-) [+] |
line wrap: on
line diff
--- a/pwplib/X11.c Tue Aug 14 05:28:18 2012 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,416 +0,0 @@ -/*** HEADERS **********************************************/ - -#include "config.h" - -#ifdef DRIVE_X11 - -#include "pwplib.h" - -#include <string.h> -#include <stdlib.h> - -#include <X11/Xlib.h> -#include <X11/Xutil.h> - -#ifdef DRIVE_X11SHM -# include <sys/ipc.h> -# include <sys/shm.h> -# include <X11/extensions/XShm.h> -#endif - -#define PWP_XWINNAME "pwplib" - -#define BUFFSIZE(w,h,d) ( (((d)+7)>>3) *(w)*(h)) - -/*** INTERNAL DRIVER DATA *********************************/ - -struct -{ - u8*buf; - int bufw,bufh,bufd,bpvl; - - Display *disp; - Visual *vis; - GC gc; - int win,scr,rootw,dummyw; - XImage *im; - - char*winname; - Colormap cmap; - XColor cols[256]; - -#ifdef DRIVE_X11SHM - XShmSegmentInfo ssi; -#endif - struct{ - int w,h; - }savedmode; - - struct{ - int useXShm; - }opt; - - u32 lookup[256]; -}pwp_X11; - -/*** SMALL API FUNX ****************************************/ - -void pwp_X11_setpalette(int*pal,int colorcount) -{ - int*p=pal,i;XColor*c=pwp_X11.cols; - for(i=colorcount;i;i--){ - c->red=(*p++<<8); - c->green=(*p++<<8); - c->blue=(*p++<<8); - c++; - } - XStoreColors(pwp_X11.disp,pwp_X11.cmap,pwp_X11.cols,colorcount); - XSync(pwp_X11.disp,False); -} - -void pwp_X11_blit() -{ - if(!pwp_X11.opt.useXShm) - { - -/**** - - if((pwp_X11.opt.interlaced)||(pwp_X11.opt.halvescans)) - { - int y1=(frame&1)<<pwp_X11.opt.halvescans,y=0, - dy1=(1<<(pwp_X11.opt.interlaced+pwp_X11.opt.halvescans)); - for(;y<oxl.buf.vh;y++){ - XPutImage(pwp_X11.disp,pwp_X11.win,pwp_X11.gc,pwp_X11.im, - 0,y,0,y1,pwp_X11.bufw,1); - y1+=dy1; - } - frame+=pwp_X11.opt.interlaced; - }else - -****/ - - XPutImage(pwp_X11.disp,pwp_X11.win,pwp_X11.gc,pwp_X11.im, - 0,0,0,0,pwp_X11.bufw,pwp_X11.bufh); - - } - else - - XShmPutImage( - pwp_X11.disp,pwp_X11.win,pwp_X11.gc,pwp_X11.im, - 0,0,0,0,pwp_X11.bufw,pwp_X11.bufh,False); - XSync(pwp_X11.disp,False); -} - -int pwp_X11_testquit() -{ - XEvent e; - if((XCheckMaskEvent(pwp_X11.disp,KeyPressMask|KeyReleaseMask,&e)==True) - ||(XEventsQueued(pwp_X11.disp,QueuedAlready)==True)) - return 1;else return 0; -} - -/*** WINDOW SETUP FUNX *************************************/ - -void pwp_X11_getcolormap() -{ - int i=0; - pwp_X11.cmap=XCreateColormap(pwp_X11.disp,pwp_X11.rootw,pwp_X11.vis,AllocAll); - for(;i<256;i++){ - pwp_X11.cols[i].flags=DoRed|DoGreen|DoBlue; - pwp_X11.cols[i].pixel=i;pwp_X11.cols[i].pad=0; - } -} - -void pwp_X11_openwindow() -{ - XSetWindowAttributes att; - Pixmap empty;XColor black={0,0,0,0,0,0}; - -/* empty cursor */ - empty=XCreatePixmap(pwp_X11.disp,pwp_X11.rootw,1,1,1); - att.cursor= - XCreatePixmapCursor(pwp_X11.disp,empty,empty,&black,&black,0,0); - - att.override_redirect=False; - -/* create window */ - att.backing_store=NotUseful; - att.colormap=pwp_X11.cmap; - pwp_X11.win=XCreateWindow( - pwp_X11.disp,pwp_X11.rootw, - 0,0,pwp_X11.bufw,pwp_X11.bufh,0, - pwp_X11.bufd, - InputOutput, - pwp_X11.vis, - CWBackingStore|CWCursor|CWOverrideRedirect - |((pwp_X11.bufd==8)?CWColormap:0) - ,&att); - -/* some hints&props */ - {XSizeHints shints; - shints.min_width= shints.max_width= pwp_X11.bufw; - shints.min_height=shints.max_height=pwp_X11.bufh; - shints.flags=PMinSize+PMaxSize; - - XSetStandardProperties( - pwp_X11.disp,pwp_X11.win, - PWP_XWINNAME,PWP_XWINNAME, - None,NULL,0, - &shints); - } - -/* and draw the window */ - XMapWindow(pwp_X11.disp,pwp_X11.win); - -/* hook keypress */ - XSelectInput(pwp_X11.disp,pwp_X11.win,KeyPress|KeyRelease); - -/* blank */ - -/* if(pwp_X11.opt.halvescans) { - XFillRectangle(pwp_X11.disp,pwp_X11.win, - pwp_X11.gc,0,0,pwp_X11.bufw,pwp_X11.bufh); - } .. not yet*/ - -/* ok ok */ -/* {XEvent e; - XMaskEvent(pwp_X11.disp,KeyPressMask|KeyReleaseMask,&e);} -*/ - XSync(pwp_X11.disp,False); -} - - -/*** DISPLAY SETUP FUNX **************************************/ - -int pwp_X11_testdepth(int depth) -{ - Screen*s=ScreenOfDisplay(pwp_X11.disp,pwp_X11.scr); - Depth*d=s->depths;int i=0; - #ifdef DEBUG - fprintf(stderr,"testing for depth %i\n",depth); - #endif - for(;i<s->ndepths;i++) - if(d[i].depth==depth)return 1; - return 0; -} - -#ifdef DRIVE_X11SHM -int pwp_X11_ready_XShm() -{ - pwp_X11.im=XShmCreateImage( - pwp_X11.disp,pwp_X11.vis,pwp_X11.bufd, - ZPixmap, NULL,&pwp_X11.ssi, - pwp_X11.bufw,pwp_X11.bufh - ); - if(pwp_X11.im==NULL)return 0; - - pwp_X11.bufh=pwp_X11.im->height; - pwp_X11.bufw=pwp_X11.im->width; - pwp_X11.bpvl=pwp_X11.im->bytes_per_line; - - pwp_X11.ssi.shmid=shmget(IPC_PRIVATE, - pwp_X11.im->bytes_per_line*pwp_X11.im->height, - IPC_CREAT|0777); - if(pwp_X11.ssi.shmid<0){ - XDestroyImage(pwp_X11.im);return 0;} - - pwp_X11.im->data=pwp_X11.buf=pwp_X11.ssi.shmaddr= - shmat(pwp_X11.ssi.shmid,0,0); - - if(pwp_X11.ssi.shmaddr==(void*)-1){ - XDestroyImage(pwp_X11.im);return 0;} - - pwp_X11.ssi.readOnly=False; - - /* XSetErrorHandler. Ei tänne */ - - XShmAttach(pwp_X11.disp,&pwp_X11.ssi); - XSync(pwp_X11.disp,False); - - shmctl(pwp_X11.ssi.shmid,IPC_RMID,0); - return 1; -} -#endif - -void pwp_X11_close() -{ - -#ifdef DRIVE_X11SHM - if(pwp_X11.opt.useXShm){ - XShmDetach(pwp_X11.disp,&pwp_X11.ssi); - shmdt(pwp_X11.ssi.shmaddr);} -#endif - XDestroyImage(pwp_X11.im); - XDestroyWindow(pwp_X11.disp,pwp_X11.win); -} - -int pwp_X11_ready() -{ -/* color depth */ - if(!pwp_X11_testdepth(pwp_X11.bufd)) - { - if(pwp_X11_testdepth(8)) pwp_X11.bufd=8;else - if(pwp_X11_testdepth(16))pwp_X11.bufd=16;else - if(pwp_X11_testdepth(15))pwp_X11.bufd=15;else - { pwpwrite("No suitable depth available (8/15/16 bpp)\n"); - return 0; - } - } - - if(pwp_X11.bufd==8)pwp_X11_getcolormap(); - - pwp_X11_openwindow(); - - pwplib_regdestr(pwp_X11_close); - -/* shared memory buffer */ - #ifdef DRIVE_X11SHM - if(pwp_X11.opt.useXShm){ - pwp_X11.opt.useXShm=XShmQueryExtension(pwp_X11.disp); - /* tarkista myös versiosta pixmaps==true */ - if(pwp_X11.opt.useXShm) - if(pwp_X11_ready_XShm())return; - else{ - pwp_X11.opt.useXShm=0; - fprintf(stderr,"no xshm\n");} - } - #endif - -/* noxshm */ - fprintf(stderr, - "X11_buf: %d x %d x %d, videobuf = %d x %d, malloc: %d\n", - pwp_X11.bufw,pwp_X11.bufh,pwp_X11.bufd, - pwplib.videobuf.width,pwplib.videobuf.height, - BUFFSIZE(pwp_X11.bufw,pwp_X11.bufh,pwp_X11.bufd)); - - pwp_X11.buf=malloc(BUFFSIZE(pwp_X11.bufw,pwp_X11.bufh,pwp_X11.bufd)); - - pwp_X11.im=XCreateImage( - pwp_X11.disp,pwp_X11.vis, - pwp_X11.bufd,ZPixmap, - 0,pwp_X11.buf, - pwp_X11.bufw,pwp_X11.bufh, - 32,BUFFSIZE(1,pwp_X11.bufw,pwp_X11.bufd)); - - pwp_X11.bpvl=pwp_X11.im->bytes_per_line; /* ? */ - - return 1; -} - -/* - pwp_X11.opt.useXShm=!findarg(argc,argv,"-noxshm"); - - pwp_X11.opt.fullscreen=findarg(argc,argv,"-full"); -*/ - -/**************************************************************************/ - -void pwp_X11_dump_rast_4x4() -{ - u32*d = (u32*)pwp_X11.buf; - int x,y,j=0; - u8*ss=(u8*)pwplib.videobuf.d; - - for(y=pwplib.videobuf.height*2;y;y--) - { - u8*s=ss; - - for(x=pwplib.videobuf.width;x;x--) - { - *d++=pwp_X11.lookup[*s++]; - } - j=(j+1)&1; - if(!j) { ss+=pwplib.videobuf.width; } - } - - pwp_X11_blit(); -} - -/**********/ - -void rast2rgb(int n,int muller,int*r,int*g,int*b) -{ - int fg=n&15,bg=(n>>4)&15; - const char rgb[16*3] = - { 0,0,0, - 0,0,9, - 0,9,0, - 0,9,9, - 9,0,0, - 9,0,9, - 9,9,0, - 9,9,9, - 6,6,6, - 0,0,15, - 0,15,0, - 0,15,15, - 15,0,0, - 15,0,15, - 15,15,0, - 15,15,15 }; - - *r = (muller * (rgb[bg*3+0]*2 + rgb[fg*3+0]))/45; - *g = (muller * (rgb[bg*3+1]*2 + rgb[fg*3+1]))/45; - *b = (muller * (rgb[bg*3+2]*2 + rgb[fg*3+2]))/45; -} - -void pwp_X11_init_8bpp() -{ - int pal[256*3]; - int i=0; - for(;i<256;i++) - { - rast2rgb(i,255,pal+i*3,pal+i*3+1,pal+i*3+2); - pwp_X11.lookup[i]=(i|(i<<8)|(i<<16)|(i<<24)); - } - - pwp_X11_setpalette(pal,256); - - pwplib.dump_rast = pwp_X11_dump_rast_4x4; -} - -int pwp_X11_init() -{ - if(!(pwp_X11.disp=XOpenDisplay(NULL))) - { - pwpwrite("* no X11 available - trying tty\n"); - - return 0; - } - - pwp_X11.scr=DefaultScreen(pwp_X11.disp); - pwp_X11.rootw=DefaultRootWindow(pwp_X11.disp); - pwp_X11.gc=DefaultGC(pwp_X11.disp,pwp_X11.scr); - pwp_X11.vis=DefaultVisual(pwp_X11.disp,pwp_X11.scr); - - -/* -pwp_X11.opt.halvescans = 0; -pwp_X11.opt.interlace = 0; -*/ - - /****/ - - pwp_X11.bufw = 640; - pwp_X11.bufh = 480; - - pwplib.videobuf.width = 640/4; - pwplib.videobuf.height = 480/4; - - pwp_X11.opt.useXShm = 0; - - /****/ - - if(!pwp_X11_ready()) return 0; - - if(pwp_X11.bufd==8) - pwp_X11_init_8bpp(); - else { pwpwrite("* no 8bpp available\n"); return 0; } - - pwpwrite("* X11\n"); - - return 1; -} - - -#endif