Html Help

Acke Carlsson ackek at tiscali.se
Fri Jan 9 23:42:07 CST 2004


Heavy based on Chris Morgan's winebrowser i cut/paste a winehh, to use a Unix
chm-file viewer. It works when there is no space in the path. How to do the
transform from windows path to Unix path right?

You find a static linked Unix chm-file viewer on this URL
http://www.herdsoft.com/ftp/chmviewer-0.1.tar.gz

Or get xchm from SourceForge

Apologize for wrongly spelling.
mvh Acke Carlsson



Index: configure.ac
===================================================================
RCS file: /mnt/hd/cvs/wine/wine/configure.ac,v
retrieving revision 1.228
diff -u -r1.228 configure.ac
--- configure.ac	9 Jan 2004 00:03:00 -0000	1.228
+++ configure.ac	9 Jan 2004 23:38:41 -0000
@@ -1657,6 +1657,7 @@
 programs/wineconsole/Makefile
 programs/winedbg/Makefile
 programs/winefile/Makefile
+programs/winehh/Makefile
 programs/winemenubuilder/Makefile
 programs/winemine/Makefile
 programs/winepath/Makefile
Index: winedefault.reg
===================================================================
RCS file: /mnt/hd/cvs/wine/wine/winedefault.reg,v
retrieving revision 1.84
diff -u -r1.84 winedefault.reg
--- winedefault.reg	6 Jan 2004 20:49:59 -0000	1.84
+++ winedefault.reg	9 Jan 2004 23:34:51 -0000
@@ -4614,6 +4614,16 @@
 [HKEY_CLASSES_ROOT\http\shell\open\command]
 @="winebrowser %1"
 
+[HKEY_CLASSES_ROOT\.chm]
+@="chm.file"
+
+[HKEY_CLASSES_ROOT\chm.file]
+@="Compiled HTML Help file"
+
+# Map requests to open "chm.file" entries to winehh
+[HKEY_CLASSES_ROOT\chm.file\shell\open\command]
+@="winehh %1"
+
 #
 # Entries for DirectShow
 #
Index: programs/Makefile.in
===================================================================
RCS file: /mnt/hd/cvs/wine/wine/programs/Makefile.in,v
retrieving revision 1.43
diff -u -r1.43 Makefile.in
--- programs/Makefile.in	6 Jan 2004 20:49:59 -0000	1.43
+++ programs/Makefile.in	9 Jan 2004 23:47:00 -0000
@@ -27,6 +27,7 @@
 	wineconsole \
 	winedbg \
 	winefile \
+	winehh \
 	winemenubuilder \
 	winemine \
 	winepath \
@@ -56,6 +57,7 @@
 	wineconsole \
 	winedbg \
 	winefile \
+	winehh \
 	winemenubuilder \
 	winemine \
 	winepath \
@@ -78,6 +80,7 @@
 	wineconsole \
 	winedbg \
 	winefile \
+	winehh \
 	winemine \
 	winepath \
 	winhelp
@@ -107,6 +110,7 @@
 	wineconsole.exe \
 	winedbg.exe \
 	winefile.exe \
+	winehh.exe \
 	winemenubuilder.exe \
 	winemine.exe \
 	winepath.exe \
@@ -227,6 +231,9 @@
 winefile.exe$(DLLEXT): winefile/winefile.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) winefile/winefile.exe$(DLLEXT) $@
 
+winehh.exe$(DLLEXT): winehh/winehh.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) winehh/winehh.exe$(DLLEXT) $@
+
 winemenubuilder.exe$(DLLEXT): winemenubuilder/winemenubuilder.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) winemenubuilder/winemenubuilder.exe$(DLLEXT) $@
 
@@ -271,6 +278,7 @@
 wineconsole/wineconsole.exe$(DLLEXT): wineconsole
 winedbg/winedbg.exe$(DLLEXT): winedbg
 winefile/winefile.exe$(DLLEXT): winefile
+winehh/winehh.exe$(DLLEXT): winehh
 winemenubuilder/winemenubuilder.exe$(DLLEXT): winemenubuilder
 winemine/winemine.exe$(DLLEXT): winemine
 winepath/winepath.exe$(DLLEXT): winepath
Index: programs/make_progs
===================================================================
RCS file: /mnt/hd/cvs/wine/wine/programs/make_progs,v
retrieving revision 1.2
diff -u -r1.2 make_progs
--- programs/make_progs	6 Jan 2004 20:49:59 -0000	1.2
+++ programs/make_progs	9 Jan 2004 23:41:00 -0000
@@ -41,6 +41,7 @@
   "wineconsole" => 1,
   "winedbg" => 1,
   "winefile" => 1,
+  "winehh" => 1,
   "winemine" => 1,
   "winepath" => 1,
   "winhelp" => 1,
