3 static char RCSId[] = "$Id: wine.c,v 1.2 1993/07/04 04:04:21 root Exp root $";
4 static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
11 #include "stackframe.h"
18 /**********************************************************************
19 * CallWindowProc (USER.122)
21 LONG
CallWindowProc( WNDPROC func
, HWND hwnd
, WORD message
,
22 WORD wParam
, LONG lParam
)
24 WND
*wndPtr
= WIN_FindWndPtr( hwnd
);
26 if (!wndPtr
) return 0;
27 SpyMessage(hwnd
, message
, wParam
, lParam
);
28 return CallWndProc( (FARPROC
)func
, wndPtr
->hInstance
,
29 hwnd
, message
, wParam
, lParam
);
33 /**********************************************************************
36 int Catch( LPCATCHBUF lpbuf
)
38 STACK16FRAME
*pFrame
= CURRENT_STACK16
;
40 dprintf_catch( stddeb
, "Catch: buf=%p ss:sp=%04x:%04x\n",
41 lpbuf
, IF1632_Saved16_ss
, IF1632_Saved16_sp
);
43 /* Note: we don't save the current ss, as the catch buffer is */
44 /* only 9 words long. Hopefully no one will have the silly */
45 /* idea to change the current stack before calling Throw()... */
47 lpbuf
[0] = IF1632_Saved16_sp
;
48 lpbuf
[1] = LOWORD(IF1632_Saved32_esp
);
49 lpbuf
[2] = HIWORD(IF1632_Saved32_esp
);
50 lpbuf
[3] = pFrame
->saved_ss
;
51 lpbuf
[4] = pFrame
->saved_sp
;
52 lpbuf
[5] = pFrame
->ds
;
53 lpbuf
[6] = pFrame
->bp
;
54 lpbuf
[7] = pFrame
->ip
;
55 lpbuf
[8] = pFrame
->cs
;
60 /**********************************************************************
63 int Throw( LPCATCHBUF lpbuf
, int retval
)
67 dprintf_catch( stddeb
, "Throw: buf=%p val=%04x ss:sp=%04x:%04x\n",
68 lpbuf
, retval
, IF1632_Saved16_ss
, IF1632_Saved16_sp
);
70 IF1632_Saved16_sp
= lpbuf
[0] - sizeof(WORD
);
71 IF1632_Saved32_esp
= MAKELONG( lpbuf
[1], lpbuf
[2] );
72 pFrame
= CURRENT_STACK16
;
73 pFrame
->saved_ss
= lpbuf
[3];
74 pFrame
->saved_sp
= lpbuf
[4];
75 pFrame
->ds
= lpbuf
[5];
76 pFrame
->bp
= lpbuf
[6];
77 pFrame
->ip
= lpbuf
[7];
78 pFrame
->cs
= lpbuf
[8];