home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume2 / mines.shr / tool.c < prev    next >
C/C++ Source or Header  |  1987-11-20  |  3KB  |  117 lines

  1. /*
  2.  * handle the tool environment 
  3.  *
  4.  * Copyright (c) 1987 Tom Anderson; 20831 Frank Waters Road;
  5.  * Stanwood, WA  98282.   All rights reserved.
  6.  */
  7. static char copyright[] = "Copyright 1987 Tom Anderson";
  8.  
  9. #include <stdio.h>
  10. #include <suntool/tool_hs.h>
  11. #include <suntool/panel.h>
  12. #include <suntool/gfxsw.h>
  13. #include <sys/resource.h>
  14. #include <sys/ioctl.h>
  15. #include <strings.h>
  16.  
  17. #include "mines.h"
  18.  
  19. struct tool * MinesTool;
  20. char ** ToolAttrs = (char **) NULL;
  21. char * ToolName;
  22.  
  23. /*
  24.  * iconic form of window
  25.  */
  26. unsigned short IconImage[] = {
  27. #include "mines.icon"
  28. };
  29.  
  30. DEFINE_ICON_FROM_IMAGE(WindowIcon, IconImage);
  31.  
  32. sigwinched()
  33. {
  34.     tool_sigwinch(MinesTool);
  35. }
  36.  
  37. /*
  38.  * parse the tool args.
  39.  */
  40. void 
  41. ParseToolArgs(argc, argv)
  42.     int *argc;
  43.     char **argv;
  44. {
  45.     ToolName = argv[0];
  46.     (*argc)--;
  47.     argv++;
  48.     if (tool_parse_all(argc, argv, &ToolAttrs, ToolName) == -1) {
  49.     tool_usage(ToolName);
  50.     exit(1);
  51.     }
  52.     (*argc)++;
  53. }
  54.  
  55. /*
  56.  * set up the tool environment
  57.  */
  58. void
  59. InitTool()
  60. {
  61.     register unsigned int height;
  62.     register struct toolsw * twsp;
  63.  
  64.     if ((MinesTool = tool_make( 
  65.     WIN_LABEL, ToolName,
  66.     WIN_ICON, &WindowIcon, 
  67.     WIN_ATTR_LIST, ToolAttrs,
  68.     WIN_WIDTH, SIDE_SIZE * (SquareWidth-1) + 2 * tool_borderwidth(MinesTool) - 1,
  69.     /*
  70.      * NOTE: The following line was unnecessary in Sun release 2.2,
  71.      * but is necessary in release 3.0.  For some unknown reason, the
  72.      * call to tool_set_attributes following the call to InitBoardSW
  73.      * now fails to uncover the board area that was obscured by the 
  74.      * default tool height being too small (note that the tool has not 
  75.      * been installed yet).
  76.      */
  77.     WIN_HEIGHT, 2000,
  78.     0)) == (struct tool *) NULL) 
  79.     {
  80.     fputs("Can't make tool\n", stderr);
  81.     exit(1);
  82.     }
  83.     tool_free_attribute_list(ToolAttrs);
  84.     /* initialize the subwindows */
  85.     InitLevelSW();
  86.     InitMsgSW();
  87.     InitBoardSW();
  88.     /* 
  89.      * add up subwindow heights and force the tool to the resulting size 
  90.      */
  91.     height = tool_stripeheight(MinesTool) + tool_borderwidth(MinesTool) - tool_subwindowspacing(MinesTool);
  92.     for (twsp = MinesTool->tl_sw ; twsp != (struct toolsw *) 0 ; twsp = twsp->ts_next) 
  93.     height += twsp->ts_height + tool_subwindowspacing(MinesTool);
  94.     /*
  95.      * NOTE: under 2.2, the above calculation yielded the correct height.
  96.      * under 3.0, we need to add a few pixels to make it come out right (the
  97.      * reason is not yet known).
  98.      */
  99.     height += 2;
  100.     tool_set_attributes(MinesTool, WIN_HEIGHT, height, 0); 
  101.     signal(SIGWINCH, sigwinched);
  102. }
  103.  
  104. void
  105. RunTool()
  106. {
  107.     /*
  108.      * NOTE: this is another difference between release 2.2 and 3.0:
  109.      * in release 2.2, the SIGWINCH handler would get called once at the
  110.      * outset to draw the board area; in release 3.0, this doesn't happen.
  111.      */
  112.     DrawBoard();
  113.     tool_select(MinesTool, 0);
  114.     tool_destroy(MinesTool);
  115. }
  116.  
  117.