Index: tools/wineinstall
===================================================================
RCS file: /mnt/hd/cvs/wine/wine/tools/wineinstall,v
retrieving revision 1.64
diff -u -r1.64 wineinstall
--- tools/wineinstall	6 Jan 2004 22:08:33 -0000	1.64
+++ tools/wineinstall	9 Jan 2004 23:43:59 -0000
@@ -146,6 +146,7 @@
   link_app winhelp      "$CROOT/windows/winhelp.exe"
   link_app winhelp      "$CROOT/windows/winhlp32.exe"
   link_app winebrowser  "$CROOT/windows/winebrowser.exe"
+  link_app winehh  "$CROOT/windows/winehh.exe"
 }
 
 # startup...
--- /dev/null	1970-01-01 01:00:00.000000000 +0100
+++ programs/winehh/.cvsignore	2004-01-10 01:18:52.000000000 +0100
@@ -0,0 +1,3 @@
+Makefile
+winehh.exe.dbg.c
+winehh.exe.spec.c
--- /dev/null	1970-01-01 01:00:00.000000000 +0100
+++ programs/winehh/Makefile.in	2004-01-10 00:42:30.000000000 +0100
@@ -0,0 +1,14 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = winehh.exe
+APPMODE   = cui
+IMPORTS   = shell32 user32 advapi32 kernel32
+
+C_SRCS = \
+	main.c
+
+ at MAKE_PROG_RULES@
+
+### Dependencies:
--- /dev/null	1970-01-01 01:00:00.000000000 +0100
+++ programs/winehh/main.c	2004-01-10 04:16:11.000000000 +0100
@@ -0,0 +1,109 @@
+/*
+ * winehh winelib app to launch native OS chm-file viewer
+ *
+ * Copyright (C) 2004 Chris Morgan
+ * Copyright (C) 2004 Acke Carlsson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * 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
+ *
+ * NOTES:
+ *  Winehh is a winelib application that will start the appropriate
+ *  native chm-file viewer up for a wine installation that lacks a
+ *  windows chm-file viewer.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+
+/*****************************************************************************
+ * Main entry point. This is a console application so we have a main() not a
+ * winmain().
+ */
+int main (int argc, char *argv[])
+{
+  static char path[MAX_PATH];
+
+  typedef BOOL (WINAPI *wine_get_unix_file_name_t) ( LPCWSTR dos, LPSTR buffer, DWORD len );
+  wine_get_unix_file_name_t wine_get_unix_file_name_ptr = NULL;
+
+  wine_get_unix_file_name_ptr = (wine_get_unix_file_name_t)
+  GetProcAddress(GetModuleHandle("KERNEL32"), "wine_get_unix_file_name");
+
+  fprintf(stderr, "winehh open: %s\n", argv[1]);
+  
+  WCHAR dosW[MAX_PATH];
+  MultiByteToWideChar(CP_ACP, 0, argv[1], -1, dosW, MAX_PATH);
+  wine_get_unix_file_name_ptr(dosW, path, sizeof(path));
+
+  fprintf(stderr, "winehh open: %s\n", path);
+
+  const char *argv_new[3];
+  DWORD maxLength;
+  CHAR szChmViewer[256];
+  DWORD type;
+  CHAR *defaultChmViewer = "displaychm,xchm";
+  char *chmviewer;
+  HKEY hkey;
+  LONG r;
+
+  /* is this necessary for a chmviewer */
+  unsetenv("TEMP");
+  unsetenv("TMP");
+
+  maxLength = sizeof(szChmViewer);
+
+  if(RegCreateKeyEx( HKEY_CURRENT_USER,
+		      "Software\\Wine\\WineHH", 0, NULL,
+		      REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
+		      &hkey, NULL))
+  {
+    fprintf( stderr, "winehh: cannot create config key\n" );
+    return 1;
+  }
+
+  r = RegQueryValueExA( hkey, "ChmViewer", 0, &type, szChmViewer, &maxLength);
+  if(r != ERROR_SUCCESS)
+  {
+    /* set value to the default */
+    RegSetValueExA(hkey, "ChmViewer", 0, REG_SZ,
+		   (LPBYTE)defaultChmViewer, lstrlen(defaultChmViewer) + 1);
+    strcpy( szChmViewer, defaultChmViewer );
+  }
+
+  RegCloseKey(hkey);
+
+
+  /* now go through the list of chmviewers until we run out or we find one that */
+  /* works */
+  chmviewer = strtok(szChmViewer, ",");
+
+  while(chmviewer)
+  {
+    argv_new[0] = chmviewer;
+    argv_new[1] = path;
+    argv_new[2] = NULL;
+
+    spawnvp(_P_OVERLAY, chmviewer, argv_new);  /* only returns on error */
+
+    chmviewer = strtok(NULL, ","); /* grab the next chmviewer */
+  }
+  fprintf( stderr, "winehh: could not find a chmviewer to run\n" );
+  return 1;
+}






More information about the wine-devel mailing list