/***********************************************************************
 * 
 *  G F O ! 
 *  by Chee Chew
 *      and 
 *     Ken Duda 
 *
 *  (c) 1990
 *
 *  This software is free for distribution.  This notice, however, may 
 *  not be altered.
 *  
 *  Enjoy! (and punt... )
 *
 ***********************************************************************/

#include "xstuff.h"
#include "game.h"
#include "stdio.h"

#define FACEFONT "9x15"
#define FACE_FILE "/afs/sipb/project/gfo/src/bitmaps/face"
#define MAX_MESSAGE sizeof(msglist)/sizeof(struct messages_t)

char *get_dos_error(int i) 
{
  struct messages_t {
    char *msg; 
    int used;
  } msglist[] = {
    { "General Failure Error", 0 },
    { "Drive Not Ready", 0},
    { "Abort, Retry, Ignore", 0},
    { "Unable to Load COMMAND.COM", 0},
    { "Boot Failure", 0},
    { "Duu... which way did he go???", 0},
    { "Memory Allocation Error", 0}, 
    { "Bad command or filename", 0},
    { "Write protect error", 0},
    { "stty: not a mac", 0}, 
    { "Keyboard Error.", 0}
  };
  int which; 

  which = random() % MAX_MESSAGE ;
  
  while(msglist[which].used) which = (++which) % MAX_MESSAGE;
  if(!i) {
    for(i = MAX_MESSAGE - 1; i ; i--)
      msglist[i].used = 0;
  }
  return(msglist[which].msg);
}

show_dudely_face(Game *g, char *lastmessage)
{
  int i = 5; 
  int y = 0;
  Pixmap pixmap;
  char *msg;

XSynchronize(g->xc->dsp, True);
  XUnmapSubwindows(g->xc->dsp, g->xc->mwin);
  pixmap = XCreatePixmap(g->xc->dsp, g->xc->mwin, 200, 300, g->xc->planes);
  XFillRectangle(g->xc->dsp, pixmap, g->xc->berase_gc, 0, 0, 201, 301);
  
  while(i--) {
    msg = get_dos_error(i);
    y += 20;
    XDrawString(g->xc->dsp, pixmap, g->xc->bdraw_gc, 10, y,
		msg, strlen(msg));
    XCopyArea(g->xc->dsp, g->xc->face[i % MAX_FACES], g->xc->mwin, 
	      g->xc->copy_gc,0, 0, 
	      g->xc->face_width, g->xc->face_height,
	      (g->xc->width - g->xc->face_width)/2,
	      (g->xc->height - g->xc->face_height) / 2);
    XCopyArea(g->xc->dsp, pixmap, g->xc->mwin,g->xc->copy_gc,
	      0, 0, 
	      200, 300, 0, 0);
    sleep(1);
  }
  XMapSubwindows(g->xc->dsp, g->xc->mwin);
  XFreePixmap(g->xc->dsp, pixmap);  
  XSynchronize(g->xc->dsp, False);
}


SetupFace(XC *xc)
{
  Pixmap oneplane;
  int x,y;
  int i = MAX_FACES; 
  char file[80];
  
  XSynchronize(xc->dsp, True);
  while(i--) {
    sprintf(file,"%s%d",FACE_FILE, i);
    xc->face[i] = read_pixmap(xc, xc->mwin, file, &xc->face_width, &xc->face_height);
  }
  if ((xc->facefont = XLoadQueryFont(xc->dsp, FACEFONT)) == NULL) {
    fprintf (stderr, "Can't open font %s\n",FACEFONT);
    exit (1);
  }
  XSynchronize(xc->dsp, False);
}
