Release 950918
[wine/hacks.git] / windows / alias.c
blob59d25ce02de7fda86a4972991ea69fda86bad55c
1 /*
2 * Function alias support
3 *
4 * Copyright 1995 Martin von Loewis
5 *
6 */
8 #include "windows.h"
9 #include "alias.h"
11 #include "stddebug.h"
12 #include "debug.h"
14 /* some large prime */
15 #define TABLESIZE 2677
17 static ALIASHASH AliasTable[TABLESIZE];
18 /* this could be a bit smaller */
19 static FUNCTIONALIAS AliasRecord[TABLESIZE];
20 /* record 0 is always empty */
21 static int LastRecord;
23 int ALIAS_UseAliases;
25 /* closed hashing */
26 static int ALIAS_LocateHash(DWORD value)
28 int hash,start;
29 start=hash=value%TABLESIZE;
30 while(AliasTable[hash].used && AliasTable[hash].used!=value)
32 hash++;
33 if(hash==TABLESIZE)
34 hash=0;
35 if(hash==start)
37 fprintf(stderr,"Hash table full, increase size in alias.c\n");
38 exit(0);
41 return hash;
44 void ALIAS_RegisterAlias(DWORD Wine,DWORD Win16, DWORD Win32)
46 int whash = 0, w16hash = 0, w32hash = 0, recno=0;
47 if (!Wine && !Win16 && !Win32) return;
48 if (Wine)
50 whash=ALIAS_LocateHash(Wine);
51 recno=AliasTable[whash].used?AliasTable[whash].used:0;
53 if (Win16)
55 w16hash=ALIAS_LocateHash(Win16);
56 recno=AliasTable[w16hash].used?AliasTable[w16hash].used:0;
58 if (Win32)
60 w32hash=ALIAS_LocateHash(Win32);
61 recno=AliasTable[w32hash].used?AliasTable[w32hash].used:0;
63 if (!recno)
65 recno=LastRecord;
66 LastRecord++;
68 if (Wine)
70 AliasTable[whash].used=Wine;
71 AliasTable[whash].recno=recno;
72 AliasRecord[recno].wine=Wine;
74 if (Win16)
76 AliasTable[w16hash].used=Win16;
77 AliasTable[w16hash].recno=recno;
78 AliasRecord[recno].win16=Win16;
80 if (Win32)
82 AliasTable[w32hash].used=Win32;
83 AliasTable[w32hash].recno=recno;
84 AliasRecord[recno].win32=Win32;
88 FUNCTIONALIAS* ALIAS_LookupAlias(DWORD fn)
90 int index;
91 index=ALIAS_LocateHash(fn);
92 if(AliasTable[index].used==fn)
93 return &AliasRecord[AliasTable[index].recno];
94 return 0;