Add source.c to start handling the various MsiSourceList apis used in
v3 of MSI, and now internally.
Update files.c to use the MsiSourceList apis to make sure our
SourceList keys in the registry are included and correct.

diff --git a/include/msi.h b/include/msi.h
index 1c12782..dc4aa91 100644
--- a/include/msi.h
+++ b/include/msi.h
@@ -148,6 +148,31 @@
     INSTALLTYPE_NETWORK_IMAGE = 1
 } INSTALLTYPE;
 
+typedef enum tagMSIINSTALLCONTEXT
+{
+    MSIINSTALLCONTEXT_FIRSTVISIBLE  =   0,
+    MSIINSTALLCONTEXT_NONE          =   0,
+    MSIINSTALLCONTEXT_USERMANAGED   =   1,
+    MSIINSTALLCONTEXT_USERUNMANAGED =   2,
+    MSIINSTALLCONTEXT_MACHINE       =   4,
+    MSIINSTALLCONTEXT_ALL           = (MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED | MSIINSTALLCONTEXT_MACHINE),
+    MSIINSTALLCONTEXT_ALLUSERMANAGED=   8,
+} MSIINSTALLCONTEXT;
+
+typedef enum tagMSISOURCETYPE
+{
+    MSISOURCETYPE_UNKNOWN = 0x00000000L,
+    MSISOURCETYPE_NETWORK = 0x00000001L,
+    MSISOURCETYPE_URL     = 0x00000002L,
+    MSISOURCETYPE_MEDIA   = 0x00000004
+} MSISOURCETYPE;
+
+typedef enum tagMSICODE
+{
+    MSICODE_PRODUCT = 0x00000000L,
+    MSICODE_PATCH = 0x40000000L
+} MSICODE;
+
 #define MAX_FEATURE_CHARS 38
 
 typedef INT (CALLBACK *INSTALLUI_HANDLERA)(LPVOID, UINT, LPCSTR);
@@ -326,6 +351,19 @@
 UINT WINAPI MsiCloseAllHandles(void);
 INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL, HWND*);
 
+UINT WINAPI MsiSourceListGetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiSourceListGetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPWSTR, LPDWORD);
+#define     MsiSourceListGetInfo WINELIB_NAME_AW(MsiSourceListGetInfo)
+UINT WINAPI MsiSourceListSetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPCSTR);
+UINT WINAPI MsiSourceListSetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPCWSTR);
+#define     MsiSourceListSetInfo WINELIB_NAME_AW(MsiSourceListSetInfo)
+UINT WINAPI MsiSourceListAddSourceExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, DWORD);
+UINT WINAPI MsiSourceListAddSourceExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, DWORD);
+#define     MsiSourceListAddSourceEx WINELIB_NAME_AW(MsiSourceListAddSourceEx)
+UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCSTR, LPCSTR);
+UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCWSTR, LPCWSTR);
+#define     MsiSourceListAddMediaDisk WINELIB_NAME_AW(MsiSourceListAddMediaDisk)
+
 #ifdef __cplusplus
 }
 #endif