Release 940722
Mon Jul 18 23:55:13 MET DST 1994 * [if1632/call.S] CallTo16(): added `mov %eax,%edx' just before lcall, to make sure that DX contain the DLL's hinstance when initialised. CallTo32_16() added, equal to CallTo32() except for one thing: it saves DX and * [tools/build.c] Added some code to support 16 and 32 bit return values. * [1632/{kernel,user}.spec] Changed most of the `pascal' style to pascal_16 when function returned a 16bit value. Tue Jul 19 18:40:25 1994 Alexandre Julliard (julliard@lamisun.epfl.ch) * [controls/menu.c] Reorganized sizing and drawing code to implement multi-line menus. Implemented MENUBREAK style. Use system colors to draw menus. * [objects/color.c] Bug fix in COLOR_IsSolid(). * [objects/font.c] Bug fix in FONT_GetMetrics(): calculate average character width only on existing chars (dialogs look much better). * [objects/text.c] Bug fix in DrawText(): use text color to underline mnemonic. * [windows/nonclient.c] Changed WM_NCHITTEST handling to cope with multi-line menu bars. * [windows/syscolor.c] Added system objects for menu colors. Mon Jul 18 19:32:08 PDT 1994 Andrew Lagodzinski (andrew@netcom.com) * [controls/menu.c] Fixed bug in SelectPrevItem that caused seperators to not be skipped when using the up arrow key.
This commit is contained in:
parent
2d159fb707
commit
f720725904
47
ChangeLog
47
ChangeLog
|
@ -1,3 +1,50 @@
|
|||
----------------------------------------------------------------------
|
||||
Mon Jul 18 23:55:13 MET DST 1994
|
||||
|
||||
* [if1632/call.S]
|
||||
CallTo16(): added `mov %eax,%edx' just before lcall,
|
||||
to make sure that DX contain the DLL's hinstance when
|
||||
initialised.
|
||||
|
||||
CallTo32_16() added, equal to CallTo32() except for
|
||||
one thing: it saves DX and
|
||||
|
||||
* [tools/build.c]
|
||||
Added some code to support 16 and 32 bit return values.
|
||||
|
||||
* [1632/{kernel,user}.spec]
|
||||
Changed most of the `pascal' style to pascal_16 when
|
||||
function returned a 16bit value.
|
||||
|
||||
Tue Jul 19 18:40:25 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
|
||||
|
||||
* [controls/menu.c]
|
||||
Reorganized sizing and drawing code to implement multi-line menus.
|
||||
Implemented MENUBREAK style.
|
||||
Use system colors to draw menus.
|
||||
|
||||
* [objects/color.c]
|
||||
Bug fix in COLOR_IsSolid().
|
||||
|
||||
* [objects/font.c]
|
||||
Bug fix in FONT_GetMetrics(): calculate average character width
|
||||
only on existing chars (dialogs look much better).
|
||||
|
||||
* [objects/text.c]
|
||||
Bug fix in DrawText(): use text color to underline mnemonic.
|
||||
|
||||
* [windows/nonclient.c]
|
||||
Changed WM_NCHITTEST handling to cope with multi-line menu bars.
|
||||
|
||||
* [windows/syscolor.c]
|
||||
Added system objects for menu colors.
|
||||
|
||||
Mon Jul 18 19:32:08 PDT 1994 Andrew Lagodzinski (andrew@netcom.com)
|
||||
|
||||
* [controls/menu.c]
|
||||
Fixed bug in SelectPrevItem that caused seperators to not be
|
||||
skipped when using the up arrow key.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Thu Jul 14 17:50:45 1994 Bob Amstadt (bob@pooh)
|
||||
|
||||
|
|
959
controls/menu.c
959
controls/menu.c
File diff suppressed because it is too large
Load Diff
|
@ -37,7 +37,7 @@ static WNDCLASS WIDGETS_BuiltinClasses[] =
|
|||
{ CS_GLOBALCLASS, (LONG(*)())EditWndProc, 0, 4,
|
||||
0, 0, 0, 0, NULL, "EDIT" },
|
||||
{ CS_GLOBALCLASS | CS_SAVEBITS, (LONG(*)())PopupMenuWndProc, 0, 8,
|
||||
0, 0, 0, 0, NULL, "POPUPMENU" },
|
||||
0, 0, 0, 0, NULL, POPUPMENU_CLASS_NAME },
|
||||
{ CS_GLOBALCLASS, (LONG(*)())DesktopWndProc, 0, sizeof(DESKTOPINFO),
|
||||
0, 0, 0, 0, NULL, DESKTOP_CLASS_NAME },
|
||||
{ CS_GLOBALCLASS, (LONG(*)())DefDlgProc, 0, DLGWINDOWEXTRA,
|
||||
|
|
100
if1632/call.S
100
if1632/call.S
|
@ -190,6 +190,7 @@ _CallTo16:
|
|||
* Call entry point
|
||||
*/
|
||||
movw %ax,%ds
|
||||
movw %ax,%di
|
||||
.byte 0x66
|
||||
lcall %fs:(%edx)
|
||||
|
||||
|
@ -284,11 +285,16 @@ _CallTo32:
|
|||
/*
|
||||
* Call entry point
|
||||
*/
|
||||
pushl %edx
|
||||
pushw _IF1632_Saved16_ss
|
||||
pushw _IF1632_Saved16_esp
|
||||
pushl %eax
|
||||
call _DLLRelay
|
||||
|
||||
popl %edx
|
||||
popl %edx
|
||||
popl %edx
|
||||
|
||||
/*
|
||||
* Restore registers, but do not destroy return value.
|
||||
*/
|
||||
|
@ -327,6 +333,7 @@ noargs:
|
|||
/*
|
||||
* Last, but not least we need to move the high word from eax to dx
|
||||
*/
|
||||
|
||||
pushl %eax
|
||||
popw %dx
|
||||
popw %dx
|
||||
|
@ -334,6 +341,99 @@ noargs:
|
|||
.byte 0x66
|
||||
lret
|
||||
|
||||
/**********************************************************************
|
||||
* CallTo32_16()
|
||||
*
|
||||
* This function is same one as CallTo32() except that the high
|
||||
* word of EAX won't be moved to DX.
|
||||
*/
|
||||
.align 4
|
||||
.globl _CallTo32_16
|
||||
_CallTo32_16:
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
|
||||
/*
|
||||
* Save registers. 286 mode does not have fs or gs.
|
||||
*/
|
||||
pushw %ds
|
||||
pushw %es
|
||||
|
||||
/*
|
||||
* Restore segment registers.
|
||||
*/
|
||||
pushl %eax
|
||||
movw $UDATASEL,%ax
|
||||
movw %ax,%ds
|
||||
movw %ax,%es
|
||||
popl %eax
|
||||
|
||||
/*
|
||||
* Save old stack save variables, save stack registers, reload
|
||||
* stack registers.
|
||||
*/
|
||||
pushl _IF1632_Saved16_esp
|
||||
pushl _IF1632_Saved16_ebp
|
||||
pushw _IF1632_Saved16_ss
|
||||
|
||||
movw %ss,_IF1632_Saved16_ss
|
||||
movl %esp,_IF1632_Saved16_esp
|
||||
movl %ebp,_IF1632_Saved16_ebp
|
||||
|
||||
movw _IF1632_Saved32_ss,%ss
|
||||
movl _IF1632_Saved32_esp,%esp
|
||||
movl _IF1632_Saved32_ebp,%ebp
|
||||
|
||||
/*
|
||||
* Call entry point
|
||||
*/
|
||||
pushl %edx
|
||||
pushw _IF1632_Saved16_ss
|
||||
pushw _IF1632_Saved16_esp
|
||||
pushl %eax
|
||||
call _DLLRelay
|
||||
|
||||
popl %edx
|
||||
popl %edx
|
||||
popl %edx
|
||||
|
||||
/*
|
||||
* Restore registers, but do not destroy return value.
|
||||
*/
|
||||
movw _IF1632_Saved16_ss,%ss
|
||||
movl _IF1632_Saved16_esp,%esp
|
||||
movl _IF1632_Saved16_ebp,%ebp
|
||||
|
||||
popw _IF1632_Saved16_ss
|
||||
popl _IF1632_Saved16_ebp
|
||||
popl _IF1632_Saved16_esp
|
||||
|
||||
popw %es
|
||||
popw %ds
|
||||
|
||||
.align 2,0x90
|
||||
leave
|
||||
/*
|
||||
* Now we need to ditch the parameter bytes that were left on the
|
||||
* stack. We do this by effectively popping the number of bytes,
|
||||
* and the return address, removing the parameters and then putting
|
||||
* the return address back on the stack.
|
||||
* Normally this field is filled in by the relevant function in
|
||||
* the emulation library, since it should know how many bytes to
|
||||
* expect.
|
||||
*/
|
||||
popw %gs:nbytes
|
||||
cmpw $0,%gs:nbytes
|
||||
je noargs2
|
||||
popw %gs:offset
|
||||
popw %gs:selector
|
||||
addw %gs:nbytes,%esp
|
||||
pushw %gs:selector
|
||||
pushw %gs:offset
|
||||
noargs2:
|
||||
.byte 0x66
|
||||
lret
|
||||
|
||||
/**********************************************************************
|
||||
* ReturnFromRegisterFunc()
|
||||
*/
|
||||
|
|
|
@ -7,26 +7,26 @@ length 415
|
|||
#1 FATALEXIT
|
||||
#2 EXITKERNEL
|
||||
3 pascal GetVersion() GetVersion()
|
||||
4 pascal LocalInit(word word word) WIN16_LocalInit(1 2 3)
|
||||
5 pascal LocalAlloc(word word) WIN16_LocalAlloc(1 2)
|
||||
6 pascal LocalReAlloc(word word word) WIN16_LocalReAlloc(1 2 3)
|
||||
7 pascal LocalFree(word) WIN16_LocalFree(1)
|
||||
4 pascal16 LocalInit(word word word) WIN16_LocalInit(1 2 3)
|
||||
5 pascal16 LocalAlloc(word word) WIN16_LocalAlloc(1 2)
|
||||
6 pascal16 LocalReAlloc(word word word) WIN16_LocalReAlloc(1 2 3)
|
||||
7 pascal16 LocalFree(word) WIN16_LocalFree(1)
|
||||
8 pascal LocalLock(word) WIN16_LocalLock(1)
|
||||
9 pascal LocalUnlock(word) WIN16_LocalUnlock(1)
|
||||
9 pascal16 LocalUnlock(word) WIN16_LocalUnlock(1)
|
||||
10 pascal LocalSize(word) WIN16_LocalSize(1)
|
||||
11 pascal LocalHandle(word) ReturnArg(1)
|
||||
12 pascal LocalFlags(word) WIN16_LocalFlags(1)
|
||||
13 pascal LocalCompact(word) WIN16_LocalCompact(1)
|
||||
11 pascal16 LocalHandle(word) ReturnArg(1)
|
||||
12 pascal16 LocalFlags(word) WIN16_LocalFlags(1)
|
||||
13 pascal16 LocalCompact(word) WIN16_LocalCompact(1)
|
||||
14 return LocalNotify 4 0
|
||||
15 pascal GlobalAlloc(word long) WIN16_GlobalAlloc(1 2)
|
||||
16 pascal GlobalReAlloc(word long word) GlobalReAlloc(1 2 3)
|
||||
17 pascal GlobalFree(word) GlobalFree(1)
|
||||
15 pascal16 GlobalAlloc(word long) WIN16_GlobalAlloc(1 2)
|
||||
16 pascal16 GlobalReAlloc(word long word) GlobalReAlloc(1 2 3)
|
||||
17 pascal16 GlobalFree(word) GlobalFree(1)
|
||||
18 pascal GlobalLock(word) GlobalLock(1)
|
||||
19 pascal GlobalUnlock(word) GlobalUnlock(1)
|
||||
19 pascal16 GlobalUnlock(word) GlobalUnlock(1)
|
||||
20 pascal GlobalSize(word) GlobalSize(1)
|
||||
21 pascal GlobalHandle(word) GlobalHandle(1)
|
||||
22 pascal GlobalFlags(word) GlobalFlags(1)
|
||||
23 pascal LockSegment(s_word) KERNEL_LockSegment(1)
|
||||
22 pascal16 GlobalFlags(word) GlobalFlags(1)
|
||||
23 pascal16 LockSegment(s_word) KERNEL_LockSegment(1)
|
||||
24 pascal UnlockSegment(s_word) KERNEL_UnlockSegment(1)
|
||||
25 pascal GlobalCompact(long) GlobalCompact(1)
|
||||
#26 GLOBALFREEALL
|
||||
|
@ -38,66 +38,66 @@ length 415
|
|||
#33 LOCKCURRENTTASK
|
||||
34 pascal SetTaskQueue(word word) SetTaskQueue(1 2)
|
||||
35 pascal GetTaskQueue(word) GetTaskQueue(1)
|
||||
36 pascal GetCurrentTask() GetCurrentTask()
|
||||
37 pascal GetCurrentPDB() GetCurrentPDB()
|
||||
36 pascal16 GetCurrentTask() GetCurrentTask()
|
||||
37 pascal16 GetCurrentPDB() GetCurrentPDB()
|
||||
#38 SETTASKSIGNALPROC
|
||||
#41 ENABLEDOS
|
||||
#42 DISABLEDOS
|
||||
45 pascal LoadModule(ptr ptr) LoadModule(1 2)
|
||||
46 pascal FreeModule(word) FreeLibrary(1)
|
||||
47 pascal GetModuleHandle(ptr) GetModuleHandle(1)
|
||||
48 pascal GetModuleUsage(word) GetModuleUsage(1)
|
||||
49 pascal GetModuleFileName(word ptr s_word) GetModuleFileName(1 2 3)
|
||||
45 pascal16 LoadModule(ptr ptr) LoadModule(1 2)
|
||||
46 pascal16 FreeModule(word) FreeLibrary(1)
|
||||
47 pascal16 GetModuleHandle(ptr) GetModuleHandle(1)
|
||||
48 pascal16 GetModuleUsage(word) GetModuleUsage(1)
|
||||
49 pascal16 GetModuleFileName(word ptr s_word) GetModuleFileName(1 2 3)
|
||||
50 pascal GetProcAddress(word ptr) GetProcAddress(1 2)
|
||||
51 pascal MakeProcInstance(ptr word) CALLBACK_MakeProcInstance(1 2)
|
||||
52 pascal FreeProcInstance(ptr) FreeProcInstance(1)
|
||||
#53 CALLPROCINSTANCE
|
||||
#54 GETINSTANCEDATA
|
||||
55 pascal Catch(ptr) Catch (1)
|
||||
#54 pascal16 GETINSTANCEDATA
|
||||
55 pascal16 Catch(ptr) Catch (1)
|
||||
56 pascal Throw(ptr word) Throw(1 2)
|
||||
57 pascal GetProfileInt(ptr ptr word) GetProfileInt(1 2 3)
|
||||
58 pascal GetProfileString(ptr ptr ptr ptr word) GetProfileString(1 2 3 4 5)
|
||||
59 pascal WriteProfileString(ptr ptr ptr) WriteProfileString(1 2 3)
|
||||
60 pascal FindResource(word ptr ptr) FindResource(1 2 3)
|
||||
61 pascal LoadResource(word word) LoadResource(1 2)
|
||||
57 pascal16 GetProfileInt(ptr ptr word) GetProfileInt(1 2 3)
|
||||
58 pascal16 GetProfileString(ptr ptr ptr ptr word) GetProfileString(1 2 3 4 5)
|
||||
59 pascal16 WriteProfileString(ptr ptr ptr) WriteProfileString(1 2 3)
|
||||
60 pascal16 FindResource(word ptr ptr) FindResource(1 2 3)
|
||||
61 pascal16 LoadResource(word word) LoadResource(1 2)
|
||||
62 pascal LockResource(word) LockResource(1)
|
||||
63 pascal FreeResource(word) FreeResource(1)
|
||||
64 pascal AccessResource(word word) AccessResource(1 2)
|
||||
63 pascal16 FreeResource(word) FreeResource(1)
|
||||
64 pascal16 AccessResource(word word) AccessResource(1 2)
|
||||
65 pascal SizeofResource(word word) SizeofResource(1 2)
|
||||
66 pascal AllocResource(word word long) AllocResource(1 2 3)
|
||||
66 pascal16 AllocResource(word word long) AllocResource(1 2 3)
|
||||
#67 SETRESOURCEHANDLER
|
||||
68 pascal InitAtomTable(word) InitAtomTable(1)
|
||||
69 pascal FindAtom(ptr) FindAtom(1)
|
||||
70 pascal AddAtom(ptr) AddAtom(1)
|
||||
71 pascal DeleteAtom(word) DeleteAtom(1)
|
||||
72 pascal GetAtomName(word ptr word) GetAtomName(1 2 3)
|
||||
73 pascal GetAtomHandle(word) GetAtomHandle(1)
|
||||
74 pascal OpenFile(ptr ptr word) OpenFile(1 2 3)
|
||||
68 pascal16 InitAtomTable(word) InitAtomTable(1)
|
||||
69 pascal16 FindAtom(ptr) FindAtom(1)
|
||||
70 pascal16 AddAtom(ptr) AddAtom(1)
|
||||
71 pascal16 DeleteAtom(word) DeleteAtom(1)
|
||||
72 pascal16 GetAtomName(word ptr word) GetAtomName(1 2 3)
|
||||
73 pascal16 GetAtomHandle(word) GetAtomHandle(1)
|
||||
74 pascal16 OpenFile(ptr ptr word) OpenFile(1 2 3)
|
||||
#75 OPENPATHNAME
|
||||
#76 DELETEPATHNAME
|
||||
#77 RESERVED1
|
||||
#78 RESERVED2
|
||||
#79 RESERVED3
|
||||
#80 RESERVED4
|
||||
81 pascal _lclose(word) _lclose(1)
|
||||
82 pascal _lread(word ptr word) _lread(1 2 3)
|
||||
83 pascal _lcreat(ptr word) _lcreat(1 2)
|
||||
81 pascal16 _lclose(word) _lclose(1)
|
||||
82 pascal16 _lread(word ptr word) _lread(1 2 3)
|
||||
83 pascal16 _lcreat(ptr word) _lcreat(1 2)
|
||||
84 pascal _llseek(word long word) _llseek(1 2 3)
|
||||
85 pascal _lopen(ptr word) _lopen(1 2)
|
||||
86 pascal _lwrite(word ptr word) _lwrite(1 2 3)
|
||||
85 pascal16 _lopen(ptr word) _lopen(1 2)
|
||||
86 pascal16 _lwrite(word ptr word) _lwrite(1 2 3)
|
||||
#87 RESERVED5
|
||||
88 pascal lstrcpy(ptr ptr) lstrcpy(1 2)
|
||||
89 pascal lstrcat(ptr ptr) lstrcat(1 2)
|
||||
90 pascal lstrlen(ptr) lstrlen(1)
|
||||
90 pascal16 lstrlen(ptr) lstrlen(1)
|
||||
91 register InitTask(word word word word word
|
||||
word word word word word)
|
||||
KERNEL_InitTask()
|
||||
92 pascal GetTempDrive(byte) GetTempDrive(1)
|
||||
#93 GETCODEHANDLE
|
||||
92 pascal16 GetTempDrive(byte) GetTempDrive(1)
|
||||
#93 pascal16 GETCODEHANDLE
|
||||
#94 DEFINEHANDLETABLE
|
||||
95 pascal LoadLibrary(ptr) LoadLibrary(1)
|
||||
96 pascal FreeLibrary(word) FreeLibrary(1)
|
||||
97 pascal GetTempFileName(byte ptr word ptr) GetTempFileName(1 2 3 4)
|
||||
95 pascal16 LoadLibrary(ptr) LoadLibrary(1)
|
||||
96 pascal16 FreeLibrary(word) FreeLibrary(1)
|
||||
97 pascal16 GetTempFileName(byte ptr word ptr) GetTempFileName(1 2 3 4)
|
||||
#98 GETLASTDISKCHANGE
|
||||
#99 GETLPERRMODE
|
||||
#100 VALIDATECODESEGMENTS
|
||||
|
@ -114,9 +114,9 @@ length 415
|
|||
#109 SWITCHSTACKBACK
|
||||
#110 PATCHCODEHANDLE
|
||||
111 pascal GlobalWire(word) GlobalLock(1)
|
||||
112 pascal GlobalUnWire(word) GlobalUnlock(1)
|
||||
#113 __AHSHIFT
|
||||
#114 __AHINCR
|
||||
112 pascal16 GlobalUnWire(word) GlobalUnlock(1)
|
||||
113 equate __AHSHIFT 3
|
||||
114 equate __AHINCR 8
|
||||
115 pascal OutputDebugString(ptr) OutputDebugString(1)
|
||||
#116 INITLIB
|
||||
117 return OldYield 0 0
|
||||
|
@ -129,19 +129,19 @@ length 415
|
|||
#124 ENABLEKERNEL
|
||||
#125 DISABLEKERNEL
|
||||
#126 MEMORYFREED
|
||||
127 pascal GetPrivateProfileInt(ptr ptr s_word ptr)
|
||||
GetPrivateProfileInt(1 2 3 4)
|
||||
128 pascal GetPrivateProfileString(ptr ptr ptr ptr s_word ptr)
|
||||
GetPrivateProfileString(1 2 3 4 5 6)
|
||||
129 pascal WritePrivateProfileString(ptr ptr ptr ptr)
|
||||
WritePrivateProfileString(1 2 3 4)
|
||||
127 pascal16 GetPrivateProfileInt(ptr ptr s_word ptr)
|
||||
GetPrivateProfileInt(1 2 3 4)
|
||||
128 pascal16 GetPrivateProfileString(ptr ptr ptr ptr s_word ptr)
|
||||
GetPrivateProfileString(1 2 3 4 5 6)
|
||||
129 pascal16 WritePrivateProfileString(ptr ptr ptr ptr)
|
||||
WritePrivateProfileString(1 2 3 4)
|
||||
#130 FILECBR
|
||||
131 pascal GetDOSEnvironment() GetDOSEnvironment()
|
||||
132 pascal GetWinFlags() GetWinFlags()
|
||||
#133 GETEXEPTR
|
||||
134 pascal GetWindowsDirectory(ptr word) GetWindowsDirectory(1 2)
|
||||
135 pascal GetSystemDirectory(ptr word) GetSystemDirectory(1 2)
|
||||
136 pascal GetDriveType(byte) GetDriveType(1)
|
||||
134 pascal16 GetWindowsDirectory(ptr word) GetWindowsDirectory(1 2)
|
||||
135 pascal16 GetSystemDirectory(ptr word) GetSystemDirectory(1 2)
|
||||
136 pascal16 GetDriveType(byte) GetDriveType(1)
|
||||
137 pascal FatalAppExit(word ptr) FatalAppExit(1 2)
|
||||
#138 GETHEAPSPACES - This is not correct but may fake out most apps
|
||||
138 return GetHeapSpaces 2 0x80004000
|
||||
|
@ -150,7 +150,7 @@ length 415
|
|||
#141 INITTASK1
|
||||
150 return DirectedYield 2 0
|
||||
#151 WINOLDAPCALL
|
||||
152 pascal GetNumTasks() GetNumTasks()
|
||||
152 pascal16 GetNumTasks() GetNumTasks()
|
||||
154 return GlobalNotify 4 0
|
||||
#155 GETTASKDS
|
||||
#156 LIMITEMSPAGES
|
||||
|
@ -160,10 +160,10 @@ length 415
|
|||
#160 EMSCOPY
|
||||
#161 LOCALCOUNTFREE
|
||||
#162 LOCALHEAPSIZE
|
||||
163 pascal GlobalLRUOldest(word) ReturnArg(1)
|
||||
164 pascal GlobalLRUNewest(word) ReturnArg(1)
|
||||
163 pascal16 GlobalLRUOldest(word) ReturnArg(1)
|
||||
164 pascal16 GlobalLRUNewest(word) ReturnArg(1)
|
||||
#165 A20PROC
|
||||
166 pascal WinExec(ptr word) WinExec(1 2)
|
||||
166 pascal16 WinExec(ptr word) WinExec(1 2)
|
||||
#167 GETEXPWINVER
|
||||
#168 DIRECTRESALLOC
|
||||
169 pascal GetFreeSpace(word) GetFreeSpace(1)
|
||||
|
@ -172,9 +172,9 @@ length 415
|
|||
#172 ALLOCALIAS
|
||||
#173 __ROMBIOS
|
||||
#174 __A000H
|
||||
175 pascal AllocSelector(word) AllocSelector(1)
|
||||
176 pascal FreeSelector(word) FreeSelector(1)
|
||||
177 pascal PrestoChangoSelector(word word) PrestoChangoSelector(1 2)
|
||||
175 pascal16 AllocSelector(word) AllocSelector(1)
|
||||
176 pascal16 FreeSelector(word) FreeSelector(1)
|
||||
177 pascal16 PrestoChangoSelector(word word) PrestoChangoSelector(1 2)
|
||||
178 equate __WINFLAGS 0x413
|
||||
#179 __D000H
|
||||
#180 LONGPTRADD
|
||||
|
@ -183,10 +183,10 @@ length 415
|
|||
#183 __0000H
|
||||
184 return GlobalDOSAlloc 4 0
|
||||
185 return GlobalDOSFree 2 0
|
||||
186 pascal GetSelectorBase(word) GetSelectorBase(1)
|
||||
187 pascal SetSelectorBase(word long) SetSelectorBase(1 2)
|
||||
186 pascal16 GetSelectorBase(word) GetSelectorBase(1)
|
||||
187 pascal16 SetSelectorBase(word long) SetSelectorBase(1 2)
|
||||
188 pascal GetSelectorLimit(word) GetSelectorLimit(1)
|
||||
189 pascal SetSelectorLimit(word long) SetSelectorLimit(1 2)
|
||||
189 pascal16 SetSelectorLimit(word long) SetSelectorLimit(1 2)
|
||||
#190 __E000H
|
||||
191 pascal GlobalPageLock(word) GlobalLock(1)
|
||||
192 pascal GlobalPageUnlock(word) GlobalUnlock(1)
|
||||
|
@ -196,7 +196,7 @@ length 415
|
|||
#196 SELECTORACCESSRIGHTS
|
||||
197 pascal GlobalFix(word) GlobalLock(1)
|
||||
198 pascal GlobalUnfix(word) GlobalUnlock(1)
|
||||
199 pascal SetHandleCount(word) SetHandleCount(1)
|
||||
199 pascal16 SetHandleCount(word) SetHandleCount(1)
|
||||
#200 VALIDATEFREESPACES
|
||||
#201 REPLACEINST
|
||||
#202 REGISTERPTRACE
|
||||
|
@ -236,8 +236,8 @@ length 415
|
|||
#346 ISBADHUGEREADPTR
|
||||
#347 ISBADHUGEWRITEPTR
|
||||
348 pascal hmemcpy(ptr ptr long) hmemcpy(1 2 3)
|
||||
349 pascal _hread(word ptr long) _hread(1 2 3)
|
||||
350 pascal _hwrite(word ptr long) _hwrite(1 2 3)
|
||||
349 pascal16 _hread(word ptr long) _hread(1 2 3)
|
||||
350 pascal16 _hwrite(word ptr long) _hwrite(1 2 3)
|
||||
#351 BUNNY_351
|
||||
353 pascal lstrcpyn(ptr ptr word) lstrcpyn(1 2 3)
|
||||
#354 GETAPPCOMPATFLAGS
|
||||
|
|
|
@ -178,7 +178,7 @@ length 540
|
|||
173 pascal LoadCursor(word ptr) LoadCursor(1 2)
|
||||
174 pascal LoadIcon(word ptr) LoadIcon(1 2)
|
||||
175 pascal LoadBitmap(word ptr) LoadBitmap(1 2)
|
||||
176 pascal LoadString(word word ptr s_word) LoadString(1 2 3 4)
|
||||
176 pascal16 LoadString(word word ptr s_word) LoadString(1 2 3 4)
|
||||
177 pascal LoadAccelerators(word ptr) LoadAccelerators(1 2)
|
||||
178 pascal TranslateAccelerator(word word ptr) TranslateAccelerator(1 2 3)
|
||||
179 pascal GetSystemMetrics(word) GetSystemMetrics(1)
|
||||
|
@ -228,9 +228,9 @@ length 540
|
|||
220 pascal LoadMenuIndirect(ptr) LoadMenuIndirect(1)
|
||||
221 pascal ScrollDC(word s_word s_word ptr ptr word ptr)
|
||||
ScrollDC(1 2 3 4 5 6 7)
|
||||
222 pascal GetKeyboardState(ptr) GetKeyboardState(1)
|
||||
222 pascal16 GetKeyboardState(ptr) GetKeyboardState(1)
|
||||
#223 SETKEYBOARDSTATE
|
||||
224 pascal GetWindowTask(word) GetWindowTask(1)
|
||||
224 pascal16 GetWindowTask(word) GetWindowTask(1)
|
||||
225 pascal EnumTaskWindows(word ptr long) EnumTaskWindows(1 2 3)
|
||||
#226 LOCKINPUT
|
||||
227 pascal GetNextDlgGroupItem(word word word) GetNextDlgGroupItem(1 2 3)
|
||||
|
@ -294,7 +294,7 @@ length 540
|
|||
281 pascal GetSysColorBrush(word) GetSysColorBrush(1)
|
||||
282 pascal SelectPalette(word word word) SelectPalette(1 2 3)
|
||||
283 pascal RealizePalette(word) RealizePalette(1)
|
||||
284 pascal GetFreeSystemResources(word) GetFreeSystemResources(1)
|
||||
284 pascal16 GetFreeSystemResources(word) GetFreeSystemResources(1)
|
||||
#285 BEAR285
|
||||
286 pascal GetDesktopWindow() GetDesktopWindow()
|
||||
#287 GETLASTACTIVEPOPUP
|
||||
|
@ -366,15 +366,15 @@ length 540
|
|||
421 pascal wvsprintf(ptr ptr ptr) wvsprintf(1 2 3)
|
||||
#422 DLGDIRSELECTEX
|
||||
#423 DLGDIRSELECTCOMBOBOXEX
|
||||
430 pascal lstrcmp(ptr ptr) lstrcmp(1 2)
|
||||
430 pascal16 lstrcmp(ptr ptr) lstrcmp(1 2)
|
||||
431 pascal AnsiUpper(ptr) AnsiUpper(1)
|
||||
432 pascal AnsiLower(ptr) AnsiLower(1)
|
||||
433 pascal IsCharAlpha(byte) IsCharAlpha(1)
|
||||
434 pascal IsCharAlphanumeric(byte) IsCharAlphanumeric(1)
|
||||
435 pascal IsCharUpper(byte) IsCharUpper(1)
|
||||
436 pascal IsCharLower(byte) IsCharLower(1)
|
||||
437 pascal AnsiUpperBuff(ptr word) AnsiUpperBuff(1 2)
|
||||
438 pascal AnsiLowerBuff(ptr word) AnsiLowerBuff(1 2)
|
||||
433 pascal16 IsCharAlpha(byte) IsCharAlpha(1)
|
||||
434 pascal16 IsCharAlphanumeric(byte) IsCharAlphanumeric(1)
|
||||
435 pascal16 IsCharUpper(byte) IsCharUpper(1)
|
||||
436 pascal16 IsCharLower(byte) IsCharLower(1)
|
||||
437 pascal16 AnsiUpperBuff(ptr word) AnsiUpperBuff(1 2)
|
||||
438 pascal16 AnsiLowerBuff(ptr word) AnsiLowerBuff(1 2)
|
||||
445 pascal DefFrameProc(word word word word long) DefFrameProc(1 2 3 4 5)
|
||||
447 pascal DefMDIChildProc(word word word long) DefMDIChildProc(1 2 3 4)
|
||||
451 pascal TranslateMDISysAccel(word ptr) TranslateMDISysAccel(1 2)
|
||||
|
@ -395,7 +395,7 @@ length 540
|
|||
#465 DRAGDETECT
|
||||
466 pascal DrawFocusRect(word ptr) DrawFocusRect(1 2)
|
||||
#470 STRINGFUNC
|
||||
471 pascal lstrcmpi(ptr ptr) lstrcmpi(1 2)
|
||||
471 pascal16 lstrcmpi(ptr ptr) lstrcmpi(1 2)
|
||||
472 pascal AnsiNext(ptr) AnsiNext(1 )
|
||||
473 pascal AnsiPrev(ptr ptr) AnsiPrev(1 2)
|
||||
#480 GETUSERLOCALOBJTYPE
|
||||
|
@ -415,13 +415,13 @@ length 540
|
|||
#509 WNETUNWATCHQUEUE
|
||||
#510 WNETLOCKQUEUEDATA
|
||||
#511 WNETUNLOCKQUEUEDATA
|
||||
512 pascal WNetGetConnection(ptr ptr ptr) WNetGetConnection(1 2 3)
|
||||
512 pascal16 WNetGetConnection(ptr ptr ptr) WNetGetConnection(1 2 3)
|
||||
513 pascal WNetGetCaps(word) WNetGetCaps(1)
|
||||
#514 WNETDEVICEMODE
|
||||
#515 WNETBROWSEDIALOG
|
||||
516 pascal WNetGetUser(ptr ptr ptr) WNetGetUser(1 2 3)
|
||||
517 pascal WNetAddConnection(ptr ptr ptr) WNetAddConnection(1 2 3)
|
||||
518 pascal WNetCancelConnection(ptr word) WNetCancelConnection(1 2)
|
||||
517 pascal16 WNetAddConnection(ptr ptr ptr) WNetAddConnection(1 2 3)
|
||||
518 pascal16 WNetCancelConnection(ptr word) WNetCancelConnection(1 2)
|
||||
#519 WNETGETERROR
|
||||
#520 WNETGETERRORTEXT
|
||||
#521 WNETENABLE
|
||||
|
|
|
@ -15,7 +15,7 @@ struct SysColorObjects
|
|||
/* COLOR_BACKGROUND */
|
||||
HBRUSH hbrushActiveCaption; /* COLOR_ACTIVECAPTION */
|
||||
HBRUSH hbrushInactiveCaption; /* COLOR_INACTIVECAPTION */
|
||||
/* COLOR_MENU */
|
||||
HBRUSH hbrushMenu; /* COLOR_MENU */
|
||||
HBRUSH hbrushWindow; /* COLOR_WINDOW */
|
||||
HPEN hpenWindowFrame; /* COLOR_WINDOWFRAME */
|
||||
/* COLOR_MENUTEXT */
|
||||
|
@ -24,7 +24,7 @@ struct SysColorObjects
|
|||
HBRUSH hbrushActiveBorder; /* COLOR_ACTIVEBORDER */
|
||||
HBRUSH hbrushInactiveBorder; /* COLOR_INACTIVEBORDER */
|
||||
/* COLOR_APPWORKSPACE */
|
||||
/* COLOR_HIGHLIGHT */
|
||||
HBRUSH hbrushHighlight; /* COLOR_HIGHLIGHT */
|
||||
/* COLOR_HIGHLIGHTTEXT */
|
||||
HBRUSH hbrushBtnFace; /* COLOR_BTNFACE */
|
||||
HBRUSH hbrushBtnShadow; /* COLOR_BTNSHADOW */
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||
#include <sys/syscall.h>
|
||||
#include <sys/param.h>
|
||||
#else
|
||||
#include <syscall.h>
|
||||
#endif
|
||||
|
@ -20,13 +21,14 @@
|
|||
#include "prototypes.h"
|
||||
#include "win.h"
|
||||
|
||||
#if !defined(BSD4_4) || defined(linux)
|
||||
char * cstack[4096];
|
||||
#endif
|
||||
struct sigaction segv_act;
|
||||
|
||||
#ifdef linux
|
||||
extern void ___sig_restore();
|
||||
extern void ___masksig_restore();
|
||||
#endif
|
||||
|
||||
/* Similar to the sigaction function in libc, except it leaves alone the
|
||||
restorer field */
|
||||
|
@ -41,6 +43,7 @@ wine_sigaction(int sig,struct sigaction * new, struct sigaction * old)
|
|||
errno = -sig;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
int do_int(int intnum, struct sigcontext_struct *scp)
|
||||
{
|
||||
|
@ -111,7 +114,7 @@ static void win_fault(int signal, int code, struct sigcontext *scp)
|
|||
#endif
|
||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||
/* set_es(0x27); set_ds(0x27); */
|
||||
if(signal != SIGBUS)
|
||||
if(signal != SIGBUS && signal != SIGSEGV && signal != SIGTRAP)
|
||||
exit(1);
|
||||
if(scp->sc_cs == 0x1f)
|
||||
{
|
||||
|
@ -181,7 +184,7 @@ static void win_fault(int signal, int code, struct sigcontext *scp)
|
|||
XUngrabServer(display);
|
||||
XFlush(display);
|
||||
fprintf(stderr,"In win_fault %x:%x\n", scp->sc_cs, scp->sc_eip);
|
||||
#ifdef linux
|
||||
#if defined(linux) || defined(__NetBSD__)
|
||||
wine_debug(signal, scp); /* Enter our debugger */
|
||||
#else
|
||||
fprintf(stderr,"Stack: %x:%x\n", scp->sc_ss, scp->sc_esp);
|
||||
|
@ -213,8 +216,23 @@ int init_wine_signals(void)
|
|||
wine_sigaction(SIGTRAP, &segv_act, NULL); /* For breakpoints */
|
||||
#endif
|
||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||
struct sigstack ss;
|
||||
sigset_t sig_mask;
|
||||
#ifdef BSD4_4
|
||||
struct sigaltstack ss;
|
||||
|
||||
if ((ss.ss_base = malloc(MINSIGSTKSZ)) == NULL) {
|
||||
fprintf(stderr, "Unable to allocate signal stack (%d bytes)\n",
|
||||
MINSIGSTKSZ);
|
||||
exit(1);
|
||||
}
|
||||
ss.ss_size = MINSIGSTKSZ;
|
||||
ss.ss_flags = 0;
|
||||
if (sigaltstack(&ss, NULL) < 0) {
|
||||
perror("sigstack");
|
||||
exit(1);
|
||||
}
|
||||
#else
|
||||
struct sigstack ss;
|
||||
|
||||
ss.ss_sp = (char *) (((unsigned int)(cstack) + sizeof(cstack) - 4) & ~3);
|
||||
ss.ss_onstack = 0;
|
||||
|
@ -222,12 +240,27 @@ int init_wine_signals(void)
|
|||
perror("sigstack");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
sigemptyset(&sig_mask);
|
||||
segv_act.sa_handler = (__sighandler_t) win_fault;
|
||||
segv_act.sa_handler = (void (*)) win_fault;
|
||||
segv_act.sa_flags = SA_ONSTACK;
|
||||
segv_act.sa_mask = sig_mask;
|
||||
if (sigaction(SIGBUS, &segv_act, NULL) < 0) {
|
||||
perror("sigaction");
|
||||
perror("sigaction: SIGBUS");
|
||||
exit(1);
|
||||
}
|
||||
segv_act.sa_handler = (void (*)) win_fault;
|
||||
segv_act.sa_flags = SA_ONSTACK;
|
||||
segv_act.sa_mask = sig_mask;
|
||||
if (sigaction(SIGSEGV, &segv_act, NULL) < 0) {
|
||||
perror("sigaction: SIGSEGV");
|
||||
exit(1);
|
||||
}
|
||||
segv_act.sa_handler = (void (*)) win_fault; /* For breakpoints */
|
||||
segv_act.sa_flags = SA_ONSTACK;
|
||||
segv_act.sa_mask = sig_mask;
|
||||
if (sigaction(SIGTRAP, &segv_act, NULL) < 0) {
|
||||
perror("sigaction: SIGTRAP");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
|
137
misc/audio.c
137
misc/audio.c
|
@ -16,8 +16,11 @@ static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
|||
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#ifdef linux
|
||||
#include <linux/soundcard.h>
|
||||
#endif
|
||||
|
||||
#ifdef linux
|
||||
#define SOUND_DEV "/dev/dsp"
|
||||
|
||||
#ifdef SOUND_VERSION
|
||||
|
@ -66,6 +69,7 @@ typedef struct {
|
|||
static LINUX_WAVEOUT WOutDev[MAX_WAVOUTDRV];
|
||||
static LINUX_WAVEIN WInDev[MAX_WAVOUTDRV];
|
||||
static LINUX_MCIWAVE MCIWavDev[MAX_MCIWAVDRV];
|
||||
#endif
|
||||
|
||||
DWORD WAVE_mciOpen(DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpParms);
|
||||
DWORD WAVE_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms);
|
||||
|
@ -93,6 +97,7 @@ DWORD wodUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize);
|
|||
DWORD WAVE_NotifyClient(UINT wDevID, WORD wMsg,
|
||||
DWORD dwParam1, DWORD dwParam2)
|
||||
{
|
||||
#ifdef linux
|
||||
if (WInDev[wDevID].wFlags != DCB_NULL && !DriverCallback(
|
||||
WInDev[wDevID].waveDesc.dwCallBack, WInDev[wDevID].wFlags,
|
||||
WInDev[wDevID].waveDesc.hWave, wMsg,
|
||||
|
@ -100,6 +105,9 @@ DWORD WAVE_NotifyClient(UINT wDevID, WORD wMsg,
|
|||
printf("WAVE_NotifyClient // can't notify client !\n");
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -109,6 +117,7 @@ DWORD WAVE_NotifyClient(UINT wDevID, WORD wMsg,
|
|||
LRESULT WAVE_DriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
|
||||
DWORD dwParam1, DWORD dwParam2)
|
||||
{
|
||||
#ifdef linux
|
||||
switch(wMsg) {
|
||||
case DRV_LOAD:
|
||||
return (LRESULT)1L;
|
||||
|
@ -159,12 +168,16 @@ LRESULT WAVE_DriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
|
|||
default:
|
||||
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
|
||||
}
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* WAVE_mciOpen */
|
||||
DWORD WAVE_mciOpen(DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
int hFile;
|
||||
UINT wDevID;
|
||||
OFSTRUCT OFstruct;
|
||||
|
@ -223,6 +236,9 @@ DWORD WAVE_mciOpen(DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpParms)
|
|||
dwRet = wodMessage(0, WODM_OPEN, 0, (DWORD)&WaveDesc, CALLBACK_NULL);
|
||||
dwRet = widMessage(0, WIDM_OPEN, 0, (DWORD)&WaveDesc, CALLBACK_NULL);
|
||||
return 0;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -230,6 +246,7 @@ DWORD WAVE_mciOpen(DWORD dwFlags, LPMCI_WAVE_OPEN_PARMS lpParms)
|
|||
*/
|
||||
DWORD WAVE_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
DWORD dwRet;
|
||||
#ifdef DEBUG_MCIWAVE
|
||||
printf("WAVE_mciClose(%u, %08X, %08X);\n", wDevID, dwParam, lpParms);
|
||||
|
@ -246,6 +263,9 @@ DWORD WAVE_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
|
|||
if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL;
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -254,6 +274,7 @@ DWORD WAVE_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
|
|||
*/
|
||||
DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
int count;
|
||||
int start, end;
|
||||
LPWAVEHDR lpWaveHdr;
|
||||
|
@ -323,6 +344,9 @@ DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
|
|||
MCIWavDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -331,6 +355,7 @@ DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
|
|||
*/
|
||||
DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
int count;
|
||||
int start, end;
|
||||
LPWAVEHDR lpWaveHdr;
|
||||
|
@ -382,6 +407,9 @@ DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
|
|||
MCIWavDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -390,11 +418,15 @@ DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
|
|||
*/
|
||||
DWORD WAVE_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_MCIWAVE
|
||||
printf("WAVE_mciStop(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
if (lpParms == NULL) return MCIERR_INTERNAL;
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -403,11 +435,15 @@ DWORD WAVE_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
*/
|
||||
DWORD WAVE_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_MCIWAVE
|
||||
printf("WAVE_mciPause(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
if (lpParms == NULL) return MCIERR_INTERNAL;
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -416,11 +452,15 @@ DWORD WAVE_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
*/
|
||||
DWORD WAVE_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_MCIWAVE
|
||||
printf("WAVE_mciResume(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
if (lpParms == NULL) return MCIERR_INTERNAL;
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -429,6 +469,7 @@ DWORD WAVE_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
*/
|
||||
DWORD WAVE_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_MCIWAVE
|
||||
printf("WAVE_mciSet(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -502,6 +543,9 @@ DWORD WAVE_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
|
|||
printf("WAVE_mciSet // MCI_WAVE_SET_SAMPLESPERSEC !\n");
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -510,6 +554,7 @@ DWORD WAVE_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
|
|||
*/
|
||||
DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_MCIWAVE
|
||||
printf("WAVE_mciStatus(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -601,6 +646,9 @@ DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
|
|||
MCIWavDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -609,6 +657,7 @@ DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
|
|||
DWORD WAVE_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
|
||||
LPMCI_GETDEVCAPS_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("WAVE_mciGetDevCaps(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
if (lpParms == NULL) return MCIERR_INTERNAL;
|
||||
if (dwFlags & MCI_GETDEVCAPS_ITEM) {
|
||||
|
@ -651,6 +700,9 @@ DWORD WAVE_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
|
|||
}
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -658,6 +710,7 @@ DWORD WAVE_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
|
|||
*/
|
||||
DWORD WAVE_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("WAVE_mciInfo(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
if (lpParms == NULL) return MCIERR_INTERNAL;
|
||||
lpParms->lpstrReturn = NULL;
|
||||
|
@ -682,6 +735,9 @@ DWORD WAVE_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms)
|
|||
else
|
||||
lpParms->dwRetSize = 0;
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -693,6 +749,7 @@ DWORD WAVE_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms)
|
|||
*/
|
||||
DWORD wodGetDevCaps(WORD wDevID, LPWAVEOUTCAPS lpCaps, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
int audio;
|
||||
int smplrate;
|
||||
int samplesize = 16;
|
||||
|
@ -739,6 +796,9 @@ DWORD wodGetDevCaps(WORD wDevID, LPWAVEOUTCAPS lpCaps, DWORD dwSize)
|
|||
close(audio);
|
||||
printf("wodGetDevCaps // dwFormats = %08X\n", lpCaps->dwFormats);
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -747,6 +807,7 @@ DWORD wodGetDevCaps(WORD wDevID, LPWAVEOUTCAPS lpCaps, DWORD dwSize)
|
|||
*/
|
||||
DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
|
||||
{
|
||||
#ifdef linux
|
||||
int audio;
|
||||
int abuf_size;
|
||||
int smplrate;
|
||||
|
@ -826,6 +887,9 @@ DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
|
|||
return MMSYSERR_INVALPARAM;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -833,6 +897,7 @@ DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
|
|||
*/
|
||||
DWORD wodClose(WORD wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("wodClose(%u);\n", wDevID);
|
||||
if (WOutDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'wodClose' // can't close !\n");
|
||||
|
@ -846,6 +911,9 @@ DWORD wodClose(WORD wDevID)
|
|||
return MMSYSERR_INVALPARAM;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -853,6 +921,7 @@ DWORD wodClose(WORD wDevID)
|
|||
*/
|
||||
DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("wodWrite(%u, %08X, %08X);\n", wDevID, lpWaveHdr, dwSize);
|
||||
if (WOutDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'wodWrite' // can't play !\n");
|
||||
|
@ -875,6 +944,9 @@ DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
return MMSYSERR_INVALPARAM;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -882,6 +954,7 @@ DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
*/
|
||||
DWORD wodPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("wodPrepare(%u, %08X, %08X);\n", wDevID, lpWaveHdr, dwSize);
|
||||
if (WOutDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'wodPrepare' // can't prepare !\n");
|
||||
|
@ -897,6 +970,9 @@ DWORD wodPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
lpWaveHdr->dwFlags |= WHDR_PREPARED;
|
||||
lpWaveHdr->dwFlags &= ~WHDR_DONE;
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -904,12 +980,16 @@ DWORD wodPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
*/
|
||||
DWORD wodUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("wodUnprepare(%u, %08X, %08X);\n", wDevID, lpWaveHdr, dwSize);
|
||||
if (WOutDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'wodUnprepare' // can't unprepare !\n");
|
||||
return MMSYSERR_NOTENABLED;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -917,12 +997,16 @@ DWORD wodUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
*/
|
||||
DWORD wodRestart(WORD wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("wodRestart(%u);\n", wDevID);
|
||||
if (WOutDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'wodRestart' // can't restart !\n");
|
||||
return MMSYSERR_NOTENABLED;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -930,12 +1014,16 @@ DWORD wodRestart(WORD wDevID)
|
|||
*/
|
||||
DWORD wodReset(WORD wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("wodReset(%u);\n", wDevID);
|
||||
if (WOutDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'wodReset' // can't reset !\n");
|
||||
return MMSYSERR_NOTENABLED;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -944,6 +1032,7 @@ DWORD wodReset(WORD wDevID)
|
|||
*/
|
||||
DWORD wodGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize)
|
||||
{
|
||||
#ifdef linux
|
||||
int time;
|
||||
printf("wodGetPosition(%u, %08X, %u);\n", wDevID, lpTime, uSize);
|
||||
if (WOutDev[wDevID].unixdev == 0) {
|
||||
|
@ -988,6 +1077,9 @@ TryAGAIN:
|
|||
goto TryAGAIN;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -995,6 +1087,7 @@ TryAGAIN:
|
|||
*/
|
||||
DWORD wodSetVolume(WORD wDevID, DWORD dwParam)
|
||||
{
|
||||
#ifdef linux
|
||||
int mixer;
|
||||
int volume = 50;
|
||||
printf("wodSetVolume(%u, %08X);\n", wDevID, dwParam);
|
||||
|
@ -1012,6 +1105,9 @@ DWORD wodSetVolume(WORD wDevID, DWORD dwParam)
|
|||
}
|
||||
close(mixer);
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -1072,6 +1168,7 @@ DWORD wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
|
|||
*/
|
||||
DWORD widGetDevCaps(WORD wDevID, LPWAVEINCAPS lpCaps, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
int audio;
|
||||
int smplrate;
|
||||
int samplesize = 16;
|
||||
|
@ -1117,6 +1214,9 @@ DWORD widGetDevCaps(WORD wDevID, LPWAVEINCAPS lpCaps, DWORD dwSize)
|
|||
close(audio);
|
||||
printf("widGetDevCaps // dwFormats = %08X\n", lpCaps->dwFormats);
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -1125,6 +1225,7 @@ DWORD widGetDevCaps(WORD wDevID, LPWAVEINCAPS lpCaps, DWORD dwSize)
|
|||
*/
|
||||
DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
|
||||
{
|
||||
#ifdef linux
|
||||
int audio;
|
||||
int abuf_size;
|
||||
int smplrate;
|
||||
|
@ -1209,6 +1310,9 @@ DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
|
|||
return MMSYSERR_INVALPARAM;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1216,6 +1320,7 @@ DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
|
|||
*/
|
||||
DWORD widClose(WORD wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("widClose(%u);\n", wDevID);
|
||||
if (WInDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'widClose' // can't close !\n");
|
||||
|
@ -1229,6 +1334,9 @@ DWORD widClose(WORD wDevID)
|
|||
return MMSYSERR_INVALPARAM;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1236,6 +1344,7 @@ DWORD widClose(WORD wDevID)
|
|||
*/
|
||||
DWORD widAddBuffer(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
int count = 1;
|
||||
LPWAVEHDR lpWIHdr;
|
||||
printf("widAddBuffer(%u, %08X, %08X);\n", wDevID, lpWaveHdr, dwSize);
|
||||
|
@ -1270,6 +1379,9 @@ DWORD widAddBuffer(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
}
|
||||
printf("widAddBuffer // buffer added ! (now %u in queue)\n", count);
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1277,6 +1389,7 @@ DWORD widAddBuffer(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
*/
|
||||
DWORD widPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("widPrepare(%u, %08X, %08X);\n", wDevID, lpWaveHdr, dwSize);
|
||||
if (WInDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'widPrepare' // can't prepare !\n");
|
||||
|
@ -1295,6 +1408,9 @@ DWORD widPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
lpWaveHdr->dwBytesRecorded = 0;
|
||||
printf("Linux 'widPrepare' // header prepared !\n");
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1302,6 +1418,7 @@ DWORD widPrepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
*/
|
||||
DWORD widUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("widUnprepare(%u, %08X, %08X);\n", wDevID, lpWaveHdr, dwSize);
|
||||
if (WInDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'widUnprepare' // can't unprepare !\n");
|
||||
|
@ -1313,6 +1430,9 @@ DWORD widUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
WInDev[wDevID].lpQueueHdr = NULL;
|
||||
printf("Linux 'widUnprepare' // all headers unprepared !\n");
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1320,6 +1440,7 @@ DWORD widUnprepare(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
|
|||
*/
|
||||
DWORD widStart(WORD wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
int count = 1;
|
||||
LPWAVEHDR lpWIHdr;
|
||||
printf("widStart(%u);\n", wDevID);
|
||||
|
@ -1355,6 +1476,9 @@ DWORD widStart(WORD wDevID)
|
|||
printf("widStart // end of recording !\n");
|
||||
fflush(stdout);
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1362,12 +1486,16 @@ DWORD widStart(WORD wDevID)
|
|||
*/
|
||||
DWORD widStop(WORD wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("widStop(%u);\n", wDevID);
|
||||
if (WInDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'widStop' // can't stop !\n");
|
||||
return MMSYSERR_NOTENABLED;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1375,12 +1503,16 @@ DWORD widStop(WORD wDevID)
|
|||
*/
|
||||
DWORD widReset(WORD wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
printf("widReset(%u);\n", wDevID);
|
||||
if (WInDev[wDevID].unixdev == 0) {
|
||||
printf("Linux 'widReset' // can't reset !\n");
|
||||
return MMSYSERR_NOTENABLED;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1388,6 +1520,7 @@ DWORD widReset(WORD wDevID)
|
|||
*/
|
||||
DWORD widGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize)
|
||||
{
|
||||
#ifdef linux
|
||||
int time;
|
||||
#ifdef DEBUG_MCIWAVE
|
||||
printf("widGetPosition(%u, %08X, %u);\n", wDevID, lpTime, uSize);
|
||||
|
@ -1446,6 +1579,9 @@ TryAGAIN:
|
|||
goto TryAGAIN;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1506,5 +1642,4 @@ DWORD modMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
|
|||
return MMSYSERR_NOTENABLED;
|
||||
}
|
||||
|
||||
|
||||
#endif /* !WINELIB */
|
||||
|
|
|
@ -18,8 +18,10 @@ static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
|||
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#ifdef linux
|
||||
#include <linux/soundcard.h>
|
||||
#include <linux/cdrom.h>
|
||||
#endif
|
||||
|
||||
#define SOUND_DEV "/dev/dsp"
|
||||
#define CDAUDIO_DEV "/dev/sbpcd"
|
||||
|
@ -37,6 +39,7 @@ static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
|||
#define CDFRAMES_PERMIN 4500
|
||||
#define SECONDS_PERMIN 60
|
||||
|
||||
#ifdef linux
|
||||
typedef struct {
|
||||
int nUseCount; /* Incremented for each shared open */
|
||||
BOOL fShareable; /* TRUE if first open was shareable */
|
||||
|
@ -57,6 +60,7 @@ typedef struct {
|
|||
} LINUX_CDAUDIO;
|
||||
|
||||
static LINUX_CDAUDIO CDADev[MAX_CDAUDIODRV];
|
||||
#endif
|
||||
|
||||
UINT CDAUDIO_GetNumberOfTracks(UINT wDevID);
|
||||
BOOL CDAUDIO_GetTracksInfo(UINT wDevID);
|
||||
|
@ -72,6 +76,7 @@ DWORD CDAUDIO_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame);
|
|||
*/
|
||||
DWORD CDAUDIO_mciOpen(DWORD dwFlags, LPMCI_OPEN_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
UINT wDevID;
|
||||
int cdrom;
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
|
@ -121,6 +126,9 @@ DWORD CDAUDIO_mciOpen(DWORD dwFlags, LPMCI_OPEN_PARMS lpParms)
|
|||
CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_HARDWARE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -128,12 +136,14 @@ DWORD CDAUDIO_mciOpen(DWORD dwFlags, LPMCI_OPEN_PARMS lpParms)
|
|||
*/
|
||||
DWORD CDAUDIO_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_mciClose(%u, %08X, %08X);\n", wDevID, dwParam, lpParms);
|
||||
#endif
|
||||
if (CDADev[wDevID].lpdwTrackLen != NULL) free(CDADev[wDevID].lpdwTrackLen);
|
||||
if (CDADev[wDevID].lpdwTrackPos != NULL) free(CDADev[wDevID].lpdwTrackPos);
|
||||
close(CDADev[wDevID].unixdev);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -142,6 +152,7 @@ DWORD CDAUDIO_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
|
|||
DWORD CDAUDIO_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
|
||||
LPMCI_GETDEVCAPS_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_mciGetDevCaps(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -183,6 +194,9 @@ DWORD CDAUDIO_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
|
|||
}
|
||||
printf("CDAUDIO_mciGetDevCaps // lpParms->dwReturn=%08X);\n", lpParms->dwReturn);
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -190,6 +204,7 @@ DWORD CDAUDIO_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
|
|||
*/
|
||||
DWORD CDAUDIO_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_mciInfo(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -207,6 +222,9 @@ DWORD CDAUDIO_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms)
|
|||
else
|
||||
lpParms->dwRetSize = 0;
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_INTERNAL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -214,6 +232,7 @@ DWORD CDAUDIO_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms)
|
|||
*/
|
||||
DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_mciStatus(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -315,6 +334,9 @@ DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
|
|||
}
|
||||
printf("CDAUDIO_mciStatus // not MCI_STATUS_ITEM !\n");
|
||||
return 0;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -324,6 +346,7 @@ DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
|
|||
DWORD CDAUDIO_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame)
|
||||
{
|
||||
DWORD dwTime = 0;
|
||||
#ifdef linux
|
||||
UINT wTrack;
|
||||
UINT wMinutes;
|
||||
UINT wSeconds;
|
||||
|
@ -372,6 +395,7 @@ TryAGAIN:
|
|||
dwFormatType = MCI_FORMAT_TMSF;
|
||||
goto TryAGAIN;
|
||||
}
|
||||
#endif
|
||||
return dwTime;
|
||||
}
|
||||
|
||||
|
@ -382,6 +406,7 @@ TryAGAIN:
|
|||
DWORD CDAUDIO_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime)
|
||||
{
|
||||
DWORD dwFrame = 0;
|
||||
#ifdef linux
|
||||
UINT wTrack;
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_CalcFrame(%u, %08X, %lu);\n", wDevID, dwFormatType, dwTime);
|
||||
|
@ -423,6 +448,7 @@ TryAGAIN:
|
|||
dwFormatType = MCI_FORMAT_TMSF;
|
||||
goto TryAGAIN;
|
||||
}
|
||||
#endif
|
||||
return dwFrame;
|
||||
}
|
||||
|
||||
|
@ -432,6 +458,7 @@ TryAGAIN:
|
|||
*/
|
||||
UINT CDAUDIO_GetNumberOfTracks(UINT wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
struct cdrom_tochdr hdr;
|
||||
if (CDADev[wDevID].nTracks == 0) {
|
||||
if (ioctl(CDADev[wDevID].unixdev, CDROMREADTOCHDR, &hdr)) {
|
||||
|
@ -441,6 +468,9 @@ UINT CDAUDIO_GetNumberOfTracks(UINT wDevID)
|
|||
CDADev[wDevID].nTracks = hdr.cdth_trk1;
|
||||
}
|
||||
return CDADev[wDevID].nTracks;
|
||||
#else
|
||||
return (WORD)-1;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -448,6 +478,7 @@ UINT CDAUDIO_GetNumberOfTracks(UINT wDevID)
|
|||
*/
|
||||
BOOL CDAUDIO_GetTracksInfo(UINT wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
int i, length;
|
||||
int start, last_start;
|
||||
int total_length = 0;
|
||||
|
@ -503,6 +534,9 @@ BOOL CDAUDIO_GetTracksInfo(UINT wDevID)
|
|||
CDADev[wDevID].dwTotalLen = total_length;
|
||||
printf("CDAUDIO_GetTracksInfo // total_len=%u\n", total_length);
|
||||
return TRUE;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -511,6 +545,7 @@ BOOL CDAUDIO_GetTracksInfo(UINT wDevID)
|
|||
*/
|
||||
BOOL CDAUDIO_GetCDStatus(UINT wDevID)
|
||||
{
|
||||
#ifdef linux
|
||||
int oldmode = CDADev[wDevID].mode;
|
||||
CDADev[wDevID].sc.cdsc_format = CDROM_MSF;
|
||||
if (ioctl(CDADev[wDevID].unixdev, CDROMSUBCHNL, &CDADev[wDevID].sc)) {
|
||||
|
@ -565,6 +600,9 @@ BOOL CDAUDIO_GetCDStatus(UINT wDevID)
|
|||
}
|
||||
}
|
||||
return TRUE;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -572,6 +610,7 @@ BOOL CDAUDIO_GetCDStatus(UINT wDevID)
|
|||
*/
|
||||
DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
int start, end;
|
||||
struct cdrom_msf msf;
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
|
@ -625,6 +664,9 @@ DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
|
|||
CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_HARDWARE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -632,6 +674,7 @@ DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
|
|||
*/
|
||||
DWORD CDAUDIO_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_mciStop(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -644,6 +687,9 @@ DWORD CDAUDIO_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_HARDWARE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -651,6 +697,7 @@ DWORD CDAUDIO_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
*/
|
||||
DWORD CDAUDIO_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_mciPause(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -663,6 +710,9 @@ DWORD CDAUDIO_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_HARDWARE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -670,6 +720,7 @@ DWORD CDAUDIO_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
*/
|
||||
DWORD CDAUDIO_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_mciResume(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -682,6 +733,9 @@ DWORD CDAUDIO_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_HARDWARE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -689,6 +743,7 @@ DWORD CDAUDIO_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
|
|||
*/
|
||||
DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
DWORD dwRet;
|
||||
MCI_PLAY_PARMS PlayParms;
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
|
@ -717,6 +772,9 @@ DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
|
|||
CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return dwRet;
|
||||
#else
|
||||
return MCIERR_HARDWARE;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -725,6 +783,7 @@ DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
|
|||
*/
|
||||
DWORD CDAUDIO_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
|
||||
{
|
||||
#ifdef linux
|
||||
#ifdef DEBUG_CDAUDIO
|
||||
printf("CDAUDIO_mciSet(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
|
||||
#endif
|
||||
|
@ -775,6 +834,9 @@ DWORD CDAUDIO_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
|
|||
CDADev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
return MCIERR_HARDWARE;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -784,6 +846,7 @@ DWORD CDAUDIO_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
|
|||
LRESULT CDAUDIO_DriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
|
||||
DWORD dwParam1, DWORD dwParam2)
|
||||
{
|
||||
#ifdef linux
|
||||
switch(wMsg) {
|
||||
case DRV_LOAD:
|
||||
return (LRESULT)1L;
|
||||
|
@ -852,6 +915,9 @@ LRESULT CDAUDIO_DriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
|
|||
default:
|
||||
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
|
||||
}
|
||||
#else
|
||||
return MCIERR_HARDWARE;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
14
misc/mmaux.c
14
misc/mmaux.c
|
@ -14,7 +14,9 @@ static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
|||
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#ifdef linux
|
||||
#include <linux/soundcard.h>
|
||||
#endif
|
||||
|
||||
#define SOUND_DEV "/dev/dsp"
|
||||
#define MIXER_DEV "/dev/mixer"
|
||||
|
@ -34,6 +36,7 @@ static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
|||
*/
|
||||
DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPS lpCaps, DWORD dwSize)
|
||||
{
|
||||
#ifdef linux
|
||||
int mixer;
|
||||
int volume;
|
||||
printf("AUX_GetDevCaps(%u, %08X, %u);\n", wDevID, lpCaps, dwSize);
|
||||
|
@ -48,6 +51,9 @@ DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPS lpCaps, DWORD dwSize)
|
|||
}
|
||||
close(mixer);
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -56,6 +62,7 @@ DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPS lpCaps, DWORD dwSize)
|
|||
*/
|
||||
DWORD AUX_GetVolume(WORD wDevID, DWORD dwParam)
|
||||
{
|
||||
#ifdef linux
|
||||
int mixer;
|
||||
int volume;
|
||||
printf("AUX_GetVolume(%u, %08X);\n", wDevID, dwParam);
|
||||
|
@ -69,6 +76,9 @@ DWORD AUX_GetVolume(WORD wDevID, DWORD dwParam)
|
|||
}
|
||||
close(mixer);
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -76,6 +86,7 @@ DWORD AUX_GetVolume(WORD wDevID, DWORD dwParam)
|
|||
*/
|
||||
DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam)
|
||||
{
|
||||
#ifdef linux
|
||||
int mixer;
|
||||
int volume = 50;
|
||||
printf("AUX_SetVolume(%u, %08X);\n", wDevID, dwParam);
|
||||
|
@ -89,6 +100,9 @@ DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam)
|
|||
}
|
||||
close(mixer);
|
||||
return MMSYSERR_NOERROR;
|
||||
#else
|
||||
return MMSYSERR_NOTENABLED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -233,7 +233,7 @@ WORD COLOR_ToPhysical( DC *dc, COLORREF color )
|
|||
WORD *mapping;
|
||||
|
||||
if (!dc->u.x.pal.hMapping) return 0;
|
||||
switch(color & 0xff000000)
|
||||
switch(color >> 24)
|
||||
{
|
||||
case 0: /* RGB */
|
||||
index = GetNearestPaletteIndex( STOCK_DEFAULT_PALETTE, color );
|
||||
|
|
|
@ -16,6 +16,34 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
#define MAX_FONTS 256
|
||||
static LPLOGFONT lpLogFontList[MAX_FONTS] = { NULL };
|
||||
|
||||
|
||||
#define CI_NONEXISTCHAR(cs) (((cs)->width == 0) && \
|
||||
(((cs)->rbearing|(cs)->lbearing| \
|
||||
(cs)->ascent|(cs)->descent) == 0))
|
||||
|
||||
/*
|
||||
* CI_GET_CHAR_INFO - return the charinfo struct for the indicated 8bit
|
||||
* character. If the character is in the column and exists, then return the
|
||||
* appropriate metrics (note that fonts with common per-character metrics will
|
||||
* return min_bounds). If none of these hold true, try again with the default
|
||||
* char.
|
||||
*/
|
||||
#define CI_GET_CHAR_INFO(fs,col,def,cs) \
|
||||
{ \
|
||||
cs = def; \
|
||||
if (col >= fs->min_char_or_byte2 && col <= fs->max_char_or_byte2) { \
|
||||
if (fs->per_char == NULL) { \
|
||||
cs = &fs->min_bounds; \
|
||||
} else { \
|
||||
cs = &fs->per_char[(col - fs->min_char_or_byte2)]; \
|
||||
if (CI_NONEXISTCHAR(cs)) cs = def; \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
#define CI_GET_DEFAULT_INFO(fs,cs) \
|
||||
CI_GET_CHAR_INFO(fs, fs->default_char, NULL, cs)
|
||||
|
||||
/***********************************************************************
|
||||
* FONT_MatchFont
|
||||
*
|
||||
|
@ -86,7 +114,7 @@ static XFontStruct * FONT_MatchFont( LOGFONT * font )
|
|||
void FONT_GetMetrics( LOGFONT * logfont, XFontStruct * xfont,
|
||||
TEXTMETRIC * metrics )
|
||||
{
|
||||
int average, i;
|
||||
int average, i, count;
|
||||
unsigned long prop;
|
||||
|
||||
metrics->tmAscent = xfont->ascent;
|
||||
|
@ -116,13 +144,17 @@ void FONT_GetMetrics( LOGFONT * logfont, XFontStruct * xfont,
|
|||
else
|
||||
{
|
||||
XCharStruct * charPtr = xfont->per_char;
|
||||
average = 0;
|
||||
average = count = 0;
|
||||
for (i = metrics->tmFirstChar; i <= metrics->tmLastChar; i++)
|
||||
{
|
||||
average += charPtr->width;
|
||||
if (!CI_NONEXISTCHAR( charPtr ))
|
||||
{
|
||||
average += charPtr->width;
|
||||
count++;
|
||||
}
|
||||
charPtr++;
|
||||
}
|
||||
average /= metrics->tmLastChar - metrics->tmFirstChar + 1;
|
||||
if (count) average = (average + count/2) / count;
|
||||
}
|
||||
metrics->tmAveCharWidth = average;
|
||||
}
|
||||
|
@ -373,33 +405,6 @@ DWORD SetMapperFlags(HDC hDC, DWORD dwFlag)
|
|||
|
||||
/***********************************************************************/
|
||||
|
||||
#define CI_NONEXISTCHAR(cs) (((cs)->width == 0) && \
|
||||
(((cs)->rbearing|(cs)->lbearing| \
|
||||
(cs)->ascent|(cs)->descent) == 0))
|
||||
|
||||
/*
|
||||
* CI_GET_CHAR_INFO - return the charinfo struct for the indicated 8bit
|
||||
* character. If the character is in the column and exists, then return the
|
||||
* appropriate metrics (note that fonts with common per-character metrics will
|
||||
* return min_bounds). If none of these hold true, try again with the default
|
||||
* char.
|
||||
*/
|
||||
#define CI_GET_CHAR_INFO(fs,col,def,cs) \
|
||||
{ \
|
||||
cs = def; \
|
||||
if (col >= fs->min_char_or_byte2 && col <= fs->max_char_or_byte2) { \
|
||||
if (fs->per_char == NULL) { \
|
||||
cs = &fs->min_bounds; \
|
||||
} else { \
|
||||
cs = &fs->per_char[(col - fs->min_char_or_byte2)]; \
|
||||
if (CI_NONEXISTCHAR(cs)) cs = def; \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
#define CI_GET_DEFAULT_INFO(fs,cs) \
|
||||
CI_GET_CHAR_INFO(fs, fs->default_char, NULL, cs)
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* GetCharWidth (GDI.350)
|
||||
|
|
|
@ -235,8 +235,12 @@ int DrawText( HDC hdc, LPSTR str, int count, LPRECT rect, WORD flags )
|
|||
if (!TextOut(hdc, x, y, line, len)) return 0;
|
||||
if (prefix_offset != -1)
|
||||
{
|
||||
HPEN hpen = CreatePen( PS_SOLID, 1, GetTextColor(hdc) );
|
||||
HPEN oldPen = SelectObject( hdc, hpen );
|
||||
MoveTo(hdc, x + prefix_x, y + tm.tmAscent + 1 );
|
||||
LineTo(hdc, x + prefix_end, y + tm.tmAscent + 1 );
|
||||
SelectObject( hdc, oldPen );
|
||||
DeleteObject( hpen );
|
||||
}
|
||||
|
||||
if (strPtr)
|
||||
|
|
|
@ -20,9 +20,10 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
|||
#define VARTYPE_LONG 2
|
||||
#define VARTYPE_FARPTR 3
|
||||
|
||||
#define FUNCTYPE_PASCAL 16
|
||||
#define FUNCTYPE_C 17
|
||||
#define FUNCTYPE_REG 19
|
||||
#define FUNCTYPE_PASCAL_16 15
|
||||
#define FUNCTYPE_PASCAL 16
|
||||
#define FUNCTYPE_C 17
|
||||
#define FUNCTYPE_REG 19
|
||||
|
||||
#define EQUATETYPE_ABS 18
|
||||
#define TYPE_RETURN 20
|
||||
|
@ -372,7 +373,8 @@ ParseExportFunction(int ordinal, int type)
|
|||
}
|
||||
fdp->n_args_16 = i;
|
||||
|
||||
if (type == FUNCTYPE_PASCAL || type == FUNCTYPE_REG)
|
||||
if (type == FUNCTYPE_PASCAL_16 || type == FUNCTYPE_PASCAL ||
|
||||
type == FUNCTYPE_REG )
|
||||
{
|
||||
current_offset = 0;
|
||||
for (i--; i >= 0; i--)
|
||||
|
@ -521,6 +523,8 @@ ParseOrdinal(int ordinal)
|
|||
return ParseExportFunction(ordinal, FUNCTYPE_PASCAL);
|
||||
else if (stricmp(token, "pascal") == 0)
|
||||
return ParseExportFunction(ordinal, FUNCTYPE_PASCAL);
|
||||
else if (stricmp(token, "pascal16") == 0)
|
||||
return ParseExportFunction(ordinal, FUNCTYPE_PASCAL_16);
|
||||
else if (stricmp(token, "register") == 0)
|
||||
return ParseExportFunction(ordinal, FUNCTYPE_REG);
|
||||
else if (stricmp(token, "equate") == 0)
|
||||
|
@ -755,6 +759,13 @@ main(int argc, char **argv)
|
|||
fprintf(fp, "\torl\t$0x%08x,%%eax\n", DLLId << 16);
|
||||
fprintf(fp, "\tjmp\t_CallTo32\n\n");
|
||||
|
||||
fprintf(fp, "\t.globl _%s_Dispatch_16\n", UpperDLLName);
|
||||
fprintf(fp, "_%s_Dispatch_16:\n", UpperDLLName);
|
||||
fprintf(fp, "\tandl\t$0x0000ffff,%%esp\n");
|
||||
fprintf(fp, "\tandl\t$0x0000ffff,%%ebp\n");
|
||||
fprintf(fp, "\torl\t$0x%08x,%%eax\n", DLLId << 16);
|
||||
fprintf(fp, "\tjmp\t_CallTo32_16\n\n");
|
||||
|
||||
odp = OrdinalDefinitions;
|
||||
for (i = 0; i <= Limit; i++, odp++)
|
||||
{
|
||||
|
@ -829,6 +840,13 @@ main(int argc, char **argv)
|
|||
fprintf(fp, "\tjmp\t_%s_Dispatch\n\n", UpperDLLName);
|
||||
break;
|
||||
|
||||
case FUNCTYPE_PASCAL_16:
|
||||
fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
|
||||
fprintf(fp, "\tmovl\t$%d,%%eax\n", i);
|
||||
fprintf(fp, "\tpushw\t$%d\n", fdp->arg_16_size);
|
||||
fprintf(fp, "\tjmp\t_%s_Dispatch_16\n\n", UpperDLLName);
|
||||
break;
|
||||
|
||||
case FUNCTYPE_C:
|
||||
default:
|
||||
fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
|
||||
|
@ -862,8 +880,8 @@ main(int argc, char **argv)
|
|||
for (i = 0; i <= Limit; i++, odp++)
|
||||
{
|
||||
if (odp->valid &&
|
||||
(odp->type == FUNCTYPE_PASCAL || odp->type == FUNCTYPE_C ||
|
||||
odp->type == FUNCTYPE_REG))
|
||||
(odp->type == FUNCTYPE_PASCAL || odp->type == FUNCTYPE_PASCAL_16 ||
|
||||
odp->type == FUNCTYPE_REG || odp->type == FUNCTYPE_C ))
|
||||
{
|
||||
fdp = odp->additional_data;
|
||||
fprintf(fp, "extern int %s();\n", fdp->internal_name);
|
||||
|
@ -884,6 +902,7 @@ main(int argc, char **argv)
|
|||
switch (odp->type)
|
||||
{
|
||||
case FUNCTYPE_PASCAL:
|
||||
case FUNCTYPE_PASCAL_16:
|
||||
case FUNCTYPE_REG:
|
||||
fprintf(fp, " { 0x%x, %s_Ordinal_%d, ", UTEXTSEL, UpperDLLName, i);
|
||||
fprintf(fp, "\042%s\042, ", odp->export_name);
|
||||
|
|
|
@ -27,7 +27,8 @@ static HBITMAP hbitmapRestoreD = 0;
|
|||
extern void WINPOS_GetMinMaxInfo( HWND hwnd, POINT *maxSize, POINT *maxPos,
|
||||
POINT *minTrack, POINT *maxTrack ); /* winpos.c */
|
||||
extern void CURSOR_SetWinCursor( HWND hwnd, HCURSOR hcursor ); /* cursor.c */
|
||||
extern WORD MENU_GetMenuBarHeight( HWND hwnd, WORD menubarWidth ); /* menu.c */
|
||||
extern WORD MENU_GetMenuBarHeight( HWND hwnd, WORD menubarWidth,
|
||||
int orgX, int orgY ); /* menu.c */
|
||||
|
||||
|
||||
/* Some useful macros */
|
||||
|
@ -127,7 +128,8 @@ LONG NC_HandleNCCalcSize( HWND hwnd, NCCALCSIZE_PARAMS *params )
|
|||
if (HAS_MENU(wndPtr))
|
||||
{
|
||||
params->rgrc[0].top += MENU_GetMenuBarHeight( hwnd,
|
||||
params->rgrc[0].right - params->rgrc[0].left );
|
||||
params->rgrc[0].right - params->rgrc[0].left,
|
||||
-tmpRect.left, -tmpRect.top ) + 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -178,43 +180,61 @@ static LONG NC_InternalNCHitTest( HWND hwnd, POINT pt )
|
|||
|
||||
GetWindowRect( hwnd, &rect );
|
||||
if (!PtInRect( &rect, pt )) return HTNOWHERE;
|
||||
ScreenToClient( hwnd, &pt );
|
||||
GetClientRect( hwnd, &rect );
|
||||
|
||||
if (PtInRect( &rect, pt )) return HTCLIENT;
|
||||
|
||||
/* Check vertical scroll bar */
|
||||
if (wndPtr->dwStyle & WS_VSCROLL)
|
||||
{
|
||||
rect.right += SYSMETRICS_CXVSCROLL;
|
||||
if (PtInRect( &rect, pt )) return HTVSCROLL;
|
||||
}
|
||||
/* Check borders */
|
||||
|
||||
/* Check horizontal scroll bar */
|
||||
if (wndPtr->dwStyle & WS_HSCROLL)
|
||||
if (HAS_THICKFRAME( wndPtr->dwStyle ))
|
||||
{
|
||||
rect.bottom += SYSMETRICS_CYHSCROLL;
|
||||
if (PtInRect( &rect, pt ))
|
||||
InflateRect( &rect, -SYSMETRICS_CXFRAME, -SYSMETRICS_CYFRAME );
|
||||
if (wndPtr->dwStyle & WS_BORDER)
|
||||
InflateRect( &rect, -SYSMETRICS_CXBORDER, -SYSMETRICS_CYBORDER );
|
||||
if (!PtInRect( &rect, pt ))
|
||||
{
|
||||
/* Check size box */
|
||||
if ((wndPtr->dwStyle & WS_VSCROLL) &&
|
||||
(pt.x >= rect.right - SYSMETRICS_CXVSCROLL)) return HTSIZE;
|
||||
return HTHSCROLL;
|
||||
/* Check top sizing border */
|
||||
if (pt.y < rect.top)
|
||||
{
|
||||
if (pt.x < rect.left+SYSMETRICS_CXSIZE) return HTTOPLEFT;
|
||||
if (pt.x >= rect.right-SYSMETRICS_CXSIZE) return HTTOPRIGHT;
|
||||
return HTTOP;
|
||||
}
|
||||
/* Check bottom sizing border */
|
||||
if (pt.y >= rect.bottom)
|
||||
{
|
||||
if (pt.x < rect.left+SYSMETRICS_CXSIZE) return HTBOTTOMLEFT;
|
||||
if (pt.x >= rect.right-SYSMETRICS_CXSIZE) return HTBOTTOMRIGHT;
|
||||
return HTBOTTOM;
|
||||
}
|
||||
/* Check left sizing border */
|
||||
if (pt.x < rect.left)
|
||||
{
|
||||
if (pt.y < rect.top+SYSMETRICS_CYSIZE) return HTTOPLEFT;
|
||||
if (pt.y >= rect.bottom-SYSMETRICS_CYSIZE) return HTBOTTOMLEFT;
|
||||
return HTLEFT;
|
||||
}
|
||||
/* Check right sizing border */
|
||||
if (pt.x >= rect.right)
|
||||
{
|
||||
if (pt.y < rect.top+SYSMETRICS_CYSIZE) return HTTOPRIGHT;
|
||||
if (pt.y >= rect.bottom-SYSMETRICS_CYSIZE) return HTBOTTOMRIGHT;
|
||||
return HTRIGHT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check menu */
|
||||
if (HAS_MENU(wndPtr))
|
||||
else /* No thick frame */
|
||||
{
|
||||
rect.top -= SYSMETRICS_CYMENU + 1;
|
||||
if (PtInRect( &rect, pt )) return HTMENU;
|
||||
if (HAS_DLGFRAME( wndPtr->dwStyle, wndPtr->dwExStyle ))
|
||||
InflateRect(&rect, -SYSMETRICS_CXDLGFRAME, -SYSMETRICS_CYDLGFRAME);
|
||||
else if (wndPtr->dwStyle & WS_BORDER)
|
||||
InflateRect(&rect, -SYSMETRICS_CXBORDER, -SYSMETRICS_CYBORDER);
|
||||
if (!PtInRect( &rect, pt )) return HTBORDER;
|
||||
}
|
||||
|
||||
/* Check caption */
|
||||
|
||||
if ((wndPtr->dwStyle & WS_CAPTION) == WS_CAPTION)
|
||||
{
|
||||
rect.top -= SYSMETRICS_CYCAPTION - 1;
|
||||
if (PtInRect( &rect, pt ))
|
||||
rect.top += SYSMETRICS_CYCAPTION - 1;
|
||||
if (!PtInRect( &rect, pt ))
|
||||
{
|
||||
/* Check system menu */
|
||||
if ((wndPtr->dwStyle & WS_SYSMENU) && (pt.x <= SYSMETRICS_CXSIZE))
|
||||
|
@ -230,40 +250,42 @@ static LONG NC_InternalNCHitTest( HWND hwnd, POINT pt )
|
|||
return HTCAPTION;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check non-sizing border */
|
||||
if (!HAS_THICKFRAME( wndPtr->dwStyle )) return HTBORDER;
|
||||
|
||||
/* Check top sizing border */
|
||||
if (pt.y < rect.top)
|
||||
/* Check client area */
|
||||
|
||||
ScreenToClient( hwnd, &pt );
|
||||
GetClientRect( hwnd, &rect );
|
||||
if (PtInRect( &rect, pt )) return HTCLIENT;
|
||||
|
||||
/* Check vertical scroll bar */
|
||||
|
||||
if (wndPtr->dwStyle & WS_VSCROLL)
|
||||
{
|
||||
if (pt.x < rect.left+SYSMETRICS_CXSIZE) return HTTOPLEFT;
|
||||
if (pt.x >= rect.right-SYSMETRICS_CXSIZE) return HTTOPRIGHT;
|
||||
return HTTOP;
|
||||
rect.right += SYSMETRICS_CXVSCROLL;
|
||||
if (PtInRect( &rect, pt )) return HTVSCROLL;
|
||||
}
|
||||
|
||||
/* Check bottom sizing border */
|
||||
if (pt.y >= rect.bottom)
|
||||
/* Check horizontal scroll bar */
|
||||
|
||||
if (wndPtr->dwStyle & WS_HSCROLL)
|
||||
{
|
||||
if (pt.x < rect.left+SYSMETRICS_CXSIZE) return HTBOTTOMLEFT;
|
||||
if (pt.x >= rect.right-SYSMETRICS_CXSIZE) return HTBOTTOMRIGHT;
|
||||
return HTBOTTOM;
|
||||
}
|
||||
|
||||
/* Check left sizing border */
|
||||
if (pt.x < rect.left)
|
||||
{
|
||||
if (pt.y < rect.top+SYSMETRICS_CYSIZE) return HTTOPLEFT;
|
||||
if (pt.y >= rect.bottom-SYSMETRICS_CYSIZE) return HTBOTTOMLEFT;
|
||||
return HTLEFT;
|
||||
rect.bottom += SYSMETRICS_CYHSCROLL;
|
||||
if (PtInRect( &rect, pt ))
|
||||
{
|
||||
/* Check size box */
|
||||
if ((wndPtr->dwStyle & WS_VSCROLL) &&
|
||||
(pt.x >= rect.right - SYSMETRICS_CXVSCROLL))
|
||||
return HTSIZE;
|
||||
return HTHSCROLL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check right sizing border */
|
||||
if (pt.x >= rect.right)
|
||||
/* Check menu bar */
|
||||
|
||||
if (HAS_MENU(wndPtr))
|
||||
{
|
||||
if (pt.y < rect.top+SYSMETRICS_CYSIZE) return HTTOPRIGHT;
|
||||
if (pt.y >= rect.bottom-SYSMETRICS_CYSIZE) return HTBOTTOMRIGHT;
|
||||
return HTRIGHT;
|
||||
if ((pt.y < 0) && (pt.x >= 0) && (pt.x < rect.right))
|
||||
return HTMENU;
|
||||
}
|
||||
|
||||
/* Should never get here */
|
||||
|
@ -537,9 +559,9 @@ void NC_DoNCPaint( HWND hwnd, HRGN hrgn, BOOL active, BOOL suppress_menupaint )
|
|||
#ifdef DEBUG_NONCLIENT
|
||||
printf( "NC_DoNCPaint: %d %d\n", hwnd, hrgn );
|
||||
#endif
|
||||
if (!IsWindowVisible(hwnd)) return;
|
||||
if (!wndPtr || !hrgn) return;
|
||||
if (!(wndPtr->dwStyle & (WS_BORDER | WS_DLGFRAME | WS_THICKFRAME)))
|
||||
if ((!(wndPtr->dwStyle & (WS_BORDER | WS_DLGFRAME | WS_THICKFRAME))) ||
|
||||
(!(wndPtr->dwStyle & WS_VISIBLE)))
|
||||
return; /* Nothing to do! */
|
||||
|
||||
if (hrgn == 1) hdc = GetDCEx( hwnd, 0, DCX_CACHE | DCX_WINDOW );
|
||||
|
@ -594,27 +616,15 @@ void NC_DoNCPaint( HWND hwnd, HRGN hrgn, BOOL active, BOOL suppress_menupaint )
|
|||
NC_DrawCaption( hdc, &r, hwnd, wndPtr->dwStyle, active );
|
||||
}
|
||||
|
||||
if (wndPtr->wIDmenu != 0 &&
|
||||
(wndPtr->dwStyle & WS_CHILD) != WS_CHILD) {
|
||||
LPPOPUPMENU lpMenu = (LPPOPUPMENU) GlobalLock(wndPtr->wIDmenu);
|
||||
if (lpMenu != NULL) {
|
||||
int oldHeight;
|
||||
CopyRect(&rect2, &rect);
|
||||
/* Default MenuBar height */
|
||||
if (lpMenu->Height == 0) lpMenu->Height = SYSMETRICS_CYMENU + 1;
|
||||
oldHeight = lpMenu->Height;
|
||||
rect2.bottom = rect2.top + oldHeight;
|
||||
StdDrawMenuBar(hdc, &rect2, lpMenu, suppress_menupaint);
|
||||
if (oldHeight != lpMenu->Height) {
|
||||
printf("NC_DoNCPaint // menubar changed oldHeight=%d != lpMenu->Height=%d\n",
|
||||
oldHeight, lpMenu->Height);
|
||||
/* Reduce ClientRect according to MenuBar height */
|
||||
wndPtr->rectClient.top -= oldHeight;
|
||||
wndPtr->rectClient.top += lpMenu->Height;
|
||||
}
|
||||
GlobalUnlock(wndPtr->wIDmenu);
|
||||
}
|
||||
}
|
||||
if (HAS_MENU(wndPtr))
|
||||
{
|
||||
LPPOPUPMENU lpMenu = (LPPOPUPMENU) GlobalLock( wndPtr->wIDmenu );
|
||||
RECT r = rect;
|
||||
r.bottom = rect.top + lpMenu->Height;
|
||||
rect.top += lpMenu->Height;
|
||||
StdDrawMenuBar( hdc, &r, lpMenu, suppress_menupaint );
|
||||
GlobalUnlock( wndPtr->wIDmenu );
|
||||
}
|
||||
|
||||
if (wndPtr->dwStyle & (WS_VSCROLL | WS_HSCROLL)) {
|
||||
if ((wndPtr->dwStyle & WS_VSCROLL) && (wndPtr->VScroll != NULL) &&
|
||||
|
@ -624,9 +634,6 @@ void NC_DoNCPaint( HWND hwnd, HRGN hrgn, BOOL active, BOOL suppress_menupaint )
|
|||
bottom -= SYSMETRICS_CYHSCROLL;
|
||||
SetRect(&rect2, rect.right - SYSMETRICS_CXVSCROLL,
|
||||
rect.top, rect.right, bottom);
|
||||
if (wndPtr->dwStyle & WS_CAPTION) rect.top += SYSMETRICS_CYSIZE;
|
||||
if (wndPtr->wIDmenu != 0 && (wndPtr->dwStyle & WS_CHILD) != WS_CHILD)
|
||||
rect2.top += SYSMETRICS_CYMENU + 1;
|
||||
StdDrawScrollBar(hwnd, hdc, SB_VERT, &rect2, (LPHEADSCROLL)wndPtr->VScroll);
|
||||
}
|
||||
if ((wndPtr->dwStyle & WS_HSCROLL) && wndPtr->HScroll != NULL &&
|
||||
|
|
|
@ -45,6 +45,8 @@ static char * DefSysColors[] =
|
|||
|
||||
static COLORREF SysColors[NUM_SYS_COLORS];
|
||||
|
||||
#define MAKE_SOLID(color) \
|
||||
(PALETTEINDEX(GetNearestPaletteIndex(STOCK_DEFAULT_PALETTE,(color))))
|
||||
|
||||
/*************************************************************************
|
||||
* SYSCOLOR_SetColor
|
||||
|
@ -69,6 +71,8 @@ static void SYSCOLOR_SetColor( int index, COLORREF color )
|
|||
sysColorObjects.hbrushInactiveCaption = CreateSolidBrush( color );
|
||||
break;
|
||||
case COLOR_MENU:
|
||||
DeleteObject( sysColorObjects.hbrushMenu );
|
||||
sysColorObjects.hbrushMenu = CreateSolidBrush( MAKE_SOLID(color) );
|
||||
break;
|
||||
case COLOR_WINDOW:
|
||||
DeleteObject( sysColorObjects.hbrushWindow );
|
||||
|
@ -95,7 +99,11 @@ static void SYSCOLOR_SetColor( int index, COLORREF color )
|
|||
sysColorObjects.hbrushInactiveBorder = CreateSolidBrush( color );
|
||||
break;
|
||||
case COLOR_APPWORKSPACE:
|
||||
break;
|
||||
case COLOR_HIGHLIGHT:
|
||||
DeleteObject( sysColorObjects.hbrushHighlight );
|
||||
sysColorObjects.hbrushHighlight = CreateSolidBrush( MAKE_SOLID(color));
|
||||
break;
|
||||
case COLOR_HIGHLIGHTTEXT:
|
||||
break;
|
||||
case COLOR_BTNFACE:
|
||||
|
|
|
@ -260,8 +260,11 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
|
|||
#endif
|
||||
/* 'soundrec.exe' has negative position !
|
||||
Why ? For now, here a patch : */
|
||||
if (x < 0) x = 0;
|
||||
if (y < 0) y = 0;
|
||||
if (!strcmp(className, "SoundRec"))
|
||||
{
|
||||
if (x < 0) x = 0;
|
||||
if (y < 0) y = 0;
|
||||
}
|
||||
if (x == CW_USEDEFAULT) x = y = 0;
|
||||
if (width == CW_USEDEFAULT)
|
||||
{
|
||||
|
|
|
@ -647,16 +647,21 @@ static BOOL WINPOS_InternalSetWindowPos( WINDOWPOS *winpos )
|
|||
|
||||
/* Send WM_NCPAINT message if needed */
|
||||
|
||||
if ((flags & (SWP_FRAMECHANGED | SWP_SHOWWINDOW)) ||
|
||||
(!(flags & SWP_NOSIZE)) || (!(flags & SWP_NOMOVE)) ||
|
||||
(!(flags & SWP_NOACTIVATE)) || (!(flags & SWP_NOZORDER)))
|
||||
SendMessage( winpos->hwnd, WM_NCPAINT, 1, 0L );
|
||||
#if 0
|
||||
if ((flags & (SWP_FRAMECHANGED | SWP_SHOWWINDOW)) &&
|
||||
(!(flags & SWP_NOREDRAW)) &&
|
||||
(wndPtr->dwStyle & WS_VISIBLE))
|
||||
InvalidateRect(winpos->hwnd, NULL, TRUE);
|
||||
#endif
|
||||
if (flags & SWP_SHOWWINDOW)
|
||||
{
|
||||
/* Repaint the window frame and background */
|
||||
RedrawWindow( winpos->hwnd, NULL, 0,
|
||||
RDW_INVALIDATE | RDW_FRAME | RDW_ERASENOW );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((flags & SWP_FRAMECHANGED) ||
|
||||
(!(flags & SWP_NOSIZE)) ||
|
||||
(!(flags & SWP_NOMOVE)) ||
|
||||
(!(flags & SWP_NOACTIVATE)) ||
|
||||
(!(flags & SWP_NOZORDER)))
|
||||
SendMessage( winpos->hwnd, WM_NCPAINT, 1, 0L );
|
||||
}
|
||||
|
||||
/* And last, send the WM_WINDOWPOSCHANGED message */
|
||||
|
||||
|
|
Loading…
Reference in New Issue