home *** CD-ROM | disk | FTP | other *** search
- /*
- * main.c -- xrobots v1.0
- *
- * Author: Brian Warkentine, 1989.
- *
- * Permission to use, copy, modify and distribute (without charge) this
- * software, documentation, images, etc. is granted, provided that this
- * comment and the author's name is retained. The author assumes no
- * responsibility for lost sleep as a consequence of use of this software.
- *
- * Send comments, bug reports, etc. to bwarkent@polyslo.CalPoly.EDU.
- * (Soon to be at @Sun.COM, so if the previous address doesn't work,
- * try brian@csufres.CSUFresno.EDU.)
- *
- * Portions of this code generated by wedgimatic on Jan 21 14:24:10 PST 1989.
- *
- */
-
- #include <X11/X.h>
- #include <X11/Intrinsic.h>
- #include <X11/StringDefs.h>
- #include <X11/cursorfont.h>
- #include <X11/Core.h>
- #include <X11/Label.h>
- #include <X11/Command.h>
- #include <X11/Box.h>
-
- #include "callbacks.h"
- #include "graphics.h"
- #include "game.h"
- #include "score.h"
- #include "help.h"
-
- /*----------------------------------------------------------------------*/
-
- Widget top_shell, top_widget, playfield_widget, score_widget, sonic_command;
-
- Display *display;
- Window playfield;
-
- GC gc;
- GC cleargc;
-
- /*----------------------------------------------------------------------*/
-
-
- static XtCallbackRec teleport_callbackList[] = {
- { (XtCallbackProc)teleport_callback, NULL },
- { NULL, NULL }
- };
-
- static XtCallbackRec wait_callbackList[] = {
- { (XtCallbackProc)wait_callback, NULL },
- { NULL, NULL }
- };
-
- static XtCallbackRec sonic_callbackList[] = {
- { (XtCallbackProc)sonic_callback, NULL },
- { NULL, NULL }
- };
-
- static XtCallbackRec quitList[] = {
- { (XtCallbackProc)quit_callback, NULL },
- { NULL, NULL }
- };
-
- static XtCallbackRec new_gameList[] = {
- { (XtCallbackProc)new_game_callback, NULL },
- { NULL, NULL }
- };
-
- static XtCallbackRec show_helpList[] = {
- { (XtCallbackProc)show_help_callback, NULL },
- { NULL, NULL }
- };
-
- /*----------------------------------------------------------------------*/
-
-
- static Arg arglistplayfield[] = {
- { XtNheight, (XtArgVal) pos_to_coord(MAXY) },
- { XtNwidth, (XtArgVal) pos_to_coord(MAXX) },
- { XtNborderWidth, (XtArgVal) 4 },
- };
-
- static Arg arglistteleport_command[] = {
- { XtNlabel, (XtArgVal) "Teleport" },
- { XtNcallback, (XtArgVal) teleport_callbackList }
- };
-
- static Arg arglistwait_command[] = {
- { XtNlabel, (XtArgVal) "Wait" },
- { XtNcallback, (XtArgVal) wait_callbackList }
- };
-
- static Arg arglistsonic_command[] = {
- { XtNlabel, (XtArgVal) "Sonic Screwdriver" },
- { XtNcallback, (XtArgVal) sonic_callbackList }
- };
-
- static Arg arglistquit_command[] = {
- { XtNlabel, (XtArgVal) "Quit" },
- { XtNcallback, (XtArgVal) quitList }
- };
-
- static Arg arglistnew_game[] = {
- { XtNlabel, (XtArgVal) "New Game" },
- { XtNcallback, (XtArgVal) new_gameList }
- };
-
- static Arg arglistscore_widget[] = {
- { XtNlabel, (XtArgVal) "Score: 0" },
- };
-
- static Arg arglisthelp_button[] = {
- { XtNlabel, (XtArgVal) "Help" },
- { XtNcallback, (XtArgVal) show_helpList }
- };
-
- /*----------------------------------------------------------------------*/
-
- /* these can be overriden -- of course */
- static char translations_str[] =
- "<Btn1Down>: do_nothing() \n\
- <Btn2Down>: do_nothing() \n\
- <Btn3Down>: do_nothing() \n\
- <Btn1Up>: move() \n\
- <Key>u: move(right, up) \n\
- <Key>l: move(right) \n\
- <Key>n: move(right, down) \n\
- <Key>y: move(left, up) \n\
- <Key>h: move(left) \n\
- <Key>b: move(left, down) \n\
- <Key>k: move(up) \n\
- <Key>j: move(down) \n\
- <Key>.: move(nowhere) \n\
- <Key>\\ : move(nowhere) \n\
- <Btn2Up>: go_here() \n\
- <Btn3Up>: wait() \n\
- <Key>s: sonic() \n\
- <Key>t: teleport() \n\
- <Key>w: wait() \n\
- <Key>z: new_game() ";
- /* <Key>q: quit() "; */
-
- Pixel fg, bg;
- Boolean spiffy;
- XtTranslations translations;
-
- static XtResource application_resources[] = {
- {"foreground", "Foreground", XtRPixel, sizeof(Pixel),
- (Cardinal)&fg, XtRString, (caddr_t) "Black"},
- {"background", "Background", XtRPixel, sizeof(Pixel),
- (Cardinal)&bg, XtRString, (caddr_t) "White"},
- {"spiffy", "Spiffy", XtRBoolean, sizeof(Boolean),
- (Cardinal)&spiffy, XtRString, (caddr_t) "True"},
- {"translations","Translations", XtRTranslationTable, sizeof(XtTranslations),
- (Cardinal)&translations, XtRString, (caddr_t)translations_str},
- };
-
- /*----------------------------------------------------------------------*/
-
- main(argc, argv)
- unsigned int argc;
- char **argv;
- {
- Arg args[1];
- XGCValues gcv;
-
- srandom(getpid());
-
- top_shell = XtInitialize(argv[0], "xrobots", 0, 0, &argc, argv);
-
- init_actions();
-
- XtGetApplicationResources(top_shell, 0, application_resources,
- XtNumber(application_resources), NULL, 0 );
-
- top_widget = XtCreateManagedWidget(
- "top_widget",
- boxWidgetClass,
- top_shell,
- 0,0);
-
- playfield_widget = XtCreateManagedWidget(
- "playfield",
- widgetClass,
- top_widget,
- arglistplayfield,
- XtNumber(arglistplayfield));
-
- XtAugmentTranslations(playfield_widget,translations);
-
- (void) XtCreateManagedWidget(
- "teleport_button",
- commandWidgetClass,
- top_widget,
- arglistteleport_command,
- XtNumber(arglistteleport_command));
-
- (void) XtCreateManagedWidget(
- "wait_button",
- commandWidgetClass,
- top_widget,
- arglistwait_command,
- XtNumber(arglistwait_command));
-
- sonic_command= XtCreateManagedWidget(
- "sonic_button",
- commandWidgetClass,
- top_widget,
- arglistsonic_command,
- XtNumber(arglistsonic_command));
-
- (void) XtCreateManagedWidget(
- "quit_button",
- commandWidgetClass,
- top_widget,
- arglistquit_command,
- XtNumber(arglistquit_command));
- (void) XtCreateManagedWidget(
- "new_game_button",
- commandWidgetClass,
- top_widget,
- arglistnew_game,
- XtNumber(arglistnew_game));
-
- (void) XtCreateManagedWidget(
- "help_button",
- commandWidgetClass,
- top_widget,
- arglisthelp_button,
- XtNumber(arglisthelp_button));
-
- score_widget = XtCreateManagedWidget(
- "score_button",
- labelWidgetClass,
- top_widget,
- arglistscore_widget,
- XtNumber(arglistscore_widget));
-
-
- create_high_score_popup(top_widget);
- create_help_popup(top_widget);
-
- XtRealizeWidget(top_shell);
-
- display = XtDisplay(playfield_widget);
- playfield = XtWindow(playfield_widget);
- gcv.foreground = fg;
- gcv.background = bg;
- gcv.function = GXcopy;
- gc = XCreateGC(display, playfield,
- GCForeground | GCBackground | GCFunction, &gcv);
- gcv.foreground = bg;
- cleargc = XCreateGC(display, playfield,
- GCForeground | GCBackground | GCFunction, &gcv);
-
- XtAddEventHandler(playfield_widget, ExposureMask, 0, redisplay_level, 0);
- XtAddEventHandler(playfield_widget, PointerMotionMask, 0, pointer_moved, 0);
-
- init_pixmaps(top_shell);
-
- new_game();
-
- XtMainLoop();
-
- }
-
-
- void
- quit_game()
- {
- free_pixmaps();
- XtDestroyWidget(top_shell);
- XFreeGC(display,gc);
- XFreeGC(display,cleargc);
-
- /* XtDestroyApplicationContext(); */
- exit(0);
- }
-
-
- void
- update_score(score)
- int score;
- {
- char text[13];
- (void)sprintf(text,"Score: %4d",score);
- XtSetArg(arglistscore_widget[0],XtNlabel,text);
- XtSetValues(score_widget,arglistscore_widget,1);
- }
-
-
-
-