Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
magicseteditor
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
magicseteditor
Commits
2eff957f
Commit
2eff957f
authored
Aug 04, 2008
by
twanvl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
If possible all errors are sent to stderr
parent
9608d74b
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
75 additions
and
30 deletions
+75
-30
src/cli/cli_main.cpp
src/cli/cli_main.cpp
+3
-6
src/cli/cli_main.hpp
src/cli/cli_main.hpp
+0
-1
src/cli/text_io_handler.cpp
src/cli/text_io_handler.cpp
+49
-19
src/cli/text_io_handler.hpp
src/cli/text_io_handler.hpp
+6
-0
src/util/error.cpp
src/util/error.cpp
+14
-4
src/util/error.hpp
src/util/error.hpp
+3
-0
No files found.
src/cli/cli_main.cpp
View file @
2eff957f
...
@@ -69,6 +69,7 @@ void CLISetInterface::run() {
...
@@ -69,6 +69,7 @@ void CLISetInterface::run() {
running
=
true
;
running
=
true
;
while
(
running
)
{
while
(
running
)
{
if
(
!
cli
.
canGetLine
())
break
;
if
(
!
cli
.
canGetLine
())
break
;
handle_pending_errors
();
// show prompt
// show prompt
if
(
!
quiet
)
{
if
(
!
quiet
)
{
cli
<<
GRAY
<<
_
(
"> "
)
<<
NORMAL
;
cli
<<
GRAY
<<
_
(
"> "
)
<<
NORMAL
;
...
@@ -153,7 +154,7 @@ void CLISetInterface::handleCommand(const String& command) {
...
@@ -153,7 +154,7 @@ void CLISetInterface::handleCommand(const String& command) {
vector
<
ScriptParseError
>
errors
;
vector
<
ScriptParseError
>
errors
;
ScriptP
script
=
parse
(
command
,
nullptr
,
false
,
errors
);
ScriptP
script
=
parse
(
command
,
nullptr
,
false
,
errors
);
if
(
!
errors
.
empty
())
{
if
(
!
errors
.
empty
())
{
FOR_EACH
(
error
,
errors
)
showError
(
error
.
what
());
FOR_EACH
(
error
,
errors
)
cli
.
showError
(
error
.
what
());
return
;
return
;
}
}
// execute command
// execute command
...
@@ -164,10 +165,6 @@ void CLISetInterface::handleCommand(const String& command) {
...
@@ -164,10 +165,6 @@ void CLISetInterface::handleCommand(const String& command) {
cli
<<
result
->
toCode
()
<<
ENDL
;
cli
<<
result
->
toCode
()
<<
ENDL
;
}
}
}
catch
(
const
Error
&
e
)
{
}
catch
(
const
Error
&
e
)
{
showError
(
e
.
what
());
cli
.
showError
(
e
.
what
());
}
}
}
}
void
CLISetInterface
::
showError
(
const
String
&
error
)
{
cli
<<
RED
<<
_
(
"ERROR: "
)
<<
NORMAL
<<
replace_all
(
error
,
_
(
"
\n
"
),
_
(
"
\n
"
))
<<
ENDL
;
}
src/cli/cli_main.hpp
View file @
2eff957f
...
@@ -32,7 +32,6 @@ class CLISetInterface : public SetView {
...
@@ -32,7 +32,6 @@ class CLISetInterface : public SetView {
void
showWelcome
();
void
showWelcome
();
void
showUsage
();
void
showUsage
();
void
handleCommand
(
const
String
&
command
);
void
handleCommand
(
const
String
&
command
);
void
showError
(
const
String
&
error
);
/// our own context, when no set is loaded
/// our own context, when no set is loaded
Context
&
getContext
();
Context
&
getContext
();
...
...
src/cli/text_io_handler.cpp
View file @
2eff957f
...
@@ -8,6 +8,7 @@
...
@@ -8,6 +8,7 @@
#include <util/prec.hpp>
#include <util/prec.hpp>
#include <cli/text_io_handler.hpp>
#include <cli/text_io_handler.hpp>
#include <util/error.hpp>
// ----------------------------------------------------------------------------- : Text I/O handler
// ----------------------------------------------------------------------------- : Text I/O handler
...
@@ -17,22 +18,29 @@ const Char* PARAM = _("\x1B[33m");
...
@@ -17,22 +18,29 @@ const Char* PARAM = _("\x1B[33m");
const
Char
*
FILE_EXT
=
_
(
"
\x1B
[0;1m"
);
const
Char
*
FILE_EXT
=
_
(
"
\x1B
[0;1m"
);
const
Char
*
GRAY
=
_
(
"
\x1B
[1;30m"
);
const
Char
*
GRAY
=
_
(
"
\x1B
[1;30m"
);
const
Char
*
RED
=
_
(
"
\x1B
[1;31m"
);
const
Char
*
RED
=
_
(
"
\x1B
[1;31m"
);
const
Char
*
YELLOW
=
_
(
"
\x1B
[1;33m"
);
const
Char
*
ENDL
=
_
(
"
\n
"
);
const
Char
*
ENDL
=
_
(
"
\n
"
);
TextIOHandler
cli
;
TextIOHandler
cli
;
#ifdef __WXMSW__
bool
StdHandleOk
(
DWORD
std_handle
)
{
// GetStdHandle sometimes returns an invalid handle instead of INVALID_HANDLE_VALUE
// check with GetHandleInformation
HANDLE
h
=
GetStdHandle
(
std_handle
);
DWORD
flags
;
return
GetHandleInformation
(
h
,
&
flags
);
}
#endif
void
TextIOHandler
::
init
()
{
void
TextIOHandler
::
init
()
{
bool
have_stderr
;
#ifdef __WXMSW__
#ifdef __WXMSW__
have_console
=
false
;
have_console
=
false
;
escapes
=
false
;
escapes
=
false
;
// Detect whether to use console output
// Detect whether to use console output
// GetStdHandle sometimes returns an invalid handle instead of INVALID_HANDLE_VALUE
have_console
=
StdHandleOk
(
STD_OUTPUT_HANDLE
);
// check with GetHandleInformation
have_stderr
=
StdHandleOk
(
STD_ERROR_HANDLE
);
HANDLE
h
=
GetStdHandle
(
STD_OUTPUT_HANDLE
);
DWORD
flags
;
bool
ok
=
GetHandleInformation
(
h
,
&
flags
);
if
(
ok
)
have_console
=
true
;
// Detect the --color flag, indicating we should allow escapes
// Detect the --color flag, indicating we should allow escapes
if
(
have_console
)
{
if
(
have_console
)
{
for
(
int
i
=
1
;
i
<
wxTheApp
->
argc
;
++
i
)
{
for
(
int
i
=
1
;
i
<
wxTheApp
->
argc
;
++
i
)
{
...
@@ -45,8 +53,14 @@ void TextIOHandler::init() {
...
@@ -45,8 +53,14 @@ void TextIOHandler::init() {
#else
#else
// always use console on *nix (?)
// always use console on *nix (?)
have_console
=
true
;
have_console
=
true
;
escapes
=
true
;
have_stderr
=
true
;
escapes
=
true
;
// TODO: detect output redirection
#endif
#endif
stream
=
stdout
;
// always write to stderr if possible
if
(
have_console
)
{
write_errors_to_cli
=
true
;
}
}
}
bool
TextIOHandler
::
haveConsole
()
const
{
bool
TextIOHandler
::
haveConsole
()
const
{
...
@@ -56,20 +70,10 @@ bool TextIOHandler::haveConsole() const {
...
@@ -56,20 +70,10 @@ bool TextIOHandler::haveConsole() const {
// ----------------------------------------------------------------------------- : Output
// ----------------------------------------------------------------------------- : Output
void
TextIOHandler
::
flush
()
{
if
(
have_console
)
{
fflush
(
stdout
);
}
else
if
(
!
buffer
.
empty
())
{
// Show message box
wxMessageBox
(
buffer
,
_
(
"Magic Set Editor"
),
wxOK
|
wxICON_INFORMATION
);
buffer
.
clear
();
}
}
TextIOHandler
&
TextIOHandler
::
operator
<<
(
const
Char
*
str
)
{
TextIOHandler
&
TextIOHandler
::
operator
<<
(
const
Char
*
str
)
{
if
(
escapes
||
str
[
0
]
!=
27
)
{
if
(
escapes
||
str
[
0
]
!=
27
)
{
if
(
have_console
)
{
if
(
have_console
)
{
IF_UNICODE
(
wprintf
,
printf
)(
str
);
IF_UNICODE
(
fwprintf
,
fprintf
)(
stream
,
str
);
}
else
{
}
else
{
buffer
+=
str
;
buffer
+=
str
;
}
}
...
@@ -80,7 +84,7 @@ TextIOHandler& TextIOHandler::operator << (const Char* str) {
...
@@ -80,7 +84,7 @@ TextIOHandler& TextIOHandler::operator << (const Char* str) {
TextIOHandler
&
TextIOHandler
::
operator
<<
(
const
String
&
str
)
{
TextIOHandler
&
TextIOHandler
::
operator
<<
(
const
String
&
str
)
{
if
(
escapes
||
str
.
empty
()
||
str
.
GetChar
(
0
)
!=
27
)
{
if
(
escapes
||
str
.
empty
()
||
str
.
GetChar
(
0
)
!=
27
)
{
if
(
have_console
)
{
if
(
have_console
)
{
IF_UNICODE
(
wprintf
,
printf
)(
str
.
c_str
());
IF_UNICODE
(
fwprintf
,
fprintf
)(
stream
,
str
.
c_str
());
}
else
{
}
else
{
buffer
+=
str
;
buffer
+=
str
;
}
}
...
@@ -88,6 +92,16 @@ TextIOHandler& TextIOHandler::operator << (const String& str) {
...
@@ -88,6 +92,16 @@ TextIOHandler& TextIOHandler::operator << (const String& str) {
return
*
this
;
return
*
this
;
}
}
void
TextIOHandler
::
flush
()
{
if
(
have_console
)
{
fflush
(
stream
);
}
else
if
(
!
buffer
.
empty
())
{
// Show message box
wxMessageBox
(
buffer
,
_
(
"Magic Set Editor"
),
wxOK
|
wxICON_INFORMATION
);
buffer
.
clear
();
}
}
// ----------------------------------------------------------------------------- : Input
// ----------------------------------------------------------------------------- : Input
String
TextIOHandler
::
getLine
()
{
String
TextIOHandler
::
getLine
()
{
...
@@ -109,3 +123,19 @@ String TextIOHandler::getLine() {
...
@@ -109,3 +123,19 @@ String TextIOHandler::getLine() {
bool
TextIOHandler
::
canGetLine
()
{
bool
TextIOHandler
::
canGetLine
()
{
return
!
feof
(
stdin
);
return
!
feof
(
stdin
);
}
}
// ----------------------------------------------------------------------------- : Errors
void
TextIOHandler
::
showError
(
const
String
&
message
)
{
stream
=
stdout
;
*
this
<<
RED
<<
_
(
"ERROR: "
)
<<
NORMAL
<<
replace_all
(
message
,
_
(
"
\n
"
),
_
(
"
\n
"
))
<<
ENDL
;
flush
();
stream
=
stdout
;
}
void
TextIOHandler
::
showWarning
(
const
String
&
message
)
{
stream
=
stdout
;
*
this
<<
YELLOW
<<
_
(
"WARNING: "
)
<<
NORMAL
<<
replace_all
(
message
,
_
(
"
\n
"
),
_
(
"
\n
"
))
<<
ENDL
;
flush
();
stream
=
stdout
;
}
src/cli/text_io_handler.hpp
View file @
2eff957f
...
@@ -36,9 +36,15 @@ class TextIOHandler {
...
@@ -36,9 +36,15 @@ class TextIOHandler {
/// Flush output
/// Flush output
void
flush
();
void
flush
();
/// Show an error message
void
showError
(
const
String
&
message
);
/// Show a warning message
void
showWarning
(
const
String
&
message
);
private:
private:
bool
have_console
;
bool
have_console
;
bool
escapes
;
bool
escapes
;
FILE
*
stream
;
String
buffer
;
///< Buffer when not writing to console
String
buffer
;
///< Buffer when not writing to console
};
};
...
...
src/util/error.cpp
View file @
2eff957f
...
@@ -8,6 +8,7 @@
...
@@ -8,6 +8,7 @@
#include <util/prec.hpp>
#include <util/prec.hpp>
#include <util/error.hpp>
#include <util/error.hpp>
#include <cli/text_io_handler.hpp>
DECLARE_TYPEOF_COLLECTION
(
ScriptParseError
);
DECLARE_TYPEOF_COLLECTION
(
ScriptParseError
);
...
@@ -62,6 +63,7 @@ String pending_errors;
...
@@ -62,6 +63,7 @@ String pending_errors;
String
pending_warnings
;
String
pending_warnings
;
DECLARE_TYPEOF_COLLECTION
(
String
);
DECLARE_TYPEOF_COLLECTION
(
String
);
wxMutex
crit_error_handling
;
wxMutex
crit_error_handling
;
bool
write_errors_to_cli
=
false
;
void
show_pending_errors
();
void
show_pending_errors
();
void
show_pending_warnings
();
void
show_pending_warnings
();
...
@@ -82,7 +84,7 @@ void handle_error(const String& e, bool allow_duplicate = true, bool now = true)
...
@@ -82,7 +84,7 @@ void handle_error(const String& e, bool allow_duplicate = true, bool now = true)
pending_errors
+=
e
;
pending_errors
+=
e
;
}
}
// show messages
// show messages
if
(
now
&&
wxThread
::
IsMain
())
{
if
(
(
write_errors_to_cli
||
now
)
&&
wxThread
::
IsMain
())
{
show_pending_warnings
();
// warnings are older, show them first
show_pending_warnings
();
// warnings are older, show them first
show_pending_errors
();
show_pending_errors
();
}
}
...
@@ -106,7 +108,7 @@ void handle_warning(const String& w, bool now) {
...
@@ -106,7 +108,7 @@ void handle_warning(const String& w, bool now) {
pending_warnings
+=
w
;
pending_warnings
+=
w
;
}
}
// show messages
// show messages
if
(
now
&&
wxThread
::
IsMain
())
{
if
(
(
write_errors_to_cli
||
now
)
&&
wxThread
::
IsMain
())
{
show_pending_errors
();
show_pending_errors
();
show_pending_warnings
();
show_pending_warnings
();
}
}
...
@@ -122,7 +124,11 @@ void show_pending_errors() {
...
@@ -122,7 +124,11 @@ void show_pending_errors() {
if
(
crit_error_handling
.
TryLock
()
!=
wxMUTEX_NO_ERROR
)
if
(
crit_error_handling
.
TryLock
()
!=
wxMUTEX_NO_ERROR
)
return
;
return
;
if
(
!
pending_errors
.
empty
())
{
if
(
!
pending_errors
.
empty
())
{
wxMessageBox
(
pending_errors
,
_
(
"Error"
),
wxOK
|
wxICON_ERROR
);
if
(
write_errors_to_cli
)
{
cli
.
showError
(
pending_errors
);
}
else
{
wxMessageBox
(
pending_errors
,
_
(
"Error"
),
wxOK
|
wxICON_ERROR
);
}
pending_errors
.
clear
();
pending_errors
.
clear
();
}
}
crit_error_handling
.
Unlock
();
crit_error_handling
.
Unlock
();
...
@@ -132,7 +138,11 @@ void show_pending_warnings() {
...
@@ -132,7 +138,11 @@ void show_pending_warnings() {
if
(
crit_error_handling
.
TryLock
()
!=
wxMUTEX_NO_ERROR
)
if
(
crit_error_handling
.
TryLock
()
!=
wxMUTEX_NO_ERROR
)
return
;
return
;
if
(
!
pending_warnings
.
empty
())
{
if
(
!
pending_warnings
.
empty
())
{
wxMessageBox
(
pending_warnings
,
_
(
"Warning"
),
wxOK
|
wxICON_EXCLAMATION
);
if
(
write_errors_to_cli
)
{
cli
.
showWarning
(
pending_warnings
);
}
else
{
wxMessageBox
(
pending_warnings
,
_
(
"Warning"
),
wxOK
|
wxICON_EXCLAMATION
);
}
pending_warnings
.
clear
();
pending_warnings
.
clear
();
}
}
crit_error_handling
.
Unlock
();
crit_error_handling
.
Unlock
();
...
...
src/util/error.hpp
View file @
2eff957f
...
@@ -110,6 +110,9 @@ class ScriptError : public Error {
...
@@ -110,6 +110,9 @@ class ScriptError : public Error {
// ----------------------------------------------------------------------------- : Error handling
// ----------------------------------------------------------------------------- : Error handling
/// Should errors be written to stdout?
extern
bool
write_errors_to_cli
;
/// Handle an error by showing a message box
/// Handle an error by showing a message box
/** If !allow_duplicate and the error is the same as the previous error, does nothing.
/** If !allow_duplicate and the error is the same as the previous error, does nothing.
* If !now the error is handled by a later call to handle_pending_errors()
* If !now the error is handled by a later call to handle_pending_errors()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment