home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
games
/
volume13
/
engarde
/
part01
/
engarde.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-02-11
|
15KB
|
408 lines
/*********************************************************************
Engarde
File: engarde.c
This file contains startup routines and widget initializations
for the display of the game. It also calls functions to initialize
the board magnets, etc.
Version 1: 1/9/92 (Bill James)
*********************************************************************/
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xutil.h>
#include <Xm/Xm.h>
#include <Xm/RowColumn.h>
#include <Xm/Form.h>
#include <Xm/DrawingA.h>
#include <Xm/Text.h>
#include <Xm/Label.h>
#include <Xm/PushB.h>
#include <Xm/DrawnB.h>
#include "menus.h"
#include "board.h"
#include "xboard.h"
#include "bitmaps.h"
#include "help.h"
Widget draw;
Widget lt;
Widget rt;
Widget mess;
Widget help;
Widget about;
int n, H, W;
SideType s[2];
Pixel fore, back;
Pixmap lturn, rturn, goveright, goverleft;
void AddPixmap();
Widget MakeAboutWidget();
static void quit(w, client_data, call_data)
Widget w;
caddr_t client_data;
XmAnyCallbackStruct *call_data;
{
XtCloseDisplay(XtDisplay(w));
exit(0);
}
static xs_menu_struct menuData_Quit[] = {
{"Quit", quit, NULL, NULL, 0, NULL}
};
static xs_menu_struct menuData_Game[] = {
{"New", ResetBoard, NULL, NULL, 0, NULL}
};
static xs_menu_struct menuData_Help[] = {
{"Help", ShowHelp, NULL, NULL, 0, NULL},
{"About...", ShowAbout, NULL, NULL, 0, NULL}
};
static xs_menu_struct menuData[] = {
{"Game", NULL, NULL, menuData_Game, XtNumber(menuData_Game), NULL},
{"Help", NULL, NULL, menuData_Help, XtNumber(menuData_Help), NULL},
{"Quit", NULL, NULL, menuData_Quit, XtNumber(menuData_Quit), NULL}
};
main(argc, argv)
int argc;
char *argv[];
{
Widget menu, form, toplevel, emb, bj, helptext, helpquit;
Arg wargs[20];
Pixmap embpix, bjpix;
int i,j;
XmString str;
static XtActionsRec draw_actions[] = {
{"ButtonPress1", ButtonPress1},
};
static char draw_translations[] =
"<Btn1Down>: ButtonPress1()";
toplevel = XtInitialize(argv[0], "EnGarde", NULL, 0, &argc, argv);
form = XtCreateManagedWidget("Form", xmFormWidgetClass, toplevel, NULL, 0);
help = XmCreateFormDialog(toplevel,"Help", NULL, 0);
n = 0;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNrightOffset, 10); n++;
XtSetArg(wargs[n], XmNleftOffset, 10); n++;
XtSetArg(wargs[n], XmNtopOffset, 5); n++;
menu = XmCreateMenuBar(form, "Menu", wargs, n); XtManageChild(menu);
xs_create_menu_buttons(NULL, menu, menuData, XtNumber(menuData));
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNleftOffset, 10); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
emb = (Widget) XmCreateLabel(form, "Emblem", wargs, n);
XtManageChild(emb);
AddPixmap(emb, &embpix, Emblem_bits, Emblem_width, Emblem_height);
n = 0;
XtSetArg(wargs[n], XmNlabelPixmap, embpix); n++;
XtSetValues(emb, wargs, n);
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNrightOffset, 10); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
bj = (Widget) XmCreateLabel(form, "Bj", wargs, n);
XtManageChild(bj);
AddPixmap(bj, &bjpix, BJ_bits, BJ_width, BJ_height);
n = 0;
XtSetArg(wargs[n], XmNlabelPixmap, bjpix); n++;
XtSetValues(bj, wargs, n);
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNleftOffset, 10); n++;
XtSetArg(wargs[n], XmNleftWidget, emb); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
lt = (Widget) XmCreateLabel(form, "Lturn", wargs, n);
XtManageChild(lt);
AddPixmap(lt, <urn, lturn_bits, lturn_width, lturn_height);
n = 0;
XtSetArg(wargs[n], XmNlabelPixmap, lturn); n++;
XtSetValues(lt, wargs, n);
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNrightWidget, bj); n++;
XtSetArg(wargs[n], XmNrightOffset, 10); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
rt = (Widget) XmCreateLabel(form, "Rturn", wargs, n);
XtManageChild(rt);
AddPixmap(rt, &goveright, winright_bits, winright_width, winright_height);
AddPixmap(rt, &goverleft, winleft_bits,
winleft_width, winleft_height);
AddPixmap(rt, &rturn, rturn_bits, rturn_width, rturn_height);
n = 0;
XtSetArg(wargs[n], XmNlabelPixmap, lturn); n++;
XtSetValues(rt, wargs, n);
n = 0;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNleftWidget, lt); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNrightWidget, rt); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNbottomOffset, 10); n++;
/*XtSetArg(wargs[n], XmNcolumns, 60); n++;*/
XtSetArg(wargs[n], XmNrows, 2); n++;
XtSetArg(wargs[n], XmNwordWrap, True); n++;
XtSetArg(wargs[n], XmNscrollVertical, True); n++;
XtSetArg(wargs[n], XmNscrollHorizontal, False); n++;
XtSetArg(wargs[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
XtSetArg(wargs[n], XmNeditable, False); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
XtSetArg(wargs[n], XmNcursorPositionVisible, False); n++;
mess = (Widget) XmCreateScrolledText(form, "Message", wargs, n);
XtManageChild(mess);
n = 0;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNleftOffset, 70); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNrightOffset, 70); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNbottomOffset, 10); n++;
str = XmStringCreate("OK",XmSTRING_DEFAULT_CHARSET);
XtSetArg(wargs[n], XmNlabelString, str); n++;
helpquit = (Widget) XmCreatePushButton(help, "HelpOk", wargs, n);
XtManageChild(helpquit);
n = 0;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNleftWidget, lt); n++;
XtSetArg(wargs[n], XmNleftOffset, 10); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNrightWidget, rt); n++;
XtSetArg(wargs[n], XmNrightOffset, 10); n++;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNtopOffset, 10); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNbottomWidget, helpquit); n++;
XtSetArg(wargs[n], XmNbottomOffset, 10); n++;
XtSetArg(wargs[n], XmNcolumns, 80); n++;
XtSetArg(wargs[n], XmNrows, 20); n++;
XtSetArg(wargs[n], XmNwordWrap, False); n++;
XtSetArg(wargs[n], XmNscrollVertical, True); n++;
XtSetArg(wargs[n], XmNscrollHorizontal, False); n++;
XtSetArg(wargs[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
XtSetArg(wargs[n], XmNeditable, False); n++;
helptext = (Widget) XmCreateScrolledText(help, "HelpText", wargs, n);
XtManageChild(helptext);
j = 0;
for (i = 0; i < HELPLINES; i++) {
XmTextInsert(helptext, j, helpstr[i]);
j += strlen(helpstr[i]);
}
n = 0;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNtopWidget, menu); n++;
XtSetArg(wargs[n], XmNtopOffset, 10); n++;
XtSetArg(wargs[n], XmNleftOffset, 10); n++;
XtSetArg(wargs[n], XmNrightOffset, 10); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNbottomWidget, mess); n++;
XtSetArg(wargs[n], XmNbottomOffset, 10); n++;
XtSetArg(wargs[n], XmNwidth, 300); n++;
XtSetArg(wargs[n], XmNheight, 200); n++;
XtSetArg(wargs[n], XmNresizePolicy, XmRESIZE_ANY); n++;
draw = XtCreateManagedWidget("Canvas",xmDrawingAreaWidgetClass, form,wargs,n);
MakeAboutWidget(toplevel, bjpix, embpix);
n = 0;
XtSetArg(wargs[n], XmNforeground, &fore); n++;
XtSetArg(wargs[n], XmNbackground, &back); n++;
XtGetValues(draw, wargs, n);
XtAddCallback(draw, XmNexposeCallback, DrawGame, NULL);
XtAddCallback(draw, XmNresizeCallback, DrawGame, NULL);
XtAddCallback(helpquit, XmNactivateCallback, CloseHelp, NULL);
XtOverrideTranslations (draw, XtParseTranslationTable (draw_translations));
XtAppAddActions (XtWidgetToApplicationContext (draw), draw_actions,
XtNumber (draw_actions));
W = 6; H = 6;
Randomize();
InitBoard(s,W,H);
BoardShuffle();
XtRealizeWidget(toplevel);
XtMainLoop();
}
void AddPixmap(w, pix, b, wid, hgt)
Widget w;
Pixmap *pix;
char * b;
int wid, hgt;
{
Pixmap bitmap;
XGCValues vals;
GC gc;
Arg wargs[10];
int n;
bitmap = XCreateBitmapFromData(XtDisplay(w),
RootWindowOfScreen(XtScreen(w)), b, wid, hgt);
*pix = XCreatePixmap(XtDisplay(w),
RootWindowOfScreen(XtScreen(w)),
wid, hgt, DefaultDepthOfScreen(XtScreen(w)));
n = 0;
XtSetArg(wargs[n],XtNforeground, &vals.foreground); n++;
XtSetArg(wargs[n],XtNbackground, &vals.background); n++;
XtGetValues(w,wargs,n);
gc = XtGetGC(w, GCForeground|GCBackground, &vals);
XCopyPlane(XtDisplay(w), bitmap, *pix, gc, 0, 0,
wid, hgt, 0, 0, 1);
XFreePixmap(XtDisplay(w), bitmap);
XtReleaseGC(w, gc);
}
Widget MakeAboutWidget(w, bjpix, embpix)
Widget w;
Pixmap bjpix, embpix;
{
Widget label1,label2,label3,label4,label5,label6,button;
Arg wargs[20];
int n;
XmString str[7];
Dimension x,j;
about = XmCreateFormDialog(w,"About", NULL, 0);
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNtopOffset, 20); n++;
XtSetArg(wargs[n], XmNrightOffset, 20); n++;
XtSetArg(wargs[n], XmNleftOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
str[0] = XmStringCreate("En Garde",XmSTRING_DEFAULT_CHARSET);
XtSetArg(wargs[n], XmNlabelString, str[0]); n++;
label1 = (Widget) XmCreateLabel(about, "AboutTitle", wargs, n);
XtManageChild(label1);
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNtopWidget, label1); n++;
XtSetArg(wargs[n], XmNtopOffset, 10); n++;
XtSetArg(wargs[n], XmNrightOffset, 20); n++;
XtSetArg(wargs[n], XmNleftOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
str[1] = XmStringCreate("Version 1.0",XmSTRING_DEFAULT_CHARSET);
XtSetArg(wargs[n], XmNlabelString, str[1]); n++;
label2 = (Widget) XmCreateLabel(about, "AboutVersion", wargs, n);
XtManageChild(label2);
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNtopWidget, label2); n++;
XtSetArg(wargs[n], XmNtopOffset, 10); n++;
XtSetArg(wargs[n], XmNrightOffset, 20); n++;
XtSetArg(wargs[n], XmNleftOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
str[2] = XmStringCreate("January, 1992",XmSTRING_DEFAULT_CHARSET);
XtSetArg(wargs[n], XmNlabelString, str[2]); n++;
label3 = (Widget) XmCreateLabel(about, "AboutDate", wargs, n);
XtManageChild(label3);
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNtopWidget, label3); n++;
XtSetArg(wargs[n], XmNtopOffset, 10); n++;
XtSetArg(wargs[n], XmNrightOffset, 20); n++;
XtSetArg(wargs[n], XmNleftOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
str[3] = XmStringCreate("Bill James",XmSTRING_DEFAULT_CHARSET);
XtSetArg(wargs[n], XmNlabelString, str[3]); n++;
label4 = (Widget) XmCreateLabel(about, "AboutAuthor", wargs, n);
XtManageChild(label4);
n = 0;
XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNtopWidget, label4); n++;
XtSetArg(wargs[n], XmNtopOffset, 10); n++;
XtSetArg(wargs[n], XmNrightOffset, 20); n++;
XtSetArg(wargs[n], XmNleftOffset, 20); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
str[4] = XmStringCreate("wjames@jupiter.SAIC.COM",XmSTRING_DEFAULT_CHARSET);
XtSetArg(wargs[n], XmNlabelString, str[4]); n++;
label6 = (Widget) XmCreateLabel(about, "AboutMail", wargs, n);
XtManageChild(label6);
n = 0;
XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(wargs[n], XmNtopWidget, label6); n++;
XtSetArg(wargs[n], XmNtopOffset, 20); n++;
XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
XtSetArg(wargs[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++;
XtSetArg(wargs[n], XmNlabelPixmap, embpix); n++;
XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
XtSetArg(wargs[n], XmNwidth, 100); n++;
XtSetArg(wargs[n], XmNheight, 60); n++;
XtSetArg(wargs[n], XmNresize, False); n++;
button = XmCreateDrawnButton(about, "AboutButton", wargs, n);
XtManageChild(button);
XtAddCallback(button, XmNactivateCallback, CloseAbout, NULL);
XtRealizeWidget (about);
n = 0;
XtSetArg(wargs[n], XmNwidth, &x); n++;
XtGetValues(about, wargs, n);
j = (x - 100) / 2;
if (j < 0) j = 0;
n = 0;
XtSetArg(wargs[n], XmNleftOffset, j); n++;
XtSetValues(button, wargs, n);
}