Example #1
0
void    metawindow()
/* Show the meta server menu window */
{
  int i, height;
  char *header;
  static int lastHeight = 0;

  if (!metaWin) {
    height = 250 + metaHeight * (W_Textheight + 8) + 4 * (metaHeight - 1);
    metaWin = W_MakeWindow("Netrek Server List", 0, 0, 716, height, NULL, 2,
                           foreColor);
    W_SetBackgroundImage(metaWin, "Misc/map_back.png");
    logo = W_ReadImage(metaWin, "netrek-green-white-300px.png");
    metaList = W_MakeMenu("metalist", 50, 200, LINE, metaHeight, metaWin, 1);
    lastHeight = metaHeight;
    make_help();
  } else {
    if (metaHeight > lastHeight) {
      W_ReinitMenu(metaList, LINE, metaHeight);
      W_ResizeMenu(metaList, LINE, metaHeight);
      lastHeight = metaHeight;
    }
    // FIXME: handle metaList growing beyond metaWin
  }

  header = "Server                                           Status        Type      Age";
  W_WriteText(metaList, 0, 0, W_Cyan, header, -1, 0);

  for (i = 0; i < metaHeight; i++) redraw(i);

  /* Give the window the right name */
  W_RenameWindow(metaWin, metaWindowName);

  /* Add additional options */
  W_WriteText(metaList, 0, metaHeight-B_REFRESH, W_Yellow,
              "Refresh                                           (r)",
              -1, 0);
  add_redraw();
  W_WriteText(metaList, 0, metaHeight-B_HELP, W_Yellow,
                "Help & Tips                                       (h)",
              -1, 0);
  W_WriteText(metaList, 0, metaHeight-B_QUIT, W_Yellow,
                "Quit                                              (q)",
              -1, 0);

  /* Map window */
  W_MapWindow(metaList);
  W_MapWindow(metaWin);
}
Example #2
0
static void make_help()
{
  int i, l, h, w;

  /* calculate width and height required */
  h = (sizeof(metahelp_message)/sizeof(char *));
  w = 0;
  for (i=0; i<h; i++) {
    char *line = metahelp_message[i];
    if (line == NULL) break;
    l = strlen(line);
    if (l > w) w = l;
  }
  metaHelpWin = W_MakeWindow("Netrek Server List - Help", 500, 500,
                             w * W_Textwidth + 40, h * W_Textheight + 40,
                             0, 2, foreColor);
}
void
newwin(char *hostmon, char *progname)
{
    int     i;
    W_Image *image;

    /* W_Initialize(hostmon); */
    getResources(progname);

    /* the x,y passwd to makewindow are the x,y of the top left corner of
       the border.  The actual window starts x+BORDER,y+BORDER down.  The
       given width is the width of the window WITHOUT the border, ie. 
       useable space.  [BDyess] */
    baseWin = W_MakeWindow("netrek", 0, YOFF, WINSIDE + MAPSIDE + 6 * BORDER,
			   WINSIDE + 9 * BORDER + 2 * MESSAGESIZE + 
			   23 * W_Textheight + 2*WIN_EDGE, NULL, 
			   "bomb here", /*no border*/ 0, gColor);
    image = getImage(I_ICON);
    iconWin = W_MakeWindow("netrek_icon", 0, 0, image->width,image->height,NULL,
			   (char *) 0, BORDER, gColor);
    W_SetIconWindow(baseWin, iconWin);
    w = W_MakeWindow("local", BORDER, BORDER, WINSIDE, WINSIDE, baseWin, 
                     (char *) 0, BORDER, foreColor);
    mapw = W_MakeWindow("map", WINSIDE + 3*BORDER, BORDER, MAPSIDE, MAPSIDE, 
                        baseWin, (char *) 0, BORDER, foreColor);
    tstatw = W_MakeWindow("tstat", BORDER, winside+3*BORDER, winside, 
                          STATSIZE, baseWin, "xterm", BORDER, foreColor);
/*    if(xpm) W_SetWindowBackgroundImage(tstatw, getImage(I_DASHBOARD_BG));*/
    warnw = W_MakeWindow("warn", winside+3*BORDER, mapside+3*BORDER, 
    			 mapside, MESSAGESIZE, baseWin, "xterm", BORDER,
			 foreColor);
    messagew = W_MakeWindow("message", winside+3*BORDER, 
               mapside + 5*BORDER + MESSAGESIZE, mapside, MESSAGESIZE, baseWin,
	       "xterm", BORDER, foreColor);
    planetw = W_MakeTextWindow("planet", 10, 10, 75, (MAXPLANETS + 16) / 2, w, 
                               (char *) 0, 2);
    planetw2 = W_MakeTextWindow("planet2", 10, 10, 75, (MAXPLANETS + 16) / 2, 
                                mapw, (char *) 0, 2);
    rankw = W_MakeTextWindow("rank", 50, 100, 65, nranks2 + 8, w, (char*) 0, 2);
    playerw = W_MakeTextWindow("Player", winside + 3*BORDER, 
                               mapside + 7 * BORDER + 2 * MESSAGESIZE,
			       (mapside-2*WIN_EDGE)/W_Textwidth/*82*/, 23,
			       baseWin, (char *) 0, 2);
    helpWin = W_MakeTextWindow("HELP!", 0, 
                               YOFF + winside + 2 * BORDER + 2 * MESSAGESIZE,
		               160, helpmessages / 4 + 1, NULL, (char *) 0, 
			       BORDER);

    initMessageWindows();

    pStats = W_MakeWindow("Network Statistics", 500, 4, pStatsWidth(), pStatsHeight(),
			  NULL, (char *) 0, 1, foreColor);
    udpWin = W_MakeMenu("UDP", winside + 10, -BORDER + 10, 40, UDP_NUMOPTS,
			NULL, 2);

    spWin = W_MakeMenu("network", winside + 10, -BORDER + 10, 40, SPK_NUMFIELDS,
		       NULL, 2);

  toolsWin = W_MakeScrollingWindow("tools", winside + BORDER, BORDER,
				   80, TOOLSWINLEN, NULL, "xterm", BORDER);

    motdWin = W_MakeWindow("Motd"
			   ,-BORDER, -BORDER, winside, winside, NULL,
			   (char *) 0, BORDER, foreColor);

    for (i = 0; i < 4; i++) {
	teamWin[i] = W_MakeWindow(teaminfo[i].shortname, i * (BOXSIDE+2*BORDER),
	                  0, BOXSIDE, BOXSIDE, mapw, (char *) 0, BORDER, 
			  foreColor);
    }
    qwin = W_MakeWindow("quit", 4 * (BOXSIDE+2*BORDER), 0, BOXSIDE, BOXSIDE, 
                        mapw, "pirate", BORDER, foreColor);

/*    statwin = W_MakeWindow("Stats", 422, 13, 160, 95, NULL, (char*)0,
      5, foreColor);*/
    statwin = W_MakeWindow("stats", 422, 13, 160, 80, NULL,
			   (char *) 0, 5, foreColor);
    newstatwin = W_MakeWindow("NewStats", 422, 13, 100 + 2*BORDER, 400+2*BORDER,
                              NULL, (char *) 0, BORDER, foreColor);

#define WARHEIGHT 2
#define WARWIDTH 20
#define WARBORDER BORDER

    war = W_MakeMenu("war", winside + 10, 10, WARWIDTH, 6, baseWin,
		     WARBORDER);


    /* needed to update constants now that local and map window sizes
       are dynamic [BDyess] */
    recalcWindowConstants();
    saveimages();
}
Example #4
0
findslot(void)
{
  int     oldcount = -1;
  W_Window waitWin, qwin, countWin, motdButtonWin;

  W_Window motdWin;
  extern int MaxMotdLine;
  int     WaitMotdLine = 0;
  int     mapMotd = booleanDefault("showMotd", 1);
  W_Event event;


  /* Wait for some kind of indication about in/not in */
  while (queuePos == -1)
    {
      socketPause();
      if (isServerDead())
  {

#if defined(SOUND) && !defined(HAVE_SDL)
    Exit_Sound();
#endif

    printf("Shit!  Ghostbusted!\n");
    terminate(0);
  }
      readFromServer(NULL);
      if (me != NULL)
  {
    /* We are in! */
    ANNOUNCESOCKET;
    return (me->p_no);
  }
    }

  /* We have to wait.  Make appropriate windows, etc... */

  waitWin = W_MakeWindow("wait", 0, 0, WAITWIDTH, WAITHEIGHT, NULL, 2,
       foreColor);
  countWin = W_MakeWindow("count", WAITWIDTH / 3, WAITTITLE, WAITWIDTH / 3,
        WAITHEIGHT - WAITTITLE, waitWin, 1, foreColor);
  qwin = W_MakeWindow("waitquit", 0, WAITTITLE, WAITWIDTH / 3,
          WAITHEIGHT - WAITTITLE, waitWin, 1, foreColor);
  motdButtonWin = W_MakeWindow("motdbutton", 2 * WAITWIDTH / 3, WAITTITLE,
           WAITWIDTH / 3, WAITHEIGHT - WAITTITLE, waitWin,
             1, foreColor);
  W_MapWindow(waitWin);
  W_MapWindow(countWin);
  W_MapWindow(motdButtonWin);
  W_MapWindow(qwin);
  if (mapMotd)
    {
      motdWin = W_MakeWindow("waitmotd", 1, WAITWIDTH + 1, TWINSIDE,
           TWINSIDE, 0, 2, foreColor);
      W_MapWindow(motdWin);
      showMotd(motdWin, WaitMotdLine);
    }

  for (;;)
    {
      socketPause();
      readFromServer(NULL);
      if (isServerDead())
  {

#if defined(SOUND) && !defined(HAVE_SDL)
    Exit_Sound();
#endif

    printf("Damn, We've been ghostbusted!\n");
    terminate(0);
  }
      while (W_EventsPending())
  {
    W_NextEvent(&event);
    switch ((int) event.type)
      {
      case W_EV_BUTTON:
      case W_EV_KEY:
        if (mapMotd && event.Window == motdWin)
    {
      if (event.key == ' ' || event.key == 'q')
        {
          W_DestroyWindow(motdWin);
          mapMotd = !mapMotd;
        }
      else
        {
          if (event.key == 'b')
      {
        WaitMotdLine -= 28;
        WaitMotdLine = MAX(WaitMotdLine, 0);
      }
          else
      {
        WaitMotdLine += 28;
        /* scroll to start if it goes over */
        if (WaitMotdLine > MaxMotdLine)
          WaitMotdLine = 0;
      }
          W_ClearWindow(motdWin);
          showMotd(motdWin, WaitMotdLine);
          break;
        }
    }
        else if (event.Window == motdButtonWin)
    {
      if (mapMotd)
        {
          W_DestroyWindow(motdWin);
        }
      else
        {
          motdWin = W_MakeWindow("waitmotd", 1, WAITWIDTH + 1,
               TWINSIDE, TWINSIDE, 0, 2,
               foreColor);
          W_MapWindow(motdWin);
          showMotd(motdWin, WaitMotdLine);
        }
      mapMotd = !mapMotd;
    }
        else if (event.Window == qwin)
    {

#if defined(SOUND) && !defined(HAVE_SDL)
      Exit_Sound();
#endif

      printf("OK, bye!\n");
      terminate(0);
    }
        break;
      case W_EV_EXPOSE:
        if (event.Window == waitWin)
    {
      mapWaitWin(waitWin);
    }
        else if (event.Window == motdWin)
    {
      showMotd(motdWin, WaitMotdLine);
    }
        else if (event.Window == qwin)
    {
      mapWaitQuit(qwin);
    }
        else if (event.Window == countWin)
    {
      mapWaitCount(waitWin, countWin, queuePos);
    }
        else if (event.Window == motdButtonWin)
    {
      mapWaitMotdButton(motdButtonWin);
    }
        break;
      default:
        break;
      }
  }
      if (queuePos != oldcount)
  {
    mapWaitCount(waitWin, countWin, queuePos);
    oldcount = queuePos;
  }
      if (me != NULL)
  {
    W_DestroyWindow(waitWin);
    if (mapMotd)
      {
        W_DestroyWindow(motdWin);
      }
    ANNOUNCESOCKET;
    W_Beep();
    W_Beep();
    return (me->p_no);
  }
    }
}
Example #5
0
showdocs(int atline)
{
  FILE   *fptr;
  int     i, length, top, center;
  struct list *data;
  int     count;
  char    buf[128];
  W_Font  font;

  if (!docwin)
    docwin = W_MakeWindow("DocWin", 0, 181, 500, 500, 0, 2,
        foreColor);

  W_ClearWindow(docwin);

  if (!W_IsMapped(docwin))
    W_MapWindow(docwin);

  sprintf(buf, "---  %s  ---", (char *) query_cowid());
  length = strlen(buf);

  /* using GWINSIDE instead of TWINSIDE because with SMALL_SCREEN defined it
   * * makes more sense to use the smaller width in the interest of saving *
   * screen real estate */
  center = GWINSIDE / 2 - (length * W_Textwidth) / 2;
  W_WriteText(docwin, center, W_Textheight, textColor,
        buf, length, W_BoldFont);
  sprintf(buf, cbugs);
  length = strlen(buf);
  center = GWINSIDE / 2 - (length * W_Textwidth) / 2;
  W_WriteText(docwin, center, 3 * W_Textheight, textColor,
        buf, length, W_RegularFont);

  if (!docdata)
    loaddocs();

  top = 10;

  if (atline > maxdoclines)
    atline = maxdoclines - 28;

  data = docdata;

  for (i = 0; i < atline; i++)
    {
      if (data == NULL)
  {
    atline = 0;
    data = docdata;
    break;
  }
      data = data->next;
    }

  count = 28;          /* Magical # of lines to * *
              * display */

  for (i = top; i < 50; i++)
    {
      if (data == NULL)
  break;

      if (data->data == NULL)
  continue;

      switch (data->face)
  {
  case BOLD:
    font = W_BoldFont;
    break;
  case ITALIC:
    font = W_UnderlineFont;
    break;
  case NORMAL:
    font = W_RegularFont;
    break;
  }


      W_WriteText(docwin, 20, i * W_Textheight, textColor, data->data,
      strlen(data->data), font);
      data = data->next;
      count--;

      if (count <= 0)
  break;
    }
}
Example #6
0
showxtrekrc(int atline)
{
  FILE   *fptr;
  int     i, length, top, center;
  struct list *data;
  int     count;
  char    buf[128];
  W_Font  font;

  if (!xtrekrcwin)
    xtrekrcwin = W_MakeWindow("xtrekrcWin", 0, 200, 500, 500, 0, 2,
            foreColor);

  W_ClearWindow(xtrekrcwin);

  if (!W_IsMapped(xtrekrcwin))
    W_MapWindow(xtrekrcwin);

  sprintf(buf, "---  %s  ---", (char *) query_cowid());
  length = strlen(buf);
  center = GWINSIDE / 2 - (length * W_Textwidth) / 2;
  W_WriteText(xtrekrcwin, center, W_Textheight, textColor,
        buf, length, W_BoldFont);
  sprintf(buf, cbugs);
  length = strlen(buf);
  center = GWINSIDE / 2 - (length * W_Textwidth) / 2;
  W_WriteText(xtrekrcwin, center, 3 * W_Textheight, textColor,
        buf, length, W_RegularFont);

  if (!xtrekrcdata)
    loadxtrekrc();

  top = 10;

  if (atline > maxxtrekrclines)
    atline = maxxtrekrclines - 28;

  data = xtrekrcdata;

  for (i = 0; i < atline; i++)
    {
      if (data == NULL)
  {
    atline = 0;
    data = xtrekrcdata;
    break;
  }
      data = data->next;
    }

  count = 28;          /* Magical # of lines to * *
              * display */

  for (i = top; i < 50; i++)
    {
      if (data == NULL)
  break;

      if (data->data == NULL)
  continue;

      switch (data->face)
  {
  case BOLD:
    font = W_BoldFont;
    break;
  case ITALIC:
    font = W_UnderlineFont;
    break;
  case NORMAL:
    font = W_RegularFont;
    break;
  }


      W_WriteText(xtrekrcwin, 20, i * W_Textheight, textColor, data->data,
      strlen(data->data), font);
      data = data->next;
      count--;

      if (count <= 0)
  break;
    }
}