Release 960302

Sat Mar  2 18:19:06 1996  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [controls/scroll.c]
	Fixed SCROLL_THUMB painting fixes from Alex Korobka to store the
 	current tracking window.

	* [files/file.c]
	Fixed two file descriptor leaks in FILE_OpenFile().

	* [if1632/relay32.c] [loader/module.c] [loader/pe_image.c]
	  [tools/build.c]
	Replaced LOADEDFILEINFO structure by OFSTRUCT.

	* [memory/atom.c]
	Reload the pointer to the atom table in ATOM_GetTable() and
 	ATOM_AddAtom() in case the LOCAL_Alloc() calls caused the table to
 	move in linear memory.

Fri Mar  1 11:57:13 1996  Frans van Dorsselaer <dorssel@rulhm1.leidenuniv.nl>

	* [include/callback.h]
	Added support for CallWordBreakProc().

	* [controls/edit.c]
	New caret handling (really efficient / fast).
	Implemented EM_SETWORDBREAKPROC and EM_GETWORDBREAKPROC.
	Fixed EM_SETFONT so it now also creates a proper new caret.

Wed Feb 28 22:03:34 1996  Daniel Schepler  <daniel@frobnitz.wustl.edu>

	* [controls/desktop.c] [misc/main.c] [windows/event.c] [windows/win.c]
	Added WM_DELETE protocol to top-level windows.

	* [controls/scroll.c]
	Fixed a problem which caused slow scrolling to continue	uncontrollably.

	* [misc/exec.c]
	Implemented ExitWindows().

	* [windows/win.c]
	Set top-level owned windows to be transient.

