home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume11 / reve / patch4b / patches04b
Text File  |  1991-01-03  |  50KB  |  1,617 lines

  1.  
  2. ------- sunview.c -------
  3. *** /tmp/da06711    Tue Dec 18 10:04:12 1990
  4. --- sunview.c    Sat Dec 15 19:14:12 1990
  5. ***************
  6. *** 49,54 ****
  7. --- 49,55 ----
  8.   #define  WINDOW_SET          (void) window_set
  9.   
  10.   #define  NORMALFONT          "/usr/lib/fonts/fixedwidthfonts/screen.r.12"
  11. + #define  HELPFONT            "/usr/lib/fonts/fixedwidthfonts/screen.r.10"
  12.   #define  BOLDFONT            "/usr/lib/fonts/fixedwidthfonts/screen.b.12"
  13.   
  14.   mpr_static(button_stencil_pr, 64, 64, 1, button_stencil_image) ;
  15. ***************
  16. *** 68,81 ****
  17.   mpr_static(hglass_pr,         16, 16, 1, hglass_image) ;
  18.   mpr_static(nocur_pr,          16, 16, 1, nocur_image) ;
  19.   
  20. ! Canvas canvas, pcanvas ;
  21.   Cursor cursor[MAXCURSORS] ;
  22.   Event *cur_event ;
  23. ! Frame frame, pframe ;
  24.   Icon reve_icon ;
  25.   Pixfont *font[MAXFONTS] ;
  26.   Pixrect *images[MAXIMAGES] ;
  27. ! Pixwin *cpw, *ppw ;
  28.   
  29.   void pw_batch() ;
  30.   int opvals[3] ;         /* Pixrect rasterop values. */
  31. --- 69,82 ----
  32.   mpr_static(hglass_pr,         16, 16, 1, hglass_image) ;
  33.   mpr_static(nocur_pr,          16, 16, 1, nocur_image) ;
  34.   
  35. ! Canvas canvas, hcanvas, pcanvas ;
  36.   Cursor cursor[MAXCURSORS] ;
  37.   Event *cur_event ;
  38. ! Frame frame, hframe, pframe ;
  39.   Icon reve_icon ;
  40.   Pixfont *font[MAXFONTS] ;
  41.   Pixrect *images[MAXIMAGES] ;
  42. ! Pixwin *cpw, *hpw, *ppw ;
  43.   
  44.   void pw_batch() ;
  45.   int opvals[3] ;         /* Pixrect rasterop values. */
  46. ***************
  47. *** 101,106 ****
  48. --- 102,108 ----
  49.   Event *event ;
  50.   {
  51.          if (c == canvas)  curwin = W_MAIN ;
  52. +   else if (c == hcanvas) curwin = W_HELP ;
  53.     else if (c == pcanvas) curwin = W_PROPS ;
  54.   
  55.     cur_event = event ;
  56. ***************
  57. *** 109,126 ****
  58.   
  59.   
  60.   void
  61. - close_frame(wtype)        /* Iconise reve window. */
  62. - enum win_type wtype ;
  63. - {
  64. -   Frame f ;
  65. -   if (wtype == W_MAIN) f = frame ;
  66. -   else                 f = pframe ;
  67. -   WINDOW_SET(f, FRAME_CLOSED, TRUE, 0) ;
  68. - }
  69. - void
  70.   color_area(wtype, x, y, width, height, color)
  71.   enum win_type wtype ;
  72.   int x, y, width, height, color ;
  73. --- 111,116 ----
  74. ***************
  75. *** 127,133 ****
  76.   {
  77.     Pixwin *pw ;
  78.   
  79. !   pw = (wtype == W_MAIN) ? cpw : ppw ;
  80.     PW_WRITEBACKGROUND(pw, x, y, width, height, PIX_SRC | PIX_COLOR(color)) ;
  81.   }
  82.   
  83. --- 117,125 ----
  84.   {
  85.     Pixwin *pw ;
  86.   
  87. !        if (wtype == W_MAIN)  pw = cpw ;
  88. !   else if (wtype == W_HELP)  pw = hpw ;
  89. !   else if (wtype == W_PROPS) pw = ppw ;
  90.     PW_WRITEBACKGROUND(pw, x, y, width, height, PIX_SRC | PIX_COLOR(color)) ;
  91.   }
  92.   
  93. ***************
  94. *** 147,153 ****
  95.   {                        
  96.     Pixwin *pw ;
  97.   
  98. !   pw = (wtype == W_MAIN) ? cpw : ppw ;
  99.     PW_ROP(pw, x, y, width, height, PIX_SRC | PIX_DST,
  100.            images[(int) image], 0, 0) ;
  101.   }
  102. --- 139,147 ----
  103.   {                        
  104.     Pixwin *pw ;
  105.   
  106. !        if (wtype == W_MAIN)  pw = cpw ;
  107. !   else if (wtype == W_HELP)  pw = hpw ;
  108. !   else if (wtype == W_PROPS) pw = ppw ;
  109.     PW_ROP(pw, x, y, width, height, PIX_SRC | PIX_DST,
  110.            images[(int) image], 0, 0) ;
  111.   }
  112. ***************
  113. *** 162,168 ****
  114.     Pixwin *pw ;
  115.     int rop ;
  116.   
  117. !   pw = (wtype == W_MAIN) ? cpw : ppw ;
  118.     rop = opvals[(int) op] ;
  119.     if (!iscolor[(int) cur_dpyno] && color == C_WHITE)
  120.       rop = opvals[(int) RCLR] ;
  121. --- 156,164 ----
  122.     Pixwin *pw ;
  123.     int rop ;
  124.   
  125. !        if (wtype == W_MAIN)  pw = cpw ;
  126. !   else if (wtype == W_HELP)  pw = hpw ;
  127. !   else if (wtype == W_PROPS) pw = ppw ;
  128.     rop = opvals[(int) op] ;
  129.     if (!iscolor[(int) cur_dpyno] && color == C_WHITE)
  130.       rop = opvals[(int) RCLR] ;
  131. ***************
  132. *** 180,186 ****
  133.     Pixwin *pw ;
  134.     int rop ;
  135.   
  136. !   pw = (wtype == W_MAIN) ? cpw : ppw ;
  137.     rop = opvals[(int) op] | PIX_COLOR(color) ;
  138.     PW_STENCIL(pw, x, y, width, height, rop,
  139.                images[(int) stencil], 0, 0, images[(int) image], 0, 0) ;
  140. --- 176,184 ----
  141.     Pixwin *pw ;
  142.     int rop ;
  143.   
  144. !        if (wtype == W_MAIN)  pw = cpw ;
  145. !   else if (wtype == W_HELP)  pw = hpw ;
  146. !   else if (wtype == W_PROPS) pw = ppw ;
  147.     rop = opvals[(int) op] | PIX_COLOR(color) ;
  148.     PW_STENCIL(pw, x, y, width, height, rop,
  149.                images[(int) stencil], 0, 0, images[(int) image], 0, 0) ;
  150. ***************
  151. *** 196,202 ****
  152.   {
  153.     Pixwin *pw ;
  154.   
  155. !   pw = (wtype == W_MAIN) ? cpw : ppw ;
  156.     PW_TTEXT(pw, x, y, PIX_SRC | PIX_COLOR(color), font[(int) ftype], str) ;
  157.   }
  158.   
  159. --- 194,202 ----
  160.   {
  161.     Pixwin *pw ;
  162.   
  163. !        if (wtype == W_MAIN)  pw = cpw ;
  164. !   else if (wtype == W_HELP)  pw = hpw ;
  165. !   else if (wtype == W_PROPS) pw = ppw ;
  166.     PW_TTEXT(pw, x, y, PIX_SRC | PIX_COLOR(color), font[(int) ftype], str) ;
  167.   }
  168.   
  169. ***************
  170. *** 218,223 ****
  171. --- 218,224 ----
  172.   }
  173.   
  174.   
  175. + /*ARGSUSED*/
  176.   char *
  177.   get_resource(rtype)      /* Null routine (currently only X11 and XView). */
  178.   enum res_type rtype ;
  179. ***************
  180. *** 241,252 ****
  181. --- 242,256 ----
  182.   init_fonts()         /* Open the normal and bold fonts. */
  183.   {
  184.     font[(int) BFONT] = get_font(BOLDFONT) ;
  185. +   font[(int) HFONT] = get_font(HELPFONT) ;
  186.     font[(int) NFONT] = get_font(NORMALFONT) ;
  187.     bfont_height = font[(int) BFONT]->pf_defaultsize.y ;
  188. +   hfont_height = font[(int) HFONT]->pf_defaultsize.y ;
  189.     nfont_height = font[(int) NFONT]->pf_defaultsize.y ;
  190.   }
  191.   
  192.   
  193. + /*ARGSUSED*/
  194.   init_graphics(argc, argv)
  195.   int *argc ;
  196.   char *argv[] ;
  197. ***************
  198. *** 272,292 ****
  199.   {
  200.     Pixwin *frame_pw ;
  201.     char colorname[CMS_NAMESIZE] ;
  202. -   u_char red[OTH_COLORSIZE], green[OTH_COLORSIZE], blue[OTH_COLORSIZE] ;
  203.   
  204.     iscolor[(int) cur_dpyno] = (cpw->pw_pixrect->pr_depth == 8) ? 1 : 0 ;
  205. !   SPRINTF(colorname, "%s%D", OTH_COLOR, getpid()) ;
  206.     PW_SETCMSNAME(cpw, colorname) ;
  207.   
  208. !   oth_colorsetup(red, green, blue) ;
  209. !   PW_PUTCOLORMAP(cpw, 0, OTH_COLORSIZE, red, green, blue) ;
  210. !   if (inv_video) PW_REVERSEVIDEO(cpw, 0, OTH_COLORSIZE) ;
  211.   
  212.     if (iscolor[(int) cur_dpyno])
  213.       {
  214.         frame_pw = (Pixwin *) window_get(frame, WIN_PIXWIN) ;
  215.         PW_SETCMSNAME(frame_pw, colorname) ;
  216. !       PW_PUTCOLORMAP(frame_pw, 0, OTH_COLORSIZE, red, green, blue) ;
  217.       }
  218.   }
  219.   
  220. --- 276,294 ----
  221.   {
  222.     Pixwin *frame_pw ;
  223.     char colorname[CMS_NAMESIZE] ;
  224.   
  225.     iscolor[(int) cur_dpyno] = (cpw->pw_pixrect->pr_depth == 8) ? 1 : 0 ;
  226. !   SPRINTF(colorname, "%s%D", REVE_COLOR, getpid()) ;
  227.     PW_SETCMSNAME(cpw, colorname) ;
  228.   
  229. !   PW_PUTCOLORMAP(cpw, 0, REVE_COLORSIZE, rcols, gcols, bcols) ;
  230. !   if (inv_video) PW_REVERSEVIDEO(cpw, 0, REVE_COLORSIZE) ;
  231.   
  232.     if (iscolor[(int) cur_dpyno])
  233.       {
  234.         frame_pw = (Pixwin *) window_get(frame, WIN_PIXWIN) ;
  235.         PW_SETCMSNAME(frame_pw, colorname) ;
  236. !       PW_PUTCOLORMAP(frame_pw, 0, REVE_COLORSIZE, rcols, gcols, bcols) ;
  237.       }
  238.   }
  239.   
  240. ***************
  241. *** 315,321 ****
  242.   void
  243.   make_canvas()               /* Create canvas for game board. */
  244.   {
  245. !   canvas = window_create(frame, CANVAS,
  246.                            CANVAS_RETAINED, FALSE,
  247.                            WIN_HEIGHT,      TOTAL_HEIGHT,
  248.                            WIN_WIDTH,       TOTAL_WIDTH,
  249. --- 317,323 ----
  250.   void
  251.   make_canvas()               /* Create canvas for game board. */
  252.   {
  253. !   canvas = window_create(frame,           CANVAS,
  254.                            CANVAS_RETAINED, FALSE,
  255.                            WIN_HEIGHT,      TOTAL_HEIGHT,
  256.                            WIN_WIDTH,       TOTAL_WIDTH,
  257. ***************
  258. *** 331,337 ****
  259.                            0) ;
  260.     cpw = (Pixwin *) window_get(canvas, CANVAS_PIXWIN) ;
  261.   
  262. !   pcanvas = window_create(pframe, CANVAS,
  263.                             CANVAS_RETAINED, FALSE,
  264.                             WIN_HEIGHT,      PROPS_HEIGHT,
  265.                             WIN_WIDTH,       PROPS_WIDTH,
  266. --- 333,339 ----
  267.                            0) ;
  268.     cpw = (Pixwin *) window_get(canvas, CANVAS_PIXWIN) ;
  269.   
  270. !   pcanvas = window_create(pframe,          CANVAS,
  271.                             CANVAS_RETAINED, FALSE,
  272.                             WIN_HEIGHT,      PROPS_HEIGHT,
  273.                             WIN_WIDTH,       PROPS_WIDTH,
  274. ***************
  275. *** 395,415 ****
  276.   
  277.   
  278.   void
  279. ! make_icon()
  280.   {
  281. !   reve_icon = icon_create(ICON_IMAGE, &icon_pr, 0) ;
  282.   }
  283.   
  284.   
  285.   void
  286. ! open_frame(wtype)
  287. ! enum win_type wtype ;
  288.   {
  289. !   Frame f ;
  290. !   if (wtype == W_MAIN) f = frame ;
  291. !   else                 f = pframe ;
  292. !   WINDOW_SET(f, WIN_SHOW, TRUE, 0) ;
  293.   }
  294.   
  295.   
  296. --- 397,440 ----
  297.   
  298.   
  299.   void
  300. ! make_help_window(argc, argv)
  301. ! int argc ;
  302. ! char *argv[] ;
  303.   {
  304. !   int fontwidth ;
  305. !   hframe = window_create((Window) NULL,     FRAME,
  306. !                           FRAME_ICON,       reve_icon,
  307. !                           FRAME_LABEL,      "reve help",
  308. !                           FRAME_NO_CONFIRM, TRUE,
  309. !                           WIN_ERROR_MSG,    "Can't create window.",
  310. !                           FRAME_ARGS,       argc, argv,
  311. !                           0) ;
  312. !   fontwidth = font[(int) HFONT]->pf_defaultsize.x ;
  313. !   help_height = ((hfont_height + 1) * HELP_ROWS) + (4 * CGAP) + CHEIGHT ;
  314. !   help_width  = (fontwidth * HELP_COLS) + (2 * CGAP) ;
  315. !   hcanvas = window_create(hframe, CANVAS,
  316. !                           CANVAS_RETAINED, FALSE,
  317. !                           WIN_HEIGHT,      help_height,
  318. !                           WIN_WIDTH,       help_width,
  319. !                           WIN_CONSUME_PICK_EVENTS,
  320. !                             MS_LEFT, MS_MIDDLE,
  321. !                             0,
  322. !                           WIN_CONSUME_KBD_EVENTS,
  323. !                             KBD_USE, KBD_DONE, WIN_ASCII_EVENTS, WIN_UP_EVENTS,
  324. !                             0,
  325. !                           WIN_EVENT_PROC, canvas_proc,
  326. !                           0) ;
  327. !   hpw = (Pixwin *) window_get(hcanvas, CANVAS_PIXWIN) ;
  328.   }
  329.   
  330.   
  331.   void
  332. ! make_icon()
  333.   {
  334. !   reve_icon = icon_create(ICON_IMAGE, &icon_pr, 0) ;
  335.   }
  336.   
  337.   
  338. ***************
  339. *** 446,452 ****
  340.       nextc = MOUSE_MOVING ;
  341.     else if (id == WIN_REPAINT)
  342.       {
  343. !            if (curwin == W_MAIN) nextc = FRAME_REPAINT ;
  344.         else if (curwin == W_PROPS) nextc = PROPS_REPAINT ;
  345.       }
  346.   }
  347. --- 471,478 ----
  348.       nextc = MOUSE_MOVING ;
  349.     else if (id == WIN_REPAINT)
  350.       {
  351. !            if (curwin == W_MAIN)  nextc = FRAME_REPAINT ;
  352. !       else if (curwin == W_HELP)  nextc = HELP_REPAINT ;
  353.         else if (curwin == W_PROPS) nextc = PROPS_REPAINT ;
  354.       }
  355.   }
  356. ***************
  357. *** 460,465 ****
  358. --- 486,504 ----
  359.   }
  360.   
  361.   
  362. + void
  363. + set_frame(wtype, showing)
  364. + enum win_type wtype ;
  365. + int showing ;
  366. + {
  367. +   Frame f ;
  368. +        if (wtype == W_HELP)  f = hframe ;
  369. +   else if (wtype == W_PROPS) f = pframe ;
  370. +   WINDOW_SET(f, WIN_SHOW, showing, 0) ;
  371. + }
  372.   /*ARGSUSED*/
  373.   void
  374.   start_tool(dtype)      /* Display window and start the notifier. */
  375. ***************
  376. *** 472,477 ****
  377. --- 511,517 ----
  378.         WINDOW_SET(frame, FRAME_ICON, reve_icon, 0) ;
  379.       }
  380.     window_fit(frame) ;
  381. +   window_fit(hframe) ;
  382.     window_fit(pframe) ;
  383.     window_main_loop(frame) ;
  384.   }
  385.  
  386. ------- tty.c -------
  387. *** /tmp/da06714    Tue Dec 18 10:04:13 1990
  388. --- tty.c    Sat Dec 15 19:42:20 1990
  389. ***************
  390. *** 65,74 ****
  391.         {  1,  1,  43,  32, },      /* Load */
  392.         { 11,  1, 117,  32, },      /* Moves? */
  393.         { 22,  1, 191,  32, },      /* New game */
  394. !       { 33,  1, 265,  32, },      /* Save */
  395. !       { 44,  1, 339,  32, },      /* Suggest */
  396. !       { 55,  1, 413,  32, },      /* Undo */
  397. !       { -1, -1,  43,  74, },      /* Props  (not displayed). */
  398.         { -1, -1, 339,  74, },      /* Cancel (not displayed). */
  399.         { -1, -1, 413,  74, },      /* Quit   (not displayed). */
  400.         { 60,  5,  15, 111, },      /* Black: */
  401. --- 65,78 ----
  402.         {  1,  1,  43,  32, },      /* Load */
  403.         { 11,  1, 117,  32, },      /* Moves? */
  404.         { 22,  1, 191,  32, },      /* New game */
  405. !       { -1, -1, 265,  32, },      /* Help   (not displayed). */
  406. !       { -1, -1, 339,  32, },      /* Redo   (not displayed). */
  407. !       { -1, -1, 413,  32, },      /* Props  (not displayed). */
  408. !       { 33,  1,  43,  74, },      /* Save */
  409. !       { 44,  1, 117,  74, },      /* Suggest */
  410. !       { -1, -1, 191,  74, },      /* Edit   (not displayed). */
  411. !       { -1, -1, 265,  74, },      /* Stop   (not displayed). */
  412. !       { 55,  1, 339,  74, },      /* Undo */
  413.         { -1, -1, 339,  74, },      /* Cancel (not displayed). */
  414.         { -1, -1, 413,  74, },      /* Quit   (not displayed). */
  415.         { 60,  5,  15, 111, },      /* Black: */
  416. ***************
  417. *** 86,91 ****
  418. --- 90,96 ----
  419.         { -1, -1,  -1,  -1, },      /* Show evaluation option. */
  420.         { -1, -1,  -1,  -1, },      /* Number move option. */
  421.         { -1, -1,  -1,  -1, },      /* Quick game option. */
  422. +       { -1, -1,  -1,  -1, },      /* Help window page cycle.*/
  423.   } ;
  424.   
  425.   struct other_info {   /* Information needed to place other text values. */
  426. ***************
  427. *** 97,106 ****
  428.         { -1, -1, },       /* Load     (ignored). */
  429.         { -1, -1, },       /* Moves?   (ignored). */
  430.         { -1, -1, },       /* New game (ignored). */
  431.         { -1, -1, },       /* Save     (ignored). */
  432.         { -1, -1, },       /* Suggest  (ignored). */
  433.         { -1, -1, },       /* Undo     (ignored). */
  434. -       { -1, -1, },       /* Done     (ignored). */
  435.         { -1, -1, },       /* Cancel   (ignored). */
  436.         { -1, -1, },       /* Quit     (ignored). */
  437.         { 38,  5, },       /* Black: */
  438. --- 102,115 ----
  439.         { -1, -1, },       /* Load     (ignored). */
  440.         { -1, -1, },       /* Moves?   (ignored). */
  441.         { -1, -1, },       /* New game (ignored). */
  442. +       { -1, -1, },       /* Help     (ignored). */
  443. +       { -1, -1, },       /* Redo     (ignored). */
  444. +       { -1, -1, },       /* Props    (ignored). */
  445.         { -1, -1, },       /* Save     (ignored). */
  446.         { -1, -1, },       /* Suggest  (ignored). */
  447. +       { -1, -1, },       /* Edit     (ignored). */
  448. +       { -1, -1, },       /* Stop     (ignored). */
  449.         { -1, -1, },       /* Undo     (ignored). */
  450.         { -1, -1, },       /* Cancel   (ignored). */
  451.         { -1, -1, },       /* Quit     (ignored). */
  452.         { 38,  5, },       /* Black: */
  453. ***************
  454. *** 118,123 ****
  455. --- 127,133 ----
  456.         { 60, 11, },       /* Show evaluation option. */
  457.         { -1, -1, },       /* Number move option. */
  458.         { -1, -1, },       /* Quick game option. */
  459. +       { -1, -1, },       /* Help window page cycle. */
  460.   } ;
  461.   
  462.   
  463. ***************
  464. *** 135,145 ****
  465.   {}
  466.   
  467.   
  468. - void
  469. - close_frame()           /* This option does nothing with termcap. */
  470. - {}
  471.   /*ARGSUSED*/
  472.   void
  473.   color_area(wtype, x, y, width, height, color)
  474. --- 145,150 ----
  475. ***************
  476. *** 532,550 ****
  477.   }
  478.   
  479.   
  480. - void
  481. - make_icon()             /* Null routine - no icon in termcap version. */
  482. - {}
  483.   /*ARGSUSED*/
  484.   void
  485. ! open_frame(wtype)
  486. ! enum win_type wtype ;
  487.   {
  488.   }
  489.   
  490.   
  491.   static void
  492.   outc(c)                 /* Output the next character to the screen. */
  493.   register int c ;
  494. --- 537,556 ----
  495.   }
  496.   
  497.   
  498.   /*ARGSUSED*/
  499.   void
  500. ! make_help_window(argc, argv)
  501. ! int argc ;
  502. ! char *argv[] ;
  503.   {
  504.   }
  505.   
  506.   
  507. + void
  508. + make_icon()             /* Null routine - no icon in termcap version. */
  509. + {}
  510.   static void
  511.   outc(c)                 /* Output the next character to the screen. */
  512.   register int c ;
  513. ***************
  514. *** 575,580 ****
  515. --- 581,594 ----
  516.   void
  517.   set_cursor(cursor)        /* No cursors in termcap version. */
  518.   enum curtype cursor ;
  519. + {}
  520. + /*ARGSUSED*/
  521. + void
  522. + set_frame(wtype, showing)
  523. + enum win_type wtype ;
  524. + int showing ;
  525.   {}
  526.   
  527.   
  528.  
  529. ------- x11.c -------
  530. *** /tmp/da06717    Tue Dec 18 10:04:15 1990
  531. --- x11.c    Mon Dec 17 10:26:26 1990
  532. ***************
  533. *** 41,46 ****
  534. --- 41,47 ----
  535.   
  536.   #define  BOLDFONT    "lucidasanstypewriter-bold-12"
  537.   #define  DEFFONT     "fixed"
  538. + #define  HELPFONT    "lucidasanstypewriter-10"
  539.   #define  NORMALFONT  "lucidasanstypewriter-12"
  540.   
  541.   #define  FRAME_MASK  (ButtonPressMask | ButtonReleaseMask | ExposureMask    | \
  542. ***************
  543. *** 63,75 ****
  544.   Pixmap images[MAXIMAGES] ;
  545.   Pixmap no_pixmap ;
  546.   Pixmap load_color_icon(), load_image(), reve_icon[MAXDPY] ;
  547. ! Window frame[MAXDPY], pframe[MAXDPY], root[MAXDPY] ;
  548.   XClassHint class_hint = { "reve", "Reve" } ;
  549.   XColor BGcolor, FGcolor ;
  550.   XEvent event ;
  551.   XFontStruct *font[MAXFONTS] ;
  552.   XrmDatabase reve_DB[MAXDPY] ;   /* Combined resources database. */
  553. ! XSizeHints psize, size ;
  554.   XWMHints wm_hints ;
  555.   XGCValues gc_val ;              /* Used to setup graphics context values. */
  556.   int gc_flags ;                  /* Used to set up graphics context flags. */
  557. --- 64,76 ----
  558.   Pixmap images[MAXIMAGES] ;
  559.   Pixmap no_pixmap ;
  560.   Pixmap load_color_icon(), load_image(), reve_icon[MAXDPY] ;
  561. ! Window frame[MAXDPY], hframe[MAXDPY], pframe[MAXDPY], root[MAXDPY] ;
  562.   XClassHint class_hint = { "reve", "Reve" } ;
  563.   XColor BGcolor, FGcolor ;
  564.   XEvent event ;
  565.   XFontStruct *font[MAXFONTS] ;
  566.   XrmDatabase reve_DB[MAXDPY] ;   /* Combined resources database. */
  567. ! XSizeHints size ;
  568.   XWMHints wm_hints ;
  569.   XGCValues gc_val ;              /* Used to setup graphics context values. */
  570.   int gc_flags ;                  /* Used to set up graphics context flags. */
  571. ***************
  572. *** 78,84 ****
  573.   unsigned long backgnd[MAXDPY] ; /* Default background color. */
  574.   unsigned long foregnd[MAXDPY] ; /* Default foreground color. */
  575.   unsigned long gc_mask ;         /* Mask for setting graphic context values. */
  576. ! unsigned long palette[OTH_COLORSIZE] ;     /* Xlib color palette. */
  577.   
  578.   #ifndef NOSELECT
  579.   #ifdef NO_43SELECT
  580. --- 79,85 ----
  581.   unsigned long backgnd[MAXDPY] ; /* Default background color. */
  582.   unsigned long foregnd[MAXDPY] ; /* Default foreground color. */
  583.   unsigned long gc_mask ;         /* Mask for setting graphic context values. */
  584. ! unsigned long palette[REVE_COLORSIZE] ;     /* Xlib color palette. */
  585.   
  586.   #ifndef NOSELECT
  587.   #ifdef NO_43SELECT
  588. ***************
  589. *** 143,172 ****
  590.   
  591.   
  592.   void
  593. - close_frame(wtype)            /* Iconise reve window. */
  594. - enum win_type wtype ;
  595. - {
  596. -   int d ;
  597. -   XEvent event ;
  598. -   Window window ;
  599. -   d = (int) cur_dpyno ;
  600. -   if (wtype == W_MAIN) window = frame[d] ;
  601. -   else                 window = pframe[d] ;
  602. -   iconic = 1 ;
  603. -   event.xclient.type = ClientMessage ;
  604. -   event.xclient.display = dpy[d] ;
  605. -   event.xclient.window = window ;
  606. -   event.xclient.message_type = XInternAtom(dpy[d], "WM_CHANGE_STATE", False) ;
  607. -   event.xclient.format = 32 ;
  608. -   event.xclient.data.l[0] = IconicState ;
  609. -   XSendEvent(dpy[d], DefaultRootWindow(dpy[d]), False,
  610. -               SubstructureRedirectMask | SubstructureNotifyMask, &event) ;
  611. - }
  612. - void
  613.   color_area(wtype, x, y, width, height, color)
  614.   enum win_type wtype ;
  615.   int x, y, width, height, color ;
  616. --- 144,149 ----
  617. ***************
  618. *** 175,181 ****
  619.     int d ;
  620.   
  621.     d = (int) cur_dpyno ;
  622. !   window = (wtype == W_MAIN) ? frame[d] : pframe[d] ;
  623.     if (iscolor[d]) gc_val.foreground = palette[color] ;
  624.     else
  625.       { 
  626. --- 152,161 ----
  627.     int d ;
  628.   
  629.     d = (int) cur_dpyno ;
  630. !        if (wtype == W_MAIN)  window = frame[d] ;
  631. !   else if (wtype == W_HELP)  window = hframe[d] ;
  632. !   else if (wtype == W_PROPS) window = pframe[d] ;
  633.     if (iscolor[d]) gc_val.foreground = palette[color] ;
  634.     else
  635.       { 
  636. ***************
  637. *** 206,212 ****
  638.     int d ;
  639.   
  640.     d = (int) cur_dpyno ;
  641. !   window = (wtype == W_MAIN) ? frame[d] : pframe[d] ;
  642.     gc_mask = GCStipple | GCTileStipXOrigin | GCTileStipYOrigin ;
  643.     gc_val.stipple = images[(int) image] ;
  644.     gc_val.ts_x_origin = x ;
  645. --- 186,195 ----
  646.     int d ;
  647.   
  648.     d = (int) cur_dpyno ;
  649. !        if (wtype == W_MAIN)  window = frame[d] ;
  650. !   else if (wtype == W_HELP)  window = hframe[d] ;
  651. !   else if (wtype == W_PROPS) window = pframe[d] ;
  652.     gc_mask = GCStipple | GCTileStipXOrigin | GCTileStipYOrigin ;
  653.     gc_val.stipple = images[(int) image] ;
  654.     gc_val.ts_x_origin = x ;
  655. ***************
  656. *** 226,232 ****
  657.     int d ;
  658.   
  659.     d = (int) cur_dpyno ;
  660. !   window = (wtype == W_MAIN) ? frame[d] : pframe[d] ;
  661.     if (iscolor[d]) gc_val.foreground = palette[color] ;
  662.     else
  663.       {
  664. --- 209,218 ----
  665.     int d ;
  666.   
  667.     d = (int) cur_dpyno ;
  668. !        if (wtype == W_MAIN)  window = frame[d] ;
  669. !   else if (wtype == W_HELP)  window = hframe[d] ;
  670. !   else if (wtype == W_PROPS) window = pframe[d] ;
  671.     if (iscolor[d]) gc_val.foreground = palette[color] ;
  672.     else
  673.       {
  674. ***************
  675. *** 250,256 ****
  676.     int d ;
  677.   
  678.     d = (int) cur_dpyno ;
  679. !   window = (wtype == W_MAIN) ? frame[d] : pframe[d] ;
  680.     if (iscolor[d]) gc_val.foreground = palette[color] ;
  681.     else            gc_val.foreground = foregnd[d] ;
  682.     gc_val.function = opvals[(int) op] ;
  683. --- 236,245 ----
  684.     int d ;
  685.   
  686.     d = (int) cur_dpyno ;
  687. !        if (wtype == W_MAIN)  window = frame[d] ;
  688. !   else if (wtype == W_HELP)  window = hframe[d] ;
  689. !   else if (wtype == W_PROPS) window = pframe[d] ;
  690.     if (iscolor[d]) gc_val.foreground = palette[color] ;
  691.     else            gc_val.foreground = foregnd[d] ;
  692.     gc_val.function = opvals[(int) op] ;
  693. ***************
  694. *** 279,285 ****
  695.     int d ;
  696.   
  697.     d = (int) cur_dpyno ;
  698. !   window = (wtype == W_MAIN) ? frame[d] : pframe[d] ;
  699.     if (iscolor[d]) gc_val.foreground = palette[color] ;
  700.     else
  701.       { 
  702. --- 268,277 ----
  703.     int d ;
  704.   
  705.     d = (int) cur_dpyno ;
  706. !        if (wtype == W_MAIN)  window = frame[d] ;
  707. !   else if (wtype == W_HELP)  window = hframe[d] ;
  708. !   else if (wtype == W_PROPS) window = pframe[d] ;
  709.     if (iscolor[d]) gc_val.foreground = palette[color] ;
  710.     else
  711.       { 
  712. ***************
  713. *** 377,385 ****
  714. --- 369,380 ----
  715.   init_fonts()             /* Open the normal and bold fonts. */
  716.   {
  717.     font[(int) BFONT] = get_font(BOLDFONT) ;
  718. +   font[(int) HFONT] = get_font(HELPFONT) ;
  719.     font[(int) NFONT] = get_font(NORMALFONT) ;
  720.     bfont_height = font[(int) BFONT]->max_bounds.ascent +
  721.                    font[(int) BFONT]->max_bounds.descent ;
  722. +   hfont_height = font[(int) HFONT]->max_bounds.ascent +
  723. +                  font[(int) HFONT]->max_bounds.descent ;
  724.     nfont_height = font[(int) NFONT]->max_bounds.ascent +
  725.                    font[(int) NFONT]->max_bounds.descent ;
  726.   }
  727. ***************
  728. *** 439,445 ****
  729.   load_colors()     /* Create and load reve color map. */
  730.   {
  731.     XColor ccol ;
  732. -   u_char red[OTH_COLORSIZE], green[OTH_COLORSIZE], blue[OTH_COLORSIZE] ;
  733.     int d, i, numcolors ;
  734.   
  735.     d = (int) cur_dpyno ;
  736. --- 434,439 ----
  737. ***************
  738. *** 446,465 ****
  739.     iscolor[d] = 0 ;
  740.     if (DisplayCells(dpy[d], screen[d]) > 2)
  741.       {
  742. -       oth_colorsetup(red, green, blue) ;
  743.         iscolor[d] = 1 ;
  744.         numcolors = 0 ;
  745. !       for (i = 0; i < OTH_COLORSIZE; i++)
  746.           {
  747. !           ccol.flags = DoRed | DoGreen | DoBlue ;
  748. !           ccol.red   = (unsigned short) (red[i]   << 8) ;
  749. !           ccol.green = (unsigned short) (green[i] << 8) ;
  750. !           ccol.blue  = (unsigned short) (blue[i]  << 8) ;
  751.             if (XAllocColor(dpy[d],
  752.                 DefaultColormap(dpy[d], screen[d]), &ccol) == True)
  753.               palette[numcolors++] = ccol.pixel ;
  754.           }
  755. !       if (numcolors < 2)
  756.           {
  757.             FPRINTF(stderr, "%s: cannot allocate colors.\n", progname) ;
  758.             exit(1) ;
  759. --- 440,463 ----
  760.     iscolor[d] = 0 ;
  761.     if (DisplayCells(dpy[d], screen[d]) > 2)
  762.       {
  763.         iscolor[d] = 1 ;
  764.         numcolors = 0 ;
  765. !       for (i = 0; i < REVE_COLORSIZE; i++)
  766.           {
  767. !           if (colstr[i] == NULL ||
  768. !               (XParseColor(dpy[d], DefaultColormap(dpy[d], screen[d]),
  769. !                            colstr[i], &ccol) == 0))
  770. !             {
  771. !               ccol.flags = DoRed | DoGreen | DoBlue ;
  772. !               ccol.red   = (unsigned short) (rcols[i] << 8) ;
  773. !               ccol.green = (unsigned short) (gcols[i] << 8) ;
  774. !               ccol.blue  = (unsigned short) (bcols[i] << 8) ;
  775. !             }
  776.             if (XAllocColor(dpy[d],
  777.                 DefaultColormap(dpy[d], screen[d]), &ccol) == True)
  778.               palette[numcolors++] = ccol.pixel ;
  779.           }
  780. !       if (numcolors < REVE_COLORSIZE)
  781.           {
  782.             FPRINTF(stderr, "%s: cannot allocate colors.\n", progname) ;
  783.             exit(1) ;
  784. ***************
  785. *** 525,530 ****
  786. --- 523,530 ----
  787.    *
  788.    *  XENVIRONMENT environment variable or, if not set, .Xdefaults-hostname
  789.    *  file.
  790. +  *
  791. +  *  REVEDEFAULTS environment variable or, if not set, the ~/.reverc file.
  792.    */
  793.   
  794.   void
  795. ***************
  796. *** 570,575 ****
  797. --- 570,587 ----
  798.       }
  799.     else db = XrmGetFileDatabase(ptr) ;
  800.     XrmMergeDatabases(db, &reve_DB[d]) ;
  801. + /*  Finally merge in Reve defaults via REVEDEFAULTS or, if not defined, the
  802. +  *  ~/.reverc file.
  803. +  */
  804. +   if ((ptr = getenv("REVEDEFAULTS")) == NULL)
  805. +     {
  806. +       SPRINTF(name, "%s/.reverc", home) ;
  807. +       db = XrmGetFileDatabase(name) ;
  808. +     }
  809. +   else db = XrmGetFileDatabase(ptr) ;
  810. +   XrmMergeDatabases(db, &reve_DB[d]) ;
  811.   }
  812.   
  813.   
  814. ***************
  815. *** 655,673 ****
  816.   
  817.   /*  Setup property window. */
  818.   
  819. !   psize.flags = PMinSize | PMaxSize | PPosition | PSize ;
  820. !   psize.x = TOTAL_WIDTH + 10 ;
  821. !   psize.y = 0 ;
  822. !   psize.max_width = size.min_width = size.width = PROPS_WIDTH ;
  823. !   psize.max_height = size.min_height = size.height = PROPS_HEIGHT ;
  824.   
  825.     pframe[d] = XCreateSimpleWindow(dpy[d], root[d],
  826. !                                   size.x + TOTAL_WIDTH + 10, size.y,
  827. !                                   PROPS_WIDTH, PROPS_HEIGHT,
  828.                                     REVE_BORDER_WIDTH, foregnd[d], backgnd[d]) ;
  829.   
  830.     XSetStandardProperties(dpy[d], pframe[d], "reve properties",
  831. !                          "Props", reve_icon[d], argv, argc, &psize) ;
  832.   
  833.   /* Create graphics contexts. */
  834.   
  835. --- 667,685 ----
  836.   
  837.   /*  Setup property window. */
  838.   
  839. !   size.flags = PMinSize | PMaxSize | PPosition | PSize ;
  840. !   size.x = TOTAL_WIDTH + 10 ;
  841. !   size.y = 0 ;
  842. !   size.max_width = size.min_width = size.width = PROPS_WIDTH ;
  843. !   size.max_height = size.min_height = size.height = PROPS_HEIGHT ;
  844.   
  845.     pframe[d] = XCreateSimpleWindow(dpy[d], root[d],
  846. !                                   size.x, size.y,
  847. !                                   size.max_width, size.max_height,
  848.                                     REVE_BORDER_WIDTH, foregnd[d], backgnd[d]) ;
  849.   
  850.     XSetStandardProperties(dpy[d], pframe[d], "reve properties",
  851. !                          "Props", reve_icon[d], argv, argc, &size) ;
  852.   
  853.   /* Create graphics contexts. */
  854.   
  855. ***************
  856. *** 682,691 ****
  857. --- 694,733 ----
  858.   
  859.     stencilgc[d] = XCreateGC(dpy[d], root[d], gc_mask, &gc_val) ;
  860.     XSetFillStyle(dpy[d], stencilgc[d], FillOpaqueStippled) ;
  861. +   XSynchronize(dpy[d], TRUE) ;
  862.   }
  863.   
  864.   
  865.   void
  866. + make_help_window(argc, argv)
  867. + int argc ;
  868. + char *argv[] ;
  869. + {
  870. +   int d, fontwidth ;
  871. +   d = (int) cur_dpyno ;
  872. +   fontwidth = font[(int) HFONT]->max_bounds.rbearing +
  873. +               font[(int) HFONT]->min_bounds.lbearing ;
  874. +   help_height = ((hfont_height + 1) * HELP_ROWS) + (4 * CGAP) + CHEIGHT ;
  875. +   help_width  = (fontwidth * HELP_COLS) + (2 * CGAP) ;
  876. +   size.flags = PMinSize | PMaxSize | PPosition | PSize ;
  877. +   size.x = TOTAL_WIDTH + 10 ;
  878. +   size.y = 0 ;
  879. +   size.max_width  = size.min_width  = size.width  = help_width ;
  880. +   size.max_height = size.min_height = size.height = help_height ;
  881. +   hframe[d] = XCreateSimpleWindow(dpy[d], root[d],
  882. +                                   size.x, size.y,
  883. +                                   size.max_width, size.max_height,
  884. +                                   REVE_BORDER_WIDTH, foregnd[d], backgnd[d]) ;
  885. +   XSetStandardProperties(dpy[d], hframe[d], "reve help",
  886. +                          "Help", reve_icon[d], argv, argc, &size) ;
  887. + }
  888. + void
  889.   make_icon() {}        /* Null routine - icon created in make_frame. */
  890.   
  891.   
  892. ***************
  893. *** 719,739 ****
  894.   
  895.   
  896.   void
  897. - open_frame(wtype)
  898. - enum win_type wtype ;
  899. - {
  900. -   int d ;
  901. -   Window window ;
  902. -   d = (int) cur_dpyno ;
  903. -   if (wtype == W_MAIN) window = frame[d] ;
  904. -   else                 window = pframe[d] ;
  905. -   XSelectInput(dpy[0], window, FRAME_MASK) ;
  906. -   XMapWindow(dpy[0], window) ;
  907. - }
  908. - void
  909.   process_event()         /* Determine event type. */
  910.   {
  911.     XClientMessageEvent *ev ;
  912. --- 761,766 ----
  913. ***************
  914. *** 743,749 ****
  915.     int d ;
  916.   
  917.     d = (int) cur_dpyno ; 
  918. !        if (event.xany.window == frame[(int) cur_dpyno])  curwin = W_MAIN ;
  919.     else if (event.xany.window == pframe[(int) cur_dpyno]) curwin = W_PROPS ;
  920.   
  921.     switch (event.type)
  922. --- 770,777 ----
  923.     int d ;
  924.   
  925.     d = (int) cur_dpyno ; 
  926. !        if (event.xany.window ==  frame[(int) cur_dpyno]) curwin = W_MAIN ;
  927. !   else if (event.xany.window == hframe[(int) cur_dpyno]) curwin = W_HELP ;
  928.     else if (event.xany.window == pframe[(int) cur_dpyno]) curwin = W_PROPS ;
  929.   
  930.     switch (event.type)
  931. ***************
  932. *** 807,812 ****
  933. --- 835,841 ----
  934.   {
  935.     int d ;
  936.     int doframe  = 0 ;
  937. +   int dohframe = 0 ;
  938.     int dopframe = 0 ;
  939.   
  940.     d = (int) cur_dpyno ;
  941. ***************
  942. *** 814,819 ****
  943. --- 843,850 ----
  944.       {
  945.         if (event->count == 0 && event->window == frame[(int) cur_dpyno])
  946.           doframe++ ;
  947. +       if (event->count == 0 && event->window == hframe[(int) cur_dpyno])
  948. +         dohframe++ ;
  949.         if (event->count == 0 && event->window == pframe[(int) cur_dpyno])
  950.           dopframe++ ;
  951.       }
  952. ***************
  953. *** 820,825 ****
  954. --- 851,857 ----
  955.     while (XCheckMaskEvent(dpy[d], ExposureMask, (XEvent *) event)) ;
  956.   
  957.          if (doframe)  return(FRAME_REPAINT) ;
  958. +   else if (dohframe) return(HELP_REPAINT) ;
  959.     else if (dopframe) return(PROPS_REPAINT) ;
  960.     else               return(IGNORE_EVENT) ;
  961.   }
  962. ***************
  963. *** 838,847 ****
  964.   
  965.   
  966.   void
  967.   start_tool(dtype)            /* Start event dispatcher and display. */
  968.   enum disp_type dtype ;
  969.   {
  970. !   open_frame(W_MAIN) ;
  971.     XSelectInput(dpy[0], pframe[0], FRAME_MASK) ;
  972.   
  973.     if (dtype == XTWO)
  974. --- 870,898 ----
  975.   
  976.   
  977.   void
  978. + set_frame(wtype, showing)
  979. + enum win_type wtype ;
  980. + int showing ;
  981. + {
  982. +   Window window ;
  983. +   int d ;
  984. +   d = (int) cur_dpyno ;
  985. +        if (wtype == W_HELP)  window = hframe[d] ;
  986. +   else if (wtype == W_PROPS) window = pframe[d] ;
  987. +   if (showing) XMapWindow(dpy[d], window) ;
  988. +   else         XUnmapWindow(dpy[d], window) ;
  989. + }
  990. + void
  991.   start_tool(dtype)            /* Start event dispatcher and display. */
  992.   enum disp_type dtype ;
  993.   {
  994. !   XSelectInput(dpy[0], frame[0], FRAME_MASK) ;
  995. !   XMapWindow(dpy[0], frame[0]) ;
  996. !   XSelectInput(dpy[0], hframe[0], FRAME_MASK) ;
  997.     XSelectInput(dpy[0], pframe[0], FRAME_MASK) ;
  998.   
  999.     if (dtype == XTWO)
  1000. ***************
  1001. *** 848,853 ****
  1002. --- 899,905 ----
  1003.       {
  1004.         XSelectInput(dpy[1], frame[1], FRAME_MASK) ;
  1005.         XMapWindow(dpy[1], frame[1]) ;
  1006. +       XSelectInput(dpy[1], hframe[1], FRAME_MASK) ;
  1007.         XSelectInput(dpy[1], pframe[1], FRAME_MASK) ;
  1008.       }
  1009.   
  1010.  
  1011. ------- xview.c -------
  1012. *** /tmp/da06720    Tue Dec 18 10:04:16 1990
  1013. --- xview.c    Sun Dec 16 11:57:06 1990
  1014. ***************
  1015. *** 38,43 ****
  1016. --- 38,44 ----
  1017.   #include <xview/cms.h>
  1018.   #include <xview/cursor.h>
  1019.   #include <xview/svrimage.h>
  1020. + #include <xview/textsw.h>
  1021.   #include <xview/xv_xrect.h>
  1022.   #include <X11/Xlib.h>
  1023.   #include <X11/Xresource.h>
  1024. ***************
  1025. *** 46,52 ****
  1026.   
  1027.   enum gr_type gtype = GXVIEW ;          /* Graphics type. */
  1028.   
  1029. ! enum popup_pos {P_BELOW, P_RIGHT } ;   /* Positions relative to main frame. */
  1030.   
  1031.   #define  CLIENT_NO          10
  1032.   #define  DEPTH_MENU_ENTRY   9
  1033. --- 47,53 ----
  1034.   
  1035.   enum gr_type gtype = GXVIEW ;          /* Graphics type. */
  1036.   
  1037. ! enum popup_pos { P_BELOW, P_RIGHT } ;  /* Positions relative to main frame. */
  1038.   
  1039.   #define  CLIENT_NO          10
  1040.   #define  DEPTH_MENU_ENTRY   9
  1041. ***************
  1042. *** 59,64 ****
  1043. --- 60,66 ----
  1044.   
  1045.   #define  BOLDFONT           "lucidasanstypewriter-bold-12"
  1046.   #define  DEFFONT            "fixed"
  1047. + #define  HELPFONT           "lucidasanstypewriter-12"
  1048.   #define  NORMALFONT         "lucidasanstypewriter-12"
  1049.   
  1050.   Canvas canvas ;
  1051. ***************
  1052. *** 71,76 ****
  1053. --- 73,81 ----
  1054.   
  1055.   Notify_client client = (Notify_client) CLIENT_NO ;
  1056.   
  1057. + Frame  h_frame ;                /* Help window frame. */
  1058. + Textsw h_textsw ;               /* Text sub-window for help file. */
  1059.   Frame ls_frame ;                /* Frame for load/save pop-up window. */
  1060.   Panel ls_panel ;                /* Panel for load/save operations. */
  1061.   Panel_item ls_button ;          /* Button to start load/save operation. */
  1062. ***************
  1063. *** 111,117 ****
  1064.   unsigned long backgnd ;         /* Default background color. */
  1065.   unsigned long foregnd ;         /* Default foreground color. */
  1066.   unsigned long gc_mask ;         /* Mask for setting graphic context values. */
  1067. ! unsigned long palette[OTH_COLORSIZE] ;     /* Xlib color palette. */
  1068.   
  1069.   int opvals[3] ;         /* Pixrect rasterop values. */
  1070.   int pid ;               /* Process id of the reve_proc process. */
  1071. --- 116,122 ----
  1072.   unsigned long backgnd ;         /* Default background color. */
  1073.   unsigned long foregnd ;         /* Default foreground color. */
  1074.   unsigned long gc_mask ;         /* Mask for setting graphic context values. */
  1075. ! unsigned long palette[REVE_COLORSIZE] ;     /* Xlib color palette. */
  1076.   
  1077.   int opvals[3] ;         /* Pixrect rasterop values. */
  1078.   int pid ;               /* Process id of the reve_proc process. */
  1079. ***************
  1080. *** 121,128 ****
  1081.   
  1082.   Notify_value read_from_reve(), sigchldcatcher() ;
  1083.   void destroy_frame() ;
  1084. ! static void menu_proc(),    set_depth(),   set_player() ;
  1085. ! static void xv_load_game(), xv_new_game(), xv_save_game(), xv_set_props() ;
  1086.   
  1087.   
  1088.   void
  1089. --- 126,134 ----
  1090.   
  1091.   Notify_value read_from_reve(), sigchldcatcher() ;
  1092.   void destroy_frame() ;
  1093. ! static void menu_proc(),    set_depth(),    set_player() ;
  1094. ! static void xv_do_help(),   xv_load_game(), xv_new_game() ;
  1095. ! static void xv_save_game(), xv_set_props() ;
  1096.   
  1097.   
  1098.   void
  1099. ***************
  1100. *** 158,170 ****
  1101.   }
  1102.   
  1103.   
  1104. - void
  1105. - close_frame()        /* Iconise reve window. */
  1106. - {
  1107. -   XV_SET(frame, FRAME_CLOSED, TRUE, 0) ;
  1108. - }
  1109.   /*ARGSUSED*/
  1110.   void
  1111.   color_area(wtype, x, y, width, height, color)
  1112. --- 164,169 ----
  1113. ***************
  1114. *** 427,435 ****
  1115. --- 426,437 ----
  1116.   init_fonts()         /* Open the normal and bold fonts. */
  1117.   {
  1118.     font[(int) BFONT] = get_font(BOLDFONT) ;
  1119. +   font[(int) HFONT] = get_font(HELPFONT) ;
  1120.     font[(int) NFONT] = get_font(NORMALFONT) ;
  1121.     bfont_height = font[(int) BFONT]->max_bounds.ascent +
  1122.                    font[(int) BFONT]->max_bounds.descent ;
  1123. +   hfont_height = font[(int) HFONT]->max_bounds.ascent +
  1124. +                  font[(int) HFONT]->max_bounds.descent ;
  1125.     nfont_height = font[(int) NFONT]->max_bounds.ascent +
  1126.                    font[(int) NFONT]->max_bounds.descent ;
  1127.   }
  1128. ***************
  1129. *** 460,482 ****
  1130.   load_colors()      /* Create and load reve color map. */
  1131.   {
  1132.     XColor ccol ;
  1133. -   u_char red[OTH_COLORSIZE], green[OTH_COLORSIZE], blue[OTH_COLORSIZE] ;
  1134.     int i, numcolors ;
  1135.   
  1136.     if (iscolor[(int) cur_dpyno])
  1137.       {
  1138. -       oth_colorsetup(red, green, blue) ;
  1139.         numcolors = 0 ;
  1140. !       for (i = 0; i < OTH_COLORSIZE; i++)
  1141.           {
  1142. !           ccol.flags = DoRed | DoGreen | DoBlue ;
  1143. !           ccol.red = (unsigned short) (red[i] << 8) ;
  1144. !           ccol.green = (unsigned short) (green[i] << 8) ;
  1145. !           ccol.blue = (unsigned short) (blue[i] << 8) ;
  1146.             if (XAllocColor(dpy, DefaultColormap(dpy, screen), &ccol) == True)
  1147.               palette[numcolors++] = ccol.pixel ;
  1148.           }
  1149. !       if (numcolors < 2)
  1150.           {
  1151.             FPRINTF(stderr, "%s: cannot allocate colors.\n", progname) ;
  1152.             exit(1) ;
  1153. --- 462,487 ----
  1154.   load_colors()      /* Create and load reve color map. */
  1155.   {
  1156.     XColor ccol ;
  1157.     int i, numcolors ;
  1158.   
  1159.     if (iscolor[(int) cur_dpyno])
  1160.       {
  1161.         numcolors = 0 ;
  1162. !       for (i = 0; i < REVE_COLORSIZE; i++)
  1163.           {
  1164. !           if (colstr[i] == NULL ||
  1165. !               (XParseColor(dpy, DefaultColormap(dpy, screen),
  1166. !                            colstr[i], &ccol) == 0)) 
  1167. !             {
  1168. !               ccol.flags = DoRed | DoGreen | DoBlue ;
  1169. !               ccol.red   = (unsigned short) (rcols[i] << 8) ;
  1170. !               ccol.green = (unsigned short) (gcols[i] << 8) ;
  1171. !               ccol.blue  = (unsigned short) (bcols[i] << 8) ;
  1172. !             }
  1173.             if (XAllocColor(dpy, DefaultColormap(dpy, screen), &ccol) == True)
  1174.               palette[numcolors++] = ccol.pixel ;
  1175.           }
  1176. !       if (numcolors < REVE_COLORSIZE)
  1177.           {
  1178.             FPRINTF(stderr, "%s: cannot allocate colors.\n", progname) ;
  1179.             exit(1) ;
  1180. ***************
  1181. *** 498,503 ****
  1182. --- 503,510 ----
  1183.    *
  1184.    *  XENVIRONMENT environment variable or, if not set, .Xdefaults-hostname
  1185.    *  file.
  1186. +  *
  1187. +  *  REVEDEFAULTS environment variable or, if not set, the ~/.reverc file.
  1188.    */
  1189.    
  1190.   void
  1191. ***************
  1192. *** 541,546 ****
  1193. --- 548,565 ----
  1194.       }
  1195.     else db = XrmGetFileDatabase(ptr) ;
  1196.     XrmMergeDatabases(db, &reve_DB[d]) ;
  1197. + /*  Finally merge in Reve defaults via REVEDEFAULTS or, if not defined, the
  1198. +  *  ~/.reverc file.
  1199. +  */
  1200. +   
  1201. +   if ((ptr = getenv("REVEDEFAULTS")) == NULL)
  1202. +     {
  1203. +       SPRINTF(name, "%s/.reverc", home) ;
  1204. +       db = XrmGetFileDatabase(name) ;
  1205. +     }
  1206. +   else db = XrmGetFileDatabase(ptr) ;
  1207. +   XrmMergeDatabases(db, &reve_DB[d]) ;
  1208.   }
  1209.   
  1210.   
  1211. ***************
  1212. *** 652,659 ****
  1213.     XV_CREATE(panel,              PANEL_BUTTON,
  1214.               PANEL_ITEM_X,       xv_col(panel, 0),
  1215.               PANEL_ITEM_Y,       xv_row(panel, 0),
  1216. !             PANEL_LABEL_STRING, "Load Game...",
  1217. !             PANEL_NOTIFY_PROC,  xv_load_game,
  1218.               0) ;
  1219.   
  1220.     XV_CREATE(panel,              PANEL_BUTTON,
  1221. --- 671,678 ----
  1222.     XV_CREATE(panel,              PANEL_BUTTON,
  1223.               PANEL_ITEM_X,       xv_col(panel, 0),
  1224.               PANEL_ITEM_Y,       xv_row(panel, 0),
  1225. !             PANEL_NOTIFY_PROC,  xv_new_game,
  1226. !             PANEL_LABEL_STRING, " New Game ",
  1227.               0) ;
  1228.   
  1229.     XV_CREATE(panel,              PANEL_BUTTON,
  1230. ***************
  1231. *** 666,687 ****
  1232.     XV_CREATE(panel,              PANEL_BUTTON,
  1233.               PANEL_ITEM_X,       xv_col(panel, 30),
  1234.               PANEL_ITEM_Y,       xv_row(panel, 0),
  1235. !             PANEL_NOTIFY_PROC,  xv_new_game,
  1236. !             PANEL_LABEL_STRING, " New Game ",
  1237.               0) ;
  1238.   
  1239.     XV_CREATE(panel,              PANEL_BUTTON,
  1240.               PANEL_ITEM_X,       xv_col(panel, 45),
  1241.               PANEL_ITEM_Y,       xv_row(panel, 0),
  1242. !             PANEL_LABEL_STRING, "   Props...   ",
  1243. !             PANEL_NOTIFY_PROC,  xv_set_props,
  1244.               0) ;
  1245.   
  1246.     XV_CREATE(panel,              PANEL_BUTTON,
  1247.               PANEL_ITEM_X,       xv_col(panel, 0),
  1248.               PANEL_ITEM_Y,       xv_row(panel, 1),
  1249. !             PANEL_LABEL_STRING, "Save Game...",
  1250. !             PANEL_NOTIFY_PROC,  xv_save_game,
  1251.               0) ;
  1252.   
  1253.     XV_CREATE(panel,              PANEL_BUTTON,
  1254. --- 685,706 ----
  1255.     XV_CREATE(panel,              PANEL_BUTTON,
  1256.               PANEL_ITEM_X,       xv_col(panel, 30),
  1257.               PANEL_ITEM_Y,       xv_row(panel, 0),
  1258. !             PANEL_LABEL_STRING, "     Redo     ",
  1259. !             PANEL_NOTIFY_PROC,  redo,
  1260.               0) ;
  1261.   
  1262.     XV_CREATE(panel,              PANEL_BUTTON,
  1263.               PANEL_ITEM_X,       xv_col(panel, 45),
  1264.               PANEL_ITEM_Y,       xv_row(panel, 0),
  1265. !             PANEL_LABEL_STRING, "   Help...    ",
  1266. !             PANEL_NOTIFY_PROC,  xv_do_help,
  1267.               0) ;
  1268.   
  1269.     XV_CREATE(panel,              PANEL_BUTTON,
  1270.               PANEL_ITEM_X,       xv_col(panel, 0),
  1271.               PANEL_ITEM_Y,       xv_row(panel, 1),
  1272. !             PANEL_LABEL_STRING, "Load Game...",
  1273. !             PANEL_NOTIFY_PROC,  xv_load_game,
  1274.               0) ;
  1275.   
  1276.     XV_CREATE(panel,              PANEL_BUTTON,
  1277. ***************
  1278. *** 689,695 ****
  1279.               PANEL_ITEM_Y,       xv_row(panel, 1),
  1280.               PANEL_LABEL_STRING, "   Suggest   ",
  1281.               PANEL_NOTIFY_PROC,  suggest,
  1282. !             0) ;        
  1283.   
  1284.     XV_CREATE(panel,              PANEL_BUTTON,
  1285.               PANEL_ITEM_X,       xv_col(panel, 30),
  1286. --- 708,714 ----
  1287.               PANEL_ITEM_Y,       xv_row(panel, 1),
  1288.               PANEL_LABEL_STRING, "   Suggest   ",
  1289.               PANEL_NOTIFY_PROC,  suggest,
  1290. !             0) ;
  1291.   
  1292.     XV_CREATE(panel,              PANEL_BUTTON,
  1293.               PANEL_ITEM_X,       xv_col(panel, 30),
  1294. ***************
  1295. *** 696,706 ****
  1296.               PANEL_ITEM_Y,       xv_row(panel, 1),
  1297.               PANEL_LABEL_STRING, "     Undo     ",
  1298.               PANEL_NOTIFY_PROC,  undo,
  1299. !             0) ;        
  1300.   
  1301.     XV_CREATE(panel,              PANEL_BUTTON,
  1302.               PANEL_ITEM_X,       xv_col(panel, 45),
  1303.               PANEL_ITEM_Y,       xv_row(panel, 1),
  1304.               PANEL_LABEL_STRING, "     Quit     ",
  1305.               PANEL_NOTIFY_PROC,  destroy_frame,
  1306.               0) ;
  1307. --- 715,739 ----
  1308.               PANEL_ITEM_Y,       xv_row(panel, 1),
  1309.               PANEL_LABEL_STRING, "     Undo     ",
  1310.               PANEL_NOTIFY_PROC,  undo,
  1311. !             0) ;
  1312.   
  1313.     XV_CREATE(panel,              PANEL_BUTTON,
  1314.               PANEL_ITEM_X,       xv_col(panel, 45),
  1315.               PANEL_ITEM_Y,       xv_row(panel, 1),
  1316. +             PANEL_LABEL_STRING, "   Props...   ",
  1317. +             PANEL_NOTIFY_PROC,  xv_set_props,
  1318. +             0) ;
  1319. +   XV_CREATE(panel,              PANEL_BUTTON,
  1320. +             PANEL_ITEM_X,       xv_col(panel, 0),
  1321. +             PANEL_ITEM_Y,       xv_row(panel, 2),
  1322. +             PANEL_LABEL_STRING, "Save Game...",
  1323. +             PANEL_NOTIFY_PROC,  xv_save_game,
  1324. +             0) ;
  1325. +   XV_CREATE(panel,              PANEL_BUTTON,
  1326. +             PANEL_ITEM_X,       xv_col(panel, 45),
  1327. +             PANEL_ITEM_Y,       xv_row(panel, 2),
  1328.               PANEL_LABEL_STRING, "     Quit     ",
  1329.               PANEL_NOTIFY_PROC,  destroy_frame,
  1330.               0) ;
  1331. ***************
  1332. *** 707,713 ****
  1333.   
  1334.     XV_CREATE(panel, PANEL_MESSAGE,
  1335.               PANEL_ITEM_X,       xv_col(panel, 0),
  1336. !             PANEL_ITEM_Y,       xv_row(panel, 2),
  1337.               PANEL_LABEL_BOLD,   TRUE,
  1338.               PANEL_LABEL_STRING, "Black:",
  1339.               0) ;
  1340. --- 740,746 ----
  1341.   
  1342.     XV_CREATE(panel, PANEL_MESSAGE,
  1343.               PANEL_ITEM_X,       xv_col(panel, 0),
  1344. !             PANEL_ITEM_Y,       xv_row(panel, 3),
  1345.               PANEL_LABEL_BOLD,   TRUE,
  1346.               PANEL_LABEL_STRING, "Black:",
  1347.               0) ;
  1348. ***************
  1349. *** 714,720 ****
  1350.     val = items[(int) BLACK_PLAYS].value ;
  1351.     black_item = xv_create(panel,                      PANEL_MESSAGE,
  1352.                            PANEL_ITEM_X,               xv_col(panel, 7),
  1353. !                          PANEL_ITEM_Y,               xv_row(panel, 2),
  1354.                            PANEL_LABEL_BOLD,           FALSE,
  1355.                            PANEL_LABEL_STRING,         player_values[val],
  1356.                            0) ;
  1357. --- 747,753 ----
  1358.     val = items[(int) BLACK_PLAYS].value ;
  1359.     black_item = xv_create(panel,                      PANEL_MESSAGE,
  1360.                            PANEL_ITEM_X,               xv_col(panel, 7),
  1361. !                          PANEL_ITEM_Y,               xv_row(panel, 3),
  1362.                            PANEL_LABEL_BOLD,           FALSE,
  1363.                            PANEL_LABEL_STRING,         player_values[val],
  1364.                            0) ;
  1365. ***************
  1366. *** 721,727 ****
  1367.   
  1368.     XV_CREATE(panel, PANEL_MESSAGE,
  1369.               PANEL_ITEM_X,       xv_col(panel, 30),
  1370. !             PANEL_ITEM_Y,       xv_row(panel, 2),
  1371.               PANEL_LABEL_BOLD,   TRUE,
  1372.               PANEL_LABEL_STRING, "White:",
  1373.               0) ;
  1374. --- 754,760 ----
  1375.   
  1376.     XV_CREATE(panel, PANEL_MESSAGE,
  1377.               PANEL_ITEM_X,       xv_col(panel, 30),
  1378. !             PANEL_ITEM_Y,       xv_row(panel, 3),
  1379.               PANEL_LABEL_BOLD,   TRUE,
  1380.               PANEL_LABEL_STRING, "White:",
  1381.               0) ;
  1382. ***************
  1383. *** 728,734 ****
  1384.     val = items[(int) WHITE_PLAYS].value ;
  1385.     white_item = xv_create(panel,                      PANEL_MESSAGE,
  1386.                            PANEL_ITEM_X,               xv_col(panel, 37),
  1387. !                          PANEL_ITEM_Y,               xv_row(panel, 2),
  1388.                            PANEL_LABEL_BOLD,           FALSE,
  1389.                            PANEL_LABEL_STRING,         player_values[val],
  1390.                            0) ;
  1391. --- 761,767 ----
  1392.     val = items[(int) WHITE_PLAYS].value ;
  1393.     white_item = xv_create(panel,                      PANEL_MESSAGE,
  1394.                            PANEL_ITEM_X,               xv_col(panel, 37),
  1395. !                          PANEL_ITEM_Y,               xv_row(panel, 3),
  1396.                            PANEL_LABEL_BOLD,           FALSE,
  1397.                            PANEL_LABEL_STRING,         player_values[val],
  1398.                            0) ;
  1399. ***************
  1400. *** 735,759 ****
  1401.   
  1402.     mes_items[(int) (PANEL_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
  1403.                          PANEL_ITEM_X,       xv_col(panel, 0),
  1404. !                        PANEL_ITEM_Y,       xv_row(panel, 3),
  1405.                          PANEL_LABEL_STRING, "",
  1406.                          0) ;
  1407.   
  1408.     mes_items[(int) (EVAL_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
  1409.                          PANEL_ITEM_X,       xv_col(panel, 0),
  1410. !                        PANEL_ITEM_Y,       xv_row(panel, 4),
  1411.                          PANEL_LABEL_STRING, "",
  1412.                          0) ;
  1413.   
  1414.     mes_items[(int) (SCORE_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
  1415.                          PANEL_ITEM_X,       xv_col(panel, 0),
  1416. !                        PANEL_ITEM_Y,       xv_row(panel, 5),
  1417.                          PANEL_LABEL_STRING, "",
  1418.                          0) ;
  1419.   
  1420.     mes_items[(int) (TURN_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
  1421.                          PANEL_ITEM_X,       xv_col(panel, 30),
  1422. !                        PANEL_ITEM_Y,       xv_row(panel, 5),
  1423.                          PANEL_LABEL_STRING, "Black to move",
  1424.                          0) ;
  1425.     window_fit(panel) ;
  1426. --- 768,792 ----
  1427.   
  1428.     mes_items[(int) (PANEL_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
  1429.                          PANEL_ITEM_X,       xv_col(panel, 0),
  1430. !                        PANEL_ITEM_Y,       xv_row(panel, 4),
  1431.                          PANEL_LABEL_STRING, "",
  1432.                          0) ;
  1433.   
  1434.     mes_items[(int) (EVAL_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
  1435.                          PANEL_ITEM_X,       xv_col(panel, 0),
  1436. !                        PANEL_ITEM_Y,       xv_row(panel, 5),
  1437.                          PANEL_LABEL_STRING, "",
  1438.                          0) ;
  1439.   
  1440.     mes_items[(int) (SCORE_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
  1441.                          PANEL_ITEM_X,       xv_col(panel, 0),
  1442. !                        PANEL_ITEM_Y,       xv_row(panel, 6),
  1443.                          PANEL_LABEL_STRING, "",
  1444.                          0) ;
  1445.   
  1446.     mes_items[(int) (TURN_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
  1447.                          PANEL_ITEM_X,       xv_col(panel, 30),
  1448. !                        PANEL_ITEM_Y,       xv_row(panel, 6),
  1449.                          PANEL_LABEL_STRING, "Black to move",
  1450.                          0) ;
  1451.     window_fit(panel) ;
  1452. ***************
  1453. *** 905,911 ****
  1454. --- 938,977 ----
  1455.   }
  1456.   
  1457.   
  1458. + /*ARGSUSED*/
  1459.   void
  1460. + make_help_window(argc, argv)
  1461. + int argc ;
  1462. + char *argv[] ;
  1463. + {
  1464. +   h_frame = (Frame) xv_create(frame,                    FRAME_CMD,
  1465. +                               FRAME_ICON,               reve_icon,
  1466. +                               FRAME_LABEL,              "Reve Help",
  1467. +                               FRAME_CMD_PUSHPIN_IN,     TRUE,
  1468. +                               FRAME_NO_CONFIRM,         TRUE,
  1469. +                               XV_X,                     0,
  1470. +                               XV_Y,                     0,
  1471. +                               XV_WIDTH,                 500,
  1472. +                               XV_HEIGHT,                700,
  1473. +                               XV_SHOW,                  help_showing,
  1474. +                               FRAME_SHOW_RESIZE_CORNER, FALSE,
  1475. +                               0) ;
  1476. +   h_textsw = (Textsw) xv_create(h_frame,                 TEXTSW,
  1477. +                                 XV_X,                    0,
  1478. +                                 XV_Y,                    0,
  1479. +                                 XV_WIDTH,                500,
  1480. +                                 XV_HEIGHT,               700,
  1481. +                                 TEXTSW_FILE_CONTENTS,    helpfile,
  1482. +                                 TEXTSW_READ_ONLY,        TRUE,
  1483. +                                 TEXTSW_FIRST,            0,
  1484. +                                 TEXTSW_BROWSING,         TRUE,
  1485. +                                 0) ;
  1486. +   window_fit(h_textsw) ;
  1487. +   window_fit(h_frame) ;
  1488. + }
  1489. + void
  1490.   make_icon()
  1491.   {
  1492.   
  1493. ***************
  1494. *** 973,985 ****
  1495.   
  1496.   
  1497.   void
  1498. ! open_frame(wtype)                    /* **DUMMY ROUTINE** */
  1499. ! enum win_type wtype ;
  1500.   {
  1501.   }
  1502.   
  1503.   
  1504.   void
  1505.   paint_prop_sheet()            /* **DUMMY ROUTINE** */
  1506.   {
  1507.   }
  1508. --- 1039,1056 ----
  1509.   
  1510.   
  1511.   void
  1512. ! paint_help()                  /* **DUMMY ROUTINE** */
  1513.   {
  1514.   }
  1515.   
  1516.   
  1517.   void
  1518. + paint_help_text()             /* **DUMMY ROUTINE** */
  1519. + {
  1520. + }
  1521. + void
  1522.   paint_prop_sheet()            /* **DUMMY ROUTINE** */
  1523.   {
  1524.   }
  1525. ***************
  1526. *** 1160,1165 ****
  1527. --- 1231,1245 ----
  1528.   
  1529.   /*ARGSUSED*/
  1530.   void
  1531. + set_frame(wtype, showing)                       /* **DUMMY ROUTINE** */
  1532. + enum win_type wtype ;
  1533. + int showing ;
  1534. + {
  1535. + }
  1536. + /*ARGSUSED*/
  1537. + void
  1538.   set_cycle(wtype, mtype, str)                    /* **DUMMY ROUTINE** */
  1539.   enum win_type wtype ;
  1540.   enum panel_type mtype ;
  1541. ***************
  1542. *** 1326,1331 ****
  1543. --- 1406,1423 ----
  1544.     reve_player = player ;
  1545.     processing  = TRUE ;
  1546.     WRITE(pipe_io[0][1], (char *) &in, sizeof(struct reve_in)) ;
  1547. + }
  1548. + /*ARGSUSED*/
  1549. + static void
  1550. + xv_do_help(item, value, event)    /* Callback for online help window. */
  1551. + Panel_item item ;
  1552. + int value ;
  1553. + Event *event ;
  1554. + {
  1555. +   position_popup(frame, h_frame, P_RIGHT) ;
  1556. +   XV_SET(h_frame, XV_SHOW, TRUE, 0) ;
  1557.   }
  1558.   
  1559.   
  1560.  
  1561.