// SDB-CGEN V2.6.2
#include <ctype.h>
#include <stdio.h>
#include <string.h>

struct kv { const char *name; const char *value; };
static const struct kv kvs[] = {
// gcc -DMAIN=1 winmm.c ; ./a.out > winmm.h
	{"10", "OpenDriver"},
	{"100", "mixerClose"},
	{"101", "mixerGetControlDetailsA"},
	{"102", "mixerGetControlDetailsW"},
	{"103", "mixerGetDevCapsA"},
	{"104", "mixerGetDevCapsW"},
	{"105", "mixerGetID"},
	{"106", "mixerGetLineControlsA"},
	{"107", "mixerGetLineControlsW"},
	{"108", "mixerGetLineInfoA"},
	{"109", "mixerGetLineInfoW"},
	{"11", "PlaySound"},
	{"110", "mixerGetNumDevs"},
	{"111", "mixerMessage"},
	{"112", "mixerOpen"},
	{"113", "mixerSetControlDetails"},
	{"114", "mmDrvInstall"},
	{"115", "mmGetCurrentTask"},
	{"116", "mmTaskBlock"},
	{"117", "mmTaskCreate"},
	{"118", "mmTaskSignal"},
	{"119", "mmTaskYield"},
	{"12", "PlaySoundA"},
	{"120", "mmioAdvance"},
	{"121", "mmioAscend"},
	{"122", "mmioClose"},
	{"123", "mmioCreateChunk"},
	{"124", "mmioDescend"},
	{"125", "mmioFlush"},
	{"126", "mmioGetInfo"},
	{"127", "mmioInstallIOProcA"},
	{"128", "mmioInstallIOProcW"},
	{"129", "mmioOpenA"},
	{"13", "PlaySoundW"},
	{"130", "mmioOpenW"},
	{"131", "mmioRead"},
	{"132", "mmioRenameA"},
	{"133", "mmioRenameW"},
	{"134", "mmioSeek"},
	{"135", "mmioSendMessage"},
	{"136", "mmioSetBuffer"},
	{"137", "mmioSetInfo"},
	{"138", "mmioStringToFOURCCA"},
	{"139", "mmioStringToFOURCCW"},
	{"14", "SendDriverMessage"},
	{"140", "mmioWrite"},
	{"141", "mmsystemGetVersion"},
	{"142", "mod32Message"},
	{"143", "mxd32Message"},
	{"144", "sndPlaySoundA"},
	{"145", "sndPlaySoundW"},
	{"146", "tid32Message"},
	{"147", "timeBeginPeriod"},
	{"148", "timeEndPeriod"},
	{"149", "timeGetDevCaps"},
	{"15", "WOW32DriverCallback"},
	{"150", "timeGetSystemTime"},
	{"151", "timeGetTime"},
	{"152", "timeKillEvent"},
	{"153", "timeSetEvent"},
	{"154", "waveInAddBuffer"},
	{"155", "waveInClose"},
	{"156", "waveInGetDevCapsA"},
	{"157", "waveInGetDevCapsW"},
	{"158", "waveInGetErrorTextA"},
	{"159", "waveInGetErrorTextW"},
	{"16", "WOW32ResolveMultiMediaHandle"},
	{"160", "waveInGetID"},
	{"161", "waveInGetNumDevs"},
	{"162", "waveInGetPosition"},
	{"163", "waveInMessage"},
	{"164", "waveInOpen"},
	{"165", "waveInPrepareHeader"},
	{"166", "waveInReset"},
	{"167", "waveInStart"},
	{"168", "waveInStop"},
	{"169", "waveInUnprepareHeader"},
	{"17", "WOWAppExit"},
	{"170", "waveOutBreakLoop"},
	{"171", "waveOutClose"},
	{"172", "waveOutGetDevCapsA"},
	{"173", "waveOutGetDevCapsW"},
	{"174", "waveOutGetErrorTextA"},
	{"175", "waveOutGetErrorTextW"},
	{"176", "waveOutGetID"},
	{"177", "waveOutGetNumDevs"},
	{"178", "waveOutGetPitch"},
	{"179", "waveOutGetPlaybackRate"},
	{"18", "aux32Message"},
	{"180", "waveOutGetPosition"},
	{"181", "waveOutGetVolume"},
	{"182", "waveOutMessage"},
	{"183", "waveOutOpen"},
	{"184", "waveOutPause"},
	{"185", "waveOutPrepareHeader"},
	{"186", "waveOutReset"},
	{"187", "waveOutRestart"},
	{"188", "waveOutSetPitch"},
	{"189", "waveOutSetPlaybackRate"},
	{"19", "auxGetDevCapsA"},
	{"190", "waveOutSetVolume"},
	{"191", "waveOutUnprepareHeader"},
	{"192", "waveOutWrite"},
	{"193", "wid32Message"},
	{"194", "wod32Message"},
	{"20", "auxGetDevCapsW"},
	{"21", "auxGetNumDevs"},
	{"22", "auxGetVolume"},
	{"23", "auxOutMessage"},
	{"24", "auxSetVolume"},
	{"25", "joy32Message"},
	{"26", "joyConfigChanged"},
	{"27", "joyGetDevCapsA"},
	{"28", "joyGetDevCapsW"},
	{"29", "joyGetNumDevs"},
	{"3", "mciExecute"},
	{"30", "joyGetPos"},
	{"31", "joyGetPosEx"},
	{"32", "joyGetThreshold"},
	{"33", "joyReleaseCapture"},
	{"34", "joySetCapture"},
	{"35", "joySetThreshold"},
	{"36", "mci32Message"},
	{"37", "mciDriverNotify"},
	{"38", "mciDriverYield"},
	{"39", "mciFreeCommandResource"},
	{"4", "CloseDriver"},
	{"40", "mciGetCreatorTask"},
	{"41", "mciGetDeviceIDA"},
	{"42", "mciGetDeviceIDFromElementIDA"},
	{"43", "mciGetDeviceIDFromElementIDW"},
	{"44", "mciGetDeviceIDW"},
	{"45", "mciGetDriverData"},
	{"46", "mciGetErrorStringA"},
	{"47", "mciGetErrorStringW"},
	{"48", "mciGetYieldProc"},
	{"49", "mciLoadCommandResource"},
	{"5", "DefDriverProc"},
	{"50", "mciSendCommandA"},
	{"51", "mciSendCommandW"},
	{"52", "mciSendStringA"},
	{"53", "mciSendStringW"},
	{"54", "mciSetDriverData"},
	{"55", "mciSetYieldProc"},
	{"56", "mid32Message"},
	{"57", "midiConnect"},
	{"58", "midiDisconnect"},
	{"59", "midiInAddBuffer"},
	{"6", "DriverCallback"},
	{"60", "midiInClose"},
	{"61", "midiInGetDevCapsA"},
	{"62", "midiInGetDevCapsW"},
	{"63", "midiInGetErrorTextA"},
	{"64", "midiInGetErrorTextW"},
	{"65", "midiInGetID"},
	{"66", "midiInGetNumDevs"},
	{"67", "midiInMessage"},
	{"68", "midiInOpen"},
	{"69", "midiInPrepareHeader"},
	{"7", "DrvGetModuleHandle"},
	{"70", "midiInReset"},
	{"71", "midiInStart"},
	{"72", "midiInStop"},
	{"73", "midiInUnprepareHeader"},
	{"74", "midiOutCacheDrumPatches"},
	{"75", "midiOutCachePatches"},
	{"76", "midiOutClose"},
	{"77", "midiOutGetDevCapsA"},
	{"78", "midiOutGetDevCapsW"},
	{"79", "midiOutGetErrorTextA"},
	{"8", "GetDriverModuleHandle"},
	{"80", "midiOutGetErrorTextW"},
	{"81", "midiOutGetID"},
	{"82", "midiOutGetNumDevs"},
	{"83", "midiOutGetVolume"},
	{"84", "midiOutLongMsg"},
	{"85", "midiOutMessage"},
	{"86", "midiOutOpen"},
	{"87", "midiOutPrepareHeader"},
	{"88", "midiOutReset"},
	{"89", "midiOutSetVolume"},
	{"9", "NotifyCallbackData"},
	{"90", "midiOutShortMsg"},
	{"91", "midiOutUnprepareHeader"},
	{"92", "midiStreamClose"},
	{"93", "midiStreamOpen"},
	{"94", "midiStreamOut"},
	{"95", "midiStreamPause"},
	{"96", "midiStreamPosition"},
	{"97", "midiStreamProperty"},
	{"98", "midiStreamRestart"},
	{"99", "midiStreamStop"},
  {NULL, NULL}
};
typedef int (*GperfForeachCallback)(void *user, const char *k, const char *v);
int gperf_winmm_foreach(GperfForeachCallback cb, void *user) {
  int i = 0; while (kvs[i].name) {
  cb (user, kvs[i].name, kvs[i].value);
  i++;}
  return 0;
}
const char *gperf_winmm_get(const char *s) {
  int i = 0; while (kvs[i].name) {
  if (!strcmp (s, kvs[i].name)) return kvs[i].value;
  i++;}
  return NULL;
}
#define sdb_hash_c_winmm(x,y) gperf_winmm_hash(x)
const unsigned int gperf_winmm_hash(const char *s) {
  int sum = strlen (s);
  while (*s) { sum += *s; s++; }
  return sum;
}
struct {const char *name;void *get;void *hash;void *foreach;} gperf_winmm = {
  .name = "winmm",
  .get = &gperf_winmm_get,
  .hash = &gperf_winmm_hash,
  .foreach = &gperf_winmm_foreach
};

#if MAIN
int main () {
	const char *s = ((char*(*)(char*))gperf_winmm.get)("foo");
	printf ("%s\n", s);
}
#endif
