1 /*
2 Copyright notice:
3
4 This is mine. I'm only letting you use it. Period. Feel free to rip off
5 any of the code you see fit, but have the courtesy to give me credit.
6 Otherwise great hairy beasties will rip your eyes out and eat your flesh
7 when you least expect it.
8
9 Jonny Goldman <jonathan@think.com>
10
11 Wed May 8 1991
12 */
13
14 /* main.c -- create our windows and initialize things. */
15
16 #ifdef HAVE_CONFIG_H
17 #include <config.h>
18 #endif
19
20 #define MAIN
21 #include "vaders.h"
22 #include <X11/Xaw/Form.h>
23 #ifndef X11R3
24 #include <X11/Xaw/Label.h>
25 #else
26 #include <X11/IntrinsicP.h>
27 #include <X11/Label.h>
28 #endif
29
30 #ifdef XFILESEARCHPATH
31 static void AddPathToSearchPath();
32 #endif
33
34 #include <locale.h>
35
36 static XrmOptionDescRec table[] = {
37 {"-debug", "*debug", XrmoptionNoArg, NULL},
38 };
39
40 static XtResource resources[] = {
41 {XtNwidth, XtCWidth, XtRInt, sizeof(int),
42 XtOffsetOf(AppData, width), XtRImmediate, (caddr_t) VWIDTH},
43 {XtNheight, XtCHeight, XtRInt, sizeof(int),
44 XtOffsetOf(AppData, height), XtRImmediate, (caddr_t) VHEIGHT},
45 {"debug", "Debug", XtRBoolean, sizeof(Boolean),
46 XtOffsetOf(AppData, debug), XtRString, "off"},
47 {"font", "Font", XtRString, sizeof(String),
48 XtOffsetOf(AppData, vaderfont), XtRString, (String)"9x15"},
49 {"scale", "Scale", XtRInt, sizeof(int),
50 XtOffsetOf(AppData, scale), XtRImmediate, (caddr_t) 2},
51 {"basewait", "BaseWait", XtRInt, sizeof(int),
52 XtOffsetOf(AppData, basewait), XtRImmediate, (caddr_t) 10},
53 {"vaderwait", "VaderWait", XtRInt, sizeof(int),
54 XtOffsetOf(AppData, vaderwait), XtRImmediate, (caddr_t) 300},
55 {"spacerwait", "SpacerWait", XtRInt, sizeof(int),
56 XtOffsetOf(AppData, spacerwait), XtRImmediate, (caddr_t) 50},
57 {"shotwait", "ShotWait", XtRInt, sizeof(int),
58 XtOffsetOf(AppData, shotwait), XtRImmediate, (caddr_t) 10},
59 {"vshotwait", "VshotWait", XtRInt, sizeof(int),
60 XtOffsetOf(AppData, vshotwait), XtRImmediate, (caddr_t) 30},
61 {"basecolor", "BaseColor", XtRPixel, sizeof(Pixel),
62 XtOffsetOf(AppData, basepixel), XtRString, "cyan"},
63 {"spacercolor", "SpacerColor", XtRPixel, sizeof(Pixel),
64 XtOffsetOf(AppData, spacerpixel), XtRString, "gray"},
65 {"buildingcolor", "BuildingColor", XtRPixel, sizeof(Pixel),
66 XtOffsetOf(AppData, buildingpixel), XtRString, "yellow"},
67 {"vader1color", "Vader1Color", XtRPixel, sizeof(Pixel),
68 XtOffsetOf(AppData, vader1pixel), XtRString, "blue"},
69 {"vader2color", "Vader2Color", XtRPixel, sizeof(Pixel),
70 XtOffsetOf(AppData, vader2pixel), XtRString, "green"},
71 {"vader3color", "Vader3Color", XtRPixel, sizeof(Pixel),
72 XtOffsetOf(AppData, vader3pixel), XtRString, "red"},
73 {"shotcolor", "ShotColor", XtRPixel, sizeof(Pixel),
74 XtOffsetOf(AppData, shotpixel), XtRString, "lavender"},
75 {"vshotcolor", "VshotColor", XtRPixel, sizeof(Pixel),
76 XtOffsetOf(AppData, vshotpixel), XtRString, "orange"},
77 {"scorecolor", "ScoreColor", XtRPixel, sizeof(Pixel),
78 XtOffsetOf(AppData, scorepixel), XtRString, "white"},
79 {"maxshots", "MaxShots", XtRInt, sizeof(int),
80 XtOffsetOf(AppData, maxshots), XtRImmediate, (caddr_t) 1},
81 {"maxvshots", "MaxVshots", XtRInt, sizeof(int),
82 XtOffsetOf(AppData, maxvshots), XtRImmediate, (caddr_t) 6},
83 {"defaultfore", "DefaultFore", XtRPixel, sizeof(Pixel),
84 XtOffsetOf(AppData, defaultfore), XtRString, "white"},
85 {"defaultback", "DefaultBack", XtRPixel, sizeof(Pixel),
86 XtOffsetOf(AppData, defaultback), XtRString, "black"},
87 };
88
89
90 /*ARGSUSED*/
CvtStringToFloat(args,num_args,fromVal,toVal)91 static void CvtStringToFloat(args, num_args, fromVal, toVal)
92 ArgList args;
93 Cardinal num_args;
94 XrmValue *fromVal;
95 XrmValue *toVal;
96 {
97 static float i;
98
99 if (sscanf((char *)fromVal->addr, "%f", &i) == 1) {
100 toVal->size = sizeof(float);
101 toVal->addr = (caddr_t) &i;
102 } else {
103 toVal->size = 0;
104 toVal->addr = NULL;
105 }
106 }
107
AddResource(r,p)108 static void AddResource(r, p)
109 char *r;
110 Pixel *p;
111 {
112 XrmValue value;
113 XrmDatabase db = XtDatabase(dpy);
114 value.size = sizeof(Pixel);
115 value.addr = (caddr_t) p;
116 XrmPutResource(&db, r, XtRPixel, &value);
117 }
118
119 Widget
MakeCommandButton(box,name,function,vlink,hlink,data)120 MakeCommandButton(box, name, function, vlink, hlink, data)
121 Widget box, vlink, hlink;
122 char *name;
123 XtCallbackProc function;
124 caddr_t data;
125 {
126 Widget w;
127 Arg args[10];
128 Cardinal numargs;
129
130 numargs = 0;
131 if(vlink != NULL) {
132 XtSetArg(args[numargs], XtNfromVert, vlink); numargs++;
133 }
134 if(hlink != NULL) {
135 XtSetArg(args[numargs], XtNfromHoriz, hlink); numargs++;
136 }
137 w = XtCreateManagedWidget(name, commandWidgetClass, box, args, numargs);
138 if (function != NULL)
139 XtAddCallback(w, XtNcallback, function, data);
140 return w;
141 }
142
main(int argc,char ** argv)143 int main(int argc, char **argv)
144 {
145 static Arg args[10];
146 int n;
147 Widget form, button;
148 /* extern WidgetClass labelwidgetclass; */
149
150 setlocale(LC_ALL, "");
151 textdomain(PACKAGE);
152
153 me_image = NULL;
154
155 srandom(time(0));
156 #ifdef XFILESEARCHPATH
157 AddPathToSearchPath(XFILESEARCHPATH);
158 #endif
159 toplevel = XtInitialize(argv[0], "Vaders", table, XtNumber(table),
160 &argc, argv);
161 dpy = XtDisplay(toplevel);
162 XtAddConverter(XtRString, XtRFloat, CvtStringToFloat, NULL, 0);
163 XtGetApplicationResources(toplevel, (caddr_t) &app_data,
164 resources, XtNumber(resources),
165 NULL, (Cardinal) 0);
166 AddResource("*background", &app_data.defaultback);
167 if (DisplayCells(dpy, DefaultScreen(dpy)) <= 2)
168 {
169 app_data.basepixel = app_data.defaultfore;
170 app_data.buildingpixel = app_data.defaultfore;
171 app_data.vader1pixel = app_data.defaultfore;
172 app_data.vader2pixel = app_data.defaultfore;
173 app_data.vader3pixel = app_data.defaultfore;
174 app_data.shotpixel = app_data.defaultfore;
175 app_data.vshotpixel = app_data.defaultfore;
176 app_data.scorepixel = app_data.defaultfore;
177 }
178 if (app_data.scale<1) app_data.scale = 1;
179 if (app_data.scale>2) app_data.scale = 2;
180 app_data.width = app_data.scale*VWIDTH;
181 app_data.height = app_data.scale*VHEIGHT;
182
183 form = XtCreateManagedWidget ("form", formWidgetClass,
184 toplevel, NULL, 0);
185
186 n = 0;
187 XtSetArg (args[n], XtNleft, XtChainLeft); n++;
188 XtSetArg (args[n], XtNright, XtChainLeft); n++;
189 XtSetArg (args[n], XtNtop, XtChainTop); n++;
190 XtSetArg (args[n], XtNbottom, XtChainTop); n++;
191 XtSetArg (args[n], XtNwidth, app_data.width); n++;
192 XtSetArg (args[n], XtNheight, app_data.height); n++;
193
194 gamewidget = (VadersWidget)
195 XtCreateManagedWidget("field", vadersWidgetClass, form, args, n);
196
197 XtSetKeyboardFocus (form, (Widget) gamewidget);
198
199 n = 0;
200 XtSetArg (args[n], XtNleft, XtChainLeft); n++;
201 XtSetArg (args[n], XtNright, XtChainLeft); n++;
202 XtSetArg (args[n], XtNtop, XtChainTop); n++;
203 XtSetArg (args[n], XtNbottom, XtChainTop); n++;
204 XtSetArg (args[n], XtNfromHoriz, gamewidget); n++;
205 XtSetArg (args[n], XtNhorizDistance, 5); n++;
206 XtSetArg (args[n], XtNwidth, app_data.scale*IWIDTH); n++;
207 XtSetArg (args[n], XtNheight, app_data.height/2); n++;
208
209 labelwidget = (VadersWidget)
210 XtCreateManagedWidget("label", vadersWidgetClass, form, args, n);
211
212 pausebutton = MakeCommandButton(form, "pause", Pause, labelwidget, gamewidget, NULL);
213 XtSetArg(args[0], XtNlabel,_(" Start"));
214 XtSetArg(args[1], XtNforeground, app_data.defaultfore);
215 XtSetArg(args[2], XtNbackground, app_data.defaultback);
216 XtSetArg(args[3], XtNborderColor, app_data.defaultfore);
217 XtSetValues(pausebutton, args, 4);
218 button = MakeCommandButton(form, "quit", Quit, pausebutton, gamewidget, NULL);
219 XtSetArg(args[0], XtNlabel,_(" Quit "));
220 XtSetArg(args[1], XtNforeground, app_data.defaultfore);
221 XtSetArg(args[2], XtNbackground, app_data.defaultback);
222 XtSetArg(args[3], XtNborderColor, app_data.defaultfore);
223 XtSetValues(button, args, 4);
224 infobutton = MakeCommandButton(form, "info", ShowInfo, button, gamewidget, NULL);
225 XtSetArg(args[0], XtNlabel,_(" Info "));
226 XtSetArg(args[1], XtNforeground, app_data.defaultfore);
227 XtSetArg(args[2], XtNbackground, app_data.defaultback);
228 XtSetArg(args[3], XtNborderColor, app_data.defaultfore);
229 XtSetValues(infobutton, args, 4);
230
231 XtRealizeWidget(toplevel);
232 ResetGame();
233 XtMainLoop();
234 return 0;
235 }
236
237 #ifdef XFILESEARCHPATH
238 static void
AddPathToSearchPath(path)239 AddPathToSearchPath(path)
240 char *path;
241 {
242 char *old, *new;
243 extern char *getenv();
244
245 old = getenv("XFILESEARCHPATH");
246 if (old) {
247 #if defined(mips) || defined(hpux) || defined(sun)
248 /* +1 for =, +2 for :, +3 for null */
249 new = XtMalloc((Cardinal) (strlen("XFILESEARCHPATH") +
250 strlen(old) +
251 strlen(path) + 3));
252 (void) strcpy(new, "XFILESEARCHPATH");
253 (void) strcat(new, "=");
254 (void) strcat(new, old);
255 (void) strcat(new, ":");
256 (void) strcat(new, path);
257 putenv(new);
258 #else
259 /* +1 for colon, +2 for null */
260 new = XtMalloc((Cardinal) (strlen(old) + strlen(path) + 2));
261 (void) strcpy(new, old);
262 (void) strcat(new, ":");
263 (void) strcat(new, path);
264 setenv("XFILESEARCHPATH", new, 1);
265 #endif
266 }
267 else {
268 #if defined(mips) || defined(hpux) || defined(sun)
269 new = XtMalloc((Cardinal) (strlen("XFILESEARCHPATH") +
270 strlen(path) + 2));
271 (void) strcpy(new, "XFILESEARCHPATH");
272 (void) strcat(new, "=");
273 (void) strcat(new, path);
274 putenv(new);
275 #else
276 setenv("XFILESEARCHPATH", path, 1);
277 #endif
278 }
279 }
280 #endif
281
282 #ifdef sun
XShapeCombineMask()283 XShapeCombineMask()
284 {}
285
XShapeQueryExtension()286 XShapeQueryExtension()
287 {}
288 #endif
289