+// this function replaces Microsoft %1 with Unix-like %s
+static bool CanonicalizeParams(wxString& command)
+{
+ // transform it from '%1' to '%s' style format string (now also test for %L
+ // as apparently MS started using it as well for the same purpose)
+
+ // NB: we don't make any attempt to verify that the string is valid, i.e.
+ // doesn't contain %2, or second %1 or .... But we do make sure that we
+ // return a string with _exactly_ one '%s'!
+ bool foundFilename = false;
+ size_t len = command.length();
+ for ( size_t n = 0; (n < len) && !foundFilename; n++ )
+ {
+ if ( command[n] == wxT('%') &&
+ (n + 1 < len) &&
+ (command[n + 1] == wxT('1') || command[n + 1] == wxT('L')) )
+ {
+ // replace it with '%s'
+ command[n + 1] = wxT('s');
+
+ foundFilename = true;
+ }
+ }
+
+ if ( foundFilename )
+ {
+ // Some values also contain an addition %* expansion string which is
+ // presumably supposed to be replaced with the names of the other files
+ // accepted by the command. As we don't support more than one file
+ // anyhow, simply ignore it.
+ command.Replace(" %*", "");
+ }
+
+ return foundFilename;
+}
+