Mercurial > ~darius > hgwebdir.cgi > paradise_client
view findslot.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
line wrap: on
line source
/* $Id: findslot.c,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ /* * findslot.c * * Kevin Smith 03/23/88 * */ #include "copyright2.h" #include <stdio.h> #include <sys/types.h> #include <errno.h> #include <pwd.h> #include <string.h> #include <ctype.h> #ifdef __STDC__ #include <stdlib.h> #endif #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "proto.h" #define WAITWIDTH 180 #define WAITHEIGHT 60 #define WAITTITLE 15 /* height of title for wait window */ #define WAITICONHEIGHT 50 #define WAITICONWIDTH 50 /* Prototypes */ static void mapWaitCount P((W_Window countWin, unsigned int count)); static void mapWaitQuit P((W_Window qwin)); static void mapWaitWin P((W_Window waitWin)); static void mapMotdButtonWin P((W_Window motdButtonWin)); static void mapWaitIcon P((W_Window waitIcon, unsigned int count, int *motdMapLater)); extern int newMotdStuff; /* from newwin.c */ int findslot() { int oldcount = -1; W_Window waitWin, qwin, countWin, motdButtonWin, waitIcon; W_Event event; int motdMapLater = 0; /* Wait for some kind of indication about in/not in */ while (queuePos == -1) { socketPause(1, 0); if (isServerDead()) { printf("Augh! Ghostbusted!\n"); EXIT(0); } readFromServer(); if (me != NULL) { /* We are in! */ printf("*** socket %d, player %d ( -s %d -G %d [-2] ) ***\n", nextSocket, me->p_no, nextSocket, me->p_no); return (me->p_no); } } /* We have to wait. Make appropriate windows, etc... */ waitWin = W_MakeWindow("wait", 0, 0, WAITWIDTH, WAITHEIGHT, NULL, (char *) 0, 2, foreColor); countWin = W_MakeWindow("count", WAITWIDTH / 3, WAITTITLE, 2 * WAITWIDTH / 3, WAITHEIGHT - WAITTITLE, waitWin, (char *) 0, 1, foreColor); qwin = W_MakeWindow("waitquit", 0, WAITTITLE, WAITWIDTH / 3, WAITHEIGHT - WAITTITLE, waitWin, (char *) 0, 1, foreColor); motdButtonWin = W_MakeWindow("motd_select", 2 * WAITWIDTH / 3, WAITTITLE, WAITWIDTH, WAITHEIGHT - WAITTITLE, waitWin, (char *) 0, 1, foreColor); waitIcon = W_MakeWindow("wait_icon", 0, 0, WAITICONWIDTH, WAITICONHEIGHT, NULL, NULL, BORDER, foreColor); W_SetIconWindow(waitWin, waitIcon); /* showMotdWin(); */ #ifndef AMIGA W_MapWindow(waitWin); W_MapWindow(countWin); W_MapWindow(qwin); W_MapWindow(motdButtonWin); #else W_MapWindow(waitIcon); #endif for (;;) { socketPause(0, 10000); readFromServer(); if (isServerDead()) { printf("We've been ghostbusted!\n"); EXIT(0); } if (newMotdStuff) showMotd(motdWin); while (W_EventsPending()) { W_NextEvent(&event); switch ((int) event.type) { case W_EV_KEY: if (event.Window == motdWin) { motdWinEvent(event.key); } #ifdef AMIGA else if (event.Window == waitIcon) { switch (event.key) { case 'q': case 'Q': printf("OK, bye!\n"); EXIT(0); case 'm': case 'M': showMotdWin(); break; default: break; } } #endif case W_EV_BUTTON: /* fall through */ if (event.Window == qwin) { printf("OK, bye!\n"); EXIT(0); } else if (event.Window == motdButtonWin) { showMotdWin(); } else if (event.Window == waitIcon) { mapWaitIcon(waitIcon, queuePos, NULL); } break; case W_EV_EXPOSE: if (event.Window == waitWin) { if (motdMapLater) { showMotd(motdWin); motdMapLater = 0; } mapWaitWin(waitWin); } else if (event.Window == qwin) { mapWaitQuit(qwin); } else if (event.Window == countWin) { mapWaitCount(countWin, queuePos); } else if (event.Window == motdWin) { showMotd(motdWin); } else if (event.Window == motdButtonWin) { mapMotdButtonWin(motdButtonWin); } else if (event.Window == waitIcon) { mapWaitIcon(waitIcon, queuePos, &motdMapLater); } break; default: break; } } if (queuePos != oldcount) { mapWaitCount(countWin, queuePos); mapWaitIcon(waitIcon, queuePos, NULL); oldcount = queuePos; } if (me != NULL) { W_DestroyWindow(waitWin); #ifdef AMIGA W_DestroyWindow(waitIcon); #endif printf("*** socket %d, player %d ( -s %d -G %d [-2] ) ***\n", nextSocket, me->p_no, nextSocket, me->p_no); return (me->p_no); } } } static void mapWaitWin(waitWin) W_Window waitWin; { char *s = "Netrek: Game is full."; W_WriteText(waitWin, 15, 5, textColor, s, strlen(s), W_RegularFont); } static void mapWaitQuit(qwin) W_Window qwin; { char *s = "Quit"; W_WriteText(qwin, 15, 15, textColor, s, strlen(s), W_RegularFont); } static void mapWaitCount(countWin, count) W_Window countWin; unsigned int count; { char *s = "Wait"; char *t = "Queue"; char buf[10]; register int len; W_WriteText(countWin, 15, 5, textColor, s, strlen(s), W_RegularFont); W_WriteText(countWin, 20, 15, textColor, t, strlen(t), W_RegularFont); sprintf(buf, "%d ", count); len = strlen(buf); if (count == -1) strcpy(buf, "?"); W_WriteText(countWin, WAITWIDTH / 6 - len * W_Textwidth / 2, 25, textColor, buf, len, W_RegularFont); } static void mapMotdButtonWin(motdButtonWin) W_Window motdButtonWin; { char *s = "MOTD"; W_WriteText(motdButtonWin, 15, 15, textColor, s, strlen(s), W_RegularFont); } static void mapWaitIcon(waitIcon, count, motdMapLater) W_Window waitIcon; unsigned int count; int *motdMapLater; { char buf[5]; int len; sprintf(buf, "%d", count); len = strlen(buf); #ifndef AMIGA if (motdMapLater && W_IsMapped(motdWin)) { *motdMapLater = 1; W_UnmapWindow(motdWin); } W_WriteText(waitIcon, WAITICONWIDTH / 2 - 10, W_Textheight, textColor, buf, len, W_BigFont); #else W_WriteText(waitIcon, WAITICONWIDTH / 2 - 10, W_Textheight, textColor, buf, len, W_RegularFont); /* using the iconWin in place of the 4 separate windows I get otherwise. -JR */ W_WriteText(waitIcon, 0, 0, textColor, serverName, strlen(serverName), W_RegularFont); W_WriteText(waitIcon, 0, 2 * W_Textheight, textColor, "Q to quit", 9, W_RegularFont); W_WriteText(waitIcon, 0, 3 * W_Textheight, textColor, "M for Motd", 10, W_RegularFont); #endif }