mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 06:31:55 +00:00
84c70f55b5
Tue May 6 19:12:20 1997 Alexandre Julliard <julliard@lrc.epfl.ch> * [loader/task.c] [loader/module.c] Fixed command line in LoadModule to already include the length indicator (thanks to Andreas Mohr). * [windows/dialog.c] DlgDirList: fixed behavior with DDL_DRIVES | DDL_EXCLUSIVE (thanks to Bruce Milner for this one); correctly update file spec on exit. * [windows/winproc.c] [if1632/thunk.c] [include/callback.h] Moved emulator-specific code for calling window procedure to thunk.c. Mon Apr 28 10:21:59 1997 Huw D M Davies <h.davies1@physics.oxford.ac.uk> * [memory/local.c] Better implementation of moveable blocks (first word in block is the handle itself) and discarded blocks. Local(Re)Alloc is much more like the real thing. Thu Apr 24 19:50:19 1997 Albrecht Kleine <kleine@ak.sax.de> * [objects/metafile.c] Added handling of meta record META_DIBCREATEPATTERNBRUSH. Mon Apr 21 14:03:32 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu> * [multimedia/mmsystem.c] [multimedia/audio.c] Fixed leftover problems with masked device IDs. * [msdos/int21.c] Removed code duplications, fixed Write. * [windows/event.c] [windows/dce.c] [windows/nonclient.c] [windows/winpos.c] Yet another attempt to make -managed work better. * [controls/combo.c] UI fix. Mon Apr 21 13:10:24 1997 Marcus Meissner <msmeissn@immd4.informatik.uni-erlangen.de> * [debugger/*] All "Loading from ..." lines merged into one so important information before the crash doesn't scroll out. * [if1632/kernel.spec] Added some ordinal stubs used by win95 OLE and friends. * [win32/process.c] [if1632/kernel.spec] [loader/module.c] MsgWaitForMultipleObjects,GetProcessTimes,RtlImageNtHeaders, LoadLibraryEx32W and GetProcAddress32W added. * [objects/bitmap.c] XImages use another memory layout for depth 4 (and poss. other depths) then Windows bitmaps. Replaced speedup hack by generic (and better working) code. * [objects/dib.c] Another ximage!=bitmap memory layout bug. All _XinitImageFuncPtrs except one removed. Sun Apr 20 17:12:30 1997 Andrew Taylor <andrew@riscan.com> * [multimedia/audio.c] Fixed some regression bugs. Sun Apr 20 12:15:09 1997 Andreas Mohr <100.30936@germany.net> * [loader/module.c] Fixed MODULE_LoadExeHeader() to use the correct offset for fast-load area. Sat Apr 19 16:40:00 1997 Chad Fraleigh <chadf@bookcase.com> * [controls/*] [debugger/*] [graphics/win16drv/*] [loader/*] [misc/*] [win32/*] Removed <malloc.h> and added <stdlib.h> where needed. Changed printf formaters to match argument types (%lx instead of %x). Casted some types to make the compiler happy. Mostly pointer<->ulong. * [graphics/win16drv/init.c] Fixed uninitialized variable. * [include/msdos.h] Added <sys/types.h> needed for <dirent.h>. * [include/sigcontext.h] Combined a common NetBSD & FreeBSD #ifdef, and added in OpenBSD. Casted EIP_sig/ESP_sig to be unsigned long (declared as 'int' in *BSD). * [misc/crtdll.c] [misc/lstr.c] Casted last argument in v*printf() to be va_list. This code seems to make BIG assumptions about the implementation of va_list. * [misc/ver.c] Fixed impossible if() expression (unsigned < 0). * [misc/winsock.c] Removed semicolon on the end of an if() statement. * [windows/mdi.c] Changed a counter/index to unsigned since it was complaining about signed/unsigned comparison and didn't need to be negative. Wed Apr 16 17:43:19 1997 Georg Beyerle <gbeyerle@awi-potsdam.de> * [scheduler/thread.c] Minor fix in thread database initialization. Wed Apr 16 17:28:05 1997 Andreas Mohr <100.30936@germany.net> * [files/file.c] Fixed FILE_FillInfo() to omit the archive flag when handling a DOS directory entry. |
||
---|---|---|
.. | ||
arch.c | ||
libres.c | ||
Makefile.in | ||
miscstubs.c | ||
README.resources | ||
sup.c | ||
winestub.c |
This is a short discussion of resources in WineLib. Introduction Resources are used to store dialogs, menus, bitmaps, icons, version information, strings, fonts, and accelerators. In a Win3.1 programming environment, there are three file formats for resources: - the RC script, which is human-readable and can be processed by a resource compiler - the .RES file, which is the output of the resource compiler - the .EXE and .DLL files, which store resources as a part of the NE file format For WineLib, only a part of this is supported. In particular, there is no .RES file, the executable is not a NE file (as it is a native Unix executable), and some resource types are not implemented: icons, version information, strings, and fonts. Building a WineLib application The build process assumes that the C source files and the resource script is available. At the moment, a single resource script is recommended. This script is processed by winerc: 1) the preprocessor is used to resolve symbolic style name (LBS_STANDARD, ...) into numbers. This involves processing windows.h 2) the unused parts of windows.h (type definitions) are removed. This would not be necessary if Wine's windows.h would use the RC_INVOKED macro. 3) winerc is invoked to create a binary representation of the resources. This representation is stored as C source code (arrays). 4) gcc is used to compile the generated C code. Now, each resource is available as a C array to the application. As the executable is not in the NE format, it is not possible to retrieve resource locations in the executable via name. Instead, the resources have to be referenced with their generated C array names. The linker then resolves these names in the compiled resource file. 5) The program sources are compiled and linked with the output of step 4. A sample build process is in toolkit/Makefile:hello3. Required changes to the program sources Because loading the resources from an instance handle is not possible, the *Indirect functions have to be used to load a resource. The C arrays can be directly passed to the *Indirect functions. So, instead of writing hMenu=LoadMenu(hInstance,"MAIN"); write hMenu=LoadMenuIndirect(hello3_MENU_MAIN.bytes); Fortunately, the Windows API has the following functions available: DialogBoxIndirect CreateDialogIndirect DialogBoxIndirectParam CreateDialogIndirectParam LoadMenuIndirect SetDIBitsToDevice Sample code is available in hello3.c. hello3res.c contains the corresponding resources. Keeping a common source Clearly, changing the sources is not very desirable, and suggestions how to reduce the amount of work are welcome. In the meantime, two approaches allow at least to remain a common source between the Win3.1 code and the WineLib code: 1) conditional compiles: When compiling a WineLib application, WINELIB is defined. This can be used to select Wine-specific code. 2) usage of winerc for Windows: The *Indirect functions are available on plain Win3.1, and the resource format is fully compatible. Thus, recompiling sources modified for WineLib on Win3.1 is possible and known to work. Open problems 1) Icons and cursors: For these resources, there is no *Indirect function documented. In addition, both are implemented by a set of two resources. This is the reason why they are not supported by winerc. 2) Accelerators: Although winerc supports accelerators, there is no LoadAcceleratorIndirect function. A work-around would be to define one. 3) Fonts: Font resources are not supported by Wine at all. 4) String tables: Although string tables are not supported by winerc, there is no reason not to add such support. Again, some indirect loading would be necessary. 5) API requires loading by name: At some places, the name of a resource is passed instead of a handle. The WNDCLASS structure contains the name of a menu resource, and the icon in a dialog box is referenced by its name. (Are there some more places?) Clearly, loading the resource by name would be highly desirable. The resource compiler currently creates a structure containing all resources defined in an RC file. However, it is not clear how WINELIB could find the location of this structure, especially, when there is more than one RC file.