]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/bobtoolz/funchandlers.cpp
reformat code! now the code is only ugly on the *inside*
[xonotic/netradiant.git] / contrib / bobtoolz / funchandlers.cpp
index c83d2ae0a0341b50b31a0b78e84e467ed2e361d7..9242cc569e2fa364fb81173825baea9f45156b22 100644 (file)
@@ -1,21 +1,21 @@
 /*
-BobToolz plugin for GtkRadiant
-Copyright (C) 2001 Gordon Biggans
+   BobToolz plugin for GtkRadiant
+   Copyright (C) 2001 Gordon Biggans
 
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
-This library 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
-Lesser General Public License for more details.
+   This library 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
+   Lesser General Public License for more details.
 
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*/
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
 
 #include "StdAfx.h"
 
@@ -39,465 +39,458 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #include "DShape.h"
 
 // for autocaulk
-list<Str> exclusionList;               // whole brush exclusion
-list<Str> exclusionList_Face;  // single face exclusion
+std::list <Str> exclusionList;       // whole brush exclusion
+std::list <Str> exclusionList_Face;  // single face exclusion
 
 BOOL el1Loaded;
 BOOL el2Loaded;
 
-DBobView*      g_PathView = NULL;
+DBobView *g_PathView = NULL;
 // -------------
 
 /************************
-       Global Variables
+    Global Variables
 ************************/
 
