Release 960331
[wine/hacks.git] / windows / alias.c
blob57160940b51120d35a1545e3397ecd4fe3bf5dad
1 /*
2 * Function alias support
3 *
4 * Copyright 1995 Martin von Loewis
5 *
6 */
8 #include "windows.h"
9 #include "alias.h"
10 #include "module.h"
12 #include "stddebug.h"
13 #include "debug.h"
15 /* some large prime */
16 #define TABLESIZE 2677
18 static ALIASHASH AliasTable[TABLESIZE];
19 /* this could be a bit smaller */
20 static FUNCTIONALIAS AliasRecord[TABLESIZE];
21 /* record 0 is always empty */
22 static int LastRecord;
24 int ALIAS_UseAliases;
26 /* Aliased window procedures */
27 extern LRESULT ButtonWndProc( HWND, UINT, WPARAM, LPARAM );
28 extern LRESULT StaticWndProc( HWND, UINT, WPARAM, LPARAM );
29 extern LRESULT ScrollBarWndProc( HWND, UINT, WPARAM, LPARAM );
30 extern LRESULT ListBoxWndProc( HWND, UINT, WPARAM, LPARAM );
31 extern LRESULT ComboBoxWndProc( HWND, UINT, WPARAM, LPARAM );
32 extern LRESULT ComboLBoxWndProc( HWND, UINT, WPARAM, LPARAM );
33 extern LRESULT EditWndProc( HWND, UINT, WPARAM, LPARAM );
34 extern LRESULT PopupMenuWndProc( HWND, UINT, WPARAM, LPARAM );
35 extern LRESULT DesktopWndProc( HWND, UINT, WPARAM, LPARAM );
36 extern LRESULT DefDlgProc( HWND, UINT, WPARAM, LPARAM );
37 extern LRESULT MDIClientWndProc( HWND, UINT, WPARAM, LPARAM );
38 extern LRESULT AboutDlgProc( HWND, UINT, WPARAM, LPARAM );
39 extern LRESULT CARET_Callback( HWND, UINT, WPARAM, LPARAM );
40 extern LRESULT SystemMessageBoxProc( HWND, UINT, WPARAM, LPARAM );
42 /* closed hashing */
43 static int ALIAS_LocateHash(DWORD value)
45 int hash,start;
46 start=hash=value%TABLESIZE;
47 while(AliasTable[hash].used && AliasTable[hash].used!=value)
49 hash++;
50 if(hash==TABLESIZE)
51 hash=0;
52 if(hash==start)
54 fprintf(stderr,"Hash table full, increase size in alias.c\n");
55 exit(0);
58 return hash;
62 /***********************************************************************
63 * ALIAS_RegisterWndProcAlias
65 static void ALIAS_RegisterWndProcAlias( DWORD Wine, const char *name )
67 FARPROC Win16Proc, Win32Proc;
69 Win16Proc = MODULE_GetWndProcEntry16( name );
70 Win32Proc = MODULE_GetWndProcEntry32( name );
71 ALIAS_RegisterAlias( Wine, (DWORD)Win16Proc, (DWORD)Win32Proc );
75 /***********************************************************************
76 * ALIAS_Init
78 * Create aliases for the standard window procedures.
80 BOOL ALIAS_Init(void)
82 ALIAS_RegisterWndProcAlias( (DWORD)ButtonWndProc, "ButtonWndProc" );
83 ALIAS_RegisterWndProcAlias( (DWORD)StaticWndProc, "StaticWndProc" );
84 ALIAS_RegisterWndProcAlias( (DWORD)ScrollBarWndProc, "ScrollBarWndProc" );
85 ALIAS_RegisterWndProcAlias( (DWORD)ListBoxWndProc, "ListBoxWndProc" );
86 ALIAS_RegisterWndProcAlias( (DWORD)ComboBoxWndProc, "ComboBoxWndProc" );
87 ALIAS_RegisterWndProcAlias( (DWORD)ComboLBoxWndProc, "ComboLBoxWndProc" );
88 ALIAS_RegisterWndProcAlias( (DWORD)EditWndProc, "EditWndProc" );
89 ALIAS_RegisterWndProcAlias( (DWORD)PopupMenuWndProc, "PopupMenuWndProc" );
90 ALIAS_RegisterWndProcAlias( (DWORD)DesktopWndProc, "DesktopWndProc" );
91 ALIAS_RegisterWndProcAlias( (DWORD)DefDlgProc, "DefDlgProc" );
92 ALIAS_RegisterWndProcAlias( (DWORD)MDIClientWndProc, "MDIClientWndProc" );
93 ALIAS_RegisterWndProcAlias( (DWORD)AboutDlgProc, "AboutDlgProc" );
94 ALIAS_RegisterWndProcAlias( (DWORD)CARET_Callback, "CARET_Callback" );
95 ALIAS_RegisterWndProcAlias( (DWORD)SystemMessageBoxProc, "SystemMessageBoxProc" );
96 return TRUE;
100 /***********************************************************************
101 * ALIAS_RegisterAlias
103 void ALIAS_RegisterAlias(DWORD Wine,DWORD Win16, DWORD Win32)
105 int whash = 0, w16hash = 0, w32hash = 0, recno=0;
106 if (!Wine && !Win16 && !Win32) return;
107 if (Wine)
109 whash=ALIAS_LocateHash(Wine);
110 recno=AliasTable[whash].used?AliasTable[whash].recno:0;
112 if (Win16)
114 w16hash=ALIAS_LocateHash(Win16);
115 recno=AliasTable[w16hash].used?AliasTable[w16hash].recno:0;
117 if (Win32)
119 w32hash=ALIAS_LocateHash(Win32);
120 recno=AliasTable[w32hash].used?AliasTable[w32hash].recno:0;
122 if (!recno)
124 recno=LastRecord;
125 LastRecord++;
127 if (Wine)
129 AliasTable[whash].used=Wine;
130 AliasTable[whash].recno=recno;
131 AliasRecord[recno].wine=Wine;
133 if (Win16)
135 AliasTable[w16hash].used=Win16;
136 AliasTable[w16hash].recno=recno;
137 AliasRecord[recno].win16=Win16;
139 if (Win32)
141 AliasTable[w32hash].used=Win32;
142 AliasTable[w32hash].recno=recno;
143 AliasRecord[recno].win32=Win32;
147 FUNCTIONALIAS* ALIAS_LookupAlias(DWORD fn)
149 int index;
150 index=ALIAS_LocateHash(fn);
151 if(AliasTable[index].used==fn)
152 return &AliasRecord[AliasTable[index].recno];
153 return 0;