Allow the size of bitmaps to be changed after toolbar buttons have
[wine.git] / msdos / interrupts.c
blobfce08ddaa53db1815dc6e26fb7eddad260c4bb7e
1 /*
2 * Interrupt vectors emulation
4 * Copyright 1995 Alexandre Julliard
5 */
7 #include <sys/types.h>
8 #include "windef.h"
9 #include "wine/winbase16.h"
10 #include "miscemu.h"
11 #include "msdos.h"
12 #include "module.h"
13 #include "debugtools.h"
15 DEFAULT_DEBUG_CHANNEL(int);
17 static FARPROC16 INT_Vectors[256];
19 /* Ordinal number for interrupt 0 handler in WPROCS.DLL */
20 #define FIRST_INTERRUPT 100
23 /**********************************************************************
24 * INT_GetPMHandler
26 * Return the protected mode interrupt vector for a given interrupt.
28 FARPROC16 INT_GetPMHandler( BYTE intnum )
30 if (!INT_Vectors[intnum])
32 static HMODULE16 wprocs;
33 if (!wprocs)
35 if ((wprocs = GetModuleHandle16( "wprocs" )) < 32)
37 ERR("could not load wprocs.dll\n");
38 return 0;
41 INT_Vectors[intnum] = NE_GetEntryPoint( wprocs, FIRST_INTERRUPT + intnum );
43 return INT_Vectors[intnum];
47 /**********************************************************************
48 * INT_SetPMHandler
50 * Set the protected mode interrupt handler for a given interrupt.
52 void INT_SetPMHandler( BYTE intnum, FARPROC16 handler )
54 TRACE("Set protected mode interrupt vector %02x <- %04x:%04x\n",
55 intnum, HIWORD(handler), LOWORD(handler) );
56 INT_Vectors[intnum] = handler;
60 /**********************************************************************
61 * INT_GetRMHandler
63 * Return the real mode interrupt vector for a given interrupt.
65 FARPROC16 INT_GetRMHandler( BYTE intnum )
67 return ((FARPROC16*)DOSMEM_MemoryBase(0))[intnum];
71 /**********************************************************************
72 * INT_SetRMHandler
74 * Set the real mode interrupt handler for a given interrupt.
76 void INT_SetRMHandler( BYTE intnum, FARPROC16 handler )
78 TRACE("Set real mode interrupt vector %02x <- %04x:%04x\n",
79 intnum, HIWORD(handler), LOWORD(handler) );
80 ((FARPROC16*)DOSMEM_MemoryBase(0))[intnum] = handler;
84 /**********************************************************************
85 * INT_CtxGetHandler
87 * Return the interrupt vector for a given interrupt.
89 FARPROC16 INT_CtxGetHandler( CONTEXT86 *context, BYTE intnum )
91 if (ISV86(context))
92 return ((FARPROC16*)V86BASE(context))[intnum];
93 else
94 return INT_GetPMHandler(intnum);
98 /**********************************************************************
99 * INT_CtxSetHandler
101 * Set the interrupt handler for a given interrupt.
103 void INT_CtxSetHandler( CONTEXT86 *context, BYTE intnum, FARPROC16 handler )
105 if (ISV86(context)) {
106 TRACE("Set real mode interrupt vector %02x <- %04x:%04x\n",
107 intnum, HIWORD(handler), LOWORD(handler) );
108 ((FARPROC16*)V86BASE(context))[intnum] = handler;
109 } else
110 INT_SetPMHandler(intnum, handler);
114 /**********************************************************************
115 * INT_RealModeInterrupt
117 * Handle real mode interrupts
119 int INT_RealModeInterrupt( BYTE intnum, CONTEXT86 *context )
121 /* we should really map to if1632/wprocs.spec, but not all
122 * interrupt handlers are adapted to support real mode yet */
123 switch (intnum) {
124 case 0x09:
125 INT_Int09Handler(context);
126 break;
127 case 0x10:
128 INT_Int10Handler(context);
129 break;
130 case 0x11:
131 INT_Int11Handler(context);
132 break;
133 case 0x12:
134 INT_Int12Handler(context);
135 break;
136 case 0x13:
137 INT_Int13Handler(context);
138 break;
139 case 0x15:
140 INT_Int15Handler(context);
141 break;
142 case 0x16:
143 INT_Int16Handler(context);
144 break;
145 case 0x17:
146 INT_Int17Handler(context);
147 break;
148 case 0x1a:
149 INT_Int1aHandler(context);
150 break;
151 case 0x20:
152 INT_Int20Handler(context);
153 break;
154 case 0x21:
155 DOS3Call(context);
156 break;
157 case 0x25:
158 INT_Int25Handler(context);
159 break;
160 case 0x29:
161 INT_Int29Handler(context);
162 break;
163 case 0x2a:
164 INT_Int2aHandler(context);
165 break;
166 case 0x2f:
167 INT_Int2fHandler(context);
168 break;
169 case 0x31:
170 INT_Int31Handler(context);
171 break;
172 case 0x33:
173 INT_Int33Handler(context);
174 break;
175 default:
176 FIXME("Unknown Interrupt in DOS mode: 0x%x\n", intnum);
177 return 1;
179 return 0;