]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/hydratoolz/plugin.cpp
reformat code! now the code is only ugly on the *inside*
[xonotic/netradiant.git] / contrib / hydratoolz / plugin.cpp
index 93cd2769d8b9a62d5cd77825218c7cd6465b45b9..1753c78587f6467aae7a713b7a11fe6df869f963 100644 (file)
@@ -1,23 +1,23 @@
 /*
-Copyright (C) 1999-2007 id Software, Inc. and contributors.
-For a list of contributors, see the accompanying CONTRIBUTORS file.
+   Copyright (C) 1999-2006 Id Software, Inc. and contributors.
+   For a list of contributors, see the accompanying CONTRIBUTORS file.
 
-This file is part of GtkRadiant.
+   This file is part of GtkRadiant.
 
-GtkRadiant is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   GtkRadiant is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-GtkRadiant is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   GtkRadiant is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GtkRadiant; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
+   You should have received a copy of the GNU General Public License
+   along with GtkRadiant; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
 
 #include "plugin.h"
 #include "version.h"
@@ -30,8 +30,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     Overview
     ========
 
-    This plugin allows the user to rebuild the "wad" key pair in the worldspawn
-    so that it has a list of all the .wad files in use.
 
     Version History
     ===============
@@ -39,19 +37,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     v0.1 - 28/May/2002
       - Initial version.
 
-    v1.0 - 10/March/2003
-      - Added more console output
-      - Removed some old test code
-      - Tweaked dialog box.
-      - Fixed up for Radiant 1.3.5
-
 
     ToDo
     ====
 
-    Nothing...
+ * Code it ? :)
 
-*/
+ */
 
 // =============================================================================
 // Globals
@@ -60,62 +52,203 @@ _QERFuncTable_1 g_FuncTable;
 _QERFileSystemTable g_FileSystemTable;
 _QEREntityTable g_EntityTable;
 