-CPolygonDialog                 polygonDlg;
-CIntersectDialog               intrDlg;
-CStairDialog                   stairDlg;
-CDoorDialog                            doorDlg;
-CAutoCaulkStartDialog  autocaulkDlg;
-CTextureResetDialog            texRstDlg;
-CPathPlotterDialog             ppDlg;
+CPolygonDialog polygonDlg;
+CIntersectDialog intrDlg;
+CStairDialog stairDlg;
+CDoorDialog doorDlg;
+CAutoCaulkStartDialog autocaulkDlg;
+CTextureResetDialog texRstDlg;
+CPathPlotterDialog ppDlg;
 
 /************************
-       --Main Functions--
+    --Main Functions--
 ************************/
 
 void LoadLists()
 {
-       char buffer[256];
-
-       if(!el1Loaded)
-               el1Loaded = LoadExclusionList(GetFilename(buffer, "bt\\bt-el1.txt"), &exclusionList);
-       if(!el2Loaded)
-               el2Loaded = LoadExclusionList(GetFilename(buffer, "bt\\bt-el2.txt"), &exclusionList);
+    char buffer[256];
+
+    if (!el1Loaded) {
+        el1Loaded = LoadExclusionList(GetFilename(buffer, "bt\\bt-el1.txt"), &exclusionList);
+    }
+    if (!el2Loaded) {
+        el2Loaded = LoadExclusionList(GetFilename(buffer, "bt\\bt-el2.txt"), &exclusionList);
+    }
 }
 
 void PolygonBuilder(vec3_t vMin, vec3_t vMax)
 {
-       // ensure we have something selected
-       if( g_FuncTable.m_pfnSelectedBrushCount() != 1 )
-       {
-               MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
-               return; 
-       }
-
-       // tell Radiant we want to access the selected brushes
-       g_FuncTable.m_pfnAllocateSelectedBrushHandles();
-                       
-       // get handle to size definition brush
-       brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(0);
-       // cant release until we delete the brush, if we do...
-
-       // ask user for type, size, etc....
-       if(polygonDlg.DoModal() == IDOK)
-       {
-               DShape poly;
-
-               g_FuncTable.m_pfnDeleteBrushHandle(brush);
-
-               if(polygonDlg.m_bInverse)
-                       poly.BuildInversePrism(vMin, vMax, polygonDlg.m_nSideCount, polygonDlg.m_bAlignTop);
-               else
-               {
-                       if(polygonDlg.m_bBorder)
-                               poly.BuildBorderedPrism(vMin, vMax, polygonDlg.m_nSideCount, polygonDlg.m_nBorderSize, polygonDlg.m_bAlignTop);
-                       else
-                               poly.BuildRegularPrism(vMin, vMax, polygonDlg.m_nSideCount, polygonDlg.m_bAlignTop);
-               }
-
-               poly.Commit();
-       }
-
-
-       g_FuncTable.m_pfnReleaseSelectedBrushHandles();
+    // ensure we have something selected
+    if (g_FuncTable.m_pfnSelectedBrushCount() != 1) {
+        MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
+        return;
+    }
+
+    // tell Radiant we want to access the selected brushes
+    g_FuncTable.m_pfnAllocateSelectedBrushHandles();
+
+    // get handle to size definition brush
+    brush_t *brush = (brush_t *) g_FuncTable.m_pfnGetSelectedBrushHandle(0);
+    // cant release until we delete the brush, if we do...
+
+    // ask user for type, size, etc....
+    if (polygonDlg.DoModal() == IDOK) {
+        DShape poly;
+
+        g_FuncTable.m_pfnDeleteBrushHandle(brush);
+
+        if (polygonDlg.m_bInverse) {
+            poly.BuildInversePrism(vMin, vMax, polygonDlg.m_nSideCount, polygonDlg.m_bAlignTop);
+        } else {
+            if (polygonDlg.m_bBorder) {
+                poly.BuildBorderedPrism(vMin, vMax, polygonDlg.m_nSideCount, polygonDlg.m_nBorderSize,
+                                        polygonDlg.m_bAlignTop);
+            } else {
+                poly.BuildRegularPrism(vMin, vMax, polygonDlg.m_nSideCount, polygonDlg.m_bAlignTop);
+            }
+        }
+
+        poly.Commit();
+    }
+
+
+    g_FuncTable.m_pfnReleaseSelectedBrushHandles();
 }
 
 
 void IntersectionFinder()
 {
-       if(intrDlg.DoModal() == IDCANCEL)
-               return;
-
-       if(intrDlg.m_nBrushOptions == BRUSH_OPT_SELECTED)
-       {
-               // ensure we have enough brushes selected
-               if( g_FuncTable.m_pfnSelectedBrushCount() < 2 )
-               {
-                       MessageBox(NULL, "Invalid number of brushes selected, choose at least 2", "Error", MB_OK);
-                       return; 
-               }
-       }
-
-       CIntersectInfoDialog*   intrInfoDlg = new CIntersectInfoDialog();
-       intrInfoDlg->Create(IDD_INTERSECT_INFO_DIALOG);
-
-       DEntity world;
-
-       switch(intrDlg.m_nBrushOptions)
-       {
-       case BRUSH_OPT_SELECTED:
-               {
-                       world.LoadSelectedBrushes(&intrInfoDlg->m_prog1);
-                       break;
-               }
-       case BRUSH_OPT_WHOLE_MAP:
-               {
-                       world.LoadFromEntity(0, &intrInfoDlg->m_prog1);
-                       break;
-               }
-       }
-
-       world.RemoveNonCheckBrushes(&exclusionList, intrDlg.m_bUseDetail);
-       BOOL* pbSelectList;
-       if(intrDlg.m_bDuplicateOnly)
-               pbSelectList = world.BuildDuplicateList();
-       else
-               pbSelectList = world.BuildIntersectList();
-
-       world.SelectBrushes(pbSelectList);
-               
-       intrInfoDlg->DestroyWindow();
-       delete[] pbSelectList;
+    if (intrDlg.DoModal() == IDCANCEL) {
+        return;
+    }
+
+    if (intrDlg.m_nBrushOptions == BRUSH_OPT_SELECTED) {
+        // ensure we have enough brushes selected
+        if (g_FuncTable.m_pfnSelectedBrushCount() < 2) {
+            MessageBox(NULL, "Invalid number of brushes selected, choose at least 2", "Error", MB_OK);
+            return;
+        }
+    }
+
+    CIntersectInfoDialog *intrInfoDlg = new CIntersectInfoDialog();
+    intrInfoDlg->Create(IDD_INTERSECT_INFO_DIALOG);
+
+    DEntity world;
+
+    switch (intrDlg.m_nBrushOptions) {
+        case BRUSH_OPT_SELECTED: {
+            world.LoadSelectedBrushes(&intrInfoDlg->m_prog1);
+            break;
+        }
+        case BRUSH_OPT_WHOLE_MAP: {
+            world.LoadFromEntity(0, &intrInfoDlg->m_prog1);
+            break;
+        }
+    }
+
+    world.RemoveNonCheckBrushes(&exclusionList, intrDlg.m_bUseDetail);
+    BOOL *pbSelectList;
+    if (intrDlg.m_bDuplicateOnly) {
+        pbSelectList = world.BuildDuplicateList();
+    } else {
+        pbSelectList = world.BuildIntersectList();
+    }
+
+    world.SelectBrushes(pbSelectList);
+
+    intrInfoDlg->DestroyWindow();
+    delete[] pbSelectList;
 }
 
 void StairBuilder(vec3_t vMin, vec3_t vMax)
 {
-       // ensure we have something selected
-       if( g_FuncTable.m_pfnSelectedBrushCount() != 1 )
-       {
-               MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
-               return; 
-       }
-
-       // tell Radiant we want to access the selected brushes
-       g_FuncTable.m_pfnAllocateSelectedBrushHandles();
-                       
-       // get handle to size definition brush
-       brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(0);
-       // cant release until we delete the brush, if we do...
-
-
-       // ask user for type, size, etc....
-       if(stairDlg.DoModal() == IDOK)
-       {
-               
-               // calc brush size
-               vec3_t size;
-               _VectorSubtract(vMax, vMin, size);
-
-
-               if(((int)size[2] % stairDlg.m_nStairHeight) != 0)
-               {
-                       // stairs must fit evenly into brush
-                       MessageBox(NULL, "Invalid stair height\nHeight of block must be divisable by stair height", "Error", MB_OK);
-               }
-               else
-               {
-                       
-                       // Remove Size Brush
-                       g_FuncTable.m_pfnDeleteBrushHandle(brush);
-
-                                               
-                       // Get Step Count, Direction of Stairs, Stair Style
-                       int numSteps = (int)size[2] / stairDlg.m_nStairHeight;
-                       int direction = stairDlg.m_StairDir;
-                       int style = stairDlg.m_StairStyle;
-
-                       if(stairDlg.m_StairStyle == STYLE_CORNER)
-                       {
-                               BuildCornerStairs(vMin, vMax, numSteps, "textures/common/caulk", (LPCTSTR)stairDlg.m_riserTexture);
-                       }
-                       else
-                       {
-                               // Get Step Dimensions
-                               float stairHeight = (float)stairDlg.m_nStairHeight;
-                               float stairWidth;
-                               if((direction == MOVE_EAST) || (direction == MOVE_WEST))
-                                       stairWidth = (size[0])/numSteps;
-                               else
-                                       stairWidth = (size[1])/numSteps;
-
-
-                               // Build Base For Stair (bob's style)
-                               if(style == STYLE_BOB)
-                                       Build_Wedge(direction, vMin, vMax, TRUE);
-
-
-                               // Set First Step Starting Position
-                               vMax[2] = vMin[2] + stairHeight;
-                               SetInitialStairPos(direction, vMin, vMax, stairWidth);
-
-
-                               // Build The Steps
-                               for(int i = 0; i < numSteps; i++)
-                               {
-                                       if(style == STYLE_BOB)
-                                               Build_StairStep_Wedge(direction, vMin, vMax, "textures/common/caulk", (LPCTSTR)stairDlg.m_riserTexture, stairDlg.m_bDetail);
-                                       else if(style == STYLE_ORIGINAL)
-                                               Build_StairStep(vMin, vMax, "textures/common/caulk", (LPCTSTR)stairDlg.m_riserTexture, direction);
-
-                                       // get step into next position
-                                       MoveBlock(direction, vMin, vMax, stairWidth);
-                                       vMax[2] += stairHeight;
-                                       if(style == STYLE_BOB)
-                                               vMin[2] += stairHeight; // wedge bottom must be raised
-                               }
-                       }
-               }
-       }
-
-       g_FuncTable.m_pfnReleaseSelectedBrushHandles();
+    // ensure we have something selected
+    if (g_FuncTable.m_pfnSelectedBrushCount() != 1) {
+        MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
+        return;
+    }
+
+    // tell Radiant we want to access the selected brushes
+    g_FuncTable.m_pfnAllocateSelectedBrushHandles();
+
+    // get handle to size definition brush
+    brush_t *brush = (brush_t *) g_FuncTable.m_pfnGetSelectedBrushHandle(0);
+    // cant release until we delete the brush, if we do...
+
+
+    // ask user for type, size, etc....
+    if (stairDlg.DoModal() == IDOK) {
+
+        // calc brush size
+        vec3_t size;
+        _VectorSubtract(vMax, vMin, size);
+
+
+        if (((int) size[2] % stairDlg.m_nStairHeight) != 0) {
+            // stairs must fit evenly into brush
+            MessageBox(NULL, "Invalid stair height\nHeight of block must be divisable by stair height", "Error", MB_OK);
+        } else {
+
+            // Remove Size Brush
+            g_FuncTable.m_pfnDeleteBrushHandle(brush);
+
+
+            // Get Step Count, Direction of Stairs, Stair Style
+            int numSteps = (int) size[2] / stairDlg.m_nStairHeight;
+            int direction = stairDlg.m_StairDir;
+            int style = stairDlg.m_StairStyle;
+
+            if (stairDlg.m_StairStyle == STYLE_CORNER) {
+                BuildCornerStairs(vMin, vMax, numSteps, "textures/common/caulk", (LPCTSTR) stairDlg.m_riserTexture);
+            } else {
+                // Get Step Dimensions
+                float stairHeight = (float) stairDlg.m_nStairHeight;
+                float stairWidth;
+                if ((direction == MOVE_EAST) || (direction == MOVE_WEST)) {
+                    stairWidth = (size[0]) / numSteps;
+                } else {
+                    stairWidth = (size[1]) / numSteps;
+                }
+
+
+                // Build Base For Stair (bob's style)
+                if (style == STYLE_BOB) {
+                    Build_Wedge(direction, vMin, vMax, TRUE);
+                }
+
+
+                // Set First Step Starting Position
+                vMax[2] = vMin[2] + stairHeight;
+                SetInitialStairPos(direction, vMin, vMax, stairWidth);
+
+
+                // Build The Steps
+                for (int i = 0; i < numSteps; i++) {
+                    if (style == STYLE_BOB) {
+                        Build_StairStep_Wedge(direction, vMin, vMax, "textures/common/caulk",
+                                              (LPCTSTR) stairDlg.m_riserTexture, stairDlg.m_bDetail);
+                    } else if (style == STYLE_ORIGINAL) {
+                        Build_StairStep(vMin, vMax, "textures/common/caulk", (LPCTSTR) stairDlg.m_riserTexture,
+                                        direction);
+                    }
+
+                    // get step into next position
+                    MoveBlock(direction, vMin, vMax, stairWidth);
+                    vMax[2] += stairHeight;
+                    if (style == STYLE_BOB) {
+                        vMin[2] += stairHeight; // wedge bottom must be raised
+                    }
+                }
+            }
+        }
+    }
+
+    g_FuncTable.m_pfnReleaseSelectedBrushHandles();
 }
 
 void DoorBuilder(vec3_t vMin, vec3_t vMax)
 {
-       // ensure we have something selected
-       if( g_FuncTable.m_pfnSelectedBrushCount() != 1 )
-       {
-               MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
-               return; 
-       }
-
-       // tell Radiant we want to access the selected brushes
-       g_FuncTable.m_pfnAllocateSelectedBrushHandles();
-                       
-       // get handle to size definition brush
-       brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(0);
-       // cant release until we delete the brush, if we do...
-
-
-
-       strcpy(doorDlg.m_fbTextureName.GetBuffer(256), g_FuncTable.m_pfnGetCurrentTexture());
-       
-       if(doorDlg.DoModal() == IDOK)
-       {
-               g_FuncTable.m_pfnDeleteBrushHandle(brush);
-
-               BuildDoorsX2(vMin, vMax, 
-                       doorDlg.m_bSclMainHor, doorDlg.m_bSclMainVert,
-                       doorDlg.m_bSclTrimHor, doorDlg.m_bSclTrimVert,
-                       (LPCTSTR)doorDlg.m_fbTextureName, 
-                       (LPCTSTR)doorDlg.m_trimTextureName,
-                       doorDlg.m_doorDirection);
-       }
-
-       g_FuncTable.m_pfnReleaseSelectedBrushHandles();
+    // ensure we have something selected
+    if (g_FuncTable.m_pfnSelectedBrushCount() != 1) {
+        MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
+        return;
+    }
+
+    // tell Radiant we want to access the selected brushes
+    g_FuncTable.m_pfnAllocateSelectedBrushHandles();
+
+    // get handle to size definition brush
+    brush_t *brush = (brush_t *) g_FuncTable.m_pfnGetSelectedBrushHandle(0);
+    // cant release until we delete the brush, if we do...
+
+
+
+    strcpy(doorDlg.m_fbTextureName.GetBuffer(256), g_FuncTable.m_pfnGetCurrentTexture());
+
+    if (doorDlg.DoModal() == IDOK) {
+        g_FuncTable.m_pfnDeleteBrushHandle(brush);
+
+        BuildDoorsX2(vMin, vMax,
+                     doorDlg.m_bSclMainHor, doorDlg.m_bSclMainVert,
+                     doorDlg.m_bSclTrimHor, doorDlg.m_bSclTrimVert,
+                     (LPCTSTR) doorDlg.m_fbTextureName,
+                     (LPCTSTR) doorDlg.m_trimTextureName,
+                     doorDlg.m_doorDirection);
+    }
+
+    g_FuncTable.m_pfnReleaseSelectedBrushHandles();
 }
 
 void FixBrushes()
 {
-       DEntity world;
+    DEntity world;
 
-       CIntersectInfoDialog*   intrInfoDlg = new CIntersectInfoDialog();
-       intrInfoDlg->Create(IDD_INTERSECT_INFO_DIALOG);
+    CIntersectInfoDialog *intrInfoDlg = new CIntersectInfoDialog();
+    intrInfoDlg->Create(IDD_INTERSECT_INFO_DIALOG);
 
-       world.LoadFromEntity(0, &intrInfoDlg->m_prog1);
+    world.LoadFromEntity(0, &intrInfoDlg->m_prog1);
 
-       intrInfoDlg->DestroyWindow();
-                       
-       CBrushCheckDialog*      chkDlg = new CBrushCheckDialog();
-       chkDlg->Create(IDD_BRUSHCHECKER_DIALOG);
+    intrInfoDlg->DestroyWindow();
 
-       int count = world.FixBrushes(TRUE, &chkDlg->m_prog1);
+    CBrushCheckDialog *chkDlg = new CBrushCheckDialog();
+    chkDlg->Create(IDD_BRUSHCHECKER_DIALOG);
 
-       chkDlg->DestroyWindow();
+    int count = world.FixBrushes(TRUE, &chkDlg->m_prog1);
 
-       Sys_Printf("%i invalid/duplicate planes removed\n", count);
+    chkDlg->DestroyWindow();
+
+    Sys_Printf("%i invalid/duplicate planes removed\n", count);
 }
 
 void AutoCaulk()
 {
-       if(!el1Loaded)
-               autocaulkDlg.m_Warning1 = "WARNING: Brush exclusion list not found\n, ALL BRUSHES WILL BE USED";
-
-       if(autocaulkDlg.DoModal() == IDCANCEL)
-               return;
-
-       if(autocaulkDlg.m_nMode == MODE_AC_BUILD_MINI_PRT)
-       {
-               BuildMiniPrt(&exclusionList);
-               return;
-       }
-
-       CAutoCaulkDialog* acDlg = new CAutoCaulkDialog;
-       acDlg->Create(IDD_AUTOCAULK_DIALOG);
-
-       char filename[1204];
-
-       if(autocaulkDlg.m_nMode == MODE_AC_NORMAL)
-       {
-               char* rad_filename = g_BSPTable.m_pfnGetMapName();
-               if(!rad_filename)
-               {
-                       MessageBox(NULL, "An Error Occurred While Trying To Get The Map Filename", "Error", MB_OK);
-                       acDlg->DestroyWindow();
-                       return;
-               }
-
-               strcpy(filename, rad_filename);
-       
-               char* ext = strrchr(filename, '.')+1;
-               strcpy(ext, "prt");// rename the extension
-       }
-       else
-  {
-    IEpair* pEp = g_EpairTable.m_pfnIEpairForProjectKeys();
-    char *pn = pEp->ValueForKey("mapspath");
-    pEp->DecRef();
-
-         strcpy( filename, pn );
-         strcat( filename, "/ac_prt.prt" );
-  }
-
-       DEntity portals;
-       if(!portals.LoadFromPrt(filename, &acDlg->m_prog1))
-       {
-               MessageBox(NULL, "Failed To Load Portal File", "Error", MB_OK);
-               acDlg->DestroyWindow();
-               return;
-       }
-       // load portal file
-
-       CIntersectInfoDialog*   intrInfoDlg = new CIntersectInfoDialog();
-       intrInfoDlg->Create(IDD_INTERSECT_INFO_DIALOG);
-
-       DEntity world;
-
-       world.LoadFromEntity(0, &intrInfoDlg->m_prog1);
-       intrInfoDlg->DestroyWindow();
-
-       if(autocaulkDlg.m_nMode == MODE_AC_NORMAL)
-               world.RemoveNonCheckBrushes(&exclusionList, FALSE);
-       else
-               world.RemoveNonCheckBrushes(&exclusionList, TRUE);
-
-       world.ResetChecks(&exclusionList_Face);
-
-       int caulkedCount = 0;
-       int killCnt = world.AutoCaulk(&portals, autocaulkDlg.m_bAllowDestruction, &caulkedCount, &acDlg->m_prog2);
-
-       if(autocaulkDlg.m_bAllowDestruction)
-               Sys_Printf("%i unrequired brush(es) killed\n", killCnt);
-       Sys_Printf("%i face(s) caulked\n", caulkedCount);
-
-       acDlg->DestroyWindow();
-}
+    UndoableCommand undo("bobToolz.autoCaulk");
 
