Damjan Jovanovic : start.exe: Add infrastructure to launch windows file open associations from freedesktop .

Alexandre Julliard julliard at winehq.org
Thu Jun 11 10:54:25 CDT 2009


Module: wine
Branch: master
Commit: 3b52d42ab4151f4620313dae351f4ae35366f00f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3b52d42ab4151f4620313dae351f4ae35366f00f

Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date:   Wed Jun 10 21:11:48 2009 +0200

start.exe: Add infrastructure to launch windows file open associations from freedesktop.

---

 programs/start/Cs.rc   |    1 +
 programs/start/De.rc   |    1 +
 programs/start/En.rc   |    1 +
 programs/start/Es.rc   |    1 +
 programs/start/Fr.rc   |    1 +
 programs/start/It.rc   |    1 +
 programs/start/Ko.rc   |    1 +
 programs/start/Nl.rc   |    1 +
 programs/start/Pl.rc   |    1 +
 programs/start/Pt.rc   |    1 +
 programs/start/Ru.rc   |    1 +
 programs/start/Si.rc   |    1 +
 programs/start/Tr.rc   |    1 +
 programs/start/start.c |   21 +++++++++++++++++++--
 14 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/programs/start/Cs.rc b/programs/start/Cs.rc
index b319f8d..1693f8b 100644
--- a/programs/start/Cs.rc
+++ b/programs/start/Cs.rc
@@ -37,6 +37,7 @@ Volby:\n\
 /MAX[imalizovanì] Spustí program maximalizovanì.\n\
 /R Spustí program normálnì (ani minimalizovaný ani maximalizovaný).\n\
 /W Èeká na dokonèení spuštìného programu, vrací návratový kód.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L Zobrazí licenci.\n\
 \n\
 start.exe verze 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/De.rc b/programs/start/De.rc
index 3ab7aa0..4f54a53 100644
--- a/programs/start/De.rc
+++ b/programs/start/De.rc
@@ -34,6 +34,7 @@ Optionen:\n\
 /MAX[imized] Starte das Programm maximiert.\n\
 /R[estored]  Starte das Programm normal (weder minimiert noch maximiert).\n\
 /W[ait]      Wartet bis das gestartete Programm sich beendet,\n\t     dann beendet sich start mit dessen Exitcode des Programmes.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Zeige die Endbenutzerlizenz an.\n\
 \n\
 start.exe Version 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/En.rc b/programs/start/En.rc
index f44ba11..0429fe9 100644
--- a/programs/start/En.rc
+++ b/programs/start/En.rc
@@ -34,6 +34,7 @@ Options:\n\
 /R[estored]  Start the program normally (neither minimized nor maximized).\n\
 /W[ait]      Wait for started program to finish, then exit with its exit code.\n\
 /Unix        Use a Unix filename and start the file like windows explorer.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Show end-user license.\n\
 \n\
 start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Es.rc b/programs/start/Es.rc
index fd74d8f..ac1c6d7 100644
--- a/programs/start/Es.rc
+++ b/programs/start/Es.rc
@@ -34,6 +34,7 @@ Opciones:\n\
 /R[estored]  Inicia el programa normalmente (ni minimizado ni maximizado).\n\
 /W[ait]      Espera que termine el programa iniciado y después sale con su código de salida.\n\
 /Unix        Usa un nombre de archivo de Unix e inicia el archivo como en el explorador de windows.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Muestra la licencia para el usuario final.\n\
 \n\
 start.exe versión 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Fr.rc b/programs/start/Fr.rc
index 7373637..a2c8fd7 100644
--- a/programs/start/Fr.rc
+++ b/programs/start/Fr.rc
@@ -37,6 +37,7 @@ Options :\n\
 /MAX[imized] Lance le programme maximisé.\n\
 /R[estored]  Lance le programme normalement (ni minimisé ni maximisé).\n\
 /W[ait]      Attend que le programme lancé se termine, et termine ensuite avec son code de sortie.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Montre la licence d'utilisation.\n\
 \n\
 start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/It.rc b/programs/start/It.rc
