diff options
Diffstat (limited to 'shell/source/unix')
-rw-r--r-- | shell/source/unix/exec/shellexec.cxx | 6 | ||||
-rw-r--r-- | shell/source/unix/misc/makefile.mk | 18 | ||||
-rw-r--r-- | shell/source/unix/misc/open-url.c | 180 | ||||
-rw-r--r-- | shell/source/unix/misc/open-url.def | 1 | ||||
-rw-r--r-- | shell/source/unix/misc/senddoc.c | 212 | ||||
-rw-r--r-- | shell/source/unix/misc/senddoc.def | 1 |
6 files changed, 417 insertions, 1 deletions
diff --git a/shell/source/unix/exec/shellexec.cxx b/shell/source/unix/exec/shellexec.cxx index 7bbe7a3c97d1..315f78c517ff 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 d54e359406b0..ba2ed56b83ef 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 000000000000..00a2e3bff774 --- /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 000000000000..3a26831e2a65 --- /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 000000000000..e918ba69c86d --- /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 000000000000..0abf1553a4a9 --- /dev/null +++ b/shell/source/unix/misc/senddoc.def @@ -0,0 +1 @@ +NAME senddoc WINDOWAPI |