-void ResetTextures()
-{
-       texRstDlg.m_TextureName = GetCurrentTexture();
-       texRstDlg.m_NewTextureName = GetCurrentTexture();
+    if (!el1Loaded) {
+        autocaulkDlg.m_Warning1 = "WARNING: Brush exclusion list not found\n, ALL BRUSHES WILL BE USED";
+    }
+
+    if (autocaulkDlg.DoModal() == IDCANCEL) {
+        return;
+    }
 
-       if(texRstDlg.DoModal() == IDCANCEL)
-               return;
+    if (autocaulkDlg.m_nMode == MODE_AC_BUILD_MINI_PRT) {
+        BuildMiniPrt(&exclusionList);
+        return;
+    }
 
-       float fScale[2];
-       float fShift[2];
-       fScale[1] = texRstDlg.m_fScaleVertical;
-       fScale[0] = texRstDlg.m_fScaleHorizontal;
+    CAutoCaulkDialog *acDlg = new CAutoCaulkDialog;
+    acDlg->Create(IDD_AUTOCAULK_DIALOG);
 
-       fShift[1] = (float)texRstDlg.m_nShiftVertical;
-       fShift[0] = (float)texRstDlg.m_nShiftHorizontal;
+    char filename[1204];
 
-       DEntity world;
-       world.LoadFromEntity(0, NULL);
+    if (autocaulkDlg.m_nMode == MODE_AC_NORMAL) {
+        char *rad_filename = g_BSPTable.m_pfnGetMapName();
+        if (!rad_filename) {
+            MessageBox(NULL, "An Error Occurred While Trying To Get The Map Filename", "Error", MB_OK);
+            acDlg->DestroyWindow();
+            return;
+        }
 
-       if(texRstDlg.m_bAllTextures)
-               world.ResetTextures(NULL, fScale, fShift, texRstDlg.m_nRotation, texRstDlg.m_NewTextureName, texRstDlg.m_bOnlyTexture);
-       else            
-               world.ResetTextures(texRstDlg.m_TextureName, fScale, fShift, texRstDlg.m_nRotation, texRstDlg.m_NewTextureName, texRstDlg.m_bOnlyTexture);
+        strcpy(filename, rad_filename);
+
+        char *ext = strrchr(filename, '.') + 1;
+        strcpy(ext, "prt"); // rename the extension
+    } else {
+        IEpair *pEp = g_EpairTable.m_pfnIEpairForProjectKeys();
+        char *pn = pEp->ValueForKey("mapspath");
+        pEp->DecRef();
+
+        strcpy(filename, pn);
+        strcat(filename, "/ac_prt.prt");
+    }
+
+    DEntity portals;
+    if (!portals.LoadFromPrt(filename, &acDlg->m_prog1)) {
+        MessageBox(NULL, "Failed To Load Portal File", "Error", MB_OK);
+        acDlg->DestroyWindow();
+        return;
+    }
+    // load portal file
+
+    CIntersectInfoDialog *intrInfoDlg = new CIntersectInfoDialog();
+    intrInfoDlg->Create(IDD_INTERSECT_INFO_DIALOG);
+
+    DEntity world;
+
+    world.LoadFromEntity(0, &intrInfoDlg->m_prog1);
+    intrInfoDlg->DestroyWindow();
+
+    if (autocaulkDlg.m_nMode == MODE_AC_NORMAL) {
+        world.RemoveNonCheckBrushes(&exclusionList, FALSE);
+    } else {
+        world.RemoveNonCheckBrushes(&exclusionList, TRUE);
+    }
+
+    world.ResetChecks(&exclusionList_Face);
+
+    int caulkedCount = 0;
+    int killCnt = world.AutoCaulk(&portals, autocaulkDlg.m_bAllowDestruction, &caulkedCount, &acDlg->m_prog2);
+
+    if (autocaulkDlg.m_bAllowDestruction) {
+        Sys_Printf("%i unrequired brush(es) killed\n", killCnt);
+    }
+    Sys_Printf("%i face(s) caulked\n", caulkedCount);
+
+    acDlg->DestroyWindow();
+}
+
+void ResetTextures()
+{
+    texRstDlg.m_TextureName = GetCurrentTexture();
+    texRstDlg.m_NewTextureName = GetCurrentTexture();
+
+    if (texRstDlg.DoModal() == IDCANCEL) {
+        return;
+    }
+
+    float fScale[2];
+    float fShift[2];
+    fScale[1] = texRstDlg.m_fScaleVertical;
+    fScale[0] = texRstDlg.m_fScaleHorizontal;
+
+    fShift[1] = (float) texRstDlg.m_nShiftVertical;
+    fShift[0] = (float) texRstDlg.m_nShiftHorizontal;
+
+    DEntity world;
+    world.LoadFromEntity(0, NULL);
+
+    if (texRstDlg.m_bAllTextures) {
+        world.ResetTextures(NULL, fScale, fShift, texRstDlg.m_nRotation, texRstDlg.m_NewTextureName,
+                            texRstDlg.m_bOnlyTexture);
+    } else {
+        world.ResetTextures(texRstDlg.m_TextureName, fScale, fShift, texRstDlg.m_nRotation, texRstDlg.m_NewTextureName,
+                            texRstDlg.m_bOnlyTexture);
+    }
 }
 
 void PathPlotter()
 {
-       int ret = ppDlg.DoModal();
-       if(ret == IDCANCEL)
-               return;
-       if(ret == IDNO)
-       {
-               if(g_PathView)
-                       delete g_PathView;
-
-               return;
-       }
-
-       if( g_FuncTable.m_pfnSelectedBrushCount() != 1)
-       {
-               MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
-               return;
-       }
-
-       // tell Radiant we want to access the selected brushes
-       g_FuncTable.m_pfnAllocateSelectedBrushHandles();
-                       
-       // get handle to size definition brush
-       brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(0);
-       // cant release until we delete the brush, if we do...
-
-       DEntity world;
-       world.LoadEPairList(*g_FuncTable.m_pfnGetEntityKeyValList(brush->owner));
-
-       DEPair* trigger_ep = world.FindEPairByKey("targetname");
-
-       if(trigger_ep)
-       {
-               if(!strcmp(world.m_Classname, "trigger_push"))
-               {
-                       DEPair* target_ep = world.FindEPairByKey("target");
-                       if(target_ep)
-                       {
-                               entity_s* entTarget = FindEntityFromTargetname(target_ep->value);
-                               if(entTarget)
-                               {
-                                       if(g_PathView)
-                                               delete g_PathView;
-                                       g_PathView = new DBobView;
-
-                                       g_PathView->Begin(trigger_ep->value, target_ep->value, ppDlg.m_fMultiplier, ppDlg.m_nPoints, ppDlg.m_fGravity, ppDlg.m_bNoUpdate, ppDlg.m_bShowExtra);
-                               }
-                               else
-                                       MessageBox(NULL, "trigger_push target could not be found.", "Error", MB_OK);
-                       }
-                       else
-                               MessageBox(NULL, "trigger_push has no target.", "Error", MB_OK);
-               }
-               else
-                       MessageBox(NULL, "You must select a 'trigger_push' entity.", "Error", MB_OK);
-       }       
-       else
-               MessageBox(NULL, "Entity must have a targetname", "Error", MB_OK);
-
-       g_FuncTable.m_pfnReleaseSelectedBrushHandles();
+    int ret = ppDlg.DoModal();
+    if (ret == IDCANCEL) {
+        return;
+    }
+    if (ret == IDNO) {
+        if (g_PathView) {
+            delete g_PathView;
+        }
+
+        return;
+    }
+
+    if (g_FuncTable.m_pfnSelectedBrushCount() != 1) {
+        MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
+        return;
+    }
+
+    // tell Radiant we want to access the selected brushes
+    g_FuncTable.m_pfnAllocateSelectedBrushHandles();
+
+    // get handle to size definition brush
+    brush_t *brush = (brush_t *) g_FuncTable.m_pfnGetSelectedBrushHandle(0);
+    // cant release until we delete the brush, if we do...
+
+    DEntity world;
+    world.LoadEPairList(*g_FuncTable.m_pfnGetEntityKeyValList(brush->owner));
+
+    DEPair *trigger_ep = world.FindEPairByKey("targetname");
+
+    if (trigger_ep) {
+        if (!strcmp(world.m_Classname, "trigger_push")) {
+            DEPair *target_ep = world.FindEPairByKey("target");
+            if (target_ep) {
+                entity_s *entTarget = FindEntityFromTargetname(target_ep->value);
+                if (entTarget) {
+                    if (g_PathView) {
+                        delete g_PathView;
+                    }
+                    g_PathView = new DBobView;
+
+                    g_PathView->Begin(trigger_ep->value, target_ep->value, ppDlg.m_fMultiplier, ppDlg.m_nPoints,
+                                      ppDlg.m_fGravity, ppDlg.m_bNoUpdate, ppDlg.m_bShowExtra);
+                } else {
+                    MessageBox(NULL, "trigger_push target could not be found.", "Error", MB_OK);
+                }
+            } else {
+                MessageBox(NULL, "trigger_push has no target.", "Error", MB_OK);
+            }
+        } else {
+            MessageBox(NULL, "You must select a 'trigger_push' entity.", "Error", MB_OK);
+        }
+    } else {
+        MessageBox(NULL, "Entity must have a targetname", "Error", MB_OK);
+    }
+
+    g_FuncTable.m_pfnReleaseSelectedBrushHandles();
 }
 
 void PitBuilder(vec3_t vMin, vec3_t vMax)
 {
-       // ensure we have something selected
-       if( g_FuncTable.m_pfnSelectedBrushCount() != 1 )
-       {
-               MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
-               return; 
-       }
-
-       // tell Radiant we want to access the selected brushes
-       g_FuncTable.m_pfnAllocateSelectedBrushHandles();
-                       
-       // get handle to size definition brush
-       brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(0);
-       // cant release until we delete the brush, if we do...
-
-       DShape pit;
-
-       if(pit.BuildPit(vMin, vMax))
-       {
-               pit.Commit();
-
-               g_FuncTable.m_pfnDeleteBrushHandle(brush);
-       }
-       else
-               MessageBox(NULL, "Failed To Make Pit\nTry Making The Brush Bigger", "Error", MB_OK);
-
-       g_FuncTable.m_pfnReleaseSelectedBrushHandles();
+    // ensure we have something selected
+    if (g_FuncTable.m_pfnSelectedBrushCount() != 1) {
+        MessageBox(NULL, "Invalid number of brushes selected, chose 1 only", "Error", MB_OK);
+        return;
+    }
+
+    // tell Radiant we want to access the selected brushes
+    g_FuncTable.m_pfnAllocateSelectedBrushHandles();
+
+    // get handle to size definition brush
+    brush_t *brush = (brush_t *) g_FuncTable.m_pfnGetSelectedBrushHandle(0);
+    // cant release until we delete the brush, if we do...
+
+    DShape pit;
+
+    if (pit.BuildPit(vMin, vMax)) {
+        pit.Commit();
+
+        g_FuncTable.m_pfnDeleteBrushHandle(brush);
+    } else {
+        MessageBox(NULL, "Failed To Make Pit\nTry Making The Brush Bigger", "Error", MB_OK);
+    }
+
+    g_FuncTable.m_pfnReleaseSelectedBrushHandles();
 }