Eric Kohl : widl: Support multiple interfaces per file.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Dec 12 06:44:57 CST 2005


Module: wine
Branch: refs/heads/master
Commit: 6744d4e3ea2ead8a44a6a15d5a709fdb4bff51ad
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=6744d4e3ea2ead8a44a6a15d5a709fdb4bff51ad

Author: Eric Kohl <eric.kohl at t-online.de>
Date:   Mon Dec 12 12:11:44 2005 +0100

widl: Support multiple interfaces per file.

---

 tools/widl/client.c |   48 +++++++++++++++++++++++++++++-------------------
 tools/widl/server.c |   46 ++++++++++++++++++++++++++++------------------
 2 files changed, 57 insertions(+), 37 deletions(-)

diff --git a/tools/widl/client.c b/tools/widl/client.c
index 6c33692..7d583a0 100644
--- a/tools/widl/client.c
+++ b/tools/widl/client.c
@@ -386,37 +386,47 @@ static void init_client(void)
 
 void write_client(ifref_t *ifaces)
 {
-    ifref_t *lcur = ifaces;
+    ifref_t *iface = ifaces;
 
     if (!do_client)
         return;
-    if (!lcur)
+    if (!iface)
         return;
-    END_OF_LIST(lcur);
+    END_OF_LIST(iface);
 
     init_client();
     if (!client)
         return;
 
-    write_formatstringsdecl(lcur->iface);
-    write_implicithandledecl(lcur->iface);
+    while (iface)
+    {
+        fprintf(client, "/*****************************************************************************\n");
+        fprintf(client, " * %s interface\n", iface->iface->name);
+        fprintf(client, " */\n");
+        fprintf(client, "\n");
+
+        write_formatstringsdecl(iface->iface);
+        write_implicithandledecl(iface->iface);
+
+        write_clientinterfacedecl(iface->iface);
+        write_stubdescdecl(iface->iface);
+        write_bindinghandledecl(iface->iface);
+
+        write_function_stubs(iface->iface);
+        write_stubdescriptor(iface->iface);
+
+        print_client("#if !defined(__RPC_WIN32__)\n");
+        print_client("#error  Invalid build platform for this stub.\n");
+        print_client("#endif\n");
+        fprintf(client, "\n");
 
-    write_clientinterfacedecl(lcur->iface);
-    write_stubdescdecl(lcur->iface);
-    write_bindinghandledecl(lcur->iface);
+        write_procformatstring(client, iface->iface);
+        write_typeformatstring(client);
 
-    write_function_stubs(lcur->iface);
-    write_stubdescriptor(lcur->iface);
+        fprintf(client, "\n");
 
-    print_client("#if !defined(__RPC_WIN32__)\n");
-    print_client("#error  Invalid build platform for this stub.\n");
-    print_client("#endif\n");
-    fprintf(client, "\n");
-
-    write_procformatstring(client, lcur->iface);
-    write_typeformatstring(client);
-
-    fprintf(client, "\n");
+        iface = PREV_LINK(iface);
+    }
 
     fclose(client);
 }
diff --git a/tools/widl/server.c b/tools/widl/server.c
index 668e492..68b46e6 100644
--- a/tools/widl/server.c
+++ b/tools/widl/server.c
@@ -432,36 +432,46 @@ static void init_server(void)
 
 void write_server(ifref_t *ifaces)
 {
-    ifref_t *lcur = ifaces;
+    ifref_t *iface = ifaces;
 
     if (!do_server)
         return;
-    if (!lcur)
+    if (!iface)
         return;
-    END_OF_LIST(lcur);
+    END_OF_LIST(iface);
 
     init_server();
     if (!server)
         return;
 
-    write_formatstringsdecl(lcur->iface);
-    write_serverinterfacedecl(lcur->iface);
-    write_stubdescdecl(lcur->iface);
+    while (iface)
+    {
+        fprintf(server, "/*****************************************************************************\n");
+        fprintf(server, " * %s interface\n", iface->iface->name);
+        fprintf(server, " */\n");
+        fprintf(server, "\n");
+
+        write_formatstringsdecl(iface->iface);
+        write_serverinterfacedecl(iface->iface);
+        write_stubdescdecl(iface->iface);
+
+        write_function_stubs(iface->iface);
+
+        write_stubdescriptor(iface->iface);
+        write_dispatchtable(iface->iface);
+
+        print_server("#if !defined(__RPC_WIN32__)\n");
+        print_server("#error  Invalid build platform for this stub.\n");
+        print_server("#endif\n");
+        fprintf(server, "\n");
 
-    write_function_stubs(lcur->iface);
+        write_procformatstring(server, iface->iface);
+        write_typeformatstring(server);
 
-    write_stubdescriptor(lcur->iface);
-    write_dispatchtable(lcur->iface);
+        fprintf(server, "\n");
 
-    print_server("#if !defined(__RPC_WIN32__)\n");
-    print_server("#error  Invalid build platform for this stub.\n");
-    print_server("#endif\n");
-    fprintf(server, "\n");
-
-    write_procformatstring(server, lcur->iface);
-    write_typeformatstring(server);
-
-    fprintf(server, "\n");
+        iface = PREV_LINK(iface);
+    }
 
     fclose(server);
 }




More information about the wine-cvs mailing list