From c4a574a2ed490a9ec77efc1392260ee4305f1fbf Mon Sep 17 00:00:00 2001 From: Ian C Date: Tue, 12 May 2020 21:08:42 +0000 Subject: Builds, just, and runs. --- Makefile | 27 + README | 64 ++ Xbit.c | 1876 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Xbit.h | 596 ++++++++++++++++++ fontset.h | 2020 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ galax.c | 1888 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ icon | 27 + sprdef.h | 517 ++++++++++++++++ 8 files changed, 7015 insertions(+) create mode 100644 Makefile create mode 100644 README create mode 100644 Xbit.c create mode 100644 Xbit.h create mode 100644 fontset.h create mode 100644 galax.c create mode 100644 icon create mode 100644 sprdef.h diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c5e5493 --- /dev/null +++ b/Makefile @@ -0,0 +1,27 @@ +# Makfile +# +OPTS=-g +OBJ=galax +CC=cc + +# Paths to X11 includes and libraries. Edit as appropriate for your system +# +DIRS=-L/usr/openwin/lib -I/usr/openwin/include -L/usr/X11R6/lib + +# Add on -lsocket for solaris 2 (and perhaps other SysV's) +# +LIB=-lXext -lX11 -lm + +ALL: $(OBJ) + +$(OBJ): Xbit.o $(OBJ).o + $(CC) $(OPTS) $(DIRS) -o $(OBJ) $(OBJ).o Xbit.o $(LIB) + +$(OBJ).o: Xbit.h $(OBJ).c + $(CC) $(OPTS) $(DIRS) -c $(OBJ).c + +Xbit.o: Xbit.c Xbit.h fontset.h + $(CC) $(OPTS) $(DIRS) -c Xbit.c + +clean: + rm -f Xbit.o $(OBJ).o $(OBJ) core hisc.gal diff --git a/README b/README new file mode 100644 index 0000000..ca535c7 --- /dev/null +++ b/README @@ -0,0 +1,64 @@ + Galax 1.4 + Presented by Noddybox 97 + +You should find in the archive : + +README This file +Makefile Simple bog standard make file for galax +galax.c Main code +sprdef.h Sprite definitions +Xbit.[ch] Library routines for easy X11 Xlib access +fontset.h XImage font definitions for Xbit library +icon Icon for Xbit library + + +BUILD INSTRUCTIONS +------------------ + +Though written under SunOS, it should compile OK on most flavours of unix. + + +USAGE +----- + +galax [-noshm] [scale] - Use scale to magnify and impact overly fast servers. + Use -noshm as well if your server is still too fast + to disable MIT-SHM usage. (Note shm usage will be + disabled if your server doesn't support it anyway). + +GALAX KEYS +---------- + +Z Left +C Right +. Shoot +Q Quit (from title page), or quit back to title page +P Pause while playing + + +INSTRUCTIONS +------------ + +Shoot everything that looks vaguely ET shaped. + + +NOTES +----- + +galax switches off auto repeat to enhance the keyboard reading when running. +Auto repeat is re-enabled when you exit the game cleanly from the title page. + +If you kill it mid-game, auto repeat will still be off. It can be re-enabled +from the shell with 'xset r on'. + + + +Have Fun. + + + +email ianc@noddybox.demon.co.uk +URL http://www.noddybox.demon.co.uk + + +Release 1.4 Wed Nov 12 11:24:23 GMT 1997 diff --git a/Xbit.c b/Xbit.c new file mode 100644 index 0000000..16c1b8c --- /dev/null +++ b/Xbit.c @@ -0,0 +1,1876 @@ +/* + + Xbit - Simple xlib interface + + Copyright (C) 2005 Ian Cowburn (ianc@noddybox.demon.co.uk) + + 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. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + ------------------------------------------------------------------------- + + This is a bit messy as it based on very old K&R code. + +*/ +static char rcs_id[]="$Id: Xbit.c 11 2006-05-02 19:02:49Z ianc $"; + +#include +#include +#include +#include + +#include + +/* #include */ +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include "Xbit.h" + +#include "icon" + +#define WARN(x) fprintf(stderr,"%s(%d) : Warning:%s\n",__FILE__,__LINE__,x); +#define WARN1(x,y) fprintf(stderr,"%s(%d) : Warning:%s %s\n",__FILE__,__LINE__,x,y); + + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#define ABS(x) ((x) < 0 ? (-(x)) : (x)) + + +/* GLOBALS +*/ + +#define MAXPM 256 + +typedef struct WEntry +{ + Window w; + Pixmap pm[MAXPM]; + int used_MIT_SHM; + XShmSegmentInfo + shm_info; + int pmi; + int buffer; + int use_pm; + int multi; + int multino; + ulong multicls; + GC gc; + int ox; + int oy; + int ww; + int wh; + int pw; + int ph; + int func; + int lastuserfunc; + ulong lastfg; + int spline_thresh; + struct WEntry *next; +} WEntry; + + +static WEntry *whead=NULL; +static WEntry *wtail=NULL; + +static WEntry *current=NULL; + +static WEntry *stack[128]; +static int sttop; + +static Display *display=NULL; +static XVisualInfo vinfo; +static int screen; + +static int use_shm=True; + +static ulong xb_black; +static ulong xb_white; + +/* Buffer for Xprintf() and XIprintf() +*/ +static char prbuf[1024]; + +/* Definitions for XImage 8x8 charset +*/ +#include "fontset.h" + + +/* Put globals +*/ +static int no_plots; +static XPoint points[MAX_PUTPLOTS]; + + +/* Set write mode +*/ +#define WM(c) do {if ((c)!=current->func) { \ + XSetFunction(display,current->gc,c); \ + current->func=c; } } while(0) + + +/* Set foreground funcrion +*/ +#define FG(c) do {if ((c)!=current->lastfg) { \ + XSetForeground(display,current->gc,c); \ + current->lastfg=c; } } while(0) + + +/* Stack current windows +*/ +#define PUSHW do {stack[sttop++]=current;} while(0) +#define POPW do {current=stack[--sttop];} while(0) + + +/* ------------- FUNCTIONS ------------- */ + +static void CreateWEntry(Window w, GC g, int ww, int wh) +{ + WEntry *new; + + if (!(new=malloc(sizeof(WEntry)))) + { + fprintf(stderr,"%s(%d) : FATAL:%s\n",__FILE__,__LINE__, + "Couldn't malloc() WEntry"); + exit(1); + } + + if (!whead) + { + whead=new; + wtail=new; + } + else + { + wtail->next=new; + wtail=new; + } + + new->next=NULL; + + new->w=w; + new->gc=g; + + new->pm[0]=0; + new->pm[1]=0; + new->pmi=0; + new->buffer=True; + new->use_pm=True; + new->multi=False; + new->ox=0; + new->oy=0; + new->ww=ww; + new->wh=wh; + new->pw=0; + new->ph=0; + new->func=GXcopy; + new->lastuserfunc=GXcopy; + new->lastfg=-1; + new->spline_thresh=1; + new->used_MIT_SHM=False; +} + + +XImage *CreateXImage(void) +{ + XImage *img; + char *p; + + if (!use_shm) + { + switch(vinfo.depth) + { + case 8: + p=malloc(current->pw*current->ph*1); + break; + case 16: + p=malloc(current->pw*current->ph*2); + break; + default: + p=malloc(current->pw*current->ph*4); + break; + } + + if (!p) + { + fprintf(stderr,"%s(%d) : FATAL:%s\n",__FILE__,__LINE__, + "Couldn't malloc() XImage data"); + exit(1); + } + + img=XCreateImage + (display, + vinfo.visual, + vinfo.depth, /* Image depth */ + ZPixmap, /* Image format */ + 0, /* Offset */ + p, /* Data */ + current->pw, /* Width */ + current->ph, /* Height */ + 8, /* Bitmap pad */ + 0); + } + else + { + img=XShmCreateImage(display, + vinfo.visual, + vinfo.depth, + ZPixmap, + NULL, + &(current->shm_info), + current->pw, + current->ph); + + if (!img) + return(NULL); + + current->used_MIT_SHM=True; + + /* Get shared memory for image + */ + current->shm_info.shmid=shmget(IPC_PRIVATE, + img->bytes_per_line*img->height, + IPC_CREAT|0777); + + if (current->shm_info.shmid<0) + { + WARN("Couldn't get MITSHM mem"); + exit(1); + } + + current->shm_info.shmaddr=shmat(current->shm_info.shmid,0,0); + img->data=current->shm_info.shmaddr; + + current->shm_info.readOnly=False; + + /* Try and attached shared memory + */ + if (!XShmAttach(display,&(current->shm_info))) + { + WARN("Failed to attach MITSHM block"); + exit(1); + } + + XSync(display,False); + } + + ClsXImage(img); + return img; +} + + +void ClsXImage(XImage *img) +{ + memset(img->data,0,img->bytes_per_line*img->height); +} + + +void DestroyXImage(XImage *img) +{ + if (current->used_MIT_SHM) + { + XShmDetach(display,&(current->shm_info)); + + if (current->shm_info.shmaddr) + shmdt(current->shm_info.shmaddr); + + if (current->shm_info.shmid>=0) + shmctl(current->shm_info.shmid,IPC_RMID,0); + + current->used_MIT_SHM=False; + } + + XDestroyImage(img); + XSync(display,False); +} + + +void SetCurrentWin(Window w) +{ + WEntry *l; + + l=whead; + + while(l) + { + if (l->w==w) + { + current=l; + return; + } + + l=l->next; + } + + WARN("Asked for non-existant window"); +} + + +int GetVisualDepth(void) +{ + return vinfo.depth; +} + + +Window OpenWin (int argc, + char **argv, + char *title, + int wx, int wy, int ww, int wh, + int pw, int ph, + unsigned long ev, + XSizeHints *hints, + ulong *black, ulong *white) +{ + Window window; + GC gc; + char *display_name=NULL; + Pixmap icon_pixmap; + int i,j,k; + + if (!display) + { + if ((display=XOpenDisplay(display_name))==NULL) + { + fprintf(stderr,"%s: can't connect to %s\n", + argv[0], XDisplayName(display_name)); + exit(-1); + } + + /* Try and find shared memory extension + */ + use_shm=XQueryExtension(display,"MIT-SHM",&i,&j,&k); + + /* Find a nice 8-bit visual for us to use... + */ + if (!XMatchVisualInfo(display,DefaultScreen(display),8, + PseudoColor,&vinfo)) + if (!XMatchVisualInfo(display,DefaultScreen(display),16, + TrueColor,&vinfo)) + if (!XMatchVisualInfo(display,DefaultScreen(display),24, + TrueColor,&vinfo)) + if (!XMatchVisualInfo(display,DefaultScreen(display),32, + TrueColor,&vinfo)) + { + WARN("no visual found!\n"); + exit(1); + } + } + + screen=DefaultScreen(display); + + xb_black=BlackPixel(display,screen); + xb_white=WhitePixel(display,screen); + *black=xb_black; + *white=xb_white; + + window=XCreateWindow(display, + RootWindow(display,screen), + wx,wy,ww,wh,1, + vinfo.depth, + InputOutput, + vinfo.visual, + 0,NULL); + + icon_pixmap=XCreateBitmapFromData( + display, + window, + icon_bits, + icon_width,icon_height); + + XSetStandardProperties( + display, + window, + title, + title, + icon_pixmap, + argv,argc, + hints); + + XSelectInput (display,window,ev); + + gc=XCreateGC(display,window,0,NULL); + + XSetForeground(display,gc,*black); + XSetBackground(display,gc,*white); + XSetPlaneMask(display,gc,AllPlanes); + XSetGraphicsExposures(display,gc,False); + + XMapWindow (display,window); + + CreateWEntry(window,gc,ww,wh); + SetCurrentWin(window); + + Resize(pw,ph); + + return window; +} + + +Window OpenRootWin (ulong *black,ulong *white,int *w,int *h,int pw,int ph) +{ + Window window; + GC gc; + char *display_name=NULL; + int i,j,k; + + if (!display) + { + int depth; + + if ((display=XOpenDisplay(display_name))==NULL) + { + fprintf(stderr,"can't connect to %s\n",XDisplayName(display_name)); + exit(-1); + } + + screen=DefaultScreen(display); + + depth=DefaultDepth(display,screen); + + /* Try and find shared memory extension + */ + use_shm=XQueryExtension(display,"MIT-SHM",&i,&j,&k); + + /* Find a visual for us to use... + */ + if (!XMatchVisualInfo(display,DefaultScreen(display),depth, + depth==8 ? PseudoColor:TrueColor,&vinfo)) + { + WARN("no visual to match the root window!"); + exit(1); + } + } + + xb_black=BlackPixel(display,screen); + xb_white=WhitePixel(display,screen); + *black=xb_black; + *white=xb_white; + + window=RootWindow(display,screen); + + gc=XCreateGC(display,window,0,NULL); + + XSetForeground(display,gc,*black); + XSetBackground(display,gc,*white); + XSetPlaneMask(display,gc,AllPlanes); + + XMapWindow (display,window); + + *w=DisplayWidth(display,screen); + *h=DisplayHeight(display,screen); + + CreateWEntry(window,gc,*w,*h); + SetCurrentWin(window); + + Resize(pw,ph); + + return window; +} + + +XFontStruct *XUseFont(const char *n) +{ + XFontStruct *ft; + + if (ft=XLoadQueryFont(display,n)) + XSetFont(display,current->gc,ft->fid); + else + WARN1("couldn't load font:",n); + + return ft; +} + + +void XUseCursor(const char *bm, const char *mask, XColor fg, XColor bg) +{ + Pixmap b,m; + Cursor curs; + int bmw,bmh,bmx,bmy; + int maskw,maskh,maskx,masky; + + if (XReadBitmapFile(display,current->w,bm,&bmw,&bmh,&b,&bmx,&bmy) + ==BitmapOpenFailed) + { + WARN1("Couldn't read in cursor file:",bm); + return; + } + + if (XReadBitmapFile(display,current->w,mask,&maskw,&maskh,&m,&maskx,&masky) + ==BitmapOpenFailed) + { + WARN1("Couldn't read in mask file:",bm); + return; + } + + curs=XCreatePixmapCursor(display,b,m,&fg,&bg,bmx,bmy); + + XDefineCursor(display,current->w,curs); + + XFreePixmap(display,b); + XFreePixmap(display,m); +} + + +void LoadBitmap(const char *fn,int x,int y, int resize) +{ + Pixmap bm; + int w,h,hx,hy; + int cw,ch; + + if (!current->use_pm) + { + WARN("Need pixmaps to load in bitmap"); + } + + if (XReadBitmapFile(display,current->w,fn,&w,&h,&bm,&hx,&hy) + ==BitmapOpenFailed) + { + WARN1("Couldn't read in bitmap file:",fn); + return; + } + + if ((w!=current->pw)||(h!=current->ph)) + { + if (resize) + { + Resize(w+x,h+y); + cw=w; + ch=h; + } + else + { + cw=current->pw-x; + ch=current->ph-y; + } + } + + XCopyPlane(display,bm,current->pm[current->pmi], + current->gc,0,0,cw,ch,x,y,1L); + + XFreePixmap(display,bm); +} + + +Pixmap GetBitmap(const char *fn, int *w, int *h, int *hx, int *hy) +{ + Pixmap bm,ret; + + if (XReadBitmapFile(display,current->w,fn,w,h,&bm,hx,hy) + ==BitmapOpenFailed) + { + WARN1("Couldn't read in bitmap file:",fn); + return(0); + } + + ret=XCreatePixmap(display,current->w,*w,*h,vinfo.depth); + + XCopyPlane(display,bm,ret,current->gc,0,0,*w,*h,0,0,1L); + + XFreePixmap(display,bm); + + return ret; +} + + +void DrawXImage(XImage *img) +{ + if (use_shm) + XShmPutImage (display, + current->pm[0], + current->gc, + img, + 0,0, + 0,0, + current->pw,current->ph, + False); + else + XPutImage (display, + current->pm[0], + current->gc, + img, + 0,0, + 0,0, + current->pw,current->ph); +} + + +void Resize(int w,int h) +{ + int f; + + if (www) + w=current->ww; + + if (hwh) + h=current->wh; + + current->pw=w; + current->ph=h; + + if (!current->use_pm) + return; + + if (current->multi) + { + WM(GXcopy); + FG(current->multicls); + for(f=0;fmultino;f++) + { + XFreePixmap(display,current->pm[f]); + current->pm[f]=XCreatePixmap(display,current->w,w,h,vinfo.depth); + XFillRectangle(display,current->pm[f], + current->gc,0,0,current->pw,current->ph); + } + WM(current->lastuserfunc); + return; + } + + if (current->pm[0]) + { + XFreePixmap(display,current->pm[0]); + + if (current->buffer) + XFreePixmap(display,current->pm[1]); + } + + current->pmi=0; + + current->pm[0]=XCreatePixmap(display,current->w,w,h,vinfo.depth); + + if (current->buffer) + current->pm[1]=XCreatePixmap(display,current->w,w,h,vinfo.depth); +} + + +void Redraw(int x,int y) +{ + if ((x+current->ww)>current->pw) + x=current->pw-current->ww; + + if ((y+current->wh)>current->ph) + y=current->ph-current->wh; + + current->ox=x; + current->oy=y; + + if (!current->use_pm) + { + XSync(display,False); + return; + } + + WM(GXcopy); + + if (current->buffer) + { + XCopyArea(display,current->pm[current->pmi^1],current->w, + current->gc,x,y,current->ww,current->wh,0,0); + XSync(display,False); + } + else + { + XCopyArea(display,current->pm[current->pmi],current->w, + current->gc,x,y,current->ww,current->wh,0,0); + XSync(display,False); + } + + WM(current->lastuserfunc); +} + + +Pixmap GetCurrentPixmap(void) + +{ + if (!current->use_pm) + return(0); + + return current->pm[current->pmi]; +} + +GC GetCurrentGC(void) + +{ + return current->gc; +} + + +void DisableDoubleBuffer(void) + +{ + current->pmi=0; + XFreePixmap(display,current->pm[1]); + current->buffer=False; +} + + +void DisablePixmap(void) + +{ + current->pmi=0; + + if (current->use_pm) + XFreePixmap(display,current->pm[0]); + + if (current->buffer) + XFreePixmap(display,current->pm[1]); + + current->buffer=False; + current->use_pm=False; + current->pm[0]=current->w; +} + + +void DisableShm(void) +{ + use_shm=False; +} + + +void EnableBuffers(int no, ulong clscol) +{ + int f; + + current->pmi=0; + + if (current->use_pm) + XFreePixmap(display,current->pm[0]); + + if (current->buffer) + XFreePixmap(display,current->pm[1]); + + current->buffer=False; + current->use_pm=True; + current->multi=True; + + if (no>MAXPM) + current->multino=MAXPM; + else + current->multino=no; + + current->multicls=clscol; + + WM(GXcopy); + FG(current->multicls); + for(f=0;fmultino;f++) + { + current->pm[f]=XCreatePixmap(display,current->w,current->ww,current->wh, + vinfo.depth); + XFillRectangle(display,current->pm[f], + current->gc,0,0,current->pw,current->ph); + } + + WM(current->lastuserfunc); +} + + +void Pageflip(void) +{ + if (current->buffer) + current->pmi=current->pmi^1; + + if (current->multi) + if ((++current->pmi)>=current->multino) + current->pmi=0; +} + + +void SetAsBackdrop(void) +{ + XSetWindowBackgroundPixmap (display, current->w, current->pm[current->pmi]); + XSync(display,False); +} + + +void XUseFunction(int f) +{ + WM(f); + current->lastuserfunc=f; +} + + +void XSetLineStyle(unsigned int w, int ls, int cs, int js) +{ + XSetLineAttributes(display,current->gc,w,ls,cs,js); +} + + +void XCls(ulong c) +{ + if (current->use_pm) + { + WM(GXcopy); + FG(c); + XFillRectangle(display,current->pm[current->pmi], + current->gc,0,0,current->pw,current->ph); + WM(current->lastuserfunc); + } + else + { + /* + XSetBackground(display,current->gc,c); + XClearWindow(display,current->pm[0]); + */ + WM(GXcopy); + FG(c); + XFillRectangle(display,current->pm[current->pmi], + current->gc,0,0,current->pw,current->ph); + WM(current->lastuserfunc); + } +} + + +void XPlot(int x,int y, ulong c) +{ + FG(c); + XDrawPoint(display,current->pm[current->pmi],current->gc,x,y); +} + + +void XLine(int x1,int y1,int x2,int y2, ulong c) +{ + FG(c); + XDrawLine(display,current->pm[current->pmi],current->gc,x1,y1,x2,y2); +} + + +void SetSplineThresh(int t) +{ + current->spline_thresh=t; +} + + +static void XDoSpline(int x0,int y0,int x1,int y1,int x2,int y2,ulong c) +{ + int xa, ya, xb, yb, xc, yc, xp, yp; + + if ((x0==x1==x2)&&(y0==y1==y2)) + { + XPlot(x0,y0,c); + return; + } + + if ((x0==x1)&&(y0==y1)) + { + XLine(x1,y1,x2,y2,c); + return; + } + + if ((x0==x2)&&(y0==y2)) + { + XLine(x0,y0,x1,y1,c); + return; + } + + if ((x1==x2)&&(y1==y2)) + { + XLine(x0,y0,x2,y2,c); + return; + } + + xa = ( x0 + x1 ) / 2; + ya = ( y0 + y1 ) / 2; + xc = ( x1 + x2 ) / 2; + yc = ( y1 + y2 ) / 2; + xb = ( xa + xc ) / 2; + yb = ( ya + yc ) / 2; + + xp = ( x0 + xb ) / 2; + yp = ( y0 + yb ) / 2; + + if ( ABS( xa - xp ) + ABS( ya - yp ) > current->spline_thresh ) + XDoSpline(x0,y0,xa,ya,xb,yb,c); + else + XDrawLine(display,current->pm[current->pmi],current->gc,x0,y0,xb,yb); + + xp = ( x2 + xb ) / 2; + yp = ( y2 + yb ) / 2; + if ( ABS( xc - xp ) + ABS( yc - yp ) > current->spline_thresh ) + XDoSpline(xb,yb,xc,yc,x2,y2,c); + else + XDrawLine(display,current->pm[current->pmi],current->gc,xb,yb,x2,y2); +} + + +void XSpline(int x1,int y1,int x2,int y2,int x3,int y3,ulong c) +{ + FG(c); + + if ((x1==x2==x3)&&(y1==y2==y3)) + { + XPlot(x1,y1,c); + return; + } + + if ((x1==x2)&&(y1==y2)) + { + XLine(x2,y2,x3,y3,c); + return; + } + + if ((x1==x3)&&(y1==y3)) + { + XLine(x1,y1,x2,y2,c); + return; + } + + if ((x2==x3)&&(y2==y3)) + { + XLine(x1,y1,x3,y3,c); + return; + } + + XDoSpline(x1,y1,x2,y2,x3,y3,c); +} + + +void XPrint(int x,int y, const char *s, ulong c) + +{ + FG(c); + XDrawString(display,current->pm[current->pmi],current->gc,x,y,s,strlen(s)); +} + + +void Xprintf(int x, int y, ulong colour, const char *fmt, ...) +{ + va_list va; + + va_start(va,fmt); + vsprintf(prbuf,fmt,va); + va_end(va); + + FG(colour); + XDrawString(display,current->pm[current->pmi],current->gc, + x,y,prbuf,strlen(prbuf)); +} + + +void XISetFont(XImageFont n) +{ + switch(n) + { + case XI_FONT1: + xifont=xifont1; + break; + case XI_FONT2: + xifont=xifont2; + break; + } +} + + +static void XIPlot(XImage *img,int x,int y, ulong c) +{ + if ((y<0)||(y>=img->height)||(x<0)||(x>=img->width)) + return; + + XPutPixel(img,x,y,c); +} + + +void XIprintf(XImage *img, int x, int y, int sx, int sy, ulong col, + const char *fmt, ...) +{ + int f,px,py,psx,psy,ch; + char *data; + va_list arg; + + va_start(arg,fmt); + vsprintf(prbuf,fmt,arg); + va_end(arg); + + if ((sx==1)&&(sy==1)) + { + for(f=0;f=0)&&(y+pyheight)) + for(px=0;px=0)&&(x+pxwidth)) + if (xifont[ch].data[py][px]) + XPutPixel(img,x+px,y+py,col); + + x+=XIFONTW; + } + } + else + { + for(f=0;fpm[current->pmi],current->gc,x,y,w,h); +} + + +void XFillBox(int x,int y,int w,int h,ulong c) +{ + FG(c); + XFillRectangle(display,current->pm[current->pmi],current->gc,x,y,w,h); +} + + +void XCircle(int x,int y,int rx,int ry,int a1,int a2,ulong c) +{ + FG(c); + XDrawArc(display,current->pm[current->pmi],current->gc,x,y,rx,ry,a1,a2); +} + + +void XFillCircle(int x,int y,int rx,int ry,int a1,int a2,ulong c) +{ + FG(c); + XFillArc(display,current->pm[current->pmi],current->gc,x,y,rx,ry,a1,a2); +} + + +void XStartPlots(void) +{ + no_plots=0; +} + + +void XAddPlot(int x,int y) +{ + points[no_plots].x=x; + points[no_plots].y=y; + + no_plots++; +} + + +void XPutPlots(ulong c) +{ + FG(c); + XDrawPoints(display,current->pm[current->pmi],current->gc, + points,no_plots,CoordModeOrigin); +} + + +void XPutPlotsAsLines(ulong c) +{ + FG(c); + XDrawLines(display,current->pm[current->pmi],current->gc, + points,no_plots,CoordModeOrigin); +} + + +void XFillPoly(XPoint *xp,int n,int shape,ulong c) +{ + FG(c); + XFillPolygon(display,current->pm[current->pmi],current->gc,xp,n, + shape,CoordModeOrigin); +} + + +void XScroll(int dx,int dy) +{ + int destx,desty,srcx,srcy; + int w,h; + + if (dx>=0) + { + destx=0; + srcx=dx; + w=current->pw-dx; + } + + if (dx<0) + { + destx=-(dx); + srcx=0; + w=current->pw+dx; + } + + if (dy>=0) + { + desty=0; + srcy=dy; + h=current->ph-dy; + } + + if (dy<0) + { + desty=-(dy); + srcy=0; + h=current->ph+dy; + } + + WM(GXcopy); + XCopyArea(display,current->pm[current->pmi],current->pm[current->pmi], + current->gc,srcx,srcy,current->pw-dx,current->ph,destx,desty); + WM(current->lastuserfunc); +} + + +void XCopy(int sx,int sy,int w,int h,int dx,int dy) +{ + WM(GXcopy); + XCopyArea(display,current->pm[current->pmi],current->pm[current->pmi], + current->gc,sx,sy,current->pw,current->ph,dx,dy); + WM(current->lastuserfunc); +} + + +void XPut(Pixmap spm,int sx,int sy,int w,int h,int dx,int dy) +{ + WM(GXcopy); + XCopyArea(display,spm,current->pm[current->pmi], + current->gc,sx,sy,w,h,dx,dy); + WM(current->lastuserfunc); +} + + +void XGet(Pixmap dpm,int sx,int sy,int w,int h,int dx,int dy) +{ + WM(GXcopy); + XCopyArea(display,dpm,current->pm[current->pmi], + current->gc,sx,sy,w,h,dx,dy); + WM(current->lastuserfunc); +} + + +void ScreenCopy(void) +{ + if (current->buffer) + { + WM(GXcopy); + XCopyArea(display,current->pm[current->pmi^1], + current->pm[current->pmi],current->gc,0,0, + current->pw,current->ph,0,0); + WM(current->lastuserfunc); + } +} + + +Display *GetDisplay(void) +{ + return display; +} + + + +void XFinished(void) +{ + XCloseDisplay(display); +} + + +void XDoTillButtonPress(XVoidCallback func) +{ + XEvent event; + int ignore=True; + + while (True) + if (XPending(display)) + { + XNextEvent(display,&event); + + switch (event.type) + { + case Expose: + if (event.xexpose.count) + break; + Redraw(current->ox,current->oy); + break; + + case ButtonPress: + if (event.xbutton.button) + if (!ignore) + return; + break; + } + } + else + if (func) + switch (func()) + { + case XFUNCCONT: + ignore=False; + break; + + case XFUNCIGNORE: + ignore=True; + break; + + case XFUNCSTOP: + return; + break; + } + +} + + +void XDoMouse(XButtonCallback button, XMoveCallBack move, XVoidCallback process) +{ + XEvent event; + + while (True) + if ((XPending(display))||(!process)) + { + XNextEvent(display,&event); + + switch (event.type) + { + case Expose: + if (event.xexpose.count) + break; + Redraw(current->ox,current->oy); + break; + + case MotionNotify: + if (move) + switch(move(event.xmotion.window, + event.xmotion.x,event.xmotion.y)) + { + case XFUNCSTOP: + return; + break; + } + break; + + case ButtonPress: + if (button) + switch(button(event.xbutton.window,XPRESS, + event.xbutton.button, + event.xbutton.x,event.xbutton.y)) + { + case XFUNCSTOP: + return; + break; + } + break; + } + } + else + if (process) + switch (process()) + { + case XFUNCCONT: + case XFUNCIGNORE: + break; + + case XFUNCSTOP: + return; + break; + } + +} + + +static int IsMoveWin(Window w, XWindowMoveCallBack call[] ,int *i) +{ + int f; + + if (!call) + { + return(False); + } + + f=0; + + while(call[f].w) + { + if (call[f].w==w) + { + *i=f; + return call[f].func ? True:False; + } + else + { + f++; + } + } + + return False; +} + + +static int IsButtonWin(Window w, XWindowButtonCallback call[] ,int *i) +{ + int f; + + if (!call) + { + return(False); + } + + f=0; + + while(call[f].w) + { + if (call[f].w==w) + { + *i=f; + return call[f].func ? True:False; + } + else + { + f++; + } + } + + return False; +} + + +static int IsKeyWin(Window w, XWindowKeyCallback call[] ,int *i) +{ + int f; + + if (!call) + { + return(False); + } + + f=0; + + while(call[f].w) + { + if (call[f].w==w) + { + *i=f; + return call[f].func ? True:False; + } + else + { + f++; + } + } + + return False; +} + + +void XDoWindows(XWindowButtonCallback button[], + XWindowMoveCallBack move[], + XWindowKeyCallback key[], + XVoidCallback process) +{ + int i; + XEvent event; + + while (True) + if ((XPending(display))||(!process)) + { + XNextEvent(display,&event); + + switch (event.type) + { + case Expose: + if (event.xexpose.count) + break; + + PUSHW; + SetCurrentWin(event.xexpose.window); + Redraw(current->ox,current->oy); + POPW; + + break; + + case MotionNotify: + if (IsMoveWin(event.xmotion.window,move,&i)) + { + switch(move[i].func(event.xmotion.window, + event.xmotion.x, + event.xmotion.y)) + { + case XFUNCSTOP: + return; + break; + } + } + break; + + case ButtonPress: + if (IsButtonWin(event.xbutton.window,button,&i)) + { + switch(button[i].func + (event.xbutton.window, + XPRESS, + event.xbutton.button, + event.xbutton.x,event.xbutton.y)) + { + case XFUNCSTOP: + return; + break; + } + } + break; + + case ButtonRelease: + if (IsButtonWin(event.xbutton.window,button,&i)) + { + switch(button[i].func + (event.xbutton.window, + XRELEASE, + event.xbutton.button, + event.xbutton.x,event.xbutton.y)) + { + case XFUNCSTOP: + return; + break; + } + } + break; + + case KeyPress: + if (IsKeyWin(event.xkey.window,key,&i)) + { + switch(key[i].func(event.xkey.window, + XPRESS, + &event)) + { + case XFUNCSTOP: + return; + break; + } + } + break; + + case KeyRelease: + if (IsKeyWin(event.xkey.window,key,&i)) + { + switch(key[i].func(event.xkey.window, + XRELEASE, + &event)) + { + case XFUNCSTOP: + return; + break; + } + } + break; + + default: + break; + } + } + else + if (process) + { + switch (process()) + { + case XFUNCCONT: + case XFUNCIGNORE: + break; + + case XFUNCSTOP: + return; + break; + } + } +} + + +/* Sprite routines */ +void LoadSprite(const char *fn, XSprite *spr, const XColor xc[256]) +{ + Pixmap piximg,pixmask,pixsave; + int fd,x,y; + char magic[11]; + unsigned char *data,*p; + unsigned short us; + GC gc; + + if ((fd=open(fn,O_RDONLY))==-1) + { + WARN1("Couldn't open sprite file",fn); + return; + } + + read(fd,magic,11); + + if (strncmp(magic,"XbitSprite",10)) + { + WARN1(fn,"is not a sprite file!"); + close(fd); + return; + } + + spr->x=spr->y=0; + + read(fd,&us,sizeof(unsigned short)); + spr->w=ntohs(us); + read(fd,&us,sizeof(unsigned short)); + spr->h=ntohs(us); + + if (!(data=malloc(spr->w*spr->h))) + { + WARN("Couldn't grab memory for sprite image"); + close(fd); + return; + } + + if (read(fd,data,spr->w*spr->h)!=spr->w*spr->h) + { + WARN("Couldn't load sprite image"); + close(fd); + free(data); + return; + } + + close(fd); + + gc=XCreateGC(display,current->w,0,NULL); + + XSetPlaneMask(display,gc,AllPlanes); + XSetGraphicsExposures(display,gc,False); + + piximg=XCreatePixmap(display,current->w,spr->w,spr->h,vinfo.depth); + pixmask=XCreatePixmap(display,current->w,spr->w,spr->h,vinfo.depth); + pixsave=XCreatePixmap(display,current->w,spr->w,spr->h,vinfo.depth); + + p=data; + + for(y=0;yh;y++) + { + for(x=0;xw;x++) + { + XSetForeground(display,gc,xc[*p].pixel); + XDrawPoint(display,piximg,gc,x,y); + + if (*p) + XSetForeground(display,gc,xb_white); + else + XSetForeground(display,gc,xb_black); + + XDrawPoint(display,pixmask,gc,x,y); + + p++; + } + } + + spr->data=piximg; + spr->mask=pixmask; + spr->save=pixsave; + + free(data); +} + + +void XDrawSprites(XSprite *spr[],int no, XSpriteControl ctl) +{ + int f; + + WM(GXcopy); + + if (!(ctl&XSPRNOSAVE)) + for(f=0;fbuffer) + { + spr[f]->lx=spr[f]->x; + spr[f]->ly=spr[f]->y; + XCopyArea(display,current->pm[current->pmi^1], + spr[f]->save,current->gc,spr[f]->x,spr[f]->y, + spr[f]->w,spr[f]->h,0,0); + } + else + { + spr[f]->lx=spr[f]->x; + spr[f]->ly=spr[f]->y; + XCopyArea(display,current->pm[current->pmi], + spr[f]->save,current->gc,spr[f]->x,spr[f]->y, + spr[f]->w,spr[f]->h,0,0); + } + + WM(GXand); + for(f=0;fbuffer) + XCopyArea(display,spr[f]->mask,current->pm[current->pmi^1], + current->gc,0,0, + spr[f]->w,spr[f]->h,spr[f]->x,spr[f]->y); + else + XCopyArea(display,spr[f]->mask,current->pm[current->pmi], + current->gc,0,0, + spr[f]->w,spr[f]->h,spr[f]->x,spr[f]->y); + + WM(GXor); + for(f=0;fbuffer) + XCopyArea(display,spr[f]->data,current->pm[current->pmi^1], + current->gc,0,0, + spr[f]->w,spr[f]->h,spr[f]->x,spr[f]->y); + else + XCopyArea(display,spr[f]->data,current->pm[current->pmi], + current->gc,0,0, + spr[f]->w,spr[f]->h,spr[f]->x,spr[f]->y); + + WM(current->lastuserfunc); +} + + +void XEraseSprites(XSprite *spr[],int no) +{ + int f; + + WM(GXcopy); + + for(f=0;fbuffer) + XCopyArea(display,spr[f]->save,current->pm[current->pmi^1], + current->gc,0,0, + spr[f]->w,spr[f]->h,spr[f]->lx,spr[f]->ly); + else + XCopyArea(display,spr[f]->save,current->pm[current->pmi], + current->gc,0,0, + spr[f]->w,spr[f]->h,spr[f]->lx,spr[f]->ly); + + WM(current->lastuserfunc); +} + + +void LoadColormap(const char *fn, XColor xc[256]) +{ + int fd,f; + unsigned short us; + + if ((fd=open(fn,O_RDONLY))==-1) + { + WARN1("Couldn't open cmap",fn); + return; + } + + for(f=0;f<256;f++) + { + xc[f].pixel=f; + xc[f].flags=DoRed|DoGreen|DoBlue; + read(fd,&us,sizeof(unsigned short)); + xc[f].red=ntohs(us); + read(fd,&us,sizeof(unsigned short)); + xc[f].green=ntohs(us); + read(fd,&us,sizeof(unsigned short)); + xc[f].blue=ntohs(us); + } +} + + +void AllocColors(int no,ulong pix[],const char *name[]) +{ + int f,col; + XColor xc; + + for(f=0;f(0x8000*3)) + { + WARN("defaulting to white"); + pix[f]=WhitePixel(display,screen); + } + else + { + WARN("defaulting to black"); + pix[f]=BlackPixel(display,screen); + } + } + } + else + { + WARN1("not a color ",name[f]); + pix[f]=WhitePixel(display,screen); + } + } +} + + +void AllocColorsRGB(int no, ulong pix[], const Colour col[]) +{ + int f; + XColor xc; + + for(f=0;f(0x8000*3)) + { + WARN("defaulting to white"); + pix[f]=WhitePixel(display,screen); + } + else + { + WARN("defaulting to black"); + pix[f]=BlackPixel(display,screen); + } + } + } +} + + +void LoadSpriteDataSet (const char *cmapfn, + const char *sprfn[], + SpriteDataSet *set) +{ + int f,r,fd; + char magic[11]; + XColor xcol[256]; + Colour col[256]; + SpriteData *spr; + int no; + int used[256]; + unsigned short us; + unsigned char byte; + + + /* Allocate referenced table + */ + for(f=0;f<256;f++) + used[f]=-1; + + /* Count and allocate referenced sprites + */ + no=0; + while(sprfn[no]) + no++; + + /* Load in colourmap + */ + LoadColormap(cmapfn,xcol); + + set->no_col=0; + set->no_spr=no; + + /* Load in sprites and sort out colour usage + */ + spr=malloc(sizeof(SpriteData)*no); + + for(f=0;fno_col].r=xcol[byte].red; + col[set->no_col].g=xcol[byte].green; + col[set->no_col].b=xcol[byte].blue; + + used[byte]=set->no_col++; + } + + spr[f].data[r]=used[byte]; + } + + close(fd); + } + + /* Got all sprites - allocate and remap colours + */ + AllocColoursRGB(set->no_col,set->pix,col); + + /* Remap sprites + */ + for(f=0;fpix[spr[f].data[r]]; + + /* Set up return, all done + */ + set->spr=spr; +} + + +/* END OF FILE */ diff --git a/Xbit.h b/Xbit.h new file mode 100644 index 0000000..bfb1ab9 --- /dev/null +++ b/Xbit.h @@ -0,0 +1,596 @@ +/* + + lunar - Simple X11 Lunar Lander + + Copyright (C) 2005 Ian Cowburn (ianc@noddybox.demon.co.uk) + + 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. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + ------------------------------------------------------------------------- + +*/ + +#ifndef XBIT_H +#define XBIT_H "$Id: Xbit.h 7 2005-05-13 01:01:08Z ianc $" + + +/* + Version 2 of the Bitmap manipulation library for X + + Now supports : + + Multiple windows + Pixmaps bigger than the window + Mutiple pixmap buffers (upto a maxim of 256 per window) + XImage print routines + Better XImage support, defaulting to shared memory usage. + + IMPORTANT NOTES ON MIT-SHM SUPPORT : + + 1. Only call CreateXImage() ONCE per window. + + 2. If you wish resources to be freed properly on completion, it + is important that DestroyXImage() is called before exiting + with the window the XImage was created in relation to set + as the current window. + + 3. Allow the user to toggle MIT-SHM from a switch, as if the + server supports it, but using it is failing for some other + reason, then your program will be unable to run. + +*/ +#include +#include + + +/* Just as I'm a lazy typer +*/ +typedef unsigned char uchar; +typedef unsigned long ulong; + + +/* Maximums for PutPlots() +*/ +#define MAX_PUTPLOTS 4096 + + +/* Types and constants +*/ +#define MIN_ANG 0 +#define MAX_ANG 23040 + +typedef enum +{ + XFUNCCONT, + XFUNCIGNORE, + XFUNCSTOP +} XFuncControl; + +typedef struct +{ + int x,y; + unsigned short w,h; + int lx,ly; /* This field is 'private' */ + Pixmap data; /* This field is 'private' */ + Pixmap mask; /* This field is 'private' */ + Pixmap save; /* This field is 'private' */ +} XSprite; + +typedef enum +{ + XSPRSAVE, + XSPRNOSAVE +} XSpriteControl; + + +typedef struct +{ + int r,g,b; +} Colour; + +typedef Colour Color; + + +typedef enum +{ + XPRESS, + XRELEASE +} XPressRelease; + + +typedef XFuncControl (*XVoidCallback)(void); +typedef XFuncControl (*XMoveCallBack)(Window w, int x, int y); +typedef XFuncControl (*XButtonCallback)(Window w, XPressRelease mode, + int button, int x, int y); +typedef XFuncControl (*XKeyCallback)(Window w, XPressRelease mode, + XEvent *event); + +typedef struct +{ + Window w; + XMoveCallBack func; +} XWindowMoveCallBack; + +typedef struct +{ + Window w; + XButtonCallback func; +} XWindowButtonCallback; + +typedef struct +{ + Window w; + XKeyCallback func; +} XWindowKeyCallback; + + +/* XImage font defs +*/ +typedef enum +{ + XI_FONT1, + XI_FONT2 +} XImageFont; + + +/* Portable sprite data definitions - allows sprite data and colormap data to + be read from a list of files, returning + an array of RGB triplets defining the + colormap, and array of pixels + corresponding to those colours and a + series of sprite images with converted + pixel values. This means you can use + data normally read in just for the + XSprite routines on any format of display + mechanism. +*/ +#define SPRD_AT(spr,x,y) (*(spr.data+(x)+((y)*(spr.w)))) + +typedef struct +{ + int w,h; /* Width, height */ + ulong *data; /* Data */ +} SpriteData; + +typedef struct +{ + int no_col; /* No of colours used by sprites */ + ulong pix[256]; /* Array of pixel values */ + int no_spr; + SpriteData *spr; /* Array of sprite data */ +} SpriteDataSet; + + +/* Function Prototypes +*/ + +Window OpenWin + ( + int argc, + char *argv[], + char *title, + int Win_X, + int Win_Y, + int Win_Width, + int Win_Height, + int Pix_Width, + int Pix_Height, + unsigned long event_mask, + XSizeHints *hints, + ulong *black, + ulong *white + ); + +Window OpenRootWin + ( + ulong *black, ulong *white, + int *w, int *h, int Pix_Width, int Pix_Height + ); + +void SetCurrentWin + ( + Window w + ); + +int GetVisualDepth(void); + +XImage *CreateXImage(void); + +void ClsXImage + ( + XImage *img + ); + +void DestroyXImage + ( + XImage *img + ); + +XFontStruct + *XUseFont + ( + const char *font_name + ); + +void XUseCursor + ( + const char *bitmap_filename, + const char *mask_filename, + XColor fg, + XColor bg + ); + +void SetAsBackdrop(void); + +void DisableDoubleBuffer(void); + +void DisablePixmap(void); + +void DisableShm(void); + +void EnableBuffers + ( + int no, + ulong clscol + ); + +void LoadBitmap + ( + const char *fn, + int x, + int y, + int resize + ); + +Pixmap GetBitmap + ( + const char *fn, + int *width, + int *height, + int *hot_x, + int *hot_y + ); + +/* These 2 are for manipulating your own XImage structures +*/ +Pixmap GetCurrentPixmap(void); +GC GetCurrentGC(void); + +void Redraw + ( + int off_x, + int off_y + ); + +void DrawXImage + ( + XImage *img + ); + +/* Note that if this used with EnableBuffers() on, this will move to the next + buffer +*/ +void Pageflip(void); + +void Resize + ( + int pix_w, + int pix_h + ); + +void XSetLineStyle + ( + unsigned int line_width, + int line_style, + int cap_style, + int join_style + ); + +void XUseFunction + ( + int GC_function + ); + +void XCls + ( + ulong colour + ); + +void XPlot + ( + int x, + int y, + ulong colour + ); + +void XLine + ( + int x1, + int y1, + int x2, + int y2, + ulong colour + ); + +void SetSplineThresh + ( + int thresh + ); + +void XSpline + ( + int x1, + int y1, + int x2, + int y2, + int x3, + int y3, + ulong colour + ); + +void XPrint + ( + int x, + int y, + const char *string, + ulong colour + ); + +void Xprintf + ( + int x, + int y, + ulong colour, + const char *fmt, + ... + ); + +void XISetFont + ( + XImageFont font_no + ); + +void XIprintf + ( + XImage *img, + int x, + int y, + int scale_x, + int scale_y, + ulong colour, + const char *fmt, + ... + ); + +void XBox + ( + int x, + int y, + int w, + int h, + ulong colour + ); + +void XFillBox + ( + int x, + int y, + int w, + int h, + ulong colour + ); + +void XCircle + ( + int x, + int y, + int rx, + int ry, + int ang1, + int ang2, + ulong colour + ); + +void XFillCircle + ( + int x, + int y, + int rx, + int ry, + int ang1, + int ang2, + ulong colour + ); + +void XStartPlots(void); + +void XAddPlot + ( + int x, + int y + ); + +void XPutPlots + ( + ulong col + ); + +void XPutPlotsAsLines + ( + ulong col + ); + +void XFillPoly + ( + XPoint xp[], + int no_points, + int shape, + ulong col + ); + +void XScroll + ( + int dx, + int dy + ); + +void XCopy + ( + int srcx, + int srcy, + int w, + int h, + int destx, + int desty + ); + +void XPut + ( + Pixmap src, + int srcx, + int srcy, + int w, + int h, + int destx, + int desty + ); + +void XGet + ( + Pixmap dest, + int srcx, + int srcy, + int w, + int h, + int destx, + int desty + ); + +void ScreenCopy(void); + +Display *GetDisplay(void); + +void XFinished(void); + +/* The following event routines expect mouse events to be set in the + event mask */ + +void XDoTillButtonPress + ( + XVoidCallback func + ); + +void XDoMouse + ( + XButtonCallback mouse_button, + XMoveCallBack mouse_movement, + XVoidCallback process + ); + +void XDoWindows + ( + XWindowButtonCallback mouse_button[], + XWindowMoveCallBack mouse_movement[], + XWindowKeyCallback key_press[], + XFuncControl (*process) () + ); + + +/* Sprite routines */ +void LoadSprite + ( + const char *filename, + XSprite *sprite, + const XColor xc[256] + ); + + +void XDrawSprites + ( + XSprite *sprites[], + int no, + XSpriteControl control + ); + +void XEraseSprites + ( + XSprite *sprites[], + int no + ); + +void LoadColormap + ( + const char *filename, + XColor xc[256] + ); + +#define AllocColors AllocColours +void AllocColours + ( + int no, + ulong pixels[], + const char *colname[] + ); + +#define AllocColorsRGB AllocColoursRGB +void AllocColoursRGB + ( + int no, + ulong pixels[], + const Colour cols[] + ); + +void LoadSpriteDataSet + ( + const char *cmap_filename, + const char *sprite_filenames[], + SpriteDataSet *set + ); + + +/* + + File Formats: + + NB: all ushorts are stored in network format. See ntohs(3). + + Colormap: + + red.ushort - Red component color 0 + green.ushort - Red component color 0 + blue.ushort - Red component color 0 + ... + ... + red.ushort - Red component color 255 + green.ushort - Red component color 255 + blue.ushort - Red component color 255 + + + Sprite: + + "XbitSprite" - Magic string (NULL terminated) + width.ushort - width of sprite + height.ushort - height of sprite + byte.uchar - Pixel value for (0,0) + byte.uchar - Pixel value for (1,0) + ... + ... + byte.uchar - Pixel value for (width-1,height-1) + +*/ + +#endif + +/* END OF FILE */ diff --git a/fontset.h b/fontset.h new file mode 100644 index 0000000..8f58fcd --- /dev/null +++ b/fontset.h @@ -0,0 +1,2020 @@ +#ifndef XIFONTW + +#define XIFONTW 8 +#define XIFONTH 8 + +#define NULLCHARDEF {{ \ + {1,1,1,1,1,1,1,0,}, \ + {1,0,0,0,0,0,1,0,}, \ + {1,0,1,1,1,0,1,0,}, \ + {1,0,1,0,1,0,1,0,}, \ + {1,0,1,1,1,0,1,0,}, \ + {1,0,0,0,0,0,1,0,}, \ + {1,1,1,1,1,1,1,0,}, \ + {0,0,0,0,0,0,0,0,}, \ + }} + +typedef struct + { + char data[XIFONTH][XIFONTW]; + } FontChar; + +FontChar xifont1[128] = + { + NULLCHARDEF, /* 00 */ + NULLCHARDEF, /* 01 */ + NULLCHARDEF, /* 02 */ + NULLCHARDEF, /* 03 */ + NULLCHARDEF, /* 04 */ + NULLCHARDEF, /* 05 */ + NULLCHARDEF, /* 06 */ + NULLCHARDEF, /* 07 */ + NULLCHARDEF, /* 08 */ + NULLCHARDEF, /* 09 */ + NULLCHARDEF, /* 0a */ + NULLCHARDEF, /* 0b */ + NULLCHARDEF, /* 0c */ + NULLCHARDEF, /* 0d */ + NULLCHARDEF, /* 0e */ + NULLCHARDEF, /* 0f */ + NULLCHARDEF, /* 10 */ + NULLCHARDEF, /* 11 */ + NULLCHARDEF, /* 12 */ + NULLCHARDEF, /* 13 */ + NULLCHARDEF, /* 14 */ + NULLCHARDEF, /* 15 */ + NULLCHARDEF, /* 16 */ + NULLCHARDEF, /* 17 */ + NULLCHARDEF, /* 18 */ + NULLCHARDEF, /* 19 */ + NULLCHARDEF, /* 1a */ + NULLCHARDEF, /* 1b */ + NULLCHARDEF, /* 1c */ + NULLCHARDEF, /* 1d */ + NULLCHARDEF, /* 1e */ + NULLCHARDEF, /* 1f */ + + {{ /* 20 ' ' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 21 '!' */ + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 22 '"' */ + {0,1,1,0,0,1,1,0,}, + {0,1,1,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 23 '#' */ + {0,1,1,0,1,1,0,0,}, + {0,1,1,0,1,1,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,1,1,0,1,1,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,1,1,0,1,1,0,0,}, + {0,1,1,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 24 '$' */ + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,1,1,1,0,}, + {0,1,0,1,1,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,1,1,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 25 '%' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,0,1,1,0,}, + {0,1,1,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,1,1,0,}, + {0,1,1,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 26 '&' */ + {0,1,1,1,1,0,0,0,}, + {1,1,0,0,1,1,0,0,}, + {1,1,0,0,1,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {1,1,0,0,1,0,1,0,}, + {1,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 27 ''' */ + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 28 '(' */ + {0,0,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 29 ')' */ + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2a '*' */ + {0,0,0,0,0,0,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2b '+' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2c ',' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + }}, + {{ /* 2d '-' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2e '.' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2f '/' */ + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + }}, + {{ /* 30 '0' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,1,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 31 '1' */ + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 32 '2' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 33 '3' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 34 '4' */ + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {1,1,0,1,1,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 35 '5' */ + {1,1,1,1,1,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 36 '6' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 37 '7' */ + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 38 '8' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 39 '9' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3a ':' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3b ';' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3c '<' */ + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3d '=' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3e '<' */ + {0,1,1,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3f '?' */ + {0,0,1,1,1,1,0,0,}, + {0,1,1,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 40 '@' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,1,0,1,1,0,}, + {1,1,0,1,0,1,1,0,}, + {1,1,0,0,1,1,0,0,}, + {1,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 41 'A' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 42 'B' */ + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 43 'C' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 44 'D' */ + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 45 'E' */ + {1,1,1,1,1,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 46 'F' */ + {1,1,1,1,1,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 47 'G' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 48 'H' */ + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 49 'I' */ + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4a 'J' */ + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4b 'K' */ + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4c 'L' */ + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4d 'M' */ + {1,1,0,0,0,1,1,0,}, + {1,1,1,0,1,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,0,1,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4e 'N' */ + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,0,0,1,1,0,}, + {1,1,1,1,0,1,1,0,}, + {1,1,0,1,1,1,1,0,}, + {1,1,0,0,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4f 'O' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 50 'P' */ + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 51 'Q' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,1,1,1,1,0,}, + {1,1,0,0,1,1,0,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 52 'R' */ + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 53 'S' */ + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 54 'T' */ + {0,1,1,1,1,1,1,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 55 'U' */ + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 56 'V' */ + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,0,1,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 57 'W' */ + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,1,0,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,1,0,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 58 'X' */ + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 59 'Y' */ + {0,1,1,0,0,1,1,0,}, + {0,1,1,0,0,1,1,0,}, + {0,1,1,0,0,1,1,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5a 'Z' */ + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5b '[' */ + {0,0,1,1,1,1,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5c '\' */ + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + }}, + {{ /* 5d ']' */ + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5e '^' */ + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,1,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5f '_' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,1,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 60 '`' */ + {0,0,1,1,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 61 'a' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,1,0,}, + {0,1,1,1,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 62 'b' */ + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 63 'c' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 66 'd' */ + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,1,1,1,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 66 'e' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 66 'f' */ + {0,0,1,1,1,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {1,1,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 67 'g' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 68 'h' */ + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 69 'i' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6a 'j' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6b 'k' */ + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,1,1,0,0,}, + {1,1,0,1,1,0,0,0,}, + {1,1,1,1,0,0,0,0,}, + {1,1,0,1,1,0,0,0,}, + {1,1,0,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6c 'l' */ + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6d 'm' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,1,1,0,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,0,1,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6e 'n' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6f 'o' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 70 'p' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + }}, + {{ /* 71 'q' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,0,1,1,0,}, + }}, + {{ /* 72 'r' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,0,1,1,1,0,0,}, + {1,1,1,0,0,1,1,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {1,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 73 's' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 74 't' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {1,1,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,1,1,0,0,1,1,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 75 'u' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 76 'v' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,0,1,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 77 'w' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,1,0,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {0,1,1,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 78 'x' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {1,1,0,0,0,1,1,0,}, + {1,1,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 79 'y' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,0,1,1,0,}, + {0,1,1,0,0,1,1,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7a 'z' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7b '{' */ + {0,0,0,1,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,1,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7c '|' */ + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7d '}' */ + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,0,1,1,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,0,1,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7e '~' */ + {0,0,1,1,0,0,1,1,}, + {0,1,1,1,1,1,1,0,}, + {1,1,0,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7f DEL */ + {0,1,1,0,1,1,0,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + }; + + + +FontChar xifont2[128] = + { + NULLCHARDEF, /* 00 */ + NULLCHARDEF, /* 01 */ + NULLCHARDEF, /* 02 */ + NULLCHARDEF, /* 03 */ + NULLCHARDEF, /* 04 */ + NULLCHARDEF, /* 05 */ + NULLCHARDEF, /* 06 */ + NULLCHARDEF, /* 07 */ + NULLCHARDEF, /* 08 */ + NULLCHARDEF, /* 09 */ + NULLCHARDEF, /* 0a */ + NULLCHARDEF, /* 0b */ + NULLCHARDEF, /* 0c */ + NULLCHARDEF, /* 0d */ + NULLCHARDEF, /* 0e */ + NULLCHARDEF, /* 0f */ + NULLCHARDEF, /* 10 */ + NULLCHARDEF, /* 11 */ + NULLCHARDEF, /* 12 */ + NULLCHARDEF, /* 13 */ + NULLCHARDEF, /* 14 */ + NULLCHARDEF, /* 15 */ + NULLCHARDEF, /* 16 */ + NULLCHARDEF, /* 17 */ + NULLCHARDEF, /* 18 */ + NULLCHARDEF, /* 19 */ + NULLCHARDEF, /* 1a */ + NULLCHARDEF, /* 1b */ + NULLCHARDEF, /* 1c */ + NULLCHARDEF, /* 1d */ + NULLCHARDEF, /* 1e */ + NULLCHARDEF, /* 1f */ + + {{ /* 20 ' ' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 21 '!' */ + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 22 '"' */ + {0,0,1,0,0,1,0,0,}, + {0,0,1,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 23 '#' */ + {0,0,1,0,1,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,1,0,1,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 24 '$' */ + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 25 '%' */ + {0,1,0,0,0,0,1,0,}, + {1,0,1,0,0,1,0,0,}, + {0,1,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,1,0,0,}, + {0,1,0,0,1,0,1,0,}, + {1,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 26 '&' */ + {0,1,1,1,0,0,0,0,}, + {1,0,0,0,1,0,0,0,}, + {1,0,0,0,1,0,0,0,}, + {0,1,1,1,0,0,0,0,}, + {1,0,0,0,1,0,1,0,}, + {1,0,0,0,0,1,0,0,}, + {0,1,1,1,1,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 27 ''' */ + {0,0,0,1,0,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 28 '(' */ + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 29 ')' */ + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2a '*' */ + {1,0,0,1,0,0,1,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,1,0,1,0,0,}, + {1,0,0,1,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2b '+' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2c ',' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + }}, + {{ /* 2d '-' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2e '.' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 2f '/' */ + {0,0,0,0,0,0,1,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 30 '0' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,1,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 31 '1' */ + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 32 '2' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 33 '3' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 34 '4' */ + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,1,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 35 '5' */ + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 36 '6' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 37 '7' */ + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 38 '8' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 39 '9' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3a ':' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3b ';' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3c '<' */ + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3d '=' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3e '<' */ + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 3f '?' */ + {0,0,1,1,1,1,0,0,}, + {0,1,0,0,0,0,1,0,}, + {0,0,0,0,1,1,1,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 40 '@' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,1,1,0,0,1,0,}, + {1,0,1,0,1,0,1,0,}, + {1,0,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 41 'A' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 42 'B' */ + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 43 'C' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 44 'D' */ + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 45 'E' */ + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 46 'F' */ + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 47 'G' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,1,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 48 'H' */ + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 49 'I' */ + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4a 'J' */ + {0,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4b 'K' */ + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,1,0,0,}, + {1,0,0,0,1,0,0,0,}, + {1,1,1,1,0,0,0,0,}, + {1,0,0,0,1,0,0,0,}, + {1,0,0,0,0,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4c 'L' */ + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4d 'M' */ + {1,0,0,0,0,0,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,0,1,0,1,0,1,0,}, + {1,0,0,1,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4e 'N' */ + {1,0,0,0,0,0,1,0,}, + {1,1,0,0,0,0,1,0,}, + {1,0,1,0,0,0,1,0,}, + {1,0,0,1,0,0,1,0,}, + {1,0,0,0,1,0,1,0,}, + {1,0,0,0,0,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 4f 'O' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 50 'P' */ + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 51 'Q' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,1,0,1,0,}, + {1,0,0,0,0,1,0,0,}, + {0,1,1,1,1,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 52 'R' */ + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 53 'S' */ + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 54 'T' */ + {1,1,1,1,1,1,1,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 55 'U' */ + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 56 'V' */ + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 57 'W' */ + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,1,0,0,1,0,}, + {1,0,1,0,1,0,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 58 'X' */ + {1,0,0,0,0,0,1,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 59 'Y' */ + {1,0,0,0,0,0,1,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5a 'Z' */ + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5b '[' */ + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5c '\' */ + {1,0,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5d ']' */ + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5e '^' */ + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 5f '_' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,1,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 60 '`' */ + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 61 'a' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 62 'b' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 63 'c' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 64 'd' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 65 'e' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 66 'f' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 67 'g' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,1,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 68 'h' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 69 'i' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6a 'j' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6b 'k' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,1,0,0,}, + {1,1,1,1,1,0,0,0,}, + {1,0,0,0,0,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6c 'l' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6d 'm' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,0,1,0,1,0,1,0,}, + {1,0,0,1,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6e 'n' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,0,0,0,0,1,0,}, + {1,0,1,0,0,0,1,0,}, + {1,0,0,1,0,0,1,0,}, + {1,0,0,0,1,0,1,0,}, + {1,0,0,0,0,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 6f 'o' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 70 'p' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 71 'q' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,1,0,1,0,}, + {1,0,0,0,0,1,0,0,}, + {0,1,1,1,1,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 72 'r' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 73 's' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {1,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 74 't' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 75 'u' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 76 'v' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 77 'w' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {1,0,0,1,0,0,1,0,}, + {1,0,1,0,1,0,1,0,}, + {1,1,0,0,0,1,1,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 78 'x' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 79 'y' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,0,0,0,0,0,1,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7a 'z' */ + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {1,1,1,1,1,1,1,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7b '{' */ + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7c '|' */ + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7d '}' */ + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7e '~' */ + {0,0,1,0,0,0,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + {{ /* 7f DEL */ + {0,1,1,0,1,1,0,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {1,1,1,1,1,1,1,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }}, + }; + +FontChar *xifont=xifont1; + +#endif diff --git a/galax.c b/galax.c new file mode 100644 index 0000000..2283765 --- /dev/null +++ b/galax.c @@ -0,0 +1,1888 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "Xbit.h" + +#define WINX 100 +#define WINY 100 +#define WINW 220 +#define WINWH 110 +#define WINH 250 +#define WINHH 125 + +#define TAGLINE 242 + +#define RND(x) (rand()%(x)) + +#define ITOF(x) ((x)<<8) +#define FTOI(x) ((x)>>8) + +#define AT(p,x,y) *((p)+(x)+(y)*WINW) + +#define HISCFILE "hisc.gal" + +#define CH(x,y) ((x)*SCALE),((y)*SCALE),SCALE,SCALE + +XSizeHints size_hints; +int black,white; +Display *disp; +Window top,sub; +Colormap cm; +XFontStruct *font; +XImage *img; +char *data; +char *coll_data; + +double si[3600],co[3600]; + +static XFuncControl Key(Window w, XPressRelease s, XEvent *e); +static XFuncControl ProcessTitle(void),ProcessIntro(void),ProcessGame(void), + ProcessGameOver(void),ProcessHiScore(void), + ProcessStartLevel(void); + +/* Hiscore +*/ +#define NOHI 10 + +typedef struct + { + char name[4]; + int score; + int level; + double percent; + } HiSc; + +HiSc hisc[NOHI]= + { + {"A.B",10000,1,50.0}, + {"C.D",5000,1,50.0}, + {"E.F",3000,1,50.0}, + {"G.H",1500,1,50.0}, + {"I.J",1000,1,50.0}, + {"K.L",800,1,50.0}, + {"M.N",600,1,50.0}, + {"O.P",400,1,50.0}, + {"Q.R",200,1,50.0}, + {"S.T",100,1,50.0}, + }; + +/* Keycontrols +*/ +static XWindowKeyCallback key[2]= + { + {0,Key}, + {0,NULL} + }; + +#define NONE -1 +#define LEFT 0 +#define RIGHT 1 +#define FIRE 2 +#define QUIT 3 +#define PAUSE 4 + +int inkey=NONE; +KeySym last_keysym; +int keymap[PAUSE+1]={False,False,False,False,False}; + + +/* Sprite defs +*/ +#define SPRW 8 +#define SPRH 8 + +#define CHXSPR(a) ((a)*SPRW) + +#define SPRMAXANIM 10 +#define SPRANIMFRAME 10 + +unsigned int framectr =0; +unsigned int sprframe =0; + +typedef struct + { + ulong data[SPRH][SPRW]; + } SpriteDef; + +typedef struct + { + int no; + char data[SPRH*SPRW]; + } CollData; + +typedef struct + { + int no; + SpriteDef *spr[SPRMAXANIM]; + } SpriteAnim; + +#define NOSPR 11 + +#define SHIP 0 +#define ABULLET 1 +#define SBULLET 2 +#define GALAX1 3 +#define GALAX2 4 +#define GALAX3 5 +#define FLAG1 6 +#define FLAG10 7 +#define ENTITY1 8 +#define ALIENUFO 9 +#define SAFESHIP 10 + +#include "sprdef.h" + + +/* Collision data codes +*/ +#define CNONE 0 +#define CSHIP 1 +#define CALIEN 2 +#define CABULL 3 +#define CUBULLM 64 +#define CUBULL(x) (CUBULLM+(x)) + + +/* Alien data +*/ +#define NOSHOT 0 +#define SISHOT 1 +#define GASHOT 2 +#define VISHOT 3 + +typedef struct + { + int y; + int x; + int xi; + int yi; + int inuse; + } Shot; + +typedef struct + { + int alive; + int type; + Shot shot; + int x,y; + int sx,sy; /* Use for workspace for 'alternative' coords */ + } Alien; + + +#define MAXALIEN 100 +int no_aliens; +int aliens_alive; + +Alien alien[MAXALIEN]; + + +/* Explosion FX data +*/ +#define MAXEXP 20 +#define EXPPART 20 +#define EXPLIFE 10 +struct + { + int inuse; + int cx[EXPPART],cy[EXPPART],x[EXPPART],y[EXPPART]; + } exp_fx[MAXEXP]; + +int no_exp; + + +/* Level data +*/ +#define NOLEV 11 + +struct + { + char *title; + int sx,sy; + int shot_type; + } levdata[NOLEV]= + { + {"A CLASSIC...",0,1,SISHOT}, + {"RUN AWAY - WATCH YOUR BACK",1,-2,GASHOT}, + {"DIZZY",0,1,SISHOT}, + {"VICIOUS CARNIVAL DUCKS!",0,1,VISHOT}, + {"THE ALIEN WARFLEET - WAVE 1",-1,0,GASHOT}, + {"BOUNCY",0,1,GASHOT}, + {"THE 1ST COLLECTIVE",0,2,SISHOT}, + {"THE 2ND COLLECTIVE",0,2,SISHOT}, + {"THE 3RD COLLECTIVE",0,2,GASHOT}, + {"THE ALIEN WARFLEET - WAVE 2",-1,0,GASHOT}, + {"THE ALIEN MOTHERBRAIN",0,1,GASHOT}, + }; + + + +/* Colour vars +*/ +#define NOCOLS 8 +#define RNDCOL (RND(NOCOLS-2)+2) +#define RGB(r,g,b) {(r)*255,(g)*255,(b)*255} + +static ulong pix[NOCOLS]; +static Colour cols[NOCOLS]= + { + RGB(0,0,0), /* BLACK */ + RGB(255,255,255), /* WHITE */ + RGB(255,100,100), /* RED */ + RGB(100,255,100), /* GREEN */ + RGB(100,100,255), /* BLUE */ + RGB(255,255,0), /* YELLOW */ + RGB(0,255,255), /* CYAN */ + RGB(165,42,42) /* BROWN */ + }; + +#define BLACKI 0 +#define WHITEI 1 +#define REDI 2 +#define GREENI 3 +#define BLUEI 4 +#define YELLOWI 5 +#define CYANI 6 +#define BROWNI 7 + +#define BLACK pix[BLACKI] +#define WHITE pix[WHITEI] +#define RED pix[REDI] +#define GREEN pix[GREENI] +#define BLUE pix[BLUEI] +#define YELLOW pix[YELLOWI] +#define CYAN pix[CYANI] +#define BROWN pix[BROWNI] + + +/* Parallax vars +*/ +#define NOPLXST 30 +#define NOPLXPL 3 + +struct {int x,y,c} plxst[NOPLXST][NOPLXPL]; + + +/* User bullet vars +*/ +#define MAXBULL 100 +#define BULLYI -3 + +typedef struct + { + int inuse,x,y; + } UserBullet; + +UserBullet ubull[MAXBULL]; +int bullctr=0; + +/* Control vars +*/ +int NOLIVES =3; +int NOBULL =4; +int BULLDEL =10; +int LEVEL =0; +int SCORE =0; +int PAUSESKIP =0; +int FONT =0; + +int SCALE =1; +int POKEIMG_NS(),POKEIMG_S(); +int (*POKEIMG)(); + + +/* Game and control vars +*/ +#define SHXINIT WINW/2-SPRW/2 +#define SHIPY WINH-16 +#define BLYINIT SHIPY-8 + +int quit=False; + +int score,level,levelndx,lives; +int shipx,hit,miss,dead; +int aliendead; + + +int main(argc,argv) +int argc; +char *argv[]; + +{ + void IntrHandler(); + int f,r,x,y,arg,noshm; + unsigned long evmask; + + arg=1; + noshm=False; + + if (argc>arg) + if (!strcmp(argv[arg],"-noshm")) + { + noshm=True; + arg++; + } + + if (argc>arg) + { + SCALE=atoi(argv[arg]); + + if (SCALE<1) + { + fprintf(stderr,"scale param must be +ve\n"); + exit(1); + } + } + + if (SCALE==1) + POKEIMG=POKEIMG_NS; + else + POKEIMG=POKEIMG_S; + + for(f=0;fdata[y][x]= + pix[anim[f].spr[r]->data[y][x]]; + + XAutoRepeatOff(disp); + + XISetFont(FONT); + + ReadScores(); + + XDoWindows(NULL,NULL,key,ProcessTitle); + + while(!quit) + { + score=SCORE; + level=LEVEL; + levelndx=LEVEL%NOLEV; + lives=NOLIVES; + hit=0; + miss=0; + + do + { + shipx=SHXINIT; + dead=False; + + ClearBullets(); + ClearExplosions(); + ClearKeys(); + XDoWindows(NULL,NULL,key,ProcessStartLevel); + + DefineAliens(); + + ClearBullets(); + ClearExplosions(); + ClearKeys(); + XDoWindows(NULL,NULL,key,ProcessGame); + } while (lives>0); + + if (score>-1) + { + ClearBullets(); + ClearExplosions(); + ClearKeys(); + XDoWindows(NULL,NULL,key,ProcessGameOver); + + ReadScores(); + if (score>hisc[NOHI-1].score) + { + XDoWindows(NULL,NULL,key,ProcessHiScore); + WriteScores(); + } + } + + ClearKeys(); + XDoWindows(NULL,NULL,key,ProcessTitle); + } + + XAutoRepeatOn(disp); + DestroyXImage(img); + XCloseDisplay(disp); +} + + +/* ----------------------------------------------- KEY AND UTILITY +*/ +static XFuncControl Key(Window w, XPressRelease s, XEvent *e) +{ + if (s==XRELEASE) + { + last_keysym=XK_VoidSymbol; + + switch(XLookupKeysym((XKeyEvent *)e,ShiftMapIndex)) + { + case XK_Z: + case XK_z: + keymap[LEFT]=False; + break; + + case XK_C: + case XK_c: + keymap[RIGHT]=False; + break; + + case XK_period: + keymap[FIRE]=False; + break; + + case XK_P: + case XK_p: + keymap[PAUSE]=False; + break; + + case XK_Q: + case XK_q: + keymap[QUIT]=False; + break; + + default: + keymap[NONE]=False; + break; + } + } + + if (s==XPRESS) + { + inkey=NONE; + + switch(last_keysym=XLookupKeysym((XKeyEvent *)e,ShiftMapIndex)) + { + case XK_Z: + case XK_z: + inkey=LEFT; + break; + + case XK_C: + case XK_c: + inkey=RIGHT; + break; + + case XK_period: + inkey=FIRE; + break; + + case XK_P: + case XK_p: + inkey=PAUSE; + break; + + case XK_Q: + case XK_q: + inkey=QUIT; + break; + + default: + inkey=NONE; + break; + } + + if (inkey!=NONE) + keymap[inkey]=True; + } + + return (XFUNCCONT); +} + + +int GetKey() + +{ + int k=inkey; + + if ((inkey==PAUSE)||(inkey==QUIT)||(inkey=FIRE)) + inkey=NONE; + + return(k); +} + + +KeySym RawKey() + +{ + KeySym k=last_keysym; + + last_keysym=XK_VoidSymbol; + return(k); +} + + +ClearKeys() +{ + int f; + + inkey=NONE; + + for(f=0;f<5;f++) + keymap[f]=False; +} + + +/* ----------------------------------------------- GRAPHICS UTILS +*/ +Cls(plx,xi,yi,clr) +int plx,xi,yi,clr; + +{ + static unsigned int col; + int f,r,x,y; + + if (!((framectr++)%SPRANIMFRAME)) + { + sprframe++; + + for(f=0;f=WINH) + plxst[f][r].y-=WINH; + + plxst[f][r].x+=((r+1)*xi); + + if (plxst[f][r].x<0) + plxst[f][r].x+=WINW; + + if (plxst[f][r].x>=WINW) + plxst[f][r].x-=WINW; + + if (!(col%10)) + plxst[f][r].c=RNDCOL; + + (*POKEIMG)(img,plxst[f][r].x,plxst[f][r].y,plxst[f][r].c); + } + } +} + + +Update() +{ + DrawXImage(img); + XSync(disp,False); +} + + +Centre(y,c,s) +int y,c; +char *s; + +{ + XIprintf(img,CH(WINWH-strlen(s)*4,y),c,"%s",s); +} + + +POKEIMG_NS(img,x,y,c) +XImage *img; +int x,y,c; + +{ + XPutPixel(img,x,y,c); +} + + +POKEIMG_S(img,x,y,c) +XImage *img; +int x,y,c; + +{ + int sx,sy; + + for(sx=0;sx=0)&&(x=0)&&(yno=0; + + for(sy=0;sy=0)&&((y+sy)data[sy][sx]!=BLACKI) + if (((x+sx)>=0)&&((x+sx)data[coll->no++]=AT(coll_data,x+sx,y+sy); + + AT(coll_data,x+sx,y+sy)=collcode; + } + + (*POKEIMG)(img,x+sx,y+sy,spr[s]->data[sy][sx]); + } +} + + +/* ----------------------------------------------- USER BULLET UTILS +*/ +ClearBullets() +{ + int f; + + bullctr=0; + + for(f=0;f10) + NOLIVES=1; + break; + case 'd': + if (BULLDEL==10) + BULLDEL=1; + else + BULLDEL=10; + break; + case 'm': + if (NOBULL==4) + NOBULL=MAXBULL; + else + NOBULL=4; + break; + case 's': + LEVEL++; + break; + case 'x': + SCORE=0; + NOLIVES=3; + BULLDEL=10; + NOBULL=4; + LEVEL=0; + break; + case 'o': + PAUSESKIP=1; + NOLIVES=1; + BULLDEL=1; + NOBULL=MAXBULL; + LEVEL=NOLEV-1; + SCORE=hisc[0].score; + break; + case 'w': + PAUSESKIP=1; + LEVEL=NOLEV-1; + break; + } + } +} + + +/* ----------------------------------------------- START LEVEL +*/ +static XFuncControl ProcessStartLevel(void) +{ + char s[80]; + + Cls(True,levdata[levelndx].sx,levdata[levelndx].sy,True); + + sprintf(s,"LEVEL %d",level+1); + + Centre (50,YELLOW,s); + Centre (100,RED,levdata[levelndx].title); + + Update(); + + if (GetKey()!=NONE) + return(XFUNCSTOP); + + return(XFUNCCONT); +} + + +/* ----------------------------------------------- PLAY LEVEL +*/ +static XFuncControl ProcessGame(void) + +{ + static unsigned int ctr=0; + static int immune=0; + int f,k; + CollData coll; + + ctr++; + + k=GetKey(); + + if (!PAUSESKIP) + if (Paused(k)) + return (XFUNCCONT); + + Cls(True,levdata[levelndx].sx,levdata[levelndx].sy,True); + + if (lives) + for(f=0;f1) + shipx-=2; + + if (keymap[RIGHT]) + if (shipx1)) + lives++; + + return(XFUNCSTOP); + } + + return(XFUNCCONT); +} + + +/* ----------------------------------------------- PAUSE CODE +*/ +DoPause() +{ + static unsigned int c=0; + + c++; + + if ((c/10)%2) + Centre(WINH/2-4,WHITE,"PAUSED"); + else + Centre(WINH/2-4,YELLOW,"PAUSED"); + + Update(); +} + + +int Paused(k) +int k; + +{ + static int paused=False; + + if (k==PAUSE) + paused=!paused; + + if (paused) + DoPause(); + + return(paused); +} + + +/* ----------------------------------------------- GAME OVER +*/ +static XFuncControl ProcessGameOver(void) +{ + static int posx=32; + static unsigned int ctr=0; + + Cls (True,0,1,True); + + ctr++; + + XIprintf(img,CH(posx,32),YELLOW,"SHOTS FIRED : %6d",hit+miss); + XIprintf(img,CH(posx,48),YELLOW,"HIT : %6d",hit); + XIprintf(img,CH(posx,64),YELLOW,"MISS : %6d",miss); + if (hit+miss) + XIprintf(img,CH(posx,80),YELLOW,"PERCENTAGE : %5.1f", + ((double)hit/(hit+miss))*100.0); + else + XIprintf(img,CH(posx,80),YELLOW,"PERCENTAGE : 0.0"); + + if ((ctr/10)%2) + Centre(120,WHITE,"GAME OVER"); + + Update(); + + if (GetKey()==NONE) + return(XFUNCCONT); + else + return(XFUNCSTOP); +} + + +/* ----------------------------------------------- HI SCORES +*/ +ReadScores() +{ + int fd,f; + + if ((fd=open(HISCFILE,O_RDONLY))==-1) + return; + + for(f=0;f-1;f--) + if (hisc[f].scorepos;f--) + hisc[f]=hisc[f-1]; + + strcpy(hisc[pos].name,""); + hisc[pos].score=score; + hisc[pos].level=level+1; + if (hit+miss) + hisc[pos].percent=((double)hit/(hit+miss))*100.0; + else + hisc[pos].percent=0.0; + + first=False; + } + + Cls (True,1,1,True); + + Centre(16,WHITE,"CONGRATULATIONS!"); + Centre(30,YELLOW,"ENTER YOUR INITIALS"); + Centre(40,YELLOW,"FOR THE ALL TIME HEROES"); + + hisc[pos].name[len]=*let; + hisc[pos].name[len+1]=0; + + for(f=0;fWINW/3)) + { + y=-y; + x+=y; + } + } + break; + + default: + printf("undefined level %d?\n",levelndx); + exit(1); + } +} + + +MoveAliens() +{ + int f,x,y; + int flag=False; + + alienctr++; + + switch(levelndx) + { + case 0: /* CLASSIC */ + for (f=0;fWINW-SPRW-1)) + flag=True; + } + + if (flag) + { + alienxi=-alienxi; + + for (f=0;fWINH) + alien[f].y-=WINH; + } + + break; + + case 1: /* RUN AWAY */ + for (f=0;f3599) + alien[f].sx-=3600; + } + else + { + if ((alien[f].sx-=10)<0) + alien[f].sx+=3600; + } + + SinCos(WINW/2,WINH/2,alien[f].sx,alien[f].sy*2, + alien[f].sy/2,&alien[f].x,&alien[f].y); + } + + break; + + case 3: /* CARNIVAL */ + for(f=0;f=WINW) + alien[f].x-=WINW+SPRW; + + break; + + case 4: /* FLEET WAVE 1 */ + break; + + case 5: /* BOUNCY */ + for(f=0;f=WINW)) + alien[f].sx=-alien[f].sx; + + alien[f].y+=alien[f].sy; + if ((alien[f].y<=0)||(alien[f].y>=SHIPY)) + alien[f].sy=-alien[f].sy; + } + break; + + case 6: /* THE COLLECTIVE 1 */ + for(f=0;fdata[alien[f].sy][alien[f].sx]!=BLACK) + { + alien[f].x=WINW/2-(SPRW+2)*4+alien[f].sx*(SPRW+2); + alien[f].y=WINH/2-(SPRH+2)*4+alien[f].sy*(SPRH+2); + } + else + { + alien[f].x=-100; + alien[f].y=SHIPY; + } + + break; + + case 7: /* THE COLLECTIVE 2 */ + for(f=0;fdata[alien[f].sy][alien[f].sx]!=BLACK) + { + alien[f].x=WINW/2-(SPRW+2)*4+alien[f].sx*(SPRW+2); + alien[f].y=WINH/2-(SPRH+2)*4+alien[f].sy*(SPRH+2); + } + else + { + alien[f].x=-100; + alien[f].y=SHIPY; + } + + break; + + case 8: /* THE COLLECTIVE 3 */ + for(f=0;fdata[alien[f].sy][alien[f].sx]!=BLACK) + { + alien[f].x=WINW/2-(SPRW+2)*4+alien[f].sx*(SPRW+2); + alien[f].y=WINH/2-(SPRH+2)*4+alien[f].sy*(SPRH+2); + } + else + { + alien[f].x=-100; + alien[f].y=SHIPY; + } + + break; + + case 9: /* FLEET WAVE 2 */ + for(y=f=0;y<3;y++) + for(x=0;x<20;x++,f++) + if (alien[f].alive) + if (y%2) + { + if ((alien[f].x+=(y+1))>=WINW) + alien[f].x-=WINW+SPRW; + } + else + { + if ((alien[f].x-=(y+1))<=-SPRW) + alien[f].x+=WINW+SPRW; + } + + break; + + case 10: /* ALIEN MOTHERBRAIN */ + for(f=0;f<44;f++) + if (alien[f].alive) + { + SinCos(WINW/2,WINH/2,f*81,alien[f].sx, + alien[f].sx,&alien[f].x,&alien[f].y); + + alien[f].sx+=alien[f].sy; + + if ((alien[f].sx<10)||(alien[f].sx>WINW/3)) + { + alien[f].sy=-alien[f].sy; + alien[f].sx+=alien[f].sy; + } + } + break; + + default: + printf("undefined level %d?\n",levelndx); + exit(1); + } +} + + +CheckAlienShot(a) +Alien *a; + +{ + if ((levdata[levelndx].shot_type==NOSHOT)||(dead)) + return; + + if (a->shot.inuse) + return; + + if (RND(200)<(1+level)) + { + a->shot.inuse=True; + + a->shot.x=ITOF(a->x); + a->shot.y=a->y+SPRH; + + switch (levdata[levelndx].shot_type) + { + case VISHOT: + a->shot.yi=4+RND(4); + break; + default: + a->shot.yi=3; + break; + } + + switch (levdata[levelndx].shot_type) + { + case SISHOT: + a->shot.xi=0; + break; + + case VISHOT: + if (shipxx) + a->shot.xi=-16*a->shot.yi; + else if (shipxx) + a->shot.xi=16*a->shot.yi; + else + a->shot.xi=0; + break; + + case GASHOT: + if (shipxx) + a->shot.xi=-64; + else if (shipx>a->x) + a->shot.xi=64; + else + a->shot.xi=0; + break; + + default: + a->shot.xi=0; + break; + } + } +} + + +DrawAndKillAliens() + +{ + CollData coll; + int f,r; + + aliendead=True; + + for(f=0;fWINH) + alien[f].shot.inuse=False; + else + Sprite(ABULLET,FTOI(alien[f].shot.x),alien[f].shot.y, + &coll,CABULL); + } + } +} diff --git a/icon b/icon new file mode 100644 index 0000000..e44294c --- /dev/null +++ b/icon @@ -0,0 +1,27 @@ +#define icon_width 48 +#define icon_height 48 +static unsigned char icon_bits[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x07, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0x13, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0x7e, 0x0e, 0x3e, 0xff, 0xff, + 0x63, 0x3c, 0x0e, 0x3c, 0xff, 0xff, 0xe3, 0x18, 0xcf, 0x24, 0xf8, 0xff, + 0xe3, 0x81, 0xcf, 0x24, 0xf8, 0xff, 0xe3, 0xc3, 0x0f, 0x3e, 0xff, 0xff, + 0xe3, 0xc3, 0x0f, 0x26, 0xff, 0xff, 0xe3, 0x81, 0xcf, 0x24, 0xff, 0xff, + 0xe3, 0x18, 0xcf, 0x24, 0xff, 0xff, 0x63, 0x3c, 0x0e, 0x24, 0xf0, 0xff, + 0x63, 0x7e, 0x0e, 0x66, 0xf0, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0x0f, 0x00, 0xf0, 0xff, + 0xe3, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xd5, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x15, 0xeb, 0xac, 0xed, 0xff, + 0xe3, 0xd5, 0x52, 0x4b, 0xed, 0xff, 0xe3, 0xd5, 0xfa, 0xe8, 0xed, 0xff, + 0xe3, 0xd5, 0x7a, 0xeb, 0xe3, 0xff, 0xe3, 0x15, 0xfb, 0xe8, 0xef, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xed, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xf3, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; diff --git a/sprdef.h b/sprdef.h new file mode 100644 index 0000000..2e8df28 --- /dev/null +++ b/sprdef.h @@ -0,0 +1,517 @@ + +#define b 0 +#define W 1 +#define R 2 +#define G 3 +#define B 4 +#define Y 5 +#define C 6 +#define M 7 + +SpriteDef shipspr1_1= + {{ /* SHIP */ + {b,b,b,B,B,b,b,b,}, + {b,b,B,B,B,B,b,b,}, + {b,b,B,W,W,B,b,b,}, + {b,b,b,B,B,b,b,b,}, + {b,Y,b,B,B,b,Y,b,}, + {b,R,B,B,B,B,R,b,}, + {b,R,B,B,B,B,R,b,}, + {b,R,b,B,B,b,R,b,}, + }}; + +SpriteDef shipspr1_2= + {{ /* SHIP */ + {b,b,b,B,B,b,b,b,}, + {b,b,B,B,B,B,b,b,}, + {b,b,B,W,W,B,b,b,}, + {b,b,b,B,B,b,b,b,}, + {b,R,b,B,B,b,R,b,}, + {b,Y,B,B,B,B,Y,b,}, + {b,R,B,B,B,B,R,b,}, + {b,R,b,B,B,b,R,b,}, + }}; + +SpriteDef shipspr1_3= + {{ /* SHIP */ + {b,b,b,B,B,b,b,b,}, + {b,b,B,B,B,B,b,b,}, + {b,b,B,W,W,B,b,b,}, + {b,b,b,B,B,b,b,b,}, + {b,R,b,B,B,b,R,b,}, + {b,R,B,B,B,B,R,b,}, + {b,Y,B,B,B,B,Y,b,}, + {b,R,b,B,B,b,R,b,}, + }}; + +SpriteDef shipspr1_4= + {{ /* SHIP */ + {b,b,b,B,B,b,b,b,}, + {b,b,B,B,B,B,b,b,}, + {b,b,B,W,W,B,b,b,}, + {b,b,b,B,B,b,b,b,}, + {b,R,b,B,B,b,R,b,}, + {b,R,B,B,B,B,R,b,}, + {b,R,B,B,B,B,R,b,}, + {b,Y,b,B,B,b,Y,b,}, + }}; + +SpriteDef alienbullet1= + {{ /* ALIEN BULLET */ + {b,b,b,W,W,b,b,b,}, + {b,b,b,W,W,b,b,b,}, + {b,b,b,W,W,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + }}; + +SpriteDef shipbullet1= + {{ /* SHIP BULLET */ + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,b,C,C,b,b,b,}, + {b,b,b,C,C,b,b,b,}, + {b,b,b,C,C,b,b,b,}, + }}; + +SpriteDef galax1_1= + {{ /* GALAX 1 */ + {b,G,b,b,b,b,G,b,}, + {b,G,b,b,b,b,G,b,}, + {b,b,G,G,G,G,b,b,}, + {b,G,b,G,G,b,G,b,}, + {b,G,G,G,G,G,G,b,}, + {G,b,G,b,b,G,b,G,}, + {G,b,b,G,G,b,b,G,}, + {b,b,b,G,G,b,b,b,}, + }}; + +SpriteDef galax1_2= + {{ /* GALAX 1 */ + {G,b,b,b,b,b,b,G,}, + {b,G,b,b,b,b,G,b,}, + {b,b,G,G,G,G,b,b,}, + {b,G,b,G,G,b,G,b,}, + {b,G,G,G,G,G,G,b,}, + {G,b,G,b,b,G,b,G,}, + {b,G,b,G,G,b,G,b,}, + {b,b,G,b,b,G,b,b,}, + }}; + +SpriteDef galax2_1= + {{ /* GALAX 2 */ + {b,b,b,M,M,b,b,b,}, + {b,b,M,M,M,M,b,b,}, + {b,M,b,M,M,b,M,b,}, + {b,M,M,M,M,M,M,b,}, + {b,M,M,M,M,M,M,b,}, + {M,b,M,M,M,M,b,M,}, + {M,b,b,M,M,b,b,M,}, + {M,b,b,M,M,b,b,M,}, + }}; + +SpriteDef galax2_2= + {{ /* GALAX 2 */ + {b,b,b,M,M,b,b,b,}, + {b,b,M,M,M,M,b,b,}, + {b,M,b,M,M,b,M,b,}, + {b,M,M,M,M,M,M,b,}, + {M,M,M,b,b,M,M,M,}, + {M,b,M,M,M,M,b,M,}, + {M,b,b,M,M,b,b,M,}, + {b,b,M,b,b,M,b,b,}, + }}; + +SpriteDef galax3_1= + {{ /* GALAX 3 */ + {R,b,b,b,b,b,b,R,}, + {R,b,b,B,B,b,b,R,}, + {R,R,b,B,B,b,R,R,}, + {R,R,R,b,b,R,R,R,}, + {R,b,R,R,R,R,b,R,}, + {R,b,b,R,R,b,b,R,}, + {b,b,R,R,R,R,b,b,}, + {b,b,b,R,R,b,b,b,}, + }}; + +SpriteDef galax3_2= + {{ /* GALAX 3 */ + {b,b,b,b,b,b,b,b,}, + {R,b,b,B,B,b,b,R,}, + {R,b,b,B,B,b,b,R,}, + {R,R,R,b,b,R,R,R,}, + {R,R,R,R,R,R,R,R,}, + {R,b,b,R,R,b,b,R,}, + {R,b,R,R,R,R,b,R,}, + {b,b,b,R,R,b,b,b,}, + }}; + +SpriteDef galax3_3= + {{ /* GALAX 3 */ + {b,b,b,b,b,b,b,b,}, + {b,b,b,B,B,b,b,b,}, + {R,b,b,B,B,b,b,R,}, + {R,b,R,b,b,R,b,R,}, + {R,R,R,R,R,R,R,R,}, + {R,R,b,R,R,b,R,R,}, + {R,b,R,R,R,R,b,R,}, + {R,b,b,R,R,b,b,R,}, + }}; + +SpriteDef galax3_4= + {{ /* GALAX 3 */ + {b,b,b,b,b,b,b,b,}, + {R,b,b,B,B,b,b,R,}, + {R,b,b,B,B,b,b,R,}, + {R,R,R,b,b,R,R,R,}, + {R,R,R,R,R,R,R,R,}, + {R,b,b,R,R,b,b,R,}, + {R,b,R,R,R,R,b,R,}, + {b,b,b,R,R,b,b,b,}, + }}; + +SpriteDef flag1= + {{ /* FLAG1 */ + {b,b,b,b,b,b,b,b,}, + {b,b,b,b,b,b,b,b,}, + {b,b,W,R,R,b,b,b,}, + {b,b,W,R,R,R,b,b,}, + {b,b,W,R,R,b,b,b,}, + {b,b,W,b,b,b,b,b,}, + {b,b,W,b,b,b,b,b,}, + {b,b,W,b,b,b,b,b,}, + }}; + +SpriteDef flag10= + {{ /* FLAG10 */ + {W,W,R,R,b,b,b,b,}, + {W,W,R,R,R,R,b,b,}, + {W,W,R,R,R,R,R,R,}, + {W,W,R,R,R,R,b,b,}, + {W,W,R,R,b,b,b,b,}, + {W,W,b,b,b,b,b,b,}, + {W,W,b,b,b,b,b,b,}, + {W,W,b,b,b,b,b,b,}, + }}; + +SpriteDef entity1_1= + {{ /* ENTITY1 */ + {b,G,G,G,G,G,G,b,}, + {G,G,G,G,G,G,G,G,}, + {G,G,G,G,G,G,G,G,}, + {G,G,G,W,W,G,G,G,}, + {G,G,G,W,W,G,G,G,}, + {G,G,G,G,G,G,G,G,}, + {G,G,G,G,G,G,G,G,}, + {b,G,G,G,G,G,G,b,}, + }}; + +SpriteDef entity1_2= + {{ /* ENTITY1 */ + {b,b,G,G,G,G,b,b,}, + {b,G,G,G,G,G,G,b,}, + {G,G,G,W,W,G,G,G,}, + {G,G,W,W,W,W,G,G,}, + {G,G,W,W,W,W,G,G,}, + {G,G,G,W,W,G,G,G,}, + {b,G,G,G,G,G,G,b,}, + {b,b,G,G,G,G,b,b,}, + }}; + +SpriteDef entity1_3= + {{ /* ENTITY1 */ + {b,b,b,b,b,b,b,b,}, + {b,b,G,W,W,G,b,b,}, + {b,G,W,W,W,W,G,b,}, + {b,W,W,W,W,W,W,b,}, + {b,W,W,W,W,W,W,b,}, + {b,G,W,W,W,W,G,b,}, + {b,b,G,W,W,G,b,b,}, + {b,b,b,b,b,b,b,b,}, + }}; + +SpriteDef entity1_4= + {{ /* ENTITY1 */ + {b,b,G,G,G,G,b,b,}, + {b,G,G,G,G,G,G,b,}, + {G,G,G,W,W,G,G,G,}, + {G,G,W,W,W,W,G,G,}, + {G,G,W,W,W,W,G,G,}, + {G,G,G,W,W,G,G,G,}, + {b,G,G,G,G,G,G,b,}, + {b,b,G,G,G,G,b,b,}, + }}; + +SpriteDef alienufo1_1= + {{ /* ALIENUFO */ + {b,b,b,b,b,b,b,b,}, + {b,b,b,R,R,b,b,b,}, + {b,R,R,R,R,R,R,b,}, + {R,R,R,R,R,R,R,R,}, + {Y,Y,B,B,B,B,B,B,}, + {R,R,R,R,R,R,R,R,}, + {b,R,R,R,R,R,R,b,}, + {b,b,b,R,R,b,b,b,}, + }}; + +SpriteDef alienufo1_2= + {{ /* ALIENUFO */ + {b,b,b,b,b,b,b,b,}, + {b,b,b,R,R,b,b,b,}, + {b,R,R,R,R,R,R,b,}, + {R,R,R,R,R,R,R,R,}, + {B,B,Y,Y,B,B,B,B,}, + {R,R,R,R,R,R,R,R,}, + {b,R,R,R,R,R,R,b,}, + {b,b,b,R,R,b,b,b,}, + }}; + +SpriteDef alienufo1_3= + {{ /* ALIENUFO */ + {b,b,b,b,b,b,b,b,}, + {b,b,b,R,R,b,b,b,}, + {b,R,R,R,R,R,R,b,}, + {R,R,R,R,R,R,R,R,}, + {B,B,B,B,Y,Y,B,B,}, + {R,R,R,R,R,R,R,R,}, + {b,R,R,R,R,R,R,b,}, + {b,b,b,R,R,b,b,b,}, + }}; + +SpriteDef alienufo1_4= + {{ /* ALIENUFO */ + {b,b,b,b,b,b,b,b,}, + {b,b,b,R,R,b,b,b,}, + {b,R,R,R,R,R,R,b,}, + {R,R,R,R,R,R,R,R,}, + {B,B,B,B,B,B,Y,Y,}, + {R,R,R,R,R,R,R,R,}, + {b,R,R,R,R,R,R,b,}, + {b,b,b,R,R,b,b,b,}, + }}; + +SpriteDef safeshipspr1_1= + {{ /* SAFESHIP */ + {b,b,b,W,W,b,b,b,}, + {b,b,W,W,W,W,b,b,}, + {b,b,W,W,W,W,b,b,}, + {b,b,b,W,W,b,b,b,}, + {b,W,b,W,W,b,W,b,}, + {b,W,W,W,W,W,W,b,}, + {b,W,W,W,W,W,W,b,}, + {b,W,b,W,W,b,W,b,}, + }}; + +SpriteDef safeshipspr1_2= + {{ /* SAFESHIP */ + {b,b,b,R,R,b,b,b,}, + {b,b,R,R,R,R,b,b,}, + {b,b,R,R,R,R,b,b,}, + {b,b,b,R,R,b,b,b,}, + {b,R,b,R,R,b,R,b,}, + {b,R,R,R,R,R,R,b,}, + {b,R,R,R,R,R,R,b,}, + {b,R,b,R,R,b,R,b,}, + }}; + + +#undef b +#undef W +#undef R +#undef G +#undef B +#undef Y +#undef C +#undef M + + + + +SpriteAnim anim[NOSPR]= + { + { /* SHIP */ + 4, + { + &shipspr1_1, + &shipspr1_2, + &shipspr1_3, + &shipspr1_4, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* ALIEN BULLET */ + 1, + { + &alienbullet1, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* SHIP BULLET */ + 1, + { + &shipbullet1, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* GALAX1 */ + 2, + { + &galax1_1, + &galax1_2, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* GALAX2 */ + 2, + { + &galax2_1, + &galax2_2, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* GALAX3 */ + 4, + { + &galax3_1, + &galax3_2, + &galax3_3, + &galax3_4, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* FLAG1 */ + 1, + { + &flag1, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* FLAG10 */ + 1, + { + &flag10, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* ENTITY1 */ + 4, + { + &entity1_1, + &entity1_2, + &entity1_3, + &entity1_4, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* ALIENUFO */ + 4, + { + &alienufo1_1, + &alienufo1_2, + &alienufo1_3, + &alienufo1_4, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + { /* SAFESHIP */ + 2, + { + &safeshipspr1_1, + &safeshipspr1_2, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + } + }, + }; + +SpriteDef *spr[NOSPR]= + { + &shipspr1_1, + &alienbullet1, + &shipbullet1, + &galax1_1, + &galax2_1, + &galax3_1, + &flag1, + &flag10, + &entity1_1, + &safeshipspr1_1, + }; -- cgit v1.2.3