home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume13 / engarde / part01 / engarde.c < prev    next >
C/C++ Source or Header  |  1992-02-11  |  15KB  |  408 lines

  1. /*********************************************************************
  2.                                 Engarde
  3.                             File: engarde.c
  4.  
  5.   This file contains startup routines and widget initializations
  6.   for the display of the game.  It also calls functions to initialize
  7.   the board magnets, etc.
  8.  
  9.   Version 1:  1/9/92  (Bill James)
  10. *********************************************************************/
  11. #include <X11/Intrinsic.h>
  12. #include <X11/StringDefs.h>
  13. #include <X11/Xutil.h>
  14. #include <Xm/Xm.h>
  15. #include <Xm/RowColumn.h>
  16. #include <Xm/Form.h>
  17. #include <Xm/DrawingA.h>
  18. #include <Xm/Text.h>
  19. #include <Xm/Label.h>
  20. #include <Xm/PushB.h>
  21. #include <Xm/DrawnB.h>
  22. #include "menus.h"
  23. #include "board.h"
  24. #include "xboard.h"
  25. #include "bitmaps.h"
  26. #include "help.h"
  27.  
  28. Widget draw;
  29. Widget lt; 
  30. Widget rt; 
  31. Widget mess;
  32. Widget help;
  33. Widget about;
  34. int n, H, W;
  35. SideType s[2];
  36. Pixel fore, back;
  37. Pixmap lturn, rturn, goveright, goverleft;
  38.  
  39. void AddPixmap();
  40. Widget MakeAboutWidget();
  41.  
  42.  
  43. static void quit(w, client_data, call_data)
  44. Widget w;
  45. caddr_t client_data;
  46. XmAnyCallbackStruct *call_data;
  47. {
  48.      XtCloseDisplay(XtDisplay(w));
  49.      exit(0);
  50. }
  51.  
  52. static xs_menu_struct menuData_Quit[] = {
  53.   {"Quit", quit, NULL, NULL, 0, NULL}
  54. };
  55.  
  56. static xs_menu_struct menuData_Game[] = {
  57.   {"New", ResetBoard, NULL, NULL, 0, NULL}
  58. };
  59.  
  60. static xs_menu_struct menuData_Help[] = {
  61.   {"Help", ShowHelp, NULL, NULL, 0, NULL},
  62.   {"About...", ShowAbout, NULL, NULL, 0, NULL}
  63. };
  64.  
  65. static xs_menu_struct menuData[] = {
  66.   {"Game", NULL, NULL, menuData_Game, XtNumber(menuData_Game), NULL},
  67.   {"Help", NULL, NULL, menuData_Help, XtNumber(menuData_Help), NULL},
  68.   {"Quit", NULL, NULL, menuData_Quit, XtNumber(menuData_Quit), NULL}
  69. };
  70.  
  71.  
  72.  
  73. main(argc, argv)
  74. int argc;
  75. char *argv[];
  76. {
  77. Widget menu, form, toplevel, emb, bj, helptext, helpquit; 
  78. Arg wargs[20];
  79. Pixmap embpix, bjpix;
  80. int i,j;
  81. XmString str;
  82. static XtActionsRec draw_actions[] = {
  83.          {"ButtonPress1",        ButtonPress1},
  84. };
  85.  static char draw_translations[] =
  86.          "<Btn1Down>:            ButtonPress1()";
  87.  
  88.  
  89.    toplevel = XtInitialize(argv[0], "EnGarde", NULL, 0, &argc, argv);
  90.    form = XtCreateManagedWidget("Form", xmFormWidgetClass, toplevel, NULL, 0);
  91.    help = XmCreateFormDialog(toplevel,"Help", NULL, 0);
  92.  
  93.    n = 0;
  94.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  95.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  96.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  97.    XtSetArg(wargs[n], XmNrightOffset, 10); n++;
  98.    XtSetArg(wargs[n], XmNleftOffset, 10); n++;
  99.    XtSetArg(wargs[n], XmNtopOffset, 5); n++;
  100.    menu = XmCreateMenuBar(form, "Menu", wargs, n); XtManageChild(menu);
  101.  
  102.    xs_create_menu_buttons(NULL, menu, menuData, XtNumber(menuData));
  103.    
  104.    n = 0;
  105.    XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
  106.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  107.    XtSetArg(wargs[n], XmNleftOffset, 10); n++;
  108.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  109.    XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
  110.    XtSetArg(wargs[n], XmNheight, 60); n++;
  111.    emb = (Widget) XmCreateLabel(form, "Emblem", wargs, n);
  112.    XtManageChild(emb);
  113.    AddPixmap(emb, &embpix, Emblem_bits, Emblem_width, Emblem_height);
  114.    n = 0;
  115.    XtSetArg(wargs[n], XmNlabelPixmap, embpix); n++;
  116.    XtSetValues(emb, wargs, n);
  117.  
  118.    n = 0;
  119.    XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
  120.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  121.    XtSetArg(wargs[n], XmNrightOffset, 10); n++;
  122.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  123.    XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
  124.    XtSetArg(wargs[n], XmNheight, 60); n++;
  125.    bj = (Widget) XmCreateLabel(form, "Bj", wargs, n);
  126.    XtManageChild(bj);
  127.    AddPixmap(bj, &bjpix, BJ_bits, BJ_width, BJ_height);
  128.    n = 0;
  129.    XtSetArg(wargs[n], XmNlabelPixmap, bjpix); n++;
  130.    XtSetValues(bj, wargs, n);
  131.  
  132.    n = 0;
  133.    XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
  134.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  135.    XtSetArg(wargs[n], XmNleftOffset, 10); n++;
  136.    XtSetArg(wargs[n], XmNleftWidget, emb); n++;
  137.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  138.    XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
  139.    XtSetArg(wargs[n], XmNheight, 60); n++;
  140.    lt = (Widget) XmCreateLabel(form, "Lturn", wargs, n);
  141.    XtManageChild(lt);
  142.    AddPixmap(lt, <urn, lturn_bits, lturn_width, lturn_height);
  143.    n = 0;
  144.    XtSetArg(wargs[n], XmNlabelPixmap, lturn); n++;
  145.    XtSetValues(lt, wargs, n);
  146.  
  147.    n = 0;
  148.    XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
  149.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
  150.    XtSetArg(wargs[n], XmNrightWidget, bj); n++;
  151.    XtSetArg(wargs[n], XmNrightOffset, 10); n++;
  152.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  153.    XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
  154.    XtSetArg(wargs[n], XmNheight, 60); n++;
  155.    rt = (Widget) XmCreateLabel(form, "Rturn", wargs, n);
  156.    XtManageChild(rt);
  157.    AddPixmap(rt, &goveright, winright_bits, winright_width, winright_height);
  158.    AddPixmap(rt, &goverleft, winleft_bits, 
  159.                           winleft_width, winleft_height);
  160.    AddPixmap(rt, &rturn, rturn_bits, rturn_width, rturn_height);
  161.    n = 0;
  162.    XtSetArg(wargs[n], XmNlabelPixmap, lturn); n++;
  163.    XtSetValues(rt, wargs, n);
  164.  
  165.    n = 0;
  166.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  167.    XtSetArg(wargs[n], XmNleftWidget, lt); n++;
  168.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
  169.    XtSetArg(wargs[n], XmNrightWidget, rt); n++;
  170.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  171.    XtSetArg(wargs[n], XmNbottomOffset, 10); n++;
  172.    /*XtSetArg(wargs[n], XmNcolumns, 60); n++;*/
  173.    XtSetArg(wargs[n], XmNrows, 2); n++;
  174.    XtSetArg(wargs[n], XmNwordWrap, True); n++;
  175.    XtSetArg(wargs[n], XmNscrollVertical, True); n++;
  176.    XtSetArg(wargs[n], XmNscrollHorizontal, False); n++;
  177.    XtSetArg(wargs[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
  178.    XtSetArg(wargs[n], XmNeditable, False); n++;
  179.    XtSetArg(wargs[n], XmNheight, 60); n++;
  180.    XtSetArg(wargs[n], XmNcursorPositionVisible, False); n++;
  181.    mess = (Widget) XmCreateScrolledText(form, "Message", wargs, n);
  182.    XtManageChild(mess);
  183.  
  184.    n = 0;
  185.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  186.    XtSetArg(wargs[n], XmNleftOffset, 70); n++;
  187.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  188.    XtSetArg(wargs[n], XmNrightOffset, 70); n++;
  189.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  190.    XtSetArg(wargs[n], XmNbottomOffset, 10); n++;
  191.    str = XmStringCreate("OK",XmSTRING_DEFAULT_CHARSET);
  192.    XtSetArg(wargs[n], XmNlabelString, str); n++;
  193.    helpquit = (Widget) XmCreatePushButton(help, "HelpOk", wargs, n);
  194.    XtManageChild(helpquit);
  195.  
  196.    n = 0;
  197.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  198.    XtSetArg(wargs[n], XmNleftWidget, lt); n++;
  199.    XtSetArg(wargs[n], XmNleftOffset, 10); n++;
  200.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  201.    XtSetArg(wargs[n], XmNrightWidget, rt); n++;
  202.    XtSetArg(wargs[n], XmNrightOffset, 10); n++;
  203.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  204.    XtSetArg(wargs[n], XmNtopOffset, 10); n++;
  205.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  206.    XtSetArg(wargs[n], XmNbottomWidget, helpquit); n++;
  207.    XtSetArg(wargs[n], XmNbottomOffset, 10); n++;
  208.    XtSetArg(wargs[n], XmNcolumns, 80); n++;
  209.    XtSetArg(wargs[n], XmNrows, 20); n++;
  210.    XtSetArg(wargs[n], XmNwordWrap, False); n++;
  211.    XtSetArg(wargs[n], XmNscrollVertical, True); n++;
  212.    XtSetArg(wargs[n], XmNscrollHorizontal, False); n++;
  213.    XtSetArg(wargs[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
  214.    XtSetArg(wargs[n], XmNeditable, False); n++;
  215.    helptext = (Widget) XmCreateScrolledText(help, "HelpText", wargs, n);
  216.    XtManageChild(helptext);
  217.  
  218.    j = 0;
  219.    for (i = 0; i < HELPLINES; i++) {
  220.       XmTextInsert(helptext, j, helpstr[i]);
  221.       j += strlen(helpstr[i]);
  222.    }
  223.  
  224.    n = 0;
  225.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  226.    XtSetArg(wargs[n], XmNtopWidget, menu); n++;
  227.    XtSetArg(wargs[n], XmNtopOffset, 10); n++;
  228.    XtSetArg(wargs[n], XmNleftOffset, 10); n++;
  229.    XtSetArg(wargs[n], XmNrightOffset, 10); n++;
  230.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  231.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  232.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  233.    XtSetArg(wargs[n], XmNbottomWidget, mess); n++;
  234.    XtSetArg(wargs[n], XmNbottomOffset, 10); n++;
  235.    XtSetArg(wargs[n], XmNwidth, 300); n++;
  236.    XtSetArg(wargs[n], XmNheight, 200); n++;
  237.    XtSetArg(wargs[n], XmNresizePolicy, XmRESIZE_ANY); n++;
  238.   draw = XtCreateManagedWidget("Canvas",xmDrawingAreaWidgetClass, form,wargs,n);
  239.  
  240.    MakeAboutWidget(toplevel, bjpix, embpix);
  241.  
  242.    n = 0;
  243.    XtSetArg(wargs[n], XmNforeground, &fore); n++;
  244.    XtSetArg(wargs[n], XmNbackground, &back); n++;
  245.    XtGetValues(draw, wargs, n);
  246.  
  247.    XtAddCallback(draw, XmNexposeCallback, DrawGame, NULL);
  248.    XtAddCallback(draw, XmNresizeCallback, DrawGame, NULL);
  249.    XtAddCallback(helpquit, XmNactivateCallback, CloseHelp, NULL);
  250.    XtOverrideTranslations (draw, XtParseTranslationTable (draw_translations));
  251.    XtAppAddActions (XtWidgetToApplicationContext (draw), draw_actions,
  252.                          XtNumber (draw_actions));
  253.  
  254.    W = 6; H = 6;
  255.    Randomize();
  256.    InitBoard(s,W,H);
  257.    BoardShuffle();
  258.    XtRealizeWidget(toplevel);
  259.    XtMainLoop();
  260. }
  261.  
  262.  
  263. void AddPixmap(w, pix, b, wid, hgt)
  264. Widget w;
  265. Pixmap *pix;
  266. char * b;
  267. int wid, hgt;
  268. {
  269. Pixmap bitmap;
  270. XGCValues vals;
  271. GC gc;
  272. Arg wargs[10];
  273. int n;
  274.    bitmap = XCreateBitmapFromData(XtDisplay(w), 
  275.               RootWindowOfScreen(XtScreen(w)), b, wid, hgt);
  276.    *pix = XCreatePixmap(XtDisplay(w),
  277.               RootWindowOfScreen(XtScreen(w)), 
  278.               wid, hgt, DefaultDepthOfScreen(XtScreen(w)));
  279.    n = 0;
  280.    XtSetArg(wargs[n],XtNforeground, &vals.foreground); n++;
  281.    XtSetArg(wargs[n],XtNbackground, &vals.background); n++;
  282.    XtGetValues(w,wargs,n);
  283.    gc = XtGetGC(w, GCForeground|GCBackground, &vals);
  284.    XCopyPlane(XtDisplay(w), bitmap, *pix, gc, 0, 0,
  285.               wid, hgt, 0, 0, 1);
  286.    XFreePixmap(XtDisplay(w), bitmap);
  287.    XtReleaseGC(w, gc);
  288. }
  289.  
  290.  
  291. Widget MakeAboutWidget(w, bjpix, embpix)
  292. Widget w;
  293. Pixmap bjpix, embpix;
  294. {
  295. Widget label1,label2,label3,label4,label5,label6,button;
  296. Arg wargs[20];
  297. int n;
  298. XmString str[7];
  299. Dimension x,j;
  300.  
  301.  
  302.    about = XmCreateFormDialog(w,"About", NULL, 0);
  303.    
  304.    n = 0;
  305.    XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
  306.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  307.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  308.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_FORM); n++;
  309.    XtSetArg(wargs[n], XmNtopOffset, 20); n++;
  310.    XtSetArg(wargs[n], XmNrightOffset, 20); n++;
  311.    XtSetArg(wargs[n], XmNleftOffset, 20); n++;
  312.    XtSetArg(wargs[n], XmNheight, 60); n++;
  313.    str[0] = XmStringCreate("En Garde",XmSTRING_DEFAULT_CHARSET);
  314.    XtSetArg(wargs[n], XmNlabelString, str[0]); n++;
  315.    label1 = (Widget) XmCreateLabel(about, "AboutTitle", wargs, n);
  316.    XtManageChild(label1);
  317.  
  318.    n = 0;
  319.    XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
  320.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  321.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  322.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  323.    XtSetArg(wargs[n], XmNtopWidget, label1); n++;
  324.    XtSetArg(wargs[n], XmNtopOffset, 10); n++;
  325.    XtSetArg(wargs[n], XmNrightOffset, 20); n++;
  326.    XtSetArg(wargs[n], XmNleftOffset, 20); n++;
  327.    XtSetArg(wargs[n], XmNheight, 60); n++;
  328.    str[1] = XmStringCreate("Version 1.0",XmSTRING_DEFAULT_CHARSET);
  329.    XtSetArg(wargs[n], XmNlabelString, str[1]); n++;
  330.    label2 = (Widget) XmCreateLabel(about, "AboutVersion", wargs, n);
  331.    XtManageChild(label2);
  332.  
  333.    n = 0;
  334.    XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
  335.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  336.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  337.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  338.    XtSetArg(wargs[n], XmNtopWidget, label2); n++;
  339.    XtSetArg(wargs[n], XmNtopOffset, 10); n++;
  340.    XtSetArg(wargs[n], XmNrightOffset, 20); n++;
  341.    XtSetArg(wargs[n], XmNleftOffset, 20); n++;
  342.    XtSetArg(wargs[n], XmNheight, 60); n++;
  343.    str[2] = XmStringCreate("January, 1992",XmSTRING_DEFAULT_CHARSET);
  344.    XtSetArg(wargs[n], XmNlabelString, str[2]); n++;
  345.    label3 = (Widget) XmCreateLabel(about, "AboutDate", wargs, n);
  346.    XtManageChild(label3);
  347.  
  348.    n = 0;
  349.    XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
  350.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  351.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  352.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  353.    XtSetArg(wargs[n], XmNtopWidget, label3); n++;
  354.    XtSetArg(wargs[n], XmNtopOffset, 10); n++;
  355.    XtSetArg(wargs[n], XmNrightOffset, 20); n++;
  356.    XtSetArg(wargs[n], XmNleftOffset, 20); n++;
  357.    XtSetArg(wargs[n], XmNheight, 60); n++;
  358.    str[3] = XmStringCreate("Bill James",XmSTRING_DEFAULT_CHARSET);
  359.    XtSetArg(wargs[n], XmNlabelString, str[3]); n++;
  360.    label4 = (Widget) XmCreateLabel(about, "AboutAuthor", wargs, n);
  361.    XtManageChild(label4);
  362.  
  363.    n = 0;
  364.    XtSetArg(wargs[n], XmNlabelType, XmSTRING); n++;
  365.    XtSetArg(wargs[n], XmNrightAttachment, XmATTACH_FORM); n++;
  366.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  367.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  368.    XtSetArg(wargs[n], XmNtopWidget, label4); n++;
  369.    XtSetArg(wargs[n], XmNtopOffset, 10); n++;
  370.    XtSetArg(wargs[n], XmNrightOffset, 20); n++;
  371.    XtSetArg(wargs[n], XmNleftOffset, 20); n++;
  372.    XtSetArg(wargs[n], XmNheight, 60); n++;
  373.    str[4] = XmStringCreate("wjames@jupiter.SAIC.COM",XmSTRING_DEFAULT_CHARSET);
  374.    XtSetArg(wargs[n], XmNlabelString, str[4]); n++;
  375.    label6 = (Widget) XmCreateLabel(about, "AboutMail", wargs, n);
  376.    XtManageChild(label6);
  377.  
  378.    n = 0;
  379.    XtSetArg(wargs[n], XmNleftAttachment, XmATTACH_FORM); n++;
  380.    XtSetArg(wargs[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  381.    XtSetArg(wargs[n], XmNtopWidget, label6); n++;
  382.    XtSetArg(wargs[n], XmNtopOffset, 20); n++;
  383.    XtSetArg(wargs[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  384.    XtSetArg(wargs[n], XmNbottomOffset, 20); n++;
  385.    XtSetArg(wargs[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++;
  386.    XtSetArg(wargs[n], XmNlabelPixmap, embpix); n++;
  387.    XtSetArg(wargs[n], XmNlabelType, XmPIXMAP); n++;
  388.    XtSetArg(wargs[n], XmNwidth, 100); n++;
  389.    XtSetArg(wargs[n], XmNheight, 60); n++;
  390.    XtSetArg(wargs[n], XmNresize, False); n++;
  391.    button = XmCreateDrawnButton(about, "AboutButton", wargs, n);
  392.    XtManageChild(button);
  393.  
  394.    XtAddCallback(button, XmNactivateCallback, CloseAbout, NULL);
  395.  
  396.    XtRealizeWidget (about);
  397.    n = 0;
  398.    XtSetArg(wargs[n], XmNwidth, &x); n++;
  399.    XtGetValues(about, wargs, n);
  400.    j = (x - 100) / 2;
  401.    if (j < 0) j = 0;
  402.    n = 0;
  403.    XtSetArg(wargs[n], XmNleftOffset, j); n++;
  404.    XtSetValues(button, wargs, n);
  405.  
  406. }
  407.  
  408.