widl: Only output code for non-object interfaces in client and server.

Only output code for non-object interfaces in client and server
generation and convert the while loops into for loops.
diff --git a/tools/widl/client.c b/tools/widl/client.c
index c2af6b9..528ffbf 100644
--- a/tools/widl/client.c
+++ b/tools/widl/client.c
@@ -491,8 +491,11 @@
     if (!client)
         return;
 
-    while (iface)
+    for (; iface; iface = PREV_LINK(iface))
     {
+        if (is_object(iface->iface->attrs) || is_local(iface->iface->attrs))
+            continue;
+
         fprintf(client, "/*****************************************************************************\n");
         fprintf(client, " * %s interface\n", iface->iface->name);
         fprintf(client, " */\n");
@@ -526,8 +529,6 @@
                 write_expr_eval_routine_list(client, iface->iface->name);
             write_stubdescriptor(iface->iface, expr_eval_routines);
         }
-
-        iface = PREV_LINK(iface);
     }
 
     fclose(client);
diff --git a/tools/widl/server.c b/tools/widl/server.c
index a7f3a74..3abd35e 100644
--- a/tools/widl/server.c
+++ b/tools/widl/server.c
@@ -601,7 +601,7 @@
 
     if (!do_server)
         return;
-    if (!iface)
+    if (!ifaces)
         return;
     END_OF_LIST(iface);
 
@@ -609,8 +609,11 @@
     if (!server)
         return;
 
-    while (iface)
+    for (; iface; iface = PREV_LINK(iface))
     {
+        if (is_object(iface->iface->attrs) || is_local(iface->iface->attrs))
+            continue;
+
         fprintf(server, "/*****************************************************************************\n");
         fprintf(server, " * %s interface\n", iface->iface->name);
         fprintf(server, " */\n");
@@ -643,8 +646,6 @@
             write_stubdescriptor(iface->iface, expr_eval_routines);
             write_dispatchtable(iface->iface);
         }
-
-        iface = PREV_LINK(iface);
     }
 
     fclose(server);