/*
 * Copyright 1988, 1989, 1990, 1991 Massachusetts Institute of Technology
 */
#include"xpointer.h"

static char string_to_display[100];
static int showing_message = 0;
static int read_out_queue = 0, write_to_queue = 0, num_enqueued = 0;
static char queued_strings[10][100];

display_message(message_string)
     char *message_string;
{
  extern Display *dpy;
  extern Window message_window;
  Window root_return, child_return;
  int root_x_return, root_y_return, win_x_return, win_y_return;
  unsigned int mask_return;
  if (showing_message) {
    queue_string(message_string);
    return;
  }
  strncpy(string_to_display,message_string,100);
  XQueryPointer(dpy, DefaultRootWindow(dpy), &root_return, &child_return,
		&root_x_return, &root_y_return, &win_x_return,
		&win_y_return, &mask_return);
  XMoveWindow(dpy, message_window, win_x_return - 250, win_y_return - 42);  
  XRaiseWindow(dpy, message_window);
  XMapWindow(dpy,message_window);
  XFlush(dpy);
  showing_message = 1;
}

show_message()
{
  extern GC brighttext;
  extern XFontStruct *normfont;
  XDrawString(dpy, message_window, brighttext, 2, normfont->ascent,
	      string_to_display, strlen(string_to_display));
}

queue_string(enqueue_string)
     char *enqueue_string;
{
  strncpy(queued_strings[write_to_queue], enqueue_string, 100);
  write_to_queue++;
  if (write_to_queue == 10) write_to_queue = 0;
  num_enqueued++;
}

dequeue_string()
{
  if (!num_enqueued) return;
  strncpy(string_to_display, queued_strings[read_out_queue], 100);
  read_out_queue++;
  if (read_out_queue == 10) read_out_queue = 0;
  XClearWindow(dpy, message_window);
  show_message();
  num_enqueued--;
}

cancel_message()
{
  if (num_enqueued) dequeue_string();
  else {
    XUnmapWindow(dpy, message_window);
    showing_message = 0;
  }
}