+// cast to GtkWidget*
+void *g_pMainWnd;
+
+// =============================================================================
+// Ripped from TexTool.cpp
+
+static void dialog_button_callback(ui::Widget widget, gpointer data)
+{
+    int *loop, *ret;
+
+    auto parent = widget.window();
+    loop = (int *) gtk_object_get_data(GTK_OBJECT(parent), "loop");
+    ret = (int *) gtk_object_get_data(GTK_OBJECT(parent), "ret");
+
+    *loop = 0;
+    *ret = gpointer_to_int(data);
+}
+
+static gint dialog_delete_callback(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+    int *loop;
+
+    gtk_widget_hide(widget);
+    loop = (int *) gtk_object_get_data(GTK_OBJECT(widget), "loop");
+    *loop = 0;
+
+    return TRUE;
+}
+
+int DoMessageBox(const char *lpText, const char *lpCaption, guint32 uType)
+{
+    GtkWidget *w, *hbox;
+    int mode = (uType & MB_TYPEMASK), ret, loop = 1;
+
+    auto window = ui::Window(ui::window_type::TOP);
+    window.connect("delete_event",
+                   G_CALLBACK(dialog_delete_callback), NULL);
+    window.connect("destroy",
+                   G_CALLBACK(gtk_widget_destroy), NULL);
+    gtk_window_set_title(window, lpCaption);
+    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
+    gtk_object_set_data(GTK_OBJECT(window), "loop", &loop);
+    gtk_object_set_data(GTK_OBJECT(window), "ret", &ret);
+    gtk_widget_realize(window);
+
+    auto vbox = ui::VBox(FALSE, 10);
+    window.add(vbox);
+    vbox.show();
+
+    w = ui::Label(lpText);
+    vbox.pack_start(w, FALSE, FALSE, 2);
+    gtk_label_set_justify(GTK_LABEL(w), GTK_JUSTIFY_LEFT);
+    w.show();
+
+    w = gtk_hseparator_new();
+    vbox.pack_start(w, FALSE, FALSE, 2);
+    w.show();
+
+    hbox = ui::HBox(FALSE, 10);
+    vbox.pack_start(hbox, FALSE, FALSE, 2);
+    hbox.show();
+
+    if (mode == MB_OK) {
+        w = ui::Button("Ok");
+        hbox.pack_start(w, TRUE, TRUE, 0);
+        w.connect("clicked",
+                  G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDOK));
+        gtk_widget_set_can_default(w, true);
+        gtk_widget_grab_default(w);
+        w.show();
+        ret = IDOK;
+    } else if (mode == MB_OKCANCEL) {
+        w = ui::Button("Ok");
+        hbox.pack_start(w, TRUE, TRUE, 0);
+        w.connect("clicked",
+                  G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDOK));
+        gtk_widget_set_can_default(w, true);
+        gtk_widget_grab_default(w);
+        w.show();
+
+        w = ui::Button("Cancel");
+        hbox.pack_start(w, TRUE, TRUE, 0);
+        w.connect("clicked",
+                  G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDCANCEL));
+        w.show();
+        ret = IDCANCEL;
+    } else if (mode == MB_YESNOCANCEL) {
+        w = ui::Button("Yes");
+        hbox.pack_start(w, TRUE, TRUE, 0);
+        w.connect("clicked",
+                  G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDYES));
+        gtk_widget_set_can_default(w, true);
+        gtk_widget_grab_default(w);
+        w.show();
+
+        w = ui::Button("No");
+        hbox.pack_start(w, TRUE, TRUE, 0);
+        w.connect("clicked",
+                  G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDNO));
+        w.show();
+
+        w = ui::Button("Cancel");
+        hbox.pack_start(w, TRUE, TRUE, 0);
+        w.connect("clicked",
+                  G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDCANCEL));
+        w.show();
+        ret = IDCANCEL;
+    } else /* if (mode == MB_YESNO) */
+    {
+        w = ui::Button("Yes");
+        hbox.pack_start(w, TRUE, TRUE, 0);
+        w.connect("clicked",
+                  G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDYES));
+        gtk_widget_set_can_default(w, true);
+        gtk_widget_grab_default(w);
+        w.show();
+
+        w = ui::Button("No");
+        hbox.pack_start(w, TRUE, TRUE, 0);
+        w.connect("clicked",
+                  G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDNO));
+        w.show();
+        ret = IDNO;
+    }
+
+    window.show();
+    gtk_grab_add(window);
+
+    while (loop) {
+        gtk_main_iteration();
+    }
+
+    gtk_grab_remove(window);
+    window.destroy();
+
+    return ret;
+}
+
+// End of rip from TexTool.cpp
 
 // =============================================================================
 // Ripped from cmdlib.cpp
 
 /*
-====================
-Extract file parts
-====================
-*/
-void HYDRA_ExtractFilePath (const char *path, char *dest)
+   ====================
+   Extract file parts
+   ====================
+ */
+void ExtractFilePath(const char *path, char *dest)
 {
-  const char *src;
+    const char *src;
 
-  src = path + strlen(path) - 1;
+    src = path + strlen(path) - 1;
 
 //
 // back up until a \ or the start
 //
-  while (src != path && *(src-1) != '/' && *(src-1) != '\\')
-    src--;
+    while (src != path && *(src - 1) != '/' && *(src - 1) != '\\') {
+        src--;
+    }
 
-  memcpy (dest, path, src-path);
-  dest[src-path] = 0;
+    memcpy(dest, path, src - path);
+    dest[src - path] = 0;
 }
 
-void HYDRA_ExtractFileName (const char *path, char *dest)
+void ExtractFileName(const char *path, char *dest)
 {
-  const char *src;
+    const char *src;
 
-  src = path + strlen(path) - 1;
+    src = path + strlen(path) - 1;
 
 //
 // back up until a \ or the start
 //
-  while (src != path && *(src-1) != '/'
-         && *(src-1) != '\\' )
-    src--;
-
-  while (*src)
-  {
-    *dest++ = *src++;
-  }
-  *dest = 0;
+    while (src != path && *(src - 1) != '/'
+           && *(src - 1) != '\\') {
+               src--;
+    }
+
+    while (*src) {
+        *dest++ = *src++;
+    }
+    *dest = 0;
 }
 