Wed Feb 28 19:13:22 1996  Ulrich Schmid  <uschmid@mail.hh.provi.de>

	* [programs/progman/*]
	Added a program manager.

Wed Feb 28 18:38:01 1996  Duncan C Thomson <duncan@spd.eee.strath.ac.uk>

	* [resources/sysres_Eo.c]
	Added support for Esperanto [Eo] language.

Wed Feb 28 00:23:00 1996  Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>

	* [if1632/user32.spec]
	Added EndDialog, GetDlgItem, GetDlgItemInt, SetDlgItemInt,

	* [win32/init.c]
	Added task.h to includes. GetModuleHandleA() - return hInstance
	if called with NULL parameter. Freecell needs this. NOTE this
	may indicate a problem with differentiation between hModule and
	hInstance within Wine.

	* [win32/resource.c]
	FindResource32() and LoadResource32() - Removed #if 0's around
	conversion from hInstance to hModule. See remarks above.

	* [win32/string32.c]
	WIN32_UniLen() - removed stray semicolon.

Tue Feb 27 21:05:18 1996  Jim Peterson <jspeter@birch.ee.vt.edu>
	
	* [windows/caret.c]
	Set blink rate with call to GetProfileInt().

	* [rc/winerc.c]
	In new_style(), made initial flag settings WS_CHILD | WS_VISIBLE
 	instead of 0.  This seems to correspond to Borland's defaults, and
 	the flags can be unset by using the (rather obtuse) "| NOT WS_CHILD"
	or "| NOT WS_VISIBLE" technique in the *.rc file.

	* [win32/time.c]
	In GetLocalTime() and GetSystemTime(), used tv_sec field of result
 	returned by gettimeofday() instead of making second call to
 	time().  This eliminates clock jitter if the seconds change
 	between the two calls (rare, but possible).

	* [include/wintypes.h]
	Added "#define _far" and "#define _pascal".

	* [windows/win.c]
	Added function GetDesktopHwnd().

	* [include/xmalloc.h]
	Removed the '#ifdef HAVE_STDLIB_H' structure, since it seemed to
 	have been removed from 'configure', and was causing redefinition
 	warnings.

Tue Feb 27 19:31:11 1996  Albrecht Kleine <kleine@ak.sax.de>

	* [windows/winpos.c] 
	Added RDW_ALLCHILDREN flag in SetWindowPos (handling SWP_FRAMECHANGED)
	to force a repaint when setting menu bars with different rows.

Sun Feb 25 21:15:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>

	* [windows/syscolors.c] [controls/scroll.c]
	Fixed DrawFocusRect pen and SCROLL_THUMB painting.
diff --git a/programs/progman/string.c b/programs/progman/string.c
new file mode 100644
index 0000000..a040855
--- /dev/null
+++ b/programs/progman/string.c
@@ -0,0 +1,92 @@
+/*
+ * Program Manager
+ *
+ * Copyright 1996 Ulrich Schmid
+ */
+
+#include <windows.h>
+#include "progman.h"
+
+/* Class names */
+
+CHAR STRING_MAIN_WIN_CLASS_NAME[]    = "PMMain";
+CHAR STRING_MDI_WIN_CLASS_NAME[]     = "MDICLIENT";
+CHAR STRING_GROUP_WIN_CLASS_NAME[]   = "PMGroup";
+CHAR STRING_PROGRAM_WIN_CLASS_NAME[] = "PMProgram";
+
+/* Resource names */
+/* Xx will be overwritten with En, ... */
+CHAR STRING_ACCEL[]      = "ACCEL";
+CHAR STRING_MAIN_Xx[]    = "MENU_Xx";
+CHAR STRING_NEW_Xx[]     = "DIALOG_NEW_Xx";
+CHAR STRING_OPEN_Xx[]    = "DIALOG_OPEN_Xx";
+CHAR STRING_MOVE_Xx[]    = "DIALOG_MOVE_Xx";
+CHAR STRING_COPY_Xx[]    = "DIALOG_COPY_Xx";
+CHAR STRING_DELETE_Xx[]  = "DIALOG_DELETE_Xx";
+CHAR STRING_GROUP_Xx[]   = "DIALOG_GROUP_Xx";
+CHAR STRING_PROGRAM_Xx[] = "DIALOG_PROGRAM_Xx";
+CHAR STRING_SYMBOL_Xx[]  = "DIALOG_SYMBOL_Xx";
+CHAR STRING_EXECUTE_Xx[] = "DIALOG_EXECUTE_Xx";
+
+static LPCSTR StringTableEn[];
+static LPCSTR StringTableDe[];
+
+VOID STRING_SelectLanguage(LPCSTR lang)
+{
+  /* Change string table */
+  Globals.StringTable = StringTableEn;
+  if (!lstrcmp(lang, "De")) Globals.StringTable = StringTableDe;
+
+  SetWindowText(Globals.hMainWnd, STRING_PROGRAM_MANAGER);
+
+  /* Change Resource names */
+  lstrcpyn(STRING_MAIN_Xx    + sizeof(STRING_MAIN_Xx)    - 3, lang, 3);
+  lstrcpyn(STRING_NEW_Xx     + sizeof(STRING_NEW_Xx)     - 3, lang, 3);
+  lstrcpyn(STRING_OPEN_Xx    + sizeof(STRING_OPEN_Xx)    - 3, lang, 3);
+  lstrcpyn(STRING_MOVE_Xx    + sizeof(STRING_MOVE_Xx)    - 3, lang, 3);
+  lstrcpyn(STRING_COPY_Xx    + sizeof(STRING_COPY_Xx)    - 3, lang, 3);
+  lstrcpyn(STRING_DELETE_Xx  + sizeof(STRING_DELETE_Xx)  - 3, lang, 3);
+  lstrcpyn(STRING_GROUP_Xx   + sizeof(STRING_GROUP_Xx)   - 3, lang, 3);
+  lstrcpyn(STRING_PROGRAM_Xx + sizeof(STRING_PROGRAM_Xx) - 3, lang, 3);
+  lstrcpyn(STRING_SYMBOL_Xx  + sizeof(STRING_SYMBOL_Xx)  - 3, lang, 3);
+  lstrcpyn(STRING_EXECUTE_Xx + sizeof(STRING_EXECUTE_Xx) - 3, lang, 3);
+
+  /* Destroy old menu */
+  if (Globals.hMainMenu)
+  {
+    SendMessage(Globals.hMDIWnd, WM_MDISETMENU, (WPARAM) NULL, (LPARAM) NULL);
+#if 0 /* FIXME when MDISetMenu is complete */
+    DestroyMenu(Globals.hMainMenu);
+#endif
+  }
+
+  /* Create new menu */
+  Globals.hMainMenu = LoadMenu(Globals.hInstance, STRING_MAIN_Xx);
+  if (Globals.hMainMenu)
+  {
+    Globals.hFileMenu    = GetSubMenu(Globals.hMainMenu, 0);
+    Globals.hOptionMenu  = GetSubMenu(Globals.hMainMenu, 1);
+    Globals.hWindowsMenu = GetSubMenu(Globals.hMainMenu, 2);
+
+    if (Globals.hMDIWnd)
+      SendMessage(Globals.hMDIWnd, WM_MDISETMENU,
+		  (WPARAM) Globals.hMainMenu,
+		  (LPARAM) Globals.hWindowsMenu);
+    else SetMenu(Globals.hMainWnd, Globals.hMainMenu);
+  }
+  /* Unsupported language */
+  else if(lstrcmp(lang, "En")) STRING_SelectLanguage("En");
+  else
+  {
+    MessageBox(Globals.hMainWnd, "No language found", "FATAL ERROR", MB_OK);
+    PostQuitMessage(1);
+  }
+
+  /* have to be last because of
+   * the possible recursion */
+  Globals.lpszLanguage = lang;
+}
+
+/* Local Variables:    */
+/* c-file-style: "GNU" */
+/* End:                */