2 * Function alias support
4 * Copyright 1995 Martin von Loewis
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
;
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
);
43 static int ALIAS_LocateHash(DWORD value
)
46 start
=hash
=value
%TABLESIZE
;
47 while(AliasTable
[hash
].used
&& AliasTable
[hash
].used
!=value
)
54 fprintf(stderr
,"Hash table full, increase size in alias.c\n");
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 /***********************************************************************
78 * Create aliases for the standard window procedures.
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" );
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;
109 whash
=ALIAS_LocateHash(Wine
);
110 recno
=AliasTable
[whash
].used
?AliasTable
[whash
].recno
:0;
114 w16hash
=ALIAS_LocateHash(Win16
);
115 recno
=AliasTable
[w16hash
].used
?AliasTable
[w16hash
].recno
:0;
119 w32hash
=ALIAS_LocateHash(Win32
);
120 recno
=AliasTable
[w32hash
].used
?AliasTable
[w32hash
].recno
:0;
129 AliasTable
[whash
].used
=Wine
;
130 AliasTable
[whash
].recno
=recno
;
131 AliasRecord
[recno
].wine
=Wine
;
135 AliasTable
[w16hash
].used
=Win16
;
136 AliasTable
[w16hash
].recno
=recno
;
137 AliasRecord
[recno
].win16
=Win16
;
141 AliasTable
[w32hash
].used
=Win32
;
142 AliasTable
[w32hash
].recno
=recno
;
143 AliasRecord
[recno
].win32
=Win32
;
147 FUNCTIONALIAS
* ALIAS_LookupAlias(DWORD fn
)
150 index
=ALIAS_LocateHash(fn
);
151 if(AliasTable
[index
].used
==fn
)
152 return &AliasRecord
[AliasTable
[index
].recno
];