Mercurial > ~darius > hgwebdir.cgi > paradise_client
comparison findslot.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:fba0b6e6cdc7 | 3:5a977ccbc7a9 |
---|---|
1 /* $Id: findslot.c,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ | |
2 | |
3 /* | |
4 * findslot.c | |
5 * | |
6 * Kevin Smith 03/23/88 | |
7 * | |
8 */ | |
9 #include "copyright2.h" | |
10 | |
11 #include <stdio.h> | |
12 #include <sys/types.h> | |
13 #include <errno.h> | |
14 #include <pwd.h> | |
15 #include <string.h> | |
16 #include <ctype.h> | |
17 #ifdef __STDC__ | |
18 #include <stdlib.h> | |
19 #endif | |
20 #include "Wlib.h" | |
21 #include "defs.h" | |
22 #include "struct.h" | |
23 #include "data.h" | |
24 #include "proto.h" | |
25 | |
26 #define WAITWIDTH 180 | |
27 #define WAITHEIGHT 60 | |
28 #define WAITTITLE 15 /* height of title for wait window */ | |
29 #define WAITICONHEIGHT 50 | |
30 #define WAITICONWIDTH 50 | |
31 | |
32 /* Prototypes */ | |
33 static void mapWaitCount P((W_Window countWin, unsigned int count)); | |
34 static void mapWaitQuit P((W_Window qwin)); | |
35 static void mapWaitWin P((W_Window waitWin)); | |
36 static void mapMotdButtonWin P((W_Window motdButtonWin)); | |
37 static void mapWaitIcon | |
38 P((W_Window waitIcon, unsigned int count, | |
39 int *motdMapLater)); | |
40 | |
41 extern int newMotdStuff; /* from newwin.c */ | |
42 | |
43 | |
44 int findslot() | |
45 { | |
46 int oldcount = -1; | |
47 W_Window waitWin, qwin, countWin, motdButtonWin, waitIcon; | |
48 W_Event event; | |
49 int motdMapLater = 0; | |
50 | |
51 /* Wait for some kind of indication about in/not in */ | |
52 while (queuePos == -1) { | |
53 socketPause(1, 0); | |
54 if (isServerDead()) { | |
55 printf("Augh! Ghostbusted!\n"); | |
56 EXIT(0); | |
57 } | |
58 readFromServer(); | |
59 if (me != NULL) { | |
60 /* We are in! */ | |
61 printf("*** socket %d, player %d ( -s %d -G %d [-2] ) ***\n", | |
62 nextSocket, me->p_no, | |
63 nextSocket, me->p_no); | |
64 return (me->p_no); | |
65 } | |
66 } | |
67 | |
68 /* We have to wait. Make appropriate windows, etc... */ | |
69 waitWin = W_MakeWindow("wait", 0, 0, WAITWIDTH, WAITHEIGHT, NULL, (char *) 0, 2, foreColor); | |
70 countWin = W_MakeWindow("count", WAITWIDTH / 3, WAITTITLE, 2 * WAITWIDTH / 3, | |
71 WAITHEIGHT - WAITTITLE, waitWin, (char *) 0, 1, foreColor); | |
72 qwin = W_MakeWindow("waitquit", 0, WAITTITLE, WAITWIDTH / 3, | |
73 WAITHEIGHT - WAITTITLE, waitWin, (char *) 0, 1, foreColor); | |
74 motdButtonWin = W_MakeWindow("motd_select", 2 * WAITWIDTH / 3, WAITTITLE, | |
75 WAITWIDTH, WAITHEIGHT - WAITTITLE, waitWin, (char *) 0, 1, foreColor); | |
76 waitIcon = W_MakeWindow("wait_icon", 0, 0, WAITICONWIDTH, WAITICONHEIGHT, | |
77 NULL, NULL, BORDER, foreColor); | |
78 W_SetIconWindow(waitWin, waitIcon); | |
79 /* showMotdWin(); */ | |
80 #ifndef AMIGA | |
81 W_MapWindow(waitWin); | |
82 W_MapWindow(countWin); | |
83 W_MapWindow(qwin); | |
84 W_MapWindow(motdButtonWin); | |
85 #else | |
86 W_MapWindow(waitIcon); | |
87 #endif | |
88 for (;;) { | |
89 socketPause(0, 10000); | |
90 readFromServer(); | |
91 if (isServerDead()) { | |
92 printf("We've been ghostbusted!\n"); | |
93 EXIT(0); | |
94 } | |
95 if (newMotdStuff) | |
96 showMotd(motdWin); | |
97 while (W_EventsPending()) { | |
98 W_NextEvent(&event); | |
99 switch ((int) event.type) { | |
100 case W_EV_KEY: | |
101 if (event.Window == motdWin) { | |
102 motdWinEvent(event.key); | |
103 } | |
104 #ifdef AMIGA | |
105 else if (event.Window == waitIcon) { | |
106 switch (event.key) { | |
107 case 'q': | |
108 case 'Q': | |
109 printf("OK, bye!\n"); | |
110 EXIT(0); | |
111 case 'm': | |
112 case 'M': | |
113 showMotdWin(); | |
114 break; | |
115 default: | |
116 break; | |
117 } | |
118 } | |
119 #endif | |
120 case W_EV_BUTTON: /* fall through */ | |
121 if (event.Window == qwin) { | |
122 printf("OK, bye!\n"); | |
123 EXIT(0); | |
124 } else if (event.Window == motdButtonWin) { | |
125 showMotdWin(); | |
126 } else if (event.Window == waitIcon) { | |
127 mapWaitIcon(waitIcon, queuePos, NULL); | |
128 } | |
129 break; | |
130 case W_EV_EXPOSE: | |
131 if (event.Window == waitWin) { | |
132 if (motdMapLater) { | |
133 showMotd(motdWin); | |
134 motdMapLater = 0; | |
135 } | |
136 mapWaitWin(waitWin); | |
137 } else if (event.Window == qwin) { | |
138 mapWaitQuit(qwin); | |
139 } else if (event.Window == countWin) { | |
140 mapWaitCount(countWin, queuePos); | |
141 } else if (event.Window == motdWin) { | |
142 showMotd(motdWin); | |
143 } else if (event.Window == motdButtonWin) { | |
144 mapMotdButtonWin(motdButtonWin); | |
145 } else if (event.Window == waitIcon) { | |
146 mapWaitIcon(waitIcon, queuePos, &motdMapLater); | |
147 } | |
148 break; | |
149 default: | |
150 break; | |
151 } | |
152 } | |
153 if (queuePos != oldcount) { | |
154 mapWaitCount(countWin, queuePos); | |
155 mapWaitIcon(waitIcon, queuePos, NULL); | |
156 oldcount = queuePos; | |
157 } | |
158 if (me != NULL) { | |
159 W_DestroyWindow(waitWin); | |
160 #ifdef AMIGA | |
161 W_DestroyWindow(waitIcon); | |
162 #endif | |
163 printf("*** socket %d, player %d ( -s %d -G %d [-2] ) ***\n", | |
164 nextSocket, me->p_no, | |
165 nextSocket, me->p_no); | |
166 return (me->p_no); | |
167 } | |
168 } | |
169 } | |
170 | |
171 static void | |
172 mapWaitWin(waitWin) | |
173 W_Window waitWin; | |
174 { | |
175 char *s = "Netrek: Game is full."; | |
176 | |
177 W_WriteText(waitWin, 15, 5, textColor, s, strlen(s), W_RegularFont); | |
178 } | |
179 | |
180 static void | |
181 mapWaitQuit(qwin) | |
182 W_Window qwin; | |
183 { | |
184 char *s = "Quit"; | |
185 | |
186 W_WriteText(qwin, 15, 15, textColor, s, strlen(s), W_RegularFont); | |
187 } | |
188 | |
189 static void | |
190 mapWaitCount(countWin, count) | |
191 W_Window countWin; | |
192 unsigned int count; | |
193 { | |
194 char *s = "Wait"; | |
195 char *t = "Queue"; | |
196 char buf[10]; | |
197 register int len; | |
198 | |
199 W_WriteText(countWin, 15, 5, textColor, s, strlen(s), W_RegularFont); | |
200 W_WriteText(countWin, 20, 15, textColor, t, strlen(t), W_RegularFont); | |
201 sprintf(buf, "%d ", count); | |
202 len = strlen(buf); | |
203 if (count == -1) | |
204 strcpy(buf, "?"); | |
205 W_WriteText(countWin, WAITWIDTH / 6 - len * W_Textwidth / 2, 25, textColor, buf, | |
206 len, W_RegularFont); | |
207 } | |
208 | |
209 static void | |
210 mapMotdButtonWin(motdButtonWin) | |
211 W_Window motdButtonWin; | |
212 { | |
213 char *s = "MOTD"; | |
214 | |
215 W_WriteText(motdButtonWin, 15, 15, textColor, s, strlen(s), W_RegularFont); | |
216 } | |
217 | |
218 static void | |
219 mapWaitIcon(waitIcon, count, motdMapLater) | |
220 W_Window waitIcon; | |
221 unsigned int count; | |
222 int *motdMapLater; | |
223 { | |
224 char buf[5]; | |
225 int len; | |
226 | |
227 sprintf(buf, "%d", count); | |
228 len = strlen(buf); | |
229 #ifndef AMIGA | |
230 if (motdMapLater && W_IsMapped(motdWin)) { | |
231 *motdMapLater = 1; | |
232 W_UnmapWindow(motdWin); | |
233 } | |
234 W_WriteText(waitIcon, WAITICONWIDTH / 2 - 10, W_Textheight, textColor, buf, len, | |
235 W_BigFont); | |
236 #else | |
237 | |
238 W_WriteText(waitIcon, WAITICONWIDTH / 2 - 10, W_Textheight, textColor, buf, len, | |
239 W_RegularFont); | |
240 /* using the iconWin in place of the 4 separate windows I get otherwise. -JR */ | |
241 W_WriteText(waitIcon, 0, 0, textColor, serverName, strlen(serverName), W_RegularFont); | |
242 W_WriteText(waitIcon, 0, 2 * W_Textheight, textColor, "Q to quit", 9, W_RegularFont); | |
243 W_WriteText(waitIcon, 0, 3 * W_Textheight, textColor, "M for Motd", 10, W_RegularFont); | |
244 #endif | |
245 | |
246 } |