|
|
1.1 root 1:
2: /* This file contains code for X-CHESS.
3: Copyright (C) 1986 Free Software Foundation, Inc.
4:
5: This file is part of X-CHESS.
6:
7: X-CHESS is distributed in the hope that it will be useful,
8: but WITHOUT ANY WARRANTY. No author or distributor
9: accepts responsibility to anyone for the consequences of using it
10: or for whether it serves any particular purpose or works at all,
11: unless he says so in writing. Refer to the X-CHESS General Public
12: License for full details.
13:
14: Everyone is granted permission to copy, modify and redistribute
15: X-CHESS, but only under the conditions described in the
16: X-CHESS General Public License. A copy of this license is
17: supposed to have been given to you along with X-CHESS so you
18: can know your rights and responsibilities. It should be in a
19: file named COPYING. Among other things, the copyright notice
20: and this notice must be preserved on all copies. */
21:
22:
23: /* RCS Info: $Revision: 1.2 $ on $Date: 86/11/26 12:10:38 $
24: * $Source: /users/faustus/xchess/RCS/popup.c,v $
25: * Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
26: * [email protected], ucbvax!faustus
27: * Permission is granted to modify and re-distribute this code in any manner
28: * as long as this notice is preserved. All standard disclaimers apply.
29: *
30: * A simple pop-up menu system.
31: */
32:
33: #include "xchess.h"
34:
35: /* Open a small window with some text in it and two buttons -- yes and no.
36: * Use black and white pixel, and the medium font.
37: */
38:
39: bool
40: pop_question(win, text)
41: windata *win;
42: char *text;
43: {
44: char *s, *t;
45: int nlines = 1, ncols = 0, i = 0, j;
46: int x, y;
47: Window w;
48: bool ch;
49: XEvent ev;
50:
51: for (s = text; *s; s++) {
52: if ((*s == '\n') && s[1])
53: nlines++;
54: if ((*s == '\n') || !s[1]) {
55: if (i > ncols)
56: ncols = i;
57: i = 0;
58: } else
59: i++;
60: }
61:
62: if (ncols < 12)
63: ncols = 12;
64: nlines += 4;
65: ncols += 4;
66:
67: x = (BASE_WIDTH - ncols * win->medium->max_bounds.width) / 2;
68: y = (BASE_HEIGHT - nlines * win->medium->max_bounds.ascent) / 2;
69:
70: w = XCreateSimpleWindow(win->display, win->basewin,
71: x, y, ncols * win->medium->max_bounds.width,
72: nlines * win->medium->ascent,
73: BORDER_WIDTH, win->border.pixel,
74: win->textback.pixel);
75: XMapRaised(win->display, w);
76: XSetFont(win->display, DefaultGC(win->display, 0),
77: win->medium->fid);
78:
79: for (i = 0, s = text; i < nlines - 4; i++) {
80: for (t = s, j = 0; *t && (*t != '\n'); t++, j++)
81: ;
82: XDrawString(win->display, w, DefaultGC(win->display, 0),
83: (ncols - j) / 2 * win->medium->max_bounds.width,
84: (i + 1) * win->medium->ascent,
85: s, j);
86: s = t + 1;
87: }
88: XDrawString(win->display, w, DefaultGC(win->display, 0),
89: (ncols - 8) * win->medium->max_bounds.width / 4,
90: (nlines - 2) * win->medium->ascent,
91: "YES", 3);
92: XDrawString(win->display, w, DefaultGC(win->display, 0),
93: (ncols - 4) * win->medium->max_bounds.width * 3 / 4,
94: (nlines - 2) * win->medium->ascent,
95: "NO", 2);
96:
97: XSync(win->display, 0);
98: XSelectInput(win->display, w, ButtonPressMask);
99: XWindowEvent(win->display, w, ButtonPressMask, &ev);
100: x = ev.xkey.x;
101: y = ev.xkey.y;
102:
103: if (x > ncols * win->medium->max_bounds.width / 2)
104: ch = false;
105: else
106: ch = true;
107:
108: XDestroyWindow(win->display, w);
109: XSync(win->display, 0);
110: return (ch);
111: }
112:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.