diff options
Diffstat (limited to 'games/xevil/files/patch-x11__ui.cpp')
-rw-r--r-- | games/xevil/files/patch-x11__ui.cpp | 377 |
1 files changed, 377 insertions, 0 deletions
diff --git a/games/xevil/files/patch-x11__ui.cpp b/games/xevil/files/patch-x11__ui.cpp new file mode 100644 index 000000000000..ab83dec24000 --- /dev/null +++ b/games/xevil/files/patch-x11__ui.cpp @@ -0,0 +1,377 @@ +--- x11/ui.cpp.orig 2012-05-27 06:52:29.000000000 +0900 ++++ x11/ui.cpp 2012-05-27 06:52:59.000000000 +0900 +@@ -30,6 +30,7 @@ + #include "utils.h" + extern "C" { + #include <string.h> ++#include <stdlib.h> + #include <X11/Xutil.h> + #ifdef OPENWOUND_XOS_STRLEN_HACK + #define _strings_h +@@ -40,8 +41,8 @@ + #include <X11/Xatom.h> + } + +-#include <iostream.h> +-#include <strstream.h> ++#include <iostream> ++#include <sstream> + + #include "coord.h" + #include "area.h" +@@ -59,6 +60,7 @@ + #include "panel.h" + #include "viewport.h" + ++using namespace std; + + // Defines + #define DEFAULT_BIG_FONT_NAME "-*-helvetica-*-r-*-*-18-*-*-*-*-*-*-*" +@@ -226,20 +228,6 @@ + for (int d = 0; d < xvars.dpyMax; d++) { + xvars.alloc_named_color(d,"steelblue"); + } +- +- // Run the license agreement. +- // Note: The license agreement will not be run if the user runs +- // "xevil -server -no_ui". +- // Must be after init_x(). +- Boolean reduceDraw = Viewport::get_reduce_draw(); +- Boolean accepted = +- LAgreement::check_accepted(largeViewport,smoothScroll,reduceDraw, +- xvars,0,argc,argv); +- Viewport::set_reduce_draw(reduceDraw); +- if (!accepted) { +- // Should probably let game.cpp call exit. +- exit(1); +- } + + // Ick, this should be in init_x(), but we need to call init_x() before + // running the License Agreement to get this information. +@@ -461,21 +449,27 @@ + } + } + +- if (down) { +- // Restart game if space pressed. +- // This doesn't always work, the otherInput flag might get cleared +- // before it is used. +- if (keycode == XKeysymToKeycode(xvars.dpy[dpyNum],XK_space)) { +- otherInput = True; ++ // If function keys are assigned to movement, weapon or item functions, ++ // then this code will not get executed. ++ if (down && !found) { ++ // Pause Game ++ if (keycode == XKeysymToKeycode(xvars.dpy[dpyNum],XK_F1)) { ++ settingsChanges |= UIpause; ++ settings.pause = True; + } +- +- if (!found) { +- // Undocumented pause key feature. +- // Don't do pause if XK_F1 is used for something else. +- if (keycode == XKeysymToKeycode(xvars.dpy[dpyNum],XK_F1)) { +- settingsChanges |= UIpause; +- settings.pause = True; +- } ++ // New Game ++ if (keycode == XKeysymToKeycode(xvars.dpy[dpyNum],XK_F2)) { ++ settingsChanges |= UInewGame; ++ } ++ // Change game style ++ if (keycode == XKeysymToKeycode(xvars.dpy[dpyNum],XK_F3)) { ++ settingsChanges |= UIstyle; ++ settings.style = (settings.style + 1) % NUM_GAME_STYLES; ++ ++ // Avoid the LEVELS_ONLY option. There was no button before ++ // I got here. Avoiding the ability to set it until I ++ // discover why ++ settings.style += (settings.style == LEVELS_ONLY) ? 1 : 0; + } + } + } +@@ -865,7 +859,7 @@ + char *msg; + if (msg = locator->message_deq()) { + set_message(msg); +- delete msg; ++ delete [] msg; + messageTimer.set(MESSAGE_TIME); + } + } +@@ -930,7 +924,7 @@ + UiP ui = (UiP)closure; + ui->settingsChanges |= UIenemiesRefill; + // SGI compiler says you can't cast void* to Boolean. +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + ui->settings.enemiesRefill = val; + } + +@@ -939,7 +933,7 @@ + void Ui::menu_controls_CB(void* value,Viewport* vPort,void* closure) { + UiP ui = (UiP)closure; + int dpyNum = vPort->get_dpy_num(); +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + if (val) { + XMapWindow(ui->xvars.dpy[dpyNum],ui->xdata.controls[dpyNum]); + } +@@ -955,13 +949,13 @@ + Viewport* vPort,void* closure) { + UiP ui = (UiP)closure; + int dpyNum = vPort->get_dpy_num(); +- Boolean active = (Boolean)(int)value; ++ Boolean active = (Boolean)(long)value; + + if (active) { + ui->lControls[dpyNum].input = ui->lControls[dpyNum].key = + ui->lControls[dpyNum].which = 0; + +- ostrstream str; ++ stringstream str; + str << "There are 2 sets of controls for the players on the right and" + << "\n" + << "left sides of the keyboard, respectively." << "\n" +@@ -979,10 +973,9 @@ + << " player enter the " + << (ui->lControls[dpyNum].which ? "second" : "first") + << " key for <" << ui->keysNames[ui->lControls[dpyNum].key] +- << ">." << ends; ++ << ">."; + +- ui->learnControls[dpyNum]->set_message(str.str()); +- delete str.str(); ++ ui->learnControls[dpyNum]->set_message(str.str().c_str()); + XMapWindow(ui->xvars.dpy[dpyNum],ui->xdata.learnControls[dpyNum]); + } + else { +@@ -994,7 +987,7 @@ + + void Ui::menu_scenarios_CB(void* value,Viewport*,void* closure) { + UiP ui = (UiP)closure; +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + if (val) { + ui->settingsChanges |= UIstyle; + ui->settings.style = SCENARIOS; +@@ -1005,7 +998,7 @@ + + void Ui::menu_levels_CB(void* value,Viewport*,void* closure) { + UiP ui = (UiP)closure; +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + if (val) { + ui->settingsChanges |= UIstyle; + ui->settings.style = LEVELS; +@@ -1016,7 +1009,7 @@ + + void Ui::menu_kill_CB(void* value,Viewport*,void* closure) { + UiP ui = (UiP)closure; +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + if (val) { + ui->settingsChanges |= UIstyle; + ui->settings.style = KILL; +@@ -1027,7 +1020,7 @@ + + void Ui::menu_duel_CB(void* value,Viewport*,void* closure) { + UiP ui = (UiP)closure; +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + if (val) { + ui->settingsChanges |= UIstyle; + ui->settings.style = DUEL; +@@ -1038,7 +1031,7 @@ + + void Ui::menu_extended_CB(void* value,Viewport*,void* closure) { + UiP ui = (UiP)closure; +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + if (val) { + ui->settingsChanges |= UIstyle; + ui->settings.style = EXTENDED; +@@ -1049,7 +1042,7 @@ + + void Ui::menu_training_CB(void* value,Viewport*,void* closure) { + UiP ui = (UiP)closure; +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + if (val) { + ui->settingsChanges |= UIstyle; + ui->settings.style = TRAINING; +@@ -1070,7 +1063,7 @@ + void Ui::menu_cooperative_CB(void* value,Viewport*,void* closure) { + UiP ui = (UiP)closure; + ui->settingsChanges |= UIcooperative; +- Boolean val = (Boolean)(int)value; ++ Boolean val = (Boolean)(long)value; + ui->settings.cooperative = val; + } + +@@ -1079,7 +1072,7 @@ + void Ui::menu_help_CB(void* value,Viewport* vPort,void* closure) { + UiP ui = (UiP)closure; + int dpyNum = vPort->get_dpy_num(); +- Boolean active = (Boolean)(int)value; ++ Boolean active = (Boolean)(long)value; + + if (active) { + XMapWindow(ui->xvars.dpy[dpyNum],ui->xdata.help[dpyNum]); +@@ -1094,7 +1087,7 @@ + void Ui::status_weapon_CB(void* value,Viewport* vPort,void*) { + // Some mouse controls. + // UiP ui = (UiP)closure; +- int button = (int)value; ++ long button = (long)value; + + switch (button) { + case Button1: +@@ -1113,7 +1106,7 @@ + + void Ui::status_item_CB(void* value,Viewport* vPort,void*) { + // UiP ui = (UiP)closure; +- int button = (int)value; ++ long button = (long)value; + + switch (button) { + case Button1: +@@ -1167,14 +1160,14 @@ + return; + } + +- ostrstream str; ++ stringstream str; + str << (ui->lControls[dpyNum].input ? "Left" : "Right") + << " player: The " + << (ui->lControls[dpyNum].which ? "second" : "first") << " key for <" + << ui->keysNames[ui->lControls[dpyNum].key] << "> is " + << XKeysymToString(XKeycodeToKeysym(ui->xvars.dpy[dpyNum], + event->xkey.keycode,0)) +- << "." << "\n" << "\n"; ++ << ".\n\n"; + ui->keycodes[dpyNum][ui->lControls[dpyNum].input] + [ui->lControls[dpyNum].key][ui->lControls[dpyNum].which] = + event->xkey.keycode; +@@ -1222,21 +1215,18 @@ + << " player enter the " + << (ui->lControls[dpyNum].which ? "second" : "first") + << " key for <" << keysNames[ui->lControls[dpyNum].key] +- << ">." << ends; ++ << ">."; + + // Add message in front of str.str(). +- ostrstream fullStr; ++ stringstream fullStr; + if (ui->lControls[dpyNum].input == UI_KEYS_LEFT) { + fullStr << "You may dismiss this dialog now if you only want to" << "\n" +- << "set the controls for one player." +- << "\n" << "\n"; ++ << "set the controls for one player.\n\n"; + } +- fullStr << str.str() << ends; +- delete str.str(); ++ fullStr << str.str(); + + +- ui->learnControls[dpyNum]->set_message(fullStr.str()); +- delete fullStr.str(); ++ ui->learnControls[dpyNum]->set_message(fullStr.str().c_str()); + + ui->controls_redraw(dpyNum); + } +@@ -1537,7 +1527,7 @@ + Line::set_text_columns(HELP_COLS); + Page page(NULL,helpMessage); + const PtrList& lines = page.get_lines(); +- ostrstream message; ++ stringstream message; + for (int n = 0; n < lines.length(); n++) { + Line* line = (Line*)lines.get(n); + char* text = line->alloc_text(); +@@ -1545,7 +1535,6 @@ + message << text << '\n'; + delete [] text; + } +- message << ends; + + + for (int dpyNum = 0; dpyNum < xvars.dpyMax; dpyNum++) { +@@ -1564,10 +1553,8 @@ + new TextPanel(dpyNum,xvars,xdata.help[dpyNum],pos,size); + assert(help[dpyNum]); + +- help[dpyNum]->set_message(message.str()); ++ help[dpyNum]->set_message(message.str().c_str()); + } // dpyNum +- +- delete message.str(); + } + + +@@ -1621,7 +1608,7 @@ + // Loop through all keys. + for (int n = 0; n < UI_KEYS_MAX; n++) { + // String for right side. +- strstream str0; ++ stringstream str0; + str0 << keysNames[n] << ": " << XKeysymToString(keymaps[0][n][0][0]); + if (keymaps[0][n][0][1] && strlen(XKeysymToString(keymaps[0][n][0][1]))) + str0 << ", " << XKeysymToString(keymaps[0][n][0][1]); +@@ -1631,10 +1618,9 @@ + && strlen(XKeysymToString(keymaps[0][n][1][1]))) + str0 << ", " << XKeysymToString(keymaps[0][n][1][1]); + } +- str0 << ends; + + // String for left side. +- strstream str1; ++ stringstream str1; + str1 << keysNames[n] << ": " << XKeysymToString(keymaps[1][n][0][0]); + if (keymaps[1][n][0][1] && strlen(XKeysymToString(keymaps[1][n][0][1]))) { + str1 << ", " << XKeysymToString(keymaps[1][n][0][1]); +@@ -1645,7 +1631,6 @@ + && strlen(XKeysymToString(keymaps[1][n][1][1]))) + str1 << ", " << XKeysymToString(keymaps[1][n][1][1]); + } +- str1 << ends; + + // Draw key on left side. + if (n != IT_CHAT) { // Chat meaningless for left player. +@@ -1653,16 +1638,14 @@ + xvars.fontSize[dpyNum].width, + xvars.font[dpyNum]->max_bounds.ascent + + p * xvars.fontSize[dpyNum].height, +- str1.str(),strlen(str1.str())); ++ str1.str().c_str(),str1.str().length()); + } + // Draw on right side. + XDrawString(xvars.dpy[dpyNum],xdata.controls[dpyNum],xvars.gc[dpyNum], + xvars.fontSize[dpyNum].width * (CONTROLS_COLS / 2 + 1), + xvars.font[dpyNum]->max_bounds.ascent + + (p++) * xvars.fontSize[dpyNum].height, +- str0.str(),strlen(str0.str())); +- delete str0.str(); +- delete str1.str(); ++ str0.str().c_str(),str0.str().length()); + } + p++; + +@@ -1693,7 +1676,7 @@ + + + +-char *Ui::keysNames[UI_KEYS_MAX] = { ++const char *Ui::keysNames[UI_KEYS_MAX] = { + "center", + "right", + "down_right", +@@ -1752,7 +1735,7 @@ + + + +-char* Ui::helpMessage = ++const char* Ui::helpMessage = + "For full instructions, including NETWORK PLAY, see " + "http://www.xevil.com/docs/instructions.html\n" + "\n" |