index aa83497..42f59ac 100644
--- a/programs/start/It.rc
+++ b/programs/start/It.rc
@@ -35,6 +35,7 @@ Options:\n\
 /MAX[imized] Avvia il programma massimizato.\n\
 /R[estored]  Avvia il programma normalmente (nè minimizzato nè massimizato).\n\
 /W[ait]      Attendi l'uscita del programma, poi esci con il suo codice di uscita.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Mostra l'accordo di licenza con l'utente finale.\n\
 \n\
 start.exe versione 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Ko.rc b/programs/start/Ko.rc
index 6c177fe..bc58ebc 100644
--- a/programs/start/Ko.rc
+++ b/programs/start/Ko.rc
@@ -35,6 +35,7 @@ Options:\n\
 /R[estored]  Ç®±×¸²À» º¸Åë»óÅ·Π½ÃÀÛ½ÃÅ°±â (ÃÖ¼ÒÈ­µµ ¾Æ´Ï°í ÃÖ´ëÈ­µµ ¾Æ´Ô).\n\
 /W[ait]      ½ÃÀÛµÈ Ç®±×¸²ÀÌ ³¡³¯ ¶§±îÁö ±â´Ù¸², ³¡³¯ ¶§ Á¾·áÄڵ带 ³²±è.\n\
 /Unix        À©µµ¿ì ÀͽºÇ÷ξÀÌ À¯´Ð½º ÆÄÀÏÀ̸§À» »ç¿ëÇؼ­ ½ÃÀÛ.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           »ç¿ëÀÚ ¶óÀ̼¾½º º¸¿©ÁÜ\n\
 \n\
 start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Nl.rc b/programs/start/Nl.rc
index 725789a..69012a1 100644
--- a/programs/start/Nl.rc
+++ b/programs/start/Nl.rc
@@ -34,6 +34,7 @@ Options:\n\
 /R[estored]  Start het programma normaal (noch geminimaliseerd noch gemaximaliseerd).\n\
 /W[ait]      Wacht totdat het gestarte programma is beëindigd, eindig dan met de exit code van dat programma.\n\
 /Unix        Gebruik een Unix bestandsnaam en start het bestand als de windows verkenner.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Laat de gebruikerslicentie zien.\n\
 \n\
 start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Pl.rc b/programs/start/Pl.rc
index 514c192..09b9f51 100644
--- a/programs/start/Pl.rc
+++ b/programs/start/Pl.rc
@@ -35,6 +35,7 @@ Opcje:\n\
 /R[estored]  Uruchamia program normalnie (bez minimalizacji ani maksymalizacji).\n\
 /W[ait]      Zaczekaj a¿ program zakoñczy dzia³anie (i zakoñcz\n\
 \t     kodem wyjœcia programu).\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Poka¿ licencjê u¿ytkownika.\n\
 \n\
 start.exe wersja 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Pt.rc b/programs/start/Pt.rc
index 9030238..51ff53b 100644
--- a/programs/start/Pt.rc
+++ b/programs/start/Pt.rc
@@ -34,6 +34,7 @@ Options:\n\
 /MAX[imized] Inicia o programa maximizado.\n\
 /R[estored]  Inicia o programa normalmente (sem minimizar nem maximizar).\n\
 /W[ait]      Aguarda que o programa iniciado termine e então retorno um código (exit code).\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Mostra a licença ao usuário.\n\
 \n\
 start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Ru.rc b/programs/start/Ru.rc
index 3e9cf62..97e9854 100644
--- a/programs/start/Ru.rc
+++ b/programs/start/Ru.rc
@@ -34,6 +34,7 @@ start [options] 
 /R[estored]  Çàïóñòèòü ïðîãðàììó íîðìàëüíî (íå ìàêñèìèçèðîâàííî è íå ìèíèìèçèðîâàííî).\n\
 /W[ait]      Îæèäàòü çàâåðøåíèÿ çàïóùåííîé ïðîãðàììû è âûéòè ñ êîäîì å¸ âûõîäà.\n\
 /Unix        Èñïîëüçîâàòü ïóòü Unix äëÿ çàïóñêà ïðîãðàìû êàê âèíäîâñ ïðîâîäíèê.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Ïîêàçàòü ëèöåíçèþ êîíå÷íîãî ïîëüçîâàòåëÿ.\n\
 \n\
 start.exe âåðñèÿ 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Si.rc b/programs/start/Si.rc
