+/*
+ Bacula® - The Network Backup Solution
+
+ Copyright (C) 2004-2008 Free Software Foundation Europe e.V.
+
+ The main author of Bacula is Kern Sibbald, with contributions from
+ many others, a complete list can be found in the file AUTHORS.
+ This program is Free Software; you can redistribute it and/or
+ modify it under the terms of version two of the GNU General Public
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ Bacula® is a registered trademark of John Walker.
+ The licensor of Bacula is the Free Software Foundation Europe
+ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+ Switzerland, email:ftf@fsfeurope.org.
+*/
/*
*
* wxbDataParser, class that receives and analyses data
*
* Version $Id$
*/
-/*
- Copyright (C) 2004 Kern Sibbald and John Walker
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
+/* Windows debug builds set _DEBUG which is used by wxWidgets to select their
+ * debug memory allocator. Unfortunately it conflicts with Bacula's SmartAlloc.
+ * So we turn _DEBUG off since we aren't interested in things it enables.
+ */
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+#undef _DEBUG
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
+#include "bacula.h"
#include "wxbutils.h"
-
#include "wxbmainframe.h"
-
#include "csprint.h"
-
#include "wxbtableparser.h"
/* A macro named Yield is defined under MinGW */
bool wxbUtils::inited = false;
+wxString wxbUtils::ConvertToPrintable(wxString& str) {
+ /* FIXME : Unicode support should be added to fix this problem */
+#if (wxUSE_UNICODE == 0) && __WXGTK20__
+ wxString strnew(str);
+ /* Convert the string to something printable without unicode */
+ for (unsigned int i = 0; i < strnew.Length(); i++) {
+ /* If the character is not ASCII, print a ? */
+ if (((unsigned char)strnew[i] > (unsigned char)127)) {
+ strnew[i] = '?';
+ }
+ }
+ return strnew;
+#else
+ return str;
+#endif
+}
+
+/* Sleeps during milliseconds (wrapper for wxUsleep (2.4) or wxMilliSleep (2.6)) */
+void wxbUtils::MilliSleep(unsigned long milliseconds) {
+#if wxCHECK_VERSION(2, 6, 0)
+ ::wxMilliSleep(milliseconds);
+#else
+ ::wxUsleep(milliseconds);
+#endif
+}
+
/* Initialization */
void wxbUtils::Init() {
inited = true;
while (!tableParser->hasFinished()) {
//innerThread->Yield();
wxTheApp->Yield(true);
- ::wxUsleep(100);
+ wxbUtils::MilliSleep(100);
//if (base+15 < wxDateTime::Now().GetTicks()) break;
}
return tableParser;
while (!promptParser->hasFinished()) {
//innerThread->Yield();
wxTheApp->Yield(true);
- ::wxUsleep(100);
+ wxbUtils::MilliSleep(100);
//if (base+15 < wxDateTime::Now().GetTicks()) break;
}
while (!datatokenizer->hasFinished()) {
//innerThread->Yield();
wxTheApp->Yield(true);
- ::wxUsleep(100);
+ wxbUtils::MilliSleep(100);
//if (base+15 < wxDateTime::Now().GetTicks()) break;
}
}
if (allnewline) {
- ret = Analyse(buffer << "\n", CS_DATA);
- buffer = "";
+ ret = Analyse(buffer << wxT("\n"), CS_DATA);
+ buffer = wxT("");
for (unsigned int i = 1; i < str.Length(); i++) {
- ret = Analyse("\n", status);
+ ret = Analyse(wxT("\n"), status);
}
}
else {
- wxStringTokenizer tkz(str, "\n",
+ wxStringTokenizer tkz(str, wxT("\n"),
(wxStringTokenizerMode)(wxTOKEN_RET_DELIMS | wxTOKEN_RET_EMPTY | wxTOKEN_RET_EMPTY_ALL));
while ( tkz.HasMoreTokens() ) {
if ((buffer.GetChar(buffer.Length()-1) == '\n') ||
(buffer.GetChar(buffer.Length()-1) == '\r')) {
ret = Analyse(buffer, status);
- buffer = "";
+ buffer = wxT("");
}
}
}
}
- if (buffer == "$ ") { // Restore console
+ if (buffer == wxT("$ ")) { // Restore console
ret = Analyse(buffer, status);
- buffer = "";
+ buffer = wxT("");
}
if (status != CS_DATA) {
if (buffer.Length() != 0) {
ret = Analyse(buffer, CS_DATA);
}
- buffer = "";
- ret = Analyse("", status);
+ buffer = wxT("");
+ ret = Analyse(wxT(""), status);
}
}
else {
bool wxbDataTokenizer::Analyse(wxString str, int status) {
finished = ((status == CS_END) || (status == CS_PROMPT) || (status == CS_DISCONNECTED));
- if (str != "") {
+ if (str != wxT("")) {
Add(str);
}
return false;
wxbPromptParser::wxbPromptParser(): wxbDataParser(false) {
finished = false;
prompt = false;
- introStr = "";
+ introStr = wxT("");
choices = NULL;
numerical = false;
- questionStr = "";
+ questionStr = wxT("");
}
/* Destroy a wxbDataTokenizer */
choices = NULL;
numerical = false;
}
- questionStr = "";
- introStr = "";
+ questionStr = wxT("");
+ introStr = wxT("");
}
int i;
long num;
- if (((i = str.Find(": ")) > 0) && (str.Mid(0, i).Trim(false).ToLong(&num))) { /* List element */
+ if (((i = str.Find(wxT(": "))) > 0) && (str.Mid(0, i).Trim(false).ToLong(&num))) { /* List element */
if (!choices) {
choices = new wxArrayString();
- choices->Add(""); /* index 0 is never used by multiple choice questions */
+ choices->Add(wxT("")); /* index 0 is never used by multiple choice questions */
numerical = true;
}
if ((long)choices->GetCount() != num) { /* new choice has begun */
delete choices;
choices = new wxArrayString();
- choices->Add("", num); /* fill until this number */
+ choices->Add(wxT(""), num); /* fill until this number */
numerical = true;
}
}
else {
finished = ((status == CS_PROMPT) || (status == CS_END) || (status == CS_DISCONNECTED));
- if (prompt = ((status == CS_PROMPT) && (questionStr != "$ "))) { // && (str.Find(": ") == str.Length())
+ if (prompt = ((status == CS_PROMPT) && (questionStr != wxT("$ ")))) { // && (str.Find(": ") == str.Length())
if (introStr.Last() == '\n') {
introStr.RemoveLast();
}
- if ((introStr != "") && (questionStr == "")) {
+ if ((introStr != wxT("")) && (questionStr == wxT(""))) {
questionStr = introStr;
- introStr = "";
+ introStr = wxT("");
}
- if ((!choices) && (questionStr.Find("(yes/mod/no)") > -1)) {
+ if ((!choices) && (questionStr.Find(wxT("(yes/mod/no)")) > -1)) {
choices = new wxArrayString();
- choices->Add("yes");
- choices->Add("mod");
- choices->Add("no");
+ choices->Add(wxT("yes"));
+ choices->Add(wxT("mod"));
+ choices->Add(wxT("no"));
numerical = false;
}
-
return true;
}
else { /* ended or (dis)connected */
choices = NULL;
numerical = false;
}
- questionStr = "";
- introStr = "";
+ questionStr = wxT("");
+ introStr = wxT("");
}
}
return false;