From 7916faf1b8ede0b15f1d5d89f7c2488cfa7ef50d Mon Sep 17 00:00:00 2001 From: Oliver Bolte Date: Mon, 2 Mar 2009 08:55:03 +0000 Subject: 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. --- shell/source/unix/exec/shellexec.cxx | 6 +- shell/source/unix/misc/makefile.mk | 18 +++ shell/source/unix/misc/open-url.c | 180 +++++++++++++++++++++++++++++ shell/source/unix/misc/open-url.def | 1 + shell/source/unix/misc/senddoc.c | 212 +++++++++++++++++++++++++++++++++++ shell/source/unix/misc/senddoc.def | 1 + 6 files changed, 417 insertions(+), 1 deletion(-) create mode 100644 shell/source/unix/misc/open-url.c create mode 100644 shell/source/unix/misc/open-url.def create mode 100644 shell/source/unix/misc/senddoc.c create mode 100644 shell/source/unix/misc/senddoc.def (limited to 'shell/source/unix') 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 +#include +#include +#include +#include +#include + +#define INCL_DOS +#define INCL_DOSERRORS +#define INCL_PM +#include + +// 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"); + 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 +#include +#include +#include +#include +#include + +#define INCL_DOS +#define INCL_DOSERRORS +#define INCL_PM +#include + +// 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 --attach "); + 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