index b7ff270..e10ddf7 100644
--- a/programs/start/Si.rc
+++ b/programs/start/Si.rc
@@ -35,6 +35,7 @@ Možnosti:\n\
 /MAX[imized] Zažene program z razširjenim oknom.\n\
 /R[estored]  Zažene program z običajno velikostjo okna.\n\
 /W[ait]      Počaka, da se zagnani program zaključi, nato se zaključi in vrne izhodno kodo programa.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Prikaže licenčno pogodbo.\n\
 \n\
 start.exe različica 0.2 Copyright (C) 2003, Dan Kegel\n\
diff --git a/programs/start/Tr.rc b/programs/start/Tr.rc
index 28f15a2..de7a69d 100644
--- a/programs/start/Tr.rc
+++ b/programs/start/Tr.rc
@@ -33,6 +33,7 @@ Se
 /MAX[imized] Ekraný kaplayacak þekilde baþlat.\n\
 /R[estored]  Programý normal bir þekilde baþlat (simge halinde veya büyütülmüþ halde olabilir).\n\
 /W[ait]      Baþlatýlmýþ programýn bitmesini bekle, sonra çýkýþ koduyla çýk.\n\
+/ProgIDOpen  Open a document using the following progID.\n\
 /L           Son-kullanýcý lisansýný göster.\n\
 \n\
 start.exe sürüm 0.2 Telif Hakký (C) 2003, Dan Kegel\n\
diff --git a/programs/start/start.c b/programs/start/start.c
index ed7df03..e58d4c0 100644
--- a/programs/start/start.c
+++ b/programs/start/start.c
@@ -176,12 +176,15 @@ int wmain (int argc, WCHAR *argv[])
 	WCHAR *args = NULL;
 	int i;
 	int unix_mode = 0;
+	int progid_open = 0;
 	WCHAR *dos_filename = NULL;
 	WCHAR *parent_directory = NULL;
 	DWORD binary_type;
 
 	static const WCHAR openW[] = { 'o', 'p', 'e', 'n', 0 };
 	static const WCHAR unixW[] = { 'u', 'n', 'i', 'x', 0 };
+	static const WCHAR progIDOpenW[] =
+		{ 'p', 'r', 'o', 'g', 'I', 'D', 'O', 'p', 'e', 'n', 0};
 
 	memset(&sei, 0, sizeof(sei));
 	sei.cbSize = sizeof(sei);
@@ -203,7 +206,7 @@ int wmain (int argc, WCHAR *argv[])
 			break;
 
 		/* Unix paths can start with / so we have to assume anything following /U is not a flag */
-		if (unix_mode)
+		if (unix_mode || progid_open)
 			break;
 
 		/* Handle all options in this word */
@@ -235,6 +238,15 @@ int wmain (int argc, WCHAR *argv[])
 					usage();
 				}
 				break;
+			case 'p':
+			case 'P':
+				if (strncmpiW(&argv[i][ci], progIDOpenW, 17) == 0)
+					progid_open = 1;
+				else {
+					WINE_ERR("Option '%s' not recognized\n", wine_dbgstr_w( argv[i]+ci-1));
+					usage();
+				}
+				break;
 			case 'w':
 			case 'W':
 				sei.fMask |= SEE_MASK_NOCLOSEPROCESS;
@@ -252,12 +264,17 @@ int wmain (int argc, WCHAR *argv[])
 	if (i == argc)
 		usage();
 
+	if (progid_open) {
+		sei.lpClass = argv[i++];
+		sei.fMask |= SEE_MASK_CLASSNAME;
+	}
+
 	sei.lpFile = argv[i++];
 
 	args = build_args( argc - i, &argv[i] );
 	sei.lpParameters = args;
 
-	if (unix_mode) {
+	if (unix_mode || progid_open) {
 		LPWSTR (*CDECL wine_get_dos_file_name_ptr)(LPCSTR);
 		char* multibyte_unixpath;
 		int multibyte_unixpath_len;




More information about the wine-cvs mailing list