-void HYDRA_ConvertDOSToUnixName( char *dst, const char *src )
+void ConvertDOSToUnixName(char *dst, const char *src)
 {
-  while ( *src )
-  {
-    if ( *src == '\\' )
-      *dst = '/';
-    else
-      *dst = *src;
-    dst++; src++;
-  }
-  *dst = 0;
+    while (*src) {
+        if (*src == '\\') {
+            *dst = '/';
+        } else {
+            *dst = *src;
+        }
+        dst++;
+        src++;
+    }
+    *dst = 0;
 }
 
 // End of rip from cmdlib.cpp
@@ -128,201 +261,168 @@ void HYDRA_ConvertDOSToUnixName( char *dst, const char *src )
 
 GSList *AddToWadList(GSList *wadlist, const char *shadername, const char *wad)
 {
-  char tmpstr[QER_MAX_NAMELEN];
-  char *wadname;
-  if (!shadername && !wad) return wadlist;
-
-  if (shadername)
-  {
-    if (strcmp(shadername,"color") == 0)
-      return wadlist;
-    HYDRA_ExtractFilePath(shadername,tmpstr);
-    // Sys_Printf("checking: %s\n",shadername);
-
-    int l = strlen(tmpstr) - 1;
-
-    if (tmpstr[l] == '/' || tmpstr[l] == '\\')
-      tmpstr[l] = 0;
-    else
-    {
-      Sys_Printf("HydraToolz: WARNING: Unknown wad file for shader %s\n",shadername);
-      return wadlist;
+    char tmpstr[QER_MAX_NAMELEN];
+    char *wadname;
+    if (!shadername && !wad) {
+        return wadlist;
     }
 
-    HYDRA_ExtractFileName(tmpstr,tmpstr);
-
-    wadname = (char *)malloc(strlen(tmpstr) + 5);
-    sprintf(wadname,"%s.wad",tmpstr);
-  }
-  else
-  {
-    wadname=strdup(wad);
-  }
-
-  for (GSList *l = wadlist; l != NULL ; l = l->next)
-  {
-    if (!stricmp((char *)l->data,wadname))
-    {
-      free( wadname );
-      return wadlist;
-    }
-  }
-
-  Sys_Printf("HydraToolz: Adding Wad File to WAD list: %s (reason: ",wadname);
-  if (shadername)
-    Sys_Printf("see shader \"%s\")\n", shadername);
-  else
-    Sys_Printf("already in WAD key. )\n");
-  return ( g_slist_append (wadlist, wadname ) );
-}
-
-void UpdateWadKeyPair( void )
-{
-  int i,nb;
-
-  char wads[2048]; // change to CString usage ?
-  *wads = 0;
-  char *p1,*p2;
-  entity_t *pEntity;
-  epair_t *pEpair;
-  GSList *wadlist = NULL;
-  face_t  *f;
-  brush_t *b;
-  char cleanwadname[QER_MAX_NAMELEN];
-  char *actualwad;
-
-
-  pEntity = (entity_t *)g_FuncTable.m_pfnGetEntityHandle(0); // get the worldspawn ent
-
-  Sys_Printf("HydraToolz: Searching for in-use wad files...\n");
-  for(pEpair = pEntity->epairs; pEpair != NULL; pEpair = pEpair->next)
-  {
-    if (stricmp(pEpair->key,"wad") == 0)
-    {
-      strcpy(wads,pEpair->value);
-      HYDRA_ConvertDOSToUnixName(wads,wads);
-
-      Sys_Printf("HydraToolz: Current wad key is \"%s\"!\n",wads);
-
-      // ok, we got the list of ; delimited wads, now split it into a GSList that contains
-      // just the wad names themselves.
-
-      p1 = wads;
+    if (shadername) {
+        if (strcmp(shadername, "color") == 0) {
+            return wadlist;
+        }
+        ExtractFilePath(shadername, tmpstr);
+        // Sys_Printf("checking: %s\n",shadername);
 
-      do
-      {
-        p2 = strchr(p1,';');
-        if (p2)
-          *p2 = 0; // swap the ; with a null terminator
+        int l = strlen(tmpstr) - 1;
 
-        if (strchr(p1,'/') || strchr(p1,'\\'))
-        {
-          HYDRA_ExtractFileName(p1,cleanwadname);
-          wadlist = AddToWadList (wadlist, NULL, cleanwadname);
-        }
-        else
-        {
-          wadlist = AddToWadList (wadlist, NULL, p1);
+        if (tmpstr[l] == '/' || tmpstr[l] == '\\') {
+            tmpstr[l] = 0;
+        } else {
+            Sys_Printf("WARNING: Unknown wad file for shader %s\n", shadername);
+            return wadlist;
         }
-        if (p2)
-          p1 = p2+1; // point back to the remainder of the string
-        else
-          p1 = NULL; // make it so we exit the loop.
-
-      } while (p1);
 
-      // ok, now we have a list of wads in GSList.
-      // now we need to add any new wadfiles (with their paths) to this list
-      // so scan all brushes and see what wads are in use
-      // FIXME: scan brushes only in the region ?
+        ExtractFileName(tmpstr, tmpstr);
 
-      break; // we don't need to process any more key/pairs.
+        wadname = (char *) malloc(strlen(tmpstr) + 5);
+        sprintf(wadname, "%s.wad", tmpstr);
+    } else {
+        wadname = strdup(wad);
     }
-  }
-
-  if (!*wads)
-    Sys_Printf("HydraToolz: No \"wad\" keypair wound in worldspawn\n");
 
+    for (GSList *l = wadlist; l != NULL; l = l->next) {
+        if (string_equal_nocase((char *) l->data, wadname)) {
+            free(wadname);
+            return wadlist;
+        }
+    }
 
-  nb = g_FuncTable.m_pfnAllocateActiveBrushHandles();
-  for( i = 0; i < nb; i++ )
-       {
-    b = (brush_t *)g_FuncTable.m_pfnGetActiveBrushHandle(i);
-    if (b->patchBrush) // patches in halflife ?
-    {
-      wadlist = AddToWadList(wadlist, b->pPatch->pShader->getName(),NULL);
-    } else
-    {
-      for (f=b->brush_faces ; f ; f=f->next)
-      {
-        wadlist = AddToWadList(wadlist, f->pShader->getName(),NULL);
-      }
+    Sys_Printf("Adding Wad File to WAD list: %s (reason: ", wadname);
+    if (shadername) {
+        Sys_Printf("see shader \"%s\")\n", shadername);
+    } else {
+        Sys_Printf("already in WAD key. )\n");
     }
-  }
-  g_FuncTable.m_pfnReleaseActiveBrushHandles();
-
-  nb = g_FuncTable.m_pfnAllocateSelectedBrushHandles();
-  for( i = 0; i < nb; i++ )
-       {
-    b = (brush_t *)g_FuncTable.m_pfnGetSelectedBrushHandle(i);
-    if (b->patchBrush) // patches in halflife ?
-    {
-      wadlist = AddToWadList(wadlist, b->pPatch->pShader->getName(),NULL);
-    } else
-    {
-      for (f=b->brush_faces ; f ; f=f->next)
-      {
-        wadlist = AddToWadList(wadlist, f->pShader->getName(),NULL);
-      }
+    return (g_slist_append(wadlist, wadname));
+}
+
+void UpdateWadKeyPair(void)
+{
+    int i, nb;
+
+    char wads[2048]; // change to CString usage ?
+    wads[0] = 0;
+    char *p1, *p2;
+    entity_t *pEntity;
+    epair_t *pEpair;
+    GSList *wadlist = NULL;
+    face_t *f;
+    brush_t *b;
+    char cleanwadname[QER_MAX_NAMELEN];
+    const char *actualwad;
+
+
+    pEntity = (entity_t *) g_FuncTable.m_pfnGetEntityHandle(0); // get the worldspawn ent
+
+    Sys_Printf("Searching for in-use wad files...\n");
+    for (pEpair = pEntity->epairs; pEpair != NULL; pEpair = pEpair->next) {
+        if (string_equal_nocase(pEpair->key, "wad")) {
+            strcpy(wads, pEpair->value);
+            ConvertDOSToUnixName(wads, wads);
+
+            // ok, we got the list of ; delimited wads, now split it into a GSList that contains
+            // just the wad names themselves.
+
+            p1 = wads;
+
+            do {
+                p2 = strchr(p1, ';');
+                if (p2) {
+                    *p2 = 0; // swap the ; with a null terminator
+
+                }
+                if (strchr(p1, '/') || strchr(p1, '\\')) {
+                    ExtractFileName(p1, cleanwadname);
+                    wadlist = AddToWadList(wadlist, NULL, cleanwadname);
+                } else {
+                    wadlist = AddToWadList(wadlist, NULL, p1);
+                }
+                if (p2) {
+                    p1 = p2 + 1; // point back to the remainder of the string
+                } else {
+                    p1 = NULL; // make it so we exit the loop.
+
+                }
+            } while (p1);
+
+            // ok, now we have a list of wads in GSList.
+            // now we need to add any new wadfiles (with their paths) to this list
+            // so scan all brushes and see what wads are in use
+            // FIXME: scan brushes only in the region ?
+
+            break; // we don't need to process any more key/pairs.
+        }
     }
-  }
-  g_FuncTable.m_pfnReleaseSelectedBrushHandles();
-
-  Sys_Printf("HydraToolz: Rebuilding worldspawn's \"wad\" key-pair...\n");
-  // Now we have a complete list of wadnames (without paths) so we just have to turn this
-  // back to a ; delimited list.
-
-  *wads = 0;
-  while (wadlist)
-  {
-    // skip wad files if they start with "common-"
-    if (strnicmp((char *)wadlist->data,"common-",7) == 0)
-    {
-      Sys_Printf("HydraToolz: Skipping radiant/user-supplied wad file %s\n",(char *)wadlist->data);
+
+    nb = g_FuncTable.m_pfnAllocateActiveBrushHandles();
+    for (i = 0; i < nb; i++) {
+        b = (brush_t *) g_FuncTable.m_pfnGetActiveBrushHandle(i);
+        if (b->patchBrush) { // patches in halflife ?
+            wadlist = AddToWadList(wadlist, b->pPatch->pShader->getName(), NULL);
+        } else {
+            for (f = b->brush_faces; f; f = f->next) {
+                wadlist = AddToWadList(wadlist, f->pShader->getName(), NULL);
+            }
+        }
     }
-    else
-    {
-      if (wads[0])
-        strcat(wads,";");
-
-      actualwad = vfsGetFullPath((char *)wadlist->data, 0, 0);
-
-      if (actualwad)
-      {
-        strcat(wads, actualwad);
-      }
-      else
-      {
-        Sys_Printf("HydraToolz: WARNING: could not locate wad file %s\n",(char *)wadlist->data);
-        strcat(wads, (char *)wadlist->data);
-      }
+    g_FuncTable.m_pfnReleaseActiveBrushHandles();
+
+    nb = g_FuncTable.m_pfnAllocateSelectedBrushHandles();
+    for (i = 0; i < nb; i++) {
+        b = (brush_t *) g_FuncTable.m_pfnGetSelectedBrushHandle(i);
+        if (b->patchBrush) { // patches in halflife ?
+            wadlist = AddToWadList(wadlist, b->pPatch->pShader->getName(), NULL);
+        } else {
+            for (f = b->brush_faces; f; f = f->next) {
+                wadlist = AddToWadList(wadlist, f->pShader->getName(), NULL);
+            }
+        }
     }
+    g_FuncTable.m_pfnReleaseSelectedBrushHandles();
+
+    // Now we have a complete list of wadnames (without paths) so we just have to turn this
+    // back to a ; delimited list.
+
+    wads[0] = 0;
+    while (wadlist) {
+        if (string_equal_nocase((char *) wadlist->data, "common-hydra.wad")) {
+            Sys_Printf("Skipping radiant-supplied wad file %s\n", (char *) wadlist->data);
+        } else {
+            if (wads[0]) {
+                strcat(wads, ";");
+            }
+
+            actualwad = vfsGetFullPath((char *) wadlist->data);
+
+            if (actualwad) {
+                strcat(wads, actualwad);
+            } else {
+                Sys_Printf("WARNING: could not locate wad file %s\n", (char *) wadlist->data);
+                strcat(wads, (char *) wadlist->data);
+            }
+        }
 
-    free (wadlist->data);
-    wadlist = g_slist_remove (wadlist, wadlist->data);
-  }
-
-  // store the wad list back in the worldspawn.
-  if (*wads)
-  {
-    //free(pEpair->value);
-    //pEpair->value = strdup(wads);
-    SetKeyValue(pEntity, "wad", wads);
-    Sys_Printf("HydraToolz: Setting worldspawn \"wad\" key value to \"%s\"\n",wads);
-
-  }
+        free(wadlist->data);
+        wadlist = g_slist_remove(wadlist, wadlist->data);
+    }
 
-  Sys_Printf("HydraToolz: Finished rebuilding wad keypair!\n");
+    // store the wad list back in the worldspawn.
+    if (wads[0]) {
+        //free(pEpair->value);
+        //pEpair->value = strdup(wads);
+        SetKeyValue(pEntity, "wad", wads);
+    }
 
 }
 
@@ -330,88 +430,94 @@ void UpdateWadKeyPair( void )
 // PLUGIN INTERFACE STUFF
 
 // plugin name
-const char *PLUGIN_NAME = "HydraToolz";
+const char *PLUGIN_NAME = "Q3 Texture Tools";
 
 // commands in the menu
 const char *PLUGIN_COMMANDS = "About...;Create/Update WAD keypair";
 
-const char *PLUGIN_ABOUT = "HydraToolz v1.0 for GTKRadiant\n\n"
-                           "By Hydra!";
+const char *PLUGIN_ABOUT = "HydraToolz for GTKRadiant\n\n"
+        "By Hydra!";
+
+extern "C" void *WINAPI
 
-extern "C" void* WINAPI QERPlug_GetFuncTable ()
+QERPlug_GetFuncTable()
 {
-  return &g_FuncTable;
+    return &g_FuncTable;
 }
 
-const char* QERPlug_Init (void* hApp, void *pWidget)
+const char *QERPlug_Init(void *hApp, void *pWidget)
 {
-  return "HydraToolz for GTKRadiant"; // do we need this ? hmmm
+    GtkWidget *pMainWidget = static_cast<GtkWidget *>( pWidget );
+
+    g_pMainWnd = pMainWidget;
+    memset(&g_FuncTable, 0, sizeof(_QERFuncTable_1));
+    g_FuncTable.m_nSize = sizeof(_QERFuncTable_1);
+    return "HydraToolz for GTKRadiant"; // do we need this ? hmmm
 }
 
-const charQERPlug_GetName()
+const char *QERPlug_GetName()
 {
-  return (char*)PLUGIN_NAME;
+    return (char *) PLUGIN_NAME;
 }
 
-const charQERPlug_GetCommandList()
+const char *QERPlug_GetCommandList()
 {
-  return PLUGIN_COMMANDS;
+    return PLUGIN_COMMANDS;
 }
 
-extern "C" void QERPlug_Dispatch(const charp, vec3_t vMin, vec3_t vMax, bool bSingleBrush)
+extern "C" void QERPlug_Dispatch(const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush)
 {
-       if(!strcmp(p, "Create/Update WAD keypair"))
-               UpdateWadKeyPair();
-       else if(!strcmp(p, "About..."))
-               g_FuncTable.m_pfnMessageBox(NULL, PLUGIN_ABOUT, "About", MB_OK, NULL);
+    if (!strcmp(p, "Create/Update WAD keypair")) {
+        UpdateWadKeyPair();
+    } else if (!strcmp(p, "About...")) {
+        g_FuncTable.m_pfnMessageBox((GtkWidget *) NULL, PLUGIN_ABOUT, "About", eMB_OK);
+    }
 }
 
 // =============================================================================
 // SYNAPSE
 
-CSynapseServerg_pSynapseServer = NULL;
+CSynapseServer *g_pSynapseServer = NULL;
 CSynapseClientHydraToolz g_SynapseClient;
 
-#if __GNUC__ >= 4
-#pragma GCC visibility push(default)
-#endif
-extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) {
-#if __GNUC__ >= 4
-#pragma GCC visibility pop
-#endif
-  if (strcmp(version, SYNAPSE_VERSION))
-  {
-    Syn_Printf("ERROR: synapse API version mismatch: should be '" SYNAPSE_VERSION "', got '%s'\n", version);
-    return NULL;
-  }
-  g_pSynapseServer = pServer;
-  g_pSynapseServer->IncRef();
-  Set_Syn_Printf(g_pSynapseServer->Get_Syn_Printf());
-
-  g_SynapseClient.AddAPI(PLUGIN_MAJOR, "HydraToolz", sizeof(_QERPluginTable));
-  g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable);
-  g_SynapseClient.AddAPI(VFS_MAJOR, "wad", sizeof(g_FileSystemTable), SYN_REQUIRE, &g_FileSystemTable);
-  g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(g_EntityTable), SYN_REQUIRE, &g_EntityTable);
-  return &g_SynapseClient;
+extern "C" CSynapseClient *SYNAPSE_DLL_EXPORT
+
+Synapse_EnumerateInterfaces(const char *version, CSynapseServer *pServer)
+{
+    if (strcmp(version, SYNAPSE_VERSION)) {
+        Syn_Printf("ERROR: synapse API version mismatch: should be '"
+        SYNAPSE_VERSION
+        "', got '%s'\n", version );
+        return NULL;
+    }
+    g_pSynapseServer = pServer;
+    g_pSynapseServer->IncRef();
+    Set_Syn_Printf(g_pSynapseServer->Get_Syn_Printf());
+
+    g_SynapseClient.AddAPI(PLUGIN_MAJOR, "HydraToolz", sizeof(_QERPluginTable));
+    g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable);
+    g_SynapseClient.AddAPI(VFS_MAJOR, "wad", sizeof(g_FileSystemTable), SYN_REQUIRE, &g_FileSystemTable);
+    g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(g_EntityTable), SYN_REQUIRE, &g_EntityTable);
+    return &g_SynapseClient;
 }
 
 bool CSynapseClientHydraToolz::RequestAPI(APIDescriptor_t *pAPI)
 {
-  if (!strcmp(pAPI->major_name, PLUGIN_MAJOR))
-  {
-    _QERPluginTable *pTable = static_cast<_QERPluginTable*>(pAPI->mpTable);
-    pTable->m_pfnQERPlug_Init = QERPlug_Init;
-    pTable->m_pfnQERPlug_GetName = QERPlug_GetName;
-    pTable->m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList;
-    pTable->m_pfnQERPlug_Dispatch = QERPlug_Dispatch;
-    return true;
-  }
-
-  Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo());
-  return false;
+    if (!strcmp(pAPI->major_name, PLUGIN_MAJOR)) {
+        _QERPluginTable *pTable = static_cast<_QERPluginTable *>( pAPI->mpTable );
+        pTable->m_pfnQERPlug_Init = QERPlug_Init;
+        pTable->m_pfnQERPlug_GetName = QERPlug_GetName;
+        pTable->m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList;
+        pTable->m_pfnQERPlug_Dispatch = QERPlug_Dispatch;
+        return true;
+    }
+
+    Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo());
+    return false;
 }
 
-const charCSynapseClientHydraToolz::GetInfo()
+const char *CSynapseClientHydraToolz::GetInfo()
 {
-  return "HydraToolz plugin built " __DATE__ " " RADIANT_VERSION;
+    return "HydraToolz plugin built " __DATE__ " "
+    RADIANT_VERSION;
 }