summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2009-03-02 08:55:03 +0000
committerOliver Bolte <obo@openoffice.org>2009-03-02 08:55:03 +0000
commitc91e28d3a1706252487ec405c2ede51e08b0b88e (patch)
treee06ff47626db8905936e6b4c1dd108186d8c8184 /shell
parentd65154669a3b1988f614e08b481871b013d416ba (diff)
CWS-TOOLING: integrate CWS os2port05
2009-02-05 19:23:48 +0100 ydario r267438 : i98084: add quotes to paths, required to properly set libpath when installation directory has spaces in it. Fixes ticket:135. 2009-01-22 13:24:00 +0100 ydario r266715 : i98084: use native code to set readonly-hidden flags (see w32), fixes lock files set as readonly and not removable. 2009-01-22 13:22:45 +0100 ydario r266714 : i98084: fix build error with gcc432, requires os2 headers now. 2009-01-21 23:42:58 +0100 ydario r266707 : i98084: properly generates rtti names for unknown symbols, see ticket:138. 2009-01-21 23:41:27 +0100 ydario r266706 : i98084: if xmlsec is not built, certificate is not valid, fixes ticket:138. 2009-01-15 23:39:09 +0100 ydario r266396 : i98084: convert unicode to char for panic dialog messages. 2009-01-15 23:36:13 +0100 ydario r266395 : i98084: use dmake build system instead of configure scripts. 2009-01-15 23:32:05 +0100 ydario r266394 : i98084: add senddoc/open-url integration. changeset 865-866.
Diffstat (limited to 'shell')
-rw-r--r--shell/prj/build.lst1
-rw-r--r--shell/source/unix/exec/shellexec.cxx6
-rw-r--r--shell/source/unix/misc/makefile.mk18
-rw-r--r--shell/source/unix/misc/open-url.c180
-rw-r--r--shell/source/unix/misc/open-url.def1
-rw-r--r--shell/source/unix/misc/senddoc.c212
-rw-r--r--shell/source/unix/misc/senddoc.def1
7 files changed, 418 insertions, 1 deletions
diff --git a/shell/prj/build.lst b/shell/prj/build.lst
index 510071ccc8..9758834dc8 100644
--- a/shell/prj/build.lst
+++ b/shell/prj/build.lst
@@ -5,6 +5,7 @@ sl shell\source\win32\simplemail nmake - w sl_win32_simp
sl shell\source\unix\exec nmake - u sl_unix sl_inc NULL
sl shell\source\unix\exec nmake - p sl_unix sl_inc NULL
sl shell\source\unix\misc nmake - u sl_unix_misc sl_inc NULL
+sl shell\source\unix\misc nmake - p sl_unix_misc sl_inc NULL
sl shell\source\cmdmail nmake - u sl_cmdmail sl_inc NULL
sl shell\source\cmdmail nmake - p sl_cmdmail sl_inc NULL
sl shell\source\all nmake - all sl_all sl_inc NULL
diff --git a/shell/source/unix/exec/shellexec.cxx b/shell/source/unix/exec/shellexec.cxx
index 8623020b3e..c838229cfd 100644
--- a/shell/source/unix/exec/shellexec.cxx
+++ b/shell/source/unix/exec/shellexec.cxx
@@ -97,7 +97,11 @@ void escapeForShell( rtl::OStringBuffer & rBuffer, const rtl::OString & rURL)
{
// escape every non alpha numeric characters (excluding a few "known good") by prepending a '\'
sal_Char c = rURL[n];
- if( ( c < 'A' || c > 'Z' ) && ( c < 'a' || c > 'z' ) && ( c < '0' || c > '9' ) && c != '/' && c != '.' )
+ if( ( c < 'A' || c > 'Z' ) && ( c < 'a' || c > 'z' ) && ( c < '0' || c > '9' )
+#ifdef OS2 // YD we don't need to escape ':', '-', '\\', '_'
+ && c != ':' && c != '-' && c != '\\' && c != '_'
+#endif
+ && c != '/' && c != '.' )
rBuffer.append( '\\' );
rBuffer.append( c );
diff --git a/shell/source/unix/misc/makefile.mk b/shell/source/unix/misc/makefile.mk
index d54e359406..ba2ed56b83 100644
--- a/shell/source/unix/misc/makefile.mk
+++ b/shell/source/unix/misc/makefile.mk
@@ -51,6 +51,23 @@ SCRIPTFILES = \
$(BIN)$/gnome-open-url \
$(BIN)$/kde-open-url
+.IF "$(GUI)" == "OS2"
+
+APP1TARGET = open-url
+APP1OBJS = \
+ $(OBJ)$/open-url.obj \
+ open-url.def
+APP1LIBS =
+
+APP2TARGET = senddoc
+APP2OBJS = \
+ $(OBJ)$/senddoc.obj \
+ senddoc.def
+APP2LIBS =
+APP2STDLIBS =
+
+.ELSE
+
APP1TARGET = gnome-open-url.bin
APP1OBJS = \
$(OBJ)$/gnome-open-url.obj
@@ -65,6 +82,7 @@ APP2LIBS =
APP2STDLIBS =
OBJFILES = $(APP1OBJS) $(APP2OBJS)
+.ENDIF
# --- Targets ------------------------------------------------------
diff --git a/shell/source/unix/misc/open-url.c b/shell/source/unix/misc/open-url.c
new file mode 100644
index 0000000000..c6c5a9c2c7
--- /dev/null
+++ b/shell/source/unix/misc/open-url.c
@@ -0,0 +1,180 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile:$
+ *
+ * $Revision:$
+ *
+ * last change: $Author:$
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <process.h>
+#include <time.h>
+
+#define INCL_DOS
+#define INCL_DOSERRORS
+#define INCL_PM
+#include <os2.h>
+
+// OOo uses popen() to start us, so we cannot show PM dialogs.
+// log message to disk.
+void logMessage( char* msg)
+{
+ PPIB pib;
+ CHAR szApplicationName[_MAX_PATH];
+ CHAR szDrive[_MAX_PATH];
+ CHAR szDir[_MAX_PATH];
+ CHAR szFileName[_MAX_PATH];
+ CHAR szExt[_MAX_PATH];
+ FILE* log;
+ time_t timeOfDay;
+ struct tm* localTime;
+
+ // get executable fullpath
+ DosGetInfoBlocks(NULL, &pib);
+ DosQueryModuleName(pib->pib_hmte, sizeof(szApplicationName), szApplicationName);
+ _splitpath( szApplicationName, szDrive, szDir, szFileName, szExt );
+ // log name
+ _makepath( szApplicationName, szDrive, szDir, szFileName, (".LOG") );
+ log = fopen( szApplicationName, "a");
+ if (!log)
+ return;
+ time( &timeOfDay);
+ localTime = localtime( &timeOfDay);
+ fprintf( log, "%04d/%02d/%02d %02d:%02d:%02d %s\n",
+ localTime->tm_year+1900, localTime->tm_mon+1, localTime->tm_mday,
+ localTime->tm_hour, localTime->tm_min, localTime->tm_sec, msg);
+ fclose( log);
+}
+
+// dump comand line arguments
+void dumpArgs( int argc, char *argv[] )
+{
+ int i;
+
+ logMessage( "Start of command line arguments dump:");
+ for( i=0; i<argc; i++)
+ logMessage( argv[i]);
+}
+
+/*
+ * The intended use of this tool is to pass the argument to
+ * the default URL exe.
+ */
+int main(int argc, char *argv[] )
+{
+ APIRET rc;
+ RESULTCODES result = {0};
+ char szAppFromINI[_MAX_PATH];
+ char szDirFromINI[_MAX_PATH];
+ char szCmdLine[1024];
+ char szFail[ _MAX_PATH];
+ ULONG ulSID;
+ PID pid;
+
+ // check parameters
+ if (argc != 2)
+ {
+ logMessage( "Usage: open-url <url>");
+ dumpArgs( argc, argv);
+ return -1;
+ }
+
+ // check configuration
+ rc = PrfQueryProfileString(HINI_USER, "WPURLDEFAULTSETTINGS",
+ "DefaultBrowserExe", "",
+ szAppFromINI, sizeof(szAppFromINI));
+ rc = PrfQueryProfileString(HINI_USER, "WPURLDEFAULTSETTINGS",
+ "DefaultWorkingDir", "",
+ szDirFromINI, sizeof(szDirFromINI));
+ if (*szAppFromINI == 0 || *szDirFromINI == 0)
+ {
+ logMessage( "Unable to find default url handler in USER.INI; exiting.");
+ dumpArgs( argc, argv);
+ return -1;
+ }
+
+ // get default parameter list
+ rc = PrfQueryProfileString(HINI_USER, "WPURLDEFAULTSETTINGS",
+ "DefaultParameters", "",
+ szCmdLine, sizeof(szCmdLine));
+ strcat( szCmdLine, " ");
+ strcat( szCmdLine, argv[1]);
+
+ // change default directory
+ _chdir( szDirFromINI);
+
+ // start default handler
+ STARTDATA SData;
+ CHAR szObjBuf[CCHMAXPATH];
+
+ SData.Length = sizeof(STARTDATA);
+ SData.Related = SSF_RELATED_INDEPENDENT;
+ SData.FgBg = (1) ? SSF_FGBG_FORE : SSF_FGBG_BACK;
+ SData.TraceOpt = SSF_TRACEOPT_NONE;
+
+ SData.PgmTitle = (PSZ)szAppFromINI;
+
+ SData.PgmName = (PSZ)szAppFromINI;
+ SData.PgmInputs = (PSZ)szCmdLine;
+
+ SData.TermQ = NULL;
+ SData.Environment = 0;
+ SData.InheritOpt = SSF_INHERTOPT_PARENT;
+ SData.SessionType = SSF_TYPE_PM;
+ SData.IconFile = 0;
+ SData.PgmHandle = 0;
+
+ SData.PgmControl = SSF_CONTROL_VISIBLE;
+
+ SData.InitXPos = 30;
+ SData.InitYPos = 40;
+ SData.InitXSize = 200;
+ SData.InitYSize = 140;
+ SData.Reserved = 0;
+ SData.ObjectBuffer = szFail;
+ SData.ObjectBuffLen = (ULONG)sizeof(szFail);
+
+ rc = DosStartSession( &SData, &ulSID, &pid);
+ // show error dialog in case of problems
+ if (rc != NO_ERROR && rc != ERROR_SMG_START_IN_BACKGROUND) {
+ char szMessage[ _MAX_PATH*2];
+ sprintf( szMessage, "Execution failed! rc: %d, failing module:%s", rc, szFail);
+ logMessage( szMessage);
+ dumpArgs( argc, argv);
+ return -1;
+ }
+
+ // ok
+ return 0;
+}
+
diff --git a/shell/source/unix/misc/open-url.def b/shell/source/unix/misc/open-url.def
new file mode 100644
index 0000000000..3a26831e2a
--- /dev/null
+++ b/shell/source/unix/misc/open-url.def
@@ -0,0 +1 @@
+NAME open-url WINDOWAPI
diff --git a/shell/source/unix/misc/senddoc.c b/shell/source/unix/misc/senddoc.c
new file mode 100644
index 0000000000..8f5bcfabd4
--- /dev/null
+++ b/shell/source/unix/misc/senddoc.c
@@ -0,0 +1,212 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile:$
+ *
+ * $Revision:$
+ *
+ * last change: $Author:$
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <process.h>
+#include <time.h>
+
+#define INCL_DOS
+#define INCL_DOSERRORS
+#define INCL_PM
+#include <os2.h>
+
+// OOo uses popen() to start us, so we cannot show PM dialogs.
+// log message to disk.
+void logMessage( char* msg)
+{
+ PPIB pib;
+ CHAR szApplicationName[_MAX_PATH];
+ CHAR szDrive[_MAX_PATH];
+ CHAR szDir[_MAX_PATH];
+ CHAR szFileName[_MAX_PATH];
+ CHAR szExt[_MAX_PATH];
+ FILE* log;
+ time_t timeOfDay;
+ struct tm* localTime;
+
+ // get executable fullpath
+ DosGetInfoBlocks(NULL, &pib);
+ DosQueryModuleName(pib->pib_hmte, sizeof(szApplicationName), szApplicationName);
+ _splitpath( szApplicationName, szDrive, szDir, szFileName, szExt );
+ // log name
+ _makepath( szApplicationName, szDrive, szDir, szFileName, (".LOG") );
+ log = fopen( szApplicationName, "a");
+ if (!log)
+ return;
+ time( &timeOfDay);
+ localTime = localtime( &timeOfDay);
+ fprintf( log, "%04d/%02d/%02d %02d:%02d:%02d %s\n",
+ localTime->tm_year+1900, localTime->tm_mon+1, localTime->tm_mday,
+ localTime->tm_hour, localTime->tm_min, localTime->tm_sec, msg);
+ fclose( log);
+}
+
+// dump comand line arguments
+void dumpArgs( int argc, char *argv[] )
+{
+ int i;
+
+ logMessage( "Start of command line arguments dump:");
+ for( i=0; i<argc; i++)
+ logMessage( argv[i]);
+}
+
+/*
+ * The intended use of this tool is to pass the argument to
+ * the default mail handler.
+ */
+int main(int argc, char *argv[] )
+{
+ APIRET rc;
+ RESULTCODES result = {0};
+ char szAppFromINI[_MAX_PATH];
+ char szDirFromINI[_MAX_PATH];
+ char szCmdLine[1024];
+ char szFail[ _MAX_PATH];
+ ULONG ulSID;
+ PID pid;
+ int i;
+ BOOL bMailClient = FALSE;
+
+ // check parameters
+ if (argc < 5)
+ {
+ logMessage( "Usage: senddoc --mailclient <client> --attach <uri>");
+ dumpArgs( argc, argv);
+ return -1;
+ }
+
+ // check configuration
+ rc = PrfQueryProfileString(HINI_USER, "WPURLDEFAULTSETTINGS",
+ "DefaultMailExe", "",
+ szAppFromINI, sizeof(szAppFromINI));
+ rc = PrfQueryProfileString(HINI_USER, "WPURLDEFAULTSETTINGS",
+ "DefaultMailWorkingDir", "",
+ szDirFromINI, sizeof(szDirFromINI));
+ if (*szAppFromINI == 0 || *szDirFromINI == 0)
+ {
+ logMessage( "Unable to find default mail handler in USER.INI; exiting.");
+ dumpArgs( argc, argv);
+ return -1;
+ }
+
+ // get default parameter list, at leat -compose is required
+ rc = PrfQueryProfileString(HINI_USER, "WPURLDEFAULTSETTINGS",
+ "DefaultMailParameters", "",
+ szCmdLine, sizeof(szCmdLine));
+ if (strstr( szCmdLine, "-compose") == 0)
+ strcat( szCmdLine, " -compose"); // add if missing!
+
+ // parse cmdline arguments
+ for( i=1; i<argc; i++)
+ {
+ if (!strcmp( argv[i], "--mailclient")) {
+ // we support only Thunderbird/Mozilla command line options, check exe name
+ if (strstr( argv[i+1], "thunderbird") == 0
+ && strstr( argv[i+1], "mozilla") == 0
+ && strstr( argv[i+1], "seamonkey") == 0)
+ {
+ logMessage( "Only Thunderbird/Mozilla is currently supported. Exiting.");
+ dumpArgs( argc, argv);
+ return -1;
+ }
+ // mail client found
+ bMailClient = TRUE;
+ i++;
+ } else if (!strcmp( argv[i], "--attach")) {
+ strcat( szCmdLine, " attachment=file://");
+ strcat( szCmdLine, argv[i+1]);
+ i++;
+ }
+ // ignore other options (BTW currently none)
+ }
+ if (bMailClient == FALSE)
+ {
+ logMessage( "No mail client specified. Exiting.");
+ dumpArgs( argc, argv);
+ return -1;
+ }
+
+ // change default directory
+ _chdir( szDirFromINI);
+
+ // start default handler
+ STARTDATA SData;
+ CHAR szObjBuf[CCHMAXPATH];
+
+ SData.Length = sizeof(STARTDATA);
+ SData.Related = SSF_RELATED_INDEPENDENT;
+ SData.FgBg = (1) ? SSF_FGBG_FORE : SSF_FGBG_BACK;
+ SData.TraceOpt = SSF_TRACEOPT_NONE;
+
+ SData.PgmTitle = (PSZ)szAppFromINI;
+
+ SData.PgmName = (PSZ)szAppFromINI;
+ SData.PgmInputs = (PSZ)szCmdLine;
+
+ SData.TermQ = NULL;
+ SData.Environment = 0;
+ SData.InheritOpt = SSF_INHERTOPT_PARENT;
+ SData.SessionType = SSF_TYPE_PM;
+ SData.IconFile = 0;
+ SData.PgmHandle = 0;
+
+ SData.PgmControl = SSF_CONTROL_VISIBLE;
+
+ SData.InitXPos = 30;
+ SData.InitYPos = 40;
+ SData.InitXSize = 200;
+ SData.InitYSize = 140;
+ SData.Reserved = 0;
+ SData.ObjectBuffer = szFail;
+ SData.ObjectBuffLen = (ULONG)sizeof(szFail);
+
+ rc = DosStartSession( &SData, &ulSID, &pid);
+ // show error dialog in case of problems
+ if (rc != NO_ERROR && rc != ERROR_SMG_START_IN_BACKGROUND) {
+ char szMessage[ _MAX_PATH*2];
+ sprintf( szMessage, "Execution failed! rc: %d, failing module:%s", rc, szFail);
+ logMessage( szMessage);
+ dumpArgs( argc, argv);
+ return -1;
+ }
+
+ // ok
+ return 0;
+}
+
diff --git a/shell/source/unix/misc/senddoc.def b/shell/source/unix/misc/senddoc.def
new file mode 100644
index 0000000000..0abf1553a4
--- /dev/null
+++ b/shell/source/unix/misc/senddoc.def
@@ -0,0 +1 @@
+NAME senddoc WINDOWAPI