forked from pngwen/xboing
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mess.c
246 lines (220 loc) · 7.39 KB
/
mess.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/**
* @file mess.c
* @author Justin C. Kibell ([email protected])
* @brief Manages the message system for xboing
* @version 1.1.1.1
* @date 16 Dec 1994
*
* @copyright Copyright (c) 1993, 1994, 1995, Justin C. Kibell, All Rights Reserved
* @copyright (see COPYRIGHT file for full text)
*
* mess.h/mess.c manage the message system for xboing. Deals with setting up the message system.
* The files also display messages and free message memory
*
*/
/*
* XBoing - An X11 blockout style computer game
*
* (c) Copyright 1993, 1994, 1995, Justin C. Kibell, All Rights Reserved
*
* The X Consortium, and any party obtaining a copy of these files from
* the X Consortium, directly or indirectly, is granted, free of charge, a
* full and unrestricted irrevocable, world-wide, paid up, royalty-free,
* nonexclusive right and license to deal in this software and
* documentation files (the "Software"), including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons who receive
* copies from any such party to do so. This license includes without
* limitation a license to do the foregoing actions under any patents of
* the party supplying this software to the X Consortium.
*
* In no event shall the author be liable to any party for direct, indirect,
* special, incidental, or consequential damages arising out of the use of
* this software and its documentation, even if the author has been advised
* of the possibility of such damage.
*
* The author specifically disclaims any warranties, including, but not limited
* to, the implied warranties of merchantability and fitness for a particular
* purpose. The software provided hereunder is on an "AS IS" basis, and the
* author has no obligation to provide maintenance, support, updates,
* enhancements, or modifications.
*/
/*
* =========================================================================
*
* $Id: mess.c,v 1.1.1.1 1994/12/16 01:36:49 jck Exp $
* $Source: /usr5/legends/jck/xb/master/xboing/mess.c,v $
* $Revision: 1.1.1.1 $
* $Date: 1994/12/16 01:36:49 $
*
* $Log: mess.c,v $
* Revision 1.1.1.1 1994/12/16 01:36:49 jck
* The XBoing distribution requires configuration management. This is why the
* cvs utility is being used. This is the initial import of all source etc..
*
*
* =========================================================================
*/
/*
* Include file dependencies:
*/
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
//#include <X11/Xlib.h>
//#include <X11/Xutil.h>
//#include <X11/Xos.h>
#include "error.h"
#include "level.h"
#include "init.h"
#include "stage.h"
#include "intro.h"
#include "main.h"
#include "misc.h"
#include "mess.h"
/*
* Internal macro definitions:
*/
#define CLEAR_DELAY 2000
#define FADE_DELAY 20
/*
* Internal type declarations:
*/
/*
* Internal variable declarations:
*/
char currentMessage[1024];
int clearFrame;
int newMessageStart;
/**
* @brief Initializes the message system.
*
* @param Display *display Pointer to the X11 display struct
* @todo Update to remove X11 dependency
* @param Window window This is the X Identifier for the window that will display the messages.
* @todo Update to use window management from a new graphics system
* @param Colormap colormap This is the colormap for the window.
*
* @todo Implement new graphics system management
* @todo Check if the message system can handle multiple windows if needed.
* @todo Add initialization checks.
*
* @post This function sets up and prepares the message system.
*/
void InitialiseMessageSystem(Display *display, Window window, Colormap colormap)
{
/* Frame to clear message area */
clearFrame = 0;
}
/**
* @brief Frees memory used by the message system.
*
* @param Display *display Pointer to the X11 display struct
* @todo Update to remove X11 dependency
* * @todo Add some resource management for future message enhancements
* @todo Add checks to make sure that only allocated memory is being freed.
*
* @post This function cleans and releases all memory that was allocated for the message system.
*
*/
void FreeMessageSystem(Display *display)
{
/* Not much to free yet - maybe one day .... */
}
/**
* @brief Draws the message to the screen
*
* @param Display *display X11 display
* @param Window window X11 window ID
* @param char *message message that will be drawn
* @param int clear checks if the display is clear
*
* @todo remove reliance on x11
* @todo use booleans instead of 0 or 1
*
*/
void DrawMessage(Display *display, Window window, char *message, int clear,
int ci)
{
int len = strlen(message);
int plen;
/* Clear the message window */
XClearWindow(display, window);
/* Obtain the text width so it can be centered */
plen = XTextWidth(textFont, message, len);
/* Draw the string in the message window */
DrawTextFast(display, window, ((PLAY_WIDTH/2) - plen) / 2, 5,
textFont, ci, message, len);
/* Just to be sure, flush the display */
XFlush(display);
}
/**
* @brief Sets a new message to be displayed.
*
* @param Display *display Pointer to the X11 display struct
* @todo Update to remove X11 dependency
* @param Window window This is the X Identifier for the window that will display the messages.
* @todo Update to use window management from a new graphics system
* @param *newMessage The new message to be displayed.
* @param clear If true, the display will be cleared before displaying the new message.
* @todo Change the type of the clear parameter from int to boolean.
*
* @todo Make sure the new message is not NULL or empty before use.
* @todo Add some sort of strategy to handle messages that are larger than the buffer size allows.
*
* @post This function copies the new message into the buffer and updates the display based on the parameters defined.
*
*/
void SetCurrentMessage(Display *display, Window window, char *newMessage,
int clear)
{
/* Draw out new message */
strcpy(currentMessage, newMessage);
newMessageStart = True;
if (clear)
clearFrame = frame + CLEAR_DELAY;
else
clearFrame = frame - 1;
DisplayCurrentMessage(display, window);
}
/**
* @brief Displays the current message.
*
* @param Display *display Points to the X11 display struct.
* @todo Update to remove X11 dependency
* @param Window window This is the X Identifier for the window that will display the messages.
* @todo Update to use window management from a new graphics system
*
* @todo Implement new graphics system
* @todo Add checks to ensure the message is displayed as expected.
*
* @post This function takes the current message stored to the screen to be displayed.
*
*/
void DisplayCurrentMessage(Display *display, Window window)
{
char str[80];
char str2[80];
if (newMessageStart == True)
{
newMessageStart = False;
DrawMessage(display, window, currentMessage, True, green);
}
/* Clear the frame when it's time */
if (frame == clearFrame)
{
/* Effectively erases message */
if (mode == MODE_GAME || mode == MODE_EDIT)
strcpy(str2, GetLevelName());
if (str2[0] != '\0')
{
/* Set the message to the name of the level */
sprintf(str, "- %s -", str2);
SetCurrentMessage(display, window, str, False);
}
else
DrawMessage(display, window, "", False, green);
/* To be sure to be sure */
XFlush(display);
}
}