Hans Leidekker : wordpad: Open .wri files in wordpad.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Feb 12 09:24:01 CST 2007
Module: wine
Branch: master
Commit: f3425cfe413c5475f50c2ff6a6c049775a5f870d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f3425cfe413c5475f50c2ff6a6c049775a5f870d
Author: Hans Leidekker <hans at it.vu.nl>
Date: Sat Feb 10 22:55:29 2007 +0100
wordpad: Open .wri files in wordpad.
---
programs/wordpad/wordpad.c | 120 +++++++++++++++++++++++++++++++++++++++++++-
tools/wine.inf | 3 +
2 files changed, 121 insertions(+), 2 deletions(-)
diff --git a/programs/wordpad/wordpad.c b/programs/wordpad/wordpad.c
index 9afcc5d..7269272 100644
--- a/programs/wordpad/wordpad.c
+++ b/programs/wordpad/wordpad.c
@@ -41,7 +41,8 @@ static const WCHAR wszRichEditClass[] =
static const WCHAR wszMainWndClass[] = {'W','O','R','D','P','A','D','T','O','P',0};
static const WCHAR wszAppTitle[] = {'W','i','n','e',' ','W','o','r','d','p','a','d',0};
-static HWND hMainWnd = NULL;
+static HWND hMainWnd;
+static HWND hEditorWnd;
static void AddButton(HWND hwndToolBar, int nImage, int nCommand)
{
@@ -71,9 +72,122 @@ static void AddSeparator(HWND hwndToolBa
SendMessage(hwndToolBar, TB_ADDBUTTONS, 1, (LPARAM)&button);
}
+static LPSTR stream_buffer;
+static LONG stream_buffer_size;
+
+static DWORD CALLBACK stream_in(DWORD_PTR cookie, LPBYTE buffer, LONG cb, LONG *pcb)
+{
+ LONG size = min(stream_buffer_size, cb);
+
+ memcpy(buffer, stream_buffer, size);
+ stream_buffer_size -= size;
+ stream_buffer += size;
+ *pcb = size;
+ return 0;
+}
+
+static void DoOpenFile(LPCWSTR szFileName)
+{
+ HANDLE hFile;
+ LPSTR pTemp;
+ DWORD size;
+ DWORD dwNumRead;
+ EDITSTREAM es;
+
+ hFile = CreateFileW(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (hFile == INVALID_HANDLE_VALUE)
+ return;
+
+ size = GetFileSize(hFile, NULL);
+ if (size == INVALID_FILE_SIZE)
+ {
+ CloseHandle(hFile);
+ return;
+ }
+ size++;
+
+ pTemp = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!pTemp)
+ {
+ CloseHandle(hFile);
+ return;
+ }
+
+ if (!ReadFile(hFile, pTemp, size, &dwNumRead, NULL))
+ {
+ CloseHandle(hFile);
+ HeapFree(GetProcessHeap(), 0, pTemp);
+ return;
+ }
+ CloseHandle(hFile);
+ pTemp[dwNumRead] = 0;
+
+ memset(&es, 0, sizeof(es));
+ es.pfnCallback = stream_in;
+
+ stream_buffer = pTemp;
+ stream_buffer_size = size;
+
+ SendMessage(hEditorWnd, EM_STREAMIN, SF_RTF, (LPARAM)&es);
+ HeapFree(GetProcessHeap(), 0, pTemp);
+
+ SetFocus(hEditorWnd);
+}
+
+static void HandleCommandLine(LPWSTR cmdline)
+{
+ WCHAR delimiter;
+ int opt_print = 0;
+
+ /* skip white space */
+ while (*cmdline == ' ') cmdline++;
+
+ /* skip executable name */
+ delimiter = (*cmdline == '"' ? '"' : ' ');
+
+ if (*cmdline == delimiter) cmdline++;
+ while (*cmdline && *cmdline != delimiter) cmdline++;
+ if (*cmdline == delimiter) cmdline++;
+
+ while (*cmdline == ' ' || *cmdline == '-' || *cmdline == '/')
+ {
+ WCHAR option;
+
+ if (*cmdline++ == ' ') continue;
+
+ option = *cmdline;
+ if (option) cmdline++;
+ while (*cmdline == ' ') cmdline++;
+
+ switch (option)
+ {
+ case 'p':
+ case 'P':
+ opt_print = 1;
+ break;
+ }
+ }
+
+ if (*cmdline)
+ {
+ /* file name is passed on the command line */
+ if (cmdline[0] == '"')
+ {
+ cmdline++;
+ cmdline[lstrlenW(cmdline) - 1] = 0;
+ }
+ DoOpenFile(cmdline);
+ InvalidateRect(hMainWnd, NULL, FALSE);
+ }
+
+ if (opt_print)
+ MessageBox(hMainWnd, "Printing not implemented", "WordPad", MB_OK);
+}
+
static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam)
{
- HWND hEditorWnd, hToolBarWnd, hReBarWnd;
+ HWND hToolBarWnd, hReBarWnd;
HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
HANDLE hDLL;
TBADDBITMAP ab;
@@ -500,6 +614,8 @@ int CALLBACK WinMain(HINSTANCE hInstance
CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, hInstance, NULL);
ShowWindow(hMainWnd, SW_SHOWMAXIMIZED);
+ HandleCommandLine(GetCommandLineW());
+
while(GetMessage(&msg,0,0,0))
{
if (TranslateAccelerator(hMainWnd, hAccel, &msg))
diff --git a/tools/wine.inf b/tools/wine.inf
index f5672a6..5e68a2a 100644
--- a/tools/wine.inf
+++ b/tools/wine.inf
@@ -99,6 +99,7 @@ HKCR,.msi,,2,"Msi.Package"
HKCR,.tif,"Content Type",2,"image/tiff"
HKCR,.tiff,"Content Type",2,"image/tiff"
HKCR,.txt,,2,"txtfile"
+HKCR,.wri,,2,"wrifile"
HKCR,.wav,"Content Type",2,"audio/wav"
HKCR,.xml,"Content Type",2,"text/xml"
HKCR,.xsl,"Content Type",2,"text/xsl"
@@ -123,6 +124,8 @@ HKCR,Msi.Package\shell\Repair\command,,2
HKCR,Msi.Package\shell\Uninstall\command,,2,"msiexec /x %1"
HKCR,txtfile\shell\open\command,,2,"%11%\notepad.exe %1"
HKCR,txtfile\shell\print\command,,2,"%11%\notepad.exe /p %1"
+HKCR,wrifile\shell\open\command,,2,"%11%\wordpad.exe %1"
+HKCR,wrifile\shell\print\command,,2,"%11%\wordpad.exe /p %1"
HKCR,http\shell\open\command,,2,"winebrowser"
HKCR,https\shell\open\command,,2,"winebrowser"
HKCR,mailto\shell\open\command,,2,"winebrowser %1"
More information about the wine-cvs
mailing list