aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMatthew Hoops2011-02-12 18:30:26 -0500
committerMatthew Hoops2011-02-12 18:30:26 -0500
commit15b3bffb7ff8f0ee8091e62cddb1682f2bf8d2d2 (patch)
tree67755fb1a08425d62f759302bd9db31753aa96df /engines
parent87e832809bd6e23fa71071fb4fd7a3a27f88f12e (diff)
downloadscummvm-rg350-15b3bffb7ff8f0ee8091e62cddb1682f2bf8d2d2.tar.gz
scummvm-rg350-15b3bffb7ff8f0ee8091e62cddb1682f2bf8d2d2.tar.bz2
scummvm-rg350-15b3bffb7ff8f0ee8091e62cddb1682f2bf8d2d2.zip
SCI: Fix the console's hexgrep command
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/console.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index 562b770afa..9510ed0afb 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -773,17 +773,16 @@ bool Console::cmdResourceTypes(int argc, const char **argv) {
bool Console::cmdHexgrep(int argc, const char **argv) {
if (argc < 4) {
- DebugPrintf("Searches some resources for a particular sequence of bytes, represented as hexadecimal numbers.\n");
+ DebugPrintf("Searches some resources for a particular sequence of bytes, represented as decimal or hexadecimal numbers.\n");
DebugPrintf("Usage: %s <resource type> <resource number> <search string>\n", argv[0]);
DebugPrintf("<resource number> can be a specific resource number, or \"all\" for all of the resources of the specified type\n");
- DebugPrintf("EXAMPLES:\n hexgrep script all e8 03 c8 00\n hexgrep pic 042 fe");
+ DebugPrintf("EXAMPLES:\n hexgrep script all 0xe8 0x03 0xc8 0x00\n hexgrep pic 0x42 0xfe\n");
cmdResourceTypes(argc, argv);
return true;
}
ResourceType restype = parseResourceType(argv[1]);
int resNumber = 0, resMax = 0;
- char seekString[500];
Resource *script = NULL;
if (restype == kResourceTypeInvalid) {
@@ -798,12 +797,13 @@ bool Console::cmdHexgrep(int argc, const char **argv) {
resNumber = resMax = atoi(argv[2]);
}
- strcpy(seekString, argv[3]);
+ // Convert the bytes
+ Common::Array<int> byteString;
+ byteString.resize(argc - 3);
- // Construct the seek string
- for (int i = 4; i < argc; i++) {
- strcat(seekString, argv[i]);
- }
+ for (uint i = 0; i < byteString.size(); i++)
+ if (!parseInteger(argv[i + 3], byteString[i]))
+ return true;
for (; resNumber <= resMax; resNumber++) {
script = _engine->getResMan()->findResource(ResourceId(restype, resNumber), 0);
@@ -813,13 +813,13 @@ bool Console::cmdHexgrep(int argc, const char **argv) {
int output_script_name = 0;
while (seeker < script->size) {
- if (script->data[seeker] == seekString[comppos]) {
+ if (script->data[seeker] == byteString[comppos]) {
if (comppos == 0)
seekerold = seeker;
comppos++;
- if (comppos == strlen(seekString)) {
+ if (comppos == byteString.size()) {
comppos = 0;
seeker = seekerold + 1;