Commit 339eefcc authored by Alexandre Julliard's avatar Alexandre Julliard

Release 960623

Wed Jun 19 14:49:27 1996 Marcus Meissner <msmeissn@faui45.informatik.uni-erlangen.de> * [files/drive.c] GetFreeDiskSpace*, GetVolumeInformation* added. * [files/file.c] FlushFileBuffers, CreateDirectory* added. * [include/winbase.h] [include/windows.h] Prototypes, defines added and fixes. * [if1632/kernel32.spec] [include/resource32.h] [win32/cursoricon32.c] [win32/resource.c] [windows/dialog.c] Fixes to resource handling. * [if1632/kernel.spec] [if1632/kernel32.spec] [if1632/user32.spec] Specs for implemented functions added Some thunks to functions which are same as win16 equivalents. * [loader/task.c] GetAppCompatFlags() added. * [misc/registry.c] One missing else added, small hack to RegQueryValue16(). * [win32/file.c] GetFileAttributesA() fixed (was using DOS path as UNIX path). Tue Jun 18 21:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu> * [loader/ne_resource.c] Fixed FreeResource() return value. * [objects/text.c] Fixed a bug in ExtTextOut() that was causing overlapped characters in WinWord. * [windows/winpos.c] SWP_FRAMECHANGED for top-level windows now invalidates client area as clock.exe wants. Tue Jun 18 11:30:22 1996 Albrecht Kleine <kleine@ak.sax.de> * [controls/listbox.c] Mini bugfix: 'revival' of missing scrollbar in listboxes. Mon Jun 17 20:27:41 1996 Robert Pouliot <krynos@clic.net> * [resources/sysres_Fr.rc] [resources/TODO] Made changes for Choose_Font dialog.
parent 8b915630
This is release 960616 of Wine, the MS Windows emulator. This is still a
This is release 960623 of Wine, the MS Windows emulator. This is still a
developer's only release. There are many bugs and many unimplemented API
features. Most applications still do not work correctly.
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
forget to include a ChangeLog entry.
WHAT'S NEW with Wine-960616: (see ChangeLog for details)
- Inter-task messaging begins to work.
WHAT'S NEW with Wine-960623: (see ChangeLog for details)
- More Win32 code.
- Lots of bug fixes.
See the README file in the distribution for installation instructions.
......@@ -15,10 +15,10 @@ Because of lags created by using mirror, this message may reach you before
the release is available at the ftp sites. The sources will be available
from the following locations:
sunsite.unc.edu:/pub/Linux/ALPHA/wine/development/Wine-960616.tar.gz
tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-960616.tar.gz
ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-960616.tar.gz
aris.com:/pub/linux/ALPHA/Wine/development/Wine-960616.tar.gz
sunsite.unc.edu:/pub/Linux/ALPHA/wine/development/Wine-960623.tar.gz
tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-960623.tar.gz
ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-960623.tar.gz
aris.com:/pub/linux/ALPHA/Wine/development/Wine-960623.tar.gz
It should also be available from any site that mirrors tsx-11 or sunsite.
......
----------------------------------------------------------------------
Wed Jun 19 14:49:27 1996 Marcus Meissner <msmeissn@faui45.informatik.uni-erlangen.de>
* [files/drive.c]
GetFreeDiskSpace*, GetVolumeInformation* added.
* [files/file.c]
FlushFileBuffers, CreateDirectory* added.
* [include/winbase.h] [include/windows.h]
Prototypes, defines added and fixes.
* [if1632/kernel32.spec] [include/resource32.h]
[win32/cursoricon32.c] [win32/resource.c] [windows/dialog.c]
Fixes to resource handling.
* [if1632/kernel.spec] [if1632/kernel32.spec] [if1632/user32.spec]
Specs for implemented functions added
Some thunks to functions which are same as win16 equivalents.
* [loader/task.c]
GetAppCompatFlags() added.
* [misc/registry.c]
One missing else added, small hack to RegQueryValue16().
* [win32/file.c]
GetFileAttributesA() fixed (was using DOS path as UNIX path).
Tue Jun 18 21:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [loader/ne_resource.c]
Fixed FreeResource() return value.
* [objects/text.c]
Fixed a bug in ExtTextOut() that was causing overlapped characters
in WinWord.
* [windows/winpos.c]
SWP_FRAMECHANGED for top-level windows now invalidates client
area as clock.exe wants.
Tue Jun 18 11:30:22 1996 Albrecht Kleine <kleine@ak.sax.de>
* [controls/listbox.c]
Mini bugfix: 'revival' of missing scrollbar in listboxes.
Mon Jun 17 20:27:41 1996 Robert Pouliot <krynos@clic.net>
* [resources/sysres_Fr.rc] [resources/TODO]
Made changes for Choose_Font dialog.
----------------------------------------------------------------------
Sun Jun 16 16:51:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [memory/heap.c]
......
......@@ -174,11 +174,9 @@ int ListMaxFirstVisible(LPHEADLIST lphl)
void ListBoxUpdateWindow(HWND hwnd, LPHEADLIST lphl, BOOL repaint)
{
WND *wndPtr = WIN_FindWndPtr(hwnd);
if (wndPtr->dwStyle & WS_VSCROLL)
if (lphl->dwStyle & WS_VSCROLL)
SetScrollRange(hwnd, SB_VERT, 0, ListMaxFirstVisible(lphl), TRUE);
if ((wndPtr->dwStyle & WS_HSCROLL) && (lphl->ItemsPerColumn != 0))
if ((lphl->dwStyle & WS_HSCROLL) && (lphl->ItemsPerColumn != 0))
SetScrollRange(hwnd, SB_HORZ, 1, lphl->ItemsVisible /
lphl->ItemsPerColumn + 1, TRUE);
......
......@@ -24,6 +24,7 @@
#endif
#include "windows.h"
#include "winbase.h"
#include "dos_fs.h"
#include "drive.h"
#include "file.h"
......@@ -31,6 +32,7 @@
#include "options.h"
#include "task.h"
#include "xmalloc.h"
#include "string32.h"
#include "stddebug.h"
#include "debug.h"
......@@ -428,7 +430,7 @@ int DRIVE_Enable( int drive )
/***********************************************************************
* DRIVE_GetFreeSpace
*/
int DRIVE_GetFreeSpace( int drive, DWORD *size, DWORD *available )
static int DRIVE_GetFreeSpace( int drive, DWORD *size, DWORD *available )
{
struct statfs info;
......@@ -460,6 +462,69 @@ int DRIVE_GetFreeSpace( int drive, DWORD *size, DWORD *available )
/***********************************************************************
* GetDiskFreeSpace16 (KERNEL.422)
*/
BOOL16 GetDiskFreeSpace16( LPCSTR root, LPDWORD cluster_sectors,
LPDWORD sector_bytes, LPDWORD free_clusters,
LPDWORD total_clusters )
{
return GetDiskFreeSpace32A( root, cluster_sectors, sector_bytes,
free_clusters, total_clusters );
}
/***********************************************************************
* GetDiskFreeSpaceA (KERNEL32.206)
*/
BOOL32 GetDiskFreeSpace32A( LPCSTR root, LPDWORD cluster_sectors,
LPDWORD sector_bytes, LPDWORD free_clusters,
LPDWORD total_clusters )
{
int drive;
DWORD size,available;
if (!root) drive = DRIVE_GetCurrentDrive();
else
{
if ((root[1] != ':') || (root[2] != '\\'))
{
fprintf( stderr, "GetDiskFreeSpaceA: invalid root '%s'\n", root );
return FALSE;
}
drive = toupper(root[0]) - 'A';
}
if (!DRIVE_GetFreeSpace(drive, &size, &available)) return FALSE;
*sector_bytes = 512;
size /= 512;
available /= 512;
*cluster_sectors = 1;
while (*cluster_sectors * 65530 < size) *cluster_sectors *= 2;
*free_clusters = available/ *cluster_sectors;
*total_clusters = size/ *cluster_sectors;
return TRUE;
}
/***********************************************************************
* GetDiskFreeSpaceW (KERNEL32.207)
*/
BOOL32 GetDiskFreeSpace32W( LPCWSTR root, LPDWORD cluster_sectors,
LPDWORD sector_bytes, LPDWORD free_clusters,
LPDWORD total_clusters )
{
LPSTR xroot;
BOOL ret;
xroot = STRING32_DupUniToAnsi(root);
ret = GetDiskFreeSpace32A( xroot,cluster_sectors, sector_bytes,
free_clusters, total_clusters );
free( xroot );
return ret;
}
/***********************************************************************
* GetDriveType (KERNEL.136)
*/
WORD GetDriveType( INT drive )
......@@ -501,7 +566,7 @@ WORD GetDriveType32A( LPCSTR root )
/***********************************************************************
* GetCurrentDirectory (KERNEL.411)
* GetCurrentDirectory (KERNEL.411) (KERNEL32.196)
*/
UINT32 GetCurrentDirectory( UINT32 buflen, LPSTR buf )
{
......@@ -589,3 +654,63 @@ DWORD GetLogicalDrives(void)
if (DRIVE_IsValid(drive)) ret |= (1 << drive);
return ret;
}
/***********************************************************************
* GetVolumeInformation32A (KERNEL32.309)
*/
BOOL32 GetVolumeInformation32A( LPCSTR root, LPSTR label, DWORD label_len,
DWORD *serial, DWORD *filename_len,
DWORD *flags, LPSTR fsname, DWORD fsname_len )
{
int drive;
/* FIXME, SetLastErrors missing */
if (!root) drive = DRIVE_GetCurrentDrive();
else
{
if ((root[1] != ':') || (root[2] != '\\'))
{
fprintf( stderr, "GetVolumeInformation: invalid root '%s'\n",root);
return FALSE;
}
drive = toupper(root[0]) - 'A';
}
if (!DRIVE_IsValid( drive )) return FALSE;
if (label) lstrcpyn32A( label, DOSDrives[drive].label, label_len );
if (serial) *serial = DOSDrives[drive].serial;
/* Set the filesystem information */
/* Note: we only emulate a FAT fs at the present */
if (filename_len) *filename_len = 12;
if (flags) *flags = 0;
if (fsname) lstrcpyn32A( fsname, "FAT", fsname_len );
return TRUE;
}
/***********************************************************************
* GetVolumeInformation32W (KERNEL32.310)
*/
BOOL32 GetVolumeInformation32W( LPCWSTR root, LPWSTR label, DWORD label_len,
DWORD *serial, DWORD *filename_len,
DWORD *flags, LPWSTR fsname, DWORD fsname_len)
{
LPSTR xroot = STRING32_DupUniToAnsi(root);
LPSTR xvolname = (char*)xmalloc( label_len );
LPSTR xfsname = (char*)xmalloc( fsname_len );
BOOL32 ret = GetVolumeInformation32A( xroot, xvolname, label_len, serial,
filename_len, flags, xfsname,
fsname_len );
if (ret)
{
STRING32_AnsiToUni( label, xvolname );
STRING32_AnsiToUni( fsname, xfsname );
}
free(xroot);
free(xvolname);
free(xfsname);
return ret;
}
......@@ -26,6 +26,7 @@
#include "options.h"
#include "ldt.h"
#include "task.h"
#include "string32.h"
#include "stddebug.h"
#include "debug.h"
#include "xmalloc.h"
......@@ -484,45 +485,6 @@ int FILE_SetDateTime( HFILE hFile, WORD date, WORD time )
/***********************************************************************
* FILE_Sync
*/
int FILE_Sync( HFILE hFile )
{
DOS_FILE *file;
if (!(file = FILE_GetFile( hFile ))) return 0;
if (fsync( file->unix_handle ) != -1) return 1;
FILE_SetDosError();
return 0;
}
/***********************************************************************
* FILE_MakeDir
*/
int FILE_MakeDir( LPCSTR path )
{
const char *unixName;
dprintf_file(stddeb, "FILE_MakeDir: '%s'\n", path );
if ((unixName = DOSFS_IsDevice( path )) != NULL)
{
dprintf_file(stddeb, "FILE_MakeDir: device '%s'!\n", unixName);
DOS_ERROR( ER_AccessDenied, EC_AccessDenied, SA_Abort, EL_Disk );
return 0;
}
if (!(unixName = DOSFS_GetUnixFileName( path, FALSE ))) return 0;
if ((mkdir( unixName, 0777 ) == -1) && (errno != EEXIST))
{
FILE_SetDosError();
return 0;
}
return 1;
}
/***********************************************************************
* FILE_RemoveDir
*/
int FILE_RemoveDir( LPCSTR path )
......@@ -1100,3 +1062,64 @@ WORD SetHandleCount( WORD count )
}
return pdb->nbFiles;
}
/***********************************************************************
* FlushFileBuffers (KERNEL32.133)
*/
BOOL32 FlushFileBuffers( HFILE hFile )
{
DOS_FILE *file;
dprintf_file( stddeb, "FlushFileBuffers(%d)\n", hFile );
if (!(file = FILE_GetFile( hFile ))) return FALSE;
if (fsync( file->unix_handle ) != -1) return TRUE;
FILE_SetDosError();
return FALSE;
}
/***********************************************************************
* CreateDirectory16 (KERNEL.144)
*/
BOOL16 CreateDirectory16( LPCSTR path, LPVOID dummy )
{
dprintf_file( stddeb,"CreateDirectory16(%s,%p)\n", path, dummy );
return (BOOL16)CreateDirectory32A( path, NULL );
}
/***********************************************************************
* CreateDirectory32A (KERNEL32.39)
*/
BOOL32 CreateDirectory32A( LPCSTR path, LPSECURITY_ATTRIBUTES lpsecattribs )
{
const char *unixName;
dprintf_file( stddeb, "CreateDirectory32A(%s,%p)\n", path, lpsecattribs );
if ((unixName = DOSFS_IsDevice( path )) != NULL)
{
dprintf_file(stddeb, "CreateDirectory: device '%s'!\n", unixName);
DOS_ERROR( ER_AccessDenied, EC_AccessDenied, SA_Abort, EL_Disk );
return FALSE;
}
if (!(unixName = DOSFS_GetUnixFileName( path, FALSE ))) return 0;
if ((mkdir( unixName, 0777 ) == -1) && (errno != EEXIST))
{
FILE_SetDosError();
return FALSE;
}
return TRUE;
}
/***********************************************************************
* CreateDirectory32W (KERNEL32.42)
*/
BOOL32 CreateDirectory32W( LPCWSTR path, LPSECURITY_ATTRIBUTES lpsecattribs )
{
LPSTR xpath = STRING32_DupUniToAnsi(path);
BOOL32 ret = CreateDirectory32A(xpath,lpsecattribs);
free(xpath);
return ret;
}
......@@ -142,7 +142,7 @@ type win16
141 stub InitTask1
142 stub GetProfileSectionNames
143 stub GetPrivateProfileSectionNames
144 stub CreateDirectory
144 pascal16 CreateDirectory(ptr ptr) CreateDirectory16
145 stub RemoveDirectory
146 stub DeleteFile
147 stub SetLastError
......@@ -261,7 +261,7 @@ type win16
#351 BUNNY_351
352 pascal lstrcatn(segptr segptr word) lstrcatn16
353 pascal lstrcpyn(segptr segptr word) lstrcpyn16
354 stub GetAppCompatFlags
354 pascal GetAppCompatFlags(word) GetAppCompatFlags
355 pascal16 GetWinDebugInfo(ptr word) GetWinDebugInfo
356 pascal16 SetWinDebugInfo(ptr) SetWinDebugInfo
360 stub OpenFileEx
......@@ -281,7 +281,7 @@ type win16
419 stub GetProfileSection
420 stub GetFileAttributes
421 stub SetFileAttributes
422 stub GetDiskFreeSpace
422 pascal16 GetDiskFreeSpace(ptr ptr ptr ptr ptr) GetDiskFreeSpace16
432 stub FileTimeToLocalFileTime
450 pascal16 KERNEL_450() stub_KERNEL_450
491 stub RegisterServiceProcess
......
......@@ -41,10 +41,10 @@ base 1
0036 stub CopyFileA
0037 stub CopyFileW
0038 stub CreateConsoleScreenBuffer
0039 stub CreateDirectoryA
0039 stdcall CreateDirectoryA(ptr ptr) CreateDirectory32A
0040 stub CreateDirectoryExA
0041 stub CreateDirectoryExW
0042 stub CreateDirectoryW
0042 stdcall CreateDirectoryW(ptr ptr) CreateDirectory32W
0043 stdcall CreateEventA(ptr long long ptr) CreateEventA
0044 stub CreateEventW
0045 stdcall CreateFileA(ptr long long ptr long long long) CreateFileA
......@@ -130,12 +130,12 @@ base 1
0125 stub FindNextChangeNotification
0126 stub FindNextFileA
0127 stub FindNextFileW
0128 stdcall FindResourceA(long ptr ptr) FindResource32
0128 stdcall FindResourceA(long ptr ptr) FindResource32A
0129 stub FindResourceExA
0130 stub FindResourceExW
0131 stub FindResourceW
0131 stdcall FindResourceW(long ptr ptr) FindResource32W
0132 stub FlushConsoleInputBuffer
0133 stub FlushFileBuffers
0133 stdcall FlushFileBuffers(long) FlushFileBuffers
0134 stub FlushInstructionCache
0135 stub FlushViewOfFile
0136 stub FoldStringA
......@@ -198,7 +198,7 @@ base 1
0193 stub GetCurrencyFormatA
0194 stub GetCurrencyFormatW
0195 stub GetCurrentConsoleFont
0196 stub GetCurrentDirectoryA
0196 stdcall GetCurrentDirectoryA(ptr ptr) GetCurrentDirectory
0197 stub GetCurrentDirectoryW
0198 stdcall GetCurrentProcess() GetCurrentProcess
0199 stdcall GetCurrentProcessId() GetCurrentThreadId
......@@ -208,8 +208,8 @@ base 1
0203 stub GetDateFormatW
0204 stub GetDefaultCommConfigA
0205 stub GetDefaultCommConfigW
0206 stub GetDiskFreeSpaceA
0207 stub GetDiskFreeSpaceW
0206 stdcall GetDiskFreeSpaceA(ptr ptr ptr ptr ptr) GetDiskFreeSpace32A
0207 stdcall GetDiskFreeSpaceW(ptr ptr ptr ptr ptr) GetDiskFreeSpace32W
0208 stdcall GetDriveTypeA(ptr) GetDriveType32A
0209 stub GetDriveTypeW
0210 stdcall GetEnvironmentStrings() GetEnvironmentStrings
......@@ -311,8 +311,8 @@ base 1
0306 stdcall GetVersion() GetVersion32
0307 stdcall GetVersionExA(ptr) GetVersionEx32A
0308 stdcall GetVersionExW(ptr) GetVersionEx32W
0309 stub GetVolumeInformationA
0310 stub GetVolumeInformationW
0309 stdcall GetVolumeInformationA(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32A
0310 stdcall GetVolumeInformationW(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32W
0311 stdcall GetWindowsDirectoryA(ptr long) GetWindowsDirectory
0312 stub GetWindowsDirectoryW
0313 stdcall GlobalAddAtomA(ptr) GlobalAddAtom32A
......@@ -386,7 +386,7 @@ base 1
0381 stdcall LocalUnlock(long) LocalUnlock32
0382 stub LockFile
0383 stub LockFileEx
0384 stub LockResource
0384 stdcall LockResource(long) LockResource32
0385 stub MapViewOfFile
0386 stdcall MapViewOfFileEx(long long long long long long) MapViewOfFileEx
0387 stub MoveFileA
......@@ -481,7 +481,7 @@ base 1
0476 stub SetConsoleTitleA
0477 stub SetConsoleTitleW
0478 stub SetConsoleWindowInfo
0479 stub SetCurrentDirectoryA
0479 stdcall SetCurrentDirectoryA(ptr) SetCurrentDirectory
0480 stub SetCurrentDirectoryW
0481 stub SetDefaultCommConfigA
0482 stub SetDefaultCommConfigW
......@@ -524,7 +524,7 @@ base 1
0519 stub SetVolumeLabelW
0520 stub SetupComm
0521 stub ShowConsoleCursor
0522 stub SizeofResource
0522 stdcall SizeofResource(long long) SizeofResource
0523 stdcall Sleep(long) Sleep
0524 stub SleepEx
0525 stub SuspendThread
......@@ -633,7 +633,7 @@ base 1
0627 stub HeapUsage
0628 stub IsDebuggerPresent
0629 stub PostQueuedCompletionStatus
0630 stdcall SetSystemPowerState(byte byte) SetSystemPowerState
0630 stdcall SetSystemPowerState(long long) SetSystemPowerState
0631 stub WritePrivateProfileStructA
0632 stub WritePrivateProfileStructW
0633 stub MakeCriticalSectionGlobal
name lz32
type win32
0 stdcall LZCopy(word word) LZCopy
1 stdcall LZOpenFileA(ptr ptr word) LZOpenFile32A
2 stdcall LZInit(word) LZInit
3 stdcall LZSeek(word long word) LZSeek
4 stdcall LZRead(word ptr long) LZRead32
5 stdcall LZClose(word) LZClose
0 stdcall LZCopy(long long) LZCopy
1 stdcall LZOpenFileA(ptr ptr long) LZOpenFile32A
2 stdcall LZInit(long) LZInit
3 stdcall LZSeek(long long long) LZSeek
4 stdcall LZRead(long ptr long) LZRead32
5 stdcall LZClose(long) LZClose
6 stdcall LZStart() LZStart
7 stdcall CopyLZFile(word word) CopyLZFile
7 stdcall CopyLZFile(long long) CopyLZFile
8 stdcall LZDone() LZDone
9 stdcall GetExpandedNameA(ptr ptr) GetExpandedName32A
10 stdcall LZOpenFileW(ptr ptr word) LZOpenFile32W
10 stdcall LZOpenFileW(ptr ptr long) LZOpenFile32W
11 stdcall GetExpandedNameW(ptr ptr) GetExpandedName32W
......@@ -84,9 +84,9 @@ base 1
0079 stub SheSetCurDrive
0080 stub SheShortenPathA
0081 stub SheShortenPathW
0082 stdcall ShellAboutA(word ptr ptr word) ShellAbout
0082 stdcall ShellAboutA(long ptr ptr long) ShellAbout
0083 stub ShellAboutW
0084 stdcall ShellExecuteA(word ptr ptr ptr ptr s_word) ShellExecute
0084 stdcall ShellExecuteA(long ptr ptr ptr ptr long) ShellExecute
0085 stub ShellExecuteEx
0086 stub ShellExecuteExA
0087 stub ShellExecuteExW
......
......@@ -138,7 +138,7 @@ base 1
0131 stub DestroyCursor
0132 stub DestroyIcon
0133 stub DestroyMenu
0134 stub DestroyWindow
0134 stdcall DestroyWindow(long) DestroyWindow
0135 stdcall DialogBoxIndirectParamA(long ptr long ptr long) DialogBoxIndirectParam32A
0136 stub DialogBoxIndirectParamAorW
0137 stdcall DialogBoxIndirectParamW(long ptr long ptr long) DialogBoxIndirectParam32W
......@@ -209,7 +209,7 @@ base 1
0202 stdcall FrameRect(long ptr long) FrameRect32
0203 stub FreeDDElParam
0204 stdcall GetActiveWindow() GetActiveWindow
0205 stub GetAppCompatFlags
0205 stdcall GetAppCompatFlags(long) GetAppCompatFlags
0206 stub GetAsyncKeyState
0207 stub GetCapture
0208 stub GetCaretBlinkTime
......@@ -523,7 +523,7 @@ base 1
0516 stdcall SetWindowLongA(long long long) SetWindowLong32A
0517 stdcall SetWindowLongW(long long long) SetWindowLong32W
0518 stdcall SetWindowPlacement(long ptr) SetWindowPlacement32
0519 stub SetWindowPos
0519 stdcall SetWindowPos(long long long long long long long) SetWindowPos
0520 stub SetWindowStationUser
0521 stdcall SetWindowTextA(long ptr) SetWindowText32A
0522 stdcall SetWindowTextW(long ptr) SetWindowText32W
......
......@@ -6,12 +6,12 @@ type win32
2 stdcall GetFileVersionInfoSizeW(ptr ptr) GetFileVersionInfoSize32W
3 stdcall GetFileVersionInfoW(ptr long long ptr) GetFileVersionInfo32W
#4 stub VerFThk_ThunkData32
5 stdcall VerFindFileA(word ptr ptr ptr ptr ptr ptr ptr) VerFindFile32A
6 stdcall VerFindFileW(word ptr ptr ptr ptr ptr ptr ptr) VerFindFile32W
7 stdcall VerInstallFileA(word ptr ptr ptr ptr ptr ptr ptr) VerInstallFile32A
8 stdcall VerInstallFileW(word ptr ptr ptr ptr ptr ptr ptr) VerInstallFile32W
9 stdcall VerLanguageNameA(word ptr word) VerLanguageName32A
10 stdcall VerLanguageNameW(word ptr word) VerLanguageName32W
11 stdcall VerQueryValueA(segptr ptr ptr ptr) VerQueryValue32A
12 stdcall VerQueryValueW(segptr ptr ptr ptr) VerQueryValue32W
5 stdcall VerFindFileA(long ptr ptr ptr ptr ptr ptr ptr) VerFindFile32A
6 stdcall VerFindFileW(long ptr ptr ptr ptr ptr ptr ptr) VerFindFile32W
7 stdcall VerInstallFileA(long ptr ptr ptr ptr ptr ptr ptr) VerInstallFile32A
8 stdcall VerInstallFileW(long ptr ptr ptr ptr ptr ptr ptr) VerInstallFile32W
9 stdcall VerLanguageNameA(long ptr long) VerLanguageName32A
10 stdcall VerLanguageNameW(long ptr long) VerLanguageName32W
11 stdcall VerQueryValueA(ptr ptr ptr ptr) VerQueryValue32A
12 stdcall VerQueryValueW(ptr ptr ptr ptr) VerQueryValue32W
#13 stub VerThkSL_ThunkData32
......@@ -35,6 +35,5 @@ extern DRIVETYPE DRIVE_GetType( int drive );
extern int DRIVE_Chdir( int drive, const char *path );
extern int DRIVE_Disable( int drive );
extern int DRIVE_Enable( int drive );
extern int DRIVE_GetFreeSpace( int drive, DWORD *size, DWORD *available );
#endif /* __WINE_DRIVE_H */
......@@ -18,9 +18,7 @@ extern int FILE_GetDateTime( HFILE hFile, WORD *pdate, WORD *ptime,
extern int FILE_SetDateTime( HFILE hFile, WORD date, WORD time );
extern int FILE_Fstat( HFILE hFile, BYTE *pattr, DWORD *psize,
WORD *pdate, WORD *ptime );
extern int FILE_Sync( HFILE hFile );
extern int FILE_Unlink( LPCSTR path );
extern int FILE_MakeDir( LPCSTR path );
extern int FILE_RemoveDir( LPCSTR path );
extern HFILE FILE_Dup( HFILE hFile );
extern HFILE FILE_Dup2( HFILE hFile1, HFILE hFile2 );
......
......@@ -10,7 +10,8 @@
#include <stddef.h>
HANDLE32 FindResource32( HINSTANCE hModule, LPCWSTR name, LPCWSTR type );
HANDLE32 FindResource32A( HINSTANCE hModule, LPCSTR name, LPCSTR type );
HANDLE32 FindResource32W( HINSTANCE hModule, LPCWSTR name, LPCWSTR type );
HANDLE32 LoadResource32( HINSTANCE hModule, HANDLE32 hRsrc );
LPVOID LockResource32( HANDLE32 handle );
BOOL FreeResource32( HANDLE32 handle );
......
......@@ -39,6 +39,15 @@
#define MEM_MAPPED 0x00040000
#define MEM_TOP_DOWN 0x00100000
#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
#define FILE_CASE_PRESERVED_NAMES 0x00000002
#define FILE_UNICODE_ON_DISK 0x00000004
#define FILE_PERSISTENT_ACLS 0x00000008
#define FS_CASE_SENSITIVE FILE_CASE_SENSITIVE_SEARCH
#define FS_CASE_IS_PRESERVED FILE_CASE_PRESERVED_NAMES
#define FS_UNICODE_STORED_ON_DISK FILE_UNICODE_ON_DISK
struct _EXCEPTION_POINTERS;
typedef LONG (TOP_LEVEL_EXCEPTION_FILTER)(struct _EXCEPTION_POINTERS *);
......
......@@ -3161,6 +3161,7 @@ VOID hmemcpy(LPVOID,LPCVOID,LONG);
/* Declarations for functions that exist only in Win32 */
BOOL32 FlushFileBuffers(HFILE);
DWORD GetLogicalDrives(void);
/* Declarations for functions that are the same in Win16 and Win32 */
......@@ -3170,6 +3171,7 @@ HBITMAP16 CreateCompatibleBitmap(HDC32,INT32,INT32);
HBITMAP16 CreateDiscardableBitmap(HDC32,INT32,INT32);
BOOL16 EndDialog(HWND32,INT32);
INT16 ExcludeUpdateRgn(HDC32,HWND32);
DWORD GetAppCompatFlags(HTASK32);
LONG GetBitmapBits(HBITMAP32,LONG,LPVOID);
WORD GetClassWord(HWND32,INT32);
INT16 GetUpdateRgn(HWND32,HRGN32,BOOL32);
......@@ -3239,6 +3241,10 @@ HWND16 CreateDialogParam16(HINSTANCE16,SEGPTR,HWND16,DLGPROC16,LPARAM);
HWND32 CreateDialogParam32A(HINSTANCE32,LPCSTR,HWND32,DLGPROC32,LPARAM);
HWND32 CreateDialogParam32W(HINSTANCE32,LPCWSTR,HWND32,DLGPROC32,LPARAM);
#define CreateDialogParam WINELIB_NAME_AW(CreateDialogParam)
BOOL16 CreateDirectory16(LPCSTR,LPVOID);
BOOL32 CreateDirectory32A(LPCSTR,LPSECURITY_ATTRIBUTES);
BOOL32 CreateDirectory32W(LPCWSTR,LPSECURITY_ATTRIBUTES);
#define CreateDirectory WINELIB_NAME_AW(CreateDirectory)
HRGN16 CreateEllipticRgnIndirect16(const RECT16 *);
HRGN32 CreateEllipticRgnIndirect32(const RECT32 *);
#define CreateEllipticRgnIndirect WINELIB_NAME(CreateEllipticRgnIndirect)
......@@ -3379,6 +3385,10 @@ BOOL32 GetCurrentPositionEx32(HDC32,LPPOINT32);
void GetCursorPos16(LPPOINT16);
void GetCursorPos32(LPPOINT32);
#define GetCursorPos WINELIB_NAME(GetCursorPos)
BOOL16 GetDiskFreeSpace16(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
BOOL32 GetDiskFreeSpace32A(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
BOOL32 GetDiskFreeSpace32W(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
#define GetDiskFreeSpace WINELIB_NAME_AW(GetDiskFreeSpace)
INT16 GetDlgItemText16(HWND16,INT16,SEGPTR,UINT16);
INT32 GetDlgItemText32A(HWND32,INT32,LPSTR,UINT32);
INT32 GetDlgItemText32W(HWND32,INT32,LPWSTR,UINT32);
......@@ -3388,7 +3398,7 @@ UINT32 GetInternalWindowPos32(HWND32,LPRECT32,LPPOINT32);
#define GetInternalWindowPos WINELIB_NAME(GetInternalWindowPos)
UINT32 GetLogicalDriveStrings32A(UINT32,LPSTR);
UINT32 GetLogicalDriveStrings32W(UINT32,LPWSTR);
#define GetLogicalDriveStrings WINELIB_NAME(GetLogicalDriveStrings)
#define GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings)
INT16 GetObject16(HANDLE16,INT16,LPVOID);
INT32 GetObject32A(HANDLE32,INT32,LPVOID);
INT32 GetObject32W(HANDLE32,INT32,LPVOID);
......@@ -3409,6 +3419,9 @@ BOOL32 GetViewportExtEx32(HDC32,LPPOINT32);
BOOL16 GetViewportOrgEx16(HDC16,LPPOINT16);
BOOL32 GetViewportOrgEx32(HDC32,LPPOINT32);
#define GetViewportOrgEx WINELIB_NAME(GetViewportOrgEx)
BOOL32 GetVolumeInformation32A(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
BOOL32 GetVolumeInformation32W(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
#define GetVolumeInformation WINELIB_NAME_AW(GetVolumeInformation)
BOOL16 GetWindowExtEx16(HDC16,LPPOINT16);
BOOL32 GetWindowExtEx32(HDC32,LPPOINT32);
#define GetWindowExtEx WINELIB_NAME(GetWindowExtEx)
......
......@@ -325,7 +325,7 @@ BOOL NE_FreeResource( HMODULE hModule, HGLOBAL handle )
WORD count;
NE_MODULE *pModule = MODULE_GetPtr( hModule );
if (!pModule || !pModule->res_table) return FALSE;
if (!pModule || !pModule->res_table) return handle;
pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
while (pTypeInfo->type_id)
{
......@@ -340,13 +340,13 @@ BOOL NE_FreeResource( HMODULE hModule, HGLOBAL handle )
GlobalFree16( pNameInfo->handle );
pNameInfo->handle = 0;
}
return TRUE;
return 0;
}
pNameInfo++;
}
pTypeInfo = (NE_TYPEINFO *)pNameInfo;
}
fprintf( stderr, "FreeResource: %04x %04x not found!\n", hModule, handle );
return FALSE;
return handle;
}
#endif /* WINELIB */
......@@ -1270,3 +1270,17 @@ BOOL TaskFindHandle( TASKENTRY *lpte, HTASK hTask )
lpte->hNext = hTask;
return TaskNext( lpte );
}
/***********************************************************************
* GetAppCompatFlags (KERNEL.354) (USER32.205)
*/
DWORD GetAppCompatFlags( HTASK32 hTask )
{
TDB *pTask;
if (!hTask) hTask = GetCurrentTask();
if (!(pTask=(TDB *)GlobalLock16( (HTASK16)hTask ))) return 0;
if (GlobalSize16(hTask) < sizeof(TDB)) return 0;
return pTask->compat_flags;
}
......@@ -435,7 +435,7 @@ SHELL_SaveRegistry() {
strcpy(buf,"yes");
RegCloseKey(hkey);
}
if (strcasecmp(buf,"yes"))
if (lstrcmpi32A(buf,"yes"))
all=1;
pwd=getpwuid(getuid());
if (pwd!=NULL && pwd->pw_dir!=NULL) {
......@@ -1695,8 +1695,9 @@ DWORD RegQueryValueEx32W(
LPKEYSTRUCT lpkey;
int i;
dprintf_reg(stddeb,"RegQueryValueEx32W(%x,%s,%p,%p,%p,%p)\n",
hkey,W2C(lpszValueName,0),lpdwReserved,lpdwType,lpbData,lpcbData
dprintf_reg(stddeb,"RegQueryValueEx32W(%x,%s,%p,%p,%p,%ld)\n",
hkey,W2C(lpszValueName,0),lpdwReserved,lpdwType,lpbData,
lpcbData?*lpcbData:0
);
lpkey = lookup_hkey(hkey);
......@@ -1749,8 +1750,9 @@ DWORD RegQueryValue32W(
HKEY xhkey;
DWORD ret,lpdwType;
dprintf_reg(stddeb,"RegQueryValue32W(%x,%s,%p,%p)\n->",
hkey,W2C(lpszSubKey,0),lpszData,lpcbData
dprintf_reg(stddeb,"RegQueryValue32W(%x,%s,%p,%ld)\n->",
hkey,W2C(lpszSubKey,0),lpszData,
lpcbData?*lpcbData:0
);
/* only open subkey, if we really do descend */
......@@ -1789,8 +1791,9 @@ DWORD RegQueryValueEx32A(
DWORD ret,myxlen;
DWORD *mylen;
dprintf_reg(stddeb,"RegQueryValueEx32A(%x,%s,%p,%p,%p,%p)\n->",
hkey,lpszValueName,lpdwReserved,lpdwType,lpbData,lpcbData
dprintf_reg(stddeb,"RegQueryValueEx32A(%x,%s,%p,%p,%p,%ld)\n->",
hkey,lpszValueName,lpdwReserved,lpdwType,lpbData,
lpcbData?*lpcbData:0
);
if (lpbData) {
/* double buffer */
......@@ -1802,7 +1805,7 @@ DWORD RegQueryValueEx32A(
if (lpcbData) {
myxlen = *lpcbData*2;
mylen = &myxlen;
}
} else
mylen = NULL;
}
if (lpszValueName)
......@@ -1855,8 +1858,9 @@ DWORD RegQueryValueEx16(
LPBYTE lpbData,
LPDWORD lpcbData
) {
dprintf_reg(stddeb,"RegQueryValueEx16(%x,%s,%p,%p,%p,%p)\n",
hkey,lpszValueName,lpdwReserved,lpdwType,lpbData,lpcbData
dprintf_reg(stddeb,"RegQueryValueEx16(%x,%s,%p,%p,%p,%ld)\n",
hkey,lpszValueName,lpdwReserved,lpdwType,lpbData,
lpcbData?*lpcbData:0
);
return RegQueryValueEx32A(
hkey,
......@@ -1878,8 +1882,9 @@ DWORD RegQueryValue32A(
HKEY xhkey;
DWORD ret,lpdwType;
dprintf_reg(stddeb,"RegQueryValue32A(%x,%s,%p,%p)\n",
hkey,lpszSubKey,lpszData,lpcbData
dprintf_reg(stddeb,"RegQueryValue32A(%x,%s,%p,%ld)\n",
hkey,lpszSubKey,lpszData,
lpcbData?*lpcbData:0
);
/* only open subkey, if we really do descend */
......@@ -1911,9 +1916,15 @@ DWORD RegQueryValue16(
LPSTR lpszData,
LPDWORD lpcbData
) {
dprintf_reg(stddeb,"RegQueryValue16(%x,%s,%p,%p)\n",
hkey,lpszSubKey,lpszData,lpcbData
dprintf_reg(stddeb,"RegQueryValue16(%x,%s,%p,%ld)\n",
hkey,lpszSubKey,lpszData,lpcbData?*lpcbData:0
);
/* HACK: the 16bit RegQueryValue doesn't handle selectorblocks
* anyway, so we just mask out the high 16 bit.
* (this (not so much incidently;) hopefully fixes Aldus FH4)
*/
if (lpcbData)
*lpcbData &= 0xFFFF;
return RegQueryValue32A(hkey,lpszSubKey,lpszData,lpcbData);
}
......
......@@ -136,18 +136,16 @@ static void CreateBPB(int drive, BYTE *data)
static int INT21_GetFreeDiskSpace(struct sigcontext_struct *context)
{
DWORD size, available;
int drive = DOS_GET_DRIVE( DL_reg(context) );
if (!DRIVE_GetFreeSpace(drive, &size, &available)) return 0;
CX_reg(context) = 512; /* bytes per sector */
size /= 512;
available /= 512;
AX_reg(context) = 1; /* sectors per cluster */
while (AX_reg(context) * 65530 < size) AX_reg(context) *= 2;
BX_reg(context) = available / AX_reg(context); /* free clusters */
DX_reg(context) = size / AX_reg(context); /* total clusters */
DWORD cluster_sectors, sector_bytes, free_clusters, total_clusters;
char root[] = "A:\\";
*root += DOS_GET_DRIVE( DL_reg(context) );
if (!GetDiskFreeSpace32A( root, &cluster_sectors, &sector_bytes,
&free_clusters, &total_clusters )) return 0;
AX_reg(context) = cluster_sectors;
BX_reg(context) = free_clusters;
CX_reg(context) = sector_bytes;
DX_reg(context) = total_clusters;
return 1;
}
......@@ -1129,8 +1127,8 @@ void DOS3Call( struct sigcontext_struct context )
break;
case 0x39: /* "MKDIR" - CREATE SUBDIRECTORY */
if (!FILE_MakeDir( PTR_SEG_OFF_TO_LIN( DS_reg(&context),
DX_reg(&context) )))
if (!CreateDirectory32A( PTR_SEG_OFF_TO_LIN( DS_reg(&context),
DX_reg(&context) ), NULL))
{
AX_reg(&context) = DOS_ExtendedError;
SET_CFLAG(&context);
......@@ -1550,7 +1548,7 @@ void DOS3Call( struct sigcontext_struct context )
case 0x68: /* "FFLUSH" - COMMIT FILE */
case 0x6a: /* COMMIT FILE */
if (!FILE_Sync( BX_reg(&context) ))
if (!FlushFileBuffers( BX_reg(&context) ))
{
AX_reg(&context) = DOS_ExtendedError;
SET_CFLAG(&context);
......
......@@ -112,7 +112,7 @@ static char *FONT_ChkX11Family(char *winFaceName )
int i;
for(i = 0; lpLogFontList[i] != NULL; i++)
if( !strcasecmp(winFaceName, lpLogFontList[i]->lfFaceName) )
if( !lstrcmpi32A(winFaceName, lpLogFontList[i]->lfFaceName) )
{
strcpy(x11fam,"*-");
return strcat(x11fam,winFaceName);
......@@ -1120,8 +1120,15 @@ BOOL GetRasterizerCaps(LPRASTERIZER_STATUS lprs, UINT cbNumBytes)
/*************************************************************************
* GetKerningPairs [GDI.332]
*/
int GetKerningPairs(HDC hDC,int cBufLen,LPKERNINGPAIR16 lpKerningPairs)
int GetKerningPairs(HDC hDC,int cPairs,LPKERNINGPAIR16 lpKerningPairs)
{
/* Wine fonts are ugly and don't support kerning :) */
return 0;
/* This has to be dealt with when proper font handling is in place
*
* At this time kerning is ignored (set to 0)
*/
int i;
fprintf(stdnimp,"GetKerningPairs: almost empty stub!\n");
for (i = 0; i < cPairs; i++) lpKerningPairs[i].iKernAmount = 0;
return 0;
}
......@@ -380,8 +380,19 @@ BOOL16 ExtTextOut16( HDC16 hdc, INT16 x, INT16 y, UINT16 flags,
/* Compute text starting position */
XTextExtents( font, str, count, &dir, &ascent, &descent, &info );
info.width += count*dc->w.charExtra + dc->w.breakExtra*dc->w.breakCount;
if (lpDx) for (i = 0; i < count; i++) info.width += lpDx[i];
if (lpDx) /* have explicit character cell x offsets */
{
/* sum lpDx array and add the width of last character */
info.width = XTextWidth( font, str + count - 1, 1) + dc->w.charExtra;
if (str[count-1] == (char)dc->u.x.font.metrics.tmBreakChar)
info.width += dc->w.breakExtra;
for (i = 0; i < count; i++) info.width += lpDx[i];
}
else
info.width += count*dc->w.charExtra + dc->w.breakExtra*dc->w.breakCount;
switch( dc->w.textAlign & (TA_LEFT | TA_RIGHT | TA_CENTER) )
{
......@@ -443,7 +454,7 @@ BOOL16 ExtTextOut16( HDC16 hdc, INT16 x, INT16 y, UINT16 flags,
}
}
/* Draw the text */
/* Draw the text (count > 0 verified) */
XSetForeground( display, dc->u.x.gc, dc->w.textPixel );
if (!dc->w.charExtra && !dc->w.breakExtra && !lpDx)
......@@ -454,30 +465,42 @@ BOOL16 ExtTextOut16( HDC16 hdc, INT16 x, INT16 y, UINT16 flags,
else /* Now the fun begins... */
{
XTextItem *items, *pitem;
int delta;
/* allocate max items */
items = xmalloc( count * sizeof(XTextItem) );
for (i = 0, pitem = items; i < count; i++, pitem++)
pitem = items = xmalloc( count * sizeof(XTextItem) );
delta = i = 0;
while (i < count)
{
/* initialize text item with accumulated delta */
pitem->chars = (char *)str + i;
pitem->nchars = 1;
pitem->delta = delta;
pitem->nchars = 0;
pitem->font = None;
if (i == 0)
{
pitem->delta = 0;
continue; /* First iteration -> no delta */
}
pitem->delta = dc->w.charExtra;
if (str[i] == (char)dc->u.x.font.metrics.tmBreakChar)
pitem->delta += dc->w.breakExtra;
if (lpDx)
delta = 0;
/* stuff characters into the same XTextItem until new delta
* becomes non-zero */
do
{
INT16 width;
GetCharWidth( hdc, str[i], str[i], &width );
pitem->delta += lpDx[i-1] - width;
}
if (lpDx) delta += lpDx[i] - XTextWidth( font, str + i, 1);
else
{
delta += dc->w.charExtra;
if (str[i] == (char)dc->u.x.font.metrics.tmBreakChar)
delta += dc->w.breakExtra;
}
pitem->nchars++;
}
while ((++i < count) && !delta);
pitem++;
}
XDrawText( display, dc->u.x.drawable, dc->u.x.gc,
dc->w.DCOrgX + x, dc->w.DCOrgY + y, items, count );
dc->w.DCOrgX + x, dc->w.DCOrgY + y, items, pitem - items );
free( items );
}
......
......@@ -64,6 +64,7 @@ and translate it to your language. It's okay for:
* German
* Finnish
* Italian
* French
.....
Thank you.
......
......@@ -132,16 +132,32 @@ FONT 8, "Helv"
COMBOBOX 1138, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP
}
CHOOSE_FONT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134
CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Polices"
FONT 8, "Helv"
{
LTEXT "&Police:", 1088, 6, 6, 40, 9
LTEXT "", 1089, 60, 6, 150, 9
DEFPUSHBUTTON "OK", 1, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Annuler", 2, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP
LTEXT "&Police:",1088 ,6,3,40,9
COMBOBOX 1136 ,6,13,94,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL |
CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE
LTEXT "St&yle de police:",1089 ,108,3,44,9
COMBOBOX 1137,108,13,64,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL |
WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE
LTEXT "&Taille:",1090,179,3,30,9
COMBOBOX 1138,179,13,32,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL |
WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT
DEFPUSHBUTTON "OK",IDOK,218,6,40,14,WS_GROUP
PUSHBUTTON "Annuler",IDCANCEL,218,23,40,14,WS_GROUP
PUSHBUTTON "A&ppliquer", 1026,218,40,40,14,WS_GROUP
PUSHBUTTON "&Aide" , 1038,218,57,40,14,WS_GROUP
GROUPBOX "Effets",1072,6,72,84,34,WS_GROUP
CHECKBOX "&Barr", 1040, 10,82,50,10, BS_AUTOCHECKBOX | WS_TABSTOP
CHECKBOX "&Soulign", 1041, 10,94,50,10, BS_AUTOCHECKBOX
LTEXT "&Couleur:", 1091 ,6,110,30,9
COMBOBOX 1139,6,120,84,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS |
CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Exemple",1073,98,72,160,49,WS_GROUP
CTEXT "AaBbYyZz",1093,104,81,149,37,SS_NOPREFIX | WS_VISIBLE
}
CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 200
......@@ -171,8 +187,8 @@ FONT 8, "Helv"
CONTROL "" ,709,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26
DEFPUSHBUTTON "Ok", 1, 4, 166, 44, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Annuler", 2, 52, 166, 44, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "Aide", 1038,100,166, 44, 14
PUSHBUTTON "&Ajouter couleur personnalises", 712/*1024*/, 152, 166, 142, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Aide", 1038,100,166, 44, 14
PUSHBUTTON "A&jouter couleur personnalises", 712/*1024*/, 152, 166, 142, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Definir couleurs personnalises >>", 719/*1025*/, 4, 150, 142, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&i",713,300,200,4,14 /* just a dummy: 'i' is like &i in "sol&id" */
}
......
......@@ -287,7 +287,26 @@ static int ParseExportFunction(int ordinal, int type)
ORDDEF *odp;
ORDFUNCDEF *fdp;
int i;
switch(SpecType)
{
case SPEC_WIN16:
if (type == TYPE_STDCALL)
{
fprintf( stderr, "%d: 'stdcall' not supported for Win16\n", Line );
exit(1);
}
break;
case SPEC_WIN32:
if ((type == TYPE_PASCAL) || (type == TYPE_PASCAL_16))
{
fprintf( stderr, "%d: 'pascal' not supported for Win32\n", Line );
exit(1);
}
break;
default:
break;
}
odp = &OrdinalDefinitions[ordinal];
strcpy(odp->export_name, GetToken());
odp->type = type;
......@@ -301,25 +320,39 @@ static int ParseExportFunction(int ordinal, int type)
exit(1);
}
for (i = 0; i < 16; i++)
for (i = 0; i < sizeof(fdp->arg_types)-1; i++)
{
token = GetToken();
if (*token == ')')
break;
if (!strcmp(token, "byte") || !strcmp(token, "word"))
if (!strcmp(token, "byte") || !strcmp(token, "word"))
fdp->arg_types[i] = 'w';
else if (!strcmp(token, "s_byte") || !strcmp(token, "s_word"))
else if (!strcmp(token, "s_byte") || !strcmp(token, "s_word"))
fdp->arg_types[i] = 's';
else if (!strcmp(token, "long") || !strcmp(token, "segptr"))
else if (!strcmp(token, "long") || !strcmp(token, "segptr"))
fdp->arg_types[i] = 'l';
else if (!strcmp(token, "ptr"))
else if (!strcmp(token, "ptr"))
fdp->arg_types[i] = 'p';
else
{
fprintf(stderr, "%d: Unknown variable type '%s'\n", Line, token);
exit(1);
}
else
{
fprintf(stderr, "%d: Unknown variable type '%s'\n", Line, token);
exit(1);
}
if (SpecType == SPEC_WIN32)
{
if (strcmp(token, "long") && strcmp(token, "ptr"))
{
fprintf( stderr, "%d: Type '%s' not supported for Win32\n",
Line, token );
exit(1);
}
}
}
if (*token != ')')
{
fprintf( stderr, "%d: Too many arguments\n", Line );
exit(1);
}
fdp->arg_types[i] = '\0';
......@@ -424,33 +457,28 @@ static int ParseOrdinal(int ordinal)
if (strcmp(token, "byte") == 0)
return ParseVariable(ordinal, TYPE_BYTE);
else if (strcmp(token, "word") == 0)
if (strcmp(token, "word") == 0)
return ParseVariable(ordinal, TYPE_WORD);
else if (strcmp(token, "long") == 0)
if (strcmp(token, "long") == 0)
return ParseVariable(ordinal, TYPE_LONG);
else if (strcmp(token, "p") == 0)
if (strcmp(token, "pascal") == 0)
return ParseExportFunction(ordinal, TYPE_PASCAL);
else if (strcmp(token, "pascal") == 0)
return ParseExportFunction(ordinal, TYPE_PASCAL);
else if (strcmp(token, "pascal16") == 0)
if (strcmp(token, "pascal16") == 0)
return ParseExportFunction(ordinal, TYPE_PASCAL_16);
else if (strcmp(token, "register") == 0)
if (strcmp(token, "register") == 0)
return ParseExportFunction(ordinal, TYPE_REGISTER);
else if (strcmp(token, "stdcall") == 0)
if (strcmp(token, "stdcall") == 0)
return ParseExportFunction(ordinal, TYPE_STDCALL);
else if (strcmp(token, "equate") == 0)
if (strcmp(token, "equate") == 0)
return ParseEquate(ordinal);
else if (strcmp(token, "return") == 0)
if (strcmp(token, "return") == 0)
return ParseReturn(ordinal);
else if (strcmp(token, "stub") == 0)
if (strcmp(token, "stub") == 0)
return ParseStub(ordinal);
else
{
fprintf(stderr,
"%d: Expected type after ordinal, found '%s' instead\n",
Line, token);
exit(1);
}
fprintf(stderr,
"%d: Expected type after ordinal, found '%s' instead\n",
Line, token);
exit(1);
}
static int ParseTopLevel(void)
......
......@@ -243,7 +243,7 @@ static BOOL CURSORICON32_LoadDirEntry(HANDLE hInstance, LPCWSTR name,
CURSORICONDIR32 *dir;
CURSORICONDIRENTRY32 *entry = NULL;
if (!(hRsrc = FindResource32( hInstance, name,
if (!(hRsrc = FindResource32W( hInstance, name,
(LPCWSTR)(fCursor ? RT_GROUP_CURSOR : RT_GROUP_ICON) )))
return FALSE;
if (!(hMem = LoadResource32( hInstance, hRsrc ))) return FALSE;
......@@ -439,7 +439,7 @@ static HANDLE CURSORICON32_Load( HANDLE hInstance, LPCWSTR name, int width,
/* Load the resource */
if (!(hRsrc = FindResource32( hInstance,
if (!(hRsrc = FindResource32W( hInstance,
(LPWSTR) (DWORD) dirEntry.icon.wResId,
(LPWSTR) (fCursor ? RT_CURSOR : RT_ICON )))) return 0;
if (!(handle = LoadResource32( hInstance, hRsrc ))) return 0;
......
......@@ -482,17 +482,21 @@ static int TranslateCreationFlags(DWORD create_flags)
DWORD GetFileAttributesA(LPCSTR lpFileName)
{
struct stat buf;
DWORD res=0;
if(stat(lpFileName,&buf)==-1)
{
DWORD res=0;
char *fn;
dprintf_win32(stddeb,"GetFileAttributesA(%s)\n",lpFileName);
fn=DOSFS_GetUnixFileName(lpFileName,FALSE);
/* fn points to a static buffer, don't free it */
if(stat(fn,&buf)==-1) {
SetLastError(ErrnoToLastError(errno));
return 0;
return 0xFFFFFFFF;
}
if(buf.st_mode & S_IFREG)
res |= FILE_ATTRIBUTE_NORMAL;
if(buf.st_mode & S_IFDIR)
res |= FILE_ATTRIBUTE_DIRECTORY;
if((buf.st_mode & S_IWRITE) == 0)
res |= FILE_ATTRIBUTE_READONLY;
if(buf.st_mode & S_IFREG)
res |= FILE_ATTRIBUTE_NORMAL;
if(buf.st_mode & S_IFDIR)
res |= FILE_ATTRIBUTE_DIRECTORY;
if((buf.st_mode & S_IWRITE) == 0)
res |= FILE_ATTRIBUTE_READONLY;
return res;
}
......@@ -30,23 +30,21 @@
int language = 0x0409;
#if 0
#define PrintId(name) \
#define PrintIdA(name) \
if (HIWORD((DWORD)name)) \
dprintf_resource( stddeb, "'%s'", name); \
else \
dprintf_resource( stddeb, "#%04x", LOWORD(name));
#else
#define PrintIdW(name)
#define PrintId(name)
#endif
/**********************************************************************
* GetResDirEntry
* GetResDirEntryW
*
* Helper function - goes down one level of PE resource tree
*
*/
PIMAGE_RESOURCE_DIRECTORY GetResDirEntry(PIMAGE_RESOURCE_DIRECTORY resdirptr,
PIMAGE_RESOURCE_DIRECTORY GetResDirEntryW(PIMAGE_RESOURCE_DIRECTORY resdirptr,
LPCWSTR name,
DWORD root)
{
......@@ -88,9 +86,56 @@ PIMAGE_RESOURCE_DIRECTORY GetResDirEntry(PIMAGE_RESOURCE_DIRECTORY resdirptr,
}
/**********************************************************************
* FindResource (KERNEL.60)
* GetResDirEntryA
*
* Helper function - goes down one level of PE resource tree
*
*/
PIMAGE_RESOURCE_DIRECTORY GetResDirEntryA(PIMAGE_RESOURCE_DIRECTORY resdirptr,
LPCSTR name,
DWORD root)
{
LPWSTR xname;
PIMAGE_RESOURCE_DIRECTORY ret;
if (HIWORD((DWORD)name))
xname = STRING32_DupAnsiToUni(name);
else
xname = (LPWSTR)name;
ret=GetResDirEntryW(resdirptr,xname,root);
if (HIWORD((DWORD)name))
free(xname);
return ret;
}
/**********************************************************************
* FindResourceA (KERNEL32.128)
*/
HANDLE32 FindResource32A( HINSTANCE hModule, LPCSTR name, LPCSTR type ) {
LPWSTR xname,xtype;
HANDLE32 ret;
if (HIWORD((DWORD)name))
xname = STRING32_DupAnsiToUni(name);
else
xname = (LPWSTR)name;
if (HIWORD((DWORD)type))
xtype = STRING32_DupAnsiToUni(type);
else
xtype = (LPWSTR)type;
ret=FindResource32W(hModule,xname,xtype);
if (HIWORD((DWORD)name))
free(xname);
if (HIWORD((DWORD)type))
free(xtype);
return ret;
}
/**********************************************************************
* FindResourceW (KERNEL32.131)
*/
HANDLE32 FindResource32( HINSTANCE hModule, LPCWSTR name, LPCWSTR type )
HANDLE32 FindResource32W( HINSTANCE hModule, LPCWSTR name, LPCWSTR type )
{
#ifndef WINELIB
PE_MODULE *pe;
......@@ -99,6 +144,10 @@ HANDLE32 FindResource32( HINSTANCE hModule, LPCWSTR name, LPCWSTR type )
DWORD root;
HANDLE32 result;
/* Sometimes we get passed hModule = 0x00000000. FIXME: is GetTaskDS()
* ok?
*/
if (!hModule) hModule = GetTaskDS();
hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */
dprintf_resource(stddeb, "FindResource: module=%08x type=", hModule );
PrintId( type );
......@@ -111,14 +160,14 @@ HANDLE32 FindResource32( HINSTANCE hModule, LPCWSTR name, LPCWSTR type )
resdirptr = (PIMAGE_RESOURCE_DIRECTORY) pe->pe_resource;
root = (DWORD) resdirptr;
if ((resdirptr = GetResDirEntry(resdirptr, type, root)) == NULL)
if ((resdirptr = GetResDirEntryW(resdirptr, type, root)) == NULL)
return 0;
if ((resdirptr = GetResDirEntry(resdirptr, name, root)) == NULL)
if ((resdirptr = GetResDirEntryW(resdirptr, name, root)) == NULL)
return 0;
result = GetResDirEntry(resdirptr, (LPCWSTR)language, root);
result = (HANDLE32)GetResDirEntryW(resdirptr, (LPCWSTR)language, root);
/* Try LANG_NEUTRAL, too */
if(!result)
return GetResDirEntry(resdirptr, (LPCWSTR)0, root);
return (HANDLE32)GetResDirEntryW(resdirptr, (LPCWSTR)0, root);
return result;
#else
......@@ -128,7 +177,7 @@ HANDLE32 FindResource32( HINSTANCE hModule, LPCWSTR name, LPCWSTR type )
/**********************************************************************
* LoadResource (KERNEL.61)
* LoadResource (KERNEL32.370)
*/
HANDLE32 LoadResource32( HINSTANCE hModule, HANDLE32 hRsrc )
{
......@@ -136,6 +185,7 @@ HANDLE32 LoadResource32( HINSTANCE hModule, HANDLE32 hRsrc )
NE_MODULE *pModule;
PE_MODULE *pe;
if (!hModule) hModule = GetTaskDS(); /* FIXME: see FindResource32W */
hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */
dprintf_resource(stddeb, "LoadResource: module=%04x res=%04x\n",
hModule, hRsrc );
......@@ -275,7 +325,7 @@ WIN32_LoadStringW(HINSTANCE instance, DWORD resource_id, LPWSTR buffer, int bufl
dprintf_resource(stddeb, "LoadString: instance = %04x, id = %04x, buffer = %08x, "
"length = %d\n", instance, (int)resource_id, (int) buffer, buflen);
hrsrc = FindResource32( instance, (LPCWSTR)((resource_id>>4)+1),
hrsrc = FindResource32W( instance, (LPCWSTR)((resource_id>>4)+1),
(LPCWSTR)RT_STRING );
if (!hrsrc) return 0;
hmem = LoadResource32( instance, hrsrc );
......@@ -351,7 +401,7 @@ HBITMAP WIN32_LoadBitmapW( HANDLE instance, LPCWSTR name )
return OBM_LoadBitmap( LOWORD((int)name) );
}
if (!(hRsrc = FindResource32( instance, name,
if (!(hRsrc = FindResource32W( instance, name,
(LPWSTR)RT_BITMAP ))) return 0;
if (!(handle = LoadResource32( instance, hRsrc ))) return 0;
......@@ -387,7 +437,7 @@ HBITMAP WIN32_LoadBitmapA( HANDLE instance, LPCSTR name )
HMENU WIN32_LoadMenuW(HANDLE instance, LPCWSTR name)
{
HANDLE32 hrsrc;
hrsrc=FindResource32(instance,name,(LPWSTR)RT_MENU);
hrsrc=FindResource32W(instance,name,(LPWSTR)RT_MENU);
if(!hrsrc)return 0;
return LoadMenuIndirect32W( LoadResource32(instance, hrsrc) );
}
......
......@@ -663,7 +663,7 @@ HWND32 CreateDialogParam32A( HINSTANCE32 hInst, LPCSTR name,
HWND32 CreateDialogParam32W( HINSTANCE32 hInst, LPCWSTR name,
HWND32 owner, DLGPROC32 dlgProc, LPARAM param )
{
HANDLE32 hrsrc = FindResource32( hInst, name, (LPWSTR)RT_DIALOG );
HANDLE32 hrsrc = FindResource32W( hInst, name, (LPWSTR)RT_DIALOG );
if (!hrsrc) return 0;
return CreateDialogIndirectParam32W( hInst, LoadResource32( hInst, hrsrc ),
owner, dlgProc, param );
......
......@@ -1600,7 +1600,7 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, INT x, INT y,
(oldClientRect.top - oldWindowRect.top !=
newClientRect.top - newWindowRect.top) )
RedrawWindow32( wndPtr->hwndSelf, NULL, 0,
RedrawWindow32( wndPtr->hwndSelf, NULL, 0, RDW_INVALIDATE |
RDW_ALLCHILDREN | RDW_FRAME | RDW_ERASE );
else
if( winpos.flags & SWP_FRAMECHANGED )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment