From: Timothee TTimo Besset Date: Sat, 17 Mar 2012 20:01:54 +0000 (-0500) Subject: uncrustify! now the code is only ugly on the *inside* X-Git-Tag: xonotic-v0.7.0~16^2~7^2 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=commitdiff_plain;h=830125fad042fad35dc029b6eb57c8156ad7e176 uncrustify! now the code is only ugly on the *inside* --- diff --git a/contrib/bkgrnd2d/bkgrnd2d.cpp b/contrib/bkgrnd2d/bkgrnd2d.cpp index 130fd2b8..2ce978f4 100644 --- a/contrib/bkgrnd2d/bkgrnd2d.cpp +++ b/contrib/bkgrnd2d/bkgrnd2d.cpp @@ -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-2007 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 + */ // // bkgrnd2d Plugin @@ -31,25 +31,21 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA CBackgroundRender render; -CBackgroundImage backgroundXY(XY),backgroundXZ(XZ),backgroundYZ(YZ); +CBackgroundImage backgroundXY( XY ),backgroundXZ( XZ ),backgroundYZ( YZ ); -CBackgroundRender::CBackgroundRender() -{ +CBackgroundRender::CBackgroundRender(){ refCount = 1; } -CBackgroundRender::~CBackgroundRender() -{ +CBackgroundRender::~CBackgroundRender(){ } -void CBackgroundRender::Register() -{ +void CBackgroundRender::Register(){ g_QglTable.m_pfnHookGL2DWindow( this ); } -void CBackgroundRender::Draw2D( VIEWTYPE vt ) -{ - switch(vt) +void CBackgroundRender::Draw2D( VIEWTYPE vt ){ + switch ( vt ) { case XY: backgroundXY.Render(); @@ -64,8 +60,7 @@ void CBackgroundRender::Draw2D( VIEWTYPE vt ) } -CBackgroundImage::CBackgroundImage(VIEWTYPE vt) -{ +CBackgroundImage::CBackgroundImage( VIEWTYPE vt ){ m_tex = NULL; m_alpha = 0.5; @@ -77,101 +72,99 @@ CBackgroundImage::CBackgroundImage(VIEWTYPE vt) m_vt = vt; - switch(m_vt) + switch ( m_vt ) { - case XY: - m_ix = 0; - m_iy = 1; - break; - case XZ: - m_ix = 0; - m_iy = 2; - break; - case YZ: - m_ix = 1; - m_iy = 2; - break; + case XY: + m_ix = 0; + m_iy = 1; + break; + case XZ: + m_ix = 0; + m_iy = 2; + break; + case YZ: + m_ix = 1; + m_iy = 2; + break; } } /* * should cleanup, but I don't think we can be sure it happens before our * interfaces are gone -CBackgroundImage::~CBackgroundImage() -{ -} -*/ - -void CBackgroundImage::Cleanup() -{ - if(m_tex) { - g_QglTable.m_pfn_qglDeleteTextures(1,&m_tex->texture_number); - g_free(m_tex); + CBackgroundImage::~CBackgroundImage() + { + } + */ + +void CBackgroundImage::Cleanup(){ + if ( m_tex ) { + g_QglTable.m_pfn_qglDeleteTextures( 1,&m_tex->texture_number ); + g_free( m_tex ); m_tex = NULL; } } -void CBackgroundImage::Render() -{ - if (!m_bActive || !Valid()) +void CBackgroundImage::Render(){ + if ( !m_bActive || !Valid() ) { return; - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + } + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - g_QglTable.m_pfn_qglEnable(GL_TEXTURE_2D); - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_QglTable.m_pfn_qglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - g_QglTable.m_pfn_qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - g_QglTable.m_pfn_qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + g_QglTable.m_pfn_qglEnable( GL_TEXTURE_2D ); + g_QglTable.m_pfn_qglEnable( GL_BLEND ); + g_QglTable.m_pfn_qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + g_QglTable.m_pfn_qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + g_QglTable.m_pfn_qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ); + g_QglTable.m_pfn_qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); - g_QglTable.m_pfn_qglPolygonMode(GL_FRONT,GL_FILL); + g_QglTable.m_pfn_qglPolygonMode( GL_FRONT,GL_FILL ); // TODO, just so we can tell if we end up going the wrong way // g_QglTable.m_pfn_qglPolygonMode(GL_BACK,GL_LINE); // TODO any other state we should not assume ? - g_QglTable.m_pfn_qglBindTexture(GL_TEXTURE_2D, m_tex->texture_number); - g_QglTable.m_pfn_qglBegin(GL_QUADS); + g_QglTable.m_pfn_qglBindTexture( GL_TEXTURE_2D, m_tex->texture_number ); + g_QglTable.m_pfn_qglBegin( GL_QUADS ); - g_QglTable.m_pfn_qglColor4f(1.0,1.0,1.0,m_alpha); - g_QglTable.m_pfn_qglTexCoord2f(0.0,1.0); - g_QglTable.m_pfn_qglVertex2f(m_xmin,m_ymin); + g_QglTable.m_pfn_qglColor4f( 1.0,1.0,1.0,m_alpha ); + g_QglTable.m_pfn_qglTexCoord2f( 0.0,1.0 ); + g_QglTable.m_pfn_qglVertex2f( m_xmin,m_ymin ); - g_QglTable.m_pfn_qglTexCoord2f(1.0,1.0); - g_QglTable.m_pfn_qglVertex2f(m_xmax,m_ymin); + g_QglTable.m_pfn_qglTexCoord2f( 1.0,1.0 ); + g_QglTable.m_pfn_qglVertex2f( m_xmax,m_ymin ); - g_QglTable.m_pfn_qglTexCoord2f(1.0,0.0); - g_QglTable.m_pfn_qglVertex2f(m_xmax,m_ymax); + g_QglTable.m_pfn_qglTexCoord2f( 1.0,0.0 ); + g_QglTable.m_pfn_qglVertex2f( m_xmax,m_ymax ); - g_QglTable.m_pfn_qglTexCoord2f(0.0,0.0); - g_QglTable.m_pfn_qglVertex2f(m_xmin,m_ymax); + g_QglTable.m_pfn_qglTexCoord2f( 0.0,0.0 ); + g_QglTable.m_pfn_qglVertex2f( m_xmin,m_ymax ); g_QglTable.m_pfn_qglEnd(); - g_QglTable.m_pfn_qglBindTexture(GL_TEXTURE_2D, 0); + g_QglTable.m_pfn_qglBindTexture( GL_TEXTURE_2D, 0 ); g_QglTable.m_pfn_qglPopAttrib(); } -bool CBackgroundImage::Load(const char *filename) -{ +bool CBackgroundImage::Load( const char *filename ){ qtexture_t *newtex; unsigned char *image = NULL; // gets allocated with what ? g_malloc int width = 0, height = 0; - g_FuncTable.m_pfnLoadImage(filename,&image,&width,&height); + g_FuncTable.m_pfnLoadImage( filename,&image,&width,&height ); - if(!image) { - Syn_Printf(MSG_WARN "load %s failed\n",filename); + if ( !image ) { + Syn_Printf( MSG_WARN "load %s failed\n",filename ); return false; } // just in case we want to build for an old version #ifdef BKGRND2D_JPG_WORKAROUND - if ( strlen(filename) > 4 && !strcmp(".jpg",filename + strlen(filename) - 4)) { - Syn_Printf(MSG_PREFIX ".jpg workaround, clearing alpha channel\n"); - int size = width*height*4; + if ( strlen( filename ) > 4 && !strcmp( ".jpg",filename + strlen( filename ) - 4 ) ) { + Syn_Printf( MSG_PREFIX ".jpg workaround, clearing alpha channel\n" ); + int size = width * height * 4; int i; - for (i = 3; i < size; i+=4) { + for ( i = 3; i < size; i += 4 ) { image[i] = 255; } } @@ -179,56 +172,53 @@ bool CBackgroundImage::Load(const char *filename) //TODO bug for stored texture size //TODO whose gl context are we in, anyway ? - newtex = g_FuncTable.m_pfnLoadTextureRGBA(image,width,height); + newtex = g_FuncTable.m_pfnLoadTextureRGBA( image,width,height ); - g_free(image); + g_free( image ); - if(!newtex) { - Syn_Printf(MSG_WARN "image to texture failed\n"); + if ( !newtex ) { + Syn_Printf( MSG_WARN "image to texture failed\n" ); return false; } Cleanup(); m_tex = newtex; - g_FuncTable.m_pfnSysUpdateWindows(W_XY); + g_FuncTable.m_pfnSysUpdateWindows( W_XY ); return true; } -bool CBackgroundImage::SetExtentsMM() -{ +bool CBackgroundImage::SetExtentsMM(){ entity_s *worldentity; const char *val; int xmin = 0, ymin = 0, xmax = 0, ymax = 0; - worldentity = (entity_s *)g_FuncTable.m_pfnGetEntityHandle(0); - if(!worldentity) { - Syn_Printf(MSG_WARN "SetExtentsMM worldspawn not found\n"); + worldentity = (entity_s *)g_FuncTable.m_pfnGetEntityHandle( 0 ); + if ( !worldentity ) { + Syn_Printf( MSG_WARN "SetExtentsMM worldspawn not found\n" ); return false; } //TODO val is not NULL even if key does not exist - val = g_EntityTable.m_pfnValueForKey(worldentity,"mapcoordsmins"); - if(!val || !val[0]) { - Syn_Printf(MSG_WARN "SetExtentsMM mapcoordsmins not found\n"); + val = g_EntityTable.m_pfnValueForKey( worldentity,"mapcoordsmins" ); + if ( !val || !val[0] ) { + Syn_Printf( MSG_WARN "SetExtentsMM mapcoordsmins not found\n" ); return false; } // we could be more robust // note contortions due to splashs strange idea of min and max - if(sscanf(val, "%d %d",&xmin,&ymax) != 2) - { - Syn_Printf(MSG_WARN "SetExtentsMM mapcoordsmins malformed\n"); + if ( sscanf( val, "%d %d",&xmin,&ymax ) != 2 ) { + Syn_Printf( MSG_WARN "SetExtentsMM mapcoordsmins malformed\n" ); return false; } - val = g_EntityTable.m_pfnValueForKey(worldentity,"mapcoordsmaxs"); - if(!val || !val[0]) { - Syn_Printf(MSG_WARN "SetExtentsMM mapcoordsmaxs not found\n"); + val = g_EntityTable.m_pfnValueForKey( worldentity,"mapcoordsmaxs" ); + if ( !val || !val[0] ) { + Syn_Printf( MSG_WARN "SetExtentsMM mapcoordsmaxs not found\n" ); return false; } - if(sscanf(val, "%d %d",&xmax,&ymin) != 2) - { - Syn_Printf(MSG_WARN "SetExtentsMM mapcoordsmaxs malformed\n"); + if ( sscanf( val, "%d %d",&xmax,&ymin ) != 2 ) { + Syn_Printf( MSG_WARN "SetExtentsMM mapcoordsmaxs malformed\n" ); return false; } //might do sanity check before we commit @@ -237,72 +227,74 @@ bool CBackgroundImage::SetExtentsMM() m_xmax = (float)xmax; m_ymax = (float)ymax; - g_FuncTable.m_pfnSysUpdateWindows(W_XY); + g_FuncTable.m_pfnSysUpdateWindows( W_XY ); return true; } // TODO, this should just be exported from core // ripped directly from radiant/select.cpp:Select_GetBounds // -static bool get_selection_bounds (vec3_t mins, vec3_t maxs) -{ - brush_t *b; - int i; +static bool get_selection_bounds( vec3_t mins, vec3_t maxs ){ + brush_t *b; + int i; brush_t *selected_brushes = g_DataTable.m_pfnSelectedBrushes(); //TODO should never happen - if(!selected_brushes) { - Sys_Printf (MSG_PREFIX "selected_brushes = NULL\n"); - return false; + if ( !selected_brushes ) { + Sys_Printf( MSG_PREFIX "selected_brushes = NULL\n" ); + return false; } // this should mean no selection - if(selected_brushes == selected_brushes->next) { - Sys_Printf (MSG_PREFIX "nothing selected\n"); + if ( selected_brushes == selected_brushes->next ) { + Sys_Printf( MSG_PREFIX "nothing selected\n" ); - return false; + return false; } - for (i=0 ; i<3 ; i++) + for ( i = 0 ; i < 3 ; i++ ) { mins[i] = 99999; maxs[i] = -99999; } - for (b=selected_brushes->next ; b != selected_brushes ; b=b->next) + for ( b = selected_brushes->next ; b != selected_brushes ; b = b->next ) { - if (b->owner->eclass->fixedsize) - { - for (i=0 ; i<3 ; i++) + if ( b->owner->eclass->fixedsize ) { + for ( i = 0 ; i < 3 ; i++ ) { - if (b->owner->origin[i] < mins[i]) + if ( b->owner->origin[i] < mins[i] ) { mins[i] = b->owner->origin[i]; - if (b->owner->origin[i] > maxs[i]) + } + if ( b->owner->origin[i] > maxs[i] ) { maxs[i] = b->owner->origin[i]; + } } } else { - for (i=0 ; i<3 ; i++) + for ( i = 0 ; i < 3 ; i++ ) { - if (b->mins[i] < mins[i]) + if ( b->mins[i] < mins[i] ) { mins[i] = b->mins[i]; - if (b->maxs[i] > maxs[i]) + } + if ( b->maxs[i] > maxs[i] ) { maxs[i] = b->maxs[i]; + } } } } - return true; + return true; } -bool CBackgroundImage::SetExtentsSel() -{ +bool CBackgroundImage::SetExtentsSel(){ vec3_t mins,maxs; - if(!get_selection_bounds(mins,maxs)) + if ( !get_selection_bounds( mins,maxs ) ) { return false; + } - if(((int)mins[m_ix] == (int)maxs[m_ix]) || - ((int)mins[m_iy] == (int)maxs[m_iy])) { - Syn_Printf(MSG_PREFIX "tiny selection\n"); + if ( ( (int)mins[m_ix] == (int)maxs[m_ix] ) || + ( (int)mins[m_iy] == (int)maxs[m_iy] ) ) { + Syn_Printf( MSG_PREFIX "tiny selection\n" ); return false; } @@ -311,8 +303,7 @@ bool CBackgroundImage::SetExtentsSel() m_xmax = maxs[m_ix]; m_ymax = maxs[m_iy]; - g_FuncTable.m_pfnSysUpdateWindows(W_XY); + g_FuncTable.m_pfnSysUpdateWindows( W_XY ); - return true; + return true; } - diff --git a/contrib/bkgrnd2d/bkgrnd2d.h b/contrib/bkgrnd2d/bkgrnd2d.h index bf4771bb..59c5973a 100644 --- a/contrib/bkgrnd2d/bkgrnd2d.h +++ b/contrib/bkgrnd2d/bkgrnd2d.h @@ -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-2007 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 + */ // // bkgrnd2d Plugin @@ -31,53 +31,56 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA class CBackgroundImage { private: - qtexture_t *m_tex; - VIEWTYPE m_vt; - +qtexture_t *m_tex; +VIEWTYPE m_vt; + // which components of a vec3_t correspond to x and y in the image - unsigned m_ix,m_iy; +unsigned m_ix,m_iy; public: - CBackgroundImage(VIEWTYPE vt); +CBackgroundImage( VIEWTYPE vt ); // ~CBackgroundImage(); - float m_alpha; // vertex alpha - bool m_bActive; - +float m_alpha; // vertex alpha +bool m_bActive; + // x and y axis are in relation to the screen, not world, making rendering -// the same for each view type. Whoever sets them is responsible for +// the same for each view type. Whoever sets them is responsible for // shuffling. // units are world units. // TODO should be private - float m_xmin,m_ymin,m_xmax,m_ymax; +float m_xmin,m_ymin,m_xmax,m_ymax; // load file, create new tex, cleanup old tex, set new tex - bool Load(const char *filename); - void Cleanup(); // free texture, free tex, set make tex NULL - bool SetExtentsMM(); // set extents by ET mapcoordsmaxs/mapcoordsmins - bool SetExtentsSel(); // set extents by selection - void Render(); - bool Valid() { return (m_tex && (m_xmin != m_xmax) && (m_ymin != m_ymax)); } +bool Load( const char *filename ); +void Cleanup(); // free texture, free tex, set make tex NULL +bool SetExtentsMM(); // set extents by ET mapcoordsmaxs/mapcoordsmins +bool SetExtentsSel(); // set extents by selection +void Render(); +bool Valid() { return ( m_tex && ( m_xmin != m_xmax ) && ( m_ymin != m_ymax ) ); } }; class CBackgroundRender : public IGL2DWindow { public: - CBackgroundRender(); - virtual ~CBackgroundRender(); +CBackgroundRender(); +virtual ~CBackgroundRender(); protected: - int refCount; +int refCount; public: - // IGL2DWindow IGL3DWindow interface - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } - void Draw2D( VIEWTYPE vt ); - void Register(); +// IGL2DWindow IGL3DWindow interface +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} +void Draw2D( VIEWTYPE vt ); +void Register(); }; extern CBackgroundImage backgroundXY,backgroundXZ,backgroundYZ; extern CBackgroundRender render; - diff --git a/contrib/bkgrnd2d/dialog.cpp b/contrib/bkgrnd2d/dialog.cpp index 7b8a2137..ae6eef27 100644 --- a/contrib/bkgrnd2d/dialog.cpp +++ b/contrib/bkgrnd2d/dialog.cpp @@ -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-2007 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 + */ // // bkgrnd2d Plugin dialog @@ -37,7 +37,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define NO_FILE_MSG " (no file loaded) " #ifdef _WIN32 - // TTimo: THIS IS UGLY +// TTimo: THIS IS UGLY #define snprintf _snprintf #endif @@ -48,64 +48,60 @@ static GtkTooltips *pTooltips; class CBackgroundDialogPage { private: - GtkWidget *m_pWidget; - GtkWidget *m_pTabLabel; - GtkWidget *m_pFileLabel; - GtkWidget *m_pPosLabel; - VIEWTYPE m_vt; - bool m_bValidFile; +GtkWidget *m_pWidget; +GtkWidget *m_pTabLabel; +GtkWidget *m_pFileLabel; +GtkWidget *m_pPosLabel; +VIEWTYPE m_vt; +bool m_bValidFile; public: - CBackgroundImage *m_pImage; - CBackgroundDialogPage( VIEWTYPE vt ); - void Append(GtkWidget *notebook); - void Browse(); - void Reload(); - void SetPosLabel(); +CBackgroundImage *m_pImage; +CBackgroundDialogPage( VIEWTYPE vt ); +void Append( GtkWidget *notebook ); +void Browse(); +void Reload(); +void SetPosLabel(); // ~BackgroundDialogPage(); }; // dialog page callbacks -static void browse_callback( GtkWidget *widget, gpointer data ) -{ - ((CBackgroundDialogPage *)data)->Browse(); +static void browse_callback( GtkWidget *widget, gpointer data ){ + ( (CBackgroundDialogPage *)data )->Browse(); } -static void reload_callback( GtkWidget *widget, gpointer data ) -{ - ((CBackgroundDialogPage *)data)->Reload(); +static void reload_callback( GtkWidget *widget, gpointer data ){ + ( (CBackgroundDialogPage *)data )->Reload(); } -static void size_sel_callback( GtkWidget *widget, gpointer data ) -{ +static void size_sel_callback( GtkWidget *widget, gpointer data ){ CBackgroundDialogPage *pPage = (CBackgroundDialogPage *)data; - if (pPage->m_pImage->SetExtentsSel()) + if ( pPage->m_pImage->SetExtentsSel() ) { pPage->SetPosLabel(); + } } -static void size_mm_callback( GtkWidget *widget, gpointer data ) -{ +static void size_mm_callback( GtkWidget *widget, gpointer data ){ CBackgroundDialogPage *pPage = (CBackgroundDialogPage *)data; - if(pPage->m_pImage->SetExtentsMM()) + if ( pPage->m_pImage->SetExtentsMM() ) { pPage->SetPosLabel(); + } } -static void alpha_adjust_callback( GtkWidget *widget, gpointer data ) -{ +static void alpha_adjust_callback( GtkWidget *widget, gpointer data ){ CBackgroundDialogPage *pPage = (CBackgroundDialogPage *)data; - pPage->m_pImage->m_alpha = (float)gtk_range_get_value (GTK_RANGE(widget)); - g_FuncTable.m_pfnSysUpdateWindows(W_XY); + pPage->m_pImage->m_alpha = (float)gtk_range_get_value( GTK_RANGE( widget ) ); + g_FuncTable.m_pfnSysUpdateWindows( W_XY ); } -void CBackgroundDialogPage::Reload() -{ - if(m_bValidFile) - m_pImage->Load(gtk_label_get_text(GTK_LABEL(m_pFileLabel))); +void CBackgroundDialogPage::Reload(){ + if ( m_bValidFile ) { + m_pImage->Load( gtk_label_get_text( GTK_LABEL( m_pFileLabel ) ) ); + } } -void CBackgroundDialogPage::Browse() -{ +void CBackgroundDialogPage::Browse(){ char browsedir[PATH_MAX]; const char *ct; const char *newfile; @@ -116,72 +112,71 @@ void CBackgroundDialogPage::Browse() // Syn_Printf(MSG_PREFIX "GetMapName() %s\n", // g_FuncTable.m_pfnGetMapName()); - ct = g_FuncTable.m_pfnReadProjectKey("basepath"); + ct = g_FuncTable.m_pfnReadProjectKey( "basepath" ); // TODO shouldn't need this stuff - if(!ct || !strlen(ct)) { - Syn_Printf(MSG_PREFIX "basepath = NULL or empty\n"); + if ( !ct || !strlen( ct ) ) { + Syn_Printf( MSG_PREFIX "basepath = NULL or empty\n" ); return; } - Syn_Printf(MSG_PREFIX "basepath: %s\n",ct); - if(strlen(ct) >= PATH_MAX) { - Syn_Printf(MSG_PREFIX "base game dir too long\n"); + Syn_Printf( MSG_PREFIX "basepath: %s\n",ct ); + if ( strlen( ct ) >= PATH_MAX ) { + Syn_Printf( MSG_PREFIX "base game dir too long\n" ); return; } - strcpy(browsedir,ct); + strcpy( browsedir,ct ); // make sure we have a trailing / - if(browsedir[strlen(browsedir) - 1] != '/') - strcat(browsedir,"/"); + if ( browsedir[strlen( browsedir ) - 1] != '/' ) { + strcat( browsedir,"/" ); + } //if we dont have a file yet, don't try to use it for default dir - if(m_bValidFile) { - // filename should always be a nice clean unix style relative path - ct = gtk_label_get_text(GTK_LABEL(m_pFileLabel)); - strcat(browsedir,ct); - Syn_Printf(MSG_PREFIX "full path: %s\n",browsedir); + if ( m_bValidFile ) { + // filename should always be a nice clean unix style relative path + ct = gtk_label_get_text( GTK_LABEL( m_pFileLabel ) ); + strcat( browsedir,ct ); + Syn_Printf( MSG_PREFIX "full path: %s\n",browsedir ); // lop off the file part - t = browsedir + strlen(browsedir) - 1; - while (t != browsedir && *t != '/') + t = browsedir + strlen( browsedir ) - 1; + while ( t != browsedir && *t != '/' ) t--; *t = 0; } - Syn_Printf(MSG_PREFIX "browse directory %s\n",browsedir); + Syn_Printf( MSG_PREFIX "browse directory %s\n",browsedir ); //does NOT need freeing contrary to include/qerplugin.h comments //TODO bug/patch for comments //TODO patern gets fucked up sometimes if empty - newfile = g_FuncTable.m_pfnFileDialog(pDialogWnd,TRUE, - _("Load Background Image"),browsedir,FILETYPE_KEY, NULL); - if(!newfile) { - Syn_Printf(MSG_PREFIX "newfile = NULL\n"); + newfile = g_FuncTable.m_pfnFileDialog( pDialogWnd,TRUE, + _( "Load Background Image" ),browsedir,FILETYPE_KEY, NULL ); + if ( !newfile ) { + Syn_Printf( MSG_PREFIX "newfile = NULL\n" ); return; } - Syn_Printf(MSG_PREFIX "newfile: %s\n",newfile); - newfile = g_FileSystemTable.m_pfnExtractRelativePath(newfile); + Syn_Printf( MSG_PREFIX "newfile: %s\n",newfile ); + newfile = g_FileSystemTable.m_pfnExtractRelativePath( newfile ); - if(!newfile) { - Syn_Printf(MSG_PREFIX "newfile = NULL\n"); + if ( !newfile ) { + Syn_Printf( MSG_PREFIX "newfile = NULL\n" ); return; } - Syn_Printf(MSG_PREFIX "newfile: %s\n",newfile); + Syn_Printf( MSG_PREFIX "newfile: %s\n",newfile ); - if(m_pImage->Load(newfile)) { + if ( m_pImage->Load( newfile ) ) { m_bValidFile = true; - gtk_label_set_text(GTK_LABEL(m_pFileLabel),newfile); + gtk_label_set_text( GTK_LABEL( m_pFileLabel ),newfile ); } } -void CBackgroundDialogPage::SetPosLabel() -{ +void CBackgroundDialogPage::SetPosLabel(){ char s[64]; - snprintf(s, sizeof(s) - 1, _("Size/Position (%d,%d) (%d,%d)"),(int)(m_pImage->m_xmin), - (int)(m_pImage->m_ymin),(int)(m_pImage->m_xmax),(int)(m_pImage->m_ymax)); - gtk_label_set_text(GTK_LABEL(m_pPosLabel),s); + snprintf( s, sizeof( s ) - 1, _( "Size/Position (%d,%d) (%d,%d)" ),(int)( m_pImage->m_xmin ), + (int)( m_pImage->m_ymin ),(int)( m_pImage->m_xmax ),(int)( m_pImage->m_ymax ) ); + gtk_label_set_text( GTK_LABEL( m_pPosLabel ),s ); } -CBackgroundDialogPage::CBackgroundDialogPage(VIEWTYPE vt ) -{ +CBackgroundDialogPage::CBackgroundDialogPage( VIEWTYPE vt ){ GtkWidget *frame; GtkWidget *hbox; GtkWidget *w; @@ -190,180 +185,174 @@ CBackgroundDialogPage::CBackgroundDialogPage(VIEWTYPE vt ) m_bValidFile = false; - switch(m_vt) + switch ( m_vt ) { - case XY: - m_pTabLabel = gtk_label_new(_("X/Y")); - m_pImage = &backgroundXY; - break; - case XZ: - m_pTabLabel = gtk_label_new(_("X/Z")); - m_pImage = &backgroundXZ; - break; - case YZ: - m_pTabLabel = gtk_label_new(_("Y/Z")); - m_pImage = &backgroundYZ; - break; + case XY: + m_pTabLabel = gtk_label_new( _( "X/Y" ) ); + m_pImage = &backgroundXY; + break; + case XZ: + m_pTabLabel = gtk_label_new( _( "X/Z" ) ); + m_pImage = &backgroundXZ; + break; + case YZ: + m_pTabLabel = gtk_label_new( _( "Y/Z" ) ); + m_pImage = &backgroundYZ; + break; } // A vbox to hold everything - m_pWidget = gtk_vbox_new(FALSE,0); + m_pWidget = gtk_vbox_new( FALSE,0 ); // Frame for file row - frame = gtk_frame_new(_("File")); - gtk_box_pack_start (GTK_BOX (m_pWidget),frame, FALSE, FALSE, 2); + frame = gtk_frame_new( _( "File" ) ); + gtk_box_pack_start( GTK_BOX( m_pWidget ),frame, FALSE, FALSE, 2 ); // hbox for first row - hbox = gtk_hbox_new(FALSE,5); - gtk_container_set_border_width(GTK_CONTAINER (hbox),4); - gtk_container_add (GTK_CONTAINER (frame), hbox); + hbox = gtk_hbox_new( FALSE,5 ); + gtk_container_set_border_width( GTK_CONTAINER( hbox ),4 ); + gtk_container_add( GTK_CONTAINER( frame ), hbox ); // label to display filename - m_pFileLabel = gtk_label_new(NO_FILE_MSG); - gtk_label_set_selectable(GTK_LABEL(m_pFileLabel),TRUE); + m_pFileLabel = gtk_label_new( NO_FILE_MSG ); + gtk_label_set_selectable( GTK_LABEL( m_pFileLabel ),TRUE ); //TODO set min size ? done with spaces right now - gtk_box_pack_start (GTK_BOX (hbox),m_pFileLabel, TRUE, TRUE, 5); + gtk_box_pack_start( GTK_BOX( hbox ),m_pFileLabel, TRUE, TRUE, 5 ); - gtk_widget_show (m_pFileLabel); + gtk_widget_show( m_pFileLabel ); - w = gtk_button_new_with_label ("Browse..."); - g_signal_connect (G_OBJECT (w), "clicked", G_CALLBACK (browse_callback), - (gpointer)this); - gtk_box_pack_start (GTK_BOX (hbox),w, FALSE, FALSE, 5); - gtk_tooltips_set_tip (pTooltips, w, "Select a file", NULL); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Browse..." ); + g_signal_connect( G_OBJECT( w ), "clicked", G_CALLBACK( browse_callback ), + ( gpointer ) this ); + gtk_box_pack_start( GTK_BOX( hbox ),w, FALSE, FALSE, 5 ); + gtk_tooltips_set_tip( pTooltips, w, "Select a file", NULL ); + gtk_widget_show( w ); - w = gtk_button_new_with_label ("Reload"); - g_signal_connect (G_OBJECT (w), "clicked", G_CALLBACK (reload_callback), - (gpointer)this); + w = gtk_button_new_with_label( "Reload" ); + g_signal_connect( G_OBJECT( w ), "clicked", G_CALLBACK( reload_callback ), + ( gpointer ) this ); // TODO disable until we have file // gtk_widget_set_sensitive(w,FALSE); - gtk_tooltips_set_tip (pTooltips, w, "Reload current file", NULL); - gtk_box_pack_start (GTK_BOX (hbox),w, FALSE, FALSE, 5); - gtk_widget_show (w); + gtk_tooltips_set_tip( pTooltips, w, "Reload current file", NULL ); + gtk_box_pack_start( GTK_BOX( hbox ),w, FALSE, FALSE, 5 ); + gtk_widget_show( w ); - gtk_widget_show (hbox); - gtk_widget_show (frame); + gtk_widget_show( hbox ); + gtk_widget_show( frame ); // second row (rendering options) - frame = gtk_frame_new(_("Rendering")); - gtk_box_pack_start (GTK_BOX (m_pWidget),frame, FALSE, FALSE, 2); - - hbox = gtk_hbox_new(FALSE,5); - gtk_container_set_border_width(GTK_CONTAINER (hbox),4); - gtk_container_add (GTK_CONTAINER (frame), hbox); - - w = gtk_label_new(_("Vertex alpha:")); - gtk_box_pack_start (GTK_BOX (hbox),w, FALSE, FALSE, 5); - gtk_widget_show (w); - - w = gtk_hscale_new_with_range(0.0,1.0,0.01); - gtk_range_set_value(GTK_RANGE(w),0.5); - gtk_scale_set_value_pos(GTK_SCALE(w),GTK_POS_LEFT); - g_signal_connect (G_OBJECT (w), "value-changed", - G_CALLBACK (alpha_adjust_callback), (gpointer)this); - gtk_box_pack_start (GTK_BOX (hbox),w, TRUE, TRUE, 5); - gtk_tooltips_set_tip (pTooltips, w, _("Set image transparancy"), NULL); - gtk_widget_show (w); - - gtk_widget_show (hbox); - gtk_widget_show (frame); + frame = gtk_frame_new( _( "Rendering" ) ); + gtk_box_pack_start( GTK_BOX( m_pWidget ),frame, FALSE, FALSE, 2 ); + + hbox = gtk_hbox_new( FALSE,5 ); + gtk_container_set_border_width( GTK_CONTAINER( hbox ),4 ); + gtk_container_add( GTK_CONTAINER( frame ), hbox ); + + w = gtk_label_new( _( "Vertex alpha:" ) ); + gtk_box_pack_start( GTK_BOX( hbox ),w, FALSE, FALSE, 5 ); + gtk_widget_show( w ); + + w = gtk_hscale_new_with_range( 0.0,1.0,0.01 ); + gtk_range_set_value( GTK_RANGE( w ),0.5 ); + gtk_scale_set_value_pos( GTK_SCALE( w ),GTK_POS_LEFT ); + g_signal_connect( G_OBJECT( w ), "value-changed", + G_CALLBACK( alpha_adjust_callback ), ( gpointer ) this ); + gtk_box_pack_start( GTK_BOX( hbox ),w, TRUE, TRUE, 5 ); + gtk_tooltips_set_tip( pTooltips, w, _( "Set image transparancy" ), NULL ); + gtk_widget_show( w ); + + gtk_widget_show( hbox ); + gtk_widget_show( frame ); // Third row (size and position) - frame = gtk_frame_new(_("Size/Position (undefined)")); - m_pPosLabel = gtk_frame_get_label_widget (GTK_FRAME(frame)); - gtk_box_pack_start ( GTK_BOX (m_pWidget), frame, FALSE, FALSE, 2); - - hbox = gtk_hbox_new(FALSE,5); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_container_set_border_width(GTK_CONTAINER (hbox),4); - - w = gtk_button_new_with_label (_("from selection")); - gtk_box_pack_start (GTK_BOX (hbox),w, TRUE, FALSE, 5); - g_signal_connect (G_OBJECT (w), "clicked", G_CALLBACK (size_sel_callback), - (gpointer)this); - gtk_tooltips_set_tip (pTooltips, w, _("Set the size of the image to the bounding rectangle of all selected brushes and entities"), NULL); - gtk_widget_show (w); - - if(m_vt == XY) { - w = gtk_button_new_with_label (_("from map mins/maxs")); - gtk_box_pack_start ( GTK_BOX (hbox),w, TRUE, FALSE, 2); - g_signal_connect (G_OBJECT (w), "clicked", G_CALLBACK (size_mm_callback), - (gpointer)this); - gtk_tooltips_set_tip (pTooltips, w, _("Set the size of the image using the mapcoordsmins and mapcoordsmaxs keys of the worldspawn entity"), NULL); - gtk_widget_show (w); + frame = gtk_frame_new( _( "Size/Position (undefined)" ) ); + m_pPosLabel = gtk_frame_get_label_widget( GTK_FRAME( frame ) ); + gtk_box_pack_start( GTK_BOX( m_pWidget ), frame, FALSE, FALSE, 2 ); + + hbox = gtk_hbox_new( FALSE,5 ); + gtk_container_add( GTK_CONTAINER( frame ), hbox ); + gtk_container_set_border_width( GTK_CONTAINER( hbox ),4 ); + + w = gtk_button_new_with_label( _( "from selection" ) ); + gtk_box_pack_start( GTK_BOX( hbox ),w, TRUE, FALSE, 5 ); + g_signal_connect( G_OBJECT( w ), "clicked", G_CALLBACK( size_sel_callback ), + ( gpointer ) this ); + gtk_tooltips_set_tip( pTooltips, w, _( "Set the size of the image to the bounding rectangle of all selected brushes and entities" ), NULL ); + gtk_widget_show( w ); + + if ( m_vt == XY ) { + w = gtk_button_new_with_label( _( "from map mins/maxs" ) ); + gtk_box_pack_start( GTK_BOX( hbox ),w, TRUE, FALSE, 2 ); + g_signal_connect( G_OBJECT( w ), "clicked", G_CALLBACK( size_mm_callback ), + ( gpointer ) this ); + gtk_tooltips_set_tip( pTooltips, w, _( "Set the size of the image using the mapcoordsmins and mapcoordsmaxs keys of the worldspawn entity" ), NULL ); + gtk_widget_show( w ); } - gtk_widget_show (hbox); - gtk_widget_show (frame); + gtk_widget_show( hbox ); + gtk_widget_show( frame ); - gtk_widget_show ( m_pWidget ); + gtk_widget_show( m_pWidget ); } -void CBackgroundDialogPage::Append(GtkWidget *notebook) -{ - gtk_notebook_append_page( GTK_NOTEBOOK(notebook), m_pWidget, m_pTabLabel); +void CBackgroundDialogPage::Append( GtkWidget *notebook ){ + gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), m_pWidget, m_pTabLabel ); } // dialog global callbacks /* -static gint expose_callback( GtkWidget *widget, gpointer data ) -{ - return FALSE; -} -*/ - -static void response_callback( GtkWidget *widget, gint response, gpointer data ) -{ - if( response == GTK_RESPONSE_CLOSE ) - gtk_widget_hide( pDialogWnd ); + static gint expose_callback( GtkWidget *widget, gpointer data ) + { + return FALSE; + } + */ + +static void response_callback( GtkWidget *widget, gint response, gpointer data ){ + if ( response == GTK_RESPONSE_CLOSE ) { + gtk_widget_hide( pDialogWnd ); + } } -static gint close_callback( GtkWidget *widget, gpointer data ) -{ - gtk_widget_hide( pDialogWnd ); +static gint close_callback( GtkWidget *widget, gpointer data ){ + gtk_widget_hide( pDialogWnd ); return TRUE; } -void InitBackgroundDialog() -{ +void InitBackgroundDialog(){ CBackgroundDialogPage *pPage; - pDialogWnd = gtk_dialog_new_with_buttons (_("Background Images"), - GTK_WINDOW(g_pMainWidget), - (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT), - // TODO dialog with no buttons - // GTK_STOCK_CLOSE, - // GTK_RESPONSE_CLOSE, - NULL); - gtk_signal_connect( GTK_OBJECT (pDialogWnd), "delete_event", - GTK_SIGNAL_FUNC( close_callback ), NULL ); - gtk_signal_connect( GTK_OBJECT (pDialogWnd), "response", - GTK_SIGNAL_FUNC( response_callback ), NULL ); -// gtk_signal_connect( GTK_OBJECT (pDialogWnd), "expose_event", GTK_SIGNAL_FUNC( ci_expose ), NULL ); + pDialogWnd = gtk_dialog_new_with_buttons( _( "Background Images" ), + GTK_WINDOW( g_pMainWidget ), + (GtkDialogFlags)( GTK_DIALOG_DESTROY_WITH_PARENT ), + // TODO dialog with no buttons + // GTK_STOCK_CLOSE, + // GTK_RESPONSE_CLOSE, + NULL ); + gtk_signal_connect( GTK_OBJECT( pDialogWnd ), "delete_event", + GTK_SIGNAL_FUNC( close_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( pDialogWnd ), "response", + GTK_SIGNAL_FUNC( response_callback ), NULL ); +// gtk_signal_connect( GTK_OBJECT (pDialogWnd), "expose_event", GTK_SIGNAL_FUNC( ci_expose ), NULL ); pTooltips = gtk_tooltips_new(); pNotebook = gtk_notebook_new(); - pPage = new CBackgroundDialogPage(XY); - pPage->Append(pNotebook); - pPage = new CBackgroundDialogPage(XZ); - pPage->Append(pNotebook); - pPage = new CBackgroundDialogPage(YZ); - pPage->Append(pNotebook); + pPage = new CBackgroundDialogPage( XY ); + pPage->Append( pNotebook ); + pPage = new CBackgroundDialogPage( XZ ); + pPage->Append( pNotebook ); + pPage = new CBackgroundDialogPage( YZ ); + pPage->Append( pNotebook ); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(pDialogWnd)->vbox), pNotebook, TRUE, TRUE, 0); + gtk_box_pack_start( GTK_BOX( GTK_DIALOG( pDialogWnd )->vbox ), pNotebook, TRUE, TRUE, 0 ); - gtk_widget_show ( pNotebook ); + gtk_widget_show( pNotebook ); gtk_widget_realize( pDialogWnd ); } -void ShowBackgroundDialog() -{ - gtk_window_present( GTK_WINDOW(pDialogWnd) ); +void ShowBackgroundDialog(){ + gtk_window_present( GTK_WINDOW( pDialogWnd ) ); } -void ShowBackgroundDialogPG(int page) -{ - gtk_notebook_set_current_page(GTK_NOTEBOOK(pNotebook),page); +void ShowBackgroundDialogPG( int page ){ + gtk_notebook_set_current_page( GTK_NOTEBOOK( pNotebook ),page ); ShowBackgroundDialog(); } - diff --git a/contrib/bkgrnd2d/dialog.h b/contrib/bkgrnd2d/dialog.h index b6d80430..1234f6d9 100644 --- a/contrib/bkgrnd2d/dialog.h +++ b/contrib/bkgrnd2d/dialog.h @@ -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-2007 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 + */ // // bkgrnd2d Plugin dialog box @@ -31,6 +31,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA void InitBackgroundDialog(); void ShowBackgroundDialog(); -void ShowBackgroundDialogPG(int page); +void ShowBackgroundDialogPG( int page ); #endif // _BKGRND2D_DIALOG_H_ diff --git a/contrib/bkgrnd2d/plugin.cpp b/contrib/bkgrnd2d/plugin.cpp index 3b5cc975..6e92d33b 100644 --- a/contrib/bkgrnd2d/plugin.cpp +++ b/contrib/bkgrnd2d/plugin.cpp @@ -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-2007 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 + */ // // 2d background Plugin @@ -30,23 +30,23 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA /* Overview ======== - This little plugin allows you to display an image in the background of the - gtkradiant XY window. + This little plugin allows you to display an image in the background of the + gtkradiant XY window. Version History =============== v0.1 - Initial version. - v0.2 - - three views, dialog box, toolbar + v0.2 + - three views, dialog box, toolbar v0.25 - tooltips, follow gtkradiant coding conventions How ? ----- - textures 'n widgets 'n stuff. -*/ + */ //#include "plugin.h" //TODO we just poke the objects directly @@ -76,12 +76,12 @@ static const char *PLUGIN_NAME = "2d window background plugin"; //backwards for some reason static const char *PLUGIN_COMMANDS = CMD_ABOUT ";" - CMD_SEP ";" - CMD_CONFIG - ; + CMD_SEP ";" + CMD_CONFIG +; static const char *PLUGIN_ABOUT = "2d window background v0.25\n\n" - "By reyalP (hellsownpuppy@yahoo.com)"; + "By reyalP (hellsownpuppy@yahoo.com)"; @@ -96,7 +96,7 @@ struct toolbar_button_info_s const char *image; const char *text; const char *tip; - void (*func)(); + void ( *func )(); IToolbarButton::EType type; }; @@ -105,28 +105,28 @@ struct toolbar_button_info_s toolbar_buttons[NUM_TOOLBAR_BUTTONS] = { "bkgrnd2d_xy_toggle.bmp", "xy background", - "Toggle xy background image", + "Toggle xy background image", DoBkgrndToggleXY, IToolbarButton::eToggleButton }, { "bkgrnd2d_xz_toggle.bmp", "xz background", - "Toggle xz background image", + "Toggle xz background image", DoBkgrndToggleXZ, IToolbarButton::eToggleButton }, { "bkgrnd2d_yz_toggle.bmp", "yz background", - "Toggle yz background image", + "Toggle yz background image", DoBkgrndToggleYZ, IToolbarButton::eToggleButton }, { "bkgrnd2d_conf.bmp", "Configure", - "Configure background images", + "Configure background images", ShowBackgroundDialog, IToolbarButton::eButton }, @@ -135,112 +135,104 @@ struct toolbar_button_info_s toolbar_buttons[NUM_TOOLBAR_BUTTONS] = class Bkgrnd2dButton : public IToolbarButton { public: - const toolbar_button_info_s *bi; - virtual const char* getImage() const - { - return bi->image; - } - virtual const char* getText() const - { - return bi->text; - } - virtual const char* getTooltip() const - { - return bi->tip; - } - virtual void activate() const - { - bi->func(); - return ; - } - virtual EType getType() const - { - return bi->type; - } +const toolbar_button_info_s *bi; +virtual const char* getImage() const { + return bi->image; +} +virtual const char* getText() const { + return bi->text; +} +virtual const char* getTooltip() const { + return bi->tip; +} +virtual void activate() const { + bi->func(); + return ; +} +virtual EType getType() const { + return bi->type; +} }; Bkgrnd2dButton g_bkgrnd2dbuttons[NUM_TOOLBAR_BUTTONS]; -unsigned int ToolbarButtonCount() -{ - return NUM_TOOLBAR_BUTTONS; +unsigned int ToolbarButtonCount(){ + return NUM_TOOLBAR_BUTTONS; } -const IToolbarButton* GetToolbarButton(unsigned int index) -{ - g_bkgrnd2dbuttons[index].bi = &toolbar_buttons[index]; - return &g_bkgrnd2dbuttons[index]; +const IToolbarButton* GetToolbarButton( unsigned int index ){ + g_bkgrnd2dbuttons[index].bi = &toolbar_buttons[index]; + return &g_bkgrnd2dbuttons[index]; } -extern "C" const char* QERPlug_Init (void *hApp, void* pMainWidget) -{ - g_pMainWidget = pMainWidget; +extern "C" const char* QERPlug_Init( void *hApp, void* pMainWidget ){ + g_pMainWidget = pMainWidget; - InitBackgroundDialog(); - render.Register(); + InitBackgroundDialog(); + render.Register(); //TODO is it right ? is it wrong ? it works //TODO figure out supported image types - GetFileTypeRegistry()->addType(FILETYPE_KEY, filetype_t("all files", "*.*")); - GetFileTypeRegistry()->addType(FILETYPE_KEY, filetype_t("jpeg files", "*.jpg")); - GetFileTypeRegistry()->addType(FILETYPE_KEY, filetype_t("targa files", "*.tga")); - return (char *) PLUGIN_NAME; + GetFileTypeRegistry()->addType( FILETYPE_KEY, filetype_t( "all files", "*.*" ) ); + GetFileTypeRegistry()->addType( FILETYPE_KEY, filetype_t( "jpeg files", "*.jpg" ) ); + GetFileTypeRegistry()->addType( FILETYPE_KEY, filetype_t( "targa files", "*.tga" ) ); + return (char *) PLUGIN_NAME; } -extern "C" const char* QERPlug_GetName () -{ - return (char *) PLUGIN_NAME; +extern "C" const char* QERPlug_GetName(){ + return (char *) PLUGIN_NAME; } -extern "C" const char* QERPlug_GetCommandList () -{ - return (char *) PLUGIN_COMMANDS; +extern "C" const char* QERPlug_GetCommandList(){ + return (char *) PLUGIN_COMMANDS; } -extern "C" void QERPlug_Dispatch (const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) -{ - Sys_Printf (MSG_PREFIX "Command \"%s\"\n",p); - if(!strcmp(p, CMD_ABOUT)) { - g_FuncTable.m_pfnMessageBox(NULL, PLUGIN_ABOUT, "About", MB_OK, NULL); - } - else if(!strcmp(p,CMD_CONFIG)) { - ShowBackgroundDialog(); - } +extern "C" void QERPlug_Dispatch( const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ){ + Sys_Printf( MSG_PREFIX "Command \"%s\"\n",p ); + if ( !strcmp( p, CMD_ABOUT ) ) { + g_FuncTable.m_pfnMessageBox( NULL, PLUGIN_ABOUT, "About", MB_OK, NULL ); + } + else if ( !strcmp( p,CMD_CONFIG ) ) { + ShowBackgroundDialog(); + } } //TODO these three suck -void DoBkgrndToggleXY() -{ - Sys_Printf (MSG_PREFIX "DoBkgrndToggleXY\n"); - // always toggle, since the buttons do - backgroundXY.m_bActive = (backgroundXY.m_bActive) ? false:true; - // if we don't have image or extents, and we activated, - // bring up the dialog with the corresponding page - // would be better to hide or grey out button, but we can't - if(backgroundXY.m_bActive && !backgroundXY.Valid()) - ShowBackgroundDialogPG(0); - else - g_FuncTable.m_pfnSysUpdateWindows(W_XY); +void DoBkgrndToggleXY(){ + Sys_Printf( MSG_PREFIX "DoBkgrndToggleXY\n" ); + // always toggle, since the buttons do + backgroundXY.m_bActive = ( backgroundXY.m_bActive ) ? false : true; + // if we don't have image or extents, and we activated, + // bring up the dialog with the corresponding page + // would be better to hide or grey out button, but we can't + if ( backgroundXY.m_bActive && !backgroundXY.Valid() ) { + ShowBackgroundDialogPG( 0 ); + } + else{ + g_FuncTable.m_pfnSysUpdateWindows( W_XY ); + } } -void DoBkgrndToggleXZ() -{ - Sys_Printf (MSG_PREFIX "DoBkgrndToggleXZ\n"); - backgroundXZ.m_bActive = (backgroundXZ.m_bActive) ? false:true; - if(backgroundXZ.m_bActive && !backgroundXZ.Valid()) - ShowBackgroundDialogPG(1); - else - g_FuncTable.m_pfnSysUpdateWindows(W_XY); +void DoBkgrndToggleXZ(){ + Sys_Printf( MSG_PREFIX "DoBkgrndToggleXZ\n" ); + backgroundXZ.m_bActive = ( backgroundXZ.m_bActive ) ? false : true; + if ( backgroundXZ.m_bActive && !backgroundXZ.Valid() ) { + ShowBackgroundDialogPG( 1 ); + } + else{ + g_FuncTable.m_pfnSysUpdateWindows( W_XY ); + } } -void DoBkgrndToggleYZ() -{ - Sys_Printf (MSG_PREFIX "DoBkgrndToggleYZ\n"); - backgroundYZ.m_bActive = (backgroundYZ.m_bActive) ? false:true; - if(backgroundYZ.m_bActive && !backgroundYZ.Valid()) - ShowBackgroundDialogPG(2); - else - g_FuncTable.m_pfnSysUpdateWindows(W_XY); +void DoBkgrndToggleYZ(){ + Sys_Printf( MSG_PREFIX "DoBkgrndToggleYZ\n" ); + backgroundYZ.m_bActive = ( backgroundYZ.m_bActive ) ? false : true; + if ( backgroundYZ.m_bActive && !backgroundYZ.Valid() ) { + ShowBackgroundDialogPG( 2 ); + } + else{ + g_FuncTable.m_pfnSysUpdateWindows( W_XY ); + } } // ============================================================================= @@ -252,69 +244,62 @@ CSynapseClientBkgrnd2d g_SynapseClient; #if __GNUC__ >= 4 #pragma GCC visibility push(default) #endif -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) { +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(TOOLBAR_MAJOR, BKGRND2D_MINOR, sizeof(_QERPlugToolbarTable)); - g_SynapseClient.AddAPI(PLUGIN_MAJOR, BKGRND2D_MINOR, sizeof( _QERPluginTable ) ); - - g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( g_FuncTable ), SYN_REQUIRE, &g_FuncTable ); - g_SynapseClient.AddAPI( QGL_MAJOR, NULL, sizeof( g_QglTable ), SYN_REQUIRE, &g_QglTable ); + 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( TOOLBAR_MAJOR, BKGRND2D_MINOR, sizeof( _QERPlugToolbarTable ) ); + g_SynapseClient.AddAPI( PLUGIN_MAJOR, BKGRND2D_MINOR, sizeof( _QERPluginTable ) ); + + g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( g_FuncTable ), SYN_REQUIRE, &g_FuncTable ); + g_SynapseClient.AddAPI( QGL_MAJOR, NULL, sizeof( g_QglTable ), SYN_REQUIRE, &g_QglTable ); // TODO is this the right way to ask for 'whichever VFS we have loaded' ? Seems to work // for misc filename functions - g_SynapseClient.AddAPI( VFS_MAJOR, "*", sizeof( g_FileSystemTable ), SYN_REQUIRE, &g_FileSystemTable ); + g_SynapseClient.AddAPI( VFS_MAJOR, "*", sizeof( g_FileSystemTable ), SYN_REQUIRE, &g_FileSystemTable ); // get worldspawn - g_SynapseClient.AddAPI( ENTITY_MAJOR, NULL, sizeof( g_EntityTable ), SYN_REQUIRE, &g_EntityTable ); + g_SynapseClient.AddAPI( ENTITY_MAJOR, NULL, sizeof( g_EntityTable ), SYN_REQUIRE, &g_EntityTable ); // selected brushes - g_SynapseClient.AddAPI( DATA_MAJOR, NULL, sizeof( g_DataTable ), SYN_REQUIRE, &g_DataTable ); + g_SynapseClient.AddAPI( DATA_MAJOR, NULL, sizeof( g_DataTable ), SYN_REQUIRE, &g_DataTable ); - return &g_SynapseClient; + return &g_SynapseClient; } -bool CSynapseClientBkgrnd2d::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; - } - if (!strcmp(pAPI->major_name, TOOLBAR_MAJOR)) - { - _QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable); - - pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; - pTable->m_pfnGetToolbarButton = &GetToolbarButton; - return true; - } - - Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo()); - return false; +bool CSynapseClientBkgrnd2d::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; + } + if ( !strcmp( pAPI->major_name, TOOLBAR_MAJOR ) ) { + _QERPlugToolbarTable* pTable = static_cast<_QERPlugToolbarTable*>( pAPI->mpTable ); + + pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; + pTable->m_pfnGetToolbarButton = &GetToolbarButton; + return true; + } + + Syn_Printf( "ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo() ); + return false; } #include "version.h" -const char* CSynapseClientBkgrnd2d::GetInfo() -{ - return "2d Background plugin built " __DATE__ " " RADIANT_VERSION; +const char* CSynapseClientBkgrnd2d::GetInfo(){ + return "2d Background plugin built " __DATE__ " " RADIANT_VERSION; } -const char* CSynapseClientBkgrnd2d::GetName() -{ - return "bkgrnd2d"; +const char* CSynapseClientBkgrnd2d::GetName(){ + return "bkgrnd2d"; } - diff --git a/contrib/bkgrnd2d/plugin.h b/contrib/bkgrnd2d/plugin.h index 15fe7d62..d2a18ee3 100644 --- a/contrib/bkgrnd2d/plugin.h +++ b/contrib/bkgrnd2d/plugin.h @@ -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-2007 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 + */ // // bkgrnd2d Plugin @@ -31,9 +31,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define _PLUGIN_H_ /*! -\todo need general notice about lib purpose etc. -and the external dependencies (such as GLib, STL, mathlib etc.) -*/ + \todo need general notice about lib purpose etc. + and the external dependencies (such as GLib, STL, mathlib etc.) + */ #include // for CPtrArray for idata.h @@ -64,13 +64,13 @@ extern CSynapseServer* g_pSynapseServer; class CSynapseClientBkgrnd2d : public CSynapseClient { public: - // CSynapseClient API - bool RequestAPI(APIDescriptor_t *pAPI); - const char* GetInfo(); - const char* GetName(); +// CSynapseClient API +bool RequestAPI( APIDescriptor_t *pAPI ); +const char* GetInfo(); +const char* GetName(); - CSynapseClientBkgrnd2d() { } - virtual ~CSynapseClientBkgrnd2d() { } +CSynapseClientBkgrnd2d() { } +virtual ~CSynapseClientBkgrnd2d() { } }; #define MSG_PREFIX "bkgrnd2d: " #define MSG_WARN "bkgrnd2d WARNING: " diff --git a/contrib/bobtoolz/CPortals.h b/contrib/bobtoolz/CPortals.h index 60506be8..bc601f09 100644 --- a/contrib/bobtoolz/CPortals.h +++ b/contrib/bobtoolz/CPortals.h @@ -1,63 +1,63 @@ /* -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" // Added by ClassView +#include "StdAfx.h" // Added by ClassView class CBspPoint { public: - float p[3]; +float p[3]; }; class CBspPortal { public: - CBspPortal(); - ~CBspPortal(); +CBspPortal(); +~CBspPortal(); - unsigned point_count; - CBspPoint *point; - bool Build(char *def, unsigned int pointCnt, bool bInverse); +unsigned point_count; +CBspPoint *point; +bool Build( char *def, unsigned int pointCnt, bool bInverse ); }; class CBspNode { public: - CBspPortal *portal; - unsigned int portal_count; +CBspPortal *portal; +unsigned int portal_count; - bool AddPortal(char* def, unsigned int pointCnt, bool bInverse); - unsigned int portal_next; - CBspNode(); - ~CBspNode(); +bool AddPortal( char* def, unsigned int pointCnt, bool bInverse ); +unsigned int portal_next; +CBspNode(); +~CBspNode(); }; class CPortals { public: - CPortals(); - ~CPortals(); +CPortals(); +~CPortals(); - void Load(); // use filename in fn - void Purge(); +void Load(); // use filename in fn +void Purge(); - char fn[PATH_MAX]; - CBspNode *node; +char fn[PATH_MAX]; +CBspNode *node; - unsigned int node_count; +unsigned int node_count; }; diff --git a/contrib/bobtoolz/DBobView.cpp b/contrib/bobtoolz/DBobView.cpp index 47215106..f10833e4 100644 --- a/contrib/bobtoolz/DBobView.cpp +++ b/contrib/bobtoolz/DBobView.cpp @@ -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 + */ // BobView.cpp: implementation of the DBobView class. // @@ -31,11 +31,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DBobView::DBobView() -{ +DBobView::DBobView(){ nPathCount = 0; refCount = 1; - + m_bHooked = FALSE; path = NULL; @@ -44,18 +43,20 @@ DBobView::DBobView() boundingShow = BOUNDS_APEX; } -DBobView::~DBobView() -{ - if(path) +DBobView::~DBobView(){ + if ( path ) { delete[] path; + } // oops forgot to remove our eyes, was causing access violation when it tried // to talk to it's parent - if(eyes) + if ( eyes ) { delete eyes; + } - if(m_bHooked) + if ( m_bHooked ) { UnRegister(); + } g_PathView = NULL; } @@ -64,181 +65,179 @@ DBobView::~DBobView() // Implementation ////////////////////////////////////////////////////////////////////// -void DBobView::Draw2D(VIEWTYPE vt) -{ - if(!path) +void DBobView::Draw2D( VIEWTYPE vt ){ + if ( !path ) { return; + } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - g_QglTable.m_pfn_qglDisable(GL_BLEND); - g_QglTable.m_pfn_qglEnable(GL_LINE_SMOOTH); + g_QglTable.m_pfn_qglDisable( GL_BLEND ); + g_QglTable.m_pfn_qglEnable( GL_LINE_SMOOTH ); g_QglTable.m_pfn_qglPushMatrix(); - - switch(vt) + + switch ( vt ) { case XY: break; case XZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); break; case YZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); - g_QglTable.m_pfn_qglRotatef(270.0f, 0.0f, 0.0f, 1.0f); + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); + g_QglTable.m_pfn_qglRotatef( 270.0f, 0.0f, 0.0f, 1.0f ); break; } - g_QglTable.m_pfn_qglLineWidth(1.0f); - g_QglTable.m_pfn_qglColor4f(1.0f, 0.0f, 0.0f, 1.0f); + g_QglTable.m_pfn_qglLineWidth( 1.0f ); + g_QglTable.m_pfn_qglColor4f( 1.0f, 0.0f, 0.0f, 1.0f ); int i; - g_QglTable.m_pfn_qglBegin(GL_LINE_STRIP); + g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - for(i = 0; i < nPathCount; i++) - g_QglTable.m_pfn_qglVertex3fv(path[i]); + for ( i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); - if(m_bShowExtra) - { + if ( m_bShowExtra ) { // +mars // for the bounding box stuff - g_QglTable.m_pfn_qglColor4f(0.25f, 0.75f, 0.75f, 1.0f); + g_QglTable.m_pfn_qglColor4f( 0.25f, 0.75f, 0.75f, 1.0f ); g_QglTable.m_pfn_qglTranslatef( 16.0f, 16.0f, 28.0f ); g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - - for ( i = 0; i < nPathCount; i++ ) - g_QglTable.m_pfn_qglVertex3fv( path[i] ); + + for ( i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); - - // --------------- - g_QglTable.m_pfn_qglTranslatef( -16.0f, -16.0f, -28.0f ); // back to where we were - g_QglTable.m_pfn_qglTranslatef( -16.0f, 16.0f, 28.0f ); // move to new postion - + // --------------- + + g_QglTable.m_pfn_qglTranslatef( -16.0f, -16.0f, -28.0f ); // back to where we were + g_QglTable.m_pfn_qglTranslatef( -16.0f, 16.0f, 28.0f ); // move to new postion + g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - for ( i = 0; i < nPathCount; i++ ) - g_QglTable.m_pfn_qglVertex3fv( path[i] ); + for ( i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); - // -------------- + // -------------- - g_QglTable.m_pfn_qglTranslatef( 16.0f, -16.0f, -28.0f ); // back to where we were - g_QglTable.m_pfn_qglTranslatef( 16.0f, -16.0f, -28.0f ); // new pos + g_QglTable.m_pfn_qglTranslatef( 16.0f, -16.0f, -28.0f ); // back to where we were + g_QglTable.m_pfn_qglTranslatef( 16.0f, -16.0f, -28.0f ); // new pos g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - - for ( i = 0; i < nPathCount; i++ ) - g_QglTable.m_pfn_qglVertex3fv( path[i] ); + + for ( i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); - // ---------------- + // ---------------- - g_QglTable.m_pfn_qglTranslatef( -16.0f, 16.0f, 28.0f ); // back to where we were + g_QglTable.m_pfn_qglTranslatef( -16.0f, 16.0f, 28.0f ); // back to where we were /* g_QglTable.m_pfn_qglTranslatef( -16.0f, -16.0f, -28.0f ); // new pos - g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - - if ( boundingShow == BOUNDS_ALL ) - { - for ( i = 0; i < nPathCount; i++ ) - g_QglTable.m_pfn_qglVertex3fv( path[i] ); - } - else if ( boundingShow == BOUNDS_APEX ) - { - for ( i = (nPathCount/4); i < (nPathCount/4) * 3; i++ ) - g_QglTable.m_pfn_qglVertex3fv( path[i] ); - } + g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - g_QglTable.m_pfn_qglEnd();*/ // djbob: er, um doesn't really seem to do anyhting + if ( boundingShow == BOUNDS_ALL ) + { + for ( i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); + } + else if ( boundingShow == BOUNDS_APEX ) + { + for ( i = (nPathCount/4); i < (nPathCount/4) * 3; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); + } + + g_QglTable.m_pfn_qglEnd();*/ // djbob: er, um doesn't really seem to do anyhting } // -mars - + g_QglTable.m_pfn_qglPopMatrix(); g_QglTable.m_pfn_qglPopAttrib(); } -void DBobView::Draw3D() -{ - if(!path) +void DBobView::Draw3D(){ + if ( !path ) { return; + } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - g_QglTable.m_pfn_qglDisable(GL_BLEND); - g_QglTable.m_pfn_qglEnable(GL_LINE_SMOOTH); + g_QglTable.m_pfn_qglDisable( GL_BLEND ); + g_QglTable.m_pfn_qglEnable( GL_LINE_SMOOTH ); - g_QglTable.m_pfn_qglLineWidth(1.0f); - g_QglTable.m_pfn_qglColor4f(1.0f, 0.0f, 0.0f, 1.0f); + g_QglTable.m_pfn_qglLineWidth( 1.0f ); + g_QglTable.m_pfn_qglColor4f( 1.0f, 0.0f, 0.0f, 1.0f ); - g_QglTable.m_pfn_qglBegin(GL_LINE_STRIP); + g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - for(int i = 0; i < nPathCount; i++) - g_QglTable.m_pfn_qglVertex3fv(path[i]); + for ( int i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); - if(m_bShowExtra) - { + if ( m_bShowExtra ) { // +mars // ahhh -- a nice C&P job :) // for the bounding box stuff - g_QglTable.m_pfn_qglColor4f(0.25f, 0.75f, 0.75f, 1.0f); + g_QglTable.m_pfn_qglColor4f( 0.25f, 0.75f, 0.75f, 1.0f ); g_QglTable.m_pfn_qglTranslatef( 16.0f, 16.0f, 28.0f ); g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - - int i; + + int i; for ( i = 0; i < nPathCount; i++ ) g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); - - // --------------- - g_QglTable.m_pfn_qglTranslatef( -16.0f, -16.0f, -28.0f ); // back to where we were - g_QglTable.m_pfn_qglTranslatef( -16.0f, 16.0f, 28.0f ); // move to new postion - + // --------------- + + g_QglTable.m_pfn_qglTranslatef( -16.0f, -16.0f, -28.0f ); // back to where we were + g_QglTable.m_pfn_qglTranslatef( -16.0f, 16.0f, 28.0f ); // move to new postion + g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - - for ( i = 0; i < nPathCount; i++ ) - g_QglTable.m_pfn_qglVertex3fv( path[i] ); + + for ( i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); - // -------------- + // -------------- - g_QglTable.m_pfn_qglTranslatef( 16.0f, -16.0f, -28.0f ); // back to where we were - g_QglTable.m_pfn_qglTranslatef( 16.0f, -16.0f, -28.0f ); // new pos + g_QglTable.m_pfn_qglTranslatef( 16.0f, -16.0f, -28.0f ); // back to where we were + g_QglTable.m_pfn_qglTranslatef( 16.0f, -16.0f, -28.0f ); // new pos g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - - for ( i = 0; i < nPathCount; i++ ) - g_QglTable.m_pfn_qglVertex3fv( path[i] ); + + for ( i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); - // ---------------- + // ---------------- - g_QglTable.m_pfn_qglTranslatef( -16.0f, 16.0f, 28.0f ); // back to where we were - g_QglTable.m_pfn_qglTranslatef( -16.0f, -16.0f, -28.0f ); // new pos + g_QglTable.m_pfn_qglTranslatef( -16.0f, 16.0f, 28.0f ); // back to where we were + g_QglTable.m_pfn_qglTranslatef( -16.0f, -16.0f, -28.0f ); // new pos g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); - - for ( i = 0; i < nPathCount; i++ ) - g_QglTable.m_pfn_qglVertex3fv( path[i] ); + + for ( i = 0; i < nPathCount; i++ ) + g_QglTable.m_pfn_qglVertex3fv( path[i] ); g_QglTable.m_pfn_qglEnd(); } @@ -247,61 +246,57 @@ void DBobView::Draw3D() g_QglTable.m_pfn_qglPopAttrib(); } -void DBobView::Register() -{ +void DBobView::Register(){ g_QglTable.m_pfnHookGL2DWindow( this ); g_QglTable.m_pfnHookGL3DWindow( this ); m_bHooked = TRUE; } -void DBobView::UnRegister() -{ +void DBobView::UnRegister(){ g_QglTable.m_pfnUnHookGL2DWindow( this ); g_QglTable.m_pfnUnHookGL3DWindow( this ); m_bHooked = FALSE; } -void DBobView::SetPath(vec3_t *pPath) -{ - if(path) +void DBobView::SetPath( vec3_t *pPath ){ + if ( path ) { delete[] path; + } path = pPath; } #define LOCAL_GRAVITY -800.0f -bool DBobView::CalculateTrajectory(vec3_t start, vec3_t apex, float multiplier, int points, float varGravity) -{ - if(apex[2] <= start[2]) - { - SetPath(NULL); +bool DBobView::CalculateTrajectory( vec3_t start, vec3_t apex, float multiplier, int points, float varGravity ){ + if ( apex[2] <= start[2] ) { + SetPath( NULL ); return FALSE; } // ----think q3a actually would allow these //scrub that, coz the plugin wont :] vec3_t dist, speed; - VectorSubtract(apex, start, dist); + VectorSubtract( apex, start, dist ); - vec_t speed_z = (float)sqrt(-2*LOCAL_GRAVITY*dist[2]); - float flight_time = -speed_z/LOCAL_GRAVITY; + vec_t speed_z = (float)sqrt( -2 * LOCAL_GRAVITY * dist[2] ); + float flight_time = -speed_z / LOCAL_GRAVITY; - VectorScale(dist, 1/flight_time, speed); + VectorScale( dist, 1 / flight_time, speed ); speed[2] = speed_z; // Sys_Printf("Speed: (%.4f %.4f %.4f)\n", speed[0], speed[1], speed[2]); vec3_t* pPath = new vec3_t[points]; - float interval = multiplier*flight_time/points; - for(int i = 0; i < points; i++) + float interval = multiplier * flight_time / points; + for ( int i = 0; i < points; i++ ) { - float ltime = interval*i; + float ltime = interval * i; - VectorScale(speed, ltime, pPath[i]); - VectorAdd(pPath[i], start, pPath[i]); + VectorScale( speed, ltime, pPath[i] ); + VectorAdd( pPath[i], start, pPath[i] ); // could do this all with vectors // vGrav = {0, 0, -800.0f} @@ -310,17 +305,16 @@ bool DBobView::CalculateTrajectory(vec3_t start, vec3_t apex, float multiplier, // _VectorAdd(pPath[i], start, pPath[i]) // _VectorAdd(pPath[i], vAdd, pPath[i]) - pPath[i][2] = start[2] + (speed_z*ltime) + (varGravity*0.5f*ltime*ltime); + pPath[i][2] = start[2] + ( speed_z * ltime ) + ( varGravity * 0.5f * ltime * ltime ); } - SetPath(pPath); + SetPath( pPath ); return TRUE; } -void DBobView::Begin(const char* trigger, const char *target, float multiplier, int points, float varGravity, bool bNoUpdate, bool bShowExtra) -{ - strcpy(entTrigger, trigger); - strcpy(entTarget, target); +void DBobView::Begin( const char* trigger, const char *target, float multiplier, int points, float varGravity, bool bNoUpdate, bool bShowExtra ){ + strcpy( entTrigger, trigger ); + strcpy( entTarget, target ); fMultiplier = multiplier; fVarGravity = varGravity; @@ -329,10 +323,8 @@ void DBobView::Begin(const char* trigger, const char *target, float multiplier, Register(); - if(UpdatePath()) - { - if(!bNoUpdate) - { + if ( UpdatePath() ) { + if ( !bNoUpdate ) { eyes = new DListener; eyes->parent = this; eyes->Register(); @@ -340,20 +332,17 @@ void DBobView::Begin(const char* trigger, const char *target, float multiplier, } else { - Sys_ERROR("Initialization Failure in DBobView::Begin"); + Sys_ERROR( "Initialization Failure in DBobView::Begin" ); delete this; } } -bool DBobView::UpdatePath() -{ +bool DBobView::UpdatePath(){ vec3_t start, apex; - if(GetEntityCentre(entTrigger, start)) - { - if(GetEntityCentre(entTarget, apex)) - { - CalculateTrajectory(start, apex, fMultiplier, nPathCount, fVarGravity); + if ( GetEntityCentre( entTrigger, start ) ) { + if ( GetEntityCentre( entTarget, apex ) ) { + CalculateTrajectory( start, apex, fMultiplier, nPathCount, fVarGravity ); return TRUE; } } diff --git a/contrib/bobtoolz/DBobView.h b/contrib/bobtoolz/DBobView.h index 94902607..81f24587 100644 --- a/contrib/bobtoolz/DBobView.h +++ b/contrib/bobtoolz/DBobView.h @@ -1,72 +1,76 @@ /* -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 + */ // DBobView.h: interface for the DBobView class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_BOBVIEW_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_BOBVIEW_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_BOBVIEW_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_ class DListener; -#define BOUNDS_ALL 0 -#define BOUNDS_APEX 1 +#define BOUNDS_ALL 0 +#define BOUNDS_APEX 1 #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 -class DBobView : - public IGL2DWindow, - public IGL3DWindow +class DBobView : + public IGL2DWindow, + public IGL3DWindow { public: - DBobView(); - virtual ~DBobView(); +DBobView(); +virtual ~DBobView(); protected: - vec3_t* path; - int refCount; +vec3_t* path; +int refCount; public: - bool m_bShowExtra; - int boundingShow; - DListener* eyes; - float fVarGravity; +bool m_bShowExtra; +int boundingShow; +DListener* eyes; +float fVarGravity; - bool UpdatePath(); - char entTarget[256]; - char entTrigger[256]; - void Begin(const char*, const char*, float, int, float, bool, bool); - bool CalculateTrajectory(vec3_t, vec3_t, float, int, float); +bool UpdatePath(); +char entTarget[256]; +char entTrigger[256]; +void Begin( const char*, const char*, float, int, float, bool, bool ); +bool CalculateTrajectory( vec3_t, vec3_t, float, int, float ); - void SetPath(vec3_t* pPath); - void UnRegister(); - void Register(); - void Draw3D(); - void Draw2D(VIEWTYPE vt); - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } +void SetPath( vec3_t* pPath ); +void UnRegister(); +void Register(); +void Draw3D(); +void Draw2D( VIEWTYPE vt ); +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} - float fMultiplier; - bool m_bHooked; - int nPathCount; +float fMultiplier; +bool m_bHooked; +int nPathCount; }; #endif // !defined(AFX_BOBVIEW_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_) diff --git a/contrib/bobtoolz/DBrush.cpp b/contrib/bobtoolz/DBrush.cpp index 73ad40a8..34afabfe 100644 --- a/contrib/bobtoolz/DBrush.cpp +++ b/contrib/bobtoolz/DBrush.cpp @@ -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 + */ // DBrush.cpp: implementation of the DBrush class. // @@ -37,15 +37,13 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DBrush::DBrush(int ID) -{ +DBrush::DBrush( int ID ){ m_nBrushID = ID; bBoundsBuilt = FALSE; QER_brush = NULL; } -DBrush::~DBrush() -{ +DBrush::~DBrush(){ ClearFaces(); ClearPoints(); } @@ -54,55 +52,52 @@ DBrush::~DBrush() // Implementation ////////////////////////////////////////////////////////////////////// -DPlane* DBrush::AddFace(vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* texData) -{ +DPlane* DBrush::AddFace( vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* texData ){ #ifdef _DEBUG // Sys_Printf("(%f %f %f) (%f %f %f) (%f %f %f)\n", va[0], va[1], va[2], vb[0], vb[1], vb[2], vc[0], vc[1], vc[2]); #endif bBoundsBuilt = FALSE; - DPlane* newFace = new DPlane(va, vb, vc, texData); - faceList.push_back(newFace); - + DPlane* newFace = new DPlane( va, vb, vc, texData ); + faceList.push_back( newFace ); + return newFace; } -int DBrush::BuildPoints() -{ +int DBrush::BuildPoints(){ ClearPoints(); - - if(faceList.size() <= 3) // if less than 3 faces, there can be no points - return 0; // with only 3 faces u can't have a bounded soild - for(list::const_iterator p1=faceList.begin(); p1!=faceList.end(); p1++) + if ( faceList.size() <= 3 ) { // if less than 3 faces, there can be no points + return 0; // with only 3 faces u can't have a bounded soild + + } + for ( list::const_iterator p1 = faceList.begin(); p1 != faceList.end(); p1++ ) { - list::const_iterator p2=p1; - for(p2++; p2!=faceList.end(); p2++) + list::const_iterator p2 = p1; + for ( p2++; p2 != faceList.end(); p2++ ) { - list::const_iterator p3=p2; - for(p3++; p3!=faceList.end(); p3++) + list::const_iterator p3 = p2; + for ( p3++; p3 != faceList.end(); p3++ ) { vec3_t pnt; - if((*p1)->PlaneIntersection(*p2, *p3, pnt)) - { - int pos = PointPosition(pnt); + if ( ( *p1 )->PlaneIntersection( *p2, *p3, pnt ) ) { + int pos = PointPosition( pnt ); - if(pos == POINT_IN_BRUSH) - { // ???? shouldn't happen here - Sys_Printf("ERROR:: Build Brush Points: Point IN brush!!!\n"); + if ( pos == POINT_IN_BRUSH ) { // ???? shouldn't happen here + Sys_Printf( "ERROR:: Build Brush Points: Point IN brush!!!\n" ); } - else if(pos == POINT_ON_BRUSH) - { // normal point - if(!HasPoint(pnt)) - AddPoint(pnt); + else if ( pos == POINT_ON_BRUSH ) { // normal point + if ( !HasPoint( pnt ) ) { + AddPoint( pnt ); + } /* else - Sys_Printf("Duplicate Point Found, pyramids ahoy!!!!!\n");*/ + Sys_Printf("Duplicate Point Found, pyramids ahoy!!!!!\n");*/ // point lies on more that 3 planes } - + // otherwise point is removed due to another plane.. - // Sys_Printf("(%f, %f, %f)\n", pnt[0], pnt[1], pnt[2]); - } + // Sys_Printf("(%f, %f, %f)\n", pnt[0], pnt[1], pnt[2]); + } } } } @@ -114,106 +109,103 @@ int DBrush::BuildPoints() return pointList.size(); } -void DBrush::LoadFromBrush_t(brush_t* brush, bool textured) -{ +void DBrush::LoadFromBrush_t( brush_t* brush, bool textured ){ ClearFaces(); ClearPoints(); - for(int i = g_FuncTable.m_pfnGetFaceCount(brush)-1; i >= 0 ; i--) - { // running backwards so i dont have to use the count function each time (OPT) - _QERFaceData* faceData = g_FuncTable.m_pfnGetFaceData(brush, i); + for ( int i = g_FuncTable.m_pfnGetFaceCount( brush ) - 1; i >= 0 ; i-- ) + { // running backwards so i dont have to use the count function each time (OPT) + _QERFaceData* faceData = g_FuncTable.m_pfnGetFaceData( brush, i ); - if(faceData == NULL) - DoMessageBox("Null pointer returned", "WARNING!", MB_OK); + if ( faceData == NULL ) { + DoMessageBox( "Null pointer returned", "WARNING!", MB_OK ); + } - if(textured) - AddFace(faceData->m_v1, faceData->m_v2, faceData->m_v3, faceData); - else - AddFace(faceData->m_v1, faceData->m_v2, faceData->m_v3, NULL); + if ( textured ) { + AddFace( faceData->m_v1, faceData->m_v2, faceData->m_v3, faceData ); + } + else{ + AddFace( faceData->m_v1, faceData->m_v2, faceData->m_v3, NULL ); + } } QER_brush = brush; } -int DBrush::PointPosition(vec3_t pnt) -{ - int state = POINT_IN_BRUSH; // if nothing happens point is inside brush +int DBrush::PointPosition( vec3_t pnt ){ + int state = POINT_IN_BRUSH; // if nothing happens point is inside brush - for(list::const_iterator chkPlane=faceList.begin(); chkPlane!=faceList.end(); chkPlane++) + for ( list::const_iterator chkPlane = faceList.begin(); chkPlane != faceList.end(); chkPlane++ ) { - float dist = (*chkPlane)->DistanceToPoint(pnt); + float dist = ( *chkPlane )->DistanceToPoint( pnt ); - if(dist > MAX_ROUND_ERROR) - return POINT_OUT_BRUSH; // if point is in front of plane, it CANT be in the brush - else if(fabs(dist) < MAX_ROUND_ERROR) - state = POINT_ON_BRUSH; // if point is ON plane point is either ON the brush - // or outside it, it can no longer be in it + if ( dist > MAX_ROUND_ERROR ) { + return POINT_OUT_BRUSH; // if point is in front of plane, it CANT be in the brush + } + else if ( fabs( dist ) < MAX_ROUND_ERROR ) { + state = POINT_ON_BRUSH; // if point is ON plane point is either ON the brush + } + // or outside it, it can no longer be in it } return state; } -void DBrush::ClearPoints() -{ - for(list::const_iterator deadPoint=pointList.begin(); deadPoint!=pointList.end(); deadPoint++) { +void DBrush::ClearPoints(){ + for ( list::const_iterator deadPoint = pointList.begin(); deadPoint != pointList.end(); deadPoint++ ) { delete *deadPoint; } pointList.clear(); } -void DBrush::ClearFaces() -{ +void DBrush::ClearFaces(){ bBoundsBuilt = FALSE; - for(list::const_iterator deadPlane=faceList.begin(); deadPlane!=faceList.end(); deadPlane++) + for ( list::const_iterator deadPlane = faceList.begin(); deadPlane != faceList.end(); deadPlane++ ) { delete *deadPlane; } faceList.clear(); } -void DBrush::AddPoint(vec3_t pnt) -{ +void DBrush::AddPoint( vec3_t pnt ){ DPoint* newPoint = new DPoint; - VectorCopy(pnt, newPoint->_pnt); - pointList.push_back(newPoint); + VectorCopy( pnt, newPoint->_pnt ); + pointList.push_back( newPoint ); } -bool DBrush::HasPoint(vec3_t pnt) -{ - for(list::const_iterator chkPoint=pointList.begin(); chkPoint!=pointList.end(); chkPoint++) +bool DBrush::HasPoint( vec3_t pnt ){ + for ( list::const_iterator chkPoint = pointList.begin(); chkPoint != pointList.end(); chkPoint++ ) { - if(**chkPoint == pnt) + if ( **chkPoint == pnt ) { return TRUE; + } } return FALSE; } -int DBrush::RemoveRedundantPlanes() -{ +int DBrush::RemoveRedundantPlanes(){ int cnt = 0; list::iterator chkPlane; // find duplicate planes - list::iterator p1=faceList.begin(); + list::iterator p1 = faceList.begin(); - while( p1!=faceList.end() ) + while ( p1 != faceList.end() ) { list::iterator p2 = p1; - for(p2++; p2!=faceList.end(); p2++) + for ( p2++; p2 != faceList.end(); p2++ ) { - if(**p1 == **p2) - { - if(!strcmp((*p1)->texInfo.m_TextureName, "textures/common/caulk")) - { + if ( **p1 == **p2 ) { + if ( !strcmp( ( *p1 )->texInfo.m_TextureName, "textures/common/caulk" ) ) { delete *p1; - p1 = faceList.erase(p1); // duplicate plane + p1 = faceList.erase( p1 ); // duplicate plane } else { delete *p2; - p2 = faceList.erase(p2); // duplicate plane + p2 = faceList.erase( p2 ); // duplicate plane } cnt++; @@ -221,186 +213,195 @@ int DBrush::RemoveRedundantPlanes() } } - if( p2 == faceList.end() ) + if ( p2 == faceList.end() ) { p1++; + } } - + //+djbob kill planes with bad normal, they are more of a nuisance than losing a brush - chkPlane=faceList.begin(); - while( chkPlane!=faceList.end() ) + chkPlane = faceList.begin(); + while ( chkPlane != faceList.end() ) { - if(VectorLength((*chkPlane)->normal) == 0) // plane has bad normal - { + if ( VectorLength( ( *chkPlane )->normal ) == 0 ) { // plane has bad normal delete *chkPlane; - chkPlane = faceList.erase(chkPlane); + chkPlane = faceList.erase( chkPlane ); cnt++; - } else { + } + else { chkPlane++; } } //-djbob - - if(pointList.size() == 0) // if points may not have been built, build them + + if ( pointList.size() == 0 ) { // if points may not have been built, build them /* if(BuildPoints() == 0) // just let the planes die if they are all bad - return cnt;*/ - BuildPoints(); + return cnt;*/ + BuildPoints(); + } - chkPlane=faceList.begin(); - while(chkPlane != faceList.end()) + chkPlane = faceList.begin(); + while ( chkPlane != faceList.end() ) { - if((*chkPlane)->IsRedundant(pointList)) // checks that plane "0wnz" :), 3 or more points - { + if ( ( *chkPlane )->IsRedundant( pointList ) ) { // checks that plane "0wnz" :), 3 or more points delete *chkPlane; - chkPlane = faceList.erase(chkPlane); + chkPlane = faceList.erase( chkPlane ); cnt++; - } - else + } + else{ chkPlane++; + } } return cnt; } -bool DBrush::GetBounds(vec3_t min, vec3_t max) -{ +bool DBrush::GetBounds( vec3_t min, vec3_t max ){ BuildBounds(); - if(!bBoundsBuilt) + if ( !bBoundsBuilt ) { return FALSE; + } - VectorCopy(bbox_min, min); - VectorCopy(bbox_max, max); + VectorCopy( bbox_min, min ); + VectorCopy( bbox_max, max ); return TRUE; } -bool DBrush::BBoxCollision(DBrush* chkBrush) -{ +bool DBrush::BBoxCollision( DBrush* chkBrush ){ vec3_t min1, min2; vec3_t max1, max2; - GetBounds(min1, max1); - chkBrush->GetBounds(min2, max2); + GetBounds( min1, max1 ); + chkBrush->GetBounds( min2, max2 ); - if(min1[0] >= max2[0]) + if ( min1[0] >= max2[0] ) { return FALSE; - if(min1[1] >= max2[1]) + } + if ( min1[1] >= max2[1] ) { return FALSE; - if(min1[2] >= max2[2]) + } + if ( min1[2] >= max2[2] ) { return FALSE; + } - if(max1[0] <= min2[0]) + if ( max1[0] <= min2[0] ) { return FALSE; - if(max1[1] <= min2[1]) + } + if ( max1[1] <= min2[1] ) { return FALSE; - if(max1[2] <= min2[2]) + } + if ( max1[2] <= min2[2] ) { return FALSE; + } return TRUE; } -DPlane* DBrush::HasPlane(DPlane* chkPlane) -{ - for(list::const_iterator brushPlane=faceList.begin(); brushPlane!=faceList.end(); brushPlane++) +DPlane* DBrush::HasPlane( DPlane* chkPlane ){ + for ( list::const_iterator brushPlane = faceList.begin(); brushPlane != faceList.end(); brushPlane++ ) { - if(**brushPlane == *chkPlane) + if ( **brushPlane == *chkPlane ) { return *brushPlane; + } } return NULL; } -bool DBrush::IsCutByPlane(DPlane *cuttingPlane) -{ +bool DBrush::IsCutByPlane( DPlane *cuttingPlane ){ bool isInFront; - if(pointList.size() == 0) - if(BuildPoints() == 0) + if ( pointList.size() == 0 ) { + if ( BuildPoints() == 0 ) { return FALSE; + } + } list::const_iterator chkPnt = pointList.begin(); - if(chkPnt == pointList.end()) + if ( chkPnt == pointList.end() ) { return FALSE; + } - float dist = cuttingPlane->DistanceToPoint((*chkPnt)->_pnt); + float dist = cuttingPlane->DistanceToPoint( ( *chkPnt )->_pnt ); - if(dist > MAX_ROUND_ERROR) + if ( dist > MAX_ROUND_ERROR ) { isInFront = FALSE; - else if(dist < MAX_ROUND_ERROR) + } + else if ( dist < MAX_ROUND_ERROR ) { isInFront = TRUE; - else + } + else{ return TRUE; + } - for(chkPnt++=pointList.begin(); chkPnt!=pointList.end(); chkPnt++) + for ( chkPnt++ = pointList.begin(); chkPnt != pointList.end(); chkPnt++ ) { - dist = cuttingPlane->DistanceToPoint((*chkPnt)->_pnt); + dist = cuttingPlane->DistanceToPoint( ( *chkPnt )->_pnt ); - if(dist > MAX_ROUND_ERROR) - { - if(isInFront) + if ( dist > MAX_ROUND_ERROR ) { + if ( isInFront ) { return TRUE; + } } - else if(dist < MAX_ROUND_ERROR) - { - if(!isInFront) + else if ( dist < MAX_ROUND_ERROR ) { + if ( !isInFront ) { return TRUE; + } } - else + else{ return TRUE; + } } return FALSE; } -brush_t* DBrush::BuildInRadiant(bool allowDestruction, int* changeCnt, entity_t* entity) -{ - if(allowDestruction) - { +brush_t* DBrush::BuildInRadiant( bool allowDestruction, int* changeCnt, entity_t* entity ){ + if ( allowDestruction ) { bool kill = TRUE; - - for(list::const_iterator chkPlane=faceList.begin(); chkPlane!=faceList.end(); chkPlane++) + + for ( list::const_iterator chkPlane = faceList.begin(); chkPlane != faceList.end(); chkPlane++ ) { - if((*chkPlane)->m_bChkOk) - { + if ( ( *chkPlane )->m_bChkOk ) { kill = FALSE; break; } } - if(kill) + if ( kill ) { return NULL; + } } //+djbob: fixed bug when brush had no faces "phantom brush" in radiant. - if(faceList.size() < 4) - { - Sys_Printf("Possible Phantom Brush Found, will not rebuild\n"); + if ( faceList.size() < 4 ) { + Sys_Printf( "Possible Phantom Brush Found, will not rebuild\n" ); return NULL; } //-djbob QER_brush = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); - for(list::const_iterator buildPlane=faceList.begin(); buildPlane!=faceList.end(); buildPlane++) { - if((*buildPlane)->AddToBrush_t(QER_brush) && changeCnt) { - (*changeCnt)++; + for ( list::const_iterator buildPlane = faceList.begin(); buildPlane != faceList.end(); buildPlane++ ) { + if ( ( *buildPlane )->AddToBrush_t( QER_brush ) && changeCnt ) { + ( *changeCnt )++; } } - if(entity) { - g_FuncTable.m_pfnCommitBrushHandleToEntity(QER_brush, entity); - g_BrushTable.m_pfnBrush_Build(QER_brush, false, false, false, false); - g_BrushTable.m_pfnBrush_AddToList(QER_brush, g_AppDataTable.m_pfnSelectedBrushes()); - } else { - g_FuncTable.m_pfnCommitBrushHandle(QER_brush); + if ( entity ) { + g_FuncTable.m_pfnCommitBrushHandleToEntity( QER_brush, entity ); + g_BrushTable.m_pfnBrush_Build( QER_brush, false, false, false, false ); + g_BrushTable.m_pfnBrush_AddToList( QER_brush, g_AppDataTable.m_pfnSelectedBrushes() ); + } + else { + g_FuncTable.m_pfnCommitBrushHandle( QER_brush ); } return QER_brush; } -void DBrush::CutByPlane(DPlane *cutPlane, DBrush **newBrush1, DBrush **newBrush2) -{ - if(!IsCutByPlane(cutPlane)) - { +void DBrush::CutByPlane( DPlane *cutPlane, DBrush **newBrush1, DBrush **newBrush2 ){ + if ( !IsCutByPlane( cutPlane ) ) { *newBrush1 = NULL; *newBrush2 = NULL; return; @@ -408,15 +409,15 @@ void DBrush::CutByPlane(DPlane *cutPlane, DBrush **newBrush1, DBrush **newBrush2 DBrush* b1 = new DBrush; DBrush* b2 = new DBrush; - - for(list::const_iterator parsePlane=faceList.begin(); parsePlane!=faceList.end(); parsePlane++) + + for ( list::const_iterator parsePlane = faceList.begin(); parsePlane != faceList.end(); parsePlane++ ) { - b1->AddFace((*parsePlane)->points[0], (*parsePlane)->points[1], (*parsePlane)->points[2], NULL); - b2->AddFace((*parsePlane)->points[0], (*parsePlane)->points[1], (*parsePlane)->points[2], NULL); + b1->AddFace( ( *parsePlane )->points[0], ( *parsePlane )->points[1], ( *parsePlane )->points[2], NULL ); + b2->AddFace( ( *parsePlane )->points[0], ( *parsePlane )->points[1], ( *parsePlane )->points[2], NULL ); } - b1->AddFace(cutPlane->points[0], cutPlane->points[1], cutPlane->points[2], NULL); - b2->AddFace(cutPlane->points[2], cutPlane->points[1], cutPlane->points[0], NULL); + b1->AddFace( cutPlane->points[0], cutPlane->points[1], cutPlane->points[2], NULL ); + b2->AddFace( cutPlane->points[2], cutPlane->points[1], cutPlane->points[0], NULL ); b1->RemoveRedundantPlanes(); b2->RemoveRedundantPlanes(); @@ -425,68 +426,72 @@ void DBrush::CutByPlane(DPlane *cutPlane, DBrush **newBrush1, DBrush **newBrush2 *newBrush2 = b2; } -bool DBrush::IntersectsWith(DBrush *chkBrush) -{ - if(pointList.size() == 0) - if(BuildPoints() == 0) - return FALSE; // invalid brush!!!! +bool DBrush::IntersectsWith( DBrush *chkBrush ){ + if ( pointList.size() == 0 ) { + if ( BuildPoints() == 0 ) { + return FALSE; // invalid brush!!!! + + } + } + if ( chkBrush->pointList.size() == 0 ) { + if ( chkBrush->BuildPoints() == 0 ) { + return FALSE; // invalid brush!!!! - if(chkBrush->pointList.size() == 0) - if(chkBrush->BuildPoints() == 0) - return FALSE; // invalid brush!!!! - - if(!BBoxCollision(chkBrush)) + } + } + if ( !BBoxCollision( chkBrush ) ) { return FALSE; + } list::const_iterator iplPlane; - for( iplPlane=faceList.begin(); iplPlane!=faceList.end(); iplPlane++) + for ( iplPlane = faceList.begin(); iplPlane != faceList.end(); iplPlane++ ) { bool allInFront = TRUE; - for(list::const_iterator iPoint=chkBrush->pointList.begin(); iPoint!=chkBrush->pointList.end(); iPoint++) + for ( list::const_iterator iPoint = chkBrush->pointList.begin(); iPoint != chkBrush->pointList.end(); iPoint++ ) { - if((*iplPlane)->DistanceToPoint((*iPoint)->_pnt) < -MAX_ROUND_ERROR) - { + if ( ( *iplPlane )->DistanceToPoint( ( *iPoint )->_pnt ) < -MAX_ROUND_ERROR ) { allInFront = FALSE; break; } } - if(allInFront) + if ( allInFront ) { return FALSE; + } } - for( iplPlane=chkBrush->faceList.begin(); iplPlane!=chkBrush->faceList.end(); iplPlane++) + for ( iplPlane = chkBrush->faceList.begin(); iplPlane != chkBrush->faceList.end(); iplPlane++ ) { bool allInFront = TRUE; - for(list::const_iterator iPoint=pointList.begin(); iPoint!=pointList.end(); iPoint++) + for ( list::const_iterator iPoint = pointList.begin(); iPoint != pointList.end(); iPoint++ ) { - if((*iplPlane)->DistanceToPoint((*iPoint)->_pnt) < -MAX_ROUND_ERROR) - { + if ( ( *iplPlane )->DistanceToPoint( ( *iPoint )->_pnt ) < -MAX_ROUND_ERROR ) { allInFront = FALSE; break; } } - if(allInFront) + if ( allInFront ) { return FALSE; + } } return TRUE; } -bool DBrush::IntersectsWith(DPlane* p1, DPlane* p2, vec3_t v) { +bool DBrush::IntersectsWith( DPlane* p1, DPlane* p2, vec3_t v ) { vec3_t vDown = { 0, 0, -1 }; list::const_iterator iplPlane; - for( iplPlane = faceList.begin(); iplPlane != faceList.end(); iplPlane++) { - DPlane* p = (*iplPlane); - + for ( iplPlane = faceList.begin(); iplPlane != faceList.end(); iplPlane++ ) { + DPlane* p = ( *iplPlane ); + vec_t d = DotProduct( p->normal, vDown ); - if( d >= 0 ) { + if ( d >= 0 ) { continue; } - if(p->PlaneIntersection(p1, p2, v)) { - if(PointPosition( v ) != POINT_OUT_BRUSH) { + if ( p->PlaneIntersection( p1, p2, v ) ) { + if ( PointPosition( v ) != POINT_OUT_BRUSH ) { return TRUE; } } @@ -495,150 +500,162 @@ bool DBrush::IntersectsWith(DPlane* p1, DPlane* p2, vec3_t v) { return FALSE; } -void DBrush::BuildBounds() -{ - if(!bBoundsBuilt) - { - if(pointList.size() == 0) // if points may not have been built, build them - if(BuildPoints() == 0) +void DBrush::BuildBounds(){ + if ( !bBoundsBuilt ) { + if ( pointList.size() == 0 ) { // if points may not have been built, build them + if ( BuildPoints() == 0 ) { return; - + } + } + list::const_iterator first = pointList.begin(); - VectorCopy((*first)->_pnt, bbox_min); - VectorCopy((*first)->_pnt, bbox_max); + VectorCopy( ( *first )->_pnt, bbox_min ); + VectorCopy( ( *first )->_pnt, bbox_max ); - list::const_iterator point=pointList.begin(); - for( point++; point!=pointList.end(); point++) + list::const_iterator point = pointList.begin(); + for ( point++; point != pointList.end(); point++ ) { - if((*point)->_pnt[0] > bbox_max[0]) - bbox_max[0] = (*point)->_pnt[0]; - if((*point)->_pnt[1] > bbox_max[1]) - bbox_max[1] = (*point)->_pnt[1]; - if((*point)->_pnt[2] > bbox_max[2]) - bbox_max[2] = (*point)->_pnt[2]; + if ( ( *point )->_pnt[0] > bbox_max[0] ) { + bbox_max[0] = ( *point )->_pnt[0]; + } + if ( ( *point )->_pnt[1] > bbox_max[1] ) { + bbox_max[1] = ( *point )->_pnt[1]; + } + if ( ( *point )->_pnt[2] > bbox_max[2] ) { + bbox_max[2] = ( *point )->_pnt[2]; + } - if((*point)->_pnt[0] < bbox_min[0]) - bbox_min[0] = (*point)->_pnt[0]; - if((*point)->_pnt[1] < bbox_min[1]) - bbox_min[1] = (*point)->_pnt[1]; - if((*point)->_pnt[2] < bbox_min[2]) - bbox_min[2] = (*point)->_pnt[2]; + if ( ( *point )->_pnt[0] < bbox_min[0] ) { + bbox_min[0] = ( *point )->_pnt[0]; + } + if ( ( *point )->_pnt[1] < bbox_min[1] ) { + bbox_min[1] = ( *point )->_pnt[1]; + } + if ( ( *point )->_pnt[2] < bbox_min[2] ) { + bbox_min[2] = ( *point )->_pnt[2]; + } } bBoundsBuilt = TRUE; } } -bool DBrush::BBoxTouch(DBrush *chkBrush) -{ +bool DBrush::BBoxTouch( DBrush *chkBrush ){ vec3_t min1, min2; vec3_t max1, max2; - GetBounds(min1, max1); - chkBrush->GetBounds(min2, max2); + GetBounds( min1, max1 ); + chkBrush->GetBounds( min2, max2 ); - if((min1[0] - max2[0]) > MAX_ROUND_ERROR) + if ( ( min1[0] - max2[0] ) > MAX_ROUND_ERROR ) { return FALSE; - if((min1[1] - max2[1]) > MAX_ROUND_ERROR) + } + if ( ( min1[1] - max2[1] ) > MAX_ROUND_ERROR ) { return FALSE; - if((min1[2] - max2[2]) > MAX_ROUND_ERROR) + } + if ( ( min1[2] - max2[2] ) > MAX_ROUND_ERROR ) { return FALSE; + } - if((min2[0] - max1[0]) > MAX_ROUND_ERROR) + if ( ( min2[0] - max1[0] ) > MAX_ROUND_ERROR ) { return FALSE; - if((min2[1] - max1[1]) > MAX_ROUND_ERROR) + } + if ( ( min2[1] - max1[1] ) > MAX_ROUND_ERROR ) { return FALSE; - if((min2[2] - max1[2]) > MAX_ROUND_ERROR) + } + if ( ( min2[2] - max1[2] ) > MAX_ROUND_ERROR ) { return FALSE; + } int cnt = 0; - if((min2[0] - max1[0]) == 0) + if ( ( min2[0] - max1[0] ) == 0 ) { cnt++; + } - if((min2[1] - max1[1]) == 0) + if ( ( min2[1] - max1[1] ) == 0 ) { cnt++; + } - if((min2[2] - max1[2]) == 0) + if ( ( min2[2] - max1[2] ) == 0 ) { cnt++; + } - if((min1[0] - max2[0]) == 0) + if ( ( min1[0] - max2[0] ) == 0 ) { cnt++; + } - if((min1[1] - max2[1]) == 0) + if ( ( min1[1] - max2[1] ) == 0 ) { cnt++; + } - if((min1[2] - max2[2]) == 0) + if ( ( min1[2] - max2[2] ) == 0 ) { cnt++; + } - if(cnt > 1) + if ( cnt > 1 ) { return FALSE; + } return TRUE; } -void DBrush::ResetChecks(list* exclusionList) -{ - for(list::const_iterator resetPlane=faceList.begin(); resetPlane!=faceList.end(); resetPlane++) +void DBrush::ResetChecks( list* exclusionList ){ + for ( list::const_iterator resetPlane = faceList.begin(); resetPlane != faceList.end(); resetPlane++ ) { bool set = FALSE; - if(exclusionList) - { - for(list::iterator eTexture = exclusionList->begin(); eTexture != exclusionList->end(); eTexture++) + if ( exclusionList ) { + for ( list::iterator eTexture = exclusionList->begin(); eTexture != exclusionList->end(); eTexture++ ) { - if(strstr((*resetPlane)->texInfo.m_TextureName, eTexture->GetBuffer())) - { + if ( strstr( ( *resetPlane )->texInfo.m_TextureName, eTexture->GetBuffer() ) ) { set = TRUE; break; } } } - (*resetPlane)->m_bChkOk = set; + ( *resetPlane )->m_bChkOk = set; } } -DPlane* DBrush::HasPlaneInverted(DPlane *chkPlane) -{ - for(list::const_iterator brushPlane=faceList.begin(); brushPlane!=faceList.end(); brushPlane++) +DPlane* DBrush::HasPlaneInverted( DPlane *chkPlane ){ + for ( list::const_iterator brushPlane = faceList.begin(); brushPlane != faceList.end(); brushPlane++ ) { - if(**brushPlane != *chkPlane) - { - if(fabs((*brushPlane)->_d + chkPlane->_d) < 0.1) - return (*brushPlane); + if ( **brushPlane != *chkPlane ) { + if ( fabs( ( *brushPlane )->_d + chkPlane->_d ) < 0.1 ) { + return ( *brushPlane ); + } } } return NULL; } -bool DBrush::HasTexture(const char *textureName) -{ - for(list::const_iterator chkPlane=faceList.begin(); chkPlane!=faceList.end(); chkPlane++) +bool DBrush::HasTexture( const char *textureName ){ + for ( list::const_iterator chkPlane = faceList.begin(); chkPlane != faceList.end(); chkPlane++ ) { - if(strstr((*chkPlane)->texInfo.m_TextureName, textureName)) + if ( strstr( ( *chkPlane )->texInfo.m_TextureName, textureName ) ) { return TRUE; + } } return FALSE; } -bool DBrush::IsDetail() -{ - for(list::const_iterator chkPlane=faceList.begin(); chkPlane!=faceList.end(); chkPlane++) +bool DBrush::IsDetail(){ + for ( list::const_iterator chkPlane = faceList.begin(); chkPlane != faceList.end(); chkPlane++ ) { - if((*chkPlane)->texInfo.m_nContents & FACE_DETAIL) + if ( ( *chkPlane )->texInfo.m_nContents & FACE_DETAIL ) { return TRUE; + } } return FALSE; } -void DBrush::BuildFromWinding(DWinding *w) -{ - if(w->numpoints < 3) - { - Sys_ERROR("Winding has invalid number of points"); +void DBrush::BuildFromWinding( DWinding *w ){ + if ( w->numpoints < 3 ) { + Sys_ERROR( "Winding has invalid number of points" ); return; } @@ -647,89 +664,89 @@ void DBrush::BuildFromWinding(DWinding *w) DWinding* w2; w2 = w->CopyWinding(); int i; - for(i = 0; i < w2->numpoints; i++) - VectorAdd(w2->p[i], wPlane->normal, w2->p[i]); + for ( i = 0; i < w2->numpoints; i++ ) + VectorAdd( w2->p[i], wPlane->normal, w2->p[i] ); - AddFace(w2->p[0], w2->p[1], w2->p[2], NULL); - AddFace(w->p[2], w->p[1], w->p[0], NULL); + AddFace( w2->p[0], w2->p[1], w2->p[2], NULL ); + AddFace( w->p[2], w->p[1], w->p[0], NULL ); - for(i = 0; i < w->numpoints-1; i++) - AddFace(w2->p[i], w->p[i], w->p[i+1], NULL); - AddFace(w2->p[w->numpoints-1], w->p[w->numpoints-1], w->p[0], NULL); + for ( i = 0; i < w->numpoints - 1; i++ ) + AddFace( w2->p[i], w->p[i], w->p[i + 1], NULL ); + AddFace( w2->p[w->numpoints - 1], w->p[w->numpoints - 1], w->p[0], NULL ); delete wPlane; delete w2; } -void DBrush::SaveToFile(FILE *pFile) -{ - fprintf(pFile, "{\n"); +void DBrush::SaveToFile( FILE *pFile ){ + fprintf( pFile, "{\n" ); - for(list::const_iterator pp=faceList.begin(); pp!=faceList.end(); pp++) + for ( list::const_iterator pp = faceList.begin(); pp != faceList.end(); pp++ ) { char buffer[512]; - sprintf(buffer, "( %.0f %.0f %.0f ) ( %.0f %.0f %.0f ) ( %.0f %.0f %.0f ) %s %.0f %.0f %f %f %.0f 0 0 0\n", - (*pp)->points[0][0], (*pp)->points[0][1], (*pp)->points[0][2], - (*pp)->points[1][0], (*pp)->points[1][1], (*pp)->points[1][2], - (*pp)->points[2][0], (*pp)->points[2][1], (*pp)->points[2][2], - (*pp)->texInfo.m_TextureName, - (*pp)->texInfo.m_fShift[0], (*pp)->texInfo.m_fShift[1], - (*pp)->texInfo.m_fScale[0], (*pp)->texInfo.m_fScale[0], - (*pp)->texInfo.m_fRotate); + sprintf( buffer, "( %.0f %.0f %.0f ) ( %.0f %.0f %.0f ) ( %.0f %.0f %.0f ) %s %.0f %.0f %f %f %.0f 0 0 0\n", + ( *pp )->points[0][0], ( *pp )->points[0][1], ( *pp )->points[0][2], + ( *pp )->points[1][0], ( *pp )->points[1][1], ( *pp )->points[1][2], + ( *pp )->points[2][0], ( *pp )->points[2][1], ( *pp )->points[2][2], + ( *pp )->texInfo.m_TextureName, + ( *pp )->texInfo.m_fShift[0], ( *pp )->texInfo.m_fShift[1], + ( *pp )->texInfo.m_fScale[0], ( *pp )->texInfo.m_fScale[0], + ( *pp )->texInfo.m_fRotate ); - fprintf(pFile, buffer); + fprintf( pFile, buffer ); } - fprintf(pFile, "}\n"); + fprintf( pFile, "}\n" ); } -void DBrush::Rotate(vec3_t vOrigin, vec3_t vRotation) -{ - for(list::const_iterator rotPlane=faceList.begin(); rotPlane!=faceList.end(); rotPlane++) +void DBrush::Rotate( vec3_t vOrigin, vec3_t vRotation ){ + for ( list::const_iterator rotPlane = faceList.begin(); rotPlane != faceList.end(); rotPlane++ ) { - for(int i = 0; i < 3; i++) - VectorRotate((*rotPlane)->points[i], vRotation, vOrigin); + for ( int i = 0; i < 3; i++ ) + VectorRotate( ( *rotPlane )->points[i], vRotation, vOrigin ); - (*rotPlane)->Rebuild(); + ( *rotPlane )->Rebuild(); } } -void DBrush::RotateAboutCentre(vec3_t vRotation) -{ +void DBrush::RotateAboutCentre( vec3_t vRotation ){ vec3_t min, max, centre; - GetBounds(min, max); - VectorAdd(min, max, centre); - VectorScale(centre, 0.5f, centre); + GetBounds( min, max ); + VectorAdd( min, max, centre ); + VectorScale( centre, 0.5f, centre ); - Rotate(centre, vRotation); + Rotate( centre, vRotation ); } -bool DBrush::ResetTextures(const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, - int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation) -{ - if(textureName) - { +bool DBrush::ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, + int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation ){ + if ( textureName ) { bool changed = FALSE; - for(list::const_iterator resetPlane=faceList.begin(); resetPlane!=faceList.end(); resetPlane++) + for ( list::const_iterator resetPlane = faceList.begin(); resetPlane != faceList.end(); resetPlane++ ) { - if(!strcmp((*resetPlane)->texInfo.m_TextureName, textureName)) - { - if(bResetTextureName) - strcpy((*resetPlane)->texInfo.m_TextureName, newTextureName); + if ( !strcmp( ( *resetPlane )->texInfo.m_TextureName, textureName ) ) { + if ( bResetTextureName ) { + strcpy( ( *resetPlane )->texInfo.m_TextureName, newTextureName ); + } - if(bResetScale[0]) - (*resetPlane)->texInfo.m_fScale[0] = fScale[0]; - if(bResetScale[1]) - (*resetPlane)->texInfo.m_fScale[1] = fScale[1]; + if ( bResetScale[0] ) { + ( *resetPlane )->texInfo.m_fScale[0] = fScale[0]; + } + if ( bResetScale[1] ) { + ( *resetPlane )->texInfo.m_fScale[1] = fScale[1]; + } - if(bResetShift[0]) - (*resetPlane)->texInfo.m_fShift[0] = fShift[0]; - if(bResetShift[1]) - (*resetPlane)->texInfo.m_fShift[1] = fShift[1]; + if ( bResetShift[0] ) { + ( *resetPlane )->texInfo.m_fShift[0] = fShift[0]; + } + if ( bResetShift[1] ) { + ( *resetPlane )->texInfo.m_fShift[1] = fShift[1]; + } - if(bResetRotation) - (*resetPlane)->texInfo.m_fRotate = (float)rotation; + if ( bResetRotation ) { + ( *resetPlane )->texInfo.m_fRotate = (float)rotation; + } changed = TRUE; } @@ -738,53 +755,59 @@ bool DBrush::ResetTextures(const char* textureName, float fScale[2], float fS } else { - for(list::const_iterator resetPlane=faceList.begin(); resetPlane!=faceList.end(); resetPlane++) + for ( list::const_iterator resetPlane = faceList.begin(); resetPlane != faceList.end(); resetPlane++ ) { - if(bResetTextureName) - strcpy((*resetPlane)->texInfo.m_TextureName, newTextureName); + if ( bResetTextureName ) { + strcpy( ( *resetPlane )->texInfo.m_TextureName, newTextureName ); + } - if(bResetScale[0]) - (*resetPlane)->texInfo.m_fScale[0] = fScale[0]; - if(bResetScale[1]) - (*resetPlane)->texInfo.m_fScale[1] = fScale[1]; + if ( bResetScale[0] ) { + ( *resetPlane )->texInfo.m_fScale[0] = fScale[0]; + } + if ( bResetScale[1] ) { + ( *resetPlane )->texInfo.m_fScale[1] = fScale[1]; + } - if(bResetShift[0]) - (*resetPlane)->texInfo.m_fShift[0] = fShift[0]; - if(bResetShift[1]) - (*resetPlane)->texInfo.m_fShift[1] = fShift[1]; + if ( bResetShift[0] ) { + ( *resetPlane )->texInfo.m_fShift[0] = fShift[0]; + } + if ( bResetShift[1] ) { + ( *resetPlane )->texInfo.m_fShift[1] = fShift[1]; + } - if(bResetRotation) - (*resetPlane)->texInfo.m_fRotate = (float)rotation; + if ( bResetRotation ) { + ( *resetPlane )->texInfo.m_fRotate = (float)rotation; + } } return TRUE; } } -bool DBrush::operator ==(DBrush* other) -{ +bool DBrush::operator ==( DBrush* other ){ list::const_iterator chkPlane; - - for(chkPlane=faceList.begin(); chkPlane!=faceList.end(); chkPlane++) + + for ( chkPlane = faceList.begin(); chkPlane != faceList.end(); chkPlane++ ) { - if(!other->HasPlane((*chkPlane))) + if ( !other->HasPlane( ( *chkPlane ) ) ) { return FALSE; + } } - for(chkPlane=faceList.begin(); chkPlane!=faceList.end(); chkPlane++) + for ( chkPlane = faceList.begin(); chkPlane != faceList.end(); chkPlane++ ) { - if(!HasPlane((*chkPlane))) + if ( !HasPlane( ( *chkPlane ) ) ) { return FALSE; + } } return TRUE; } -DPlane* DBrush::AddFace(vec3_t va, vec3_t vb, vec3_t vc, const char *textureName, bool bDetail) -{ +DPlane* DBrush::AddFace( vec3_t va, vec3_t vb, vec3_t vc, const char *textureName, bool bDetail ){ bBoundsBuilt = FALSE; - DPlane* newFace = new DPlane(va, vb, vc, textureName, bDetail); - faceList.push_back(newFace); - + DPlane* newFace = new DPlane( va, vb, vc, textureName, bDetail ); + faceList.push_back( newFace ); + return newFace; } @@ -792,11 +815,11 @@ DPlane* DBrush::FindPlaneWithClosestNormal( vec_t* normal ) { vec_t bestDot = -2; DPlane* bestDotPlane = NULL; list::const_iterator chkPlane; - for( chkPlane = faceList.begin(); chkPlane != faceList.end(); chkPlane++ ) { - DPlane* pPlane = (*chkPlane); + for ( chkPlane = faceList.begin(); chkPlane != faceList.end(); chkPlane++ ) { + DPlane* pPlane = ( *chkPlane ); vec_t dot = DotProduct( pPlane->normal, normal ); - if( dot > bestDot ) { + if ( dot > bestDot ) { bestDot = dot; bestDotPlane = pPlane; } @@ -808,20 +831,20 @@ DPlane* DBrush::FindPlaneWithClosestNormal( vec_t* normal ) { int DBrush::FindPointsForPlane( DPlane* plane, DPoint** pnts, int maxpnts ) { int numpnts = 0; - if(!maxpnts) { + if ( !maxpnts ) { return 0; } BuildPoints(); - for( list::const_iterator points = pointList.begin(); points != pointList.end(); points++ ) { - DPoint* point = (*points); + for ( list::const_iterator points = pointList.begin(); points != pointList.end(); points++ ) { + DPoint* point = ( *points ); - if( fabs(plane->DistanceToPoint( point->_pnt )) < MAX_ROUND_ERROR ) { + if ( fabs( plane->DistanceToPoint( point->_pnt ) ) < MAX_ROUND_ERROR ) { pnts[numpnts] = point; numpnts++; - if(numpnts >= maxpnts) { + if ( numpnts >= maxpnts ) { return numpnts; } @@ -833,8 +856,8 @@ int DBrush::FindPointsForPlane( DPlane* plane, DPoint** pnts, int maxpnts ) { void DBrush::RemovePlane( DPlane* plane ) { bBoundsBuilt = FALSE; - for( list::const_iterator deadPlane = faceList.begin(); deadPlane != faceList.end(); deadPlane++ ) { - if(*deadPlane == plane) { + for ( list::const_iterator deadPlane = faceList.begin(); deadPlane != faceList.end(); deadPlane++ ) { + if ( *deadPlane == plane ) { delete *deadPlane; faceList.remove( plane ); } @@ -842,7 +865,7 @@ void DBrush::RemovePlane( DPlane* plane ) { } void DBrush::RemoveFromRadiant( void ) { - if(QER_brush) { - g_FuncTable.m_pfnDeleteBrushHandle(QER_brush); + if ( QER_brush ) { + g_FuncTable.m_pfnDeleteBrushHandle( QER_brush ); } } diff --git a/contrib/bobtoolz/DBrush.h b/contrib/bobtoolz/DBrush.h index 65013dcc..be60bfed 100644 --- a/contrib/bobtoolz/DBrush.h +++ b/contrib/bobtoolz/DBrush.h @@ -1,99 +1,99 @@ /* -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 + */ // DBrush.h: interface for the DBrush class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DBRUSH_H__35B2C522_F0A7_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_DBRUSH_H__35B2C522_F0A7_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_DBRUSH_H__35B2C522_F0A7_11D4_ACF7_004095A18133__INCLUDED_ #include "DPlane.h" -#define POINT_IN_BRUSH 0 -#define POINT_ON_BRUSH 1 -#define POINT_OUT_BRUSH 2 +#define POINT_IN_BRUSH 0 +#define POINT_ON_BRUSH 1 +#define POINT_OUT_BRUSH 2 #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 -class DBrush +class DBrush { public: - DPlane* AddFace(vec3_t va, vec3_t vb, vec3_t vc, const char* textureName, bool bDetail); - void SaveToFile(FILE* pFile); +DPlane* AddFace( vec3_t va, vec3_t vb, vec3_t vc, const char* textureName, bool bDetail ); +void SaveToFile( FILE* pFile ); - void Rotate(vec3_t vOrigin, vec3_t vRotation); - void RotateAboutCentre(vec3_t vRotation); +void Rotate( vec3_t vOrigin, vec3_t vRotation ); +void RotateAboutCentre( vec3_t vRotation ); - DPlane* HasPlaneInverted(DPlane* chkPlane); - DPlane* HasPlane(DPlane* chkPlane); - DPlane* AddFace(vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* texData); +DPlane* HasPlaneInverted( DPlane* chkPlane ); +DPlane* HasPlane( DPlane* chkPlane ); +DPlane* AddFace( vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* texData ); - bool ResetTextures(const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation); - bool IsDetail(); - bool HasTexture(const char* textureName); - bool IntersectsWith(DBrush *chkBrush); - bool IntersectsWith(DPlane* p1, DPlane* p2, vec3_t v); - bool IsCutByPlane(DPlane* cuttingPlane); - bool GetBounds(vec3_t min, vec3_t max); - bool HasPoint(vec3_t pnt); - bool BBoxCollision(DBrush* chkBrush); - bool BBoxTouch(DBrush* chkBrush); +bool ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation ); +bool IsDetail(); +bool HasTexture( const char* textureName ); +bool IntersectsWith( DBrush *chkBrush ); +bool IntersectsWith( DPlane* p1, DPlane* p2, vec3_t v ); +bool IsCutByPlane( DPlane* cuttingPlane ); +bool GetBounds( vec3_t min, vec3_t max ); +bool HasPoint( vec3_t pnt ); +bool BBoxCollision( DBrush* chkBrush ); +bool BBoxTouch( DBrush* chkBrush ); - int BuildPoints(); - void BuildBounds(); - void BuildFromWinding(DWinding* w); - brush_t* BuildInRadiant(bool allowDestruction, int* changeCnt, entity_t* entity = NULL); +int BuildPoints(); +void BuildBounds(); +void BuildFromWinding( DWinding* w ); +brush_t* BuildInRadiant( bool allowDestruction, int* changeCnt, entity_t* entity = NULL ); - void ResetChecks(list* exclusionList); +void ResetChecks( list* exclusionList ); - void ClearFaces(); - void ClearPoints(); - - int RemoveRedundantPlanes( void ); - void RemovePlane( DPlane* plane ); - int PointPosition(vec3_t pnt); - void RemoveFromRadiant( void ); +void ClearFaces(); +void ClearPoints(); - - void CutByPlane(DPlane* cutPlane, DBrush** newBrush1, DBrush** newBrush2); +int RemoveRedundantPlanes( void ); +void RemovePlane( DPlane* plane ); +int PointPosition( vec3_t pnt ); +void RemoveFromRadiant( void ); - void LoadFromBrush_t(brush_t* brush, bool textured); - void AddPoint(vec3_t pnt); - DPlane* FindPlaneWithClosestNormal( vec_t* normal ); - int FindPointsForPlane( DPlane* plane, DPoint** pnts, int maxpnts ); +void CutByPlane( DPlane* cutPlane, DBrush** newBrush1, DBrush** newBrush2 ); - DBrush(int ID = -1); - virtual ~DBrush(); +void LoadFromBrush_t( brush_t* brush, bool textured ); +void AddPoint( vec3_t pnt ); - bool operator== (DBrush* other); +DPlane* FindPlaneWithClosestNormal( vec_t* normal ); +int FindPointsForPlane( DPlane* plane, DPoint** pnts, int maxpnts ); + +DBrush( int ID = -1 ); +virtual ~DBrush(); + +bool operator==( DBrush* other ); // members - brush_t* QER_brush; - list faceList; - list pointList; - int m_nBrushID; - vec3_t bbox_min, bbox_max; - bool bBoundsBuilt; +brush_t* QER_brush; +list faceList; +list pointList; +int m_nBrushID; +vec3_t bbox_min, bbox_max; +bool bBoundsBuilt; }; //typedef CList DBrushList; diff --git a/contrib/bobtoolz/DEPair.cpp b/contrib/bobtoolz/DEPair.cpp index 9ef8dc3d..dcf11fca 100644 --- a/contrib/bobtoolz/DEPair.cpp +++ b/contrib/bobtoolz/DEPair.cpp @@ -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 + */ // DEPair.cpp: implementation of the DEPair class. // @@ -28,13 +28,11 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DEPair::DEPair() -{ +DEPair::DEPair(){ } -DEPair::~DEPair() -{ +DEPair::~DEPair(){ } @@ -42,8 +40,7 @@ DEPair::~DEPair() // Implementation ////////////////////////////////////////////////////////////////////// -void DEPair::Build(const char *pKey, const char *pValue) -{ - key = pKey; - value = pValue; +void DEPair::Build( const char *pKey, const char *pValue ){ + key = pKey; + value = pValue; } diff --git a/contrib/bobtoolz/DEPair.h b/contrib/bobtoolz/DEPair.h index 41f86e48..b096ef2d 100644 --- a/contrib/bobtoolz/DEPair.h +++ b/contrib/bobtoolz/DEPair.h @@ -1,27 +1,27 @@ /* -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 + */ // DEPair.h: interface for the DEPair class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DEPAIR_H__35B2C521_F0A7_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_DEPAIR_H__35B2C521_F0A7_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_DEPAIR_H__35B2C521_F0A7_11D4_ACF7_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -31,13 +31,13 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA class DEPair { public: - DEPair(); - virtual ~DEPair(); +DEPair(); +virtual ~DEPair(); - void Build(const char* pKey, const char* pValue); +void Build( const char* pKey, const char* pValue ); - Str key; - Str value; +Str key; +Str value; }; //typedef CList DEPairList; diff --git a/contrib/bobtoolz/DEntity.cpp b/contrib/bobtoolz/DEntity.cpp index ca035b83..20a5b262 100644 --- a/contrib/bobtoolz/DEntity.cpp +++ b/contrib/bobtoolz/DEntity.cpp @@ -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 + */ // DEntity.cpp: implementation of the DEntity class. // @@ -57,15 +57,13 @@ const char* brushEntityList[] = { // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DEntity::DEntity(char *classname, int ID) -{ - SetClassname(classname); +DEntity::DEntity( char *classname, int ID ){ + SetClassname( classname ); m_nID = ID; QER_Entity = NULL; } -DEntity::~DEntity() -{ +DEntity::~DEntity(){ ClearPatches(); ClearBrushes(); ClearEPairs(); @@ -75,193 +73,186 @@ DEntity::~DEntity() // Implementation ////////////////////////////////////////////////////////////////////// -void DEntity::ClearBrushes() -{ - for(list::const_iterator deadBrush=brushList.begin(); deadBrush!=brushList.end(); deadBrush++) +void DEntity::ClearBrushes(){ + for ( list::const_iterator deadBrush = brushList.begin(); deadBrush != brushList.end(); deadBrush++ ) { delete *deadBrush; } brushList.clear(); } -void DEntity::ClearPatches() -{ - for(list::const_iterator deadPatch=patchList.begin(); deadPatch!=patchList.end(); deadPatch++) +void DEntity::ClearPatches(){ + for ( list::const_iterator deadPatch = patchList.begin(); deadPatch != patchList.end(); deadPatch++ ) { delete *deadPatch; } patchList.clear(); } -DPatch* DEntity::NewPatch() -{ +DPatch* DEntity::NewPatch(){ DPatch* newPatch = new DPatch; - patchList.push_back(newPatch); + patchList.push_back( newPatch ); return newPatch; } -DBrush* DEntity::NewBrush(int ID) -{ - DBrush* newBrush = new DBrush(ID); +DBrush* DEntity::NewBrush( int ID ){ + DBrush* newBrush = new DBrush( ID ); - brushList.push_back(newBrush); + brushList.push_back( newBrush ); return newBrush; } -char* getNextBracket(char* s) -{ +char* getNextBracket( char* s ){ char* p = s; - while(*p) + while ( *p ) { p++; - if(*p == '(') + if ( *p == '(' ) { break; + } } return p; } -bool DEntity::LoadFromPrt(char *filename) -{ +bool DEntity::LoadFromPrt( char *filename ){ CPortals portals; - strcpy(portals.fn, filename); + strcpy( portals.fn, filename ); portals.Load(); - if(portals.node_count == 0) + if ( portals.node_count == 0 ) { return FALSE; + } ClearBrushes(); ClearEPairs(); - bool build = false; - for(unsigned int i = 0; i < portals.node_count; i++) + bool build = false; + for ( unsigned int i = 0; i < portals.node_count; i++ ) { - build = false; + build = false; DBrush* brush = NewBrush(); - for(unsigned int j = 0; j < portals.node[i].portal_count; j++) + for ( unsigned int j = 0; j < portals.node[i].portal_count; j++ ) { - for(unsigned int k = 0; k < portals.node[i].portal[j].point_count-2; k++) - { - vec3_t v1, v2, normal, n; - VectorSubtract(portals.node[i].portal[j].point[k+2].p, portals.node[i].portal[j].point[k+1].p, v1); - VectorSubtract(portals.node[i].portal[j].point[k].p, portals.node[i].portal[j].point[k+1].p, v2); - CrossProduct(v1, v2, n); - VectorNormalize(n, v2); - - if(k == 0) - { - VectorCopy(v2, normal); - } - else - { - VectorSubtract(v2, normal, v1); - if(VectorLength(v1) > 0.01) - { - build = true; - break; - } - } - } - - if(!build) - brush->AddFace(portals.node[i].portal[j].point[2].p, portals.node[i].portal[j].point[1].p, portals.node[i].portal[j].point[0].p, "textures/common/caulk", FALSE); - else - brush->AddFace(portals.node[i].portal[j].point[0].p, portals.node[i].portal[j].point[1].p, portals.node[i].portal[j].point[2].p, "textures/common/caulk", FALSE); + for ( unsigned int k = 0; k < portals.node[i].portal[j].point_count - 2; k++ ) + { + vec3_t v1, v2, normal, n; + VectorSubtract( portals.node[i].portal[j].point[k + 2].p, portals.node[i].portal[j].point[k + 1].p, v1 ); + VectorSubtract( portals.node[i].portal[j].point[k].p, portals.node[i].portal[j].point[k + 1].p, v2 ); + CrossProduct( v1, v2, n ); + VectorNormalize( n, v2 ); + + if ( k == 0 ) { + VectorCopy( v2, normal ); + } + else + { + VectorSubtract( v2, normal, v1 ); + if ( VectorLength( v1 ) > 0.01 ) { + build = true; + break; + } + } + } + + if ( !build ) { + brush->AddFace( portals.node[i].portal[j].point[2].p, portals.node[i].portal[j].point[1].p, portals.node[i].portal[j].point[0].p, "textures/common/caulk", FALSE ); + } + else{ + brush->AddFace( portals.node[i].portal[j].point[0].p, portals.node[i].portal[j].point[1].p, portals.node[i].portal[j].point[2].p, "textures/common/caulk", FALSE ); + } + } + if ( build ) { + brush->BuildInRadiant( FALSE, NULL ); } - if(build) - brush->BuildInRadiant(FALSE, NULL); } return TRUE; } -DPlane* DEntity::AddFaceToBrush(vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* faceData, int ID) -{ - DBrush* buildBrush = GetBrushForID(ID); - return buildBrush->AddFace(va, vb, vc, faceData); +DPlane* DEntity::AddFaceToBrush( vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* faceData, int ID ){ + DBrush* buildBrush = GetBrushForID( ID ); + return buildBrush->AddFace( va, vb, vc, faceData ); // slow, dont use much } -DBrush* DEntity::GetBrushForID(int ID) -{ +DBrush* DEntity::GetBrushForID( int ID ){ DBrush* buildBrush = NULL; - for(list::const_iterator chkBrush=brushList.begin(); chkBrush!=brushList.end(); chkBrush++) + for ( list::const_iterator chkBrush = brushList.begin(); chkBrush != brushList.end(); chkBrush++ ) { - if((*chkBrush)->m_nBrushID == ID) - { - buildBrush = (*chkBrush); + if ( ( *chkBrush )->m_nBrushID == ID ) { + buildBrush = ( *chkBrush ); break; } } - if(!buildBrush) - buildBrush = NewBrush(ID); + if ( !buildBrush ) { + buildBrush = NewBrush( ID ); + } return buildBrush; } -void DEntity::LoadSelectedBrushes() -{ +void DEntity::LoadSelectedBrushes(){ ClearBrushes(); ClearEPairs(); int count = g_FuncTable.m_pfnAllocateSelectedBrushHandles(); - for(int i = 0; i < count; i++) { - brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(i); + for ( int i = 0; i < count; i++ ) { + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( i ); - if(brush->pPatch) + if ( brush->pPatch ) { continue; + } - DBrush* loadBrush = NewBrush(i); - loadBrush->LoadFromBrush_t(brush, TRUE); + DBrush* loadBrush = NewBrush( i ); + loadBrush->LoadFromBrush_t( brush, TRUE ); } g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } -void DEntity::LoadSelectedPatches() -{ +void DEntity::LoadSelectedPatches(){ ClearPatches(); ClearEPairs(); - int count = g_FuncTable.m_pfnAllocateSelectedPatchHandles(); + int count = g_FuncTable.m_pfnAllocateSelectedPatchHandles(); - for(int i = 0; i < count; i++) + for ( int i = 0; i < count; i++ ) { - //$ FIXME: m_pfnGetPatchHandle - patchMesh_t *pmesh = (patchMesh_t*)g_FuncTable.m_pfnGetPatchData(i); + //$ FIXME: m_pfnGetPatchHandle + patchMesh_t *pmesh = (patchMesh_t*)g_FuncTable.m_pfnGetPatchData( i ); DPatch* loadPatch = NewPatch(); - loadPatch->LoadFromBrush_t(pmesh->pSymbiot); + loadPatch->LoadFromBrush_t( pmesh->pSymbiot ); } - g_FuncTable.m_pfnReleasePatchHandles(); + g_FuncTable.m_pfnReleasePatchHandles(); } -bool* DEntity::BuildIntersectList() -{ +bool* DEntity::BuildIntersectList(){ int max = GetIDMax(); - if(max == 0) + if ( max == 0 ) { return NULL; + } bool* pbIntList = new bool[max]; - memset(pbIntList, 0, sizeof(bool)*(max)); + memset( pbIntList, 0, sizeof( bool ) * ( max ) ); - for(list::const_iterator pB1=brushList.begin(); pB1!=brushList.end(); pB1++) + for ( list::const_iterator pB1 = brushList.begin(); pB1 != brushList.end(); pB1++ ) { - list::const_iterator pB2=pB1; - for(pB2++; pB2!=brushList.end(); pB2++) + list::const_iterator pB2 = pB1; + for ( pB2++; pB2 != brushList.end(); pB2++ ) { - if((*pB1)->IntersectsWith((*pB2))) - { - pbIntList[(*pB1)->m_nBrushID] = TRUE; - pbIntList[(*pB2)->m_nBrushID] = TRUE; + if ( ( *pB1 )->IntersectsWith( ( *pB2 ) ) ) { + pbIntList[( *pB1 )->m_nBrushID] = TRUE; + pbIntList[( *pB2 )->m_nBrushID] = TRUE; } } } @@ -269,24 +260,23 @@ bool* DEntity::BuildIntersectList() return pbIntList; } -bool* DEntity::BuildDuplicateList() -{ +bool* DEntity::BuildDuplicateList(){ int max = GetIDMax(); - if(max == 0) + if ( max == 0 ) { return NULL; + } bool* pbDupList = new bool[max]; - memset(pbDupList, 0, sizeof(bool)*(max)); + memset( pbDupList, 0, sizeof( bool ) * ( max ) ); - for(list::const_iterator pB1=brushList.begin(); pB1!=brushList.end(); pB1++) + for ( list::const_iterator pB1 = brushList.begin(); pB1 != brushList.end(); pB1++ ) { - list::const_iterator pB2=pB1; - for(pB2++; pB2!=brushList.end(); pB2++) + list::const_iterator pB2 = pB1; + for ( pB2++; pB2 != brushList.end(); pB2++ ) { - if(**pB1 == *pB2) - { - pbDupList[(*pB1)->m_nBrushID] = TRUE; - pbDupList[(*pB2)->m_nBrushID] = TRUE; + if ( **pB1 == *pB2 ) { + pbDupList[( *pB1 )->m_nBrushID] = TRUE; + pbDupList[( *pB2 )->m_nBrushID] = TRUE; } } } @@ -294,75 +284,74 @@ bool* DEntity::BuildDuplicateList() return pbDupList; } -void DEntity::SelectBrushes(bool *selectList) -{ - if(selectList == NULL) +void DEntity::SelectBrushes( bool *selectList ){ + if ( selectList == NULL ) { return; + } g_FuncTable.m_pfnDeselectAllBrushes(); g_FuncTable.m_pfnAllocateActiveBrushHandles(); - for(list::const_iterator pBrush=brushList.begin(); pBrush!=brushList.end(); pBrush++) + for ( list::const_iterator pBrush = brushList.begin(); pBrush != brushList.end(); pBrush++ ) { - if(selectList[(*pBrush)->m_nBrushID]) - g_FuncTable.m_pfnSelectBrush((*pBrush)->QER_brush); + if ( selectList[( *pBrush )->m_nBrushID] ) { + g_FuncTable.m_pfnSelectBrush( ( *pBrush )->QER_brush ); + } } g_FuncTable.m_pfnReleaseActiveBrushHandles(); } -bool DEntity::LoadFromEntity(int id, bool bLoadPatches) { - return LoadFromEntity((entity_t*)g_FuncTable.m_pfnGetEntityHandle(id), bLoadPatches); +bool DEntity::LoadFromEntity( int id, bool bLoadPatches ) { + return LoadFromEntity( (entity_t*)g_FuncTable.m_pfnGetEntityHandle( id ), bLoadPatches ); } -bool DEntity::LoadFromEntity(entity_t* ent, bool bLoadPatches) { +bool DEntity::LoadFromEntity( entity_t* ent, bool bLoadPatches ) { ClearPatches(); ClearBrushes(); ClearEPairs(); QER_Entity = ent; - epair_t* epl = *g_EntityTable.m_pfnGetEntityKeyValList(QER_Entity); - LoadEPairList(epl); + epair_t* epl = *g_EntityTable.m_pfnGetEntityKeyValList( QER_Entity ); + LoadEPairList( epl ); bool keep = FALSE; int i; - for(i = 0; brushEntityList[i]; i++) + for ( i = 0; brushEntityList[i]; i++ ) { - if(!stricmp(brushEntityList[i], m_Classname)) - { + if ( !stricmp( brushEntityList[i], m_Classname ) ) { keep = TRUE; break; } } - if(!keep) + if ( !keep ) { return FALSE; + } - int count = g_FuncTable.m_pfnAllocateEntityBrushHandles(QER_Entity); + int count = g_FuncTable.m_pfnAllocateEntityBrushHandles( QER_Entity ); - for(i = 0; i < count; i++) + for ( i = 0; i < count; i++ ) { - brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetEntityBrushHandle(i); + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetEntityBrushHandle( i ); - if(brush == NULL) { - DoMessageBox("GTKRadiant returned a NULL pointer, NOT a good sign", "WARNING!!!", MB_OK); - continue; - } + if ( brush == NULL ) { + DoMessageBox( "GTKRadiant returned a NULL pointer, NOT a good sign", "WARNING!!!", MB_OK ); + continue; + } - if(brush->pPatch) - { - if(bLoadPatches) - { + if ( brush->pPatch ) { + if ( bLoadPatches ) { DPatch* loadPatch = NewPatch(); - loadPatch->LoadFromBrush_t(brush); + loadPatch->LoadFromBrush_t( brush ); } } else { - DBrush* loadBrush = NewBrush(i); - loadBrush->LoadFromBrush_t(brush, TRUE); + DBrush* loadBrush = NewBrush( i ); + loadBrush->LoadFromBrush_t( brush, TRUE ); } } @@ -371,64 +360,57 @@ bool DEntity::LoadFromEntity(entity_t* ent, bool bLoadPatches) { return TRUE; } -void DEntity::RemoveNonCheckBrushes(list* exclusionList, bool useDetail) -{ - list::iterator chkBrush=brushList.begin(); +void DEntity::RemoveNonCheckBrushes( list* exclusionList, bool useDetail ){ + list::iterator chkBrush = brushList.begin(); - while( chkBrush!=brushList.end() ) + while ( chkBrush != brushList.end() ) { - if(!useDetail) - { - if((*chkBrush)->IsDetail()) - { + if ( !useDetail ) { + if ( ( *chkBrush )->IsDetail() ) { delete *chkBrush; - chkBrush = brushList.erase(chkBrush); + chkBrush = brushList.erase( chkBrush ); continue; } } list::iterator eTexture; - for( eTexture=exclusionList->begin(); eTexture!=exclusionList->end(); eTexture++ ) + for ( eTexture = exclusionList->begin(); eTexture != exclusionList->end(); eTexture++ ) { - if((*chkBrush)->HasTexture((*eTexture).GetBuffer())) - { + if ( ( *chkBrush )->HasTexture( ( *eTexture ).GetBuffer() ) ) { delete *chkBrush; - chkBrush = brushList.erase(chkBrush); + chkBrush = brushList.erase( chkBrush ); break; } } - if( eTexture == exclusionList->end() ) + if ( eTexture == exclusionList->end() ) { chkBrush++; + } } } -void DEntity::ResetChecks(list* exclusionList) -{ - for(list::const_iterator resetBrush=brushList.begin(); resetBrush!=brushList.end(); resetBrush++) +void DEntity::ResetChecks( list* exclusionList ){ + for ( list::const_iterator resetBrush = brushList.begin(); resetBrush != brushList.end(); resetBrush++ ) { - (*resetBrush)->ResetChecks(exclusionList); + ( *resetBrush )->ResetChecks( exclusionList ); } } -int DEntity::FixBrushes(bool rebuild) -{ +int DEntity::FixBrushes( bool rebuild ){ g_FuncTable.m_pfnAllocateActiveBrushHandles(); int cnt = 0; - for(list::const_iterator fixBrush=brushList.begin(); fixBrush!=brushList.end(); fixBrush++) + for ( list::const_iterator fixBrush = brushList.begin(); fixBrush != brushList.end(); fixBrush++ ) { - int count = (*fixBrush)->RemoveRedundantPlanes(); - if(count) - { + int count = ( *fixBrush )->RemoveRedundantPlanes(); + if ( count ) { cnt += count; - if(rebuild) - { - g_FuncTable.m_pfnDeleteBrushHandle((*fixBrush)->QER_brush); + if ( rebuild ) { + g_FuncTable.m_pfnDeleteBrushHandle( ( *fixBrush )->QER_brush ); - (*fixBrush)->BuildInRadiant(FALSE, NULL); + ( *fixBrush )->BuildInRadiant( FALSE, NULL ); } } } @@ -438,42 +420,40 @@ int DEntity::FixBrushes(bool rebuild) return cnt; } -void DEntity::BuildInRadiant(bool allowDestruction) -{ - bool makeEntity = strcmp(m_Classname, "worldspawn") ? true : false; +void DEntity::BuildInRadiant( bool allowDestruction ){ + bool makeEntity = strcmp( m_Classname, "worldspawn" ) ? true : false; - if(makeEntity) - { + if ( makeEntity ) { entity_t* pE = (entity_t*)g_FuncTable.m_pfnCreateEntityHandle(); - epair_t* pEpS = GetNextChainItem(NULL, "classname", m_Classname); + epair_t* pEpS = GetNextChainItem( NULL, "classname", m_Classname ); epair_t* pEp = pEpS; - for(list::const_iterator buildEPair=epairList.begin(); buildEPair!=epairList.end(); buildEPair++) + for ( list::const_iterator buildEPair = epairList.begin(); buildEPair != epairList.end(); buildEPair++ ) { - pEp = GetNextChainItem(pEp, (*buildEPair)->key, (*buildEPair)->value); + pEp = GetNextChainItem( pEp, ( *buildEPair )->key, ( *buildEPair )->value ); } - g_EntityTable.m_pfnSetEntityKeyValList(pE, pEpS); + g_EntityTable.m_pfnSetEntityKeyValList( pE, pEpS ); - g_FuncTable.m_pfnCommitEntityHandleToMap(pE); + g_FuncTable.m_pfnCommitEntityHandleToMap( pE ); - for(list::const_iterator buildBrush=brushList.begin(); buildBrush!=brushList.end(); buildBrush++) - (*buildBrush)->BuildInRadiant(allowDestruction, NULL, pE); + for ( list::const_iterator buildBrush = brushList.begin(); buildBrush != brushList.end(); buildBrush++ ) + ( *buildBrush )->BuildInRadiant( allowDestruction, NULL, pE ); - for(list::const_iterator buildPatch=patchList.begin(); buildPatch!=patchList.end(); buildPatch++) - (*buildPatch)->BuildInRadiant(pE); + for ( list::const_iterator buildPatch = patchList.begin(); buildPatch != patchList.end(); buildPatch++ ) + ( *buildPatch )->BuildInRadiant( pE ); QER_Entity = pE; } else { - for(list::const_iterator buildBrush=brushList.begin(); buildBrush!=brushList.end(); buildBrush++) - (*buildBrush)->BuildInRadiant(allowDestruction, NULL); + for ( list::const_iterator buildBrush = brushList.begin(); buildBrush != brushList.end(); buildBrush++ ) + ( *buildBrush )->BuildInRadiant( allowDestruction, NULL ); - for(list::const_iterator buildPatch=patchList.begin(); buildPatch!=patchList.end(); buildPatch++) - (*buildPatch)->BuildInRadiant(); + for ( list::const_iterator buildPatch = patchList.begin(); buildPatch != patchList.end(); buildPatch++ ) + ( *buildPatch )->BuildInRadiant(); } } @@ -481,182 +461,175 @@ void DEntity::BuildInRadiant(bool allowDestruction) int DEntity::GetIDMax( void ) { int max = -1; - for(list::const_iterator cntBrush=brushList.begin(); cntBrush!=brushList.end(); cntBrush++) { - if((*cntBrush)->m_nBrushID > max) - max = (*cntBrush)->m_nBrushID; + for ( list::const_iterator cntBrush = brushList.begin(); cntBrush != brushList.end(); cntBrush++ ) { + if ( ( *cntBrush )->m_nBrushID > max ) { + max = ( *cntBrush )->m_nBrushID; + } } - return max+1; + return max + 1; } void DEntity::SetClassname( char *classname ) { m_Classname = classname; } -void DEntity::SaveToFile(FILE *pFile) -{ - fprintf(pFile, "{\n"); +void DEntity::SaveToFile( FILE *pFile ){ + fprintf( pFile, "{\n" ); - fprintf(pFile, "\"classname\" \"%s\"\n", (const char *)m_Classname); + fprintf( pFile, "\"classname\" \"%s\"\n", (const char *)m_Classname ); - for(list::const_iterator ep=epairList.begin(); ep!=epairList.end(); ep++) + for ( list::const_iterator ep = epairList.begin(); ep != epairList.end(); ep++ ) { - fprintf(pFile, "\"%s\" \"%s\"\n", (const char *)(*ep)->key, (const char *)(*ep)->value); + fprintf( pFile, "\"%s\" \"%s\"\n", (const char *)( *ep )->key, (const char *)( *ep )->value ); } - for(list::const_iterator bp=brushList.begin(); bp!=brushList.end(); bp++) + for ( list::const_iterator bp = brushList.begin(); bp != brushList.end(); bp++ ) { - (*bp)->SaveToFile(pFile); + ( *bp )->SaveToFile( pFile ); } - fprintf(pFile, "}\n"); + fprintf( pFile, "}\n" ); } -void DEntity::ClearEPairs() -{ - for(list::const_iterator deadEPair=epairList.begin(); deadEPair!=epairList.end(); deadEPair++) +void DEntity::ClearEPairs(){ + for ( list::const_iterator deadEPair = epairList.begin(); deadEPair != epairList.end(); deadEPair++ ) { - delete (*deadEPair); + delete ( *deadEPair ); } epairList.clear(); } -void DEntity::AddEPair(const char *key, const char *value) { +void DEntity::AddEPair( const char *key, const char *value ) { DEPair* newEPair; newEPair = FindEPairByKey( key ); - if(!newEPair) { + if ( !newEPair ) { newEPair = new DEPair; - newEPair->Build(key, value); - epairList.push_back(newEPair); - } else { - newEPair->Build(key, value); + newEPair->Build( key, value ); + epairList.push_back( newEPair ); + } + else { + newEPair->Build( key, value ); } } -void DEntity::LoadEPairList(epair_t *epl) -{ +void DEntity::LoadEPairList( epair_t *epl ){ epair_t* ep = epl; - while(ep) + while ( ep ) { - if(!strcmp(ep->key, "classname")) - SetClassname(ep->value); - else - AddEPair(ep->key, ep->value); + if ( !strcmp( ep->key, "classname" ) ) { + SetClassname( ep->value ); + } + else{ + AddEPair( ep->key, ep->value ); + } ep = ep->next; } } -bool DEntity::ResetTextures(const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, - int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation, bool rebuild) -{ +bool DEntity::ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, + int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation, bool rebuild ){ g_FuncTable.m_pfnDeselectAllBrushes(); g_FuncTable.m_pfnAllocateActiveBrushHandles(); bool reset = FALSE; - for(list::const_iterator resetBrush=brushList.begin(); resetBrush!=brushList.end(); resetBrush++) + for ( list::const_iterator resetBrush = brushList.begin(); resetBrush != brushList.end(); resetBrush++ ) { - bool tmp = (*resetBrush)->ResetTextures(textureName, fScale, fShift, rotation, newTextureName, - bResetTextureName, bResetScale, bResetShift, bResetRotation); + bool tmp = ( *resetBrush )->ResetTextures( textureName, fScale, fShift, rotation, newTextureName, + bResetTextureName, bResetScale, bResetShift, bResetRotation ); - if(tmp) - { + if ( tmp ) { reset = TRUE; - if(rebuild) - { - entity_t *pE = (*resetBrush)->QER_brush->owner; - g_FuncTable.m_pfnDeleteBrushHandle((*resetBrush)->QER_brush); - (*resetBrush)->BuildInRadiant(FALSE, NULL, pE->entityId == 0 ? NULL : pE); + if ( rebuild ) { + entity_t *pE = ( *resetBrush )->QER_brush->owner; + g_FuncTable.m_pfnDeleteBrushHandle( ( *resetBrush )->QER_brush ); + ( *resetBrush )->BuildInRadiant( FALSE, NULL, pE->entityId == 0 ? NULL : pE ); - if( pE->entityId == 0 ? NULL : pE ) - { - } + if ( pE->entityId == 0 ? NULL : pE ) { + } } } } - if(bResetTextureName) - { - for(list::const_iterator resetPatch=patchList.begin(); resetPatch!=patchList.end(); resetPatch++) - { - bool tmp = (*resetPatch)->ResetTextures(textureName, newTextureName); + if ( bResetTextureName ) { + for ( list::const_iterator resetPatch = patchList.begin(); resetPatch != patchList.end(); resetPatch++ ) + { + bool tmp = ( *resetPatch )->ResetTextures( textureName, newTextureName ); - if(tmp) - { - reset = TRUE; + if ( tmp ) { + reset = TRUE; - if(rebuild) - { - entity_t *pE = (*resetPatch)->QER_brush->owner; - g_FuncTable.m_pfnDeleteBrushHandle((*resetPatch)->QER_brush); - (*resetPatch)->BuildInRadiant(pE->entityId == 0 ? NULL : pE); - } - } - } - } + if ( rebuild ) { + entity_t *pE = ( *resetPatch )->QER_brush->owner; + g_FuncTable.m_pfnDeleteBrushHandle( ( *resetPatch )->QER_brush ); + ( *resetPatch )->BuildInRadiant( pE->entityId == 0 ? NULL : pE ); + } + } + } + } g_FuncTable.m_pfnReleaseActiveBrushHandles(); return reset; } -DEPair* DEntity::FindEPairByKey(const char* keyname) -{ - for(list::const_iterator ep=epairList.begin(); ep!=epairList.end(); ep++) +DEPair* DEntity::FindEPairByKey( const char* keyname ){ + for ( list::const_iterator ep = epairList.begin(); ep != epairList.end(); ep++ ) { - char* c = (*ep)->key; - if(!strcmp(c, keyname)) + char* c = ( *ep )->key; + if ( !strcmp( c, keyname ) ) { return *ep; + } } return NULL; } -void DEntity::RemoveFromRadiant() -{ +void DEntity::RemoveFromRadiant(){ g_EntityTable.m_pfnEntity_Free( (entity_t*)QER_Entity ); QER_Entity = NULL; } -void DEntity::SpawnString(const char* key, const char* defaultstring, const char** out) -{ - DEPair* pEP = FindEPairByKey(key); - if(pEP) { +void DEntity::SpawnString( const char* key, const char* defaultstring, const char** out ){ + DEPair* pEP = FindEPairByKey( key ); + if ( pEP ) { *out = pEP->value; - } else { + } + else { *out = defaultstring; } } -void DEntity::SpawnInt(const char* key, const char* defaultstring, int* out) -{ - DEPair* pEP = FindEPairByKey(key); - if(pEP) { - *out = atoi(pEP->value); - } else { - *out = atoi(defaultstring); +void DEntity::SpawnInt( const char* key, const char* defaultstring, int* out ){ + DEPair* pEP = FindEPairByKey( key ); + if ( pEP ) { + *out = atoi( pEP->value ); + } + else { + *out = atoi( defaultstring ); } } -void DEntity::SpawnFloat(const char* key, const char* defaultstring, float* out) -{ - DEPair* pEP = FindEPairByKey(key); - if(pEP) { +void DEntity::SpawnFloat( const char* key, const char* defaultstring, float* out ){ + DEPair* pEP = FindEPairByKey( key ); + if ( pEP ) { *out = static_cast< float >( atof( pEP->value ) ); - } else { - *out = static_cast< float >( atof(defaultstring) ); + } + else { + *out = static_cast< float >( atof( defaultstring ) ); } } -void DEntity::SpawnVector(const char* key, const char* defaultstring, vec_t* out) -{ - DEPair* pEP = FindEPairByKey(key); - if(pEP) { - sscanf(pEP->value, "%f %f %f", &out[0], &out[1], &out[2]); - } else { - sscanf(defaultstring, "%f %f %f", &out[0], &out[1], &out[2]); +void DEntity::SpawnVector( const char* key, const char* defaultstring, vec_t* out ){ + DEPair* pEP = FindEPairByKey( key ); + if ( pEP ) { + sscanf( pEP->value, "%f %f %f", &out[0], &out[1], &out[2] ); + } + else { + sscanf( defaultstring, "%f %f %f", &out[0], &out[1], &out[2] ); } } @@ -665,9 +638,9 @@ int DEntity::GetBrushCount( void ) { } DBrush* DEntity::FindBrushByPointer( brush_t* brush ) { - for(list::const_iterator listBrush = brushList.begin(); listBrush != brushList.end(); listBrush++) { - DBrush* pBrush = (*listBrush); - if(pBrush->QER_brush == brush) { + for ( list::const_iterator listBrush = brushList.begin(); listBrush != brushList.end(); listBrush++ ) { + DBrush* pBrush = ( *listBrush ); + if ( pBrush->QER_brush == brush ) { return pBrush; } } diff --git a/contrib/bobtoolz/DEntity.h b/contrib/bobtoolz/DEntity.h index 732703f0..bc436458 100644 --- a/contrib/bobtoolz/DEntity.h +++ b/contrib/bobtoolz/DEntity.h @@ -1,33 +1,33 @@ /* -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 + */ // DEntity.h: interface for the DEntity class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DENTITY_H__35B2C523_F0A7_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_DENTITY_H__35B2C523_F0A7_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_DENTITY_H__35B2C523_F0A7_11D4_ACF7_004095A18133__INCLUDED_ #include "DBrush.h" #include "DEPair.h" #include "DPatch.h" -#include "StdAfx.h" // Added by ClassView +#include "StdAfx.h" // Added by ClassView #if _MSC_VER > 1000 #pragma once @@ -36,80 +36,80 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA class DEntity { public: - void RemoveFromRadiant(); - entity_t* QER_Entity; - int m_nID; +void RemoveFromRadiant(); +entity_t* QER_Entity; +int m_nID; // Constrcution/Destruction - DEntity(char* classname = "worldspawn", int ID = -1); // sets classname - virtual ~DEntity(); +DEntity( char* classname = "worldspawn", int ID = -1 ); // sets classname +virtual ~DEntity(); // --------------------------------------------- // epair functions........ - void LoadEPairList(epair_t* epl); - void AddEPair(const char* key, const char* value); - void ClearEPairs(); - DEPair* FindEPairByKey(const char* keyname); +void LoadEPairList( epair_t* epl ); +void AddEPair( const char* key, const char* value ); +void ClearEPairs(); +DEPair* FindEPairByKey( const char* keyname ); // --------------------------------------------- // random functions........ - bool ResetTextures(const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation, bool rebuild); - void SaveToFile(FILE* pFile); - void SetClassname(char* classname); - int GetIDMax(); - - void BuildInRadiant(bool allowDestruction); - void ResetChecks(list* exclusionList); - void RemoveNonCheckBrushes(list* exclusionList, bool useDetail); - - DPlane* AddFaceToBrush(vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* faceData, int ID); // slow, try not to use much - int GetBrushCount( void ); - DBrush* FindBrushByPointer( brush_t* brush ); +bool ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation, bool rebuild ); +void SaveToFile( FILE* pFile ); +void SetClassname( char* classname ); +int GetIDMax(); + +void BuildInRadiant( bool allowDestruction ); +void ResetChecks( list* exclusionList ); +void RemoveNonCheckBrushes( list* exclusionList, bool useDetail ); + +DPlane* AddFaceToBrush( vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* faceData, int ID ); // slow, try not to use much +int GetBrushCount( void ); +DBrush* FindBrushByPointer( brush_t* brush ); // --------------------------------------------- // bool list functions - void SelectBrushes(bool* selectList); - bool* BuildDuplicateList(); - bool* BuildIntersectList(); +void SelectBrushes( bool* selectList ); +bool* BuildDuplicateList(); +bool* BuildIntersectList(); // --------------------------------------------- // brush operations - void ClearBrushes(); // clears brush list and frees memory for brushes +void ClearBrushes(); // clears brush list and frees memory for brushes - DBrush* GetBrushForID(int ID); - DBrush* NewBrush(int ID = -1); +DBrush* GetBrushForID( int ID ); +DBrush* NewBrush( int ID = -1 ); // --------------------------------------------- // patch operations - void ClearPatches(); +void ClearPatches(); - DPatch* NewPatch(); +DPatch* NewPatch(); // --------------------------------------------- // vars - list epairList; - list brushList; - // new patches, wahey!!! - list patchList; - Str m_Classname; +list epairList; +list brushList; +// new patches, wahey!!! +list patchList; +Str m_Classname; // --------------------------------------------- - int FixBrushes(bool rebuild); +int FixBrushes( bool rebuild ); - bool LoadFromEntity(int id, bool bLoadPatches = FALSE); - bool LoadFromEntity(entity_t* ent, bool bLoadPatches = FALSE); - void LoadSelectedBrushes(); - void LoadSelectedPatches(); +bool LoadFromEntity( int id, bool bLoadPatches = FALSE ); +bool LoadFromEntity( entity_t* ent, bool bLoadPatches = FALSE ); +void LoadSelectedBrushes(); +void LoadSelectedPatches(); - bool LoadFromPrt(char* filename); +bool LoadFromPrt( char* filename ); // --------------------------------------------- - void SpawnString(const char* key, const char* defaultstring, const char** out); - void SpawnInt(const char* key, const char* defaultstring, int* out); - void SpawnFloat(const char* key, const char* defaultstring, float* out); - void SpawnVector(const char* key, const char* defaultstring, vec_t* out); +void SpawnString( const char* key, const char* defaultstring, const char** out ); +void SpawnInt( const char* key, const char* defaultstring, int* out ); +void SpawnFloat( const char* key, const char* defaultstring, float* out ); +void SpawnVector( const char* key, const char* defaultstring, vec_t* out ); }; #endif // !defined(AFX_DENTITY_H__35B2C523_F0A7_11D4_ACF7_004095A18133__INCLUDED_) diff --git a/contrib/bobtoolz/DListener.cpp b/contrib/bobtoolz/DListener.cpp index cb7b928a..69320678 100644 --- a/contrib/bobtoolz/DListener.cpp +++ b/contrib/bobtoolz/DListener.cpp @@ -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 + */ // DListener.cpp: implementation of the DListener class. // @@ -28,66 +28,55 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DListener::DListener() -{ +DListener::DListener(){ refCount = 1; m_bHooked = FALSE; } -DListener::~DListener() -{ +DListener::~DListener(){ UnRegister(); } -void DListener::Register() -{ +void DListener::Register(){ g_MessageTable.m_pfnHookWindow( this ); m_bHooked = TRUE; } -void DListener::UnRegister() -{ - if(m_bHooked) - { +void DListener::UnRegister(){ + if ( m_bHooked ) { g_MessageTable.m_pfnUnHookWindow( this ); m_bHooked = FALSE; } } -bool DListener::OnMouseMove(guint32 nFlags, gdouble x, gdouble y) -{ - if(!parent->UpdatePath()) +bool DListener::OnMouseMove( guint32 nFlags, gdouble x, gdouble y ){ + if ( !parent->UpdatePath() ) { delete parent; + } return FALSE; } -bool DListener::OnLButtonDown(guint32 nFlags, gdouble x, gdouble y) -{ +bool DListener::OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ){ return FALSE; } -bool DListener::OnLButtonUp(guint32 nFlags, gdouble x, gdouble y) -{ +bool DListener::OnLButtonUp( guint32 nFlags, gdouble x, gdouble y ){ return FALSE; } -bool DListener::OnRButtonDown(guint32 nFlags, gdouble x, gdouble y) -{ +bool DListener::OnRButtonDown( guint32 nFlags, gdouble x, gdouble y ){ return FALSE; } -bool DListener::OnRButtonUp(guint32 nFlags, gdouble x, gdouble y) -{ +bool DListener::OnRButtonUp( guint32 nFlags, gdouble x, gdouble y ){ return FALSE; } -bool DListener::OnMButtonDown(guint32 nFlags, gdouble x, gdouble y) -{ +bool DListener::OnMButtonDown( guint32 nFlags, gdouble x, gdouble y ){ return FALSE; } -bool DListener::OnMButtonUp(guint32 nFlags, gdouble x, gdouble y) -{ +bool DListener::OnMButtonUp( guint32 nFlags, gdouble x, gdouble y ){ return FALSE; } diff --git a/contrib/bobtoolz/DListener.h b/contrib/bobtoolz/DListener.h index d2166993..076840b7 100644 --- a/contrib/bobtoolz/DListener.h +++ b/contrib/bobtoolz/DListener.h @@ -1,27 +1,27 @@ /* -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 + */ // DListener.h: interface for the DListener class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DLISTENER_H__53EBE342_F0B2_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_DLISTENER_H__53EBE342_F0B2_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_DLISTENER_H__53EBE342_F0B2_11D4_ACF7_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -30,33 +30,37 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "DBobView.h" -class DListener : public IWindowListener +class DListener : public IWindowListener { public: - DBobView* parent; - - bool OnMouseMove(guint32 nFlags, gdouble x, gdouble y); - bool OnLButtonDown(guint32 nFlags, gdouble x, gdouble y); - bool OnMButtonDown(guint32 nFlags, gdouble x, gdouble y); - bool OnRButtonDown(guint32 nFlags, gdouble x, gdouble y); - bool OnLButtonUp(guint32 nFlags, gdouble x, gdouble y); - bool OnMButtonUp(guint32 nFlags, gdouble x, gdouble y); - bool OnRButtonUp(guint32 nFlags, gdouble x, gdouble y); - bool OnKeyPressed(char *s) { return false; } - bool Paint() { return true; } - void Close() { } - - void UnRegister(); - void Register(); - DListener(); - virtual ~DListener(); - - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } +DBobView* parent; + +bool OnMouseMove( guint32 nFlags, gdouble x, gdouble y ); +bool OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ); +bool OnMButtonDown( guint32 nFlags, gdouble x, gdouble y ); +bool OnRButtonDown( guint32 nFlags, gdouble x, gdouble y ); +bool OnLButtonUp( guint32 nFlags, gdouble x, gdouble y ); +bool OnMButtonUp( guint32 nFlags, gdouble x, gdouble y ); +bool OnRButtonUp( guint32 nFlags, gdouble x, gdouble y ); +bool OnKeyPressed( char *s ) { return false; } +bool Paint() { return true; } +void Close() { } + +void UnRegister(); +void Register(); +DListener(); +virtual ~DListener(); + +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} private: - bool m_bHooked; - int refCount; +bool m_bHooked; +int refCount; }; #endif // !defined(AFX_DLISTENER_H__53EBE342_F0B2_11D4_ACF7_004095A18133__INCLUDED_) diff --git a/contrib/bobtoolz/DMap.cpp b/contrib/bobtoolz/DMap.cpp index 5d935959..3f70d5ee 100644 --- a/contrib/bobtoolz/DMap.cpp +++ b/contrib/bobtoolz/DMap.cpp @@ -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 + */ // DMap.cpp: implementation of the DMap class. // @@ -29,111 +29,107 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DMap::DMap() -{ +DMap::DMap(){ m_nNextEntity = 1; - AddEntity("worldspawn", 0); + AddEntity( "worldspawn", 0 ); } -DMap::~DMap() -{ +DMap::~DMap(){ ClearEntities(); } -DEntity* DMap::AddEntity(char *classname, int ID) -{ +DEntity* DMap::AddEntity( char *classname, int ID ){ DEntity* newEntity; - if(ID == -1) - newEntity = new DEntity(classname, m_nNextEntity++); - else - newEntity = new DEntity(classname, ID); + if ( ID == -1 ) { + newEntity = new DEntity( classname, m_nNextEntity++ ); + } + else{ + newEntity = new DEntity( classname, ID ); + } - entityList.push_back(newEntity); + entityList.push_back( newEntity ); return newEntity; } -void DMap::ClearEntities() -{ +void DMap::ClearEntities(){ m_nNextEntity = 1; - for(list::const_iterator deadEntity=entityList.begin(); deadEntity!=entityList.end(); deadEntity++) + for ( list::const_iterator deadEntity = entityList.begin(); deadEntity != entityList.end(); deadEntity++ ) delete *deadEntity; entityList.clear(); } -DEntity* DMap::GetEntityForID(int ID) -{ +DEntity* DMap::GetEntityForID( int ID ){ DEntity* findEntity = NULL; - for(list::const_iterator chkEntity=entityList.begin(); chkEntity!=entityList.end(); chkEntity++) + for ( list::const_iterator chkEntity = entityList.begin(); chkEntity != entityList.end(); chkEntity++ ) { - if((*chkEntity)->m_nID == ID) - { - findEntity = (*chkEntity); + if ( ( *chkEntity )->m_nID == ID ) { + findEntity = ( *chkEntity ); break; } } - if(!findEntity) - findEntity = AddEntity("worldspawn", ID); + if ( !findEntity ) { + findEntity = AddEntity( "worldspawn", ID ); + } return findEntity; } -DEntity* DMap::GetWorldSpawn() -{ - return GetEntityForID(0); +DEntity* DMap::GetWorldSpawn(){ + return GetEntityForID( 0 ); } -void DMap::BuildInRadiant(bool bAllowDestruction) -{ - for(list::const_iterator buildEntity=entityList.begin(); buildEntity!=entityList.end(); buildEntity++) - (*buildEntity)->BuildInRadiant(bAllowDestruction); +void DMap::BuildInRadiant( bool bAllowDestruction ){ + for ( list::const_iterator buildEntity = entityList.begin(); buildEntity != entityList.end(); buildEntity++ ) + ( *buildEntity )->BuildInRadiant( bAllowDestruction ); } -void DMap::LoadAll(bool bLoadPatches) -{ +void DMap::LoadAll( bool bLoadPatches ){ ClearEntities(); g_FuncTable.m_pfnDeselectAllBrushes(); int count = g_FuncTable.m_pfnGetEntityCount(); - for(int i = 0; i < count; i++) + for ( int i = 0; i < count; i++ ) { DEntity* loadEntity; - if(i == 0) + if ( i == 0 ) { loadEntity = GetWorldSpawn(); - else - loadEntity = AddEntity("", m_nNextEntity++); + } + else{ + loadEntity = AddEntity( "", m_nNextEntity++ ); + } - if(!loadEntity->LoadFromEntity(i, bLoadPatches)) - { + if ( !loadEntity->LoadFromEntity( i, bLoadPatches ) ) { delete loadEntity; entityList.pop_back(); } } } -int DMap::FixBrushes(bool rebuild) -{ +int DMap::FixBrushes( bool rebuild ){ int count = 0; - for(list::const_iterator fixEntity=entityList.begin(); fixEntity!=entityList.end(); fixEntity++) + for ( list::const_iterator fixEntity = entityList.begin(); fixEntity != entityList.end(); fixEntity++ ) { int cnt; - if(!stricmp("worldspawn", (*fixEntity)->m_Classname)) - cnt = (*fixEntity)->FixBrushes(rebuild); + if ( !stricmp( "worldspawn", ( *fixEntity )->m_Classname ) ) { + cnt = ( *fixEntity )->FixBrushes( rebuild ); + } else { - cnt = (*fixEntity)->FixBrushes(FALSE); + cnt = ( *fixEntity )->FixBrushes( FALSE ); - if(cnt && rebuild) - RebuildEntity(*fixEntity); + if ( cnt && rebuild ) { + RebuildEntity( *fixEntity ); + } } count += cnt; @@ -143,24 +139,24 @@ int DMap::FixBrushes(bool rebuild) } void DMap::ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, - int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation) -{ - for(list::const_iterator texEntity=entityList.begin(); texEntity!=entityList.end(); texEntity++) + int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation ){ + for ( list::const_iterator texEntity = entityList.begin(); texEntity != entityList.end(); texEntity++ ) { - if(!stricmp("worldspawn", (*texEntity)->m_Classname)) - (*texEntity)->ResetTextures(textureName, fScale, fShift, rotation, newTextureName, - bResetTextureName, bResetScale, bResetShift, bResetRotation, TRUE); + if ( !stricmp( "worldspawn", ( *texEntity )->m_Classname ) ) { + ( *texEntity )->ResetTextures( textureName, fScale, fShift, rotation, newTextureName, + bResetTextureName, bResetScale, bResetShift, bResetRotation, TRUE ); + } else { - if((*texEntity)->ResetTextures( textureName, fScale, fShift, rotation, newTextureName, - bResetTextureName, bResetScale, bResetShift, bResetRotation, FALSE)) - RebuildEntity(*texEntity); + if ( ( *texEntity )->ResetTextures( textureName, fScale, fShift, rotation, newTextureName, + bResetTextureName, bResetScale, bResetShift, bResetRotation, FALSE ) ) { + RebuildEntity( *texEntity ); + } } } } -void DMap::RebuildEntity(DEntity *ent) -{ +void DMap::RebuildEntity( DEntity *ent ){ ent->RemoveFromRadiant(); - ent->BuildInRadiant(FALSE); + ent->BuildInRadiant( FALSE ); } diff --git a/contrib/bobtoolz/DMap.h b/contrib/bobtoolz/DMap.h index 60f58543..f04f2c85 100644 --- a/contrib/bobtoolz/DMap.h +++ b/contrib/bobtoolz/DMap.h @@ -1,27 +1,27 @@ /* -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 + */ // DMap.h: interface for the DMap class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DMAP_H__ACAE597A_D26D_49AD_AA69_EDE743DB54FA__INCLUDED_) +#if !defined( AFX_DMAP_H__ACAE597A_D26D_49AD_AA69_EDE743DB54FA__INCLUDED_ ) #define AFX_DMAP_H__ACAE597A_D26D_49AD_AA69_EDE743DB54FA__INCLUDED_ #include "DEntity.h" @@ -33,24 +33,24 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA class DMap { public: - static void RebuildEntity(DEntity* ent); +static void RebuildEntity( DEntity* ent ); - void ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation); - void LoadAll(bool bLoadPatches = FALSE); - void BuildInRadiant(bool bAllowDestruction); - int m_nNextEntity; - DEntity* GetWorldSpawn(); - void ClearEntities(); +void ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation ); +void LoadAll( bool bLoadPatches = FALSE ); +void BuildInRadiant( bool bAllowDestruction ); +int m_nNextEntity; +DEntity* GetWorldSpawn(); +void ClearEntities(); - DEntity* DMap::GetEntityForID(int ID); - DEntity* AddEntity(char* classname = "worldspawn", int ID = -1); +DEntity* DMap::GetEntityForID( int ID ); +DEntity* AddEntity( char* classname = "worldspawn", int ID = -1 ); - list entityList; +list entityList; - DMap(); - virtual ~DMap(); +DMap(); +virtual ~DMap(); - int FixBrushes(bool rebuild); +int FixBrushes( bool rebuild ); }; #endif // !defined(AFX_DMAP_H__ACAE597A_D26D_49AD_AA69_EDE743DB54FA__INCLUDED_) diff --git a/contrib/bobtoolz/DPatch.cpp b/contrib/bobtoolz/DPatch.cpp index 36968b0a..aa0d52b7 100644 --- a/contrib/bobtoolz/DPatch.cpp +++ b/contrib/bobtoolz/DPatch.cpp @@ -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 + */ // DPatch.cpp: implementation of the DPatch class. // @@ -36,144 +36,138 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // problem is, you cant put patches into entities as yet :( // -DPatch::DPatch() -{ +DPatch::DPatch(){ width = MIN_PATCH_WIDTH; height = MIN_PATCH_HEIGHT; QER_patch = NULL; QER_brush = NULL; } -DPatch::~DPatch() -{ +DPatch::~DPatch(){ } -void DPatch::SetTexture(const char *textureName) -{ - strcpy(texture, textureName); +void DPatch::SetTexture( const char *textureName ){ + strcpy( texture, textureName ); } -void CopyDrawVert(const drawVert_t* in, drawVert_t* out) -{ +void CopyDrawVert( const drawVert_t* in, drawVert_t* out ){ out->lightmap[0] = in->lightmap[0]; out->lightmap[1] = in->lightmap[1]; out->st[0] = in->st[0]; out->st[1] = in->st[1]; - VectorCopy(in->normal, out->normal); - VectorCopy(in->xyz, out->xyz); + VectorCopy( in->normal, out->normal ); + VectorCopy( in->xyz, out->xyz ); } -void DPatch::BuildInRadiant(void* entity) -{ +void DPatch::BuildInRadiant( void* entity ){ int nIndex = g_FuncTable.m_pfnCreatePatchHandle(); - //$ FIXME: m_pfnGetPatchHandle - patchMesh_t* pm = g_FuncTable.m_pfnGetPatchData(nIndex); + //$ FIXME: m_pfnGetPatchHandle + patchMesh_t* pm = g_FuncTable.m_pfnGetPatchData( nIndex ); pm->height = height; pm->width = width; - for(int x = 0; x < width; x++) - for(int y = 0; y < height; y++) - CopyDrawVert(&points[x][y], &pm->ctrl[x][y]); + for ( int x = 0; x < width; x++ ) + for ( int y = 0; y < height; y++ ) + CopyDrawVert( &points[x][y], &pm->ctrl[x][y] ); QER_patch = pm; /* if(entity) - { -// strcpy(pm->d_texture->name, texture); + { + // strcpy(pm->d_texture->name, texture); - brush_t* brush = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); - brush->patchBrush = TRUE; - brush->pPatch = pm; + brush_t* brush = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); + brush->patchBrush = TRUE; + brush->pPatch = pm; - pm->pSymbiot = brush; - pm->bSelected = false; - pm->bOverlay = false; // bleh, f*cks up, just have to wait for a proper function - pm->bDirty = true; // or get my own patch out.... - pm->nListID = -1; + pm->pSymbiot = brush; + pm->bSelected = false; + pm->bOverlay = false; // bleh, f*cks up, just have to wait for a proper function + pm->bDirty = true; // or get my own patch out.... + pm->nListID = -1; - g_FuncTable.m_pfnCommitBrushHandleToEntity(brush, entity); - } - else*/ // patch to entity just plain dont work atm + g_FuncTable.m_pfnCommitBrushHandleToEntity(brush, entity); + } + else*/ // patch to entity just plain dont work atm - if(entity) - g_FuncTable.m_pfnCommitPatchHandleToEntity(nIndex, pm, texture, entity); - else - g_FuncTable.m_pfnCommitPatchHandleToMap(nIndex, pm, texture); + if ( entity ) { + g_FuncTable.m_pfnCommitPatchHandleToEntity( nIndex, pm, texture, entity ); + } + else{ + g_FuncTable.m_pfnCommitPatchHandleToMap( nIndex, pm, texture ); + } QER_brush = pm->pSymbiot; } -void DPatch::LoadFromBrush_t(brush_t* brush) -{ +void DPatch::LoadFromBrush_t( brush_t* brush ){ QER_brush = brush; QER_patch = brush->pPatch; - SetTexture(QER_patch->pShader->getName()); + SetTexture( QER_patch->pShader->getName() ); - for(int x = 0; x < QER_patch->width; x++) - for(int y = 0; y < QER_patch->height; y++) - CopyDrawVert(&QER_patch->ctrl[x][y], &points[x][y]); + for ( int x = 0; x < QER_patch->width; x++ ) + for ( int y = 0; y < QER_patch->height; y++ ) + CopyDrawVert( &QER_patch->ctrl[x][y], &points[x][y] ); width = QER_patch->width; height = QER_patch->height; } -void DPatch::RemoveFromRadiant() -{ - if(QER_brush) - g_FuncTable.m_pfnDeleteBrushHandle(QER_brush); +void DPatch::RemoveFromRadiant(){ + if ( QER_brush ) { + g_FuncTable.m_pfnDeleteBrushHandle( QER_brush ); + } } -bool DPatch::ResetTextures(const char *oldTextureName, const char *newTextureName) -{ - if( !oldTextureName || !strcmp(texture, oldTextureName)) - { - strcpy(texture, newTextureName); +bool DPatch::ResetTextures( const char *oldTextureName, const char *newTextureName ){ + if ( !oldTextureName || !strcmp( texture, oldTextureName ) ) { + strcpy( texture, newTextureName ); return TRUE; } return FALSE; } -void Build1dArray(vec3_t* array, drawVert_t points[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT], - int startX, int startY, int number, bool horizontal, bool inverse) -{ +void Build1dArray( vec3_t* array, drawVert_t points[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT], + int startX, int startY, int number, bool horizontal, bool inverse ){ int x = startX, y = startY, i, step; - if(inverse) + if ( inverse ) { step = -1; - else + } + else{ step = 1; + } - for(i = 0; i < number; i++) + for ( i = 0; i < number; i++ ) { - VectorCopy(points[x][y].xyz, array[i]); + VectorCopy( points[x][y].xyz, array[i] ); - if(horizontal) - x+=step; - else - y+=step; + if ( horizontal ) { + x += step; + } + else{ + y += step; + } } } -void Print1dArray(vec3_t* array, int size) -{ - for(int i = 0; i < size; i++) - Sys_Printf("(%.0f %.0f %.0f)\t", array[i][0], array[i][1], array[i][2]); - Sys_Printf("\n"); +void Print1dArray( vec3_t* array, int size ){ + for ( int i = 0; i < size; i++ ) + Sys_Printf( "(%.0f %.0f %.0f)\t", array[i][0], array[i][1], array[i][2] ); + Sys_Printf( "\n" ); } -bool Compare1dArrays(vec3_t* a1, vec3_t* a2, int size) -{ +bool Compare1dArrays( vec3_t* a1, vec3_t* a2, int size ){ int i; bool equal = true; - for(i = 0; i < size; i++) + for ( i = 0; i < size; i++ ) { - if(!VectorCompare(a1[i], a2[size-i-1])) - { + if ( !VectorCompare( a1[i], a2[size - i - 1] ) ) { equal = false; break; } @@ -181,8 +175,7 @@ bool Compare1dArrays(vec3_t* a1, vec3_t* a2, int size) return equal; } -patch_merge_t DPatch::IsMergable(DPatch *other) -{ +patch_merge_t DPatch::IsMergable( DPatch *other ){ int i, j; vec3_t p1Array[4][MAX_PATCH_HEIGHT]; vec3_t p2Array[4][MAX_PATCH_HEIGHT]; @@ -192,15 +185,15 @@ patch_merge_t DPatch::IsMergable(DPatch *other) patch_merge_t merge_info; - Build1dArray(p1Array[0], this->points, 0, 0, this->width, true, false); - Build1dArray(p1Array[1], this->points, this->width-1, 0, this->height, false, false); - Build1dArray(p1Array[2], this->points, this->width-1, this->height-1, this->width, true, true); - Build1dArray(p1Array[3], this->points, 0, this->height-1, this->height, false, true); + Build1dArray( p1Array[0], this->points, 0, 0, this->width, true, false ); + Build1dArray( p1Array[1], this->points, this->width - 1, 0, this->height, false, false ); + Build1dArray( p1Array[2], this->points, this->width - 1, this->height - 1, this->width, true, true ); + Build1dArray( p1Array[3], this->points, 0, this->height - 1, this->height, false, true ); - Build1dArray(p2Array[0], other->points, 0, 0, other->width, true, false); - Build1dArray(p2Array[1], other->points, other->width-1, 0, other->height, false, false); - Build1dArray(p2Array[2], other->points, other->width-1, other->height-1, other->width, true, true); - Build1dArray(p2Array[3], other->points, 0, other->height-1, other->height, false, true); + Build1dArray( p2Array[0], other->points, 0, 0, other->width, true, false ); + Build1dArray( p2Array[1], other->points, other->width - 1, 0, other->height, false, false ); + Build1dArray( p2Array[2], other->points, other->width - 1, other->height - 1, other->width, true, true ); + Build1dArray( p2Array[3], other->points, 0, other->height - 1, other->height, false, true ); p1ArraySizes[0] = this->width; p1ArraySizes[1] = this->height; @@ -212,14 +205,12 @@ patch_merge_t DPatch::IsMergable(DPatch *other) p2ArraySizes[2] = other->width; p2ArraySizes[3] = other->height; - for(i = 0; i < 4; i++) + for ( i = 0; i < 4; i++ ) { - for(j = 0; j < 4; j++) + for ( j = 0; j < 4; j++ ) { - if(p1ArraySizes[i] == p2ArraySizes[j]) - { - if(Compare1dArrays(p1Array[i], p2Array[j], p1ArraySizes[i])) - { + if ( p1ArraySizes[i] == p2ArraySizes[j] ) { + if ( Compare1dArrays( p1Array[i], p2Array[j], p1ArraySizes[i] ) ) { merge_info.pos1 = i; merge_info.pos2 = j; merge_info.mergable = true; @@ -228,117 +219,114 @@ patch_merge_t DPatch::IsMergable(DPatch *other) } } } - + merge_info.mergable = false; return merge_info; } -DPatch* DPatch::MergePatches(patch_merge_t merge_info, DPatch *p1, DPatch *p2) -{ - while(merge_info.pos1 != 2) +DPatch* DPatch::MergePatches( patch_merge_t merge_info, DPatch *p1, DPatch *p2 ){ + while ( merge_info.pos1 != 2 ) { p1->Transpose(); merge_info.pos1--; - if(merge_info.pos1 < 0) + if ( merge_info.pos1 < 0 ) { merge_info.pos1 += 4; + } } - while(merge_info.pos2 != 0) + while ( merge_info.pos2 != 0 ) { p2->Transpose(); merge_info.pos2--; - if(merge_info.pos2 < 0) + if ( merge_info.pos2 < 0 ) { merge_info.pos2 += 3; + } } int newHeight = p1->height + p2->height - 1; - if(newHeight > MAX_PATCH_HEIGHT) + if ( newHeight > MAX_PATCH_HEIGHT ) { return NULL; + } DPatch* newPatch = new DPatch(); - newPatch->height = newHeight; - newPatch->width = p1->width; - newPatch->SetTexture(p1->texture); + newPatch->height = newHeight; + newPatch->width = p1->width; + newPatch->SetTexture( p1->texture ); int y = 0; int i; - for(i = 0; i < p1->height; i++, y++) - for(int x = 0; x < p1->width; x++) - memcpy(&newPatch->points[x][y], &p1->points[x][i], sizeof(drawVert_t)); + for ( i = 0; i < p1->height; i++, y++ ) + for ( int x = 0; x < p1->width; x++ ) + memcpy( &newPatch->points[x][y], &p1->points[x][i], sizeof( drawVert_t ) ); - for(i = 1; i < p2->height; i++, y++) - for(int x = 0; x < p2->width; x++) - memcpy(&newPatch->points[x][y], &p2->points[x][i], sizeof(drawVert_t)); + for ( i = 1; i < p2->height; i++, y++ ) + for ( int x = 0; x < p2->width; x++ ) + memcpy( &newPatch->points[x][y], &p2->points[x][i], sizeof( drawVert_t ) ); // newPatch->Invert(); return newPatch; } -void DPatch::Invert() -{ +void DPatch::Invert(){ drawVert_t vertTemp; int i, j; - for(i = 0 ; i < width ; i++ ) + for ( i = 0 ; i < width ; i++ ) { - for(j = 0; j < height / 2; j++) + for ( j = 0; j < height / 2; j++ ) { - memcpy(&vertTemp, &points[i][height - 1- j], sizeof (drawVert_t)); - memcpy(&points[i][height - 1 - j], &points[i][j], sizeof(drawVert_t)); - memcpy(&points[i][j], &vertTemp, sizeof(drawVert_t)); + memcpy( &vertTemp, &points[i][height - 1 - j], sizeof( drawVert_t ) ); + memcpy( &points[i][height - 1 - j], &points[i][j], sizeof( drawVert_t ) ); + memcpy( &points[i][j], &vertTemp, sizeof( drawVert_t ) ); } } } -void DPatch::Transpose() -{ - int i, j, w; +void DPatch::Transpose(){ + int i, j, w; drawVert_t dv; - if ( width > height ) - { - for ( i = 0 ; i < height ; i++ ) + if ( width > height ) { + for ( i = 0 ; i < height ; i++ ) { - for ( j = i + 1 ; j < width ; j++ ) + for ( j = i + 1 ; j < width ; j++ ) { - if ( j < height ) - { + if ( j < height ) { // swap the value - memcpy(&dv, &points[j][i], sizeof(drawVert_t)); - memcpy(&points[j][i], &points[i][j], sizeof(drawVert_t)); - memcpy(&points[i][j], &dv, sizeof(drawVert_t)); - } - else + memcpy( &dv, &points[j][i], sizeof( drawVert_t ) ); + memcpy( &points[j][i], &points[i][j], sizeof( drawVert_t ) ); + memcpy( &points[i][j], &dv, sizeof( drawVert_t ) ); + } + else { - // just copy - memcpy(&points[i][j], &points[j][i], sizeof(drawVert_t)); - } - } - } - } - else + // just copy + memcpy( &points[i][j], &points[j][i], sizeof( drawVert_t ) ); + } + } + } + } + else { - for ( i = 0 ; i < width ; i++ ) - { - for ( j = i + 1 ; j < height ; j++ ) + for ( i = 0 ; i < width ; i++ ) + { + for ( j = i + 1 ; j < height ; j++ ) { - if ( j < width ) - { + if ( j < width ) { // swap the value - memcpy(&dv, &points[i][j], sizeof(drawVert_t)); - memcpy(&points[i][j], &points[j][i], sizeof(drawVert_t)); - memcpy(&points[j][i], &dv, sizeof(drawVert_t)); - } - else + memcpy( &dv, &points[i][j], sizeof( drawVert_t ) ); + memcpy( &points[i][j], &points[j][i], sizeof( drawVert_t ) ); + memcpy( &points[j][i], &dv, sizeof( drawVert_t ) ); + } + else { - // just copy - memcpy(&points[j][i], &points[i][j], sizeof(drawVert_t)); - } - } - } - } + // just copy + memcpy( &points[j][i], &points[i][j], sizeof( drawVert_t ) ); + } + } + } + } w = width; width = height; @@ -347,66 +335,62 @@ void DPatch::Transpose() Invert(); } -list DPatch::Split(bool rows, bool cols) -{ +list DPatch::Split( bool rows, bool cols ){ list patchList; int i; int x, y; - if(rows && height >= 5) - { - for(i = 0; i < (height-1)/2; i++) + if ( rows && height >= 5 ) { + for ( i = 0; i < ( height - 1 ) / 2; i++ ) { DPatch p; p.width = width; p.height = 3; - p.SetTexture(texture); + p.SetTexture( texture ); - for(y = 0; y < 3; y++) + for ( y = 0; y < 3; y++ ) { - for(x = 0; x < p.width; x++) + for ( x = 0; x < p.width; x++ ) { - memcpy(&p.points[x][y], &points[x][(i*2)+y], sizeof(drawVert_t)); + memcpy( &p.points[x][y], &points[x][( i * 2 ) + y], sizeof( drawVert_t ) ); } } - patchList.push_back(p); + patchList.push_back( p ); } - if(cols && width >= 5) - { + if ( cols && width >= 5 ) { list patchList2; - for(list::iterator patches = patchList.begin(); patches != patchList.end(); patches++) + for ( list::iterator patches = patchList.begin(); patches != patchList.end(); patches++ ) { - list patchList3 = (*patches).Split(false, true); - - for(list::iterator patches2 = patchList3.begin(); patches2 != patchList3.end(); patches2++) - patchList2.push_front(*patches2); + list patchList3 = ( *patches ).Split( false, true ); + + for ( list::iterator patches2 = patchList3.begin(); patches2 != patchList3.end(); patches2++ ) + patchList2.push_front( *patches2 ); } return patchList2; } } - else if(cols && width >= 5) - { - for(i = 0; i < (width-1)/2; i++) + else if ( cols && width >= 5 ) { + for ( i = 0; i < ( width - 1 ) / 2; i++ ) { DPatch p; p.height = height; p.width = 3; - p.SetTexture(texture); + p.SetTexture( texture ); - for(x = 0; x < 3; x++) + for ( x = 0; x < 3; x++ ) { - for(y = 0; y < p.height; y++) + for ( y = 0; y < p.height; y++ ) { - memcpy(&p.points[x][y], &points[(i*2)+x][y], sizeof(drawVert_t)); + memcpy( &p.points[x][y], &points[( i * 2 ) + x][y], sizeof( drawVert_t ) ); } } - patchList.push_back(p); + patchList.push_back( p ); } } diff --git a/contrib/bobtoolz/DPatch.h b/contrib/bobtoolz/DPatch.h index 6bdf8e60..0cb80cb3 100644 --- a/contrib/bobtoolz/DPatch.h +++ b/contrib/bobtoolz/DPatch.h @@ -1,61 +1,61 @@ /* -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 + */ // DPatch.h: interface for the DPatch class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DPATCH_H__26C6B083_CE5B_420B_836B_1DDA733C04CE__INCLUDED_) +#if !defined( AFX_DPATCH_H__26C6B083_CE5B_420B_836B_1DDA733C04CE__INCLUDED_ ) #define AFX_DPATCH_H__26C6B083_CE5B_420B_836B_1DDA733C04CE__INCLUDED_ -#include "StdAfx.h" // Added by ClassView +#include "StdAfx.h" // Added by ClassView #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 typedef struct -{ +{ bool mergable; int pos1; int pos2; } patch_merge_t; -class DPatch +class DPatch { public: - list Split(bool rows, bool cols); - void Transpose(); - void Invert(); - DPatch* MergePatches(patch_merge_t merge_info, DPatch* p1, DPatch* p2); - patch_merge_t IsMergable(DPatch* other); - bool ResetTextures(const char *oldTextureName, const char *newTextureName); - void RemoveFromRadiant(void); - brush_t* QER_brush; - void LoadFromBrush_t(brush_t* brush); - patchMesh_t* QER_patch; - void BuildInRadiant(void* entity = NULL); - void SetTexture(const char* textureName); - char texture[256]; - int width, height; - drawVert_t points[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT]; - DPatch(); - virtual ~DPatch(); +list Split( bool rows, bool cols ); +void Transpose(); +void Invert(); +DPatch* MergePatches( patch_merge_t merge_info, DPatch* p1, DPatch* p2 ); +patch_merge_t IsMergable( DPatch* other ); +bool ResetTextures( const char *oldTextureName, const char *newTextureName ); +void RemoveFromRadiant( void ); +brush_t* QER_brush; +void LoadFromBrush_t( brush_t* brush ); +patchMesh_t* QER_patch; +void BuildInRadiant( void* entity = NULL ); +void SetTexture( const char* textureName ); +char texture[256]; +int width, height; +drawVert_t points[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT]; +DPatch(); +virtual ~DPatch(); }; diff --git a/contrib/bobtoolz/DPlane.cpp b/contrib/bobtoolz/DPlane.cpp index f11241ec..99ad1373 100644 --- a/contrib/bobtoolz/DPlane.cpp +++ b/contrib/bobtoolz/DPlane.cpp @@ -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 + */ // DPlane.cpp: implementation of the DPlane class. // @@ -30,28 +30,29 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DPlane::DPlane(vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* texData) -{ +DPlane::DPlane( vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* texData ){ MakeNormal( va, vb, vc, normal ); - if(VectorNormalize(normal, normal) == 0) // normalizes and returns length - Sys_ERROR("DPlane::DPlane: Bad Normal.\n"); + if ( VectorNormalize( normal, normal ) == 0 ) { // normalizes and returns length + Sys_ERROR( "DPlane::DPlane: Bad Normal.\n" ); + } - _d = (normal[0]*va[0]) + (normal[1]*va[1]) + (normal[2]*va[2]); + _d = ( normal[0] * va[0] ) + ( normal[1] * va[1] ) + ( normal[2] * va[2] ); - VectorCopy(va, points[0]); - VectorCopy(vb, points[1]); - VectorCopy(vc, points[2]); + VectorCopy( va, points[0] ); + VectorCopy( vb, points[1] ); + VectorCopy( vc, points[2] ); m_bChkOk = TRUE; - if(texData) - memcpy(&texInfo, texData, sizeof(_QERFaceData)); - else - FillDefaultTexture(&texInfo, points[0], points[1], points[2], "textures/common/caulk"); + if ( texData ) { + memcpy( &texInfo, texData, sizeof( _QERFaceData ) ); + } + else{ + FillDefaultTexture( &texInfo, points[0], points[1], points[2], "textures/common/caulk" ); + } } -DPlane::~DPlane() -{ +DPlane::~DPlane(){ } @@ -59,198 +60,197 @@ DPlane::~DPlane() // Implementation ////////////////////////////////////////////////////////////////////// -vec_t DPlane::DistanceToPoint(vec3_t pnt) -{ +vec_t DPlane::DistanceToPoint( vec3_t pnt ){ vec3_t tmp; - VectorSubtract(pnt, points[0], tmp); - return DotProduct(tmp, normal); + VectorSubtract( pnt, points[0], tmp ); + return DotProduct( tmp, normal ); } -bool DPlane::PlaneIntersection(DPlane *pl1, DPlane *pl2, vec3_t out) -{ +bool DPlane::PlaneIntersection( DPlane *pl1, DPlane *pl2, vec3_t out ){ float a1, a2, a3; float b1, b2, b3; float c1, c2, c3; - - a1 = normal[0]; a2 = normal[1]; a3 = normal[2]; - b1 = pl1->normal[0]; b2 = pl1->normal[1]; b3 = pl1->normal[2]; - c1 = pl2->normal[0]; c2 = pl2->normal[1]; c3 = pl2->normal[2]; - float d = Determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3); + a1 = normal[0]; a2 = normal[1]; a3 = normal[2]; + b1 = pl1->normal[0]; b2 = pl1->normal[1]; b3 = pl1->normal[2]; + c1 = pl2->normal[0]; c2 = pl2->normal[1]; c3 = pl2->normal[2]; + + float d = Determinant3x3( a1, a2, a3, b1, b2, b3, c1, c2, c3 ); - if(d == 0) + if ( d == 0 ) { return FALSE; - + } + float v1 = _d; float v2 = pl1->_d; float v3 = pl2->_d; - float d1 = Determinant3x3(v1, a2, a3, v2, b2, b3, v3, c2, c3); - float d2 = Determinant3x3(a1, v1, a3, b1, v2, b3, c1, v3, c3); - float d3 = Determinant3x3(a1, a2, v1, b1, b2, v2, c1, c2, v3); + float d1 = Determinant3x3( v1, a2, a3, v2, b2, b3, v3, c2, c3 ); + float d2 = Determinant3x3( a1, v1, a3, b1, v2, b3, c1, v3, c3 ); + float d3 = Determinant3x3( a1, a2, v1, b1, b2, v2, c1, c2, v3 ); - out[0] = d1/d; - out[1] = d2/d; - out[2] = d3/d; + out[0] = d1 / d; + out[1] = d2 / d; + out[2] = d3 / d; return TRUE; } -bool DPlane::IsRedundant(list& pointList) -{ +bool DPlane::IsRedundant( list& pointList ){ int cnt = 0; //list::const_iterator point=pointList.begin(); - for(list::const_iterator point=pointList.begin(); point!=pointList.end(); point++) + for ( list::const_iterator point = pointList.begin(); point != pointList.end(); point++ ) { - if(fabs(DistanceToPoint((*point)->_pnt)) < MAX_ROUND_ERROR) - cnt++; + if ( fabs( DistanceToPoint( ( *point )->_pnt ) ) < MAX_ROUND_ERROR ) { + cnt++; + } - if(cnt == 3) - return FALSE; + if ( cnt == 3 ) { + return FALSE; + } } return TRUE; } -bool DPlane::operator == (DPlane& other) -{ +bool DPlane::operator ==( DPlane& other ){ vec3_t chk; - VectorSubtract(other.normal, normal, chk); - if(fabs(VectorLength(chk)) > MAX_ROUND_ERROR) + VectorSubtract( other.normal, normal, chk ); + if ( fabs( VectorLength( chk ) ) > MAX_ROUND_ERROR ) { return FALSE; + } - if(fabs(other._d - _d) > MAX_ROUND_ERROR) + if ( fabs( other._d - _d ) > MAX_ROUND_ERROR ) { return FALSE; + } return TRUE; } -bool DPlane::operator != (DPlane& other) -{ +bool DPlane::operator !=( DPlane& other ){ vec3_t chk; - VectorAdd(other.normal, normal, chk); - if(fabs(VectorLength(chk)) > MAX_ROUND_ERROR) + VectorAdd( other.normal, normal, chk ); + if ( fabs( VectorLength( chk ) ) > MAX_ROUND_ERROR ) { return FALSE; + } return TRUE; } -DWinding* DPlane::BaseWindingForPlane() -{ - int i, x; - vec_t max, v; - vec3_t org, vright, vup; - +DWinding* DPlane::BaseWindingForPlane(){ + int i, x; + vec_t max, v; + vec3_t org, vright, vup; + // find the major axis max = -131072; x = -1; - for (i=0 ; i<3; i++) + for ( i = 0 ; i < 3; i++ ) { - v = (float)fabs(normal[i]); - if (v > max) - { + v = (float)fabs( normal[i] ); + if ( v > max ) { x = i; max = v; } } - if (x==-1) - Sys_Printf ("BaseWindingForPlane: no axis found"); - - VectorCopy (vec3_origin, vup); - switch (x) + if ( x == -1 ) { + Sys_Printf( "BaseWindingForPlane: no axis found" ); + } + + VectorCopy( vec3_origin, vup ); + switch ( x ) { case 0: case 1: vup[2] = 1; - break; + break; case 2: vup[0] = 1; - break; + break; } - v = DotProduct (vup, normal); - VectorMA (vup, -v, normal, vup); - VectorNormalize (vup, vup); - - VectorScale (normal, _d, org); - - CrossProduct (vup, normal, vright); - - VectorScale (vup, 131072, vup); - VectorScale (vright, 131072, vright); + v = DotProduct( vup, normal ); + VectorMA( vup, -v, normal, vup ); + VectorNormalize( vup, vup ); + + VectorScale( normal, _d, org ); + + CrossProduct( vup, normal, vright ); + + VectorScale( vup, 131072, vup ); + VectorScale( vright, 131072, vright ); // project a really big axis aligned box onto the plane DWinding* w = new DWinding; - w->AllocWinding(4); - - VectorSubtract (org, vright, w->p[0]); - VectorAdd (w->p[0], vup, w->p[0]); - - VectorAdd (org, vright, w->p[1]); - VectorAdd (w->p[1], vup, w->p[1]); - - VectorAdd (org, vright, w->p[2]); - VectorSubtract (w->p[2], vup, w->p[2]); - - VectorSubtract (org, vright, w->p[3]); - VectorSubtract (w->p[3], vup, w->p[3]); - - return w; + w->AllocWinding( 4 ); + + VectorSubtract( org, vright, w->p[0] ); + VectorAdd( w->p[0], vup, w->p[0] ); + + VectorAdd( org, vright, w->p[1] ); + VectorAdd( w->p[1], vup, w->p[1] ); + + VectorAdd( org, vright, w->p[2] ); + VectorSubtract( w->p[2], vup, w->p[2] ); + + VectorSubtract( org, vright, w->p[3] ); + VectorSubtract( w->p[3], vup, w->p[3] ); + + return w; } -void DPlane::Rebuild() -{ +void DPlane::Rebuild(){ vec3_t v1, v2; - VectorSubtract(points[0], points[1], v1); - VectorSubtract(points[2], points[1], v2); - CrossProduct(v1, v2, normal); + VectorSubtract( points[0], points[1], v1 ); + VectorSubtract( points[2], points[1], v2 ); + CrossProduct( v1, v2, normal ); - if(VectorNormalize(normal, normal) == 0) // normalizes and returns length - Sys_ERROR("DPlane::Rebuild: Bad Normal.\n"); + if ( VectorNormalize( normal, normal ) == 0 ) { // normalizes and returns length + Sys_ERROR( "DPlane::Rebuild: Bad Normal.\n" ); + } - _d = (normal[0]*points[0][0]) + (normal[1]*points[0][1]) + (normal[2]*points[0][2]); + _d = ( normal[0] * points[0][0] ) + ( normal[1] * points[0][1] ) + ( normal[2] * points[0][2] ); - VectorCopy(points[0], texInfo.m_v1); - VectorCopy(points[1], texInfo.m_v2); - VectorCopy(points[2], texInfo.m_v3); + VectorCopy( points[0], texInfo.m_v1 ); + VectorCopy( points[1], texInfo.m_v2 ); + VectorCopy( points[2], texInfo.m_v3 ); } -bool DPlane::AddToBrush_t(brush_t *brush) -{ - if(m_bChkOk || !strcmp(texInfo.m_TextureName, "textures/common/caulk")) - { - g_FuncTable.m_pfnAddFaceData(brush, &texInfo); +bool DPlane::AddToBrush_t( brush_t *brush ){ + if ( m_bChkOk || !strcmp( texInfo.m_TextureName, "textures/common/caulk" ) ) { + g_FuncTable.m_pfnAddFaceData( brush, &texInfo ); return FALSE; } - strcpy(texInfo.m_TextureName, "textures/common/caulk"); - g_FuncTable.m_pfnAddFaceData(brush, &texInfo); + strcpy( texInfo.m_TextureName, "textures/common/caulk" ); + g_FuncTable.m_pfnAddFaceData( brush, &texInfo ); return TRUE; } void DPlane::ScaleTexture() { } -DPlane::DPlane(vec3_t va, vec3_t vb, vec3_t vc, const char* textureName, bool bDetail) -{ +DPlane::DPlane( vec3_t va, vec3_t vb, vec3_t vc, const char* textureName, bool bDetail ){ vec3_t v1, v2; - VectorSubtract(va, vb, v1); - VectorSubtract(vc, vb, v2); - CrossProduct(v1, v2, normal); + VectorSubtract( va, vb, v1 ); + VectorSubtract( vc, vb, v2 ); + CrossProduct( v1, v2, normal ); - if(VectorNormalize(normal, normal) == 0) // normalizes and returns length - Sys_ERROR("DPlane::DPlane: Bad Normal.\n"); + if ( VectorNormalize( normal, normal ) == 0 ) { // normalizes and returns length + Sys_ERROR( "DPlane::DPlane: Bad Normal.\n" ); + } - _d = (normal[0]*va[0]) + (normal[1]*va[1]) + (normal[2]*va[2]); + _d = ( normal[0] * va[0] ) + ( normal[1] * va[1] ) + ( normal[2] * va[2] ); - VectorCopy(va, points[0]); - VectorCopy(vb, points[1]); - VectorCopy(vc, points[2]); + VectorCopy( va, points[0] ); + VectorCopy( vb, points[1] ); + VectorCopy( vc, points[2] ); m_bChkOk = TRUE; - FillDefaultTexture(&texInfo, points[0], points[1], points[2], textureName); - if(bDetail) + FillDefaultTexture( &texInfo, points[0], points[1], points[2], textureName ); + if ( bDetail ) { texInfo.m_nContents |= FACE_DETAIL; + } } diff --git a/contrib/bobtoolz/DPlane.h b/contrib/bobtoolz/DPlane.h index f1a84319..ee8fc54c 100644 --- a/contrib/bobtoolz/DPlane.h +++ b/contrib/bobtoolz/DPlane.h @@ -1,27 +1,27 @@ /* -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 + */ // DPlane.h: interface for the DPlane class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DPLANE_H__FC37C021_F0A1_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_DPLANE_H__FC37C021_F0A1_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_DPLANE_H__FC37C021_F0A1_11D4_ACF7_004095A18133__INCLUDED_ #include "DPoint.h" @@ -34,33 +34,33 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA class DWinding; -class DPlane +class DPlane { public: - DPlane(vec3_t va, vec3_t vb, vec3_t vc, const char* textureName, bool bDetail); - void ScaleTexture(); - DWinding* BaseWindingForPlane(); +DPlane( vec3_t va, vec3_t vb, vec3_t vc, const char* textureName, bool bDetail ); +void ScaleTexture(); +DWinding* BaseWindingForPlane(); - void Rebuild(); +void Rebuild(); - bool AddToBrush_t(brush_t *brush); - bool operator != (DPlane& other); - bool operator == (DPlane& other); +bool AddToBrush_t( brush_t *brush ); +bool operator !=( DPlane& other ); +bool operator ==( DPlane& other ); - bool IsRedundant(list& pointList); - bool PlaneIntersection(DPlane* pl1, DPlane* pl2, vec3_t out);; +bool IsRedundant( list& pointList ); +bool PlaneIntersection( DPlane* pl1, DPlane* pl2, vec3_t out );; - vec_t DistanceToPoint(vec3_t pnt); +vec_t DistanceToPoint( vec3_t pnt ); - DPlane(vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* texData); - DPlane() { } - virtual ~DPlane(); +DPlane( vec3_t va, vec3_t vb, vec3_t vc, _QERFaceData* texData ); +DPlane() { } +virtual ~DPlane(); - bool m_bChkOk; - _QERFaceData texInfo; - vec3_t points[3]; // djbob:do we really need these any more? - vec3_t normal; - float _d; +bool m_bChkOk; +_QERFaceData texInfo; +vec3_t points[3]; // djbob:do we really need these any more? +vec3_t normal; +float _d; }; //typedef CList DPlaneList; diff --git a/contrib/bobtoolz/DPoint.cpp b/contrib/bobtoolz/DPoint.cpp index a56e91f0..a9eeca21 100644 --- a/contrib/bobtoolz/DPoint.cpp +++ b/contrib/bobtoolz/DPoint.cpp @@ -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 + */ // DPoint.cpp: implementation of the DPoint class. // @@ -28,13 +28,11 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DPoint::DPoint() -{ +DPoint::DPoint(){ } -DPoint::~DPoint() -{ +DPoint::~DPoint(){ } @@ -42,11 +40,11 @@ DPoint::~DPoint() // Implementation ////////////////////////////////////////////////////////////////////// -bool DPoint::operator ==(vec3_t other) -{ +bool DPoint::operator ==( vec3_t other ){ vec3_t test; - VectorSubtract(other, _pnt, test); - if(fabs(VectorLength(test)) > MAX_ROUND_ERROR) + VectorSubtract( other, _pnt, test ); + if ( fabs( VectorLength( test ) ) > MAX_ROUND_ERROR ) { return FALSE; + } return TRUE; } diff --git a/contrib/bobtoolz/DPoint.h b/contrib/bobtoolz/DPoint.h index 394352cf..ede5b770 100644 --- a/contrib/bobtoolz/DPoint.h +++ b/contrib/bobtoolz/DPoint.h @@ -1,43 +1,43 @@ /* -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 + */ // DPoint.h: interface for the DPoint class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DPOINT_H__FC37C022_F0A1_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_DPOINT_H__FC37C022_F0A1_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_DPOINT_H__FC37C022_F0A1_11D4_ACF7_004095A18133__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 -class DPoint +class DPoint { public: - DPoint(); - virtual ~DPoint(); +DPoint(); +virtual ~DPoint(); - bool operator ==(vec3_t other); +bool operator ==( vec3_t other ); - vec3_t _pnt; - unsigned char m_uData; +vec3_t _pnt; +unsigned char m_uData; }; //typedef CList DPointList; diff --git a/contrib/bobtoolz/DShape.cpp b/contrib/bobtoolz/DShape.cpp index 9418b73b..34a586c3 100644 --- a/contrib/bobtoolz/DShape.cpp +++ b/contrib/bobtoolz/DShape.cpp @@ -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 + */ // DShape.cpp: implementation of the DShape class. // @@ -35,45 +35,41 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA bool bFacesAll[6] = {TRUE, TRUE, TRUE, TRUE, TRUE, TRUE}; -DShape::DShape() -{ +DShape::DShape(){ m_nNextBrush = 0; } -DShape::~DShape() -{ +DShape::~DShape(){ } -void DShape::BuildRegularPrism(vec3_t min, vec3_t max, int nSides, bool bAlignTop) -{ - vec3_t vc[MAX_POLYGON_FACES+2], vd[MAX_POLYGON_FACES+2]; +void DShape::BuildRegularPrism( vec3_t min, vec3_t max, int nSides, bool bAlignTop ){ + vec3_t vc[MAX_POLYGON_FACES + 2], vd[MAX_POLYGON_FACES + 2]; vec3_t radius; vec3_t origin; - VectorSubtract(max, min, radius); - VectorScale(radius, 0.5f, radius); + VectorSubtract( max, min, radius ); + VectorScale( radius, 0.5f, radius ); // calc 3d radius and origin - VectorAdd(max, min, origin); - VectorScale(origin, 0.5f, origin); + VectorAdd( max, min, origin ); + VectorScale( origin, 0.5f, origin ); float phase = 0.0f; - if(bAlignTop) - { - phase = -(Q_PI/nSides); - VectorScale(radius, static_cast< float >( 1/cos(phase) ), radius); + if ( bAlignTop ) { + phase = -( Q_PI / nSides ); + VectorScale( radius, static_cast< float >( 1 / cos( phase ) ), radius ); } //----- Build Polygon Vertices ----- int i; - for(i = 0; i < nSides; i++) + for ( i = 0; i < nSides; i++ ) { - VectorCopy(origin, vc[i]); - VectorCopy(origin, vd[i]); - + VectorCopy( origin, vc[i] ); + VectorCopy( origin, vd[i] ); + vc[i][2] = min[2]; vd[i][2] = max[2]; @@ -84,55 +80,52 @@ void DShape::BuildRegularPrism(vec3_t min, vec3_t max, int nSides, bool bAlignTo vd[i][1] = vc[i][1]; } - VectorCopy(vc[0], vc[nSides]); - VectorCopy(vd[0], vd[nSides]); - VectorCopy(vc[1], vc[nSides+1]); - VectorCopy(vd[1], vd[nSides+1]); - + VectorCopy( vc[0], vc[nSides] ); + VectorCopy( vd[0], vd[nSides] ); + VectorCopy( vc[1], vc[nSides + 1] ); + VectorCopy( vd[1], vd[nSides + 1] ); + //---------------------------------- - DBrush* pB = m_Container.GetWorldSpawn()->NewBrush(m_nNextBrush++); + DBrush* pB = m_Container.GetWorldSpawn()->NewBrush( m_nNextBrush++ ); - for(i = 1; i <= nSides; i++) - pB->AddFace(vc[i-1], vc[i], vd[i], GetCurrentTexture(), FALSE); + for ( i = 1; i <= nSides; i++ ) + pB->AddFace( vc[i - 1], vc[i], vd[i], GetCurrentTexture(), FALSE ); - pB->AddFace(vc[2], vc[1], vc[0], "textures/common/caulk", FALSE); - pB->AddFace(vd[0], vd[1], vd[2], "textures/common/caulk", FALSE); + pB->AddFace( vc[2], vc[1], vc[0], "textures/common/caulk", FALSE ); + pB->AddFace( vd[0], vd[1], vd[2], "textures/common/caulk", FALSE ); } -void DShape::Commit() -{ - m_Container.GetWorldSpawn()->FixBrushes(FALSE); - m_Container.BuildInRadiant(TRUE); +void DShape::Commit(){ + m_Container.GetWorldSpawn()->FixBrushes( FALSE ); + m_Container.BuildInRadiant( TRUE ); } -void DShape::BuildInversePrism(vec3_t min, vec3_t max, int nSides, bool bAlignTop) -{ - vec3_t va[MAX_POLYGON_FACES+1], vb[MAX_POLYGON_FACES+1]; +void DShape::BuildInversePrism( vec3_t min, vec3_t max, int nSides, bool bAlignTop ){ + vec3_t va[MAX_POLYGON_FACES + 1], vb[MAX_POLYGON_FACES + 1]; vec3_t radius; vec3_t origin; - VectorSubtract(max, min, radius); - VectorScale(radius, 0.5f, radius); + VectorSubtract( max, min, radius ); + VectorScale( radius, 0.5f, radius ); // calc 3d radius and origin - VectorAdd(max, min, origin); - VectorScale(origin, 0.5f, origin); + VectorAdd( max, min, origin ); + VectorScale( origin, 0.5f, origin ); float phase = 0.0f; - if(bAlignTop) - { - phase = -(Q_PI/nSides); - VectorScale(radius, static_cast< float >( 1/cos(phase) ), radius); + if ( bAlignTop ) { + phase = -( Q_PI / nSides ); + VectorScale( radius, static_cast< float >( 1 / cos( phase ) ), radius ); } //----- Build Polygon Vertices ----- int i; - for(i = 0; i < nSides; i++) + for ( i = 0; i < nSides; i++ ) { - VectorCopy(origin, va[i]); - VectorCopy(origin, vb[i]); + VectorCopy( origin, va[i] ); + VectorCopy( origin, vb[i] ); va[i][2] = min[2]; vb[i][2] = max[2]; @@ -144,90 +137,85 @@ void DShape::BuildInversePrism(vec3_t min, vec3_t max, int nSides, bool bAlignTo vb[i][1] = va[i][1]; } - VectorCopy(va[0], va[nSides]); - VectorCopy(vb[0], vb[nSides]); - + VectorCopy( va[0], va[nSides] ); + VectorCopy( vb[0], vb[nSides] ); + //---------------------------------- - for(i = 1; i <= nSides; i++) + for ( i = 1; i <= nSides; i++ ) { - DBrush* pB = GetBoundingCube(min, max, "textures/common/caulk"); + DBrush* pB = GetBoundingCube( min, max, "textures/common/caulk" ); vec3_t top, bottom; - VectorCopy(va[i-1], top); - VectorCopy(va[i], bottom); + VectorCopy( va[i - 1], top ); + VectorCopy( va[i], bottom ); - if(va[i-1][1] > va[i][1]) - { + if ( va[i - 1][1] > va[i][1] ) { top[0] += 5; bottom[0] += 5; } - else // flip direction of plane on crossover + else // flip direction of plane on crossover { top[0] -= 5; bottom[0] -= 5; } - - if(top[1] != bottom[1]) // internal line is flat already if true - { - pB->AddFace(va[i-1], top, vb[i-1], "textures/common/caulk", FALSE); - pB->AddFace(va[i], vb[i], bottom, "textures/common/caulk", FALSE); - } // add cut-off planes - - pB->AddFace(va[i-1], vb[i-1], vb[i], GetCurrentTexture(), FALSE); + + if ( top[1] != bottom[1] ) { // internal line is flat already if true + pB->AddFace( va[i - 1], top, vb[i - 1], "textures/common/caulk", FALSE ); + pB->AddFace( va[i], vb[i], bottom, "textures/common/caulk", FALSE ); + } // add cut-off planes + + pB->AddFace( va[i - 1], vb[i - 1], vb[i], GetCurrentTexture(), FALSE ); // add internal polygon plane } } -void DShape::BuildBorderedPrism(vec3_t min, vec3_t max, int nSides, int nBorder, bool bAlignTop) -{ - vec3_t va[MAX_POLYGON_FACES+2], vb[MAX_POLYGON_FACES+2]; - vec3_t vc[MAX_POLYGON_FACES+2], vd[MAX_POLYGON_FACES+2]; +void DShape::BuildBorderedPrism( vec3_t min, vec3_t max, int nSides, int nBorder, bool bAlignTop ){ + vec3_t va[MAX_POLYGON_FACES + 2], vb[MAX_POLYGON_FACES + 2]; + vec3_t vc[MAX_POLYGON_FACES + 2], vd[MAX_POLYGON_FACES + 2]; vec3_t radius; vec3_t origin; - VectorSubtract(max, min, radius); - VectorScale(radius, 0.5f, radius); + VectorSubtract( max, min, radius ); + VectorScale( radius, 0.5f, radius ); // calc 3d radius and origin - VectorAdd(max, min, origin); - VectorScale(origin, 0.5f, origin); + VectorAdd( max, min, origin ); + VectorScale( origin, 0.5f, origin ); - if(nBorder >= Min(radius[0], radius[1])) - { + if ( nBorder >= Min( radius[0], radius[1] ) ) { // DoMessageBox("Border is too large", "Error", MB_OK); return; } float phase = 0.0f; - if(bAlignTop) - { - phase = -(Q_PI/nSides); - VectorScale(radius, static_cast< float >( 1/cos(phase) ), radius); + if ( bAlignTop ) { + phase = -( Q_PI / nSides ); + VectorScale( radius, static_cast< float >( 1 / cos( phase ) ), radius ); } //----- Build Polygon Vertices ----- int i; - for(i = 0; i < nSides; i++) + for ( i = 0; i < nSides; i++ ) { - VectorCopy(origin, va[i]); - VectorCopy(origin, vb[i]); - VectorCopy(origin, vc[i]); - VectorCopy(origin, vd[i]); + VectorCopy( origin, va[i] ); + VectorCopy( origin, vb[i] ); + VectorCopy( origin, vc[i] ); + VectorCopy( origin, vd[i] ); va[i][2] = min[2]; vb[i][2] = max[2]; - va[i][0] += (radius[0] - nBorder) * sinf( ( 2 * Q_PI * i / nSides ) + phase ); - va[i][1] += (radius[1] - nBorder) * cosf( ( 2 * Q_PI * i / nSides ) + phase ); + va[i][0] += ( radius[0] - nBorder ) * sinf( ( 2 * Q_PI * i / nSides ) + phase ); + va[i][1] += ( radius[1] - nBorder ) * cosf( ( 2 * Q_PI * i / nSides ) + phase ); vb[i][0] = va[i][0]; vb[i][1] = va[i][1]; - + vc[i][2] = min[2]; vd[i][2] = max[2]; @@ -238,42 +226,41 @@ void DShape::BuildBorderedPrism(vec3_t min, vec3_t max, int nSides, int nBorder, vd[i][1] = vc[i][1]; } - VectorCopy(va[0], va[nSides]); - VectorCopy(vb[0], vb[nSides]); - VectorCopy(va[1], va[nSides+1]); - VectorCopy(vb[1], vb[nSides+1]); + VectorCopy( va[0], va[nSides] ); + VectorCopy( vb[0], vb[nSides] ); + VectorCopy( va[1], va[nSides + 1] ); + VectorCopy( vb[1], vb[nSides + 1] ); + + VectorCopy( vc[0], vc[nSides] ); + VectorCopy( vd[0], vd[nSides] ); + VectorCopy( vc[1], vc[nSides + 1] ); + VectorCopy( vd[1], vd[nSides + 1] ); - VectorCopy(vc[0], vc[nSides]); - VectorCopy(vd[0], vd[nSides]); - VectorCopy(vc[1], vc[nSides+1]); - VectorCopy(vd[1], vd[nSides+1]); - //---------------------------------- - for(i = 1; i <= nSides; i++) + for ( i = 1; i <= nSides; i++ ) { - DBrush* pB = GetBoundingCube(min, max, "textures/common/caulk"); + DBrush* pB = GetBoundingCube( min, max, "textures/common/caulk" ); - pB->AddFace(origin, vc[i-1], vd[i-1], "textures/common/caulk", FALSE); - pB->AddFace(origin, vd[i], vc[i], "textures/common/caulk", FALSE); + pB->AddFace( origin, vc[i - 1], vd[i - 1], "textures/common/caulk", FALSE ); + pB->AddFace( origin, vd[i], vc[i], "textures/common/caulk", FALSE ); - pB->AddFace(vc[i-1], vc[i], vd[i], GetCurrentTexture(), FALSE); - pB->AddFace(vb[i], va[i], va[i-1], GetCurrentTexture(), FALSE); + pB->AddFace( vc[i - 1], vc[i], vd[i], GetCurrentTexture(), FALSE ); + pB->AddFace( vb[i], va[i], va[i - 1], GetCurrentTexture(), FALSE ); } } -DBrush* DShape::GetBoundingCube_Ext(vec3_t min, vec3_t max, const char *textureName, bool* bUseFaces, bool detail) -{ +DBrush* DShape::GetBoundingCube_Ext( vec3_t min, vec3_t max, const char *textureName, bool* bUseFaces, bool detail ){ DBrush* pB = new DBrush; //----- Build Outer Bounds --------- vec3_t v1, v2, v3, v5, v6, v7; - VectorCopy(min, v1); - VectorCopy(min, v2); - VectorCopy(min, v3); - VectorCopy(max, v5); - VectorCopy(max, v6); - VectorCopy(max, v7); + VectorCopy( min, v1 ); + VectorCopy( min, v2 ); + VectorCopy( min, v3 ); + VectorCopy( max, v5 ); + VectorCopy( max, v6 ); + VectorCopy( max, v7 ); v2[0] = max[0]; v3[1] = max[1]; @@ -285,42 +272,49 @@ DBrush* DShape::GetBoundingCube_Ext(vec3_t min, vec3_t max, const char *textureN //----- Add Six Cube Faces --------- - if(bUseFaces[0]) - pB->AddFace(v1, v2, v3, textureName, detail); - if(bUseFaces[1]) - pB->AddFace(v1, v3, v6, textureName, detail); - if(bUseFaces[2]) - pB->AddFace(v1, v7, v2, textureName, detail); + if ( bUseFaces[0] ) { + pB->AddFace( v1, v2, v3, textureName, detail ); + } + if ( bUseFaces[1] ) { + pB->AddFace( v1, v3, v6, textureName, detail ); + } + if ( bUseFaces[2] ) { + pB->AddFace( v1, v7, v2, textureName, detail ); + } - if(bUseFaces[3]) - pB->AddFace(v5, v6, v3, textureName, detail); - if(bUseFaces[4]) - pB->AddFace(v5, v2, v7, textureName, detail); - if(bUseFaces[5]) - pB->AddFace(v5, v7, v6, textureName, detail); + if ( bUseFaces[3] ) { + pB->AddFace( v5, v6, v3, textureName, detail ); + } + if ( bUseFaces[4] ) { + pB->AddFace( v5, v2, v7, textureName, detail ); + } + if ( bUseFaces[5] ) { + pB->AddFace( v5, v7, v6, textureName, detail ); + } //---------------------------------- return pB; } -DBrush* DShape::GetBoundingCube(vec3_t min, vec3_t max, const char *textureName, DEntity* ent, bool* bUseFaces) -{ +DBrush* DShape::GetBoundingCube( vec3_t min, vec3_t max, const char *textureName, DEntity* ent, bool* bUseFaces ){ DBrush* pB; - if(ent == NULL) - pB = m_Container.GetWorldSpawn()->NewBrush(m_nNextBrush++); - else - pB = ent->NewBrush(m_nNextBrush++); + if ( ent == NULL ) { + pB = m_Container.GetWorldSpawn()->NewBrush( m_nNextBrush++ ); + } + else{ + pB = ent->NewBrush( m_nNextBrush++ ); + } //----- Build Outer Bounds --------- vec3_t v1, v2, v3, v5, v6, v7; - VectorCopy(min, v1); - VectorCopy(min, v2); - VectorCopy(min, v3); - VectorCopy(max, v5); - VectorCopy(max, v6); - VectorCopy(max, v7); + VectorCopy( min, v1 ); + VectorCopy( min, v2 ); + VectorCopy( min, v3 ); + VectorCopy( max, v5 ); + VectorCopy( max, v6 ); + VectorCopy( max, v7 ); v2[0] = max[0]; v3[1] = max[1]; @@ -332,96 +326,102 @@ DBrush* DShape::GetBoundingCube(vec3_t min, vec3_t max, const char *textureName, //----- Add Six Cube Faces --------- - if(bUseFaces[0]) - pB->AddFace(v1, v2, v3, textureName, FALSE); - if(bUseFaces[1]) - pB->AddFace(v1, v3, v6, textureName, FALSE); - if(bUseFaces[2]) - pB->AddFace(v1, v7, v2, textureName, FALSE); + if ( bUseFaces[0] ) { + pB->AddFace( v1, v2, v3, textureName, FALSE ); + } + if ( bUseFaces[1] ) { + pB->AddFace( v1, v3, v6, textureName, FALSE ); + } + if ( bUseFaces[2] ) { + pB->AddFace( v1, v7, v2, textureName, FALSE ); + } - if(bUseFaces[3]) - pB->AddFace(v5, v6, v3, textureName, FALSE); - if(bUseFaces[4]) - pB->AddFace(v5, v2, v7, textureName, FALSE); - if(bUseFaces[5]) - pB->AddFace(v5, v7, v6, textureName, FALSE); + if ( bUseFaces[3] ) { + pB->AddFace( v5, v6, v3, textureName, FALSE ); + } + if ( bUseFaces[4] ) { + pB->AddFace( v5, v2, v7, textureName, FALSE ); + } + if ( bUseFaces[5] ) { + pB->AddFace( v5, v7, v6, textureName, FALSE ); + } //---------------------------------- return pB; } -bool DShape::BuildPit(vec3_t min, vec3_t max) -{ - if((max[2] - min[2]) < 196) +bool DShape::BuildPit( vec3_t min, vec3_t max ){ + if ( ( max[2] - min[2] ) < 196 ) { return FALSE; + } - srand(time(NULL)); + srand( time( NULL ) ); vec3_t centre; - VectorAdd(min, max, centre); - VectorScale(centre, 0.5f, centre); + VectorAdd( min, max, centre ); + VectorScale( centre, 0.5f, centre ); char buffer[256]; - int team = (rand()%10000)+5000; + int team = ( rand() % 10000 ) + 5000; // ************* SPEAKER *************** - sprintf(buffer, "t%i_1", team); + sprintf( buffer, "t%i_1", team ); // trigger for speaker vec3_t triggerVoiceBtm; - VectorCopy(min, triggerVoiceBtm); + VectorCopy( min, triggerVoiceBtm ); triggerVoiceBtm[2] = max[2] - 16; - DEntity* triggerVoice = m_Container.AddEntity("trigger_multiple"); - GetBoundingCube(triggerVoiceBtm, max, "textures/common/trigger", triggerVoice); - triggerVoice->AddEPair("target", buffer); + DEntity* triggerVoice = m_Container.AddEntity( "trigger_multiple" ); + GetBoundingCube( triggerVoiceBtm, max, "textures/common/trigger", triggerVoice ); + triggerVoice->AddEPair( "target", buffer ); //-------------------- // target for speaker vec3_t voiceOrigin; - VectorCopy(centre, voiceOrigin); - voiceOrigin[2] = max[2]+16; + VectorCopy( centre, voiceOrigin ); + voiceOrigin[2] = max[2] + 16; - DEntity* targetVoice = m_Container.AddEntity("target_speaker"); - targetVoice->AddEPair("targetname", buffer); + DEntity* targetVoice = m_Container.AddEntity( "target_speaker" ); + targetVoice->AddEPair( "targetname", buffer ); - sprintf(buffer, "%f %f %f", voiceOrigin[0], voiceOrigin[1], voiceOrigin[2]); - targetVoice->AddEPair("origin", buffer); - targetVoice->AddEPair("spawnflags", "8"); - targetVoice->AddEPair("noise", "*falling1.wav"); + sprintf( buffer, "%f %f %f", voiceOrigin[0], voiceOrigin[1], voiceOrigin[2] ); + targetVoice->AddEPair( "origin", buffer ); + targetVoice->AddEPair( "spawnflags", "8" ); + targetVoice->AddEPair( "noise", "*falling1.wav" ); //-------------------- // *********** END SPEAKER ************* // ********* POWERUP REMOVAL *********** - sprintf(buffer, "t%i_2", team); + sprintf( buffer, "t%i_2", team ); // trigger for powerup removal vec3_t triggerPwrRmvTop, triggerPwrRmvBtm; - VectorCopy(min, triggerPwrRmvBtm); - VectorCopy(max, triggerPwrRmvTop); + VectorCopy( min, triggerPwrRmvBtm ); + VectorCopy( max, triggerPwrRmvTop ); triggerPwrRmvTop[2] = triggerVoiceBtm[2] - 64; triggerPwrRmvBtm[2] = triggerPwrRmvTop[2] - 16; - DEntity* triggerPwrRmv = m_Container.AddEntity("trigger_multiple"); - GetBoundingCube(triggerPwrRmvBtm, triggerPwrRmvTop, "textures/common/trigger", triggerPwrRmv); - triggerPwrRmv->AddEPair("target", buffer); + DEntity* triggerPwrRmv = m_Container.AddEntity( "trigger_multiple" ); + GetBoundingCube( triggerPwrRmvBtm, triggerPwrRmvTop, "textures/common/trigger", triggerPwrRmv ); + triggerPwrRmv->AddEPair( "target", buffer ); //-------------------- // target for powerup removal vec3_t pwrRmvOrigin; - VectorCopy(centre, pwrRmvOrigin); - pwrRmvOrigin[2] = triggerPwrRmvTop[2]+16; + VectorCopy( centre, pwrRmvOrigin ); + pwrRmvOrigin[2] = triggerPwrRmvTop[2] + 16; - DEntity* targetPwrRmv = m_Container.AddEntity("target_remove_powerups"); - targetPwrRmv->AddEPair("targetname", buffer); + DEntity* targetPwrRmv = m_Container.AddEntity( "target_remove_powerups" ); + targetPwrRmv->AddEPair( "targetname", buffer ); - sprintf(buffer, "%f %f %f", pwrRmvOrigin[0], pwrRmvOrigin[1], pwrRmvOrigin[2]); - targetPwrRmv->AddEPair("origin", buffer); + sprintf( buffer, "%f %f %f", pwrRmvOrigin[0], pwrRmvOrigin[1], pwrRmvOrigin[2] ); + targetPwrRmv->AddEPair( "origin", buffer ); //-------------------- // ****** END POWERUP REMOVAL ******** @@ -430,16 +430,16 @@ bool DShape::BuildPit(vec3_t min, vec3_t max) // trigger for damage vec3_t triggerDmgTop, triggerDmgBtm; - VectorCopy(min, triggerDmgBtm); - VectorCopy(max, triggerDmgTop); + VectorCopy( min, triggerDmgBtm ); + VectorCopy( max, triggerDmgTop ); triggerDmgBtm[2] = min[2] + 64; triggerDmgTop[2] = triggerDmgBtm[2] + 16; - DEntity* triggerDmg = m_Container.AddEntity("trigger_hurt"); - GetBoundingCube(triggerDmgBtm, triggerDmgTop, "textures/common/trigger", triggerDmg); - triggerDmg->AddEPair("dmg", "9999"); - triggerDmg->AddEPair("spawnflags", "12"); + DEntity* triggerDmg = m_Container.AddEntity( "trigger_hurt" ); + GetBoundingCube( triggerDmgBtm, triggerDmgTop, "textures/common/trigger", triggerDmg ); + triggerDmg->AddEPair( "dmg", "9999" ); + triggerDmg->AddEPair( "spawnflags", "12" ); //-------------------- // ****** END DAMAGE ******** @@ -447,11 +447,11 @@ bool DShape::BuildPit(vec3_t min, vec3_t max) // ********* NODROP *********** vec3_t nodropTop; - VectorCopy(max, nodropTop); + VectorCopy( max, nodropTop ); nodropTop[2] = min[2] + 64; - GetBoundingCube(min, nodropTop, "textures/common/nodrop"); + GetBoundingCube( min, nodropTop, "textures/common/nodrop" ); // ****** END NODROP ******** diff --git a/contrib/bobtoolz/DShape.h b/contrib/bobtoolz/DShape.h index 4bc4baa8..32c659c7 100644 --- a/contrib/bobtoolz/DShape.h +++ b/contrib/bobtoolz/DShape.h @@ -1,60 +1,60 @@ /* -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 + */ // DShape.h: interface for the DShape class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DSHAPE_H__0B30B302_9D21_4C2D_836A_61F3C8D4244D__INCLUDED_) +#if !defined( AFX_DSHAPE_H__0B30B302_9D21_4C2D_836A_61F3C8D4244D__INCLUDED_ ) #define AFX_DSHAPE_H__0B30B302_9D21_4C2D_836A_61F3C8D4244D__INCLUDED_ -#include "DMap.h" // Added by ClassView -#include "StdAfx.h" // Added by ClassView +#include "DMap.h" // Added by ClassView +#include "StdAfx.h" // Added by ClassView #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // defines for polygon stuff -#define MAX_POLYGON_FACES 128 +#define MAX_POLYGON_FACES 128 extern bool bFacesAll[]; -class DShape +class DShape { public: - bool BuildPit(vec3_t min, vec3_t max); - void BuildBorderedPrism(vec3_t min, vec3_t max, int nSides, int nBorder, bool bAlignTop); - void BuildInversePrism(vec3_t min, vec3_t max, int nSides, bool bAlignTop); - void BuildRegularPrism(vec3_t min, vec3_t max, int nSides, bool bAlignTop); - - int m_nNextBrush; - static DBrush* GetBoundingCube_Ext(vec3_t min, vec3_t max, const char* textureName, bool* bUseFaces = bFacesAll, bool detail = false); - - DShape(); - virtual ~DShape(); - - void Commit(); +bool BuildPit( vec3_t min, vec3_t max ); +void BuildBorderedPrism( vec3_t min, vec3_t max, int nSides, int nBorder, bool bAlignTop ); +void BuildInversePrism( vec3_t min, vec3_t max, int nSides, bool bAlignTop ); +void BuildRegularPrism( vec3_t min, vec3_t max, int nSides, bool bAlignTop ); + +int m_nNextBrush; +static DBrush* GetBoundingCube_Ext( vec3_t min, vec3_t max, const char* textureName, bool* bUseFaces = bFacesAll, bool detail = false ); + +DShape(); +virtual ~DShape(); + +void Commit(); private: - DBrush* GetBoundingCube(vec3_t min, vec3_t max, const char* textureName, DEntity* ent = NULL, bool* bUseFaces = bFacesAll); +DBrush* GetBoundingCube( vec3_t min, vec3_t max, const char* textureName, DEntity* ent = NULL, bool* bUseFaces = bFacesAll ); - DMap m_Container; +DMap m_Container; }; #endif // !defined(AFX_DSHAPE_H__0B30B302_9D21_4C2D_836A_61F3C8D4244D__INCLUDED_) diff --git a/contrib/bobtoolz/DTrainDrawer.cpp b/contrib/bobtoolz/DTrainDrawer.cpp index f5796c80..ee4abf4b 100644 --- a/contrib/bobtoolz/DTrainDrawer.cpp +++ b/contrib/bobtoolz/DTrainDrawer.cpp @@ -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" #include "DPoint.h" @@ -36,26 +36,27 @@ DTrainDrawer::DTrainDrawer() { BuildPaths(); } -DTrainDrawer::~DTrainDrawer(void) { - if(m_bHooked) +DTrainDrawer::~DTrainDrawer( void ) { + if ( m_bHooked ) { UnRegister(); + } ClearPoints(); ClearSplines(); } void DTrainDrawer::ClearSplines() { - for(list::const_iterator deadSpline = m_splineList.begin(); deadSpline != m_splineList.end(); deadSpline++) { - (*deadSpline)->m_pointList.clear(); - (*deadSpline)->m_vertexList.clear(); - delete (*deadSpline); + for ( list::const_iterator deadSpline = m_splineList.begin(); deadSpline != m_splineList.end(); deadSpline++ ) { + ( *deadSpline )->m_pointList.clear(); + ( *deadSpline )->m_vertexList.clear(); + delete ( *deadSpline ); } m_splineList.clear(); } void DTrainDrawer::ClearPoints() { - for(list::const_iterator deadPoint = m_pointList.begin(); deadPoint != m_pointList.end(); deadPoint++) { + for ( list::const_iterator deadPoint = m_pointList.begin(); deadPoint != m_pointList.end(); deadPoint++ ) { delete *deadPoint; } @@ -74,60 +75,60 @@ void DTrainDrawer::UnRegister() { m_bHooked = FALSE; } -void CalculateSpline_r(vec3_t* v, int count, vec3_t out, float tension) { +void CalculateSpline_r( vec3_t* v, int count, vec3_t out, float tension ) { vec3_t dist; - if(count < 2) { + if ( count < 2 ) { return; } - if(count == 2) { + if ( count == 2 ) { VectorSubtract( v[1], v[0], dist ); - VectorMA(v[0], tension, dist, out); + VectorMA( v[0], tension, dist, out ); return; } - vec3_t* v2 = new vec3_t[count-1]; + vec3_t* v2 = new vec3_t[count - 1]; - for( int i = 0; i < count-1; i++ ) { - VectorSubtract( v[i+1], v[i], dist ); - VectorMA(v[i], tension, dist, v2[i]); + for ( int i = 0; i < count - 1; i++ ) { + VectorSubtract( v[i + 1], v[i], dist ); + VectorMA( v[i], tension, dist, v2[i] ); } - CalculateSpline_r( v2, count-1, out, tension); + CalculateSpline_r( v2, count - 1, out, tension ); delete[] v2; } void DTrainDrawer::Draw3D() { - if(!m_bDisplay) { + if ( !m_bDisplay ) { return; } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - g_QglTable.m_pfn_qglDisable(GL_BLEND); - g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH); + g_QglTable.m_pfn_qglDisable( GL_BLEND ); + g_QglTable.m_pfn_qglDisable( GL_LINE_SMOOTH ); g_QglTable.m_pfn_qglPushMatrix(); - - g_QglTable.m_pfn_qglLineWidth(2.0f); - g_QglTable.m_pfn_qglColor4f(1.0f, 1.0f, 1.0f, 1.0f); - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH); + g_QglTable.m_pfn_qglLineWidth( 2.0f ); + g_QglTable.m_pfn_qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); - g_QglTable.m_pfn_qglDepthFunc(GL_ALWAYS); + g_QglTable.m_pfn_qglEnable( GL_BLEND ); + g_QglTable.m_pfn_qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + g_QglTable.m_pfn_qglDisable( GL_POLYGON_SMOOTH ); - for(list::const_iterator sp = m_splineList.begin(); sp != m_splineList.end(); sp++) { - splinePoint_t* pSP = (*sp); + g_QglTable.m_pfn_qglDepthFunc( GL_ALWAYS ); - g_QglTable.m_pfn_qglBegin(GL_LINE_STRIP); - for(list::const_iterator v = pSP->m_vertexList.begin(); v != pSP->m_vertexList.end(); v++) { - g_QglTable.m_pfn_qglVertex3fv((*v)._pnt); - } + for ( list::const_iterator sp = m_splineList.begin(); sp != m_splineList.end(); sp++ ) { + splinePoint_t* pSP = ( *sp ); + + g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); + for ( list::const_iterator v = pSP->m_vertexList.begin(); v != pSP->m_vertexList.end(); v++ ) { + g_QglTable.m_pfn_qglVertex3fv( ( *v )._pnt ); + } g_QglTable.m_pfn_qglEnd(); } @@ -136,50 +137,50 @@ void DTrainDrawer::Draw3D() { g_QglTable.m_pfn_qglPopAttrib(); } -void DTrainDrawer::Draw2D(VIEWTYPE vt) { +void DTrainDrawer::Draw2D( VIEWTYPE vt ) { - if(!m_bDisplay) { + if ( !m_bDisplay ) { return; } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - g_QglTable.m_pfn_qglDisable(GL_BLEND); - g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH); + g_QglTable.m_pfn_qglDisable( GL_BLEND ); + g_QglTable.m_pfn_qglDisable( GL_LINE_SMOOTH ); g_QglTable.m_pfn_qglPushMatrix(); - - switch(vt) + + switch ( vt ) { case XY: break; case XZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); break; case YZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); - g_QglTable.m_pfn_qglRotatef(270.0f, 0.0f, 0.0f, 1.0f); + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); + g_QglTable.m_pfn_qglRotatef( 270.0f, 0.0f, 0.0f, 1.0f ); break; } - g_QglTable.m_pfn_qglLineWidth(1.0f); - g_QglTable.m_pfn_qglColor4f(1.0f, 0.0f, 0.0f, 0.5f); + g_QglTable.m_pfn_qglLineWidth( 1.0f ); + g_QglTable.m_pfn_qglColor4f( 1.0f, 0.0f, 0.0f, 0.5f ); - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH); + g_QglTable.m_pfn_qglEnable( GL_BLEND ); + g_QglTable.m_pfn_qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + g_QglTable.m_pfn_qglDisable( GL_POLYGON_SMOOTH ); - g_QglTable.m_pfn_qglDepthFunc(GL_ALWAYS); + g_QglTable.m_pfn_qglDepthFunc( GL_ALWAYS ); - g_QglTable.m_pfn_qglColor4f(1.f, 0.f, 0.f, 1.f); + g_QglTable.m_pfn_qglColor4f( 1.f, 0.f, 0.f, 1.f ); - for(list::const_iterator sp = m_splineList.begin(); sp != m_splineList.end(); sp++) { - splinePoint_t* pSP = (*sp); + for ( list::const_iterator sp = m_splineList.begin(); sp != m_splineList.end(); sp++ ) { + splinePoint_t* pSP = ( *sp ); - g_QglTable.m_pfn_qglBegin(GL_LINE_STRIP); - for(list::const_iterator v = pSP->m_vertexList.begin(); v != pSP->m_vertexList.end(); v++) { - g_QglTable.m_pfn_qglVertex3fv((*v)._pnt); - } + g_QglTable.m_pfn_qglBegin( GL_LINE_STRIP ); + for ( list::const_iterator v = pSP->m_vertexList.begin(); v != pSP->m_vertexList.end(); v++ ) { + g_QglTable.m_pfn_qglVertex3fv( ( *v )._pnt ); + } g_QglTable.m_pfn_qglEnd(); } @@ -188,11 +189,11 @@ void DTrainDrawer::Draw2D(VIEWTYPE vt) { g_QglTable.m_pfn_qglPopAttrib(); } -void AddSplineControl(const char* control, splinePoint_t* pSP) { +void AddSplineControl( const char* control, splinePoint_t* pSP ) { controlPoint_t cp; - strncpy(cp.strName, control, 64); + strncpy( cp.strName, control, 64 ); - pSP->m_pointList.push_front(cp); + pSP->m_pointList.push_front( cp ); } void DTrainDrawer::BuildPaths() { @@ -200,53 +201,55 @@ void DTrainDrawer::BuildPaths() { DEntity e; - for(int i = 0; i < count; i++) { - entity_s* ent = (entity_s*)g_FuncTable.m_pfnGetEntityHandle(i); + for ( int i = 0; i < count; i++ ) { + entity_s* ent = (entity_s*)g_FuncTable.m_pfnGetEntityHandle( i ); e.ClearEPairs(); - e.LoadEPairList(*g_EntityTable.m_pfnGetEntityKeyValList(ent)); + e.LoadEPairList( *g_EntityTable.m_pfnGetEntityKeyValList( ent ) ); const char* classname = e.m_Classname.GetBuffer(); const char* target; const char* control; const char* targetname; - vec3_t vOrigin; + vec3_t vOrigin; - e.SpawnString("targetname", NULL, &targetname); - e.SpawnVector("origin", "0 0 0", vOrigin); + e.SpawnString( "targetname", NULL, &targetname ); + e.SpawnVector( "origin", "0 0 0", vOrigin ); - if(!strcmp(classname, "info_train_spline_main")) { - if(!targetname) { + if ( !strcmp( classname, "info_train_spline_main" ) ) { + if ( !targetname ) { Sys_Printf( "info_train_spline_main with no targetname" ); return; } - e.SpawnString("target", NULL, &target); + e.SpawnString( "target", NULL, &target ); - if(!target) { + if ( !target ) { AddControlPoint( targetname, vOrigin ); - } else { + } + else { splinePoint_t* pSP = AddSplinePoint( targetname, target, vOrigin ); - e.SpawnString("control", NULL, &control); + e.SpawnString( "control", NULL, &control ); - if(control) { + if ( control ) { AddSplineControl( control, pSP ); - for(int j = 2;; j++) { + for ( int j = 2;; j++ ) { char buffer[16]; - sprintf(buffer, "control%i", j); + sprintf( buffer, "control%i", j ); - e.SpawnString(buffer, NULL, &control); - if(!control) { + e.SpawnString( buffer, NULL, &control ); + if ( !control ) { break; } - + AddSplineControl( control, pSP ); } } } - } else if(!strcmp(classname, "info_train_spline_control")) { - if(!targetname) { + } + else if ( !strcmp( classname, "info_train_spline_control" ) ) { + if ( !targetname ) { Sys_Printf( "info_train_spline_control with no targetname" ); return; } @@ -255,13 +258,13 @@ void DTrainDrawer::BuildPaths() { } } - list::const_iterator sp; - for(sp = m_splineList.begin(); sp != m_splineList.end(); sp++) { - splinePoint_t* pSP = (*sp); + list::const_iterator sp; + for ( sp = m_splineList.begin(); sp != m_splineList.end(); sp++ ) { + splinePoint_t* pSP = ( *sp ); controlPoint_t* pTarget = FindControlPoint( pSP->strTarget ); - if(!pTarget) { + if ( !pTarget ) { Sys_Printf( "couldn't find target %s", pSP->strTarget ); return; // continue; @@ -270,87 +273,84 @@ void DTrainDrawer::BuildPaths() { pSP->pTarget = pTarget; - for(list::iterator cp = pSP->m_pointList.begin(); cp != pSP->m_pointList.end(); cp++) { - controlPoint_t* pControl = FindControlPoint( (*cp).strName ); - if(!pControl) { - Sys_Printf( "couldn't find control %s", (*cp).strName ); + for ( list::iterator cp = pSP->m_pointList.begin(); cp != pSP->m_pointList.end(); cp++ ) { + controlPoint_t* pControl = FindControlPoint( ( *cp ).strName ); + if ( !pControl ) { + Sys_Printf( "couldn't find control %s", ( *cp ).strName ); return; } - VectorCopy(pControl->vOrigin, (*cp).vOrigin); + VectorCopy( pControl->vOrigin, ( *cp ).vOrigin ); } } m_bDisplay = TRUE; Register(); - for(sp = m_splineList.begin(); sp != m_splineList.end(); sp++) { - splinePoint_t* pSP = (*sp); + for ( sp = m_splineList.begin(); sp != m_splineList.end(); sp++ ) { + splinePoint_t* pSP = ( *sp ); DPoint out; - if(!pSP->pTarget) { + if ( !pSP->pTarget ) { continue; } int count = pSP->m_pointList.size() + 2; vec3_t* v = new vec3_t[count]; - VectorCopy(pSP->point.vOrigin, v[0]); + VectorCopy( pSP->point.vOrigin, v[0] ); int i = 1; - for(list::reverse_iterator cp = pSP->m_pointList.rbegin(); cp != pSP->m_pointList.rend(); cp++) { - VectorCopy((*cp).vOrigin, v[i]); + for ( list::reverse_iterator cp = pSP->m_pointList.rbegin(); cp != pSP->m_pointList.rend(); cp++ ) { + VectorCopy( ( *cp ).vOrigin, v[i] ); i++; } - VectorCopy(pSP->pTarget->vOrigin, v[i]); + VectorCopy( pSP->pTarget->vOrigin, v[i] ); - for (float tension = 0.0f; tension <= 1.f; tension += 0.01f) { - CalculateSpline_r(v, count, out._pnt, tension); - pSP->m_vertexList.push_front(out); + for ( float tension = 0.0f; tension <= 1.f; tension += 0.01f ) { + CalculateSpline_r( v, count, out._pnt, tension ); + pSP->m_vertexList.push_front( out ); } delete[] v; - VectorCopy(pSP->pTarget->vOrigin, out._pnt); - pSP->m_vertexList.push_front(out); + VectorCopy( pSP->pTarget->vOrigin, out._pnt ); + pSP->m_vertexList.push_front( out ); } } -void DTrainDrawer::AddControlPoint(const char* name, vec_t* origin) -{ +void DTrainDrawer::AddControlPoint( const char* name, vec_t* origin ){ controlPoint_t* pCP = new controlPoint_t; - strncpy(pCP->strName, name, 64); + strncpy( pCP->strName, name, 64 ); VectorCopy( origin, pCP->vOrigin ); m_pointList.push_back( pCP ); } -splinePoint_t* DTrainDrawer::AddSplinePoint(const char* name, const char* target, vec_t* origin) -{ +splinePoint_t* DTrainDrawer::AddSplinePoint( const char* name, const char* target, vec_t* origin ){ splinePoint_t* pSP = new splinePoint_t; - strncpy(pSP->point.strName, name, 64); - strncpy(pSP->strTarget, target, 64); + strncpy( pSP->point.strName, name, 64 ); + strncpy( pSP->strTarget, target, 64 ); VectorCopy( origin, pSP->point.vOrigin ); m_splineList.push_back( pSP ); return pSP; } -controlPoint_t* DTrainDrawer::FindControlPoint(const char* name) -{ - for(list::const_iterator cp = m_pointList.begin(); cp != m_pointList.end(); cp++) { - if(!strcmp(name, (*cp)->strName)) { - return (*cp); +controlPoint_t* DTrainDrawer::FindControlPoint( const char* name ){ + for ( list::const_iterator cp = m_pointList.begin(); cp != m_pointList.end(); cp++ ) { + if ( !strcmp( name, ( *cp )->strName ) ) { + return ( *cp ); } } - for(list::const_iterator sp = m_splineList.begin(); sp != m_splineList.end(); sp++) { - if(!strcmp(name, (*sp)->point.strName)) { - return &((*sp)->point); + for ( list::const_iterator sp = m_splineList.begin(); sp != m_splineList.end(); sp++ ) { + if ( !strcmp( name, ( *sp )->point.strName ) ) { + return &( ( *sp )->point ); } } diff --git a/contrib/bobtoolz/DTrainDrawer.h b/contrib/bobtoolz/DTrainDrawer.h index 3c7ac779..dbaa7fb5 100644 --- a/contrib/bobtoolz/DTrainDrawer.h +++ b/contrib/bobtoolz/DTrainDrawer.h @@ -1,27 +1,27 @@ /* -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 + */ // DTrainDrawer.h: interface for the DTrainDrawer class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_TRAINDRAWER_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_TRAINDRAWER_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_TRAINDRAWER_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_ #include "DEntity.h" @@ -54,29 +54,33 @@ class DTrainDrawer : public IGL3DWindow { private: - list m_splineList; - list m_pointList; - int refCount; +list m_splineList; +list m_pointList; +int refCount; - bool m_bHooked; - bool m_bDisplay; +bool m_bHooked; +bool m_bDisplay; public: - void UnRegister(); - void Register(); - - DTrainDrawer(); - virtual ~DTrainDrawer(void); - - void Draw3D(); - void Draw2D(VIEWTYPE vt); - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } - void ClearSplines(); - void ClearPoints(); - void BuildPaths(); - void AddControlPoint(const char* name, vec_t* origin); - splinePoint_t* AddSplinePoint(const char* name, const char* target, vec_t* origin); - controlPoint_t* FindControlPoint(const char* name); +void UnRegister(); +void Register(); + +DTrainDrawer(); +virtual ~DTrainDrawer( void ); + +void Draw3D(); +void Draw2D( VIEWTYPE vt ); +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} +void ClearSplines(); +void ClearPoints(); +void BuildPaths(); +void AddControlPoint( const char* name, vec_t* origin ); +splinePoint_t* AddSplinePoint( const char* name, const char* target, vec_t* origin ); +controlPoint_t* FindControlPoint( const char* name ); }; #endif // !defined(AFX_TRAINDRAWER_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_) diff --git a/contrib/bobtoolz/DTreePlanter.cpp b/contrib/bobtoolz/DTreePlanter.cpp index 985987df..78f0e52e 100644 --- a/contrib/bobtoolz/DTreePlanter.cpp +++ b/contrib/bobtoolz/DTreePlanter.cpp @@ -1,159 +1,160 @@ /* -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" #include "DTreePlanter.h" #include "funchandlers.h" -bool DTreePlanter::OnMouseMove(guint32 nFlags, gdouble x, gdouble y) { +bool DTreePlanter::OnMouseMove( guint32 nFlags, gdouble x, gdouble y ) { return false; } -bool DTreePlanter::OnLButtonDown(guint32 nFlags, gdouble x, gdouble y) { +bool DTreePlanter::OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ) { VIEWTYPE vt = m_XYWrapper->GetViewType(); - switch(vt) { - case XY: - break; - case YZ: - case XZ: - default: - return false; + switch ( vt ) { + case XY: + break; + case YZ: + case XZ: + default: + return false; } vec3_t pt, vhit; m_XYWrapper->SnapToGrid( static_cast< int >( x ), static_cast< int >( y ), pt ); - if(FindDropPoint(pt, vhit)) { + if ( FindDropPoint( pt, vhit ) ) { vhit[2] += m_offset; char buffer[128]; - DEntity e(m_entType); + DEntity e( m_entType ); - sprintf(buffer, "%i %i %i", (int)vhit[0], (int)vhit[1], (int)vhit[2]); - e.AddEPair("origin", buffer); + sprintf( buffer, "%i %i %i", (int)vhit[0], (int)vhit[1], (int)vhit[2] ); + e.AddEPair( "origin", buffer ); - if(m_autoLink) { + if ( m_autoLink ) { entity_t* pLastEntity = NULL; entity_t* pThisEntity = NULL; int entNum = -1, lastEntNum = -1, entpos; - for(int i = 0; i < 256; i++) { - sprintf(buffer, m_linkName, i); + for ( int i = 0; i < 256; i++ ) { + sprintf( buffer, m_linkName, i ); pThisEntity = FindEntityFromTargetname( buffer, &entNum ); - if(pThisEntity) { + if ( pThisEntity ) { entpos = i; lastEntNum = entNum; pLastEntity = pThisEntity; } } - if(!pLastEntity) { - sprintf(buffer, m_linkName, 0); - } else { - sprintf(buffer, m_linkName, entpos + 1); + if ( !pLastEntity ) { + sprintf( buffer, m_linkName, 0 ); + } + else { + sprintf( buffer, m_linkName, entpos + 1 ); } e.AddEPair( "targetname", buffer ); - if(pLastEntity) { + if ( pLastEntity ) { DEntity e2; - e2.LoadFromEntity(lastEntNum, TRUE); - e2.AddEPair("target", buffer); + e2.LoadFromEntity( lastEntNum, TRUE ); + e2.AddEPair( "target", buffer ); e2.RemoveFromRadiant(); - e2.BuildInRadiant(FALSE); + e2.BuildInRadiant( FALSE ); } } - if(m_setAngles) { - int angleYaw = (rand() % (m_maxYaw - m_minYaw + 1)) + m_minYaw; - int anglePitch = (rand() % (m_maxPitch - m_minPitch + 1)) + m_minPitch; + if ( m_setAngles ) { + int angleYaw = ( rand() % ( m_maxYaw - m_minYaw + 1 ) ) + m_minYaw; + int anglePitch = ( rand() % ( m_maxPitch - m_minPitch + 1 ) ) + m_minPitch; - sprintf(buffer, "%i %i 0", anglePitch, angleYaw); - e.AddEPair("angles", buffer); + sprintf( buffer, "%i %i 0", anglePitch, angleYaw ); + e.AddEPair( "angles", buffer ); } - if(m_numModels) { + if ( m_numModels ) { int treetype = rand() % m_numModels; - e.AddEPair("model", m_trees[treetype].name); + e.AddEPair( "model", m_trees[treetype].name ); } - if(m_useScale) { - float scale = (((rand()%1000)*0.001f) * (m_maxScale - m_minScale)) + m_minScale; + if ( m_useScale ) { + float scale = ( ( ( rand() % 1000 ) * 0.001f ) * ( m_maxScale - m_minScale ) ) + m_minScale; - sprintf(buffer, "%f", scale ); - e.AddEPair("modelscale", buffer); + sprintf( buffer, "%f", scale ); + e.AddEPair( "modelscale", buffer ); } e.BuildInRadiant( FALSE ); } - if(m_autoLink) { + if ( m_autoLink ) { DoTrainPathPlot(); } return true; } -bool DTreePlanter::OnLButtonUp(guint32 nFlags, gdouble x, gdouble y) { +bool DTreePlanter::OnLButtonUp( guint32 nFlags, gdouble x, gdouble y ) { return false; } -bool DTreePlanter::OnRButtonDown(guint32 nFlags, gdouble x, gdouble y) { +bool DTreePlanter::OnRButtonDown( guint32 nFlags, gdouble x, gdouble y ) { return false; } -bool DTreePlanter::OnRButtonUp(guint32 nFlags, gdouble x, gdouble y) { +bool DTreePlanter::OnRButtonUp( guint32 nFlags, gdouble x, gdouble y ) { return false; } -bool DTreePlanter::OnMButtonDown(guint32 nFlags, gdouble x, gdouble y) { +bool DTreePlanter::OnMButtonDown( guint32 nFlags, gdouble x, gdouble y ) { return false; } -bool DTreePlanter::OnMButtonUp(guint32 nFlags, gdouble x, gdouble y) { +bool DTreePlanter::OnMButtonUp( guint32 nFlags, gdouble x, gdouble y ) { return false; } -bool DTreePlanter::FindDropPoint(vec3_t in, vec3_t out) { +bool DTreePlanter::FindDropPoint( vec3_t in, vec3_t out ) { DPlane p1; DPlane p2; - vec3_t vUp = { 0, 0, 1 }; - vec3_t vForward = { 0, 1, 0 }; - vec3_t vLeft = { 1, 0, 0 }; + vec3_t vUp = { 0, 0, 1 }; + vec3_t vForward = { 0, 1, 0 }; + vec3_t vLeft = { 1, 0, 0 }; in[2] = 65535; - VectorCopy(in, p1.points[0]); - VectorCopy(in, p1.points[1]); - VectorCopy(in, p1.points[2]); - VectorMA(p1.points[1], 20, vUp, p1.points[1]); - VectorMA(p1.points[1], 20, vLeft, p1.points[2]); + VectorCopy( in, p1.points[0] ); + VectorCopy( in, p1.points[1] ); + VectorCopy( in, p1.points[2] ); + VectorMA( p1.points[1], 20, vUp, p1.points[1] ); + VectorMA( p1.points[1], 20, vLeft, p1.points[2] ); - VectorCopy(in, p2.points[0]); - VectorCopy(in, p2.points[1]); - VectorCopy(in, p2.points[2]); - VectorMA(p1.points[1], 20, vUp, p2.points[1]); - VectorMA(p1.points[1], 20, vForward, p2.points[2]); + VectorCopy( in, p2.points[0] ); + VectorCopy( in, p2.points[1] ); + VectorCopy( in, p2.points[2] ); + VectorMA( p1.points[1], 20, vUp, p2.points[1] ); + VectorMA( p1.points[1], 20, vForward, p2.points[2] ); p1.Rebuild(); p2.Rebuild(); @@ -162,15 +163,15 @@ bool DTreePlanter::FindDropPoint(vec3_t in, vec3_t out) { vec3_t temp; vec_t dist; int cnt = m_world.GetIDMax(); - for(int i = 0; i < cnt; i++) { + for ( int i = 0; i < cnt; i++ ) { DBrush* pBrush = m_world.GetBrushForID( i ); - - if(pBrush->IntersectsWith( &p1, &p2, temp )) { + + if ( pBrush->IntersectsWith( &p1, &p2, temp ) ) { vec3_t diff; vec_t tempdist; - VectorSubtract(in, temp, diff); + VectorSubtract( in, temp, diff ); tempdist = VectorLength( diff ); - if(!found || (tempdist < dist)) { + if ( !found || ( tempdist < dist ) ) { dist = tempdist; VectorCopy( temp, out ); found = true; @@ -184,22 +185,22 @@ bool DTreePlanter::FindDropPoint(vec3_t in, vec3_t out) { void DTreePlanter::DropEntsToGround( void ) { // tell Radiant we want to access the selected brushes g_FuncTable.m_pfnAllocateSelectedBrushHandles(); - + DEntity ent; int cnt = g_FuncTable.m_pfnSelectedBrushCount(); - for(int i = 0; i < cnt; i++) { - brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(i); + for ( int i = 0; i < cnt; i++ ) { + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( i ); - ent.LoadFromEntity(brush->owner, TRUE); + ent.LoadFromEntity( brush->owner, TRUE ); - DEPair* pEpair = ent.FindEPairByKey("origin"); - if(!pEpair) { + DEPair* pEpair = ent.FindEPairByKey( "origin" ); + if ( !pEpair ) { continue; } vec3_t vec, out; - sscanf( pEpair->value.GetBuffer(), "%f %f %f", &vec[0], &vec[1], &vec[2]); + sscanf( pEpair->value.GetBuffer(), "%f %f %f", &vec[0], &vec[1], &vec[2] ); FindDropPoint( vec, out ); @@ -207,7 +208,7 @@ void DTreePlanter::DropEntsToGround( void ) { sprintf( buffer, "%f %f %f", out[0], out[1], out[2] ); ent.AddEPair( "origin", buffer ); ent.RemoveFromRadiant(); - ent.BuildInRadiant(FALSE); + ent.BuildInRadiant( FALSE ); } g_FuncTable.m_pfnReleaseSelectedBrushHandles(); @@ -217,8 +218,8 @@ void DTreePlanter::MakeChain( void ) { char buffer[256]; int i; - for(i = 0; i < m_linkNum; i++) { - DEntity e("info_train_spline_main"); + for ( i = 0; i < m_linkNum; i++ ) { + DEntity e( "info_train_spline_main" ); sprintf( buffer, "%s_pt%i", m_linkName, i ); e.AddEPair( "targetname", buffer ); @@ -226,8 +227,8 @@ void DTreePlanter::MakeChain( void ) { sprintf( buffer, "0 %i 0", i * 64 ); e.AddEPair( "origin", buffer ); - if(i != m_linkNum-1) { - sprintf( buffer, "%s_pt%i", m_linkName, i+1 ); + if ( i != m_linkNum - 1 ) { + sprintf( buffer, "%s_pt%i", m_linkName, i + 1 ); e.AddEPair( "target", buffer ); sprintf( buffer, "%s_ctl%i", m_linkName, i ); @@ -237,13 +238,13 @@ void DTreePlanter::MakeChain( void ) { e.BuildInRadiant( FALSE ); } - for(i = 0; i < m_linkNum-1; i++) { - DEntity e("info_train_spline_control"); + for ( i = 0; i < m_linkNum - 1; i++ ) { + DEntity e( "info_train_spline_control" ); sprintf( buffer, "%s_ctl%i", m_linkName, i ); e.AddEPair( "targetname", buffer ); - sprintf( buffer, "0 %i 0", (i * 64) + 32); + sprintf( buffer, "0 %i 0", ( i * 64 ) + 32 ); e.AddEPair( "origin", buffer ); e.BuildInRadiant( FALSE ); @@ -252,36 +253,36 @@ void DTreePlanter::MakeChain( void ) { void DTreePlanter::SelectChain( void ) { /* char buffer[256]; - - for(int i = 0; i < m_linkNum; i++) { - DEntity e("info_train_spline_main"); - sprintf( buffer, "%s_pt%i", m_linkName, i ); - e.AddEPair( "targetname", buffer ); + for(int i = 0; i < m_linkNum; i++) { + DEntity e("info_train_spline_main"); - sprintf( buffer, "0 %i 0", i * 64 ); - e.AddEPair( "origin", buffer ); + sprintf( buffer, "%s_pt%i", m_linkName, i ); + e.AddEPair( "targetname", buffer ); - if(i != m_linkNum-1) { - sprintf( buffer, "%s_pt%i", m_linkName, i+1 ); - e.AddEPair( "target", buffer ); + sprintf( buffer, "0 %i 0", i * 64 ); + e.AddEPair( "origin", buffer ); - sprintf( buffer, "%s_ctl%i", m_linkName, i ); - e.AddEPair( "control", buffer ); - } + if(i != m_linkNum-1) { + sprintf( buffer, "%s_pt%i", m_linkName, i+1 ); + e.AddEPair( "target", buffer ); - e.BuildInRadiant( FALSE ); - } + sprintf( buffer, "%s_ctl%i", m_linkName, i ); + e.AddEPair( "control", buffer ); + } - for(int i = 0; i < m_linkNum-1; i++) { - DEntity e("info_train_spline_control"); + e.BuildInRadiant( FALSE ); + } - sprintf( buffer, "%s_ctl%i", m_linkName, i ); - e.AddEPair( "targetname", buffer ); + for(int i = 0; i < m_linkNum-1; i++) { + DEntity e("info_train_spline_control"); - sprintf( buffer, "0 %i 0", (i * 64) + 32); - e.AddEPair( "origin", buffer ); + sprintf( buffer, "%s_ctl%i", m_linkName, i ); + e.AddEPair( "targetname", buffer ); - e.BuildInRadiant( FALSE ); - }*/ + sprintf( buffer, "0 %i 0", (i * 64) + 32); + e.AddEPair( "origin", buffer ); + + e.BuildInRadiant( FALSE ); + }*/ } diff --git a/contrib/bobtoolz/DTreePlanter.h b/contrib/bobtoolz/DTreePlanter.h index 9048e60b..b3eb8cc5 100644 --- a/contrib/bobtoolz/DTreePlanter.h +++ b/contrib/bobtoolz/DTreePlanter.h @@ -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 + */ #ifndef __DTREE_H__ #define __DTREE_H__ @@ -35,189 +35,200 @@ typedef struct treeModel_s { class DTreePlanter : public IWindowListener { public: - virtual bool OnMouseMove(guint32 nFlags, gdouble x, gdouble y); - virtual bool OnLButtonDown(guint32 nFlags, gdouble x, gdouble y); - virtual bool OnMButtonDown(guint32 nFlags, gdouble x, gdouble y); - virtual bool OnRButtonDown(guint32 nFlags, gdouble x, gdouble y); - virtual bool OnLButtonUp(guint32 nFlags, gdouble x, gdouble y); - virtual bool OnMButtonUp(guint32 nFlags, gdouble x, gdouble y); - virtual bool OnRButtonUp(guint32 nFlags, gdouble x, gdouble y); - virtual bool OnKeyPressed(char *s) { return false; } - virtual bool Paint() { return true; } - virtual void Close() { } - - DTreePlanter() { - m_refCount = 1; - m_hooked = false; - m_XYWrapper = NULL; - m_numModels = 0; - m_offset = 0; - m_maxPitch = 0; - m_minPitch = 0; - m_maxYaw = 0; - m_minYaw = 0; - m_setAngles = false; - m_useScale = false; - m_autoLink = false; - m_linkNum = 0; - - Register(); - - m_world.LoadSelectedBrushes(); - - char buffer[256]; - GetFilename( buffer, "bt/tp_ent.txt" ); - - FILE* file = fopen( buffer, "rb" ); - if(file) { - fseek( file, 0, SEEK_END ); - int len = ftell( file ); - fseek( file, 0, SEEK_SET ); - - if(len) { - char* buf = new char[len+1]; - buf[len] = '\0'; - // parser will do the cleanup, dont delete. - - fread( buf, len, 1, file ); - - CScriptParser parser; - parser.SetScript( buf ); - - ReadConfig( &parser ); - } - - fclose( file ); +virtual bool OnMouseMove( guint32 nFlags, gdouble x, gdouble y ); +virtual bool OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ); +virtual bool OnMButtonDown( guint32 nFlags, gdouble x, gdouble y ); +virtual bool OnRButtonDown( guint32 nFlags, gdouble x, gdouble y ); +virtual bool OnLButtonUp( guint32 nFlags, gdouble x, gdouble y ); +virtual bool OnMButtonUp( guint32 nFlags, gdouble x, gdouble y ); +virtual bool OnRButtonUp( guint32 nFlags, gdouble x, gdouble y ); +virtual bool OnKeyPressed( char *s ) { return false; } +virtual bool Paint() { return true; } +virtual void Close() { } + +DTreePlanter() { + m_refCount = 1; + m_hooked = false; + m_XYWrapper = NULL; + m_numModels = 0; + m_offset = 0; + m_maxPitch = 0; + m_minPitch = 0; + m_maxYaw = 0; + m_minYaw = 0; + m_setAngles = false; + m_useScale = false; + m_autoLink = false; + m_linkNum = 0; + + Register(); + + m_world.LoadSelectedBrushes(); + + char buffer[256]; + GetFilename( buffer, "bt/tp_ent.txt" ); + + FILE* file = fopen( buffer, "rb" ); + if ( file ) { + fseek( file, 0, SEEK_END ); + int len = ftell( file ); + fseek( file, 0, SEEK_SET ); + + if ( len ) { + char* buf = new char[len + 1]; + buf[len] = '\0'; + // parser will do the cleanup, dont delete. + + fread( buf, len, 1, file ); + + CScriptParser parser; + parser.SetScript( buf ); + + ReadConfig( &parser ); } + + fclose( file ); } +} -#define MT(t) !stricmp( pToken, t ) -#define GT pToken = pScriptParser->GetToken( true ) -#define CT if(!*pToken) { return; } +#define MT( t ) !stricmp( pToken, t ) +#define GT pToken = pScriptParser->GetToken( true ) +#define CT if ( !*pToken ) { return; } - void ReadConfig( CScriptParser* pScriptParser ) { - const char* GT; - CT; +void ReadConfig( CScriptParser* pScriptParser ) { + const char* GT; + CT; + + do { + GT; + if ( *pToken == '}' ) { + break; + } - do { - GT; - if(*pToken == '}') { - break; + if ( MT( "model" ) ) { + if ( m_numModels >= MAX_TP_MODELS ) { + return; } - if(MT("model")) { - if(m_numModels >= MAX_TP_MODELS) { - return; - } + GT; CT; - GT; CT; + strncpy( m_trees[m_numModels++].name, pToken, MAX_QPATH ); + } + else if ( MT( "link" ) ) { + GT; CT; - strncpy( m_trees[m_numModels++].name, pToken, MAX_QPATH ); - } else if(MT("link")) { - GT; CT; + strncpy( m_linkName, pToken, MAX_QPATH ); - strncpy( m_linkName, pToken, MAX_QPATH ); + m_autoLink = true; + } + else if ( MT( "entity" ) ) { + GT; CT; - m_autoLink = true; - } else if(MT("entity")) { - GT; CT; + strncpy( m_entType, pToken, MAX_QPATH ); + } + else if ( MT( "offset" ) ) { + GT; CT; - strncpy( m_entType, pToken, MAX_QPATH ); - } else if(MT("offset")) { - GT; CT; + m_offset = atoi( pToken ); + } + else if ( MT( "pitch" ) ) { + GT; CT; - m_offset = atoi(pToken); - } else if(MT("pitch")) { - GT; CT; + m_minPitch = atoi( pToken ); - m_minPitch = atoi(pToken); + GT; CT; - GT; CT; + m_maxPitch = atoi( pToken ); - m_maxPitch = atoi(pToken); + m_setAngles = true; + } + else if ( MT( "yaw" ) ) { + GT; CT; - m_setAngles = true; - } else if(MT("yaw")) { - GT; CT; + m_minYaw = atoi( pToken ); - m_minYaw = atoi(pToken); + GT; CT; - GT; CT; + m_maxYaw = atoi( pToken ); - m_maxYaw = atoi(pToken); + m_setAngles = true; + } + else if ( MT( "scale" ) ) { + GT; CT; - m_setAngles = true; - } else if(MT("scale")) { - GT; CT; + m_minScale = static_cast< float >( atof( pToken ) ); - m_minScale = static_cast< float >( atof( pToken ) ); + GT; CT; - GT; CT; + m_maxScale = static_cast< float >( atof( pToken ) ); - m_maxScale = static_cast< float >( atof( pToken ) ); + m_useScale = true; + } + else if ( MT( "numlinks" ) ) { + GT; CT; - m_useScale = true; - } else if(MT("numlinks")) { - GT; CT; + m_linkNum = atoi( pToken ); + } + } while ( true ); +} - m_linkNum = atoi( pToken ); - } - } while( true ); - } +virtual ~DTreePlanter() { + UnRegister(); +} - virtual ~DTreePlanter() { - UnRegister(); +virtual void IncRef() { m_refCount++; } +virtual void DecRef() { + m_refCount--; if ( m_refCount <= 0 ) { + delete this; } +} - virtual void IncRef() { m_refCount++; } - virtual void DecRef() { m_refCount--; if (m_refCount <= 0) delete this; } - - void Register() { - if(!m_hooked) { - g_MessageTable.m_pfnHookWindow( this ); - m_XYWrapper = g_MessageTable.m_pfnGetXYWndWrapper(); - m_hooked = true; - } +void Register() { + if ( !m_hooked ) { + g_MessageTable.m_pfnHookWindow( this ); + m_XYWrapper = g_MessageTable.m_pfnGetXYWndWrapper(); + m_hooked = true; } +} - void UnRegister() { - if(m_hooked) { - g_MessageTable.m_pfnUnHookWindow( this ); - m_XYWrapper = NULL; - m_hooked = false; - } +void UnRegister() { + if ( m_hooked ) { + g_MessageTable.m_pfnUnHookWindow( this ); + m_XYWrapper = NULL; + m_hooked = false; } +} - bool FindDropPoint(vec3_t in, vec3_t out); - void DropEntsToGround( void ); - void MakeChain( void ); - void SelectChain( void ); +bool FindDropPoint( vec3_t in, vec3_t out ); +void DropEntsToGround( void ); +void MakeChain( void ); +void SelectChain( void ); private: - IXYWndWrapper* m_XYWrapper; - DEntity m_world; - - treeModel_t m_trees[MAX_TP_MODELS]; - - int m_refCount; - int m_numModels; - int m_offset; - int m_maxPitch; - int m_minPitch; - int m_maxYaw; - int m_minYaw; - - char m_entType[MAX_QPATH]; - char m_linkName[MAX_QPATH]; - int m_linkNum; - - float m_minScale; - float m_maxScale; - - bool m_hooked; - bool m_useScale; - bool m_setAngles; - bool m_autoLink; +IXYWndWrapper* m_XYWrapper; +DEntity m_world; + +treeModel_t m_trees[MAX_TP_MODELS]; + +int m_refCount; +int m_numModels; +int m_offset; +int m_maxPitch; +int m_minPitch; +int m_maxYaw; +int m_minYaw; + +char m_entType[MAX_QPATH]; +char m_linkName[MAX_QPATH]; +int m_linkNum; + +float m_minScale; +float m_maxScale; + +bool m_hooked; +bool m_useScale; +bool m_setAngles; +bool m_autoLink; }; #endif diff --git a/contrib/bobtoolz/DVisDrawer.cpp b/contrib/bobtoolz/DVisDrawer.cpp index c03a9262..9ea6afdb 100644 --- a/contrib/bobtoolz/DVisDrawer.cpp +++ b/contrib/bobtoolz/DVisDrawer.cpp @@ -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 + */ // BobView.cpp: implementation of the DVisDrawer class. // @@ -31,17 +31,16 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DVisDrawer::DVisDrawer() -{ +DVisDrawer::DVisDrawer(){ refCount = 1; m_bHooked = FALSE; m_list = NULL; } -DVisDrawer::~DVisDrawer() -{ - if(m_bHooked) +DVisDrawer::~DVisDrawer(){ + if ( m_bHooked ) { UnRegister(); + } g_VisView = NULL; } @@ -50,97 +49,97 @@ DVisDrawer::~DVisDrawer() // Implementation ////////////////////////////////////////////////////////////////////// -void DVisDrawer::Draw2D(VIEWTYPE vt) -{ - if(!m_list) +void DVisDrawer::Draw2D( VIEWTYPE vt ){ + if ( !m_list ) { return; + } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - g_QglTable.m_pfn_qglDisable(GL_BLEND); - g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH); + g_QglTable.m_pfn_qglDisable( GL_BLEND ); + g_QglTable.m_pfn_qglDisable( GL_LINE_SMOOTH ); g_QglTable.m_pfn_qglPushMatrix(); - - switch(vt) + + switch ( vt ) { case XY: break; case XZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); break; case YZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); - g_QglTable.m_pfn_qglRotatef(270.0f, 0.0f, 0.0f, 1.0f); + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); + g_QglTable.m_pfn_qglRotatef( 270.0f, 0.0f, 0.0f, 1.0f ); break; } - g_QglTable.m_pfn_qglLineWidth(1.0f); - g_QglTable.m_pfn_qglColor4f(1.0f, 0.0f, 0.0f, 0.5f); + g_QglTable.m_pfn_qglLineWidth( 1.0f ); + g_QglTable.m_pfn_qglColor4f( 1.0f, 0.0f, 0.0f, 0.5f ); - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH); + g_QglTable.m_pfn_qglEnable( GL_BLEND ); + g_QglTable.m_pfn_qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + g_QglTable.m_pfn_qglDisable( GL_POLYGON_SMOOTH ); - g_QglTable.m_pfn_qglDepthFunc(GL_ALWAYS); + g_QglTable.m_pfn_qglDepthFunc( GL_ALWAYS ); //bleh - list::const_iterator l=m_list->begin(); + list::const_iterator l = m_list->begin(); - for(; l != m_list->end(); l++) + for (; l != m_list->end(); l++ ) { DWinding* w = *l; - g_QglTable.m_pfn_qglColor4f(w->clr[0], w->clr[1], w->clr[2], 0.5f); + g_QglTable.m_pfn_qglColor4f( w->clr[0], w->clr[1], w->clr[2], 0.5f ); - g_QglTable.m_pfn_qglBegin(GL_POLYGON); - for(int i = 0; i < w->numpoints; i++) { - g_QglTable.m_pfn_qglVertex3f((w->p[i])[0], (w->p[i])[1], (w->p[i])[2]); + g_QglTable.m_pfn_qglBegin( GL_POLYGON ); + for ( int i = 0; i < w->numpoints; i++ ) { + g_QglTable.m_pfn_qglVertex3f( ( w->p[i] )[0], ( w->p[i] )[1], ( w->p[i] )[2] ); } g_QglTable.m_pfn_qglEnd(); } - + g_QglTable.m_pfn_qglPopMatrix(); g_QglTable.m_pfn_qglPopAttrib(); } -void DVisDrawer::Draw3D() -{ - if(!m_list) +void DVisDrawer::Draw3D(){ + if ( !m_list ) { return; + } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - g_QglTable.m_pfn_qglColor4f(1.0, 0.0, 0.0, 0.5f); + g_QglTable.m_pfn_qglColor4f( 1.0, 0.0, 0.0, 0.5f ); // g_QglTable.m_pfn_qglHint(GL_FOG_HINT, GL_NICEST); - + // g_QglTable.m_pfn_qglDisable(GL_CULL_FACE); - g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH); + g_QglTable.m_pfn_qglDisable( GL_LINE_SMOOTH ); // g_QglTable.m_pfn_qglPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // g_QglTable.m_pfn_qglShadeModel(GL_SMOOTH); - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH); + g_QglTable.m_pfn_qglEnable( GL_BLEND ); + g_QglTable.m_pfn_qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + g_QglTable.m_pfn_qglDisable( GL_POLYGON_SMOOTH ); - g_QglTable.m_pfn_qglDepthFunc(GL_ALWAYS); + g_QglTable.m_pfn_qglDepthFunc( GL_ALWAYS ); //bleh - list::const_iterator l=m_list->begin(); + list::const_iterator l = m_list->begin(); - for(; l != m_list->end(); l++) + for (; l != m_list->end(); l++ ) { DWinding* w = *l; - g_QglTable.m_pfn_qglColor4f(w->clr[0], w->clr[1], w->clr[2], 0.5f); + g_QglTable.m_pfn_qglColor4f( w->clr[0], w->clr[1], w->clr[2], 0.5f ); - g_QglTable.m_pfn_qglBegin(GL_POLYGON); - for(int i = 0; i < w->numpoints; i++) { - g_QglTable.m_pfn_qglVertex3f((w->p[i])[0], (w->p[i])[1], (w->p[i])[2]); + g_QglTable.m_pfn_qglBegin( GL_POLYGON ); + for ( int i = 0; i < w->numpoints; i++ ) { + g_QglTable.m_pfn_qglVertex3f( ( w->p[i] )[0], ( w->p[i] )[1], ( w->p[i] )[2] ); } g_QglTable.m_pfn_qglEnd(); } @@ -148,32 +147,29 @@ void DVisDrawer::Draw3D() g_QglTable.m_pfn_qglPopAttrib(); } -void DVisDrawer::Register() -{ +void DVisDrawer::Register(){ g_QglTable.m_pfnHookGL2DWindow( this ); g_QglTable.m_pfnHookGL3DWindow( this ); m_bHooked = TRUE; } -void DVisDrawer::UnRegister() -{ +void DVisDrawer::UnRegister(){ g_QglTable.m_pfnUnHookGL2DWindow( this ); g_QglTable.m_pfnUnHookGL3DWindow( this ); m_bHooked = FALSE; } -void DVisDrawer::SetList(list *pointList) -{ - if(m_list) +void DVisDrawer::SetList( list *pointList ){ + if ( m_list ) { ClearPoints(); + } m_list = pointList; } -void DVisDrawer::ClearPoints() -{ - list::const_iterator deadPoint=m_list->begin(); - for(; deadPoint!=m_list->end(); deadPoint++) +void DVisDrawer::ClearPoints(){ + list::const_iterator deadPoint = m_list->begin(); + for (; deadPoint != m_list->end(); deadPoint++ ) delete *deadPoint; m_list->clear(); } diff --git a/contrib/bobtoolz/DVisDrawer.h b/contrib/bobtoolz/DVisDrawer.h index 2f9ac315..1e9f82e4 100644 --- a/contrib/bobtoolz/DVisDrawer.h +++ b/contrib/bobtoolz/DVisDrawer.h @@ -1,27 +1,27 @@ /* -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 + */ // DBobView.h: interface for the DBobView class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_VISDRAWER_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_VISDRAWER_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_VISDRAWER_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_ #include "DWinding.h" @@ -31,28 +31,32 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #pragma once #endif // _MSC_VER > 1000 -class DVisDrawer : - public IGL2DWindow, - public IGL3DWindow +class DVisDrawer : + public IGL2DWindow, + public IGL3DWindow { public: - DVisDrawer(); - virtual ~DVisDrawer(); +DVisDrawer(); +virtual ~DVisDrawer(); protected: - list* m_list; - int refCount; +list* m_list; +int refCount; public: - void ClearPoints(); - void SetList(list* pointList); - void UnRegister(); - void Register(); - void Draw3D(); - void Draw2D(VIEWTYPE vt); - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } - - bool m_bHooked; +void ClearPoints(); +void SetList( list* pointList ); +void UnRegister(); +void Register(); +void Draw3D(); +void Draw2D( VIEWTYPE vt ); +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} + +bool m_bHooked; }; #endif // !defined(AFX_VISDRAWER_H__6E36062A_EF0B_11D4_ACF7_004095A18133__INCLUDED_) diff --git a/contrib/bobtoolz/DWinding.cpp b/contrib/bobtoolz/DWinding.cpp index 118d6be3..35983fea 100644 --- a/contrib/bobtoolz/DWinding.cpp +++ b/contrib/bobtoolz/DWinding.cpp @@ -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 + */ // DWinding.cpp: implementation of the DWinding class. // @@ -30,315 +30,323 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Construction/Destruction ////////////////////////////////////////////////////////////////////// -DWinding::DWinding() -{ +DWinding::DWinding(){ numpoints = 0; p = NULL; } -DWinding::~DWinding() -{ - if(p) +DWinding::~DWinding(){ + if ( p ) { delete[] p; + } } ////////////////////////////////////////////////////////////////////// // Implementation ////////////////////////////////////////////////////////////////////// -#define BOGUS_RANGE 4096 +#define BOGUS_RANGE 4096 -void DWinding::AllocWinding(int points) -{ +void DWinding::AllocWinding( int points ){ numpoints = points; - if(p) + if ( p ) { delete[] p; + } p = new vec3_t[points]; } -vec_t DWinding::WindingArea() -{ - vec3_t d1, d2, cross; - vec_t total; +vec_t DWinding::WindingArea(){ + vec3_t d1, d2, cross; + vec_t total; total = 0; - for (int i = 2; i < numpoints ; i++) + for ( int i = 2; i < numpoints ; i++ ) { - VectorSubtract (p[i-1], p[0], d1); - VectorSubtract (p[i], p[0], d2); + VectorSubtract( p[i - 1], p[0], d1 ); + VectorSubtract( p[i], p[0], d2 ); - CrossProduct (d1, d2, cross); + CrossProduct( d1, d2, cross ); - total += 0.5f * VectorLength ( cross ); + total += 0.5f * VectorLength( cross ); } return total; } -void DWinding::RemoveColinearPoints() -{ - vec3_t p2[MAX_POINTS_ON_WINDING]; +void DWinding::RemoveColinearPoints(){ + vec3_t p2[MAX_POINTS_ON_WINDING]; int nump = 0; - for (int i = 0; i < numpoints; i++) + for ( int i = 0; i < numpoints; i++ ) { - int j = (i+1)%numpoints; - int k = (i+numpoints-1)%numpoints; + int j = ( i + 1 ) % numpoints; + int k = ( i + numpoints - 1 ) % numpoints; - vec3_t v1, v2; - VectorSubtract (p[j], p[i], v1); - VectorSubtract (p[i], p[k], v2); - VectorNormalize(v1, v1); - VectorNormalize(v2, v2); + vec3_t v1, v2; + VectorSubtract( p[j], p[i], v1 ); + VectorSubtract( p[i], p[k], v2 ); + VectorNormalize( v1, v1 ); + VectorNormalize( v2, v2 ); - if (DotProduct(v1, v2) < 0.999) - { - VectorCopy (p[i], p2[nump]); + if ( DotProduct( v1, v2 ) < 0.999 ) { + VectorCopy( p[i], p2[nump] ); nump++; } } - if (nump == numpoints) + if ( nump == numpoints ) { return; + } - AllocWinding(nump); - memcpy (p, p2, nump*sizeof(vec3_t)); + AllocWinding( nump ); + memcpy( p, p2, nump * sizeof( vec3_t ) ); } -DPlane* DWinding::WindingPlane() -{ - DPlane* newPlane = new DPlane(p[0], p[1], p[2], NULL); +DPlane* DWinding::WindingPlane(){ + DPlane* newPlane = new DPlane( p[0], p[1], p[2], NULL ); return newPlane; } -void DWinding::WindingBounds(vec3_t mins, vec3_t maxs) -{ - if(numpoints == 0) +void DWinding::WindingBounds( vec3_t mins, vec3_t maxs ){ + if ( numpoints == 0 ) { return; + } - VectorCopy(mins, p[0]); - VectorCopy(maxs, p[0]); + VectorCopy( mins, p[0] ); + VectorCopy( maxs, p[0] ); - for (int i = 1; i < numpoints ;i++) + for ( int i = 1; i < numpoints ; i++ ) { - for (int j = 0; j < 3; j++) + for ( int j = 0; j < 3; j++ ) { vec_t v = p[i][j]; - if (v < mins[j]) + if ( v < mins[j] ) { mins[j] = v; - if (v > maxs[j]) + } + if ( v > maxs[j] ) { maxs[j] = v; + } } } } -void DWinding::WindingCentre(vec3_t centre) -{ - VectorCopy (vec3_origin, centre); - for (int i = 0; i < numpoints; i++) - VectorAdd (p[i], centre, centre); +void DWinding::WindingCentre( vec3_t centre ){ + VectorCopy( vec3_origin, centre ); + for ( int i = 0; i < numpoints; i++ ) + VectorAdd( p[i], centre, centre ); - float scale = 1.0f/numpoints; - VectorScale (centre, scale, centre); + float scale = 1.0f / numpoints; + VectorScale( centre, scale, centre ); } -DWinding* DWinding::CopyWinding() -{ +DWinding* DWinding::CopyWinding(){ DWinding* c = new DWinding; - c->AllocWinding(numpoints); - memcpy (c->p, p, numpoints*sizeof(vec3_t)); + c->AllocWinding( numpoints ); + memcpy( c->p, p, numpoints * sizeof( vec3_t ) ); return c; } -int DWinding::WindingOnPlaneSide(vec3_t normal, vec_t dist) -{ +int DWinding::WindingOnPlaneSide( vec3_t normal, vec_t dist ){ bool front = FALSE; bool back = FALSE; - for (int i = 0; i < numpoints; i++) + for ( int i = 0; i < numpoints; i++ ) { - vec_t d = DotProduct (p[i], normal) - dist; - if (d < -ON_EPSILON) - { - if (front) + vec_t d = DotProduct( p[i], normal ) - dist; + if ( d < -ON_EPSILON ) { + if ( front ) { return SIDE_CROSS; + } back = TRUE; continue; } - if (d > ON_EPSILON) - { - if (back) + if ( d > ON_EPSILON ) { + if ( back ) { return SIDE_CROSS; + } front = TRUE; continue; } } - if (back) + if ( back ) { return SIDE_BACK; - if (front) + } + if ( front ) { return SIDE_FRONT; + } return SIDE_ON; } -void DWinding::CheckWinding() -{ - vec_t *p1, *p2; - vec_t edgedist; - vec3_t dir, edgenormal; +void DWinding::CheckWinding(){ + vec_t *p1, *p2; + vec_t edgedist; + vec3_t dir, edgenormal; + + if ( numpoints < 3 ) { + Sys_Printf( "CheckWinding: %i points", numpoints ); + } - if (numpoints < 3) - Sys_Printf ("CheckWinding: %i points", numpoints); - vec_t area = WindingArea(); - if (area < 1) - Sys_Printf ("CheckWinding: %f area", area); + if ( area < 1 ) { + Sys_Printf( "CheckWinding: %f area", area ); + } - DPlane* wPlane = WindingPlane (); + DPlane* wPlane = WindingPlane(); int i; - for (i = 0; i < numpoints; i++) + for ( i = 0; i < numpoints; i++ ) { p1 = p[i]; int j; - for (j = 0; j < 3; j++) - if (p1[j] > BOGUS_RANGE || p1[j] < -BOGUS_RANGE) - Sys_Printf ("CheckFace: BUGUS_RANGE: %f", p1[j]); + for ( j = 0; j < 3; j++ ) + if ( p1[j] > BOGUS_RANGE || p1[j] < -BOGUS_RANGE ) { + Sys_Printf( "CheckFace: BUGUS_RANGE: %f", p1[j] ); + } j = i + 1 == numpoints ? 0 : i + 1; - + // check the point is on the face plane - vec_t d = DotProduct (p1, wPlane->normal) - wPlane->_d; - if (d < -ON_EPSILON || d > ON_EPSILON) - Sys_Printf ("CheckWinding: point off plane"); - + vec_t d = DotProduct( p1, wPlane->normal ) - wPlane->_d; + if ( d < -ON_EPSILON || d > ON_EPSILON ) { + Sys_Printf( "CheckWinding: point off plane" ); + } + // check the edge isnt degenerate p2 = p[j]; - VectorSubtract (p2, p1, dir); - - if (VectorLength (dir) < ON_EPSILON) - Sys_Printf ("CheckWinding: degenerate edge"); - - CrossProduct (wPlane->normal, dir, edgenormal); - VectorNormalize (edgenormal, edgenormal); - edgedist = DotProduct (p1, edgenormal); - + VectorSubtract( p2, p1, dir ); + + if ( VectorLength( dir ) < ON_EPSILON ) { + Sys_Printf( "CheckWinding: degenerate edge" ); + } + + CrossProduct( wPlane->normal, dir, edgenormal ); + VectorNormalize( edgenormal, edgenormal ); + edgedist = DotProduct( p1, edgenormal ); + // all other points must be on front side - for (j = 0 ; j < numpoints ; j++) + for ( j = 0 ; j < numpoints ; j++ ) { - if (j == i) + if ( j == i ) { continue; + } - d = DotProduct (p[j], edgenormal); - if (d > (edgedist + ON_EPSILON)) - Sys_Printf ("CheckWinding: non-convex"); + d = DotProduct( p[j], edgenormal ); + if ( d > ( edgedist + ON_EPSILON ) ) { + Sys_Printf( "CheckWinding: non-convex" ); + } } } delete wPlane; } -DWinding* DWinding::ReverseWinding() -{ +DWinding* DWinding::ReverseWinding(){ DWinding* c = new DWinding; - c->AllocWinding(numpoints); + c->AllocWinding( numpoints ); - for (int i = 0; i < numpoints ; i++) - VectorCopy (p[numpoints-1-i], c->p[i]); + for ( int i = 0; i < numpoints ; i++ ) + VectorCopy( p[numpoints - 1 - i], c->p[i] ); return c; } -bool DWinding::ChopWindingInPlace(DPlane* chopPlane, vec_t epsilon) -{ - vec_t dists[MAX_POINTS_ON_WINDING+4]; - int sides[MAX_POINTS_ON_WINDING+4]; - int counts[3]; - vec_t *p1, *p2; - vec3_t mid; +bool DWinding::ChopWindingInPlace( DPlane* chopPlane, vec_t epsilon ){ + vec_t dists[MAX_POINTS_ON_WINDING + 4]; + int sides[MAX_POINTS_ON_WINDING + 4]; + int counts[3]; + vec_t *p1, *p2; + vec3_t mid; counts[0] = counts[1] = counts[2] = 0; // determine sides for each point - int i; - for (i = 0; i < numpoints; i++) + int i; + for ( i = 0; i < numpoints; i++ ) { - vec_t dot = DotProduct (p[i], chopPlane->normal); + vec_t dot = DotProduct( p[i], chopPlane->normal ); dot -= chopPlane->_d; dists[i] = dot; - - if (dot > epsilon) + + if ( dot > epsilon ) { sides[i] = SIDE_FRONT; - else if (dot < -epsilon) + } + else if ( dot < -epsilon ) { sides[i] = SIDE_BACK; - else + } + else{ sides[i] = SIDE_ON; + } counts[sides[i]]++; } sides[i] = sides[0]; dists[i] = dists[0]; - - if (!counts[0]) - { + + if ( !counts[0] ) { delete this; return FALSE; } - if (!counts[1]) + if ( !counts[1] ) { return TRUE; + } - int maxpts = numpoints+4; // cant use counts[0]+2 because - // of fp grouping errors + int maxpts = numpoints + 4; // cant use counts[0]+2 because + // of fp grouping errors DWinding* f = new DWinding; - f->AllocWinding(maxpts); + f->AllocWinding( maxpts ); f->numpoints = 0; - - for (i = 0; i < numpoints; i++) + + for ( i = 0; i < numpoints; i++ ) { p1 = p[i]; - - if (sides[i] == SIDE_ON) - { - VectorCopy (p1, f->p[f->numpoints]); + + if ( sides[i] == SIDE_ON ) { + VectorCopy( p1, f->p[f->numpoints] ); f->numpoints++; continue; } - - if (sides[i] == SIDE_FRONT) - { - VectorCopy (p1, f->p[f->numpoints]); + + if ( sides[i] == SIDE_FRONT ) { + VectorCopy( p1, f->p[f->numpoints] ); f->numpoints++; } - if (sides[i+1] == SIDE_ON || sides[i+1] == sides[i]) + if ( sides[i + 1] == SIDE_ON || sides[i + 1] == sides[i] ) { continue; - - // generate a split point - p2 = p[(i+1)%numpoints]; - - vec_t dot = dists[i] / (dists[i]-dists[i+1]); - for (int j = 0; j < 3; j++) + } + + // generate a split point + p2 = p[( i + 1 ) % numpoints]; + + vec_t dot = dists[i] / ( dists[i] - dists[i + 1] ); + for ( int j = 0; j < 3; j++ ) { - if (chopPlane->normal[j] == 1) + if ( chopPlane->normal[j] == 1 ) { mid[j] = chopPlane->_d; - else if (chopPlane->normal[j] == -1) + } + else if ( chopPlane->normal[j] == -1 ) { mid[j] = -chopPlane->_d; - else - mid[j] = p1[j] + dot*(p2[j]-p1[j]); + } + else{ + mid[j] = p1[j] + dot * ( p2[j] - p1[j] ); + } } - - VectorCopy (mid, f->p[f->numpoints]); + + VectorCopy( mid, f->p[f->numpoints] ); f->numpoints++; } - - if (f->numpoints > maxpts) - Sys_Printf ("ClipWinding: points exceeded estimate"); - if (f->numpoints > MAX_POINTS_ON_WINDING) - Sys_Printf ("ClipWinding: MAX_POINTS_ON_WINDING"); + + if ( f->numpoints > maxpts ) { + Sys_Printf( "ClipWinding: points exceeded estimate" ); + } + if ( f->numpoints > MAX_POINTS_ON_WINDING ) { + Sys_Printf( "ClipWinding: MAX_POINTS_ON_WINDING" ); + } delete[] p; p = f->p; @@ -347,128 +355,130 @@ bool DWinding::ChopWindingInPlace(DPlane* chopPlane, vec_t epsilon) return TRUE; } -void DWinding::ClipWindingEpsilon(DPlane* chopPlane, vec_t epsilon, DWinding **front, DWinding **back) -{ - vec_t dists[MAX_POINTS_ON_WINDING+4]; - int sides[MAX_POINTS_ON_WINDING+4]; - int counts[3]; - vec_t *p1, *p2; - vec3_t mid; - +void DWinding::ClipWindingEpsilon( DPlane* chopPlane, vec_t epsilon, DWinding **front, DWinding **back ){ + vec_t dists[MAX_POINTS_ON_WINDING + 4]; + int sides[MAX_POINTS_ON_WINDING + 4]; + int counts[3]; + vec_t *p1, *p2; + vec3_t mid; + counts[0] = counts[1] = counts[2] = 0; // determine sides for each point - int i; - for (i = 0; i < numpoints; i++) + int i; + for ( i = 0; i < numpoints; i++ ) { - vec_t dot = -chopPlane->DistanceToPoint(p[i]); + vec_t dot = -chopPlane->DistanceToPoint( p[i] ); dists[i] = dot; - - if (dot > epsilon) + + if ( dot > epsilon ) { sides[i] = SIDE_FRONT; - else if (dot < -epsilon) + } + else if ( dot < -epsilon ) { sides[i] = SIDE_BACK; - else + } + else{ sides[i] = SIDE_ON; + } counts[sides[i]]++; } sides[i] = sides[0]; dists[i] = dists[0]; - + *front = *back = NULL; - if (!counts[0]) - { + if ( !counts[0] ) { *back = CopyWinding(); return; } - if (!counts[1]) - { + if ( !counts[1] ) { *front = CopyWinding(); return; } - int maxpts = numpoints+4; // cant use counts[0]+2 because - // of fp grouping errors + int maxpts = numpoints + 4; // cant use counts[0]+2 because + // of fp grouping errors DWinding* f = new DWinding; DWinding* b = new DWinding; - f->AllocWinding(maxpts); + f->AllocWinding( maxpts ); f->numpoints = 0; - b->AllocWinding(maxpts); + b->AllocWinding( maxpts ); b->numpoints = 0; - + *front = f; *back = b; - for (i = 0; i < numpoints ; i++) + for ( i = 0; i < numpoints ; i++ ) { p1 = p[i]; - - if (sides[i] == SIDE_ON) - { - VectorCopy (p1, f->p[f->numpoints]); + + if ( sides[i] == SIDE_ON ) { + VectorCopy( p1, f->p[f->numpoints] ); f->numpoints++; - VectorCopy (p1, b->p[b->numpoints]); + VectorCopy( p1, b->p[b->numpoints] ); b->numpoints++; continue; } - - if (sides[i] == SIDE_FRONT) - { - VectorCopy (p1, f->p[f->numpoints]); + + if ( sides[i] == SIDE_FRONT ) { + VectorCopy( p1, f->p[f->numpoints] ); f->numpoints++; } - if (sides[i] == SIDE_BACK) - { - VectorCopy (p1, b->p[b->numpoints]); + if ( sides[i] == SIDE_BACK ) { + VectorCopy( p1, b->p[b->numpoints] ); b->numpoints++; } - if (sides[i+1] == SIDE_ON || sides[i+1] == sides[i]) + if ( sides[i + 1] == SIDE_ON || sides[i + 1] == sides[i] ) { continue; - - // generate a split point - p2 = p[(i+1)%numpoints]; - - vec_t dot = dists[i] / (dists[i]-dists[i+1]); - for (int j = 0; j < 3; j++) + } + + // generate a split point + p2 = p[( i + 1 ) % numpoints]; + + vec_t dot = dists[i] / ( dists[i] - dists[i + 1] ); + for ( int j = 0; j < 3; j++ ) { - if (chopPlane->normal[j] == 1) + if ( chopPlane->normal[j] == 1 ) { mid[j] = chopPlane->_d; - else if (chopPlane->normal[j] == -1) + } + else if ( chopPlane->normal[j] == -1 ) { mid[j] = -chopPlane->_d; - else - mid[j] = p1[j] + dot*(p2[j]-p1[j]); + } + else{ + mid[j] = p1[j] + dot * ( p2[j] - p1[j] ); + } } - - VectorCopy (mid, f->p[f->numpoints]); + + VectorCopy( mid, f->p[f->numpoints] ); f->numpoints++; - VectorCopy (mid, b->p[b->numpoints]); + VectorCopy( mid, b->p[b->numpoints] ); b->numpoints++; } - - if (f->numpoints > maxpts || b->numpoints > maxpts) - Sys_Printf ("ClipWinding: points exceeded estimate"); - if (f->numpoints > MAX_POINTS_ON_WINDING || b->numpoints > MAX_POINTS_ON_WINDING) - Sys_Printf ("ClipWinding: MAX_POINTS_ON_WINDING"); + + if ( f->numpoints > maxpts || b->numpoints > maxpts ) { + Sys_Printf( "ClipWinding: points exceeded estimate" ); + } + if ( f->numpoints > MAX_POINTS_ON_WINDING || b->numpoints > MAX_POINTS_ON_WINDING ) { + Sys_Printf( "ClipWinding: MAX_POINTS_ON_WINDING" ); + } } -bool DWinding::ChopWinding(DPlane* chopPlane) -{ +bool DWinding::ChopWinding( DPlane* chopPlane ){ DWinding *f, *b; - ClipWindingEpsilon (chopPlane, (float)ON_EPSILON, &f, &b); + ClipWindingEpsilon( chopPlane, (float)ON_EPSILON, &f, &b ); - if (b) - delete (b); + if ( b ) { + delete ( b ); + } - if(!f) - { + if ( !f ) { delete this; return FALSE; } diff --git a/contrib/bobtoolz/DWinding.h b/contrib/bobtoolz/DWinding.h index 6d58e06e..547b8fc3 100644 --- a/contrib/bobtoolz/DWinding.h +++ b/contrib/bobtoolz/DWinding.h @@ -1,27 +1,27 @@ /* -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 + */ // DWinding.h: interface for the DWinding class. // ////////////////////////////////////////////////////////////////////// -#if !defined(AFX_DWINDING_H__35B2C524_F0A7_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_DWINDING_H__35B2C524_F0A7_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_DWINDING_H__35B2C524_F0A7_11D4_ACF7_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -30,39 +30,39 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA class DPlane; -class DWinding +class DWinding { public: - DWinding(); - virtual ~DWinding(); +DWinding(); +virtual ~DWinding(); - void AllocWinding(int points); +void AllocWinding( int points ); - bool ChopWinding(DPlane* chopPlane); - bool ChopWindingInPlace(DPlane* chopPlane, vec_t ON_EPSILON); - void ClipWindingEpsilon(DPlane* chopPlane, vec_t epsilon, DWinding** front, DWinding** back); +bool ChopWinding( DPlane* chopPlane ); +bool ChopWindingInPlace( DPlane* chopPlane, vec_t ON_EPSILON ); +void ClipWindingEpsilon( DPlane* chopPlane, vec_t epsilon, DWinding** front, DWinding** back ); - void CheckWinding(); - void WindingCentre(vec3_t centre); - void WindingBounds(vec3_t mins, vec3_t maxs); - void RemoveColinearPoints(); +void CheckWinding(); +void WindingCentre( vec3_t centre ); +void WindingBounds( vec3_t mins, vec3_t maxs ); +void RemoveColinearPoints(); - DWinding* ReverseWinding(); - DWinding* CopyWinding(); - DPlane* WindingPlane(); +DWinding* ReverseWinding(); +DWinding* CopyWinding(); +DPlane* WindingPlane(); - int WindingOnPlaneSide(vec3_t normal, vec_t dist); +int WindingOnPlaneSide( vec3_t normal, vec_t dist ); - vec_t WindingArea(); +vec_t WindingArea(); // members - int numpoints; - vec3_t* p; - vec3_t clr; +int numpoints; +vec3_t* p; +vec3_t clr; }; -#define MAX_POINTS_ON_WINDING 64 +#define MAX_POINTS_ON_WINDING 64 -#define ON_EPSILON 0.01 +#define ON_EPSILON 0.01 #endif // !defined(AFX_DWINDING_H__35B2C524_F0A7_11D4_ACF7_004095A18133__INCLUDED_) diff --git a/contrib/bobtoolz/ScriptParser.cpp b/contrib/bobtoolz/ScriptParser.cpp index 012e531a..21f9f14f 100644 --- a/contrib/bobtoolz/ScriptParser.cpp +++ b/contrib/bobtoolz/ScriptParser.cpp @@ -1,54 +1,54 @@ #include "StdAfx.h" #include "ScriptParser.h" -CScriptParser::CScriptParser(void): - m_pScript(NULL), - m_pScriptSection(NULL), - m_pLastScriptSection(NULL), - m_pToken(NULL) { +CScriptParser::CScriptParser( void ) : + m_pScript( NULL ), + m_pScriptSection( NULL ), + m_pLastScriptSection( NULL ), + m_pToken( NULL ) { ClearBuffer(); } -CScriptParser::~CScriptParser(void) { +CScriptParser::~CScriptParser( void ) { ClearBuffer(); } -void CScriptParser::ClearBuffer(void) { - if(m_pScript) { +void CScriptParser::ClearBuffer( void ) { + if ( m_pScript ) { delete[] m_pScript; m_pScript = NULL; } - if(m_pToken) { + if ( m_pToken ) { delete[] m_pToken; m_pToken = NULL; } m_pScriptSection = NULL; m_pLastScriptSection = NULL; - memset(m_breakChars, 0, sizeof(m_breakChars)); + memset( m_breakChars, 0, sizeof( m_breakChars ) ); } -const char* CScriptParser::MakeToken(const char* pToken) { - if(m_pToken) { +const char* CScriptParser::MakeToken( const char* pToken ) { + if ( m_pToken ) { delete[] m_pToken; m_pToken = NULL; } - if(!pToken) { + if ( !pToken ) { pToken = ""; } - int len = static_cast(strlen(pToken)); + int len = static_cast( strlen( pToken ) ); m_pToken = new char[len + 1]; m_pToken[len] = '\0'; - strcpy(m_pToken, pToken); + strcpy( m_pToken, pToken ); return m_pToken; } #define MAX_TOKEN_STRING 1024 // Should NEVER return NULL -const char* CScriptParser::GetToken(bool bAllowLinebreaks) { +const char* CScriptParser::GetToken( bool bAllowLinebreaks ) { int c = 0, len; char token[MAX_TOKEN_STRING]; bool bNewLines = false; @@ -58,27 +58,28 @@ const char* CScriptParser::GetToken(bool bAllowLinebreaks) { len = 0; *token = '\0'; - if(!m_pScript || !m_pScriptSection) { - return MakeToken(token); + if ( !m_pScript || !m_pScriptSection ) { + return MakeToken( token ); } while ( true ) { SkipWhitespace( &bNewLines ); if ( !*m_pScriptSection ) { - return MakeToken(token); + return MakeToken( token ); } if ( bNewLines && !bAllowLinebreaks ) { - return MakeToken(token); + return MakeToken( token ); } c = *m_pScriptSection; - + if ( c == '/' && m_pScriptSection[1] == '/' ) { // C style comments m_pScriptSection += 2; - while (*m_pScriptSection && *m_pScriptSection != '\n') { + while ( *m_pScriptSection && *m_pScriptSection != '\n' ) { m_pScriptSection++; } - } else if ( c=='/' && m_pScriptSection[1] == '*' ) { // C++ style comments + } + else if ( c == '/' && m_pScriptSection[1] == '*' ) { // C++ style comments m_pScriptSection += 2; while ( *m_pScriptSection && ( *m_pScriptSection != '*' || m_pScriptSection[1] != '/' ) ) { m_pScriptSection++; @@ -86,20 +87,21 @@ const char* CScriptParser::GetToken(bool bAllowLinebreaks) { if ( *m_pScriptSection ) { m_pScriptSection += 2; } - } else { + } + else { break; } } - if (c == '\"') { + if ( c == '\"' ) { m_pScriptSection++; while ( true ) { c = *m_pScriptSection++; - if (c=='\"' || !c) { + if ( c == '\"' || !c ) { token[len] = 0; - return MakeToken(token); + return MakeToken( token ); } - if (len < MAX_TOKEN_STRING) { + if ( len < MAX_TOKEN_STRING ) { token[len] = c; len++; } @@ -107,72 +109,73 @@ const char* CScriptParser::GetToken(bool bAllowLinebreaks) { } do { - if(len > 0 && IsBreakChar(*m_pScriptSection)) { + if ( len > 0 && IsBreakChar( *m_pScriptSection ) ) { break; } - if (len < MAX_TOKEN_STRING) { + if ( len < MAX_TOKEN_STRING ) { token[len] = c; len++; } m_pScriptSection++; - if(IsBreakChar(c)) { + if ( IsBreakChar( c ) ) { break; } c = *m_pScriptSection; - } while (c > 32); + } while ( c > 32 ); - if (len == MAX_TOKEN_STRING) { + if ( len == MAX_TOKEN_STRING ) { len = 0; } token[len] = 0; - return MakeToken(token); + return MakeToken( token ); } -void CScriptParser::SkipWhitespace(bool* pbNewLines) { +void CScriptParser::SkipWhitespace( bool* pbNewLines ) { int c; - if(!m_pScript || !m_pScriptSection) { + if ( !m_pScript || !m_pScriptSection ) { return; } - while( (c = *m_pScriptSection) <= ' ') { - if( !c ) { + while ( ( c = *m_pScriptSection ) <= ' ' ) { + if ( !c ) { return; } - if( c == '\n' ) { + if ( c == '\n' ) { *pbNewLines = true; } m_pScriptSection++; } } -void CScriptParser::SkipBracedSection(void) { - const char *token; - int depth; +void CScriptParser::SkipBracedSection( void ) { + const char *token; + int depth; depth = 0; do { token = GetToken( true ); - if( token[1] == 0 ) { - if( *token == '{' ) { + if ( token[1] == 0 ) { + if ( *token == '{' ) { depth++; - } else if( *token == '}' ) { + } + else if ( *token == '}' ) { depth--; } } - } while( depth && *m_pScriptSection ); + } while ( depth && *m_pScriptSection ); } -void CScriptParser::SkipRestOfLine(void) { - char *p; - int c; +void CScriptParser::SkipRestOfLine( void ) { + char *p; + int c; p = m_pScriptSection; - while ( (c = *p++) != 0 ) { + while ( ( c = *p++ ) != 0 ) { if ( c == '\n' ) { break; } @@ -180,16 +183,16 @@ void CScriptParser::SkipRestOfLine(void) { m_pScriptSection = p; } -void CScriptParser::UndoGetToken(void) { - if(!m_pLastScriptSection) { +void CScriptParser::UndoGetToken( void ) { + if ( !m_pLastScriptSection ) { return; } m_pScriptSection = m_pLastScriptSection; m_pLastScriptSection = NULL; } -void CScriptParser::ResetParseSession(void) { - if(!m_pScript) { +void CScriptParser::ResetParseSession( void ) { + if ( !m_pScript ) { return; } @@ -197,43 +200,43 @@ void CScriptParser::ResetParseSession(void) { m_pLastScriptSection = NULL; } -char* CScriptParser::GetBufferCopy(void) { - if(!m_pScript) { +char* CScriptParser::GetBufferCopy( void ) { + if ( !m_pScript ) { return NULL; } - int len = static_cast(strlen(m_pScript)); + int len = static_cast( strlen( m_pScript ) ); char* pBuffer = new char[len + 1]; - strcpy(pBuffer, m_pScript); + strcpy( pBuffer, m_pScript ); return pBuffer; } -int CScriptParser::GetTokenOffset(void) { - if(!m_pScript || !m_pScriptSection) { +int CScriptParser::GetTokenOffset( void ) { + if ( !m_pScript || !m_pScriptSection ) { return 0; } - return static_cast(m_pScriptSection - m_pScript); + return static_cast( m_pScriptSection - m_pScript ); } -void CScriptParser::LoadScript(const char* pScript) { +void CScriptParser::LoadScript( const char* pScript ) { ClearBuffer(); - int len = static_cast(strlen(pScript)); - if(len <= 0) { + int len = static_cast( strlen( pScript ) ); + if ( len <= 0 ) { return; } m_pScript = new char[len + 1]; m_pScript[len] = '\0'; - strcpy(m_pScript, pScript); + strcpy( m_pScript, pScript ); m_pScriptSection = m_pScript; } -void CScriptParser::AddBreakChar(char c) { - for(int i = 0; i < SP_MAX_BREAKCHARS; i++) { - if(!m_breakChars[i]) { +void CScriptParser::AddBreakChar( char c ) { + for ( int i = 0; i < SP_MAX_BREAKCHARS; i++ ) { + if ( !m_breakChars[i] ) { m_breakChars[i] = c; return; } @@ -242,23 +245,23 @@ void CScriptParser::AddBreakChar(char c) { // TODO: Error: max break chars hit } -bool CScriptParser::IsBreakChar(char c) { - for(int i = 0; i < SP_MAX_BREAKCHARS; i++) { - if(!m_breakChars[i]) { +bool CScriptParser::IsBreakChar( char c ) { + for ( int i = 0; i < SP_MAX_BREAKCHARS; i++ ) { + if ( !m_breakChars[i] ) { return false; } - if(m_breakChars[i] == c) { + if ( m_breakChars[i] == c ) { return true; } } return false; } -void CScriptParser::SetScript(char* pScript) { +void CScriptParser::SetScript( char* pScript ) { ClearBuffer(); - int len = static_cast(strlen(pScript)); - if(len <= 0) { + int len = static_cast( strlen( pScript ) ); + if ( len <= 0 ) { return; } diff --git a/contrib/bobtoolz/ScriptParser.h b/contrib/bobtoolz/ScriptParser.h index 5537401f..a779cdb8 100644 --- a/contrib/bobtoolz/ScriptParser.h +++ b/contrib/bobtoolz/ScriptParser.h @@ -6,35 +6,35 @@ #define SP_MAX_BREAKCHARS 16 -class CScriptParser: public IScriptParser { +class CScriptParser : public IScriptParser { public: - CScriptParser(void); - ~CScriptParser(void); +CScriptParser( void ); +~CScriptParser( void ); private: - char m_breakChars[SP_MAX_BREAKCHARS]; - char* m_pScript; - char* m_pScriptSection; - char* m_pLastScriptSection; - char* m_pToken; - - void SkipWhitespace(bool* pbNewLines); - void ClearBuffer(void); - const char* MakeToken(const char* pToken); - bool IsBreakChar(char c); +char m_breakChars[SP_MAX_BREAKCHARS]; +char* m_pScript; +char* m_pScriptSection; +char* m_pLastScriptSection; +char* m_pToken; + +void SkipWhitespace( bool* pbNewLines ); +void ClearBuffer( void ); +const char* MakeToken( const char* pToken ); +bool IsBreakChar( char c ); public: - const char* GetToken(bool bAllowLinebreaks); - void SkipBracedSection(void); - void SkipRestOfLine(void); - void UndoGetToken(void); - void ResetParseSession(void); +const char* GetToken( bool bAllowLinebreaks ); +void SkipBracedSection( void ); +void SkipRestOfLine( void ); +void UndoGetToken( void ); +void ResetParseSession( void ); - char* GetBufferCopy(void); - int GetTokenOffset(void); +char* GetBufferCopy( void ); +int GetTokenOffset( void ); - void LoadScript(const char* pScript); - void SetScript(char* pScript); +void LoadScript( const char* pScript ); +void SetScript( char* pScript ); - void AddBreakChar(char c); +void AddBreakChar( char c ); private: }; diff --git a/contrib/bobtoolz/StdAfx.cpp b/contrib/bobtoolz/StdAfx.cpp index 1a02f66b..5c7495fa 100644 --- a/contrib/bobtoolz/StdAfx.cpp +++ b/contrib/bobtoolz/StdAfx.cpp @@ -1,25 +1,24 @@ /* -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 + */ // stdafx.cpp : source file that includes just the standard includes // plugin.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "StdAfx.h" - diff --git a/contrib/bobtoolz/StdAfx.h b/contrib/bobtoolz/StdAfx.h index d2d518f9..3e8832dc 100644 --- a/contrib/bobtoolz/StdAfx.h +++ b/contrib/bobtoolz/StdAfx.h @@ -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 + */ #ifndef __STDAFX_BOBTOOLZ__ #define __STDAFX_BOBTOOLZ__ @@ -35,7 +35,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "time.h" -#if defined (__linux__) || defined (__APPLE__) +#if defined ( __linux__ ) || defined ( __APPLE__ ) // Necessary for proper boolean type declaration #include "qertypes.h" @@ -45,7 +45,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA typedef void* HMODULE; typedef void* LPVOID; typedef char* LPCSTR; -//typedef int bool; +//typedef int bool; #define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L @@ -89,17 +89,17 @@ typedef char* LPCSTR; #define GUID_DEFINED typedef struct _GUID { - unsigned long Data1; - unsigned short Data2; - unsigned short Data3; - unsigned char Data4[8]; + unsigned long Data1; + unsigned short Data2; + unsigned short Data3; + unsigned char Data4[8]; } GUID; #define stricmp strcasecmp #endif -#if defined(__cplusplus) +#if defined( __cplusplus ) #ifndef _REFGUID_DEFINED #define _REFGUID_DEFINED #define REFGUID const GUID & @@ -108,10 +108,10 @@ typedef struct _GUID typedef struct tagRECT { - long left; - long top; - long right; - long bottom; + long left; + long top; + long right; + long bottom; } RECT, *PRECT, *LPRECT; typedef uint UINT; @@ -139,17 +139,17 @@ typedef uint UINT; #include "mathlib.h" -extern _QERFuncTable_1 g_FuncTable; -extern _QERAppDataTable g_AppDataTable; -extern _QERBrushTable g_BrushTable; -extern _QERSelectedFaceTable g_SelectedFaceTable; -extern _QERShadersTable g_ShadersTable; -extern _QERQglTable g_QglTable; -extern _QERUITable g_MessageTable; -extern _QEREntityTable g_EntityTable; +extern _QERFuncTable_1 g_FuncTable; +extern _QERAppDataTable g_AppDataTable; +extern _QERBrushTable g_BrushTable; +extern _QERSelectedFaceTable g_SelectedFaceTable; +extern _QERShadersTable g_ShadersTable; +extern _QERQglTable g_QglTable; +extern _QERUITable g_MessageTable; +extern _QEREntityTable g_EntityTable; -#define MAX_ROUND_ERROR 0.05 +#define MAX_ROUND_ERROR 0.05 #include "gtkr_list.h" diff --git a/contrib/bobtoolz/bobToolz-GTK.cpp b/contrib/bobtoolz/bobToolz-GTK.cpp index d824df54..1cd11552 100644 --- a/contrib/bobtoolz/bobToolz-GTK.cpp +++ b/contrib/bobtoolz/bobToolz-GTK.cpp @@ -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" @@ -26,14 +26,14 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "../../libs/cmdlib.h" // Radiant function table -_QERFuncTable_1 g_FuncTable; -_QERAppDataTable g_AppDataTable; -_QERBrushTable g_BrushTable; -_QERShadersTable g_ShadersTable; // vvvvvvvvvvvvvvvvvvvv -_QERSelectedFaceTable g_SelectedFaceTable; // to get texture sizes -_QERQglTable g_QglTable; // for path plotting (hooking to DBobView) -_QERUITable g_MessageTable; // for path plotting (listening for update) -_QEREntityTable g_EntityTable; +_QERFuncTable_1 g_FuncTable; +_QERAppDataTable g_AppDataTable; +_QERBrushTable g_BrushTable; +_QERShadersTable g_ShadersTable; // vvvvvvvvvvvvvvvvvvvv +_QERSelectedFaceTable g_SelectedFaceTable; // to get texture sizes +_QERQglTable g_QglTable; // for path plotting (hooking to DBobView) +_QERUITable g_MessageTable; // for path plotting (listening for update) +_QEREntityTable g_EntityTable; // plugin name const char* PLUGIN_NAME = "bobToolz"; @@ -44,7 +44,7 @@ static const char* PLUGIN_COMMANDS = "About...,-,Reset Textures...,PitOMatic,-,V // globals GtkWidget *g_pRadiantWnd = NULL; -static const char *PLUGIN_ABOUT = "bobToolz for SDRadiant\n" +static const char *PLUGIN_ABOUT = "bobToolz for SDRadiant\n" "by digibob (digibob@splashdamage.com)\n" "http://www.splashdamage.com\n\n" "Additional Contributors:\n" @@ -64,35 +64,47 @@ extern "C" const char* QERPlug_GetCommandList() { return PLUGIN_COMMANDS; } -extern "C" void QERPlug_Dispatch (const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) { +extern "C" void QERPlug_Dispatch( const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ) { LoadLists(); - if( !stricmp( p, "brush cleanup" ) ) { - DoFixBrushes(); - } else if( !stricmp( p, "polygon builder" ) ) { - DoPolygonsTB(); - } else if( !stricmp( p, "caulk selection" ) ) { - DoCaulkSelection(); - } else if( !stricmp( p, "tree planter" ) ) { - DoTreePlanter(); - } else if( !stricmp( p, "plot splines" ) ) { - DoTrainPathPlot(); - } else if( !stricmp( p, "drop entity" ) ) { - DoDropEnts(); - } else if( !stricmp( p, "merge patches" ) ) { - DoMergePatches(); - } else if( !stricmp( p, "split patches" ) ) { - DoSplitPatch(); - } else if( !stricmp( p, "turn edge" ) ) { - DoFlipTerrain(); - } else if( !stricmp(p, "reset textures...") ) { + if ( !stricmp( p, "brush cleanup" ) ) { + DoFixBrushes(); + } + else if ( !stricmp( p, "polygon builder" ) ) { + DoPolygonsTB(); + } + else if ( !stricmp( p, "caulk selection" ) ) { + DoCaulkSelection(); + } + else if ( !stricmp( p, "tree planter" ) ) { + DoTreePlanter(); + } + else if ( !stricmp( p, "plot splines" ) ) { + DoTrainPathPlot(); + } + else if ( !stricmp( p, "drop entity" ) ) { + DoDropEnts(); + } + else if ( !stricmp( p, "merge patches" ) ) { + DoMergePatches(); + } + else if ( !stricmp( p, "split patches" ) ) { + DoSplitPatch(); + } + else if ( !stricmp( p, "turn edge" ) ) { + DoFlipTerrain(); + } + else if ( !stricmp( p, "reset textures..." ) ) { DoResetTextures(); - } else if( !stricmp(p, "pitomatic") ) { - DoPitBuilder(vMin, vMax); - } else if( !stricmp(p, "vis viewer") ) { + } + else if ( !stricmp( p, "pitomatic" ) ) { + DoPitBuilder( vMin, vMax ); + } + else if ( !stricmp( p, "vis viewer" ) ) { DoVisAnalyse(); - } else if( !stricmp(p, "about...") ) { - DoMessageBox(PLUGIN_ABOUT, "About", IDOK); + } + else if ( !stricmp( p, "about..." ) ) { + DoMessageBox( PLUGIN_ABOUT, "About", IDOK ); } } @@ -103,16 +115,16 @@ unsigned int ToolbarButtonCount( void ) { } // Load a xpm file and return a pixmap widget. -GtkWidget* new_pixmap (char* filename) { +GtkWidget* new_pixmap( char* filename ) { GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; - g_FuncTable.m_pfnLoadBitmap(filename, (void **)&gdkpixmap, (void **)&mask); - pixmap = gtk_pixmap_new (gdkpixmap, mask); + g_FuncTable.m_pfnLoadBitmap( filename, (void **)&gdkpixmap, (void **)&mask ); + pixmap = gtk_pixmap_new( gdkpixmap, mask ); - gdk_pixmap_unref (gdkpixmap); - gdk_pixmap_unref (mask); + gdk_pixmap_unref( gdkpixmap ); + gdk_pixmap_unref( mask ); return pixmap; } @@ -120,85 +132,79 @@ GtkWidget* new_pixmap (char* filename) { class CBobtoolzToolbarButton : public IToolbarButton { public: - virtual const char* getImage() const - { - switch( mIndex ) { - case 0: return "bobtoolz_cleanup.bmp"; - case 1: return "bobtoolz_poly.bmp"; - case 2: return "bobtoolz_caulk.bmp"; - case 3: return "bobtoolz_treeplanter.bmp"; - case 4: return "bobtoolz_trainpathplot.bmp"; - case 5: return "bobtoolz_dropent.bmp"; - case 6: return "bobtoolz_merge.bmp"; - case 7: return "bobtoolz_split.bmp"; - case 8: return "bobtoolz_turnedge.bmp"; - } - return NULL; - } - virtual EType getType() const - { - switch( mIndex ) { - case 3: return eToggleButton; - default: return eButton; - } - } - virtual const char* getText() const - { - switch( mIndex ) { - case 0: return "Cleanup"; - case 1: return "Polygons"; - case 2: return "Caulk"; - case 3: return "Tree Planter"; - case 4: return "Plot Splines"; - case 5: return "Drop Entity"; - case 6: return "Merge Patches"; - case 7: return "Split Patches"; - case 8: return "Flip Terrain"; - } - return NULL; - } - virtual const char* getTooltip() const - { - switch( mIndex ) { - case 0: return "Brush Cleanup"; - case 1: return "Polygons"; - case 2: return "Caulk selection"; - case 3: return "Tree Planter"; - case 4: return "Plot Splines"; - case 5: return "Drop Entity"; - case 6: return "Merge Patches"; - case 7: return "Split Patches"; - case 8: return "Flip Terrain"; - } - return NULL; - } - - virtual void activate() const - { - LoadLists(); - - switch( mIndex ) { - case 0: DoFixBrushes(); break; - case 1: DoPolygonsTB(); break; - case 2: DoCaulkSelection(); break; - case 3: DoTreePlanter(); break; - case 4: DoTrainPathPlot(); break; - case 5: DoDropEnts(); break; - case 6: DoMergePatches(); break; - case 7: DoSplitPatch(); break; - case 8: DoFlipTerrain(); break; - } - } - - int mIndex; +virtual const char* getImage() const { + switch ( mIndex ) { + case 0: return "bobtoolz_cleanup.bmp"; + case 1: return "bobtoolz_poly.bmp"; + case 2: return "bobtoolz_caulk.bmp"; + case 3: return "bobtoolz_treeplanter.bmp"; + case 4: return "bobtoolz_trainpathplot.bmp"; + case 5: return "bobtoolz_dropent.bmp"; + case 6: return "bobtoolz_merge.bmp"; + case 7: return "bobtoolz_split.bmp"; + case 8: return "bobtoolz_turnedge.bmp"; + } + return NULL; +} +virtual EType getType() const { + switch ( mIndex ) { + case 3: return eToggleButton; + default: return eButton; + } +} +virtual const char* getText() const { + switch ( mIndex ) { + case 0: return "Cleanup"; + case 1: return "Polygons"; + case 2: return "Caulk"; + case 3: return "Tree Planter"; + case 4: return "Plot Splines"; + case 5: return "Drop Entity"; + case 6: return "Merge Patches"; + case 7: return "Split Patches"; + case 8: return "Flip Terrain"; + } + return NULL; +} +virtual const char* getTooltip() const { + switch ( mIndex ) { + case 0: return "Brush Cleanup"; + case 1: return "Polygons"; + case 2: return "Caulk selection"; + case 3: return "Tree Planter"; + case 4: return "Plot Splines"; + case 5: return "Drop Entity"; + case 6: return "Merge Patches"; + case 7: return "Split Patches"; + case 8: return "Flip Terrain"; + } + return NULL; +} + +virtual void activate() const { + LoadLists(); + + switch ( mIndex ) { + case 0: DoFixBrushes(); break; + case 1: DoPolygonsTB(); break; + case 2: DoCaulkSelection(); break; + case 3: DoTreePlanter(); break; + case 4: DoTrainPathPlot(); break; + case 5: DoDropEnts(); break; + case 6: DoMergePatches(); break; + case 7: DoSplitPatch(); break; + case 8: DoFlipTerrain(); break; + } +} + +int mIndex; }; CBobtoolzToolbarButton g_bobtoolzToolbarButtons[NUM_TOOLBARBUTTONS]; -const IToolbarButton* GetToolbarButton(unsigned int index) -{ - g_bobtoolzToolbarButtons[index].mIndex = index; - return &g_bobtoolzToolbarButtons[index]; +const IToolbarButton* GetToolbarButton( unsigned int index ){ + g_bobtoolzToolbarButtons[index].mIndex = index; + return &g_bobtoolzToolbarButtons[index]; } // ============================================================================= @@ -207,12 +213,12 @@ const IToolbarButton* GetToolbarButton(unsigned int index) class CSynapseClientBobtoolz : public CSynapseClient { public: - // CSynapseClient API - bool RequestAPI(APIDescriptor_t *pAPI); - const char* GetInfo(); +// CSynapseClient API +bool RequestAPI( APIDescriptor_t *pAPI ); +const char* GetInfo(); - CSynapseClientBobtoolz() { } - virtual ~CSynapseClientBobtoolz() { } +CSynapseClientBobtoolz() { } +virtual ~CSynapseClientBobtoolz() { } }; @@ -222,76 +228,70 @@ CSynapseClientBobtoolz g_SynapseClient; #if __GNUC__ >= 4 #pragma GCC visibility push(default) #endif -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) { +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(TOOLBAR_MAJOR, BOBTOOLZ_MINOR, sizeof(_QERPlugToolbarTable)); - g_SynapseClient.AddAPI(PLUGIN_MAJOR, BOBTOOLZ_MINOR, sizeof(_QERPluginTable)); - - g_SynapseClient.AddAPI(DATA_MAJOR, NULL, sizeof(g_AppDataTable), SYN_REQUIRE, &g_AppDataTable); - g_SynapseClient.AddAPI(BRUSH_MAJOR, NULL, sizeof(g_BrushTable), SYN_REQUIRE, &g_BrushTable); - g_SynapseClient.AddAPI(SHADERS_MAJOR, "*", sizeof(g_ShadersTable), SYN_REQUIRE, &g_ShadersTable); - g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(g_EntityTable), SYN_REQUIRE, &g_EntityTable); - g_SynapseClient.AddAPI(SELECTEDFACE_MAJOR, NULL, sizeof(g_SelectedFaceTable), SYN_REQUIRE, &g_SelectedFaceTable); - g_SynapseClient.AddAPI(UI_MAJOR, NULL, sizeof(g_MessageTable), SYN_REQUIRE, &g_MessageTable); - g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable); - g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(g_QglTable), SYN_REQUIRE, &g_QglTable); - - return &g_SynapseClient; + 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( TOOLBAR_MAJOR, BOBTOOLZ_MINOR, sizeof( _QERPlugToolbarTable ) ); + g_SynapseClient.AddAPI( PLUGIN_MAJOR, BOBTOOLZ_MINOR, sizeof( _QERPluginTable ) ); + + g_SynapseClient.AddAPI( DATA_MAJOR, NULL, sizeof( g_AppDataTable ), SYN_REQUIRE, &g_AppDataTable ); + g_SynapseClient.AddAPI( BRUSH_MAJOR, NULL, sizeof( g_BrushTable ), SYN_REQUIRE, &g_BrushTable ); + g_SynapseClient.AddAPI( SHADERS_MAJOR, "*", sizeof( g_ShadersTable ), SYN_REQUIRE, &g_ShadersTable ); + g_SynapseClient.AddAPI( ENTITY_MAJOR, NULL, sizeof( g_EntityTable ), SYN_REQUIRE, &g_EntityTable ); + g_SynapseClient.AddAPI( SELECTEDFACE_MAJOR, NULL, sizeof( g_SelectedFaceTable ), SYN_REQUIRE, &g_SelectedFaceTable ); + g_SynapseClient.AddAPI( UI_MAJOR, NULL, sizeof( g_MessageTable ), SYN_REQUIRE, &g_MessageTable ); + g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( g_FuncTable ), SYN_REQUIRE, &g_FuncTable ); + g_SynapseClient.AddAPI( QGL_MAJOR, NULL, sizeof( g_QglTable ), SYN_REQUIRE, &g_QglTable ); + + return &g_SynapseClient; } -bool CSynapseClientBobtoolz::RequestAPI(APIDescriptor_t *pAPI) -{ - if( !strcmp(pAPI->minor_name, BOBTOOLZ_MINOR) ) - { - 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; - } - else if( !strcmp(pAPI->major_name, TOOLBAR_MAJOR) ) - { - _QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable); - - pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; - pTable->m_pfnGetToolbarButton = &GetToolbarButton; - - return true; - } - } - - Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo()); - return false; +bool CSynapseClientBobtoolz::RequestAPI( APIDescriptor_t *pAPI ){ + if ( !strcmp( pAPI->minor_name, BOBTOOLZ_MINOR ) ) { + 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; + } + else if ( !strcmp( pAPI->major_name, TOOLBAR_MAJOR ) ) { + _QERPlugToolbarTable* pTable = static_cast<_QERPlugToolbarTable*>( pAPI->mpTable ); + + pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; + pTable->m_pfnGetToolbarButton = &GetToolbarButton; + + return true; + } + } + + Syn_Printf( "ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo() ); + return false; } #include "version.h" -const char* CSynapseClientBobtoolz::GetInfo() -{ - return "bobToolz module built " __DATE__ " " RADIANT_VERSION; +const char* CSynapseClientBobtoolz::GetInfo(){ + return "bobToolz module built " __DATE__ " " RADIANT_VERSION; } -char* GetFilename(char* buffer, const char* filename) { - strcpy(buffer, g_pSynapseServer->GetModuleFilename(&g_SynapseClient)); +char* GetFilename( char* buffer, const char* filename ) { + strcpy( buffer, g_pSynapseServer->GetModuleFilename( &g_SynapseClient ) ); StripFilename( buffer ); - strcat(buffer, "/"); - strcat(buffer, filename); - buffer = UnixToDosPath(buffer); + strcat( buffer, "/" ); + strcat( buffer, filename ); + buffer = UnixToDosPath( buffer ); return buffer; } diff --git a/contrib/bobtoolz/bobToolz.h b/contrib/bobtoolz/bobToolz.h index 6101e877..4b80ee73 100644 --- a/contrib/bobtoolz/bobToolz.h +++ b/contrib/bobtoolz/bobToolz.h @@ -1,26 +1,26 @@ /* -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 + */ // plugin.h : main header file for the PLUGIN DLL // -#if !defined(AFX_PLUGIN_H__3BA55F6A_1D27_11D3_BC7B_F7EFD9765E37__INCLUDED_) +#if !defined( AFX_PLUGIN_H__3BA55F6A_1D27_11D3_BC7B_F7EFD9765E37__INCLUDED_ ) #define AFX_PLUGIN_H__3BA55F6A_1D27_11D3_BC7B_F7EFD9765E37__INCLUDED_ #if _MSC_VER >= 1000 @@ -31,7 +31,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #error include 'StdAfx.h' before including this file for PCH #endif -#include "resource.h" // main symbols +#include "resource.h" // main symbols ///////////////////////////////////////////////////////////////////////////// // CPluginApp @@ -41,18 +41,18 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA class CPluginApp : public CWinApp { public: - CPluginApp(); +CPluginApp(); // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CPluginApp) - //}}AFX_VIRTUAL - - //{{AFX_MSG(CPluginApp) - // NOTE - the ClassWizard will add and remove member functions here. - // DO NOT EDIT what you see in these blocks of generated code ! - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CPluginApp) +//}}AFX_VIRTUAL + +//{{AFX_MSG(CPluginApp) +// NOTE - the ClassWizard will add and remove member functions here. +// DO NOT EDIT what you see in these blocks of generated code ! +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; diff --git a/contrib/bobtoolz/bsploader.cpp b/contrib/bobtoolz/bsploader.cpp index 2fc05afd..aadd2b31 100644 --- a/contrib/bobtoolz/bsploader.cpp +++ b/contrib/bobtoolz/bsploader.cpp @@ -3,94 +3,93 @@ #include "bsploader.h" #include "../../libs/cmdlib.h" -int numnodes; -int numplanes; -int numleafs; -int numleafsurfaces; -int numVisBytes; -int numDrawVerts; -int numDrawSurfaces; -int numbrushes; -int numbrushsides; -int numleafbrushes; - -byte *visBytes = NULL; -dnode_t *dnodes = NULL; -dplane_t *dplanes = NULL; -dleaf_t *dleafs = NULL; -qdrawVert_t *drawVerts = NULL; -dsurface_t *drawSurfaces = NULL; -int *dleafsurfaces = NULL; -dbrush_t *dbrushes = NULL; -dbrushside_t *dbrushsides = NULL; -int *dleafbrushes = NULL; - -#define BSP_IDENT (('P'<<24)+('S'<<16)+('B'<<8)+'I') -#define Q3_BSP_VERSION 46 -#define WOLF_BSP_VERSION 47 +int numnodes; +int numplanes; +int numleafs; +int numleafsurfaces; +int numVisBytes; +int numDrawVerts; +int numDrawSurfaces; +int numbrushes; +int numbrushsides; +int numleafbrushes; + +byte *visBytes = NULL; +dnode_t *dnodes = NULL; +dplane_t *dplanes = NULL; +dleaf_t *dleafs = NULL; +qdrawVert_t *drawVerts = NULL; +dsurface_t *drawSurfaces = NULL; +int *dleafsurfaces = NULL; +dbrush_t *dbrushes = NULL; +dbrushside_t *dbrushsides = NULL; +int *dleafbrushes = NULL; + +#define BSP_IDENT ( ( 'P' << 24 ) + ( 'S' << 16 ) + ( 'B' << 8 ) + 'I' ) +#define Q3_BSP_VERSION 46 +#define WOLF_BSP_VERSION 47 /* -================ -FileLength -================ -*/ -int FileLength (FILE *f) -{ - int pos; - int end; - - pos = ftell (f); - fseek (f, 0, SEEK_END); - end = ftell (f); - fseek (f, pos, SEEK_SET); + ================ + FileLength + ================ + */ +int FileLength( FILE *f ){ + int pos; + int end; + + pos = ftell( f ); + fseek( f, 0, SEEK_END ); + end = ftell( f ); + fseek( f, pos, SEEK_SET ); return end; } /* -============== -LoadFile -============== -*/ -qboolean LoadFile( const char *filename, byte **bufferptr) -{ - FILE *f; - int length; + ============== + LoadFile + ============== + */ +qboolean LoadFile( const char *filename, byte **bufferptr ){ + FILE *f; + int length; byte *buffer; - f = fopen(filename, "rb"); - if(!f) + f = fopen( filename, "rb" ); + if ( !f ) { return false; + } - length = FileLength (f); - buffer = new byte[length+1]; + length = FileLength( f ); + buffer = new byte[length + 1]; buffer[length] = 0; - fread(buffer, 1, length, f); - fclose (f); + fread( buffer, 1, length, f ); + fclose( f ); *bufferptr = buffer; return true; } /*int LittleLong (int l) -{ - return l; -} + { + return l; + } -float LittleFloat (float l) -{ - return l; -}*/ + float LittleFloat (float l) + { + return l; + }*/ /* -============= -SwapBlock + ============= + SwapBlock -If all values are 32 bits, this can be used to swap everything -============= -*/ + If all values are 32 bits, this can be used to swap everything + ============= + */ void SwapBlock( int *block, int sizeOfBlock ) { - int i; + int i; sizeOfBlock >>= 2; for ( i = 0 ; i < sizeOfBlock ; i++ ) { @@ -99,16 +98,16 @@ void SwapBlock( int *block, int sizeOfBlock ) { } /* -============= -SwapBSPFile + ============= + SwapBSPFile -Byte swaps all data in a bsp file. -============= -*/ + Byte swaps all data in a bsp file. + ============= + */ void SwapBSPFile( void ) { - int i; - - // models + int i; + + // models // SwapBlock( (int *)dmodels, nummodels * sizeof( dmodels[0] ) ); // shaders (don't swap the name) @@ -119,7 +118,7 @@ void SwapBSPFile( void ) { // planes SwapBlock( (int *)dplanes, numplanes * sizeof( dplanes[0] ) ); - + // nodes SwapBlock( (int *)dnodes, numnodes * sizeof( dnodes[0] ) ); @@ -139,8 +138,8 @@ void SwapBSPFile( void ) { SwapBlock( (int *)dbrushsides, numbrushsides * sizeof( dbrushsides[0] ) ); // vis - ((int *)&visBytes)[0] = LittleLong( ((int *)&visBytes)[0] ); - ((int *)&visBytes)[1] = LittleLong( ((int *)&visBytes)[1] ); + ( (int *)&visBytes )[0] = LittleLong( ( (int *)&visBytes )[0] ); + ( (int *)&visBytes )[1] = LittleLong( ( (int *)&visBytes )[1] ); // drawverts (don't swap colors ) for ( i = 0 ; i < numDrawVerts ; i++ ) { @@ -170,19 +169,20 @@ void SwapBSPFile( void ) { } /* -============= -CopyLump -============= -*/ -int CopyLump( dheader_t *header, int lump, void **dest, int size ) { - int length, ofs; + ============= + CopyLump + ============= + */ +int CopyLump( dheader_t *header, int lump, void **dest, int size ) { + int length, ofs; length = header->lumps[lump].filelen; ofs = header->lumps[lump].fileofs; - - if(length == 0) + + if ( length == 0 ) { return 0; - + } + *dest = new byte[length]; memcpy( *dest, (byte *)header + ofs, length ); @@ -190,69 +190,79 @@ int CopyLump( dheader_t *header, int lump, void **dest, int size ) { } /* -============= -LoadBSPFile -============= -*/ -qboolean LoadBSPFile( const char *filename ) { - dheader_t *header; + ============= + LoadBSPFile + ============= + */ +qboolean LoadBSPFile( const char *filename ) { + dheader_t *header; // load the file header - if(!LoadFile (filename, (byte **)&header)) + if ( !LoadFile( filename, (byte **)&header ) ) { return false; + } // swap the header - SwapBlock( (int *)header, sizeof(*header) ); + SwapBlock( (int *)header, sizeof( *header ) ); if ( header->ident != BSP_IDENT ) { - DoMessageBox( "Cant find a valid IBSP file", "Error", MB_OK); + DoMessageBox( "Cant find a valid IBSP file", "Error", MB_OK ); return false; } - if ( (header->version != Q3_BSP_VERSION) && - (header->version != WOLF_BSP_VERSION) ) { - DoMessageBox( "File is incorrect version", "Error", MB_OK); + if ( ( header->version != Q3_BSP_VERSION ) && + ( header->version != WOLF_BSP_VERSION ) ) { + DoMessageBox( "File is incorrect version", "Error", MB_OK ); return false; } - numbrushsides = CopyLump( header, LUMP_BRUSHES, (void**)&dbrushsides, sizeof(dbrushside_t) ); - numbrushes = CopyLump( header, LUMP_BRUSHES, (void**)&dbrushes, sizeof(dbrush_t) ); - numplanes = CopyLump( header, LUMP_PLANES, (void**)&dplanes, sizeof(dplane_t) ); - numleafs = CopyLump( header, LUMP_LEAFS, (void**)&dleafs, sizeof(dleaf_t) ); - numnodes = CopyLump( header, LUMP_NODES, (void**)&dnodes, sizeof(dnode_t) ); - numDrawVerts = CopyLump( header, LUMP_DRAWVERTS, (void**)&drawVerts, sizeof(qdrawVert_t) ); - numDrawSurfaces = CopyLump( header, LUMP_SURFACES, (void**)&drawSurfaces, sizeof(dsurface_t) ); - numleafsurfaces = CopyLump( header, LUMP_LEAFSURFACES, (void**)&dleafsurfaces, sizeof(int) ); - numVisBytes = CopyLump( header, LUMP_VISIBILITY, (void**)&visBytes, 1 ); - numleafbrushes = CopyLump( header, LUMP_LEAFBRUSHES, (void**)&dleafbrushes, sizeof(int) ); - - delete header; // everything has been copied out - + numbrushsides = CopyLump( header, LUMP_BRUSHES, (void**)&dbrushsides, sizeof( dbrushside_t ) ); + numbrushes = CopyLump( header, LUMP_BRUSHES, (void**)&dbrushes, sizeof( dbrush_t ) ); + numplanes = CopyLump( header, LUMP_PLANES, (void**)&dplanes, sizeof( dplane_t ) ); + numleafs = CopyLump( header, LUMP_LEAFS, (void**)&dleafs, sizeof( dleaf_t ) ); + numnodes = CopyLump( header, LUMP_NODES, (void**)&dnodes, sizeof( dnode_t ) ); + numDrawVerts = CopyLump( header, LUMP_DRAWVERTS, (void**)&drawVerts, sizeof( qdrawVert_t ) ); + numDrawSurfaces = CopyLump( header, LUMP_SURFACES, (void**)&drawSurfaces, sizeof( dsurface_t ) ); + numleafsurfaces = CopyLump( header, LUMP_LEAFSURFACES, (void**)&dleafsurfaces, sizeof( int ) ); + numVisBytes = CopyLump( header, LUMP_VISIBILITY, (void**)&visBytes, 1 ); + numleafbrushes = CopyLump( header, LUMP_LEAFBRUSHES, (void**)&dleafbrushes, sizeof( int ) ); + + delete header; // everything has been copied out + // swap everything SwapBSPFile(); return true; } -void FreeBSPData() -{ - if(visBytes) +void FreeBSPData(){ + if ( visBytes ) { delete visBytes; - if(dnodes) + } + if ( dnodes ) { delete dnodes; - if(dplanes) + } + if ( dplanes ) { delete dplanes; - if(dleafs) + } + if ( dleafs ) { delete dleafs; - if(drawVerts) + } + if ( drawVerts ) { delete drawVerts; - if(drawSurfaces) + } + if ( drawSurfaces ) { delete drawSurfaces; - if(dleafsurfaces) + } + if ( dleafsurfaces ) { delete dleafsurfaces; - if(dleafbrushes) + } + if ( dleafbrushes ) { delete dleafbrushes; - if(dbrushes) + } + if ( dbrushes ) { delete dbrushes; - if(dbrushsides) + } + if ( dbrushsides ) { delete dbrushsides; + } } diff --git a/contrib/bobtoolz/bsploader.h b/contrib/bobtoolz/bsploader.h index 3b98fc27..f4ecea87 100644 --- a/contrib/bobtoolz/bsploader.h +++ b/contrib/bobtoolz/bsploader.h @@ -1,98 +1,98 @@ -#define LUMP_ENTITIES 0 -#define LUMP_SHADERS 1 -#define LUMP_PLANES 2 -#define LUMP_NODES 3 -#define LUMP_LEAFS 4 -#define LUMP_LEAFSURFACES 5 -#define LUMP_LEAFBRUSHES 6 -#define LUMP_MODELS 7 -#define LUMP_BRUSHES 8 -#define LUMP_BRUSHSIDES 9 -#define LUMP_DRAWVERTS 10 -#define LUMP_DRAWINDEXES 11 -#define LUMP_FOGS 12 -#define LUMP_SURFACES 13 -#define LUMP_LIGHTMAPS 14 -#define LUMP_LIGHTGRID 15 -#define LUMP_VISIBILITY 16 -#define HEADER_LUMPS 17 +#define LUMP_ENTITIES 0 +#define LUMP_SHADERS 1 +#define LUMP_PLANES 2 +#define LUMP_NODES 3 +#define LUMP_LEAFS 4 +#define LUMP_LEAFSURFACES 5 +#define LUMP_LEAFBRUSHES 6 +#define LUMP_MODELS 7 +#define LUMP_BRUSHES 8 +#define LUMP_BRUSHSIDES 9 +#define LUMP_DRAWVERTS 10 +#define LUMP_DRAWINDEXES 11 +#define LUMP_FOGS 12 +#define LUMP_SURFACES 13 +#define LUMP_LIGHTMAPS 14 +#define LUMP_LIGHTGRID 15 +#define LUMP_VISIBILITY 16 +#define HEADER_LUMPS 17 typedef struct { - int fileofs, filelen; + int fileofs, filelen; } lump_t; typedef struct { - int ident; - int version; + int ident; + int version; - lump_t lumps[HEADER_LUMPS]; + lump_t lumps[HEADER_LUMPS]; } dheader_t; typedef struct { - float normal[3]; - float dist; + float normal[3]; + float dist; } dplane_t; typedef struct { - int planeNum; - int children[2]; // negative numbers are -(leafs+1), not nodes - int mins[3]; // for frustom culling - int maxs[3]; + int planeNum; + int children[2]; // negative numbers are -(leafs+1), not nodes + int mins[3]; // for frustom culling + int maxs[3]; } dnode_t; typedef struct { - int cluster; // -1 = opaque cluster (do I still store these?) - int area; + int cluster; // -1 = opaque cluster (do I still store these?) + int area; - int mins[3]; // for frustum culling - int maxs[3]; + int mins[3]; // for frustum culling + int maxs[3]; - int firstLeafSurface; - int numLeafSurfaces; + int firstLeafSurface; + int numLeafSurfaces; - int firstLeafBrush; - int numLeafBrushes; + int firstLeafBrush; + int numLeafBrushes; } dleaf_t; typedef struct { - vec3_t xyz; - float st[2]; - float lightmap[2]; - vec3_t normal; - byte color[4]; + vec3_t xyz; + float st[2]; + float lightmap[2]; + vec3_t normal; + byte color[4]; } qdrawVert_t; typedef struct { - int shaderNum; - int fogNum; - int surfaceType; + int shaderNum; + int fogNum; + int surfaceType; - int firstVert; - int numVerts; + int firstVert; + int numVerts; - int firstIndex; - int numIndexes; + int firstIndex; + int numIndexes; - int lightmapNum; - int lightmapX, lightmapY; - int lightmapWidth, lightmapHeight; + int lightmapNum; + int lightmapX, lightmapY; + int lightmapWidth, lightmapHeight; - vec3_t lightmapOrigin; - vec3_t lightmapVecs[3]; // for patches, [0] and [1] are lodbounds + vec3_t lightmapOrigin; + vec3_t lightmapVecs[3]; // for patches, [0] and [1] are lodbounds - int patchWidth; - int patchHeight; + int patchWidth; + int patchHeight; } dsurface_t; typedef struct { - int planeNum; // positive plane side faces out of the leaf - int shaderNum; + int planeNum; // positive plane side faces out of the leaf + int shaderNum; } dbrushside_t; typedef struct { - int firstSide; - int numSides; - int shaderNum; // the shader that determines the contents flags + int firstSide; + int numSides; + int shaderNum; // the shader that determines the contents flags } dbrush_t; typedef enum { @@ -103,32 +103,32 @@ typedef enum { MST_FLARE } mapSurfaceType_t; -#define MAX_MAP_VISIBILITY 0x200000 -#define MAX_MAP_NODES 0x20000 -#define MAX_MAP_PLANES 0x20000 -#define MAX_MAP_LEAFS 0x20000 - -extern int numVisBytes; -extern int numleafs; -extern int numplanes; -extern int numnodes; -extern int numDrawVerts; -extern int numDrawSurfaces; -extern int numleafsurfaces; -extern int numbrushes; -extern int numbrushsides; -extern int numleafbrushes; - -extern dnode_t *dnodes; -extern dplane_t *dplanes; -extern dleaf_t *dleafs; -extern byte *visBytes; -extern qdrawVert_t *drawVerts; -extern dsurface_t *drawSurfaces; -extern int *dleafsurfaces; -extern dbrush_t *dbrushes; -extern dbrushside_t *dbrushsides; -extern int *dleafbrushes; +#define MAX_MAP_VISIBILITY 0x200000 +#define MAX_MAP_NODES 0x20000 +#define MAX_MAP_PLANES 0x20000 +#define MAX_MAP_LEAFS 0x20000 + +extern int numVisBytes; +extern int numleafs; +extern int numplanes; +extern int numnodes; +extern int numDrawVerts; +extern int numDrawSurfaces; +extern int numleafsurfaces; +extern int numbrushes; +extern int numbrushsides; +extern int numleafbrushes; + +extern dnode_t *dnodes; +extern dplane_t *dplanes; +extern dleaf_t *dleafs; +extern byte *visBytes; +extern qdrawVert_t *drawVerts; +extern dsurface_t *drawSurfaces; +extern int *dleafsurfaces; +extern dbrush_t *dbrushes; +extern dbrushside_t *dbrushsides; +extern int *dleafbrushes; qboolean LoadBSPFile( const char *filename ); void FreeBSPData(); diff --git a/contrib/bobtoolz/cportals.cpp b/contrib/bobtoolz/cportals.cpp index d05591c3..c408eda2 100644 --- a/contrib/bobtoolz/cportals.cpp +++ b/contrib/bobtoolz/cportals.cpp @@ -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" #include "CPortals.h" @@ -24,317 +24,301 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define LINE_BUF 1000 #define MSG_PREFIX "bobToolz plugin: " -// these classes are far less of a mess than my code was, +// these classes are far less of a mess than my code was, // thanq to G.DeWan 4 the prtview source on which it was based -CBspPortal::CBspPortal() -{ - memset(this, 0, sizeof(CBspPortal)); +CBspPortal::CBspPortal(){ + memset( this, 0, sizeof( CBspPortal ) ); } -CBspPortal::~CBspPortal() -{ +CBspPortal::~CBspPortal(){ delete[] point; } -void ClampFloat(float* p) -{ +void ClampFloat( float* p ){ double i; - double frac = modf(*p, &i); + double frac = modf( *p, &i ); - if(!frac) + if ( !frac ) { return; + } - if(fabs(*p - ceil(*p)) < MAX_ROUND_ERROR) - *p = ceilf(*p); + if ( fabs( *p - ceil( *p ) ) < MAX_ROUND_ERROR ) { + *p = ceilf( *p ); + } - if(fabs(*p - floor(*p)) < MAX_ROUND_ERROR) - *p = floorf(*p); + if ( fabs( *p - floor( *p ) ) < MAX_ROUND_ERROR ) { + *p = floorf( *p ); + } } -bool CBspPortal::Build(char *def, unsigned int pointCnt, bool bInverse) -{ +bool CBspPortal::Build( char *def, unsigned int pointCnt, bool bInverse ){ char *c = def; unsigned int n; point_count = pointCnt; - if(point_count < 3) + if ( point_count < 3 ) { return FALSE; + } point = new CBspPoint[point_count]; - for(n = 0; n < point_count; n++) + for ( n = 0; n < point_count; n++ ) { - for(; *c != 0 && *c != '('; c++); + for (; *c != 0 && *c != '('; c++ ) ; - if(*c == 0) + if ( *c == 0 ) { return FALSE; + } c++; int x; - if(bInverse) + if ( bInverse ) { x = point_count - n - 1; - else + } + else{ x = n; + } - sscanf(c, "%f %f %f", &point[x].p[0], &point[x].p[1], &point[x].p[2]); + sscanf( c, "%f %f %f", &point[x].p[0], &point[x].p[1], &point[x].p[2] ); - ClampFloat(&point[x].p[0]); - ClampFloat(&point[x].p[1]); - ClampFloat(&point[x].p[2]); + ClampFloat( &point[x].p[0] ); + ClampFloat( &point[x].p[1] ); + ClampFloat( &point[x].p[2] ); } return TRUE; } -CPortals::CPortals() -{ - memset(this, 0, sizeof(CPortals)); +CPortals::CPortals(){ + memset( this, 0, sizeof( CPortals ) ); } -CPortals::~CPortals() -{ +CPortals::~CPortals(){ Purge(); } -void CPortals::Purge() -{ - if(node) +void CPortals::Purge(){ + if ( node ) { delete[] node; + } node = NULL; node_count = 0; } -void CPortals::Load() -{ - char buf[LINE_BUF+1]; +void CPortals::Load(){ + char buf[LINE_BUF + 1]; + + memset( buf, 0, LINE_BUF + 1 ); - memset(buf, 0, LINE_BUF + 1); - Purge(); - Sys_Printf(MSG_PREFIX "Loading portal file %s.\n", fn); + Sys_Printf( MSG_PREFIX "Loading portal file %s.\n", fn ); FILE *in; - in = fopen(fn, "rt"); + in = fopen( fn, "rt" ); - if(in == NULL) - { - Sys_Printf(" ERROR - could not open file.\n"); + if ( in == NULL ) { + Sys_Printf( " ERROR - could not open file.\n" ); return; } - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } - if(strncmp("PRT1", buf, 4) != 0) - { - fclose(in); + if ( strncmp( "PRT1", buf, 4 ) != 0 ) { + fclose( in ); - Sys_Printf(" ERROR - File header indicates wrong file type (should be \"PRT1\").\n"); + Sys_Printf( " ERROR - File header indicates wrong file type (should be \"PRT1\").\n" ); return; } - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } - sscanf(buf, "%u", &node_count); + sscanf( buf, "%u", &node_count ); - if(node_count > 0xFFFF) - { - fclose(in); + if ( node_count > 0xFFFF ) { + fclose( in ); node_count = 0; - Sys_Printf(" ERROR - Extreme number of nodes, aborting.\n"); + Sys_Printf( " ERROR - Extreme number of nodes, aborting.\n" ); return; } - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); node_count = 0; - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } unsigned int p_count; - sscanf(buf, "%u", &p_count); + sscanf( buf, "%u", &p_count ); - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); node_count = 0; - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } unsigned int p_count2; - sscanf(buf, "%u", &p_count2); + sscanf( buf, "%u", &p_count2 ); node = new CBspNode[node_count]; unsigned int i; - for(i = 0; i < p_count; i++) + for ( i = 0; i < p_count; i++ ) { - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); node_count = 0; - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } unsigned int dummy, node1, node2; - sscanf(buf, "%u %u %u", &dummy, &node1, &node2); + sscanf( buf, "%u %u %u", &dummy, &node1, &node2 ); node[node1].portal_count++; node[node2].portal_count++; } - for(i = 0; i < p_count2; i++) + for ( i = 0; i < p_count2; i++ ) { - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); node_count = 0; - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } unsigned int dummy, node1; - sscanf(buf, "%u %u", &dummy, &node1); + sscanf( buf, "%u %u", &dummy, &node1 ); node[node1].portal_count++; } - for(i = 0; i < node_count; i++) + for ( i = 0; i < node_count; i++ ) node[i].portal = new CBspPortal[node[i].portal_count]; - fclose(in); + fclose( in ); - in = fopen(fn, "rt"); + in = fopen( fn, "rt" ); - fgets(buf, LINE_BUF, in); - fgets(buf, LINE_BUF, in); - fgets(buf, LINE_BUF, in); - fgets(buf, LINE_BUF, in); + fgets( buf, LINE_BUF, in ); + fgets( buf, LINE_BUF, in ); + fgets( buf, LINE_BUF, in ); + fgets( buf, LINE_BUF, in ); unsigned int n; - for(n = 0; n < p_count; n++) + for ( n = 0; n < p_count; n++ ) { - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); Purge(); - Sys_Printf(" ERROR - Could not find information for portal number %d of %d.\n", n + 1, p_count); + Sys_Printf( " ERROR - Could not find information for portal number %d of %d.\n", n + 1, p_count ); return; } unsigned int pCount, node1, node2; - sscanf(buf, "%u %u %u", &pCount, &node1, &node2); + sscanf( buf, "%u %u %u", &pCount, &node1, &node2 ); - if(!node[node1].AddPortal(buf, pCount, FALSE)) - { - fclose(in); + if ( !node[node1].AddPortal( buf, pCount, FALSE ) ) { + fclose( in ); Purge(); - Sys_Printf(" ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count); + Sys_Printf( " ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count ); return; } - if(!node[node2].AddPortal(buf, pCount, TRUE)) - { - fclose(in); + if ( !node[node2].AddPortal( buf, pCount, TRUE ) ) { + fclose( in ); Purge(); - Sys_Printf(" ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count); + Sys_Printf( " ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count ); return; } } - for(n = 0; n < p_count2; n++) + for ( n = 0; n < p_count2; n++ ) { - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); Purge(); - Sys_Printf(" ERROR - Could not find information for portal number %d of %d.\n", n + 1, p_count); + Sys_Printf( " ERROR - Could not find information for portal number %d of %d.\n", n + 1, p_count ); return; } unsigned int pCount, node1; - sscanf(buf, "%u %u", &pCount, &node1); + sscanf( buf, "%u %u", &pCount, &node1 ); - if(!node[node1].AddPortal(buf, pCount, FALSE)) - { - fclose(in); + if ( !node[node1].AddPortal( buf, pCount, FALSE ) ) { + fclose( in ); Purge(); - Sys_Printf(" ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count); + Sys_Printf( " ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, p_count ); return; } } - fclose(in); + fclose( in ); } -CBspNode::CBspNode() -{ +CBspNode::CBspNode(){ portal = NULL; portal_count = 0; portal_next = 0; } -CBspNode::~CBspNode() -{ - if(portal != NULL) +CBspNode::~CBspNode(){ + if ( portal != NULL ) { delete[] portal; + } } -bool CBspNode::AddPortal(char *def, unsigned int pointCnt, bool bInverse) -{ - return portal[portal_next++].Build(def, pointCnt, bInverse); +bool CBspNode::AddPortal( char *def, unsigned int pointCnt, bool bInverse ){ + return portal[portal_next++].Build( def, pointCnt, bInverse ); } diff --git a/contrib/bobtoolz/ctfToolz-GTK.cpp b/contrib/bobtoolz/ctfToolz-GTK.cpp index 271931ab..8cb0dbfd 100644 --- a/contrib/bobtoolz/ctfToolz-GTK.cpp +++ b/contrib/bobtoolz/ctfToolz-GTK.cpp @@ -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" @@ -25,10 +25,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "dialogs/dialogs-gtk.h" // Radiant function table -_QERFuncTable_1 g_FuncTable; -_QERAppBSPFrontendTable g_BSPTable; // for map name +_QERFuncTable_1 g_FuncTable; +_QERAppBSPFrontendTable g_BSPTable; // for map name -BOOL g_bBSPInitDone = FALSE; +BOOL g_bBSPInitDone = FALSE; // plugin name static const char *PLUGIN_NAME = "ctfToolz"; @@ -37,61 +37,61 @@ static const char *PLUGIN_NAME = "ctfToolz"; static const char *PLUGIN_COMMANDS = "About...,Colour Changer...,Swap Light Colours,Change Angles 180,Swap Spawn Points"; // globals -GtkWidget *g_pRadiantWnd=NULL; +GtkWidget *g_pRadiantWnd = NULL; static const char *PLUGIN_ABOUT = "ctfToolz for GtkRadiant\n" - "by djbob\n" + "by djbob\n" "http://www.planetquake.com/toolz\n\n"; -extern "C" LPVOID WINAPI QERPlug_GetFuncTable() -{ - return &g_FuncTable; +extern "C" LPVOID WINAPI QERPlug_GetFuncTable(){ + return &g_FuncTable; } -extern "C" LPCSTR WINAPI QERPlug_Init(HMODULE hApp, GtkWidget* pMainWidget) -{ +extern "C" LPCSTR WINAPI QERPlug_Init( HMODULE hApp, GtkWidget* pMainWidget ){ g_pRadiantWnd = pMainWidget; - memset(&g_FuncTable, 0, sizeof(_QERFuncTable_1)); + memset( &g_FuncTable, 0, sizeof( _QERFuncTable_1 ) ); g_FuncTable.m_fVersion = QER_PLUG_VERSION; - g_FuncTable.m_nSize = sizeof(_QERFuncTable_1); + g_FuncTable.m_nSize = sizeof( _QERFuncTable_1 ); return "ctfToolz for GTKradiant"; } -extern "C" LPCSTR WINAPI QERPlug_GetName() -{ +extern "C" LPCSTR WINAPI QERPlug_GetName(){ return (char*)PLUGIN_NAME; } -extern "C" LPCSTR WINAPI QERPlug_GetCommandList() -{ +extern "C" LPCSTR WINAPI QERPlug_GetCommandList(){ return (char*)PLUGIN_COMMANDS; } -extern "C" void WINAPI QERPlug_Dispatch (LPCSTR p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) -{ +extern "C" void WINAPI QERPlug_Dispatch( LPCSTR p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ){ LoadLists(); - if (!g_bBSPInitDone) - { - g_BSPTable.m_nSize = sizeof(_QERAppBSPFrontendTable); - if ( g_FuncTable.m_pfnRequestInterface( QERAppBSPFrontendTable_GUID, static_cast(&g_BSPTable) ) ) + if ( !g_bBSPInitDone ) { + g_BSPTable.m_nSize = sizeof( _QERAppBSPFrontendTable ); + if ( g_FuncTable.m_pfnRequestInterface( QERAppBSPFrontendTable_GUID, static_cast( &g_BSPTable ) ) ) { g_bBSPInitDone = TRUE; + } else { - Sys_ERROR("_QERAppBSPFrontendTable interface request failed\n"); + Sys_ERROR( "_QERAppBSPFrontendTable interface request failed\n" ); return; } } - - if(!strcmp(p, "About...")) - DoMessageBox(PLUGIN_ABOUT, "About", IDOK); - else if(!strcmp(p, "Colour Changer...")) + + if ( !strcmp( p, "About..." ) ) { + DoMessageBox( PLUGIN_ABOUT, "About", IDOK ); + } + else if ( !strcmp( p, "Colour Changer..." ) ) { DoCTFColourChanger(); - else if(!strcmp(p, "Swap Light Colours")) + } + else if ( !strcmp( p, "Swap Light Colours" ) ) { DoSwapLights(); - else if(!strcmp(p, "Change Angles 180")) + } + else if ( !strcmp( p, "Change Angles 180" ) ) { DoChangeAngles(); - else if(!strcmp(p, "Swap Spawn Points")) + } + else if ( !strcmp( p, "Swap Spawn Points" ) ) { DoSwapSpawns(); + } } diff --git a/contrib/bobtoolz/ctfresource_gtk.h b/contrib/bobtoolz/ctfresource_gtk.h index 3f706a04..3be1d0d2 100644 --- a/contrib/bobtoolz/ctfresource_gtk.h +++ b/contrib/bobtoolz/ctfresource_gtk.h @@ -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 + */ //{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. @@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 diff --git a/contrib/bobtoolz/dialogs/AboutDialog.cpp b/contrib/bobtoolz/dialogs/AboutDialog.cpp index e5d37038..6ba6df14 100644 --- a/contrib/bobtoolz/dialogs/AboutDialog.cpp +++ b/contrib/bobtoolz/dialogs/AboutDialog.cpp @@ -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 + */ // AboutDialog.cpp : implementation file // @@ -33,30 +33,27 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // CAboutDialog dialog -CAboutDialog::CAboutDialog(CWnd* pParent /*=NULL*/) - : CDialog(CAboutDialog::IDD, pParent) -{ +CAboutDialog::CAboutDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CAboutDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CAboutDialog) - // NOTE: the ClassWizard will add member initialization here + // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } -void CAboutDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CAboutDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CAboutDialog) - // NOTE: the ClassWizard will add DDX and DDV calls here + // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CAboutDialog, CDialog) - //{{AFX_MSG_MAP(CAboutDialog) - // NOTE: the ClassWizard will add message map macros here - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CAboutDialog, CDialog ) +//{{AFX_MSG_MAP(CAboutDialog) +// NOTE: the ClassWizard will add message map macros here +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAboutDialog message handlers - diff --git a/contrib/bobtoolz/dialogs/AboutDialog.h b/contrib/bobtoolz/dialogs/AboutDialog.h index 54cfd017..64b4eb2c 100644 --- a/contrib/bobtoolz/dialogs/AboutDialog.h +++ b/contrib/bobtoolz/dialogs/AboutDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_ABOUTDIALOG_H__3BA55F71_1D27_11D3_BC7B_F7EFD9765E37__INCLUDED_) +#if !defined( AFX_ABOUTDIALOG_H__3BA55F71_1D27_11D3_BC7B_F7EFD9765E37__INCLUDED_ ) #define AFX_ABOUTDIALOG_H__3BA55F71_1D27_11D3_BC7B_F7EFD9765E37__INCLUDED_ #if _MSC_VER >= 1000 @@ -33,29 +33,29 @@ class CAboutDialog : public CDialog { // Construction public: - CAboutDialog(CWnd* pParent = NULL); // standard constructor +CAboutDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CAboutDialog) - enum { IDD = IDD_ABOUT }; - //}}AFX_DATA +//{{AFX_DATA(CAboutDialog) +enum { IDD = IDD_ABOUT }; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CAboutDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CAboutDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CAboutDialog) - // NOTE: the ClassWizard will add member functions here - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CAboutDialog) +// NOTE: the ClassWizard will add member functions here +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/AutoCaulkDialog.cpp b/contrib/bobtoolz/dialogs/AutoCaulkDialog.cpp index fd46b7fb..bcbb4957 100644 --- a/contrib/bobtoolz/dialogs/AutoCaulkDialog.cpp +++ b/contrib/bobtoolz/dialogs/AutoCaulkDialog.cpp @@ -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 + */ // AutoCaulkDialog.cpp : implementation file // @@ -34,29 +34,27 @@ static char THIS_FILE[] = __FILE__; // CAutoCaulkDialog dialog -CAutoCaulkDialog::CAutoCaulkDialog(CWnd* pParent /*=NULL*/) - : CDialog(CAutoCaulkDialog::IDD, pParent) -{ +CAutoCaulkDialog::CAutoCaulkDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CAutoCaulkDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CAutoCaulkDialog) - // NOTE: the ClassWizard will add member initialization here + // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } -void CAutoCaulkDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CAutoCaulkDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CAutoCaulkDialog) - DDX_Control(pDX, IDC_PROGRESS2, m_prog2); - DDX_Control(pDX, IDC_PROGRESS1, m_prog1); + DDX_Control( pDX, IDC_PROGRESS2, m_prog2 ); + DDX_Control( pDX, IDC_PROGRESS1, m_prog1 ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CAutoCaulkDialog, CDialog) - //{{AFX_MSG_MAP(CAutoCaulkDialog) - // NOTE: the ClassWizard will add message map macros here - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CAutoCaulkDialog, CDialog ) +//{{AFX_MSG_MAP(CAutoCaulkDialog) +// NOTE: the ClassWizard will add message map macros here +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// diff --git a/contrib/bobtoolz/dialogs/AutoCaulkDialog.h b/contrib/bobtoolz/dialogs/AutoCaulkDialog.h index a8740275..30ca2e75 100644 --- a/contrib/bobtoolz/dialogs/AutoCaulkDialog.h +++ b/contrib/bobtoolz/dialogs/AutoCaulkDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_AUTOCAULKDIALOG_H__C2783D61_DDEB_11D4_ACF6_004095A18133__INCLUDED_) +#if !defined( AFX_AUTOCAULKDIALOG_H__C2783D61_DDEB_11D4_ACF6_004095A18133__INCLUDED_ ) #define AFX_AUTOCAULKDIALOG_H__C2783D61_DDEB_11D4_ACF6_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -33,31 +33,31 @@ class CAutoCaulkDialog : public CDialog { // Construction public: - CAutoCaulkDialog(CWnd* pParent = NULL); // standard constructor +CAutoCaulkDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CAutoCaulkDialog) - enum { IDD = IDD_AUTOCAULK_DIALOG }; - CProgressCtrl m_prog2; - CProgressCtrl m_prog1; - //}}AFX_DATA +//{{AFX_DATA(CAutoCaulkDialog) +enum { IDD = IDD_AUTOCAULK_DIALOG }; +CProgressCtrl m_prog2; +CProgressCtrl m_prog1; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CAutoCaulkDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CAutoCaulkDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CAutoCaulkDialog) - // NOTE: the ClassWizard will add member functions here - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CAutoCaulkDialog) +// NOTE: the ClassWizard will add member functions here +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/AutoCaulkStartDialog.cpp b/contrib/bobtoolz/dialogs/AutoCaulkStartDialog.cpp index 857df71a..f59dfd33 100644 --- a/contrib/bobtoolz/dialogs/AutoCaulkStartDialog.cpp +++ b/contrib/bobtoolz/dialogs/AutoCaulkStartDialog.cpp @@ -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 + */ // AutoCaulkStartDialog.cpp : implementation file // @@ -34,32 +34,30 @@ static char THIS_FILE[] = __FILE__; // CAutoCaulkStartDialog dialog -CAutoCaulkStartDialog::CAutoCaulkStartDialog(CWnd* pParent /*=NULL*/) - : CDialog(CAutoCaulkStartDialog::IDD, pParent) -{ +CAutoCaulkStartDialog::CAutoCaulkStartDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CAutoCaulkStartDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CAutoCaulkStartDialog) m_bAllowDestruction = FALSE; - m_Warning1 = _T(""); + m_Warning1 = _T( "" ); m_nMode = 0; //}}AFX_DATA_INIT } -void CAutoCaulkStartDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CAutoCaulkStartDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CAutoCaulkStartDialog) - DDX_Check(pDX, IDC_KILLBRUSHES_CHECK, m_bAllowDestruction); - DDX_Text(pDX, IDC_WARNING1_STATIC, m_Warning1); - DDX_Radio(pDX, IDC_AC_NORMAL_RADIO, m_nMode); + DDX_Check( pDX, IDC_KILLBRUSHES_CHECK, m_bAllowDestruction ); + DDX_Text( pDX, IDC_WARNING1_STATIC, m_Warning1 ); + DDX_Radio( pDX, IDC_AC_NORMAL_RADIO, m_nMode ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CAutoCaulkStartDialog, CDialog) - //{{AFX_MSG_MAP(CAutoCaulkStartDialog) - // NOTE: the ClassWizard will add message map macros here - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CAutoCaulkStartDialog, CDialog ) +//{{AFX_MSG_MAP(CAutoCaulkStartDialog) +// NOTE: the ClassWizard will add message map macros here +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// diff --git a/contrib/bobtoolz/dialogs/AutoCaulkStartDialog.h b/contrib/bobtoolz/dialogs/AutoCaulkStartDialog.h index 9311c51c..5c2f4297 100644 --- a/contrib/bobtoolz/dialogs/AutoCaulkStartDialog.h +++ b/contrib/bobtoolz/dialogs/AutoCaulkStartDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_AUTOCAULKSTARTDIALOG_H__F3DE2E81_E73E_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_AUTOCAULKSTARTDIALOG_H__F3DE2E81_E73E_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_AUTOCAULKSTARTDIALOG_H__F3DE2E81_E73E_11D4_ACF7_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -26,9 +26,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // AutoCaulkStartDialog.h : header file // -#define MODE_AC_NORMAL 0 -#define MODE_AC_BUILD_MINI_PRT 1 -#define MODE_AC_SUPER 2 +#define MODE_AC_NORMAL 0 +#define MODE_AC_BUILD_MINI_PRT 1 +#define MODE_AC_SUPER 2 ///////////////////////////////////////////////////////////////////////////// // CAutoCaulkStartDialog dialog @@ -37,32 +37,32 @@ class CAutoCaulkStartDialog : public CDialog { // Construction public: - CAutoCaulkStartDialog(CWnd* pParent = NULL); // standard constructor +CAutoCaulkStartDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CAutoCaulkStartDialog) - enum { IDD = IDD_AUTOCAULKSTART_DIALOG }; - BOOL m_bAllowDestruction; - CString m_Warning1; - int m_nMode; - //}}AFX_DATA +//{{AFX_DATA(CAutoCaulkStartDialog) +enum { IDD = IDD_AUTOCAULKSTART_DIALOG }; +BOOL m_bAllowDestruction; +CString m_Warning1; +int m_nMode; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CAutoCaulkStartDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CAutoCaulkStartDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CAutoCaulkStartDialog) - // NOTE: the ClassWizard will add member functions here - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CAutoCaulkStartDialog) +// NOTE: the ClassWizard will add member functions here +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/BrushCheckDialog.h b/contrib/bobtoolz/dialogs/BrushCheckDialog.h index 2ccf8e8f..c232657b 100644 --- a/contrib/bobtoolz/dialogs/BrushCheckDialog.h +++ b/contrib/bobtoolz/dialogs/BrushCheckDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_BRUSHCHECKDIALOG_H__4BF2C701_D9EF_11D4_ACF6_004095A18133__INCLUDED_) +#if !defined( AFX_BRUSHCHECKDIALOG_H__4BF2C701_D9EF_11D4_ACF6_004095A18133__INCLUDED_ ) #define AFX_BRUSHCHECKDIALOG_H__4BF2C701_D9EF_11D4_ACF6_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -33,30 +33,30 @@ class CBrushCheckDialog : public CDialog { // Construction public: - CBrushCheckDialog(CWnd* pParent = NULL); // standard constructor +CBrushCheckDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CBrushCheckDialog) - enum { IDD = IDD_BRUSHCHECKER_DIALOG }; - CProgressCtrl m_prog1; - //}}AFX_DATA +//{{AFX_DATA(CBrushCheckDialog) +enum { IDD = IDD_BRUSHCHECKER_DIALOG }; +CProgressCtrl m_prog1; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CBrushCheckDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CBrushCheckDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CBrushCheckDialog) - // NOTE: the ClassWizard will add member functions here - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CBrushCheckDialog) +// NOTE: the ClassWizard will add member functions here +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/DoorDialog.cpp b/contrib/bobtoolz/dialogs/DoorDialog.cpp index 2a1829d5..ce0d6213 100644 --- a/contrib/bobtoolz/dialogs/DoorDialog.cpp +++ b/contrib/bobtoolz/dialogs/DoorDialog.cpp @@ -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 + */ // DoorDialog.cpp : implementation file // @@ -33,60 +33,56 @@ static char THIS_FILE[] = __FILE__; // CDoorDialog dialog -CDoorDialog::CDoorDialog(CWnd* pParent /*=NULL*/) - : CDialog(CDoorDialog::IDD, pParent) -{ +CDoorDialog::CDoorDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CDoorDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CDoorDialog) - m_fbTextureName = _T(""); + m_fbTextureName = _T( "" ); m_bSclMainHor = TRUE; m_bSclMainVert = TRUE; m_bSclTrimHor = TRUE; m_bSclTrimVert = FALSE; - m_trimTextureName = _T(""); - m_trimTexSetBox = _T(""); - m_mainTexSetBox = _T(""); + m_trimTextureName = _T( "" ); + m_trimTexSetBox = _T( "" ); + m_mainTexSetBox = _T( "" ); m_doorDirection = -1; //}}AFX_DATA_INIT } -void CDoorDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CDoorDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CDoorDialog) - DDX_Text(pDX, IDC_FBTEXTURE_EDIT, m_fbTextureName); - DDX_Check(pDX, IDC_TEXSCALE1_CHECK, m_bSclMainHor); - DDX_Check(pDX, IDC_TEXSCALE2_CHECK, m_bSclMainVert); - DDX_Check(pDX, IDC_TEXSCALE3_CHECK, m_bSclTrimHor); - DDX_Check(pDX, IDC_TEXSCALE4_CHECK, m_bSclTrimVert); - DDX_Text(pDX, IDC_TRIMTEXTURE_EDIT, m_trimTextureName); - DDX_CBString(pDX, IDC_TRIMTEX_COMBO, m_trimTexSetBox); - DDX_CBString(pDX, IDC_MAINTEX_COMBO, m_mainTexSetBox); - DDX_Radio(pDX, IDC_DIR_NS_RADIO, m_doorDirection); + DDX_Text( pDX, IDC_FBTEXTURE_EDIT, m_fbTextureName ); + DDX_Check( pDX, IDC_TEXSCALE1_CHECK, m_bSclMainHor ); + DDX_Check( pDX, IDC_TEXSCALE2_CHECK, m_bSclMainVert ); + DDX_Check( pDX, IDC_TEXSCALE3_CHECK, m_bSclTrimHor ); + DDX_Check( pDX, IDC_TEXSCALE4_CHECK, m_bSclTrimVert ); + DDX_Text( pDX, IDC_TRIMTEXTURE_EDIT, m_trimTextureName ); + DDX_CBString( pDX, IDC_TRIMTEX_COMBO, m_trimTexSetBox ); + DDX_CBString( pDX, IDC_MAINTEX_COMBO, m_mainTexSetBox ); + DDX_Radio( pDX, IDC_DIR_NS_RADIO, m_doorDirection ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CDoorDialog, CDialog) - //{{AFX_MSG_MAP(CDoorDialog) - ON_BN_CLICKED(IDC_SET_MAINTEX_BTN, OnSetMaintexBtn) - ON_BN_CLICKED(IDC_SET_TRIMTEX_BTN, OnSetTrimtexBtn) - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CDoorDialog, CDialog ) +//{{AFX_MSG_MAP(CDoorDialog) +ON_BN_CLICKED( IDC_SET_MAINTEX_BTN, OnSetMaintexBtn ) +ON_BN_CLICKED( IDC_SET_TRIMTEX_BTN, OnSetTrimtexBtn ) +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDoorDialog message handlers -void CDoorDialog::OnSetMaintexBtn() -{ - UpdateData(TRUE); +void CDoorDialog::OnSetMaintexBtn(){ + UpdateData( TRUE ); m_fbTextureName = m_mainTexSetBox; - UpdateData(FALSE); + UpdateData( FALSE ); } -void CDoorDialog::OnSetTrimtexBtn() -{ - UpdateData(TRUE); +void CDoorDialog::OnSetTrimtexBtn(){ + UpdateData( TRUE ); m_trimTextureName = m_trimTexSetBox; - UpdateData(FALSE); + UpdateData( FALSE ); } diff --git a/contrib/bobtoolz/dialogs/DoorDialog.h b/contrib/bobtoolz/dialogs/DoorDialog.h index 4d312cb9..94242aff 100644 --- a/contrib/bobtoolz/dialogs/DoorDialog.h +++ b/contrib/bobtoolz/dialogs/DoorDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_DOORDIALOG_H__F36CBE01_D2C4_11D4_AE97_004095A18133__INCLUDED_) +#if !defined( AFX_DOORDIALOG_H__F36CBE01_D2C4_11D4_AE97_004095A18133__INCLUDED_ ) #define AFX_DOORDIALOG_H__F36CBE01_D2C4_11D4_AE97_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -33,39 +33,39 @@ class CDoorDialog : public CDialog { // Construction public: - CDoorDialog(CWnd* pParent = NULL); // standard constructor +CDoorDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CDoorDialog) - enum { IDD = IDD_DOOR_DIALOG }; - CString m_fbTextureName; - BOOL m_bSclMainHor; - BOOL m_bSclMainVert; - BOOL m_bSclTrimHor; - BOOL m_bSclTrimVert; - CString m_trimTextureName; - CString m_trimTexSetBox; - CString m_mainTexSetBox; - int m_doorDirection; - //}}AFX_DATA +//{{AFX_DATA(CDoorDialog) +enum { IDD = IDD_DOOR_DIALOG }; +CString m_fbTextureName; +BOOL m_bSclMainHor; +BOOL m_bSclMainVert; +BOOL m_bSclTrimHor; +BOOL m_bSclTrimVert; +CString m_trimTextureName; +CString m_trimTexSetBox; +CString m_mainTexSetBox; +int m_doorDirection; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CDoorDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CDoorDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CDoorDialog) - afx_msg void OnSetMaintexBtn(); - afx_msg void OnSetTrimtexBtn(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CDoorDialog) +afx_msg void OnSetMaintexBtn(); +afx_msg void OnSetTrimtexBtn(); +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/IntersectDialog.cpp b/contrib/bobtoolz/dialogs/IntersectDialog.cpp index 63a42d02..4bcc8373 100644 --- a/contrib/bobtoolz/dialogs/IntersectDialog.cpp +++ b/contrib/bobtoolz/dialogs/IntersectDialog.cpp @@ -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 + */ // IntersectDialog.cpp : implementation file // @@ -33,9 +33,8 @@ static char THIS_FILE[] = __FILE__; // CIntersectDialog dialog -CIntersectDialog::CIntersectDialog(CWnd* pParent /*=NULL*/) - : CDialog(CIntersectDialog::IDD, pParent) -{ +CIntersectDialog::CIntersectDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CIntersectDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CIntersectDialog) m_nBrushOptions = 1; m_bUseDetail = FALSE; @@ -44,21 +43,20 @@ CIntersectDialog::CIntersectDialog(CWnd* pParent /*=NULL*/) } -void CIntersectDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CIntersectDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CIntersectDialog) - DDX_Radio(pDX, IDC_WHOLEMAP_RADIO, m_nBrushOptions); - DDX_Check(pDX, IDC_DETAIL_INCLUDE_CHECK, m_bUseDetail); - DDX_Check(pDX, IDC_DUPLICATEONLY_CHECK, m_bDuplicateOnly); + DDX_Radio( pDX, IDC_WHOLEMAP_RADIO, m_nBrushOptions ); + DDX_Check( pDX, IDC_DETAIL_INCLUDE_CHECK, m_bUseDetail ); + DDX_Check( pDX, IDC_DUPLICATEONLY_CHECK, m_bDuplicateOnly ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CIntersectDialog, CDialog) - //{{AFX_MSG_MAP(CIntersectDialog) - // NOTE: the ClassWizard will add message map macros here - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CIntersectDialog, CDialog ) +//{{AFX_MSG_MAP(CIntersectDialog) +// NOTE: the ClassWizard will add message map macros here +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// diff --git a/contrib/bobtoolz/dialogs/IntersectDialog.h b/contrib/bobtoolz/dialogs/IntersectDialog.h index d1190a6f..d8d64c3e 100644 --- a/contrib/bobtoolz/dialogs/IntersectDialog.h +++ b/contrib/bobtoolz/dialogs/IntersectDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_INTERSECTDIALOG_H__03507C01_D3B3_11D4_AE97_004095A18133__INCLUDED_) +#if !defined( AFX_INTERSECTDIALOG_H__03507C01_D3B3_11D4_AE97_004095A18133__INCLUDED_ ) #define AFX_INTERSECTDIALOG_H__03507C01_D3B3_11D4_AE97_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -26,8 +26,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // IntersectDialog.h : header file // -#define BRUSH_OPT_WHOLE_MAP 0 -#define BRUSH_OPT_SELECTED 1 +#define BRUSH_OPT_WHOLE_MAP 0 +#define BRUSH_OPT_SELECTED 1 ///////////////////////////////////////////////////////////////////////////// // CIntersectDialog dialog @@ -36,32 +36,32 @@ class CIntersectDialog : public CDialog { // Construction public: - CIntersectDialog(CWnd* pParent = NULL); // standard constructor +CIntersectDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CIntersectDialog) - enum { IDD = IDD_INTERSECT_DIALOG }; - int m_nBrushOptions; - BOOL m_bUseDetail; - BOOL m_bDuplicateOnly; - //}}AFX_DATA +//{{AFX_DATA(CIntersectDialog) +enum { IDD = IDD_INTERSECT_DIALOG }; +int m_nBrushOptions; +BOOL m_bUseDetail; +BOOL m_bDuplicateOnly; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CIntersectDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CIntersectDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CIntersectDialog) - // NOTE: the ClassWizard will add member functions here - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CIntersectDialog) +// NOTE: the ClassWizard will add member functions here +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/IntersectInfoDialog.cpp b/contrib/bobtoolz/dialogs/IntersectInfoDialog.cpp index f7684a9e..c74a635e 100644 --- a/contrib/bobtoolz/dialogs/IntersectInfoDialog.cpp +++ b/contrib/bobtoolz/dialogs/IntersectInfoDialog.cpp @@ -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 + */ // IntersectInfoDialog.cpp : implementation file // @@ -34,27 +34,25 @@ static char THIS_FILE[] = __FILE__; // CIntersectInfoDialog dialog -CIntersectInfoDialog::CIntersectInfoDialog(CWnd* pParent /*=NULL*/) - : CDialog(CIntersectInfoDialog::IDD, pParent) -{ +CIntersectInfoDialog::CIntersectInfoDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CIntersectInfoDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CIntersectInfoDialog) //}}AFX_DATA_INIT } -void CIntersectInfoDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CIntersectInfoDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CIntersectInfoDialog) - DDX_Control(pDX, IDC_PROGRESS1, m_prog1); + DDX_Control( pDX, IDC_PROGRESS1, m_prog1 ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CIntersectInfoDialog, CDialog) - //{{AFX_MSG_MAP(CIntersectInfoDialog) - // NOTE: the ClassWizard will add message map macros here - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CIntersectInfoDialog, CDialog ) +//{{AFX_MSG_MAP(CIntersectInfoDialog) +// NOTE: the ClassWizard will add message map macros here +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// diff --git a/contrib/bobtoolz/dialogs/IntersectInfoDialog.h b/contrib/bobtoolz/dialogs/IntersectInfoDialog.h index 51a4bf75..58553d1e 100644 --- a/contrib/bobtoolz/dialogs/IntersectInfoDialog.h +++ b/contrib/bobtoolz/dialogs/IntersectInfoDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_INTERSECTINFODIALOG_H__62CDC8CD_D9D2_11D4_ACF6_004095A18133__INCLUDED_) +#if !defined( AFX_INTERSECTINFODIALOG_H__62CDC8CD_D9D2_11D4_ACF6_004095A18133__INCLUDED_ ) #define AFX_INTERSECTINFODIALOG_H__62CDC8CD_D9D2_11D4_ACF6_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -33,30 +33,30 @@ class CIntersectInfoDialog : public CDialog { // Construction public: - CIntersectInfoDialog(CWnd* pParent = NULL); // standard constructor +CIntersectInfoDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CIntersectInfoDialog) - enum { IDD = IDD_INTERSECT_INFO_DIALOG }; - CProgressCtrl m_prog1; - //}}AFX_DATA +//{{AFX_DATA(CIntersectInfoDialog) +enum { IDD = IDD_INTERSECT_INFO_DIALOG }; +CProgressCtrl m_prog1; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CIntersectInfoDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CIntersectInfoDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CIntersectInfoDialog) - // NOTE: the ClassWizard will add member functions here - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CIntersectInfoDialog) +// NOTE: the ClassWizard will add member functions here +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/PolygonDialog.cpp b/contrib/bobtoolz/dialogs/PolygonDialog.cpp index f0a38d6e..652d9cb0 100644 --- a/contrib/bobtoolz/dialogs/PolygonDialog.cpp +++ b/contrib/bobtoolz/dialogs/PolygonDialog.cpp @@ -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 + */ // PolygonDialog.cpp : implementation file // @@ -34,9 +34,8 @@ static char THIS_FILE[] = __FILE__; // CPolygonDialog dialog -CPolygonDialog::CPolygonDialog(CWnd* pParent /*=NULL*/) - : CDialog(CPolygonDialog::IDD, pParent) -{ +CPolygonDialog::CPolygonDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CPolygonDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CPolygonDialog) m_nSideCount = 3; m_bInverse = FALSE; @@ -46,71 +45,67 @@ CPolygonDialog::CPolygonDialog(CWnd* pParent /*=NULL*/) //}}AFX_DATA_INIT } -void CPolygonDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CPolygonDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CPolygonDialog) - DDX_Text(pDX, IDC_EDIT1, m_nSideCount); - DDV_MinMaxUInt(pDX, m_nSideCount, 3, MAX_POLYGON_FACES); - DDX_Check(pDX, IDC_INVERSE_CHK, m_bInverse); - DDX_Check(pDX, IDC_BORDER_CHK, m_bBorder); - DDX_Text(pDX, IDC_BORDER_EDIT, m_nBorderSize); - DDV_MinMaxUInt(pDX, m_nBorderSize, 1, 1024); - DDX_Check(pDX, IDC_ALIGN_CHK, m_bAlignTop); + DDX_Text( pDX, IDC_EDIT1, m_nSideCount ); + DDV_MinMaxUInt( pDX, m_nSideCount, 3, MAX_POLYGON_FACES ); + DDX_Check( pDX, IDC_INVERSE_CHK, m_bInverse ); + DDX_Check( pDX, IDC_BORDER_CHK, m_bBorder ); + DDX_Text( pDX, IDC_BORDER_EDIT, m_nBorderSize ); + DDV_MinMaxUInt( pDX, m_nBorderSize, 1, 1024 ); + DDX_Check( pDX, IDC_ALIGN_CHK, m_bAlignTop ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CPolygonDialog, CDialog) - //{{AFX_MSG_MAP(CPolygonDialog) - ON_BN_CLICKED(IDC_BORDER_CHK, OnBorderChkClicked) - ON_BN_CLICKED(IDC_INVERSE_CHK, OnInverseChkClickrd) - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CPolygonDialog, CDialog ) +//{{AFX_MSG_MAP(CPolygonDialog) +ON_BN_CLICKED( IDC_BORDER_CHK, OnBorderChkClicked ) +ON_BN_CLICKED( IDC_INVERSE_CHK, OnInverseChkClickrd ) +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPolygonDialog message handlers -BOOL CPolygonDialog::OnInitDialog() -{ +BOOL CPolygonDialog::OnInitDialog(){ CDialog::OnInitDialog(); - - EnableBordered(!GetChkBool(IDC_INVERSE_CHK)); - EnableBorderEdit(!GetChkBool(IDC_INVERSE_CHK) && GetChkBool(IDC_BORDER_CHK)); - + + EnableBordered( !GetChkBool( IDC_INVERSE_CHK ) ); + EnableBorderEdit( !GetChkBool( IDC_INVERSE_CHK ) && GetChkBool( IDC_BORDER_CHK ) ); + return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } -void CPolygonDialog::EnableBordered(BOOL bEnable) -{ - CWnd* dtlChk = GetDlgItem(IDC_BORDER_CHK); - if(dtlChk) - dtlChk->EnableWindow(bEnable); +void CPolygonDialog::EnableBordered( BOOL bEnable ){ + CWnd* dtlChk = GetDlgItem( IDC_BORDER_CHK ); + if ( dtlChk ) { + dtlChk->EnableWindow( bEnable ); + } } -void CPolygonDialog::EnableBorderEdit(BOOL bEnable) -{ - CWnd* dtlChk = GetDlgItem(IDC_BORDER_EDIT); - if(dtlChk) - dtlChk->EnableWindow(bEnable); +void CPolygonDialog::EnableBorderEdit( BOOL bEnable ){ + CWnd* dtlChk = GetDlgItem( IDC_BORDER_EDIT ); + if ( dtlChk ) { + dtlChk->EnableWindow( bEnable ); + } } -void CPolygonDialog::OnBorderChkClicked() -{ - EnableBorderEdit(!GetChkBool(IDC_INVERSE_CHK) && GetChkBool(IDC_BORDER_CHK)); +void CPolygonDialog::OnBorderChkClicked(){ + EnableBorderEdit( !GetChkBool( IDC_INVERSE_CHK ) && GetChkBool( IDC_BORDER_CHK ) ); } -void CPolygonDialog::OnInverseChkClickrd() -{ - EnableBordered(!GetChkBool(IDC_INVERSE_CHK)); - EnableBorderEdit(!GetChkBool(IDC_INVERSE_CHK) && GetChkBool(IDC_BORDER_CHK)); +void CPolygonDialog::OnInverseChkClickrd(){ + EnableBordered( !GetChkBool( IDC_INVERSE_CHK ) ); + EnableBorderEdit( !GetChkBool( IDC_INVERSE_CHK ) && GetChkBool( IDC_BORDER_CHK ) ); } -BOOL CPolygonDialog::GetChkBool(int nID) -{ - CButton* btn = (CButton*)GetDlgItem(nID); - if(btn) +BOOL CPolygonDialog::GetChkBool( int nID ){ + CButton* btn = (CButton*)GetDlgItem( nID ); + if ( btn ) { return btn->GetCheck(); + } return FALSE; } diff --git a/contrib/bobtoolz/dialogs/PolygonDialog.h b/contrib/bobtoolz/dialogs/PolygonDialog.h index afe5cb87..8774e1f0 100644 --- a/contrib/bobtoolz/dialogs/PolygonDialog.h +++ b/contrib/bobtoolz/dialogs/PolygonDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_POLYGONDIALOG_H__EF7FE400_628A_11D1_B66D_004095A18133__INCLUDED_) +#if !defined( AFX_POLYGONDIALOG_H__EF7FE400_628A_11D1_B66D_004095A18133__INCLUDED_ ) #define AFX_POLYGONDIALOG_H__EF7FE400_628A_11D1_B66D_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -33,39 +33,39 @@ class CPolygonDialog : public CDialog { // Construction public: - BOOL GetChkBool(int nID); - void EnableBorderEdit(BOOL bEnable); - void EnableBordered(BOOL bEnable); - CPolygonDialog(CWnd* pParent = NULL); // standard constructor +BOOL GetChkBool( int nID ); +void EnableBorderEdit( BOOL bEnable ); +void EnableBordered( BOOL bEnable ); +CPolygonDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CPolygonDialog) - enum { IDD = IDD_POLYGON_DIALOG }; - UINT m_nSideCount; - BOOL m_bInverse; - BOOL m_bBorder; - UINT m_nBorderSize; - BOOL m_bAlignTop; - //}}AFX_DATA +//{{AFX_DATA(CPolygonDialog) +enum { IDD = IDD_POLYGON_DIALOG }; +UINT m_nSideCount; +BOOL m_bInverse; +BOOL m_bBorder; +UINT m_nBorderSize; +BOOL m_bAlignTop; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CPolygonDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CPolygonDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CPolygonDialog) - virtual BOOL OnInitDialog(); - afx_msg void OnBorderChkClicked(); - afx_msg void OnInverseChkClickrd(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CPolygonDialog) +virtual BOOL OnInitDialog(); +afx_msg void OnBorderChkClicked(); +afx_msg void OnInverseChkClickrd(); +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/StairDialog.cpp b/contrib/bobtoolz/dialogs/StairDialog.cpp index 4e7feba3..8b94092f 100644 --- a/contrib/bobtoolz/dialogs/StairDialog.cpp +++ b/contrib/bobtoolz/dialogs/StairDialog.cpp @@ -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 + */ // StairDialog.cpp : implementation file // @@ -33,73 +33,67 @@ static char THIS_FILE[] = __FILE__; // CStairDialog dialog -CStairDialog::CStairDialog(CWnd* pParent /*=NULL*/) - : CDialog(CStairDialog::IDD, pParent) -{ +CStairDialog::CStairDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CStairDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CStairDialog) m_nStairHeight = 8; m_StairDir = 0; m_StairStyle = 0; - m_riserTexture = _T(""); + m_riserTexture = _T( "" ); m_bDetail = TRUE; //}}AFX_DATA_INIT } -void CStairDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CStairDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CStairDialog) - DDX_Text(pDX, IDC_EDIT1, m_nStairHeight); - DDV_MinMaxUInt(pDX, m_nStairHeight, 1, 256); - DDX_Radio(pDX, IDC_DIR_N_RADIO, m_StairDir); - DDX_Radio(pDX, IDC_STYLE_ORIG_RADIO, m_StairStyle); - DDX_Text(pDX, IDC_RISER_EDIT, m_riserTexture); - DDV_MaxChars(pDX, m_riserTexture, 256); - DDX_Check(pDX, IDC_DETAIL_CHK, m_bDetail); + DDX_Text( pDX, IDC_EDIT1, m_nStairHeight ); + DDV_MinMaxUInt( pDX, m_nStairHeight, 1, 256 ); + DDX_Radio( pDX, IDC_DIR_N_RADIO, m_StairDir ); + DDX_Radio( pDX, IDC_STYLE_ORIG_RADIO, m_StairStyle ); + DDX_Text( pDX, IDC_RISER_EDIT, m_riserTexture ); + DDV_MaxChars( pDX, m_riserTexture, 256 ); + DDX_Check( pDX, IDC_DETAIL_CHK, m_bDetail ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CStairDialog, CDialog) - //{{AFX_MSG_MAP(CStairDialog) - ON_BN_CLICKED(IDC_STYLE_BOB_RADIO, OnStyleBobClicked) - ON_BN_CLICKED(IDC_STYLE_ORIG_RADIO, OnStyleOrigClicked) - ON_BN_CLICKED(IDC_STYLE_CORNER_RADIO, OnStyleCornerClicked) - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CStairDialog, CDialog ) +//{{AFX_MSG_MAP(CStairDialog) +ON_BN_CLICKED( IDC_STYLE_BOB_RADIO, OnStyleBobClicked ) +ON_BN_CLICKED( IDC_STYLE_ORIG_RADIO, OnStyleOrigClicked ) +ON_BN_CLICKED( IDC_STYLE_CORNER_RADIO, OnStyleCornerClicked ) +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CStairDialog message handlers -void CStairDialog::OnStyleBobClicked() -{ - EnableDetail(TRUE); +void CStairDialog::OnStyleBobClicked(){ + EnableDetail( TRUE ); } -void CStairDialog::OnStyleOrigClicked() -{ - EnableDetail(FALSE); +void CStairDialog::OnStyleOrigClicked(){ + EnableDetail( FALSE ); } -void CStairDialog::EnableDetail(BOOL bEnable) -{ - CWnd* dtlChk = GetDlgItem(IDC_DETAIL_CHK); - if(dtlChk) - dtlChk->EnableWindow(bEnable); +void CStairDialog::EnableDetail( BOOL bEnable ){ + CWnd* dtlChk = GetDlgItem( IDC_DETAIL_CHK ); + if ( dtlChk ) { + dtlChk->EnableWindow( bEnable ); + } } -BOOL CStairDialog::OnInitDialog() -{ +BOOL CStairDialog::OnInitDialog(){ CDialog::OnInitDialog(); - - EnableDetail(m_StairStyle == 1); - + + EnableDetail( m_StairStyle == 1 ); + return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } -void CStairDialog::OnStyleCornerClicked() -{ - EnableDetail(FALSE); +void CStairDialog::OnStyleCornerClicked(){ + EnableDetail( FALSE ); } diff --git a/contrib/bobtoolz/dialogs/StairDialog.h b/contrib/bobtoolz/dialogs/StairDialog.h index 0bcdc0ec..0be13e67 100644 --- a/contrib/bobtoolz/dialogs/StairDialog.h +++ b/contrib/bobtoolz/dialogs/StairDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_STAIRDIALOG_H__942FFF20_5F9E_11D1_B66D_004095A18133__INCLUDED_) +#if !defined( AFX_STAIRDIALOG_H__942FFF20_5F9E_11D1_B66D_004095A18133__INCLUDED_ ) #define AFX_STAIRDIALOG_H__942FFF20_5F9E_11D1_B66D_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -33,39 +33,39 @@ class CStairDialog : public CDialog { // Construction public: - CStairDialog(CWnd* pParent = NULL); // standard constructor +CStairDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CStairDialog) - enum { IDD = IDD_STAIR_DIALOG }; - UINT m_nStairHeight; - int m_StairDir; - int m_StairStyle; - CString m_riserTexture; - BOOL m_bDetail; - //}}AFX_DATA +//{{AFX_DATA(CStairDialog) +enum { IDD = IDD_STAIR_DIALOG }; +UINT m_nStairHeight; +int m_StairDir; +int m_StairStyle; +CString m_riserTexture; +BOOL m_bDetail; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CStairDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CStairDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CStairDialog) - afx_msg void OnStyleBobClicked(); - afx_msg void OnStyleOrigClicked(); - virtual BOOL OnInitDialog(); - afx_msg void OnStyleCornerClicked(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CStairDialog) +afx_msg void OnStyleBobClicked(); +afx_msg void OnStyleOrigClicked(); +virtual BOOL OnInitDialog(); +afx_msg void OnStyleCornerClicked(); +//}}AFX_MSG +DECLARE_MESSAGE_MAP() private: - void EnableDetail(BOOL bEnable); +void EnableDetail( BOOL bEnable ); }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/TextureResetDialog.cpp b/contrib/bobtoolz/dialogs/TextureResetDialog.cpp index 77ebc766..0913f51b 100644 --- a/contrib/bobtoolz/dialogs/TextureResetDialog.cpp +++ b/contrib/bobtoolz/dialogs/TextureResetDialog.cpp @@ -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 + */ // TextureResetDialog.cpp : implementation file // @@ -34,47 +34,45 @@ static char THIS_FILE[] = __FILE__; // CTextureResetDialog dialog -CTextureResetDialog::CTextureResetDialog(CWnd* pParent /*=NULL*/) - : CDialog(CTextureResetDialog::IDD, pParent) -{ +CTextureResetDialog::CTextureResetDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CTextureResetDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CTextureResetDialog) m_bAllTextures = FALSE; - m_TextureName = _T(""); + m_TextureName = _T( "" ); m_nRotation = 0; m_fScaleHorizontal = 0.5f; m_fScaleVertical = 0.5f; m_nShiftHorizontal = 0; m_nShiftVertical = 0; m_bOnlyTexture = FALSE; - m_NewTextureName = _T(""); + m_NewTextureName = _T( "" ); //}}AFX_DATA_INIT } -void CTextureResetDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CTextureResetDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CTextureResetDialog) - DDX_Check(pDX, IDC_ALLTEXTURES_CHECK, m_bAllTextures); - DDX_Text(pDX, IDC_RESET_TEXTURE_EDIT, m_TextureName); - DDV_MaxChars(pDX, m_TextureName, 256); - DDX_Text(pDX, IDC_ROTATION_EDIT, m_nRotation); - DDV_MinMaxInt(pDX, m_nRotation, 0, 360); - DDX_Text(pDX, IDC_SCL_HOR_EDIT, m_fScaleHorizontal); - DDX_Text(pDX, IDC_SCL_VERT_EDIT, m_fScaleVertical); - DDX_Text(pDX, IDC_SHFT_HOR_EDIT, m_nShiftHorizontal); - DDX_Text(pDX, IDC_SHFT_VER_EDIT, m_nShiftVertical); - DDX_Check(pDX, IDC_ONLYTEXTURE_CHECK, m_bOnlyTexture); - DDX_Text(pDX, IDC_RESET_NEW_TEXTURE_EDIT, m_NewTextureName); - DDV_MaxChars(pDX, m_NewTextureName, 256); + DDX_Check( pDX, IDC_ALLTEXTURES_CHECK, m_bAllTextures ); + DDX_Text( pDX, IDC_RESET_TEXTURE_EDIT, m_TextureName ); + DDV_MaxChars( pDX, m_TextureName, 256 ); + DDX_Text( pDX, IDC_ROTATION_EDIT, m_nRotation ); + DDV_MinMaxInt( pDX, m_nRotation, 0, 360 ); + DDX_Text( pDX, IDC_SCL_HOR_EDIT, m_fScaleHorizontal ); + DDX_Text( pDX, IDC_SCL_VERT_EDIT, m_fScaleVertical ); + DDX_Text( pDX, IDC_SHFT_HOR_EDIT, m_nShiftHorizontal ); + DDX_Text( pDX, IDC_SHFT_VER_EDIT, m_nShiftVertical ); + DDX_Check( pDX, IDC_ONLYTEXTURE_CHECK, m_bOnlyTexture ); + DDX_Text( pDX, IDC_RESET_NEW_TEXTURE_EDIT, m_NewTextureName ); + DDV_MaxChars( pDX, m_NewTextureName, 256 ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CTextureResetDialog, CDialog) - //{{AFX_MSG_MAP(CTextureResetDialog) - // NOTE: the ClassWizard will add message map macros here - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CTextureResetDialog, CDialog ) +//{{AFX_MSG_MAP(CTextureResetDialog) +// NOTE: the ClassWizard will add message map macros here +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// diff --git a/contrib/bobtoolz/dialogs/TextureResetDialog.h b/contrib/bobtoolz/dialogs/TextureResetDialog.h index 6f041611..40260735 100644 --- a/contrib/bobtoolz/dialogs/TextureResetDialog.h +++ b/contrib/bobtoolz/dialogs/TextureResetDialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_TEXTURERESETDIALOG_H__42D665C1_ED84_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_TEXTURERESETDIALOG_H__42D665C1_ED84_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_TEXTURERESETDIALOG_H__42D665C1_ED84_11D4_ACF7_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -33,38 +33,38 @@ class CTextureResetDialog : public CDialog { // Construction public: - CTextureResetDialog(CWnd* pParent = NULL); // standard constructor +CTextureResetDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CTextureResetDialog) - enum { IDD = IDD_TEXTURE_RESET_DIALOG }; - BOOL m_bAllTextures; - CString m_TextureName; - int m_nRotation; - float m_fScaleHorizontal; - float m_fScaleVertical; - int m_nShiftHorizontal; - int m_nShiftVertical; - BOOL m_bOnlyTexture; - CString m_NewTextureName; - //}}AFX_DATA +//{{AFX_DATA(CTextureResetDialog) +enum { IDD = IDD_TEXTURE_RESET_DIALOG }; +BOOL m_bAllTextures; +CString m_TextureName; +int m_nRotation; +float m_fScaleHorizontal; +float m_fScaleVertical; +int m_nShiftHorizontal; +int m_nShiftVertical; +BOOL m_bOnlyTexture; +CString m_NewTextureName; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CTextureResetDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CTextureResetDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CTextureResetDialog) - // NOTE: the ClassWizard will add member functions here - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CTextureResetDialog) +// NOTE: the ClassWizard will add member functions here +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/dialogs/brushcheckdialog.cpp b/contrib/bobtoolz/dialogs/brushcheckdialog.cpp index 06fe6c9b..3b3ac607 100644 --- a/contrib/bobtoolz/dialogs/brushcheckdialog.cpp +++ b/contrib/bobtoolz/dialogs/brushcheckdialog.cpp @@ -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 + */ // BrushCheckDialog.cpp : implementation file // @@ -34,27 +34,25 @@ static char THIS_FILE[] = __FILE__; // CBrushCheckDialog dialog -CBrushCheckDialog::CBrushCheckDialog(CWnd* pParent /*=NULL*/) - : CDialog(CBrushCheckDialog::IDD, pParent) -{ +CBrushCheckDialog::CBrushCheckDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CBrushCheckDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CBrushCheckDialog) //}}AFX_DATA_INIT } -void CBrushCheckDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CBrushCheckDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CBrushCheckDialog) - DDX_Control(pDX, IDC_PROGRESS1, m_prog1); + DDX_Control( pDX, IDC_PROGRESS1, m_prog1 ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CBrushCheckDialog, CDialog) - //{{AFX_MSG_MAP(CBrushCheckDialog) - // NOTE: the ClassWizard will add message map macros here - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CBrushCheckDialog, CDialog ) +//{{AFX_MSG_MAP(CBrushCheckDialog) +// NOTE: the ClassWizard will add message map macros here +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// diff --git a/contrib/bobtoolz/dialogs/dialogs-gtk.cpp b/contrib/bobtoolz/dialogs/dialogs-gtk.cpp index 83b656f2..1a2edca3 100644 --- a/contrib/bobtoolz/dialogs/dialogs-gtk.cpp +++ b/contrib/bobtoolz/dialogs/dialogs-gtk.cpp @@ -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" #include "dialogs-gtk.h" @@ -25,17 +25,17 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include /*-------------------------------- - Callback Functions ----------------------------------*/ + Callback Functions + ---------------------------------*/ typedef struct { GtkWidget *cbTexChange; GtkWidget *editTexOld, *editTexNew; - GtkWidget *cbScaleHor, *cbScaleVert; + GtkWidget *cbScaleHor, *cbScaleVert; GtkWidget *editScaleHor, *editScaleVert; - GtkWidget *cbShiftHor, *cbShiftVert; + GtkWidget *cbShiftHor, *cbShiftVert; GtkWidget *editShiftHor, *editShiftVert; GtkWidget *cbRotation; @@ -46,83 +46,75 @@ dlg_texReset_t dlgTexReset; void Update_TextureReseter(); -static void dialog_button_callback_texreset_update (GtkWidget *widget, gpointer data) -{ - Update_TextureReseter(); +static void dialog_button_callback_texreset_update( GtkWidget *widget, gpointer data ){ + Update_TextureReseter(); } -void Update_TextureReseter() -{ - gboolean check; +void Update_TextureReseter(){ + gboolean check; - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexNew), check); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexOld), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) ); + gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editTexNew ), check ); + gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editTexOld ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleHor), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) ); + gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editScaleHor ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleVert), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) ); + gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editScaleVert ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftHor), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) ); + gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editShiftHor ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftVert), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) ); + gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editShiftVert ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editRotation), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) ); + gtk_entry_set_editable( GTK_ENTRY( dlgTexReset.editRotation ), check ); } -static void dialog_button_callback (GtkWidget *widget, gpointer data) -{ +static void dialog_button_callback( GtkWidget *widget, gpointer data ){ GtkWidget *parent; int *loop, *ret; - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - ret = (int*)g_object_get_data (G_OBJECT (parent), "ret"); + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" ); *loop = 0; *ret = (int)data; } -static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data) -{ +static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){ int *loop; - gtk_widget_hide (widget); - loop = (int*)g_object_get_data (G_OBJECT (widget), "loop"); + gtk_widget_hide( widget ); + loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" ); *loop = 0; return TRUE; } -static void dialog_button_callback_settex (GtkWidget *widget, gpointer data) -{ +static void dialog_button_callback_settex( GtkWidget *widget, gpointer data ){ TwinWidget* tw = (TwinWidget*)data; GtkEntry* entry = GTK_ENTRY( tw->one ); GtkCombo* combo = GTK_COMBO( tw->two ); - const gchar* tex = gtk_entry_get_text(GTK_ENTRY( combo->entry )); - gtk_entry_set_text( entry, tex); + const gchar* tex = gtk_entry_get_text( GTK_ENTRY( combo->entry ) ); + gtk_entry_set_text( entry, tex ); } /*-------------------------------- - Data validation Routines ----------------------------------*/ + Data validation Routines + ---------------------------------*/ -bool ValidateTextFloat(const char* pData, char* error_title, float* value) -{ - if(pData) - { - float testNum = (float)atof(pData); +bool ValidateTextFloat( const char* pData, char* error_title, float* value ){ + if ( pData ) { + float testNum = (float)atof( pData ); - if((testNum == 0.0f) && strcmp(pData, "0")) - { - DoMessageBox("Please Enter A Floating Point Number", error_title, MB_OK); + if ( ( testNum == 0.0f ) && strcmp( pData, "0" ) ) { + DoMessageBox( "Please Enter A Floating Point Number", error_title, MB_OK ); return FALSE; } else @@ -132,22 +124,19 @@ bool ValidateTextFloat(const char* pData, char* error_title, float* value) } } - DoMessageBox("Please Enter A Floating Point Number", error_title, MB_OK); + DoMessageBox( "Please Enter A Floating Point Number", error_title, MB_OK ); return FALSE; } -bool ValidateTextFloatRange(const char* pData, float min, float max, char* error_title, float* value) -{ +bool ValidateTextFloatRange( const char* pData, float min, float max, char* error_title, float* value ){ char error_buffer[256]; - sprintf(error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max); + sprintf( error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max ); - if(pData) - { - float testNum = (float)atof(pData); + if ( pData ) { + float testNum = (float)atof( pData ); - if((testNum < min) || (testNum > max)) - { - DoMessageBox(error_buffer, error_title, MB_OK); + if ( ( testNum < min ) || ( testNum > max ) ) { + DoMessageBox( error_buffer, error_title, MB_OK ); return FALSE; } else @@ -157,22 +146,19 @@ bool ValidateTextFloatRange(const char* pData, float min, float max, char* error } } - DoMessageBox(error_buffer, error_title, MB_OK); + DoMessageBox( error_buffer, error_title, MB_OK ); return FALSE; } -bool ValidateTextIntRange(const char* pData, int min, int max, const char* error_title, int* value) -{ +bool ValidateTextIntRange( const char* pData, int min, int max, const char* error_title, int* value ){ char error_buffer[256]; - sprintf(error_buffer, "Please Enter An Integer Between %i and %i", min, max); + sprintf( error_buffer, "Please Enter An Integer Between %i and %i", min, max ); - if(pData) - { - int testNum = atoi(pData); + if ( pData ) { + int testNum = atoi( pData ); - if((testNum < min) || (testNum > max)) - { - DoMessageBox(error_buffer, error_title, MB_OK); + if ( ( testNum < min ) || ( testNum > max ) ) { + DoMessageBox( error_buffer, error_title, MB_OK ); return FALSE; } else @@ -182,19 +168,16 @@ bool ValidateTextIntRange(const char* pData, int min, int max, const char* error } } - DoMessageBox(error_buffer, error_title, MB_OK); + DoMessageBox( error_buffer, error_title, MB_OK ); return FALSE; } -bool ValidateTextInt(const char* pData, char* error_title, int* value) -{ - if(pData) - { - int testNum = atoi(pData); +bool ValidateTextInt( const char* pData, char* error_title, int* value ){ + if ( pData ) { + int testNum = atoi( pData ); - if((testNum == 0) && strcmp(pData, "0")) - { - DoMessageBox("Please Enter An Integer", error_title, MB_OK); + if ( ( testNum == 0 ) && strcmp( pData, "0" ) ) { + DoMessageBox( "Please Enter An Integer", error_title, MB_OK ); return FALSE; } else @@ -204,231 +187,227 @@ bool ValidateTextInt(const char* pData, char* error_title, int* value) } } - DoMessageBox("Please Enter An Integer", error_title, MB_OK); + DoMessageBox( "Please Enter An Integer", error_title, MB_OK ); return FALSE; } /*-------------------------------- - Modal Dialog Boxes ----------------------------------*/ + Modal Dialog Boxes + ---------------------------------*/ /* - Major clean up of variable names etc required, excluding Mars's ones, - which are nicely done :) + Major clean up of variable names etc required, excluding Mars's ones, + which are nicely done :) -*/ + */ -int DoMessageBox (const char* lpText, const char* lpCaption, guint32 uType) -{ +int DoMessageBox( const char* lpText, const char* lpCaption, guint32 uType ){ GtkWidget *window, *w, *vbox, *hbox; - int mode = (uType & MB_TYPEMASK), ret, loop = 1; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - gtk_window_set_title (GTK_WINDOW (window), lpCaption); - gtk_container_border_width (GTK_CONTAINER (window), 10); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); - gtk_widget_realize (window); - - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - - w = gtk_label_new (lpText); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); - - w = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_widget_show (w); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - if (mode == MB_OK) - { - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); + int mode = ( uType & MB_TYPEMASK ), ret, loop = 1; + + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + gtk_window_set_title( GTK_WINDOW( window ), lpCaption ); + gtk_container_border_width( GTK_CONTAINER( window ), 10 ); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); + gtk_widget_realize( window ); + + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_container_add( GTK_CONTAINER( window ), vbox ); + gtk_widget_show( vbox ); + + w = gtk_label_new( lpText ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); + + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 ); + gtk_widget_show( w ); + + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + if ( mode == MB_OK ) { + w = gtk_button_new_with_label( "Ok" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); ret = IDOK; } - else if (mode == MB_OKCANCEL) - { - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); + else if ( mode == MB_OKCANCEL ) { + w = gtk_button_new_with_label( "Ok" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); ret = IDCANCEL; } - else if (mode == MB_YESNOCANCEL) - { - w = gtk_button_new_with_label ("Yes"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES)); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("No"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDNO)); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); + else if ( mode == MB_YESNOCANCEL ) { + w = gtk_button_new_with_label( "Yes" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) ); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = gtk_button_new_with_label( "No" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) ); + gtk_widget_show( w ); + + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); ret = IDCANCEL; } else /* if (mode == MB_YESNO) */ { - w = gtk_button_new_with_label ("Yes"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES)); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("No"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDNO)); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Yes" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) ); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = gtk_button_new_with_label( "No" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) ); + gtk_widget_show( w ); ret = IDNO; } - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; } -int DoIntersectBox (IntersectRS* rs) -{ +int DoIntersectBox( IntersectRS* rs ){ GtkWidget *window, *w, *vbox, *hbox; GtkWidget *radio1, *radio2; GtkWidget *check1, *check2; int ret, loop = 1; - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_title (GTK_WINDOW (window), "Intersect"); - gtk_container_border_width (GTK_CONTAINER (window), 10); + gtk_window_set_title( GTK_WINDOW( window ), "Intersect" ); + gtk_container_border_width( GTK_CONTAINER( window ), 10 ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_container_add( GTK_CONTAINER( window ), vbox ); + gtk_widget_show( vbox ); // ---- vbox ---- - radio1 = gtk_radio_button_new_with_label(NULL, "Use Whole Map"); - gtk_box_pack_start (GTK_BOX (vbox), radio1, FALSE, FALSE, 2); - gtk_widget_show (radio1); + radio1 = gtk_radio_button_new_with_label( NULL, "Use Whole Map" ); + gtk_box_pack_start( GTK_BOX( vbox ), radio1, FALSE, FALSE, 2 ); + gtk_widget_show( radio1 ); - radio2 = gtk_radio_button_new_with_label(((GtkRadioButton*)radio1)->group, "Use Selected Brushes"); - gtk_box_pack_start (GTK_BOX (vbox), radio2, FALSE, FALSE, 2); - gtk_widget_show (radio2); + radio2 = gtk_radio_button_new_with_label( ( (GtkRadioButton*)radio1 )->group, "Use Selected Brushes" ); + gtk_box_pack_start( GTK_BOX( vbox ), radio2, FALSE, FALSE, 2 ); + gtk_widget_show( radio2 ); - w = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_widget_show (w); + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 ); + gtk_widget_show( w ); - check1 = gtk_check_button_new_with_label("Include Detail Brushes"); - gtk_box_pack_start (GTK_BOX (vbox), check1, FALSE, FALSE, 0); - gtk_widget_show (check1); + check1 = gtk_check_button_new_with_label( "Include Detail Brushes" ); + gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 ); + gtk_widget_show( check1 ); - check2 = gtk_check_button_new_with_label("Select Duplicate Brushes Only"); - gtk_box_pack_start (GTK_BOX (vbox), check2, FALSE, FALSE, 0); - gtk_widget_show (check2); + check2 = gtk_check_button_new_with_label( "Select Duplicate Brushes Only" ); + gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 ); + gtk_widget_show( check2 ); - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); - // ---- hbox ---- ok/cancel buttons + // ---- hbox ---- ok/cancel buttons - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); + w = gtk_button_new_with_label( "Ok" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); - ret = IDCANCEL; + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); + ret = IDCANCEL; - // ---- /hbox ---- + // ---- /hbox ---- // ---- /vbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); - if(gtk_toggle_button_get_active((GtkToggleButton*)radio1)) + if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio1 ) ) { rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radio2)) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radio2 ) ) { rs->nBrushOptions = BRUSH_OPT_SELECTED; + } - rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false; - rs->bDuplicateOnly = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false; + rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false; + rs->bDuplicateOnly = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false; - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; } -int DoPolygonBox (PolygonRS* rs) -{ +int DoPolygonBox( PolygonRS* rs ){ GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2; GtkWidget *check1, *check2, *check3; @@ -436,160 +415,160 @@ int DoPolygonBox (PolygonRS* rs) int ret, loop = 1; - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_title (GTK_WINDOW (window), "Polygon Builder"); - gtk_container_border_width (GTK_CONTAINER (window), 10); + gtk_window_set_title( GTK_WINDOW( window ), "Polygon Builder" ); + gtk_container_border_width( GTK_CONTAINER( window ), 10 ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_container_add( GTK_CONTAINER( window ), vbox ); + gtk_widget_show( vbox ); // ---- vbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); - // ---- hbox ---- + // ---- hbox ---- - vbox2 = gtk_vbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2); - gtk_widget_show (vbox2); + vbox2 = gtk_vbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 ); + gtk_widget_show( vbox2 ); - // ---- vbox2 ---- + // ---- vbox2 ---- - hbox2 = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2); - gtk_widget_show (hbox2); + hbox2 = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 ); + gtk_widget_show( hbox2 ); - // ---- hbox2 ---- + // ---- hbox2 ---- - text1 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text1, "3"); - gtk_box_pack_start (GTK_BOX (hbox2), text1, FALSE, FALSE, 2); - gtk_widget_show (text1); + text1 = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( (GtkEntry*)text1, "3" ); + gtk_box_pack_start( GTK_BOX( hbox2 ), text1, FALSE, FALSE, 2 ); + gtk_widget_show( text1 ); - w = gtk_label_new ("Number Of Sides"); - gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); + w = gtk_label_new( "Number Of Sides" ); + gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); - // ---- /hbox2 ---- + // ---- /hbox2 ---- - hbox2 = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2); - gtk_widget_show (hbox2); + hbox2 = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox2, FALSE, FALSE, 2 ); + gtk_widget_show( hbox2 ); - // ---- hbox2 ---- + // ---- hbox2 ---- - text2 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text2, "8"); - gtk_box_pack_start (GTK_BOX (hbox2), text2, FALSE, FALSE, 2); - gtk_widget_show (text2); + text2 = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( (GtkEntry*)text2, "8" ); + gtk_box_pack_start( GTK_BOX( hbox2 ), text2, FALSE, FALSE, 2 ); + gtk_widget_show( text2 ); - w = gtk_label_new ("Border Width"); - gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); + w = gtk_label_new( "Border Width" ); + gtk_box_pack_start( GTK_BOX( hbox2 ), w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); - // ---- /hbox2 ---- + // ---- /hbox2 ---- - // ---- /vbox2 ---- + // ---- /vbox2 ---- - vbox2 = gtk_vbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2); - gtk_widget_show (vbox2); + vbox2 = gtk_vbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( hbox ), vbox2, FALSE, FALSE, 2 ); + gtk_widget_show( vbox2 ); - // ---- vbox2 ---- + // ---- vbox2 ---- - check1 = gtk_check_button_new_with_label("Use Border"); - gtk_box_pack_start (GTK_BOX (vbox2), check1, FALSE, FALSE, 0); - gtk_widget_show (check1); + check1 = gtk_check_button_new_with_label( "Use Border" ); + gtk_box_pack_start( GTK_BOX( vbox2 ), check1, FALSE, FALSE, 0 ); + gtk_widget_show( check1 ); - check2 = gtk_check_button_new_with_label("Inverse Polygon"); - gtk_box_pack_start (GTK_BOX (vbox2), check2, FALSE, FALSE, 0); - gtk_widget_show (check2); + check2 = gtk_check_button_new_with_label( "Inverse Polygon" ); + gtk_box_pack_start( GTK_BOX( vbox2 ), check2, FALSE, FALSE, 0 ); + gtk_widget_show( check2 ); - check3 = gtk_check_button_new_with_label("Align Top Edge"); - gtk_box_pack_start (GTK_BOX (vbox2), check3, FALSE, FALSE, 0); - gtk_widget_show (check3); + check3 = gtk_check_button_new_with_label( "Align Top Edge" ); + gtk_box_pack_start( GTK_BOX( vbox2 ), check3, FALSE, FALSE, 0 ); + gtk_widget_show( check3 ); - // ---- /vbox2 ---- + // ---- /vbox2 ---- - // ---- /hbox ---- + // ---- /hbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); - // ---- hbox ---- + // ---- hbox ---- - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); + w = gtk_button_new_with_label( "Ok" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); - ret = IDCANCEL; + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); + ret = IDCANCEL; - // ---- /hbox ---- + // ---- /hbox ---- // ---- /vbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if(ret == IDOK) - { - rs->bUseBorder = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false; - rs->bInverse = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false; - rs->bAlignTop = gtk_toggle_button_get_active((GtkToggleButton*)check3) ? true : false; + if ( ret == IDOK ) { + rs->bUseBorder = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false; + rs->bInverse = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false; + rs->bAlignTop = gtk_toggle_button_get_active( (GtkToggleButton*)check3 ) ? true : false; - if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text1), 3, 32, "Number Of Sides", &rs->nSides)) + if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text1 ), 3, 32, "Number Of Sides", &rs->nSides ) ) { dialogError = TRUE; + } - if(rs->bUseBorder) - { - if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text2), 8, 256, "Border Width", &rs->nBorderWidth)) + if ( rs->bUseBorder ) { + if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text2 ), 8, 256, "Border Width", &rs->nBorderWidth ) ) { dialogError = TRUE; + } } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; } @@ -597,34 +576,33 @@ int DoPolygonBox (PolygonRS* rs) // mars // for stair builder stuck as close as i could to the MFC version // obviously feel free to change it at will :) -int DoBuildStairsBox(BuildStairsRS* rs) -{ +int DoBuildStairsBox( BuildStairsRS* rs ){ // i made widgets for just about everything ... i think that's what i need to do dunno tho - GtkWidget *window, *w, *vbox, *hbox; - GtkWidget *textStairHeight, *textRiserTex, *textMainTex; - GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value - GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle; - GtkWidget *checkUseDetail; - GSList *radioDirection, *radioStyle; + GtkWidget *window, *w, *vbox, *hbox; + GtkWidget *textStairHeight, *textRiserTex, *textMainTex; + GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value + GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle; + GtkWidget *checkUseDetail; + GSList *radioDirection, *radioStyle; int ret, loop; loop = 1; - char *text = "Please set a value in the boxes below and press 'OK' to build the stairs"; + char *text = "Please set a value in the boxes below and press 'OK' to build the stairs"; window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" ); gtk_container_border_width( GTK_CONTAINER( window ), 10 ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); // new vbox vbox = gtk_vbox_new( FALSE, 10 ); @@ -646,18 +624,18 @@ int DoBuildStairsBox(BuildStairsRS* rs) // ------------------------- // indenting == good way of keeping track of lines :) - // new hbox - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + // new hbox + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - textStairHeight = gtk_entry_new_with_max_length( 256 ); - gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 ); - gtk_widget_show( textStairHeight ); + textStairHeight = gtk_entry_new_with_max_length( 256 ); + gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 ); + gtk_widget_show( textStairHeight ); - w = gtk_label_new( "Stair Height" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 ); - gtk_widget_show( w ); + w = gtk_label_new( "Stair Height" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 ); + gtk_widget_show( w ); // ------------------------- // @@ -671,37 +649,37 @@ int DoBuildStairsBox(BuildStairsRS* rs) // -------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - // radio buttons confuse me ... - // but this _looks_ right + // radio buttons confuse me ... + // but this _looks_ right - // djbob: actually it looks very nice :), slightly better than the way i did it - // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh + // djbob: actually it looks very nice :), slightly better than the way i did it + // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh - radioNorth = gtk_radio_button_new_with_label( NULL, "North" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 ); - gtk_widget_show( radioNorth ); + radioNorth = gtk_radio_button_new_with_label( NULL, "North" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 ); + gtk_widget_show( radioNorth ); - radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) ); + radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) ); - radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 ); - gtk_widget_show( radioSouth ); + radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 ); + gtk_widget_show( radioSouth ); - radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) ); + radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) ); - radioEast = gtk_radio_button_new_with_label( radioDirection, "East" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 ); - gtk_widget_show( radioEast ); + radioEast = gtk_radio_button_new_with_label( radioDirection, "East" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 ); + gtk_widget_show( radioEast ); - radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) ); + radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) ); - radioWest = gtk_radio_button_new_with_label( radioDirection, "West" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 ); - gtk_widget_show( radioWest ); + radioWest = gtk_radio_button_new_with_label( radioDirection, "West" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 ); + gtk_widget_show( radioWest ); // --------------------------- // @@ -715,36 +693,36 @@ int DoBuildStairsBox(BuildStairsRS* rs) // --------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 ); - gtk_widget_show( radioOldStyle ); + radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 ); + gtk_widget_show( radioOldStyle ); - radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) ); + radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) ); - radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 ); - gtk_widget_show( radioBobStyle ); + radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 ); + gtk_widget_show( radioBobStyle ); - radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) ); + radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) ); - radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 ); - gtk_widget_show( radioCornerStyle ); + radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 ); + gtk_widget_show( radioCornerStyle ); - // err, the q3r has an if or something so you need bob style checked before this - // is "ungreyed out" but you'll need to do that, as i suck :) + // err, the q3r has an if or something so you need bob style checked before this + // is "ungreyed out" but you'll need to do that, as i suck :) - // djbob: er.... yeah um, im not at all sure how i'm gonna sort this - // djbob: think we need some button callback functions or smuffin - // FIXME: actually get around to doing what i suggested!!!! + // djbob: er.... yeah um, im not at all sure how i'm gonna sort this + // djbob: think we need some button callback functions or smuffin + // FIXME: actually get around to doing what i suggested!!!! - checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" ); - gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 ); - gtk_widget_show( checkUseDetail ); + checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" ); + gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 ); + gtk_widget_show( checkUseDetail ); // --------------------------- // @@ -753,7 +731,7 @@ int DoBuildStairsBox(BuildStairsRS* rs) gtk_widget_show( hbox ); textMainTex = gtk_entry_new_with_max_length( 512 ); - gtk_entry_set_text(GTK_ENTRY(textMainTex), rs->mainTexture); + gtk_entry_set_text( GTK_ENTRY( textMainTex ), rs->mainTexture ); gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 ); gtk_widget_show( textMainTex ); @@ -785,7 +763,7 @@ int DoBuildStairsBox(BuildStairsRS* rs) gtk_widget_show( hbox ); w = gtk_button_new_with_label( "OK" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); @@ -799,49 +777,56 @@ int DoBuildStairsBox(BuildStairsRS* rs) ret = IDCANCEL; // +djbob: need our "little" modal loop mars :P - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if(ret == IDOK) - { - rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)checkUseDetail) ? true : false; + if ( ret == IDOK ) { + rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)checkUseDetail ) ? true : false; - strcpy(rs->riserTexture, gtk_entry_get_text((GtkEntry*)textRiserTex)); - strcpy(rs->mainTexture, gtk_entry_get_text((GtkEntry*)textMainTex)); + strcpy( rs->riserTexture, gtk_entry_get_text( (GtkEntry*)textRiserTex ) ); + strcpy( rs->mainTexture, gtk_entry_get_text( (GtkEntry*)textMainTex ) ); - if(gtk_toggle_button_get_active((GtkToggleButton*)radioNorth)) + if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioNorth ) ) { rs->direction = MOVE_NORTH; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioSouth)) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioSouth ) ) { rs->direction = MOVE_SOUTH; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioEast)) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioEast ) ) { rs->direction = MOVE_EAST; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioWest)) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioWest ) ) { rs->direction = MOVE_WEST; + } - if(!ValidateTextInt(gtk_entry_get_text((GtkEntry*)textStairHeight), "Stair Height", &rs->stairHeight)) + if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textStairHeight ), "Stair Height", &rs->stairHeight ) ) { dialogError = TRUE; + } - if(gtk_toggle_button_get_active((GtkToggleButton*)radioOldStyle)) + if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioOldStyle ) ) { rs->style = STYLE_ORIGINAL; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioBobStyle)) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioBobStyle ) ) { rs->style = STYLE_BOB; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioCornerStyle)) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)radioCornerStyle ) ) { rs->style = STYLE_CORNER; + } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; // -djbob @@ -849,24 +834,23 @@ int DoBuildStairsBox(BuildStairsRS* rs) // there we go, all done ... on my end at least, not bad for a night's work } -int DoDoorsBox(DoorRS* rs) -{ - GtkWidget *window, *hbox, *vbox, *w; - GtkWidget *textFrontBackTex, *textTrimTex; - GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV; - GtkWidget *comboMain, *comboTrim; - GtkWidget *buttonSetMain, *buttonSetTrim; - GtkWidget *radioNS, *radioEW; - GSList *radioOrientation; - TwinWidget tw1, tw2; - int ret, loop; +int DoDoorsBox( DoorRS* rs ){ + GtkWidget *window, *hbox, *vbox, *w; + GtkWidget *textFrontBackTex, *textTrimTex; + GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV; + GtkWidget *comboMain, *comboTrim; + GtkWidget *buttonSetMain, *buttonSetTrim; + GtkWidget *radioNS, *radioEW; + GSList *radioOrientation; + TwinWidget tw1, tw2; + int ret, loop; loop = 1; window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" ); @@ -875,13 +859,13 @@ int DoDoorsBox(DoorRS* rs) g_object_set_data( G_OBJECT( window ), "loop", &loop ); g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); char buffer[256]; - GList *listMainTextures = NULL; - GList *listTrimTextures = NULL; - LoadGList(GetFilename(buffer, "plugins/bt/door-tex.txt"), &listMainTextures); - LoadGList(GetFilename(buffer, "plugins/bt/door-tex-trim.txt"), &listTrimTextures); + GList *listMainTextures = NULL; + GList *listTrimTextures = NULL; + LoadGList( GetFilename( buffer, "plugins/bt/door-tex.txt" ), &listMainTextures ); + LoadGList( GetFilename( buffer, "plugins/bt/door-tex-trim.txt" ), &listTrimTextures ); vbox = gtk_vbox_new( FALSE, 10 ); gtk_container_add( GTK_CONTAINER( window ), vbox ); @@ -889,186 +873,187 @@ int DoDoorsBox(DoorRS* rs) // -------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - textFrontBackTex = gtk_entry_new_with_max_length( 512 ); - gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture); - gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 ); - gtk_widget_show( textFrontBackTex ); + textFrontBackTex = gtk_entry_new_with_max_length( 512 ); + gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture ); + gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 ); + gtk_widget_show( textFrontBackTex ); - w = gtk_label_new( "Door Front/Back Texture" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_label_new( "Door Front/Back Texture" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); // ------------------------ // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - textTrimTex = gtk_entry_new_with_max_length( 512 ); - gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 ); - gtk_widget_show( textTrimTex ); + textTrimTex = gtk_entry_new_with_max_length( 512 ); + gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 ); + gtk_widget_show( textTrimTex ); - w = gtk_label_new( "Door Trim Texture" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_label_new( "Door Trim Texture" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); // ----------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - // sp: horizontally ???? - // djbob: yes mars, u can spell :] - checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE); - gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 ); - gtk_widget_show( checkScaleMainH ); + // sp: horizontally ???? + // djbob: yes mars, u can spell :] + checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE ); + gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 ); + gtk_widget_show( checkScaleMainH ); - checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE); - gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 ); - gtk_widget_show( checkScaleTrimH ); + checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE ); + gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 ); + gtk_widget_show( checkScaleTrimH ); // ---------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE); - gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 ); - gtk_widget_show( checkScaleMainV ); + checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE ); + gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 ); + gtk_widget_show( checkScaleMainV ); - checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" ); - gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 ); - gtk_widget_show( checkScaleTrimV ); + checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" ); + gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 ); + gtk_widget_show( checkScaleTrimV ); // --------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - // djbob: lists added + // djbob: lists added - comboMain = gtk_combo_new(); - gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 ); - gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures ); - gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 ); - gtk_widget_show( comboMain ); + comboMain = gtk_combo_new(); + gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 ); + gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures ); + gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 ); + gtk_widget_show( comboMain ); - tw1.one = textFrontBackTex; - tw1.two = comboMain; + tw1.one = textFrontBackTex; + tw1.two = comboMain; - buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" ); - gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 ); - gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 ); - gtk_widget_show( buttonSetMain ); + buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" ); + gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 ); + gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 ); + gtk_widget_show( buttonSetMain ); // ------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - comboTrim = gtk_combo_new(); - gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 ); - gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures ); - gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 ); - gtk_widget_show( comboTrim ); + comboTrim = gtk_combo_new(); + gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 ); + gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures ); + gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 ); + gtk_widget_show( comboTrim ); - tw2.one = textTrimTex; - tw2.two = comboTrim; + tw2.one = textTrimTex; + tw2.two = comboTrim; - buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" ); - gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 ); - gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 ); - gtk_widget_show( buttonSetTrim ); + buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" ); + gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 ); + gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 ); + gtk_widget_show( buttonSetTrim ); // ------------------ // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - w = gtk_label_new( "Orientation" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_label_new( "Orientation" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); - // argh more radio buttons! - radioNS = gtk_radio_button_new_with_label( NULL, "North - South" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 ); - gtk_widget_show( radioNS ); + // argh more radio buttons! + radioNS = gtk_radio_button_new_with_label( NULL, "North - South" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 ); + gtk_widget_show( radioNS ); - radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) ); + radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) ); - radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 ); - gtk_widget_show( radioEW ); + radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" ); + gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 ); + gtk_widget_show( radioEW ); // ----------------- // - w = gtk_hseparator_new(); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); // ----------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - w = gtk_button_new_with_label( "OK" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); - GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); - gtk_widget_grab_default( w ); - gtk_widget_show( w ); + w = gtk_button_new_with_label( "OK" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); - w = gtk_button_new_with_label( "Cancel" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); - gtk_widget_show( w ); - ret = IDCANCEL; + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); + ret = IDCANCEL; // ----------------- // //+djbob - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); - strcpy(rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) )); - strcpy(rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) )); + strcpy( rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ) ); + strcpy( rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ) ); - rs->bScaleMainH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainH)) ? true : false; - rs->bScaleMainV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainV)) ? true : false; - rs->bScaleTrimH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimH)) ? true : false; - rs->bScaleTrimV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimV)) ? true : false; + rs->bScaleMainH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainH ) ) ? true : false; + rs->bScaleMainV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainV ) ) ? true : false; + rs->bScaleTrimH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ) ) ? true : false; + rs->bScaleTrimV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimV ) ) ? true : false; - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioNS))) + if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioNS ) ) ) { rs->nOrientation = DIRECTION_NS; - else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioEW))) + } + else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioEW ) ) ) { rs->nOrientation = DIRECTION_EW; + } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; //-djbob } -int DoPathPlotterBox(PathPlotterRS* rs) -{ +int DoPathPlotterBox( PathPlotterRS* rs ){ GtkWidget *window, *w, *vbox, *hbox; GtkWidget *text1, *text2, *text3; @@ -1076,565 +1061,572 @@ int DoPathPlotterBox(PathPlotterRS* rs) int ret, loop = 1; - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_title (GTK_WINDOW (window), "Texture Reset"); - gtk_container_border_width (GTK_CONTAINER (window), 10); + gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" ); + gtk_container_border_width( GTK_CONTAINER( window ), 10 ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_container_add( GTK_CONTAINER( window ), vbox ); + gtk_widget_show( vbox ); // ---- vbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); - // ---- hbox ---- + // ---- hbox ---- - text1 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text1, "25"); - gtk_box_pack_start (GTK_BOX (hbox), text1, FALSE, FALSE, 2); - gtk_widget_show (text1); + text1 = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( (GtkEntry*)text1, "25" ); + gtk_box_pack_start( GTK_BOX( hbox ), text1, FALSE, FALSE, 2 ); + gtk_widget_show( text1 ); - w = gtk_label_new ("Number Of Points"); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); + w = gtk_label_new( "Number Of Points" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); - // ---- /hbox ---- + // ---- /hbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); - // ---- hbox ---- + // ---- hbox ---- - text2 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text2, "3"); - gtk_box_pack_start (GTK_BOX (hbox), text2, FALSE, FALSE, 2); - gtk_widget_show (text2); + text2 = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( (GtkEntry*)text2, "3" ); + gtk_box_pack_start( GTK_BOX( hbox ), text2, FALSE, FALSE, 2 ); + gtk_widget_show( text2 ); - w = gtk_label_new ("Multipler"); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); + w = gtk_label_new( "Multipler" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); - // ---- /hbox ---- + // ---- /hbox ---- - w = gtk_label_new ("Path Distance = dist(start -> apex) * multiplier"); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); + w = gtk_label_new( "Path Distance = dist(start -> apex) * multiplier" ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); - // ---- hbox ---- + // ---- hbox ---- - text3 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text3, "-800"); - gtk_box_pack_start (GTK_BOX (hbox), text3, FALSE, FALSE, 2); - gtk_widget_show (text3); + text3 = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( (GtkEntry*)text3, "-800" ); + gtk_box_pack_start( GTK_BOX( hbox ), text3, FALSE, FALSE, 2 ); + gtk_widget_show( text3 ); - w = gtk_label_new ("Gravity"); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); + w = gtk_label_new( "Gravity" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); - // ---- /hbox ---- + // ---- /hbox ---- - w = gtk_hseparator_new(); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); - check1 = gtk_check_button_new_with_label( "No Dynamic Update" ); - gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 ); - gtk_widget_show( check1 ); + check1 = gtk_check_button_new_with_label( "No Dynamic Update" ); + gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 ); + gtk_widget_show( check1 ); - check2 = gtk_check_button_new_with_label( "Show Bounding Lines" ); - gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 ); - gtk_widget_show( check2 ); + check2 = gtk_check_button_new_with_label( "Show Bounding Lines" ); + gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 ); + gtk_widget_show( check2 ); // ---- /vbox ---- // ----------------- // - w = gtk_hseparator_new(); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); // ----------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - w = gtk_button_new_with_label( "Enable" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) ); - gtk_widget_show( w ); + w = gtk_button_new_with_label( "Enable" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) ); + gtk_widget_show( w ); - GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); - gtk_widget_grab_default( w ); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); - w = gtk_button_new_with_label( "Disable" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) ); - gtk_widget_show( w ); + w = gtk_button_new_with_label( "Disable" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDNO ) ); + gtk_widget_show( w ); - w = gtk_button_new_with_label( "Cancel" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); - gtk_widget_show( w ); + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); - ret = IDCANCEL; + ret = IDCANCEL; // ----------------- // - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if(ret == IDYES) - { - if(!ValidateTextIntRange(gtk_entry_get_text(GTK_ENTRY(text1)), 1, 200, "Number Of Points", &rs->nPoints)) + if ( ret == IDYES ) { + if ( !ValidateTextIntRange( gtk_entry_get_text( GTK_ENTRY( text1 ) ), 1, 200, "Number Of Points", &rs->nPoints ) ) { dialogError = TRUE; + } - if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text2)), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier)) + if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text2 ) ), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier ) ) { dialogError = TRUE; + } - if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text3)), -10000.0f, -1.0f, "Gravity", &rs->fGravity)) + if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text3 ) ), -10000.0f, -1.0f, "Gravity", &rs->fGravity ) ) { dialogError = TRUE; + } - rs->bNoUpdate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check1)) ? true : false; - rs->bShowExtra = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check2)) ? true : false; + rs->bNoUpdate = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check1 ) ) ? true : false; + rs->bShowExtra = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2 ) ) ? true : false; } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; } -int DoCTFColourChangeBox () -{ +int DoCTFColourChangeBox(){ GtkWidget *window, *w, *vbox, *hbox; int ret, loop = 1; - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_title (GTK_WINDOW (window), "CTF Colour Changer"); - gtk_container_border_width (GTK_CONTAINER (window), 10); + gtk_window_set_title( GTK_WINDOW( window ), "CTF Colour Changer" ); + gtk_container_border_width( GTK_CONTAINER( window ), 10 ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_container_add( GTK_CONTAINER( window ), vbox ); + gtk_widget_show( vbox ); // ---- vbox ---- - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 ); - gtk_widget_show( hbox ); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 ); + gtk_widget_show( hbox ); - // ---- hbox ---- ok/cancel buttons + // ---- hbox ---- ok/cancel buttons - w = gtk_button_new_with_label ("Red->Blue"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); + w = gtk_button_new_with_label( "Red->Blue" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); - w = gtk_button_new_with_label ("Blue->Red"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES)); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Blue->Red" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) ); + gtk_widget_show( w ); - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); - ret = IDCANCEL; + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); + ret = IDCANCEL; - // ---- /hbox ---- + // ---- /hbox ---- // ---- /vbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; } -int DoResetTextureBox (ResetTextureRS* rs) -{ +int DoResetTextureBox( ResetTextureRS* rs ){ Str texSelected; GtkWidget *window, *w, *vbox, *hbox, *frame, *table; int ret, loop = 1; - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_title (GTK_WINDOW (window), "Texture Reset"); - gtk_container_border_width (GTK_CONTAINER (window), 10); + gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" ); + gtk_container_border_width( GTK_CONTAINER( window ), 10 ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_container_add( GTK_CONTAINER( window ), vbox ); + gtk_widget_show( vbox ); // ---- vbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); // ---- hbox ---- texSelected = "Currently Selected Face: "; - if(g_SelectedFaceTable.m_pfnGetSelectedFaceCount() == 1) { + if ( g_SelectedFaceTable.m_pfnGetSelectedFaceCount() == 1 ) { texSelected += GetCurrentTexture(); } - w = gtk_label_new (texSelected); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); + w = gtk_label_new( texSelected ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); // ---- /hbox ---- - frame = gtk_frame_new (_("Reset Texture Names")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = gtk_frame_new( _( "Reset Texture Names" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = gtk_table_new( 2, 3, TRUE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - dlgTexReset.cbTexChange = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbTexChange), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbTexChange); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbTexChange, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("Old Name: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editTexOld = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexOld), rs->textureName); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexOld, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editTexOld); - - w = gtk_label_new ("New Name: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editTexNew = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexNew), rs->textureName); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexNew, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editTexNew); + dlgTexReset.cbTexChange = gtk_check_button_new_with_label( "Enabled" ); + gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbTexChange ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbTexChange ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbTexChange, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = gtk_label_new( "Old Name: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editTexOld = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexOld ), rs->textureName ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexOld, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editTexOld ); + + w = gtk_label_new( "New Name: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editTexNew = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexNew ), rs->textureName ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexNew, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editTexNew ); // ---- /frame ---- - frame = gtk_frame_new (_("Reset Scales")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = gtk_frame_new( _( "Reset Scales" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = gtk_table_new( 2, 3, TRUE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - dlgTexReset.cbScaleHor = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbScaleHor); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleHor, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Horizontal Scale: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editScaleHor = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleHor), "0.5"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleHor, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editScaleHor); - - - dlgTexReset.cbScaleVert = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbScaleVert); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleVert, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Vertical Scale: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editScaleVert = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleVert), "0.5"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleVert, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editScaleVert); + dlgTexReset.cbScaleHor = gtk_check_button_new_with_label( "Enabled" ); + gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleHor ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbScaleHor ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleHor, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = gtk_label_new( "New Horizontal Scale: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editScaleHor = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleHor ), "0.5" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleHor, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editScaleHor ); + + + dlgTexReset.cbScaleVert = gtk_check_button_new_with_label( "Enabled" ); + gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbScaleVert ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbScaleVert ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleVert, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = gtk_label_new( "New Vertical Scale: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editScaleVert = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleVert ), "0.5" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleVert, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editScaleVert ); // ---- /frame ---- - frame = gtk_frame_new (_("Reset Shift")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); - - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - - // ---- frame ---- - - dlgTexReset.cbShiftHor = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbShiftHor); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftHor, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Horizontal Shift: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editShiftHor = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftHor), "0"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftHor, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editShiftHor); - - - dlgTexReset.cbShiftVert = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbShiftVert); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftVert, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Vertical Shift: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editShiftVert = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftVert), "0"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftVert, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editShiftVert); + frame = gtk_frame_new( _( "Reset Shift" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); + + table = gtk_table_new( 2, 3, TRUE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + + // ---- frame ---- + + dlgTexReset.cbShiftHor = gtk_check_button_new_with_label( "Enabled" ); + gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftHor ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbShiftHor ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftHor, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = gtk_label_new( "New Horizontal Shift: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editShiftHor = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftHor ), "0" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftHor, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editShiftHor ); + + + dlgTexReset.cbShiftVert = gtk_check_button_new_with_label( "Enabled" ); + gtk_signal_connect( GTK_OBJECT( dlgTexReset.cbShiftVert ), "toggled", GTK_SIGNAL_FUNC( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbShiftVert ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftVert, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = gtk_label_new( "New Vertical Shift: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editShiftVert = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftVert ), "0" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftVert, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editShiftVert ); // ---- /frame ---- - frame = gtk_frame_new (_("Reset Rotation")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); - - table = gtk_table_new (1, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - - // ---- frame ---- - - dlgTexReset.cbRotation = gtk_check_button_new_with_label("Enabled"); - gtk_widget_show (dlgTexReset.cbRotation); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbRotation, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Rotation Value: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editRotation = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editRotation), "0"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editRotation, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editRotation); + frame = gtk_frame_new( _( "Reset Rotation" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); + + table = gtk_table_new( 1, 3, TRUE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + + // ---- frame ---- + + dlgTexReset.cbRotation = gtk_check_button_new_with_label( "Enabled" ); + gtk_widget_show( dlgTexReset.cbRotation ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbRotation, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = gtk_label_new( "New Rotation Value: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editRotation = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editRotation ), "0" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editRotation, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editRotation ); // ---- /frame ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); // ---- hbox ---- - w = gtk_button_new_with_label ("Use Selected Brushes"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); + w = gtk_button_new_with_label( "Use Selected Brushes" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); - w = gtk_button_new_with_label ("Use All Brushes"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDYES)); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Use All Brushes" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDYES ) ); + gtk_widget_show( w ); - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); ret = IDCANCEL; // ---- /hbox ---- // ---- /vbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); Update_TextureReseter(); bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if(ret != IDCANCEL) - { - rs->bResetRotation = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation )); - if(rs->bResetRotation) - if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editRotation)), "Rotation", &rs->rotation)) + if ( ret != IDCANCEL ) { + rs->bResetRotation = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) ); + if ( rs->bResetRotation ) { + if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editRotation ) ), "Rotation", &rs->rotation ) ) { dialogError = TRUE; + } + } - rs->bResetScale[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor )); - if(rs->bResetScale[0]) - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleHor)), "Horizontal Scale", &rs->fScale[0])) + rs->bResetScale[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) ); + if ( rs->bResetScale[0] ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleHor ) ), "Horizontal Scale", &rs->fScale[0] ) ) { dialogError = TRUE; + } + } - rs->bResetScale[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert )); - if(rs->bResetScale[1]) - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleVert)), "Vertical Scale", &rs->fScale[1])) + rs->bResetScale[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) ); + if ( rs->bResetScale[1] ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleVert ) ), "Vertical Scale", &rs->fScale[1] ) ) { dialogError = TRUE; + } + } - rs->bResetShift[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor )); - if(rs->bResetShift[0]) - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftHor)), "Horizontal Shift", &rs->fShift[0])) + rs->bResetShift[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) ); + if ( rs->bResetShift[0] ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftHor ) ), "Horizontal Shift", &rs->fShift[0] ) ) { dialogError = TRUE; + } + } - rs->bResetShift[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert )); - if(rs->bResetShift[1]) - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftVert)), "Vertical Shift", &rs->fShift[1])) + rs->bResetShift[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) ); + if ( rs->bResetShift[1] ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftVert ) ), "Vertical Shift", &rs->fShift[1] ) ) { dialogError = TRUE; + } + } - rs->bResetTextureName = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange )); - if(rs->bResetTextureName) - { - strcpy(rs->textureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexOld ))); - strcpy(rs->newTextureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexNew ))); + rs->bResetTextureName = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) ); + if ( rs->bResetTextureName ) { + strcpy( rs->textureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexOld ) ) ); + strcpy( rs->newTextureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexNew ) ) ); } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; } -int DoTrainThingBox (TrainThingRS* rs) -{ +int DoTrainThingBox( TrainThingRS* rs ){ Str texSelected; GtkWidget *window, *w, *vbox, *hbox, *frame, *table; @@ -1646,250 +1638,256 @@ int DoTrainThingBox (TrainThingRS* rs) int ret, loop = 1; - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_title (GTK_WINDOW (window), "Train Thing"); - gtk_container_border_width (GTK_CONTAINER (window), 10); + gtk_window_set_title( GTK_WINDOW( window ), "Train Thing" ); + gtk_container_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_object_set_data( GTK_OBJECT( window ), "loop", &loop ); + gtk_object_set_data( GTK_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_container_add( GTK_CONTAINER( window ), vbox ); + gtk_widget_show( vbox ); // ---- vbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); // ---- /hbox ---- - frame = gtk_frame_new (_("Radii")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = gtk_frame_new( _( "Radii" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = gtk_table_new( 2, 3, TRUE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - w = gtk_label_new ("X: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = gtk_label_new( "X: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - radiusX = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(radiusX), "100"); - gtk_table_attach (GTK_TABLE (table), radiusX, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (radiusX); + radiusX = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( radiusX ), "100" ); + gtk_table_attach( GTK_TABLE( table ), radiusX, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( radiusX ); - w = gtk_label_new ("Y: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = gtk_label_new( "Y: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - radiusY = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(radiusY), "100"); - gtk_table_attach (GTK_TABLE (table), radiusY, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (radiusY); + radiusY = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( radiusY ), "100" ); + gtk_table_attach( GTK_TABLE( table ), radiusY, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( radiusY ); - frame = gtk_frame_new (_("Angles")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = gtk_frame_new( _( "Angles" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = gtk_table_new( 2, 3, TRUE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - w = gtk_label_new ("Start: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = gtk_label_new( "Start: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - angleStart = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(angleStart), "0"); - gtk_table_attach (GTK_TABLE (table), angleStart, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (angleStart); + angleStart = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( angleStart ), "0" ); + gtk_table_attach( GTK_TABLE( table ), angleStart, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( angleStart ); - w = gtk_label_new ("End: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = gtk_label_new( "End: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - angleEnd = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(angleEnd), "90"); - gtk_table_attach (GTK_TABLE (table), angleEnd, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (angleEnd); + angleEnd = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( angleEnd ), "90" ); + gtk_table_attach( GTK_TABLE( table ), angleEnd, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( angleEnd ); - frame = gtk_frame_new (_("Height")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = gtk_frame_new( _( "Height" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = gtk_table_new( 2, 3, TRUE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - w = gtk_label_new ("Start: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = gtk_label_new( "Start: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - heightStart = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(heightStart), "0"); - gtk_table_attach (GTK_TABLE (table), heightStart, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (heightStart); + heightStart = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( heightStart ), "0" ); + gtk_table_attach( GTK_TABLE( table ), heightStart, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( heightStart ); - w = gtk_label_new ("End: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = gtk_label_new( "End: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - heightEnd = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(heightEnd), "0"); - gtk_table_attach (GTK_TABLE (table), heightEnd, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (heightEnd); + heightEnd = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( heightEnd ), "0" ); + gtk_table_attach( GTK_TABLE( table ), heightEnd, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( heightEnd ); - frame = gtk_frame_new (_("Points")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = gtk_frame_new( _( "Points" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = gtk_table_new( 2, 3, TRUE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - w = gtk_label_new ("Number: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = gtk_label_new( "Number: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - numPoints = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(numPoints), "0"); - gtk_table_attach (GTK_TABLE (table), numPoints, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (numPoints); + numPoints = gtk_entry_new_with_max_length( 256 ); + gtk_entry_set_text( GTK_ENTRY( numPoints ), "0" ); + gtk_table_attach( GTK_TABLE( table ), numPoints, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( numPoints ); - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); - // ---- hbox ---- + // ---- hbox ---- - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); + w = gtk_button_new_with_label( "Ok" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); - ret = IDCANCEL; + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); + ret = IDCANCEL; - // ---- /hbox ---- + // ---- /hbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if(ret != IDCANCEL) - { - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusX)), "Radius (X)", &rs->fRadiusX)) + if ( ret != IDCANCEL ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusX ) ), "Radius (X)", &rs->fRadiusX ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusY)), "Radius (Y)", &rs->fRadiusY)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusY ) ), "Radius (Y)", &rs->fRadiusY ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleStart)), "Angle (Start)", &rs->fStartAngle)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleStart ) ), "Angle (Start)", &rs->fStartAngle ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleEnd)), "Angle (End)", &rs->fEndAngle)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleEnd ) ), "Angle (End)", &rs->fEndAngle ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightStart)), "Height (Start)", &rs->fStartHeight)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightStart ) ), "Height (Start)", &rs->fStartHeight ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightEnd)), "Height (End)", &rs->fEndHeight)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightEnd ) ), "Height (End)", &rs->fEndHeight ) ) { dialogError = TRUE; + } - if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(numPoints)), "Num Points", &rs->iNumPoints)) + if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( numPoints ) ), "Num Points", &rs->iNumPoints ) ) { dialogError = TRUE; + } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); return ret; } diff --git a/contrib/bobtoolz/dialogs/dialogs-gtk.h b/contrib/bobtoolz/dialogs/dialogs-gtk.h index 987f7216..d18a5d6e 100644 --- a/contrib/bobtoolz/dialogs/dialogs-gtk.h +++ b/contrib/bobtoolz/dialogs/dialogs-gtk.h @@ -1,23 +1,23 @@ /* -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 + */ -struct BuildStairsRS{ +struct BuildStairsRS { char mainTexture[256]; char riserTexture[256]; int direction; @@ -48,13 +48,13 @@ struct TrainThingRS { float fStartHeight, fEndHeight; }; -struct IntersectRS{ +struct IntersectRS { int nBrushOptions; qboolean bUseDetail; qboolean bDuplicateOnly; }; -struct PolygonRS{ +struct PolygonRS { qboolean bUseBorder; qboolean bInverse; qboolean bAlignTop; @@ -62,7 +62,7 @@ struct PolygonRS{ int nBorderWidth; }; -struct DoorRS{ +struct DoorRS { char mainTexture[256]; char trimTexture[256]; qboolean bScaleMainH; @@ -72,7 +72,7 @@ struct DoorRS{ int nOrientation; }; -struct PathPlotterRS{ +struct PathPlotterRS { int nPoints; float fMultiplier; float fGravity; @@ -80,19 +80,19 @@ struct PathPlotterRS{ qboolean bShowExtra; }; -struct TwinWidget{ +struct TwinWidget { GtkWidget* one; GtkWidget* two; }; -int DoMessageBox(const char* lpText, const char* lpCaption, guint32 uType); -int DoIntersectBox(IntersectRS* rs); -int DoPolygonBox(PolygonRS* rs); -int DoResetTextureBox (ResetTextureRS* rs); -int DoBuildStairsBox(BuildStairsRS* rs); -int DoDoorsBox(DoorRS* rs); -int DoPathPlotterBox(PathPlotterRS* rs); +int DoMessageBox( const char* lpText, const char* lpCaption, guint32 uType ); +int DoIntersectBox( IntersectRS* rs ); +int DoPolygonBox( PolygonRS* rs ); +int DoResetTextureBox( ResetTextureRS* rs ); +int DoBuildStairsBox( BuildStairsRS* rs ); +int DoDoorsBox( DoorRS* rs ); +int DoPathPlotterBox( PathPlotterRS* rs ); int DoCTFColourChangeBox(); -int DoTrainThingBox (TrainThingRS* rs); +int DoTrainThingBox( TrainThingRS* rs ); //GtkWidget* GetProgressWindow(char* title, GtkProgressBar* feedback); diff --git a/contrib/bobtoolz/dialogs/pathplotterdialog.cpp b/contrib/bobtoolz/dialogs/pathplotterdialog.cpp index ae638529..ea64f26e 100644 --- a/contrib/bobtoolz/dialogs/pathplotterdialog.cpp +++ b/contrib/bobtoolz/dialogs/pathplotterdialog.cpp @@ -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 + */ // PathPlotterDialog.cpp : implementation file // @@ -34,9 +34,8 @@ static char THIS_FILE[] = __FILE__; // CPathPlotterDialog dialog -CPathPlotterDialog::CPathPlotterDialog(CWnd* pParent /*=NULL*/) - : CDialog(CPathPlotterDialog::IDD, pParent) -{ +CPathPlotterDialog::CPathPlotterDialog( CWnd* pParent /*=NULL*/ ) + : CDialog( CPathPlotterDialog::IDD, pParent ){ //{{AFX_DATA_INIT(CPathPlotterDialog) m_fGravity = -800.0f; m_fMultiplier = 3.0f; @@ -47,39 +46,37 @@ CPathPlotterDialog::CPathPlotterDialog(CWnd* pParent /*=NULL*/) } -void CPathPlotterDialog::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); +void CPathPlotterDialog::DoDataExchange( CDataExchange* pDX ){ + CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CPathPlotterDialog) - DDX_Text(pDX, IDC_GRAVITY_EDIT, m_fGravity); - DDV_MinMaxFloat(pDX, m_fGravity, -10000.f, -1.f); - DDX_Text(pDX, IDC_MULTIPLIER_EDIT, m_fMultiplier); - DDV_MinMaxFloat(pDX, m_fMultiplier, 1.f, 10.f); - DDX_Check(pDX, IDC_NOUPDATE_CHECK, m_bNoUpdate); - DDX_Text(pDX, IDC_POINTCOUNT_EDIT, m_nPoints); - DDV_MinMaxInt(pDX, m_nPoints, 1, 1000); - DDX_Check(pDX, IDC_SHOWEXTRA_CHECK, m_bShowExtra); + DDX_Text( pDX, IDC_GRAVITY_EDIT, m_fGravity ); + DDV_MinMaxFloat( pDX, m_fGravity, -10000.f, -1.f ); + DDX_Text( pDX, IDC_MULTIPLIER_EDIT, m_fMultiplier ); + DDV_MinMaxFloat( pDX, m_fMultiplier, 1.f, 10.f ); + DDX_Check( pDX, IDC_NOUPDATE_CHECK, m_bNoUpdate ); + DDX_Text( pDX, IDC_POINTCOUNT_EDIT, m_nPoints ); + DDV_MinMaxInt( pDX, m_nPoints, 1, 1000 ); + DDX_Check( pDX, IDC_SHOWEXTRA_CHECK, m_bShowExtra ); //}}AFX_DATA_MAP } -BEGIN_MESSAGE_MAP(CPathPlotterDialog, CDialog) - //{{AFX_MSG_MAP(CPathPlotterDialog) - ON_BN_CLICKED(IDYES, OnYes) - ON_BN_CLICKED(IDNO, OnNo) - //}}AFX_MSG_MAP +BEGIN_MESSAGE_MAP( CPathPlotterDialog, CDialog ) +//{{AFX_MSG_MAP(CPathPlotterDialog) +ON_BN_CLICKED( IDYES, OnYes ) +ON_BN_CLICKED( IDNO, OnNo ) +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPathPlotterDialog message handlers -void CPathPlotterDialog::OnYes() -{ - if(UpdateData()) - EndModalLoop(IDYES); +void CPathPlotterDialog::OnYes(){ + if ( UpdateData() ) { + EndModalLoop( IDYES ); + } } -void CPathPlotterDialog::OnNo() -{ - EndModalLoop(IDNO); +void CPathPlotterDialog::OnNo(){ + EndModalLoop( IDNO ); } diff --git a/contrib/bobtoolz/dialogs/pathplotterdialog.h b/contrib/bobtoolz/dialogs/pathplotterdialog.h index 6edd8987..03e50873 100644 --- a/contrib/bobtoolz/dialogs/pathplotterdialog.h +++ b/contrib/bobtoolz/dialogs/pathplotterdialog.h @@ -1,23 +1,23 @@ /* -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 + */ -#if !defined(AFX_PATHPLOTTERDIALOG_H__A0516221_F19B_11D4_ACF7_004095A18133__INCLUDED_) +#if !defined( AFX_PATHPLOTTERDIALOG_H__A0516221_F19B_11D4_ACF7_004095A18133__INCLUDED_ ) #define AFX_PATHPLOTTERDIALOG_H__A0516221_F19B_11D4_ACF7_004095A18133__INCLUDED_ #if _MSC_VER > 1000 @@ -33,35 +33,35 @@ class CPathPlotterDialog : public CDialog { // Construction public: - CPathPlotterDialog(CWnd* pParent = NULL); // standard constructor +CPathPlotterDialog( CWnd* pParent = NULL ); // standard constructor // Dialog Data - //{{AFX_DATA(CPathPlotterDialog) - enum { IDD = IDD_PATHPLOTTER_DIALOG }; - float m_fGravity; - float m_fMultiplier; - BOOL m_bNoUpdate; - int m_nPoints; - BOOL m_bShowExtra; - //}}AFX_DATA +//{{AFX_DATA(CPathPlotterDialog) +enum { IDD = IDD_PATHPLOTTER_DIALOG }; +float m_fGravity; +float m_fMultiplier; +BOOL m_bNoUpdate; +int m_nPoints; +BOOL m_bShowExtra; +//}}AFX_DATA // Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CPathPlotterDialog) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL +// ClassWizard generated virtual function overrides +//{{AFX_VIRTUAL(CPathPlotterDialog) +protected: +virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support +//}}AFX_VIRTUAL // Implementation protected: - // Generated message map functions - //{{AFX_MSG(CPathPlotterDialog) - afx_msg void OnYes(); - afx_msg void OnNo(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() +// Generated message map functions +//{{AFX_MSG(CPathPlotterDialog) +afx_msg void OnYes(); +afx_msg void OnNo(); +//}}AFX_MSG +DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} diff --git a/contrib/bobtoolz/funchandlers-GTK.cpp b/contrib/bobtoolz/funchandlers-GTK.cpp index 6f7ad443..596c5ac2 100644 --- a/contrib/bobtoolz/funchandlers-GTK.cpp +++ b/contrib/bobtoolz/funchandlers-GTK.cpp @@ -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" @@ -36,32 +36,33 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "visfind.h" // for autocaulk -list exclusionList; // whole brush exclusion -list exclusionList_Face; // single face exclusion - -bool el1Loaded = FALSE; -bool el2Loaded = FALSE; -bool clrLst1Loaded = FALSE; -bool clrLst2Loaded = FALSE; - -DBobView* g_PathView = NULL; -DVisDrawer* g_VisView = NULL; -DTrainDrawer* g_TrainView = NULL; -DTreePlanter* g_TreePlanter = NULL; +list exclusionList; // whole brush exclusion +list exclusionList_Face; // single face exclusion + +bool el1Loaded = FALSE; +bool el2Loaded = FALSE; +bool clrLst1Loaded = FALSE; +bool clrLst2Loaded = FALSE; + +DBobView* g_PathView = NULL; +DVisDrawer* g_VisView = NULL; +DTrainDrawer* g_TrainView = NULL; +DTreePlanter* g_TreePlanter = NULL; // ------------- //========================// // Helper Functions // //========================// -void LoadLists() -{ +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_Face); + if ( !el1Loaded ) { + el1Loaded = LoadExclusionList( GetFilename( buffer, "bt/bt-el1.txt" ), &exclusionList ); + } + if ( !el2Loaded ) { + el2Loaded = LoadExclusionList( GetFilename( buffer, "bt/bt-el2.txt" ), &exclusionList_Face ); + } } @@ -69,94 +70,93 @@ void LoadLists() // Main Functions // //========================// -void DoIntersect() -{ +void DoIntersect(){ IntersectRS rs; - if(DoIntersectBox(&rs) == IDCANCEL) + if ( DoIntersectBox( &rs ) == IDCANCEL ) { return; + } - if(rs.nBrushOptions == BRUSH_OPT_SELECTED) - { - if( g_FuncTable.m_pfnSelectedBrushCount() < 2 ) - { - DoMessageBox("Invalid number of brushes selected, choose at least 2", "Error", MB_OK); - return; + if ( rs.nBrushOptions == BRUSH_OPT_SELECTED ) { + if ( g_FuncTable.m_pfnSelectedBrushCount() < 2 ) { + DoMessageBox( "Invalid number of brushes selected, choose at least 2", "Error", MB_OK ); + return; } } DEntity world; - switch(rs.nBrushOptions) + switch ( rs.nBrushOptions ) { case BRUSH_OPT_SELECTED: - { - world.LoadSelectedBrushes(); - break; - } + { + world.LoadSelectedBrushes(); + break; + } case BRUSH_OPT_WHOLE_MAP: - { - world.LoadFromEntity(0, FALSE); - break; - } + { + world.LoadFromEntity( 0, FALSE ); + break; + } } - world.RemoveNonCheckBrushes(&exclusionList, rs.bUseDetail); + world.RemoveNonCheckBrushes( &exclusionList, rs.bUseDetail ); bool* pbSelectList; - if(rs.bDuplicateOnly) + if ( rs.bDuplicateOnly ) { pbSelectList = world.BuildDuplicateList(); - else + } + else{ pbSelectList = world.BuildIntersectList(); + } - world.SelectBrushes(pbSelectList); + world.SelectBrushes( pbSelectList ); delete[] pbSelectList; } -void DoPolygonsTB() -{ - vec3_t vMin, vMax; +void DoPolygonsTB(){ + vec3_t vMin, vMax; - // figure out vMin and vMax - g_FuncTable.m_pfnGetDispatchParams( vMin, vMax, NULL ); + // figure out vMin and vMax + g_FuncTable.m_pfnGetDispatchParams( vMin, vMax, NULL ); - DoPolygons( vMin, vMax ); + DoPolygons( vMin, vMax ); } -void DoPolygons(vec3_t vMin, vec3_t vMax) -{ +void DoPolygons( vec3_t vMin, vec3_t vMax ){ // ensure we have something selected - if( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) - { - DoMessageBox("Invalid number of brushes selected, choose 1 only", "Error", MB_OK); - return; + if ( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) { + DoMessageBox( "Invalid number of brushes selected, choose 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); + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( 0 ); // cant release until we delete the brush, if we do... PolygonRS rs; // ask user for type, size, etc.... - if(DoPolygonBox(&rs) == IDOK) - { - g_FuncTable.m_pfnDeleteBrushHandle(brush); + if ( DoPolygonBox( &rs ) == IDOK ) { + g_FuncTable.m_pfnDeleteBrushHandle( brush ); DShape poly; - if(rs.bInverse) - poly.BuildInversePrism(vMin, vMax, rs.nSides, rs.bAlignTop); + if ( rs.bInverse ) { + poly.BuildInversePrism( vMin, vMax, rs.nSides, rs.bAlignTop ); + } else { - if(rs.bUseBorder) - poly.BuildBorderedPrism(vMin, vMax, rs.nSides, rs.nBorderWidth, rs.bAlignTop); - else - poly.BuildRegularPrism(vMin, vMax, rs.nSides, rs.bAlignTop); + if ( rs.bUseBorder ) { + poly.BuildBorderedPrism( vMin, vMax, rs.nSides, rs.nBorderWidth, rs.bAlignTop ); + } + else{ + poly.BuildRegularPrism( vMin, vMax, rs.nSides, rs.bAlignTop ); + } } @@ -167,100 +167,93 @@ void DoPolygons(vec3_t vMin, vec3_t vMax) g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } -void DoFixBrushes() -{ +void DoFixBrushes(){ DMap world; world.LoadAll(); - int count = world.FixBrushes(TRUE); - - Sys_Printf("%i invalid/duplicate planes removed\n", count); + int count = world.FixBrushes( TRUE ); + + Sys_Printf( "%i invalid/duplicate planes removed\n", count ); } -void DoResetTextures() -{ +void DoResetTextures(){ static ResetTextureRS rs; - const char* texName; - if(g_SelectedFaceTable.m_pfnGetSelectedFaceCount() != 1) - { - texName = NULL; - } - else - { - texName = GetCurrentTexture(); - strcpy(rs.textureName, GetCurrentTexture()); - } - - int ret; - if((ret = DoResetTextureBox(&rs)) == IDCANCEL) - return; - - if(rs.bResetTextureName) - texName = rs.textureName; - - if(ret == IDOK) - { - DEntity world; - world.LoadSelectedBrushes(); - world.ResetTextures(texName, rs.fScale, rs.fShift, rs.rotation, rs.newTextureName, - rs.bResetTextureName, rs.bResetScale, rs.bResetShift, rs.bResetRotation, TRUE); - } - else - { - DMap world; - world.LoadAll(TRUE); - world.ResetTextures(texName, rs.fScale, rs.fShift, rs.rotation, rs.newTextureName, - rs.bResetTextureName, rs.bResetScale, rs.bResetShift, rs.bResetRotation); - } + const char* texName; + if ( g_SelectedFaceTable.m_pfnGetSelectedFaceCount() != 1 ) { + texName = NULL; + } + else + { + texName = GetCurrentTexture(); + strcpy( rs.textureName, GetCurrentTexture() ); + } + + int ret; + if ( ( ret = DoResetTextureBox( &rs ) ) == IDCANCEL ) { + return; + } + + if ( rs.bResetTextureName ) { + texName = rs.textureName; + } + + if ( ret == IDOK ) { + DEntity world; + world.LoadSelectedBrushes(); + world.ResetTextures( texName, rs.fScale, rs.fShift, rs.rotation, rs.newTextureName, + rs.bResetTextureName, rs.bResetScale, rs.bResetShift, rs.bResetRotation, TRUE ); + } + else + { + DMap world; + world.LoadAll( TRUE ); + world.ResetTextures( texName, rs.fScale, rs.fShift, rs.rotation, rs.newTextureName, + rs.bResetTextureName, rs.bResetScale, rs.bResetShift, rs.bResetRotation ); + } } -void DoBuildStairs(vec3_t vMin, vec3_t vMax) -{ +void DoBuildStairs( vec3_t vMin, vec3_t vMax ){ BuildStairsRS rs; - strcpy(rs.mainTexture, GetCurrentTexture()); + strcpy( rs.mainTexture, GetCurrentTexture() ); // ensure we have something selected - if( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) - { - DoMessageBox("Invalid number of brushes selected, chose 1 only", "Error", MB_OK); - return; + if ( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) { + DoMessageBox( "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); + 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(DoBuildStairsBox(&rs) == IDOK) - { + if ( DoBuildStairsBox( &rs ) == IDOK ) { // calc brush size vec3_t size; - VectorSubtract(vMax, vMin, size); + VectorSubtract( vMax, vMin, size ); - if(((int)size[2] % rs.stairHeight) != 0) - { + if ( ( (int)size[2] % rs.stairHeight ) != 0 ) { // stairs must fit evenly into brush - DoMessageBox("Invalid stair height\nHeight of block must be divisable by stair height", "Error", MB_OK); + DoMessageBox( "Invalid stair height\nHeight of block must be divisable by stair height", "Error", MB_OK ); } else { - + // Remove Size Brush - g_FuncTable.m_pfnDeleteBrushHandle(brush); + g_FuncTable.m_pfnDeleteBrushHandle( brush ); + - // Get Step Count int numSteps = (int)size[2] / rs.stairHeight; - - if(rs.style == STYLE_CORNER) - { - BuildCornerStairs(vMin, vMax, numSteps, rs.mainTexture, rs.riserTexture); + + if ( rs.style == STYLE_CORNER ) { + BuildCornerStairs( vMin, vMax, numSteps, rs.mainTexture, rs.riserTexture ); } else { @@ -268,35 +261,41 @@ void DoBuildStairs(vec3_t vMin, vec3_t vMax) // Get Step Dimensions float stairHeight = (float)rs.stairHeight; float stairWidth; - if((rs.direction == MOVE_EAST) || (rs.direction == MOVE_WEST)) - stairWidth = (size[0])/numSteps; - else - stairWidth = (size[1])/numSteps; + if ( ( rs.direction == MOVE_EAST ) || ( rs.direction == MOVE_WEST ) ) { + stairWidth = ( size[0] ) / numSteps; + } + else{ + stairWidth = ( size[1] ) / numSteps; + } // Build Base For Stair (bob's style) - if(rs.style == STYLE_BOB) - Build_Wedge(rs.direction, vMin, vMax, TRUE); + if ( rs.style == STYLE_BOB ) { + Build_Wedge( rs.direction, vMin, vMax, TRUE ); + } // Set First Step Starting Position vMax[2] = vMin[2] + stairHeight; - SetInitialStairPos(rs.direction, vMin, vMax, stairWidth); + SetInitialStairPos( rs.direction, vMin, vMax, stairWidth ); // Build The Steps - for(int i = 0; i < numSteps; i++) + for ( int i = 0; i < numSteps; i++ ) { - if(rs.style == STYLE_BOB) - Build_StairStep_Wedge(rs.direction, vMin, vMax, rs.mainTexture, rs.riserTexture, rs.bUseDetail); - else if(rs.style == STYLE_ORIGINAL) - Build_StairStep(vMin, vMax, rs.mainTexture, rs.riserTexture, rs.direction); + if ( rs.style == STYLE_BOB ) { + Build_StairStep_Wedge( rs.direction, vMin, vMax, rs.mainTexture, rs.riserTexture, rs.bUseDetail ); + } + else if ( rs.style == STYLE_ORIGINAL ) { + Build_StairStep( vMin, vMax, rs.mainTexture, rs.riserTexture, rs.direction ); + } // get step into next position - MoveBlock(rs.direction, vMin, vMax, stairWidth); + MoveBlock( rs.direction, vMin, vMax, stairWidth ); vMax[2] += stairHeight; - if(rs.style == STYLE_BOB) - vMin[2] += stairHeight; // wedge bottom must be raised + if ( rs.style == STYLE_BOB ) { + vMin[2] += stairHeight; // wedge bottom must be raised + } } } } @@ -305,221 +304,212 @@ void DoBuildStairs(vec3_t vMin, vec3_t vMax) g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } -void DoBuildDoors(vec3_t vMin, vec3_t vMax) -{ +void DoBuildDoors( vec3_t vMin, vec3_t vMax ){ // ensure we have something selected - if( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) - { - DoMessageBox("Invalid number of brushes selected, chose 1 only", "Error", MB_OK); - return; + if ( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) { + DoMessageBox( "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); + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( 0 ); // cant release until we delete the brush, if we do... DoorRS rs; - strcpy(rs.mainTexture, GetCurrentTexture()); + strcpy( rs.mainTexture, GetCurrentTexture() ); - if(DoDoorsBox(&rs) == IDOK) - { - g_FuncTable.m_pfnDeleteBrushHandle(brush); + if ( DoDoorsBox( &rs ) == IDOK ) { + g_FuncTable.m_pfnDeleteBrushHandle( brush ); - BuildDoorsX2(vMin, vMax, - rs.bScaleMainH, rs.bScaleMainV, - rs.bScaleTrimH, rs.bScaleTrimV, - rs.mainTexture, rs.trimTexture, - rs.nOrientation); // shapes.cpp + BuildDoorsX2( vMin, vMax, + rs.bScaleMainH, rs.bScaleMainV, + rs.bScaleTrimH, rs.bScaleTrimV, + rs.mainTexture, rs.trimTexture, + rs.nOrientation ); // shapes.cpp } g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } -void DoPathPlotter() -{ +void DoPathPlotter(){ PathPlotterRS rs; - int ret = DoPathPlotterBox(&rs); - if(ret == IDCANCEL) + int ret = DoPathPlotterBox( &rs ); + if ( ret == IDCANCEL ) { return; - if(ret == IDNO) - { - if(g_PathView) + } + if ( ret == IDNO ) { + if ( g_PathView ) { delete g_PathView; + } return; } - if( g_FuncTable.m_pfnSelectedBrushCount() != 1) - { - DoMessageBox("Invalid number of brushes selected, chose 1 only", "Error", MB_OK); + if ( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) { + DoMessageBox( "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(); - - brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(0); + + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( 0 ); // should be our trigger brush DEntity world; - world.LoadEPairList(*g_EntityTable.m_pfnGetEntityKeyValList(brush->owner)); + world.LoadEPairList( *g_EntityTable.m_pfnGetEntityKeyValList( brush->owner ) ); - DEPair* trigger_ep = world.FindEPairByKey("targetname"); + 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, NULL); - if(entTarget) - { - if(g_PathView) + 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, NULL ); + if ( entTarget ) { + if ( g_PathView ) { delete g_PathView; + } g_PathView = new DBobView; - g_PathView->Begin(trigger_ep->value, target_ep->value, rs.fMultiplier, rs.nPoints, rs.fGravity, rs.bNoUpdate, rs.bShowExtra); + g_PathView->Begin( trigger_ep->value, target_ep->value, rs.fMultiplier, rs.nPoints, rs.fGravity, rs.bNoUpdate, rs.bShowExtra ); + } + else{ + DoMessageBox( "trigger_push target could not be found.", "Error", MB_OK ); } - else - DoMessageBox("trigger_push target could not be found.", "Error", MB_OK); } - else - DoMessageBox("trigger_push has no target.", "Error", MB_OK); + else{ + DoMessageBox( "trigger_push has no target.", "Error", MB_OK ); + } } - else - DoMessageBox("You must select a 'trigger_push' entity.", "Error", MB_OK); - } - else - DoMessageBox("Entity must have a targetname", "Error", MB_OK); + else{ + DoMessageBox( "You must select a 'trigger_push' entity.", "Error", MB_OK ); + } + } + else{ + DoMessageBox( "Entity must have a targetname", "Error", MB_OK ); + } g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } -void DoPitBuilder(vec3_t vMin, vec3_t vMax) -{ +void DoPitBuilder( vec3_t vMin, vec3_t vMax ){ // ensure we have something selected - if( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) - { - DoMessageBox("Invalid number of brushes selected, chose 1 only", "Error", MB_OK); - return; + if ( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) { + DoMessageBox( "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); + 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)) - { + if ( pit.BuildPit( vMin, vMax ) ) { pit.Commit(); - g_FuncTable.m_pfnDeleteBrushHandle(brush); + g_FuncTable.m_pfnDeleteBrushHandle( brush ); + } + else{ + DoMessageBox( "Failed To Make Pit\nTry Making The Brush Bigger", "Error", MB_OK ); } - else - DoMessageBox("Failed To Make Pit\nTry Making The Brush Bigger", "Error", MB_OK); g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } -void DoMergePatches() -{ - patch_merge_t merge_info; - DPatch mrgPatches[2]; - int i; - - // ensure we have something selected - if ( g_FuncTable.m_pfnSelectedBrushCount() != 2 ) - { - DoMessageBox("Invalid number of objects selected, chose 2 only", "Error", MB_OK); - return; - } - - - g_FuncTable.m_pfnAllocateSelectedBrushHandles(); - - for (i = 0; i < 2; i++) - { - brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(i); - - if (!brush->pPatch) - { - g_FuncTable.m_pfnReleaseSelectedBrushHandles(); - DoMessageBox("You must select ONLY patches", "Error", MB_OK); - return; - } - - mrgPatches[i].LoadFromBrush_t(brush); - } - - /* mrgPatches[0].Transpose(); - mrgPatches[0].RemoveFromRadiant(); - mrgPatches[0].BuildInRadiant();*/ - - merge_info = mrgPatches[0].IsMergable(&mrgPatches[1]); - - if (merge_info.mergable) - { - Sys_Printf("%i %i", merge_info.pos1, merge_info.pos2); - - Sys_Printf("Patches Mergable\n"); - DPatch* newPatch = mrgPatches[0].MergePatches(merge_info, &mrgPatches[0], &mrgPatches[1]); - - /* mrgPatches[0].RemoveFromRadiant(); - mrgPatches[0].BuildInRadiant(); - - mrgPatches[1].RemoveFromRadiant(); - mrgPatches[1].BuildInRadiant(); - - - delete newPatch;*/ - - if (!newPatch) - { - } else - { - mrgPatches[0].RemoveFromRadiant(); - mrgPatches[1].RemoveFromRadiant(); - - newPatch->BuildInRadiant(); - delete newPatch; - } - } - - g_FuncTable.m_pfnReleaseSelectedBrushHandles(); +void DoMergePatches(){ + patch_merge_t merge_info; + DPatch mrgPatches[2]; + int i; + + // ensure we have something selected + if ( g_FuncTable.m_pfnSelectedBrushCount() != 2 ) { + DoMessageBox( "Invalid number of objects selected, chose 2 only", "Error", MB_OK ); + return; + } + + + g_FuncTable.m_pfnAllocateSelectedBrushHandles(); + + for ( i = 0; i < 2; i++ ) + { + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( i ); + + if ( !brush->pPatch ) { + g_FuncTable.m_pfnReleaseSelectedBrushHandles(); + DoMessageBox( "You must select ONLY patches", "Error", MB_OK ); + return; + } + + mrgPatches[i].LoadFromBrush_t( brush ); + } + + /* mrgPatches[0].Transpose(); + mrgPatches[0].RemoveFromRadiant(); + mrgPatches[0].BuildInRadiant();*/ + + merge_info = mrgPatches[0].IsMergable( &mrgPatches[1] ); + + if ( merge_info.mergable ) { + Sys_Printf( "%i %i", merge_info.pos1, merge_info.pos2 ); + + Sys_Printf( "Patches Mergable\n" ); + DPatch* newPatch = mrgPatches[0].MergePatches( merge_info, &mrgPatches[0], &mrgPatches[1] ); + + /* mrgPatches[0].RemoveFromRadiant(); + mrgPatches[0].BuildInRadiant(); + + mrgPatches[1].RemoveFromRadiant(); + mrgPatches[1].BuildInRadiant(); + + + delete newPatch;*/ + + if ( !newPatch ) { + } + else + { + mrgPatches[0].RemoveFromRadiant(); + mrgPatches[1].RemoveFromRadiant(); + + newPatch->BuildInRadiant(); + delete newPatch; + } + } + + g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } void DoSplitPatch() { DPatch patch; // ensure we have something selected - if( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) { - DoMessageBox("Invalid number of objects selected, select 1 patch only", "Error", MB_OK); - return; + if ( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) { + DoMessageBox( "Invalid number of objects selected, select 1 patch only", "Error", MB_OK ); + return; } g_FuncTable.m_pfnAllocateSelectedBrushHandles(); - brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(0); + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( 0 ); - if( !brush->pPatch ) { + if ( !brush->pPatch ) { g_FuncTable.m_pfnReleaseSelectedBrushHandles(); - DoMessageBox("You must select ONLY patches", "Error", MB_OK); - return; + DoMessageBox( "You must select ONLY patches", "Error", MB_OK ); + return; } - patch.LoadFromBrush_t(brush); + patch.LoadFromBrush_t( brush ); list patchList = patch.Split( true, true ); - for(list::iterator patches = patchList.begin(); patches != patchList.end(); patches++) { - (*patches).BuildInRadiant(); + for ( list::iterator patches = patchList.begin(); patches != patchList.end(); patches++ ) { + ( *patches ).BuildInRadiant(); } patch.RemoveFromRadiant(); @@ -527,66 +517,60 @@ void DoSplitPatch() { g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } -void DoVisAnalyse() -{ +void DoVisAnalyse(){ char filename[1024]; - if( g_FuncTable.m_pfnSelectedBrushCount() == 0 ) - { - if(g_VisView) - { + if ( g_FuncTable.m_pfnSelectedBrushCount() == 0 ) { + if ( g_VisView ) { delete g_VisView; return; } } - if( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) - { - DoMessageBox("Invalid number of objects selected, select 1 only", "Error", MB_OK); - return; + if ( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) { + DoMessageBox( "Invalid number of objects selected, select 1 only", "Error", MB_OK ); + return; } g_FuncTable.m_pfnAllocateSelectedBrushHandles(); - brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(0); + brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( 0 ); DBrush orgBrush; - orgBrush.LoadFromBrush_t(brush, false); + orgBrush.LoadFromBrush_t( brush, false ); g_FuncTable.m_pfnReleaseSelectedBrushHandles(); orgBrush.BuildBounds(); vec3_t origin; - origin[0] = (orgBrush.bbox_max[0] + orgBrush.bbox_min[0])/2.f; - origin[1] = (orgBrush.bbox_max[1] + orgBrush.bbox_min[1])/2.f; - origin[2] = (orgBrush.bbox_max[2] + orgBrush.bbox_min[2])/2.f; + origin[0] = ( orgBrush.bbox_max[0] + orgBrush.bbox_min[0] ) / 2.f; + origin[1] = ( orgBrush.bbox_max[1] + orgBrush.bbox_min[1] ) / 2.f; + origin[2] = ( orgBrush.bbox_max[2] + orgBrush.bbox_min[2] ) / 2.f; - char* rad_filename = g_FuncTable.m_pfnGetMapName(); - if(!rad_filename) - { - DoMessageBox("An Error Occurred While Trying\n To Get The Map Filename", "Error", MB_OK); + char* rad_filename = g_FuncTable.m_pfnGetMapName(); + if ( !rad_filename ) { + DoMessageBox( "An Error Occurred While Trying\n To Get The Map Filename", "Error", MB_OK ); return; } - strcpy(filename, rad_filename); - - char* ext = strrchr(filename, '.')+1; - strcpy(ext, "bsp");// rename the extension + strcpy( filename, rad_filename ); - list *pointList = BuildTrace(filename, origin); + char* ext = strrchr( filename, '.' ) + 1; + strcpy( ext, "bsp" ); // rename the extension - if(!g_VisView) - { + list *pointList = BuildTrace( filename, origin ); + + if ( !g_VisView ) { g_VisView = new DVisDrawer; g_VisView->Register(); } - - g_VisView->SetList(pointList); + + g_VisView->SetList( pointList ); } void DoTrainPathPlot() { - if(g_TrainView) { + if ( g_TrainView ) { delete g_TrainView; g_TrainView = NULL; } @@ -596,7 +580,7 @@ void DoTrainPathPlot() { void DoCaulkSelection( void ) { DEntity world; - + float fScale[2] = { 0.5f, 0.5f }; float fShift[2] = { 0.0f, 0.0f }; @@ -609,7 +593,7 @@ void DoCaulkSelection( void ) { } void DoTreePlanter( void ) { - if(g_TreePlanter) { + if ( g_TreePlanter ) { delete g_TreePlanter; g_TreePlanter = NULL; return; @@ -619,7 +603,7 @@ void DoTreePlanter( void ) { } void DoDropEnts( void ) { - if(g_TreePlanter) { + if ( g_TreePlanter ) { g_TreePlanter->DropEntsToGround(); } } @@ -635,29 +619,29 @@ bool bFacesNoTop[6] = {true, true, true, true, true, false}; void DoFlipTerrain( void ) { vec3_t vUp = { 0.f, 0.f, 1.f }; - int i; + int i; // ensure we have something selected - if( g_FuncTable.m_pfnSelectedBrushCount() != 2 ) { - DoMessageBox("Invalid number of objects selected, chose 2 only", "Error", MB_OK); + if ( g_FuncTable.m_pfnSelectedBrushCount() != 2 ) { + DoMessageBox( "Invalid number of objects selected, chose 2 only", "Error", MB_OK ); return; } g_FuncTable.m_pfnAllocateSelectedBrushHandles(); brush_t* brushes[2]; - for( i = 0; i < 2; i++ ) { - brushes[i] = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle(i); + for ( i = 0; i < 2; i++ ) { + brushes[i] = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( i ); } DBrush Brushes[2]; DPlane* Planes[2]; pntTripple Points[2]; - for( i = 0; i < 2; i++ ) { + for ( i = 0; i < 2; i++ ) { Brushes[i].LoadFromBrush_t( brushes[i], false ); - if(!(Planes[i] = Brushes[i].FindPlaneWithClosestNormal( vUp )) || Brushes[i].FindPointsForPlane( Planes[i], Points[i], 3 ) != 3) { + if ( !( Planes[i] = Brushes[i].FindPlaneWithClosestNormal( vUp ) ) || Brushes[i].FindPointsForPlane( Planes[i], Points[i], 3 ) != 3 ) { g_FuncTable.m_pfnReleaseSelectedBrushHandles(); - DoMessageBox("Error", "Error", MB_OK); + DoMessageBox( "Error", "Error", MB_OK ); return; } } @@ -667,7 +651,7 @@ void DoFlipTerrain( void ) { Brushes[1].GetBounds( mins2, maxs2 ); entity_t* ents[2]; - for( i = 0; i < 2; i++ ) { + for ( i = 0; i < 2; i++ ) { ents[i] = brushes[i]->owner; Brushes[i].RemoveFromRadiant(); } @@ -679,39 +663,39 @@ void DoFlipTerrain( void ) { int dontmatch[2] = { -1, -1 }; bool found = false; - for( i = 0; i < 3; i++ ) { - for( int j = 0; j < 3 && !found; j++ ) { - if(VectorCompare( (Points[0])[i]->_pnt, (Points[1])[j]->_pnt )) { + for ( i = 0; i < 3; i++ ) { + for ( int j = 0; j < 3 && !found; j++ ) { + if ( VectorCompare( ( Points[0] )[i]->_pnt, ( Points[1] )[j]->_pnt ) ) { found = true; break; } } - if(!found) { + if ( !found ) { dontmatch[0] = i; break; } found = false; } - if(dontmatch[0] == -1) { - DoMessageBox("Error", "Error", MB_OK); + if ( dontmatch[0] == -1 ) { + DoMessageBox( "Error", "Error", MB_OK ); return; } - for( i = 0; i < 3; i++ ) { - for( int j = 0; j < 3 && !found; j++ ) { - if(VectorCompare( (Points[1])[i]->_pnt, (Points[0])[j]->_pnt )) { + for ( i = 0; i < 3; i++ ) { + for ( int j = 0; j < 3 && !found; j++ ) { + if ( VectorCompare( ( Points[1] )[i]->_pnt, ( Points[0] )[j]->_pnt ) ) { found = true; break; } } - if(!found) { + if ( !found ) { dontmatch[1] = i; break; } found = false; } - if(dontmatch[1] == -1) { - DoMessageBox("Error", "Error", MB_OK); + if ( dontmatch[1] == -1 ) { + DoMessageBox( "Error", "Error", MB_OK ); return; } @@ -719,79 +703,84 @@ void DoFlipTerrain( void ) { vec3_t plnpnts2[3]; vec3_t plnpntsshr[3]; - VectorCopy( (Points[0])[dontmatch[0]]->_pnt, plnpnts1[0] ); - for( i = 0; i < 3; i++ ) { - if( dontmatch[0] != i ) { - VectorCopy( (Points[0])[i]->_pnt, plnpnts1[1] ); + VectorCopy( ( Points[0] )[dontmatch[0]]->_pnt, plnpnts1[0] ); + for ( i = 0; i < 3; i++ ) { + if ( dontmatch[0] != i ) { + VectorCopy( ( Points[0] )[i]->_pnt, plnpnts1[1] ); break; } } - VectorCopy( (Points[1])[dontmatch[1]]->_pnt, plnpnts1[2] ); + VectorCopy( ( Points[1] )[dontmatch[1]]->_pnt, plnpnts1[2] ); - VectorCopy( (Points[1])[dontmatch[1]]->_pnt, plnpnts2[0] ); - for( i = 0; i < 3; i++ ) { - if( dontmatch[1] != i && !VectorCompare( (Points[1])[i]->_pnt, plnpnts1[1] )) { - VectorCopy( (Points[1])[i]->_pnt, plnpnts2[1] ); + VectorCopy( ( Points[1] )[dontmatch[1]]->_pnt, plnpnts2[0] ); + for ( i = 0; i < 3; i++ ) { + if ( dontmatch[1] != i && !VectorCompare( ( Points[1] )[i]->_pnt, plnpnts1[1] ) ) { + VectorCopy( ( Points[1] )[i]->_pnt, plnpnts2[1] ); break; } } - VectorCopy( (Points[0])[dontmatch[0]]->_pnt, plnpnts2[2] ); + VectorCopy( ( Points[0] )[dontmatch[0]]->_pnt, plnpnts2[2] ); - VectorCopy( (Points[0])[dontmatch[0]]->_pnt, plnpntsshr[0] ); - VectorCopy( (Points[1])[dontmatch[1]]->_pnt, plnpntsshr[1] ); - if( (Points[1])[dontmatch[1]]->_pnt[2] < (Points[0])[dontmatch[0]]->_pnt[2] ) { - VectorCopy( (Points[1])[dontmatch[1]]->_pnt, plnpntsshr[2] ); - } else { - VectorCopy( (Points[0])[dontmatch[0]]->_pnt, plnpntsshr[2] ); + VectorCopy( ( Points[0] )[dontmatch[0]]->_pnt, plnpntsshr[0] ); + VectorCopy( ( Points[1] )[dontmatch[1]]->_pnt, plnpntsshr[1] ); + if ( ( Points[1] )[dontmatch[1]]->_pnt[2] < ( Points[0] )[dontmatch[0]]->_pnt[2] ) { + VectorCopy( ( Points[1] )[dontmatch[1]]->_pnt, plnpntsshr[2] ); + } + else { + VectorCopy( ( Points[0] )[dontmatch[0]]->_pnt, plnpntsshr[2] ); } plnpntsshr[2][2] -= 16; - for( i = 0; i < 3; i++ ) { - if( mins2[i] < mins1[i] ) { + for ( i = 0; i < 3; i++ ) { + if ( mins2[i] < mins1[i] ) { mins1[i] = mins2[i]; } - if( maxs2[i] > maxs1[i] ) { + if ( maxs2[i] > maxs1[i] ) { maxs1[i] = maxs2[i]; } } DBrush* newBrushes[2]; - newBrushes[0] = DShape::GetBoundingCube_Ext( mins1, maxs1, "textures/common/caulk", bFacesAll, true); - newBrushes[1] = DShape::GetBoundingCube_Ext( mins1, maxs1, "textures/common/caulk", bFacesAll, true); + newBrushes[0] = DShape::GetBoundingCube_Ext( mins1, maxs1, "textures/common/caulk", bFacesAll, true ); + newBrushes[1] = DShape::GetBoundingCube_Ext( mins1, maxs1, "textures/common/caulk", bFacesAll, true ); vec3_t normal; MakeNormal( plnpnts1[0], plnpnts1[1], plnpnts1[2], normal ); - if( normal[2] >= 0 ) { + if ( normal[2] >= 0 ) { newBrushes[0]->AddFace( plnpnts1[0], plnpnts1[1], plnpnts1[2], "textures/common/terrain", true ); - } else { + } + else { newBrushes[0]->AddFace( plnpnts1[2], plnpnts1[1], plnpnts1[0], "textures/common/terrain", true ); } MakeNormal( plnpnts2[0], plnpnts2[1], plnpnts2[2], normal ); - if( normal[2] >= 0 ) { + if ( normal[2] >= 0 ) { newBrushes[1]->AddFace( plnpnts2[0], plnpnts2[1], plnpnts2[2], "textures/common/terrain", true ); - } else { + } + else { newBrushes[1]->AddFace( plnpnts2[2], plnpnts2[1], plnpnts2[0], "textures/common/terrain", true ); } vec3_t vec; - MakeNormal( plnpntsshr[0], plnpntsshr[1], plnpntsshr[2], normal ); - + MakeNormal( plnpntsshr[0], plnpntsshr[1], plnpntsshr[2], normal ); + VectorSubtract( plnpnts1[2], plnpnts1[1], vec ); - if( DotProduct( vec, normal ) >= 0 ) { + if ( DotProduct( vec, normal ) >= 0 ) { newBrushes[0]->AddFace( plnpntsshr[0], plnpntsshr[1], plnpntsshr[2], "textures/common/caulk", true ); - } else { + } + else { newBrushes[0]->AddFace( plnpntsshr[2], plnpntsshr[1], plnpntsshr[0], "textures/common/caulk", true ); } VectorSubtract( plnpnts2[2], plnpnts2[1], vec ); - if( DotProduct( vec, normal ) >= 0 ) { + if ( DotProduct( vec, normal ) >= 0 ) { newBrushes[1]->AddFace( plnpntsshr[0], plnpntsshr[1], plnpntsshr[2], "textures/common/caulk", true ); - } else { + } + else { newBrushes[1]->AddFace( plnpntsshr[2], plnpntsshr[1], plnpntsshr[0], "textures/common/caulk", true ); } - for( i = 0; i < 2; i++ ) { + for ( i = 0; i < 2; i++ ) { newBrushes[i]->RemoveRedundantPlanes(); newBrushes[i]->BuildInRadiant( false, NULL, ents[i] ); delete newBrushes[i]; diff --git a/contrib/bobtoolz/funchandlers-ctf-GTK.cpp b/contrib/bobtoolz/funchandlers-ctf-GTK.cpp index b01fc7cb..637cf5a2 100644 --- a/contrib/bobtoolz/funchandlers-ctf-GTK.cpp +++ b/contrib/bobtoolz/funchandlers-ctf-GTK.cpp @@ -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" @@ -41,19 +41,16 @@ BOOL clrLst2Loaded = FALSE; // Helper Functions // //========================// -void LoadLists() -{ +void LoadLists(){ char buffer[256]; - if(!clrLst1Loaded) - { - clrLst1Loaded = LoadExclusionList(GetFilename(buffer, "plugins/bt/ctf-blue.txt"), &clrList_Blue); - LoadExclusionList(GetFilename(buffer, "plugins/bt/blue.txt"), &clrList_Blue); + if ( !clrLst1Loaded ) { + clrLst1Loaded = LoadExclusionList( GetFilename( buffer, "plugins/bt/ctf-blue.txt" ), &clrList_Blue ); + LoadExclusionList( GetFilename( buffer, "plugins/bt/blue.txt" ), &clrList_Blue ); } - if(!clrLst2Loaded) - { - clrLst2Loaded = LoadExclusionList(GetFilename(buffer, "plugins/bt/ctf-red.txt"), &clrList_Red); - LoadExclusionList(GetFilename(buffer, "plugins/bt/red.txt"), &clrList_Red); + if ( !clrLst2Loaded ) { + clrLst2Loaded = LoadExclusionList( GetFilename( buffer, "plugins/bt/ctf-red.txt" ), &clrList_Red ); + LoadExclusionList( GetFilename( buffer, "plugins/bt/red.txt" ), &clrList_Red ); } } @@ -62,20 +59,19 @@ void LoadLists() // Main Functions // //========================// -void DoCTFColourChanger() -{ - if(!clrLst1Loaded || !clrLst2Loaded) - { - DoMessageBox("CTF texture lists not found, this function will terminate.", "Error", MB_OK); +void DoCTFColourChanger(){ + if ( !clrLst1Loaded || !clrLst2Loaded ) { + DoMessageBox( "CTF texture lists not found, this function will terminate.", "Error", MB_OK ); return; } int ret = DoCTFColourChangeBox(); - if(ret == IDCANCEL) + if ( ret == IDCANCEL ) { return; + } + + int cnt = Min( clrList_Blue.size(), clrList_Red.size() ); - int cnt = Min(clrList_Blue.size(), clrList_Red.size()); - list::const_iterator Texture_change; list::const_iterator Texture_new; @@ -84,131 +80,132 @@ void DoCTFColourChanger() int eCnt = g_FuncTable.m_pfnGetEntityCount(); DMap world; - world.LoadAll(TRUE); + world.LoadAll( TRUE ); - if(ret == IDYES) - { - Texture_change = clrList_Blue.begin(); - Texture_new = clrList_Red.begin(); + if ( ret == IDYES ) { + Texture_change = clrList_Blue.begin(); + Texture_new = clrList_Red.begin(); } else { - Texture_change = clrList_Red.begin(); - Texture_new = clrList_Blue.begin(); + Texture_change = clrList_Red.begin(); + Texture_new = clrList_Blue.begin(); } - for(int i = 0; i < cnt; i++) + for ( int i = 0; i < cnt; i++ ) { - world.ResetTextures((*Texture_change).c_str(), fDummy, fDummy, 0, (*Texture_new).c_str(), TRUE); + world.ResetTextures( ( *Texture_change ).c_str(), fDummy, fDummy, 0, ( *Texture_new ).c_str(), TRUE ); Texture_change++; Texture_new++; } } -void DoSwapLights() -{ +void DoSwapLights(){ /* DMap world; - world.LoadAll(); - - for(list::const_iterator loopEnt = world.entityList.begin(); loopEnt != world.entityList.end(); loopEnt++) - { - DEntity* e = (*loopEnt); - DEPair* epLightColour = e->FindEPairByKey("_color"); - if(epLightColour) - { - float r, g, b; - sscanf(epLightColour->value, "%f %f %f", &r, &g, &b); - sprintf(epLightColour->value, "%f %f %f", b, g, r); - DMap::RebuildEntity(e); - } - }*/ + world.LoadAll(); + + for(list::const_iterator loopEnt = world.entityList.begin(); loopEnt != world.entityList.end(); loopEnt++) + { + DEntity* e = (*loopEnt); + DEPair* epLightColour = e->FindEPairByKey("_color"); + if(epLightColour) + { + float r, g, b; + sscanf(epLightColour->value, "%f %f %f", &r, &g, &b); + sprintf(epLightColour->value, "%f %f %f", b, g, r); + DMap::RebuildEntity(e); + } + }*/ int cnt = g_FuncTable.m_pfnGetEntityCount(); - for(int i = 0; i < cnt; i++) + for ( int i = 0; i < cnt; i++ ) { - void* ent = g_FuncTable.m_pfnGetEntityHandle(i); + void* ent = g_FuncTable.m_pfnGetEntityHandle( i ); - for(epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList(ent); epList; epList= epList->next) + for ( epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList( ent ); epList; epList = epList->next ) { - if(!stricmp("_color", epList->key)) - { + if ( !stricmp( "_color", epList->key ) ) { float r, g, b; - sscanf(epList->value, "%f %f %f", &r, &g, &b); - sprintf(epList->value, "%f %f %f", b, g, r); + sscanf( epList->value, "%f %f %f", &r, &g, &b ); + sprintf( epList->value, "%f %f %f", b, g, r ); } } } } -void DoChangeAngles() -{ +void DoChangeAngles(){ int cnt = g_FuncTable.m_pfnGetEntityCount(); - for(int i = 0; i < cnt; i++) + for ( int i = 0; i < cnt; i++ ) { - void* ent = g_FuncTable.m_pfnGetEntityHandle(i); + void* ent = g_FuncTable.m_pfnGetEntityHandle( i ); - for(epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList(ent); epList; epList= epList->next) + for ( epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList( ent ); epList; epList = epList->next ) { - if(!stricmp("angle", epList->key)) - { + if ( !stricmp( "angle", epList->key ) ) { float angle; - sscanf(epList->value, "%f", &angle); + sscanf( epList->value, "%f", &angle ); angle += 180; - while(angle > 360) + while ( angle > 360 ) angle -= 360; - sprintf(epList->value, "%f", angle); + sprintf( epList->value, "%f", angle ); } } } } -void DoSwapSpawns() -{ +void DoSwapSpawns(){ int cnt = g_FuncTable.m_pfnGetEntityCount(); - for(int i = 0; i < cnt; i++) + for ( int i = 0; i < cnt; i++ ) { - void* ent = g_FuncTable.m_pfnGetEntityHandle(i); + void* ent = g_FuncTable.m_pfnGetEntityHandle( i ); - for(epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList(ent); epList; epList= epList->next) + for ( epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList( ent ); epList; epList = epList->next ) { - if(!stricmp("classname", epList->key)) - { - if(!strcmp(epList->value, "team_CTF_redplayer")) - sprintf(epList->value, "team_CTF_blueplayer"); - else if(!strcmp(epList->value, "team_CTF_blueplayer")) - sprintf(epList->value, "team_CTF_redplayer"); - - if(!strcmp(epList->value, "team_CTF_redspawn")) - sprintf(epList->value, "team_CTF_bluespawn"); - else if(!strcmp(epList->value, "team_CTF_bluespawn")) - sprintf(epList->value, "team_CTF_redspawn"); - - if(!strcmp(epList->value, "team_CTF_redflag")) - sprintf(epList->value, "team_CTF_blueflag"); - else if(!strcmp(epList->value, "team_CTF_blueflag")) - sprintf(epList->value, "team_CTF_redflag") + if ( !stricmp( "classname", epList->key ) ) { + if ( !strcmp( epList->value, "team_CTF_redplayer" ) ) { + sprintf( epList->value, "team_CTF_blueplayer" ); + } + else if ( !strcmp( epList->value, "team_CTF_blueplayer" ) ) { + sprintf( epList->value, "team_CTF_redplayer" ); + } + + if ( !strcmp( epList->value, "team_CTF_redspawn" ) ) { + sprintf( epList->value, "team_CTF_bluespawn" ); + } + else if ( !strcmp( epList->value, "team_CTF_bluespawn" ) ) { + sprintf( epList->value, "team_CTF_redspawn" ); + } + + if ( !strcmp( epList->value, "team_CTF_redflag" ) ) { + sprintf( epList->value, "team_CTF_blueflag" ); + } + else if ( !strcmp( epList->value, "team_CTF_blueflag" ) ) { + sprintf( epList->value, "team_CTF_redflag" ) ; - if(!strcmp(epList->value, "team_redobelisk")) - sprintf(epList->value, "team_blueobelisk"); - else if(!strcmp(epList->value, "team_blueobelisk")) - sprintf(epList->value, "team_redobelisk"); + } + if ( !strcmp( epList->value, "team_redobelisk" ) ) { + sprintf( epList->value, "team_blueobelisk" ); + } + else if ( !strcmp( epList->value, "team_blueobelisk" ) ) { + sprintf( epList->value, "team_redobelisk" ); + } } } } } /*void test() -{ - DMap world; - world.LoadAll(); - - for(list::const_iterator ents = world.entityList.begin(); ents != world.entityList.end(); ents++) - { - (*ents)->RemoveFromRadiant(); - } -}*/ + { + DMap world; + world.LoadAll(); + + for(list::const_iterator ents = world.entityList.begin(); ents != world.entityList.end(); ents++) + { + (*ents)->RemoveFromRadiant(); + } + }*/ diff --git a/contrib/bobtoolz/funchandlers.cpp b/contrib/bobtoolz/funchandlers.cpp index c83d2ae0..a665d2a7 100644 --- a/contrib/bobtoolz/funchandlers.cpp +++ b/contrib/bobtoolz/funchandlers.cpp @@ -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,72 +39,73 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "DShape.h" // for autocaulk -list exclusionList; // whole brush exclusion -list exclusionList_Face; // single face exclusion +list exclusionList; // whole brush exclusion +list 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() -{ +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); + 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) -{ +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; + 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); + 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) - { + if ( polygonDlg.DoModal() == IDOK ) { DShape poly; - g_FuncTable.m_pfnDeleteBrushHandle(brush); + g_FuncTable.m_pfnDeleteBrushHandle( brush ); - if(polygonDlg.m_bInverse) - poly.BuildInversePrism(vMin, vMax, polygonDlg.m_nSideCount, polygonDlg.m_bAlignTop); + 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); + 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(); @@ -115,134 +116,135 @@ void PolygonBuilder(vec3_t vMin, vec3_t vMax) } -void IntersectionFinder() -{ - if(intrDlg.DoModal() == IDCANCEL) +void IntersectionFinder(){ + if ( intrDlg.DoModal() == IDCANCEL ) { return; + } - if(intrDlg.m_nBrushOptions == BRUSH_OPT_SELECTED) - { + 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; + 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); + CIntersectInfoDialog* intrInfoDlg = new CIntersectInfoDialog(); + intrInfoDlg->Create( IDD_INTERSECT_INFO_DIALOG ); DEntity world; - switch(intrDlg.m_nBrushOptions) + switch ( intrDlg.m_nBrushOptions ) { case BRUSH_OPT_SELECTED: - { - world.LoadSelectedBrushes(&intrInfoDlg->m_prog1); - break; - } + { + world.LoadSelectedBrushes( &intrInfoDlg->m_prog1 ); + break; + } case BRUSH_OPT_WHOLE_MAP: - { - world.LoadFromEntity(0, &intrInfoDlg->m_prog1); - break; - } + { + world.LoadFromEntity( 0, &intrInfoDlg->m_prog1 ); + break; + } } - world.RemoveNonCheckBrushes(&exclusionList, intrDlg.m_bUseDetail); + world.RemoveNonCheckBrushes( &exclusionList, intrDlg.m_bUseDetail ); BOOL* pbSelectList; - if(intrDlg.m_bDuplicateOnly) + if ( intrDlg.m_bDuplicateOnly ) { pbSelectList = world.BuildDuplicateList(); - else + } + else{ pbSelectList = world.BuildIntersectList(); + } + + world.SelectBrushes( pbSelectList ); - world.SelectBrushes(pbSelectList); - intrInfoDlg->DestroyWindow(); delete[] pbSelectList; } -void StairBuilder(vec3_t vMin, vec3_t vMax) -{ +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; + 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); + 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) - { - + if ( stairDlg.DoModal() == IDOK ) { + // calc brush size vec3_t size; - _VectorSubtract(vMax, vMin, size); + _VectorSubtract( vMax, vMin, size ); - if(((int)size[2] % stairDlg.m_nStairHeight) != 0) - { + 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); + 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); + 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); + 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; + 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); + 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); + SetInitialStairPos( direction, vMin, vMax, stairWidth ); // Build The Steps - for(int i = 0; i < numSteps; i++) + 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); + 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); + MoveBlock( direction, vMin, vMax, stairWidth ); vMax[2] += stairHeight; - if(style == STYLE_BOB) - vMin[2] += stairHeight; // wedge bottom must be raised + if ( style == STYLE_BOB ) { + vMin[2] += stairHeight; // wedge bottom must be raised + } } } } @@ -251,147 +253,143 @@ void StairBuilder(vec3_t vMin, vec3_t vMax) g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } -void DoorBuilder(vec3_t vMin, vec3_t vMax) -{ +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; + 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); + 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); + strcpy( doorDlg.m_fbTextureName.GetBuffer( 256 ), g_FuncTable.m_pfnGetCurrentTexture() ); - 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); + 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() -{ +void FixBrushes(){ 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); - int count = world.FixBrushes(TRUE, &chkDlg->m_prog1); + CBrushCheckDialog* chkDlg = new CBrushCheckDialog(); + chkDlg->Create( IDD_BRUSHCHECKER_DIALOG ); + + int count = world.FixBrushes( TRUE, &chkDlg->m_prog1 ); chkDlg->DestroyWindow(); - Sys_Printf("%i invalid/duplicate planes removed\n", count); + Sys_Printf( "%i invalid/duplicate planes removed\n", count ); } -void AutoCaulk() -{ - if(!el1Loaded) +void AutoCaulk(){ + if ( !el1Loaded ) { autocaulkDlg.m_Warning1 = "WARNING: Brush exclusion list not found\n, ALL BRUSHES WILL BE USED"; + } - if(autocaulkDlg.DoModal() == IDCANCEL) + if ( autocaulkDlg.DoModal() == IDCANCEL ) { return; + } - if(autocaulkDlg.m_nMode == MODE_AC_BUILD_MINI_PRT) - { - BuildMiniPrt(&exclusionList); + if ( autocaulkDlg.m_nMode == MODE_AC_BUILD_MINI_PRT ) { + BuildMiniPrt( &exclusionList ); return; } CAutoCaulkDialog* acDlg = new CAutoCaulkDialog; - acDlg->Create(IDD_AUTOCAULK_DIALOG); + acDlg->Create( IDD_AUTOCAULK_DIALOG ); char filename[1204]; - if(autocaulkDlg.m_nMode == MODE_AC_NORMAL) - { + 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); + 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 + 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(); + { + IEpair* pEp = g_EpairTable.m_pfnIEpairForProjectKeys(); + char *pn = pEp->ValueForKey( "mapspath" ); + pEp->DecRef(); - strcpy( filename, pn ); - strcat( filename, "/ac_prt.prt" ); - } + 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); + 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); + CIntersectInfoDialog* intrInfoDlg = new CIntersectInfoDialog(); + intrInfoDlg->Create( IDD_INTERSECT_INFO_DIALOG ); DEntity world; - world.LoadFromEntity(0, &intrInfoDlg->m_prog1); + world.LoadFromEntity( 0, &intrInfoDlg->m_prog1 ); intrInfoDlg->DestroyWindow(); - if(autocaulkDlg.m_nMode == MODE_AC_NORMAL) - world.RemoveNonCheckBrushes(&exclusionList, FALSE); - else - world.RemoveNonCheckBrushes(&exclusionList, TRUE); + if ( autocaulkDlg.m_nMode == MODE_AC_NORMAL ) { + world.RemoveNonCheckBrushes( &exclusionList, FALSE ); + } + else{ + world.RemoveNonCheckBrushes( &exclusionList, TRUE ); + } - world.ResetChecks(&exclusionList_Face); + world.ResetChecks( &exclusionList_Face ); int caulkedCount = 0; - int killCnt = world.AutoCaulk(&portals, autocaulkDlg.m_bAllowDestruction, &caulkedCount, &acDlg->m_prog2); + 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); + 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() -{ +void ResetTextures(){ texRstDlg.m_TextureName = GetCurrentTexture(); texRstDlg.m_NewTextureName = GetCurrentTexture(); - if(texRstDlg.DoModal() == IDCANCEL) + if ( texRstDlg.DoModal() == IDCANCEL ) { return; + } float fScale[2]; float fShift[2]; @@ -402,102 +400,102 @@ void ResetTextures() fShift[0] = (float)texRstDlg.m_nShiftHorizontal; DEntity world; - world.LoadFromEntity(0, NULL); + 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); + 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() -{ +void PathPlotter(){ int ret = ppDlg.DoModal(); - if(ret == IDCANCEL) + if ( ret == IDCANCEL ) { return; - if(ret == IDNO) - { - if(g_PathView) + } + 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); + 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); + 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)); + world.LoadEPairList( *g_FuncTable.m_pfnGetEntityKeyValList( brush->owner ) ); - DEPair* trigger_ep = world.FindEPairByKey("targetname"); + 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) + 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); + 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 target could not be found.", "Error", MB_OK); } - else - MessageBox(NULL, "trigger_push has no target.", "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); + 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) -{ +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; + 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); + 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)) - { + if ( pit.BuildPit( vMin, vMax ) ) { pit.Commit(); - g_FuncTable.m_pfnDeleteBrushHandle(brush); + g_FuncTable.m_pfnDeleteBrushHandle( brush ); + } + else{ + MessageBox( NULL, "Failed To Make Pit\nTry Making The Brush Bigger", "Error", MB_OK ); } - else - MessageBox(NULL, "Failed To Make Pit\nTry Making The Brush Bigger", "Error", MB_OK); g_FuncTable.m_pfnReleaseSelectedBrushHandles(); } diff --git a/contrib/bobtoolz/funchandlers.h b/contrib/bobtoolz/funchandlers.h index 1e3696cb..70785a08 100644 --- a/contrib/bobtoolz/funchandlers.h +++ b/contrib/bobtoolz/funchandlers.h @@ -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 "DBobView.h" #include "DVisDrawer.h" @@ -28,22 +28,22 @@ extern DTrainDrawer* g_TrainView; extern DTreePlanter* g_TreePlanter; // intersect stuff -#define BRUSH_OPT_WHOLE_MAP 0 -#define BRUSH_OPT_SELECTED 1 +#define BRUSH_OPT_WHOLE_MAP 0 +#define BRUSH_OPT_SELECTED 1 // defines for stairs -#define MOVE_NORTH 0 -#define MOVE_SOUTH 1 -#define MOVE_EAST 2 -#define MOVE_WEST 3 +#define MOVE_NORTH 0 +#define MOVE_SOUTH 1 +#define MOVE_EAST 2 +#define MOVE_WEST 3 -#define STYLE_ORIGINAL 0 -#define STYLE_BOB 1 -#define STYLE_CORNER 2 +#define STYLE_ORIGINAL 0 +#define STYLE_BOB 1 +#define STYLE_CORNER 2 // defines for doors -#define DIRECTION_NS 0 -#define DIRECTION_EW 1 +#define DIRECTION_NS 0 +#define DIRECTION_EW 1 // help void LoadLists(); @@ -52,13 +52,13 @@ void LoadLists(); // djbob void DoIntersect( void ); void DoPolygonsTB( void ); -void DoPolygons(vec3_t vMin, vec3_t vMax); +void DoPolygons( vec3_t vMin, vec3_t vMax ); void DoFixBrushes( void ); void DoResetTextures( void ); -void DoBuildStairs(vec3_t vMin, vec3_t vMax); -void DoBuildDoors(vec3_t vMin, vec3_t vMax); +void DoBuildStairs( vec3_t vMin, vec3_t vMax ); +void DoBuildDoors( vec3_t vMin, vec3_t vMax ); void DoPathPlotter( void ); -void DoPitBuilder(vec3_t vMin, vec3_t vMax); +void DoPitBuilder( vec3_t vMin, vec3_t vMax ); void DoCTFColourChanger( void ); void DoMergePatches( void ); void DoSplitPatch( void ); diff --git a/contrib/bobtoolz/interfaces/IScriptParser.h b/contrib/bobtoolz/interfaces/IScriptParser.h index 5d0ee5ba..88759ceb 100644 --- a/contrib/bobtoolz/interfaces/IScriptParser.h +++ b/contrib/bobtoolz/interfaces/IScriptParser.h @@ -3,21 +3,21 @@ class IScriptParser { public: - virtual ~IScriptParser() {}; +virtual ~IScriptParser() {}; - virtual const char* GetToken ( bool ) = 0; - virtual char* GetBufferCopy ( void ) = 0; - virtual int GetTokenOffset ( void ) = 0; +virtual const char* GetToken( bool ) = 0; +virtual char* GetBufferCopy( void ) = 0; +virtual int GetTokenOffset( void ) = 0; - virtual void SkipBracedSection ( void ) = 0; - virtual void SkipRestOfLine ( void ) = 0; - virtual void UndoGetToken ( void ) = 0; - virtual void ResetParseSession ( void ) = 0; +virtual void SkipBracedSection( void ) = 0; +virtual void SkipRestOfLine( void ) = 0; +virtual void UndoGetToken( void ) = 0; +virtual void ResetParseSession( void ) = 0; - virtual void LoadScript ( const char* ) = 0; - virtual void SetScript ( char* ) = 0; +virtual void LoadScript( const char* ) = 0; +virtual void SetScript( char* ) = 0; - virtual void AddBreakChar( char ) = 0; +virtual void AddBreakChar( char ) = 0; }; #endif diff --git a/contrib/bobtoolz/lists.cpp b/contrib/bobtoolz/lists.cpp index 51744680..67de3931 100644 --- a/contrib/bobtoolz/lists.cpp +++ b/contrib/bobtoolz/lists.cpp @@ -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" @@ -26,60 +26,58 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "lists.h" #include "misc.h" -bool LoadExclusionList(char* filename, list* exclusionList) -{ - FILE* eFile = fopen(filename, "r"); - if(eFile) - { +bool LoadExclusionList( char* filename, list* exclusionList ){ + FILE* eFile = fopen( filename, "r" ); + if ( eFile ) { char buffer[256]; int cnt = 0; - while(!feof(eFile)) + while ( !feof( eFile ) ) { - memset(buffer, 0, 256); - fscanf(eFile, "%s\n", buffer); + memset( buffer, 0, 256 ); + fscanf( eFile, "%s\n", buffer ); - if(strlen(buffer) > 0) - exclusionList->push_back(buffer); - else + if ( strlen( buffer ) > 0 ) { + exclusionList->push_back( buffer ); + } + else{ cnt++; + } } - fclose(eFile); + fclose( eFile ); return TRUE; } - Sys_ERROR("Failed To Load Exclusion List: %s\n", filename); + Sys_ERROR( "Failed To Load Exclusion List: %s\n", filename ); return FALSE; } -bool LoadGList(char* filename, GList** loadlist) -{ - FILE* eFile = fopen(filename, "r"); - if(eFile) - { +bool LoadGList( char* filename, GList** loadlist ){ + FILE* eFile = fopen( filename, "r" ); + if ( eFile ) { char buffer[256]; int cnt = 0; - while(!feof(eFile)) + while ( !feof( eFile ) ) { - memset(buffer, 0, 256); - fscanf(eFile, "%s\n", buffer); - - if(strlen(buffer) > 0) - { - char* buffer2 = new char[strlen(buffer) + 1]; - strcpy(buffer2, buffer); - *loadlist = g_list_append(*loadlist, buffer2); + memset( buffer, 0, 256 ); + fscanf( eFile, "%s\n", buffer ); + + if ( strlen( buffer ) > 0 ) { + char* buffer2 = new char[strlen( buffer ) + 1]; + strcpy( buffer2, buffer ); + *loadlist = g_list_append( *loadlist, buffer2 ); } - else + else{ cnt++; + } } - fclose(eFile); + fclose( eFile ); return TRUE; } - Sys_ERROR("Failed To Load GList: %s\n", filename); + Sys_ERROR( "Failed To Load GList: %s\n", filename ); return FALSE; } diff --git a/contrib/bobtoolz/lists.h b/contrib/bobtoolz/lists.h index 6f9774f6..52697f32 100644 --- a/contrib/bobtoolz/lists.h +++ b/contrib/bobtoolz/lists.h @@ -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 + */ -bool LoadExclusionList(char* filename, list* exclusionList); -bool LoadGList(char* filename, GList** loadlist); +bool LoadExclusionList( char* filename, list* exclusionList ); +bool LoadGList( char* filename, GList** loadlist ); diff --git a/contrib/bobtoolz/misc.cpp b/contrib/bobtoolz/misc.cpp index b1929f38..ec94f71f 100644 --- a/contrib/bobtoolz/misc.cpp +++ b/contrib/bobtoolz/misc.cpp @@ -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" @@ -28,252 +28,244 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #endif /*========================== - Global Vars -==========================*/ + Global Vars + ==========================*/ //HANDLE bsp_process; -char g_CurrentTexture[256] = ""; +char g_CurrentTexture[256] = ""; //============================================================= //============================================================= -void ReadCurrentTexture() -{ +void ReadCurrentTexture(){ const char* textureName = g_FuncTable.m_pfnGetCurrentTexture(); - strcpy(g_CurrentTexture, textureName); + strcpy( g_CurrentTexture, textureName ); } -const char* GetCurrentTexture() -{ +const char* GetCurrentTexture(){ ReadCurrentTexture(); return g_CurrentTexture; } -epair_t* GetNextChainItem(epair_t* lastItem, const char* key, const char* value) -{ - epair_t* nextEPair = g_FuncTable.m_pfnAllocateEpair(key, value); +epair_t* GetNextChainItem( epair_t* lastItem, const char* key, const char* value ){ + epair_t* nextEPair = g_FuncTable.m_pfnAllocateEpair( key, value ); - if(lastItem != NULL) + if ( lastItem != NULL ) { lastItem->next = nextEPair; + } return nextEPair; } -void MoveBlock(int dir, vec3_t min, vec3_t max, float dist) -{ - switch(dir) +void MoveBlock( int dir, vec3_t min, vec3_t max, float dist ){ + switch ( dir ) { - case MOVE_EAST: - { - min[0]+=dist; - max[0]+=dist; - break; - } - case MOVE_WEST: - { - min[0]-=dist; - max[0]-=dist; - break; - } - case MOVE_NORTH: - { - min[1]+=dist; - max[1]+=dist; - break; - } - case MOVE_SOUTH: - { - min[1]-=dist; - max[1]-=dist; - break; - } + case MOVE_EAST: + { + min[0] += dist; + max[0] += dist; + break; + } + case MOVE_WEST: + { + min[0] -= dist; + max[0] -= dist; + break; + } + case MOVE_NORTH: + { + min[1] += dist; + max[1] += dist; + break; + } + case MOVE_SOUTH: + { + min[1] -= dist; + max[1] -= dist; + break; + } } } -void SetInitialStairPos(int dir, vec3_t min, vec3_t max, float width) -{ - switch(dir) +void SetInitialStairPos( int dir, vec3_t min, vec3_t max, float width ){ + switch ( dir ) { - case MOVE_EAST: - { - max[0] = min[0] + width; - break; - } - case MOVE_WEST: - { - min[0] = max[0] - width; - break; - } - case MOVE_NORTH: - { - max[1] = min[1] + width; - break; - } - case MOVE_SOUTH: - { - min[1] = max[1] - width; - break; - } + case MOVE_EAST: + { + max[0] = min[0] + width; + break; + } + case MOVE_WEST: + { + min[0] = max[0] - width; + break; + } + case MOVE_NORTH: + { + max[1] = min[1] + width; + break; + } + case MOVE_SOUTH: + { + min[1] = max[1] - width; + break; + } } } -char* TranslateString (const char *buf) -{ - static char buf2[32768]; - int i, l; - char *out; +char* TranslateString( const char *buf ){ + static char buf2[32768]; + int i, l; + char *out; - l = strlen(buf); + l = strlen( buf ); out = buf2; - for (i=0 ; i%s", buf); + Sys_Printf( "BobToolz::ERROR->%s", buf ); } /*void Sys_Printf (char *text, ...) -{ - va_list argptr; - char buf[32768]; + { + va_list argptr; + char buf[32768]; - va_start (argptr,text); - vsprintf (buf, text,argptr); - va_end (argptr); + va_start (argptr,text); + vsprintf (buf, text,argptr); + va_end (argptr); - g_FuncTable.m_pfnSysMsg ( buf ); -}*/ + g_FuncTable.m_pfnSysMsg ( buf ); + }*/ -char* UnixToDosPath(char* path) -{ +char* UnixToDosPath( char* path ){ #ifndef _WIN32 return path; #else - for(char* p = path; *p; p++) + for ( char* p = path; *p; p++ ) { - if(*p == '/') + if ( *p == '/' ) { *p = '\\'; + } } return path; #endif } -const char* ExtractFilename(const char* path) -{ - const char* p = strrchr(path, '/'); - if(!p) - { - p = strrchr(path, '\\'); +const char* ExtractFilename( const char* path ){ + const char* p = strrchr( path, '/' ); + if ( !p ) { + p = strrchr( path, '\\' ); - if(!p) + if ( !p ) { return path; + } } return ++p; } extern const char* PLUGIN_NAME; /*char* GetGameFilename(char* buffer, const char* filename) -{ - strcpy(buffer, g_FuncTable.m_pfnGetGamePath()); - char* p = strrchr(buffer, '/'); - *++p = '\0'; - strcat(buffer, filename); - buffer = UnixToDosPath(buffer); - return buffer; -}*/ - -#if defined (__linux__) || defined (__APPLE__) + { + strcpy(buffer, g_FuncTable.m_pfnGetGamePath()); + char* p = strrchr(buffer, '/'); + *++p = '\0'; + strcat(buffer, filename); + buffer = UnixToDosPath(buffer); + return buffer; + }*/ + +#if defined ( __linux__ ) || defined ( __APPLE__ ) // the bCreateConsole parameter is ignored on linux .. -bool Q_Exec( const char *pCmd, bool bCreateConsole ) -{ - switch (fork()) - { +bool Q_Exec( const char *pCmd, bool bCreateConsole ){ + switch ( fork() ) + { case -1: - return false; + return false; // Error ("CreateProcess failed"); - break; - case 0: + break; + case 0: #ifdef _DEBUG - printf("Running system...\n"); - printf("Command: %s\n", pCmd); + printf( "Running system...\n" ); + printf( "Command: %s\n", pCmd ); #endif - // NOTE: we could use that to detect when a step finishes. But then it - // would not work for remote compiling stuff. + // NOTE: we could use that to detect when a step finishes. But then it + // would not work for remote compiling stuff. // execlp (pCmd, pCmd, NULL); - system( pCmd ); - printf ("system() returned"); - _exit (0); - break; - } - return true; + system( pCmd ); + printf( "system() returned" ); + _exit( 0 ); + break; + } + return true; } #endif #ifdef _WIN32 -bool Q_Exec( const char *pCmd, bool bCreateConsole ) -{ +bool Q_Exec( const char *pCmd, bool bCreateConsole ){ // G_DeWan: Don't know if this is needed for linux version PROCESS_INFORMATION pi; STARTUPINFO si = {0}; // Initialize all members to zero - si.cb = sizeof(STARTUPINFO); // Set byte count - DWORD dwCreationFlags; + si.cb = sizeof( STARTUPINFO ); // Set byte count + DWORD dwCreationFlags; - if (bCreateConsole) - dwCreationFlags = CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS; - else - dwCreationFlags = DETACHED_PROCESS | NORMAL_PRIORITY_CLASS; + if ( bCreateConsole ) { + dwCreationFlags = CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS; + } + else{ + dwCreationFlags = DETACHED_PROCESS | NORMAL_PRIORITY_CLASS; + } - for(; *pCmd == ' '; pCmd++); + for (; *pCmd == ' '; pCmd++ ) ; - if(!CreateProcess(NULL, (char *)pCmd, NULL, NULL, FALSE, dwCreationFlags, NULL, NULL, &si, &pi)) + if ( !CreateProcess( NULL, (char *)pCmd, NULL, NULL, FALSE, dwCreationFlags, NULL, NULL, &si, &pi ) ) { return false; + } - return true; + return true; } #endif -void StartBSP() -{ +void StartBSP(){ char exename[256]; - GetFilename(exename, "q3map"); - UnixToDosPath(exename); // do we want this done in linux version? + GetFilename( exename, "q3map" ); + UnixToDosPath( exename ); // do we want this done in linux version? char mapname[256]; - const char *pn = g_FuncTable.m_pfnReadProjectKey("mapspath"); + const char *pn = g_FuncTable.m_pfnReadProjectKey( "mapspath" ); strcpy( mapname, pn ); strcat( mapname, "/ac_prt.map" ); - UnixToDosPath(mapname); + UnixToDosPath( mapname ); char command[1024]; - sprintf(command, "%s -nowater -fulldetail %s", exename, mapname); + sprintf( command, "%s -nowater -fulldetail %s", exename, mapname ); Q_Exec( command, TRUE ); } -void BuildMiniPrt(list* exclusionList) -{ +void BuildMiniPrt( list* exclusionList ){ // yes, we could just use -fulldetail option, but, as SPOG said // it'd be faster without all the hint, donotenter etc textures and // doors, etc @@ -281,40 +273,38 @@ void BuildMiniPrt(list* exclusionList) DEntity world; char buffer[128]; - const char *pn = g_FuncTable.m_pfnReadProjectKey("mapspath"); + const char *pn = g_FuncTable.m_pfnReadProjectKey( "mapspath" ); strcpy( buffer, pn ); strcat( buffer, "/ac_prt.map" ); - FILE* pFile = fopen(buffer, "w"); + FILE* pFile = fopen( buffer, "w" ); // ahem, thx rr2 - if(!pFile) + if ( !pFile ) { return; + } int count = g_FuncTable.m_pfnGetEntityCount(); - for(int i = 0; i < count; i++) + for ( int i = 0; i < count; i++ ) { - entity_t* ent = (entity_t*)g_FuncTable.m_pfnGetEntityHandle(i); + entity_t* ent = (entity_t*)g_FuncTable.m_pfnGetEntityHandle( i ); - epair_t* epl = *g_EntityTable.m_pfnGetEntityKeyValList(ent); + epair_t* epl = *g_EntityTable.m_pfnGetEntityKeyValList( ent ); epair_t* ep = epl; - while(ep) + while ( ep ) { - if(!strcmp(ep->key, "classname")) - { - if(!strcmp(ep->value, "worldspawn")) - { - world.LoadFromEntity(i, FALSE); - world.RemoveNonCheckBrushes(exclusionList, TRUE); - world.SaveToFile(pFile); + if ( !strcmp( ep->key, "classname" ) ) { + if ( !strcmp( ep->value, "worldspawn" ) ) { + world.LoadFromEntity( i, FALSE ); + world.RemoveNonCheckBrushes( exclusionList, TRUE ); + world.SaveToFile( pFile ); } - else if(strstr(ep->value, "info_")) - { + else if ( strstr( ep->value, "info_" ) ) { world.ClearBrushes(); world.ClearEPairs(); - world.LoadEPairList(epl); - world.SaveToFile(pFile); + world.LoadEPairList( epl ); + world.SaveToFile( pFile ); } break; } @@ -323,29 +313,27 @@ void BuildMiniPrt(list* exclusionList) } } - fclose(pFile); + fclose( pFile ); StartBSP(); } -entity_s* FindEntityFromTargetname(const char* targetname, int* entNum) -{ +entity_s* FindEntityFromTargetname( const char* targetname, int* entNum ){ DEntity world; int count = g_FuncTable.m_pfnGetEntityCount(); - for(int i = 0; i < count; i++) + for ( int i = 0; i < count; i++ ) { world.ClearEPairs(); - entity_s* ent = (entity_s*)g_FuncTable.m_pfnGetEntityHandle(i); + entity_s* ent = (entity_s*)g_FuncTable.m_pfnGetEntityHandle( i ); - world.LoadEPairList(*g_EntityTable.m_pfnGetEntityKeyValList(ent)); + world.LoadEPairList( *g_EntityTable.m_pfnGetEntityKeyValList( ent ) ); - DEPair* tn = world.FindEPairByKey("targetname"); - if(tn) - { - if(!stricmp(tn->value, targetname)) { - if(entNum) { + DEPair* tn = world.FindEPairByKey( "targetname" ); + if ( tn ) { + if ( !stricmp( tn->value, targetname ) ) { + if ( entNum ) { *entNum = i; } return ent; @@ -355,8 +343,7 @@ entity_s* FindEntityFromTargetname(const char* targetname, int* entNum) return NULL; } -void FillDefaultTexture(_QERFaceData* faceData, vec3_t va, vec3_t vb, vec3_t vc, const char* texture) -{ +void FillDefaultTexture( _QERFaceData* faceData, vec3_t va, vec3_t vb, vec3_t vc, const char* texture ){ faceData->m_bBPrimit = FALSE; faceData->m_fRotate = 0; faceData->m_fScale[0] = 0.5; @@ -366,59 +353,59 @@ void FillDefaultTexture(_QERFaceData* faceData, vec3_t va, vec3_t vb, vec3_t vc, faceData->m_nContents = 0; faceData->m_nFlags = 0; faceData->m_nValue = 0; - if(*texture) - strcpy(faceData->m_TextureName, texture); - else - strcpy(faceData->m_TextureName, "textures/common/caulk"); - VectorCopy(va, faceData->m_v1); - VectorCopy(vb, faceData->m_v2); - VectorCopy(vc, faceData->m_v3); + if ( *texture ) { + strcpy( faceData->m_TextureName, texture ); + } + else{ + strcpy( faceData->m_TextureName, "textures/common/caulk" ); + } + VectorCopy( va, faceData->m_v1 ); + VectorCopy( vb, faceData->m_v2 ); + VectorCopy( vc, faceData->m_v3 ); } -float Determinant3x3(float a1, float a2, float a3, - float b1, float b2, float b3, - float c1, float c2, float c3) -{ - return a1*(b2*c3-b3*c2) - a2*(b1*c3-b3*c1) + a3*(b1*c2-b2*c1); +float Determinant3x3( float a1, float a2, float a3, + float b1, float b2, float b3, + float c1, float c2, float c3 ){ + return a1 * ( b2 * c3 - b3 * c2 ) - a2 * ( b1 * c3 - b3 * c1 ) + a3 * ( b1 * c2 - b2 * c1 ); } -bool GetEntityCentre(const char* entity, vec3_t centre) -{ - entity_s* ent = FindEntityFromTargetname(entity, NULL); - if(!ent) +bool GetEntityCentre( const char* entity, vec3_t centre ){ + entity_s* ent = FindEntityFromTargetname( entity, NULL ); + if ( !ent ) { return FALSE; + } - int cnt = g_FuncTable.m_pfnAllocateEntityBrushHandles(ent); - if(cnt == 0) - { + int cnt = g_FuncTable.m_pfnAllocateEntityBrushHandles( ent ); + if ( cnt == 0 ) { g_FuncTable.m_pfnReleaseEntityBrushHandles(); return FALSE; } - brush_t* brush = (brush_t*)g_FuncTable.m_pfnGetEntityBrushHandle(0); + brush_t* brush = (brush_t*)g_FuncTable.m_pfnGetEntityBrushHandle( 0 ); DBrush cBrush; - cBrush.LoadFromBrush_t(brush, FALSE); + cBrush.LoadFromBrush_t( brush, FALSE ); vec3_t min, max; - cBrush.GetBounds(min, max); + cBrush.GetBounds( min, max ); - VectorAdd(min, max, centre); - VectorScale(centre, 0.5f, centre); + VectorAdd( min, max, centre ); + VectorScale( centre, 0.5f, centre ); g_FuncTable.m_pfnReleaseEntityBrushHandles(); return TRUE; } -vec_t Min(vec_t a, vec_t b) -{ - if(a < b) +vec_t Min( vec_t a, vec_t b ){ + if ( a < b ) { return a; + } return b; } void MakeNormal( vec_t* va, vec_t* vb, vec_t* vc, vec_t* out ) { vec3_t v1, v2; - VectorSubtract(va, vb, v1); - VectorSubtract(vc, vb, v2); - CrossProduct(v1, v2, out); + VectorSubtract( va, vb, v1 ); + VectorSubtract( vc, vb, v2 ); + CrossProduct( v1, v2, out ); } diff --git a/contrib/bobtoolz/misc.h b/contrib/bobtoolz/misc.h index fb1fe8b9..7774a3f2 100644 --- a/contrib/bobtoolz/misc.h +++ b/contrib/bobtoolz/misc.h @@ -1,48 +1,48 @@ /* -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 + */ -vec_t Min(vec_t a, vec_t b); +vec_t Min( vec_t a, vec_t b ); -epair_t* GetNextChainItem(epair_t* lastItem, const char* key, const char* value); +epair_t* GetNextChainItem( epair_t* lastItem, const char* key, const char* value ); // reads current texture into global, returns pointer to it const char* GetCurrentTexture(); -void FillDefaultTexture(_QERFaceData* faceData, vec3_t va, vec3_t vb, vec3_t vc, const char* texture); +void FillDefaultTexture( _QERFaceData* faceData, vec3_t va, vec3_t vb, vec3_t vc, const char* texture ); -void Sys_ERROR (const char* text, ...); +void Sys_ERROR( const char* text, ... ); -void BuildMiniPrt(list* exclusionList); +void BuildMiniPrt( list* exclusionList ); -void MoveBlock(int dir, vec3_t min, vec3_t max, float dist); -void SetInitialStairPos(int dir, vec3_t min, vec3_t max, float width); +void MoveBlock( int dir, vec3_t min, vec3_t max, float dist ); +void SetInitialStairPos( int dir, vec3_t min, vec3_t max, float width ); -entity_s* FindEntityFromTargetname(const char* targetname, int* entNum); +entity_s* FindEntityFromTargetname( const char* targetname, int* entNum ); -char* UnixToDosPath(char* path); +char* UnixToDosPath( char* path ); -char* GetFilename(char* buffer, const char* filename); -char* GetGameFilename(char* buffer, const char* filename); +char* GetFilename( char* buffer, const char* filename ); +char* GetGameFilename( char* buffer, const char* filename ); -float Determinant3x3(float a1, float a2, float a3, - float b1, float b2, float b3, - float c1, float c2, float c3); +float Determinant3x3( float a1, float a2, float a3, + float b1, float b2, float b3, + float c1, float c2, float c3 ); -bool GetEntityCentre(const char* entity, vec3_t centre); +bool GetEntityCentre( const char* entity, vec3_t centre ); void MakeNormal( vec_t* va, vec_t* vb, vec_t* vc, vec_t* out ); diff --git a/contrib/bobtoolz/resource-gtk.h b/contrib/bobtoolz/resource-gtk.h index 9297877f..93528395 100644 --- a/contrib/bobtoolz/resource-gtk.h +++ b/contrib/bobtoolz/resource-gtk.h @@ -4,7 +4,7 @@ // // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 diff --git a/contrib/bobtoolz/resource.h b/contrib/bobtoolz/resource.h index 2c7f97ed..7689553f 100644 --- a/contrib/bobtoolz/resource.h +++ b/contrib/bobtoolz/resource.h @@ -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 + */ //{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. @@ -104,7 +104,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define IDC_DUPLICATEONLY_CHECK 1050 // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 diff --git a/contrib/bobtoolz/shapes.cpp b/contrib/bobtoolz/shapes.cpp index 035179a7..490c1138 100644 --- a/contrib/bobtoolz/shapes.cpp +++ b/contrib/bobtoolz/shapes.cpp @@ -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" @@ -30,126 +30,120 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //#include "dialogs-gtk.h" /************************ - Cube Diagram + Cube Diagram ************************/ /* - 7 ----- 5 - /| /| - / | / | - / | / | - 4 ----- 6 | - | 2|_|___|8 - | / | / - | / | / ----> WEST, definitely - |/ | / - 1|_____|/3 + 7 ----- 5 + /| /| + / | / | + / | / | + 4 ----- 6 | + | 2|_|___|8 + | / | / + | / | / ----> WEST, definitely + ||/ | / + 1|_____|/3 -*/ + */ /************************ - Global Variables + Global Variables ************************/ -vec3_t g_Origin = {0.0f, 0.0f, 0.0f}; +vec3_t g_Origin = {0.0f, 0.0f, 0.0f}; extern bool bFacesAll[]; /************************ - Helper Functions + Helper Functions ************************/ -float Deg2Rad(float angle) -{ - return (float)(angle*Q_PI/180); +float Deg2Rad( float angle ){ + return (float)( angle * Q_PI / 180 ); } -void AddFaceWithTexture(brush_t* brush, vec3_t va, vec3_t vb, vec3_t vc, const char* texture, bool detail) -{ +void AddFaceWithTexture( brush_t* brush, vec3_t va, vec3_t vb, vec3_t vc, const char* texture, bool detail ){ _QERFaceData faceData; - FillDefaultTexture(&faceData, va, vb, vc, texture); - if(detail) + FillDefaultTexture( &faceData, va, vb, vc, texture ); + if ( detail ) { faceData.m_nContents |= FACE_DETAIL; - - g_FuncTable.m_pfnAddFaceData(brush, &faceData); + } + + g_FuncTable.m_pfnAddFaceData( brush, &faceData ); } -void AddFaceWithTextureScaled(brush_t* brush, vec3_t va, vec3_t vb, vec3_t vc, - const char* texture, bool bVertScale, bool bHorScale, - float minX, float minY, float maxX, float maxY) -{ - g_ShadersTable.m_pfnShader_ForName(texture); // need to call frist to load? +void AddFaceWithTextureScaled( brush_t* brush, vec3_t va, vec3_t vb, vec3_t vc, + const char* texture, bool bVertScale, bool bHorScale, + float minX, float minY, float maxX, float maxY ){ + g_ShadersTable.m_pfnShader_ForName( texture ); // need to call frist to load? qtexture_t* pqtTexInfo; - // TTimo: there used to be a call to pfnHasShader here - // this was not necessary. In Radiant everything is shader. - // If a texture doesn't have a shader script, a default shader object is used. - // The IShader object was leaking also + // TTimo: there used to be a call to pfnHasShader here + // this was not necessary. In Radiant everything is shader. + // If a texture doesn't have a shader script, a default shader object is used. + // The IShader object was leaking also // collect texture info: sizes, etc - IShader* i = g_ShadersTable.m_pfnShader_ForName(texture); - pqtTexInfo = i->getTexture(); // shader width/height doesn't come out properly + IShader* i = g_ShadersTable.m_pfnShader_ForName( texture ); + pqtTexInfo = i->getTexture(); // shader width/height doesn't come out properly - if(pqtTexInfo) - { + if ( pqtTexInfo ) { float scale[2] = {0.5f, 0.5f}; float shift[2] = {0, 0}; - if(bHorScale) - { + if ( bHorScale ) { int texWidth = pqtTexInfo->width; float width = maxX - minX; - scale[0] = width/texWidth; - shift[0] = -(float)((int)maxX%(int)width)/scale[0]; + scale[0] = width / texWidth; + shift[0] = -(float)( (int)maxX % (int)width ) / scale[0]; } - if(bVertScale) - { + if ( bVertScale ) { int texHeight = pqtTexInfo->height; float height = maxY - minY; - scale[1] = height/texHeight; - shift[1] = (float)((int)minY%(int)height)/scale[1]; + scale[1] = height / texHeight; + shift[1] = (float)( (int)minY % (int)height ) / scale[1]; } _QERFaceData addFace; - FillDefaultTexture(&addFace, va, vb, vc, texture); + FillDefaultTexture( &addFace, va, vb, vc, texture ); addFace.m_fScale[0] = scale[0]; addFace.m_fScale[1] = scale[1]; addFace.m_fShift[0] = shift[0]; addFace.m_fShift[1] = shift[1]; - g_FuncTable.m_pfnAddFaceData(brush, &addFace); + g_FuncTable.m_pfnAddFaceData( brush, &addFace ); } else { // shouldn't even get here, as default missing texture should be returned if // texture doesn't exist, but just in case - AddFaceWithTexture(brush, va, vb, vc, texture, FALSE); - Sys_ERROR("BobToolz::Invalid Texture Name-> %s", texture); + AddFaceWithTexture( brush, va, vb, vc, texture, FALSE ); + Sys_ERROR( "BobToolz::Invalid Texture Name-> %s", texture ); } - // the IShader is not kept referenced, DecRef it - i->DecRef(); + // the IShader is not kept referenced, DecRef it + i->DecRef(); } /************************ - --Main Functions-- + --Main Functions-- ************************/ -void Build_Wedge(int dir, vec3_t min, vec3_t max, bool bUp) -{ +void Build_Wedge( int dir, vec3_t min, vec3_t max, bool bUp ){ brush_t* newBrush = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); vec3_t v1, v2, v3, v5, v6, v7, v8; - VectorCopy(min, v1); - VectorCopy(min, v2); - VectorCopy(min, v3); - VectorCopy(max, v5); - VectorCopy(max, v6); - VectorCopy(max, v7); - VectorCopy(max, v8); + VectorCopy( min, v1 ); + VectorCopy( min, v2 ); + VectorCopy( min, v3 ); + VectorCopy( max, v5 ); + VectorCopy( max, v6 ); + VectorCopy( max, v7 ); + VectorCopy( max, v8 ); v2[0] = max[0]; v3[1] = max[1]; @@ -158,85 +152,99 @@ void Build_Wedge(int dir, vec3_t min, vec3_t max, bool bUp) v7[1] = min[1]; v8[2] = min[2]; - if(bUp) - { + if ( bUp ) { - if(dir != MOVE_EAST) - AddFaceWithTexture(newBrush, v1, v3, v6, "textures/common/caulk", FALSE); + if ( dir != MOVE_EAST ) { + AddFaceWithTexture( newBrush, v1, v3, v6, "textures/common/caulk", FALSE ); + } - if(dir != MOVE_WEST) - AddFaceWithTexture(newBrush, v7, v5, v8, "textures/common/caulk", FALSE); + if ( dir != MOVE_WEST ) { + AddFaceWithTexture( newBrush, v7, v5, v8, "textures/common/caulk", FALSE ); + } - if(dir != MOVE_NORTH) - AddFaceWithTexture(newBrush, v1, v7, v2, "textures/common/caulk", FALSE); + if ( dir != MOVE_NORTH ) { + AddFaceWithTexture( newBrush, v1, v7, v2, "textures/common/caulk", FALSE ); + } - if(dir != MOVE_SOUTH) - AddFaceWithTexture(newBrush, v3, v8, v6, "textures/common/caulk", FALSE); + if ( dir != MOVE_SOUTH ) { + AddFaceWithTexture( newBrush, v3, v8, v6, "textures/common/caulk", FALSE ); + } - AddFaceWithTexture(newBrush, v1, v2, v3, "textures/common/caulk", FALSE); + AddFaceWithTexture( newBrush, v1, v2, v3, "textures/common/caulk", FALSE ); - if(dir == MOVE_EAST) - AddFaceWithTexture(newBrush, v1, v3, v5, "textures/common/caulk", FALSE); + if ( dir == MOVE_EAST ) { + AddFaceWithTexture( newBrush, v1, v3, v5, "textures/common/caulk", FALSE ); + } - if(dir == MOVE_WEST) - AddFaceWithTexture(newBrush, v2, v6, v8, "textures/common/caulk", FALSE); + if ( dir == MOVE_WEST ) { + AddFaceWithTexture( newBrush, v2, v6, v8, "textures/common/caulk", FALSE ); + } - if(dir == MOVE_NORTH) - AddFaceWithTexture(newBrush, v1, v6, v5, "textures/common/caulk", FALSE); + if ( dir == MOVE_NORTH ) { + AddFaceWithTexture( newBrush, v1, v6, v5, "textures/common/caulk", FALSE ); + } - if(dir == MOVE_SOUTH) - AddFaceWithTexture(newBrush, v7, v3, v8, "textures/common/caulk", FALSE); + if ( dir == MOVE_SOUTH ) { + AddFaceWithTexture( newBrush, v7, v3, v8, "textures/common/caulk", FALSE ); + } } else { - if(dir != MOVE_WEST) - AddFaceWithTexture(newBrush, v7, v5, v8, "textures/common/caulk", FALSE); + if ( dir != MOVE_WEST ) { + AddFaceWithTexture( newBrush, v7, v5, v8, "textures/common/caulk", FALSE ); + } - if(dir != MOVE_EAST) - AddFaceWithTexture(newBrush, v1, v3, v6, "textures/common/caulk", FALSE); + if ( dir != MOVE_EAST ) { + AddFaceWithTexture( newBrush, v1, v3, v6, "textures/common/caulk", FALSE ); + } - if(dir != MOVE_NORTH) - AddFaceWithTexture(newBrush, v3, v8, v6, "textures/common/caulk", FALSE); + if ( dir != MOVE_NORTH ) { + AddFaceWithTexture( newBrush, v3, v8, v6, "textures/common/caulk", FALSE ); + } - if(dir != MOVE_SOUTH) - AddFaceWithTexture(newBrush, v1, v7, v2, "textures/common/caulk", FALSE); + if ( dir != MOVE_SOUTH ) { + AddFaceWithTexture( newBrush, v1, v7, v2, "textures/common/caulk", FALSE ); + } - - AddFaceWithTexture(newBrush, v6, v5, v7, "textures/common/caulk", FALSE); - if(dir == MOVE_WEST) - AddFaceWithTexture(newBrush, v1, v5, v3, "textures/common/caulk", FALSE); + AddFaceWithTexture( newBrush, v6, v5, v7, "textures/common/caulk", FALSE ); - if(dir == MOVE_EAST) - AddFaceWithTexture(newBrush, v2, v8, v6, "textures/common/caulk", FALSE); + if ( dir == MOVE_WEST ) { + AddFaceWithTexture( newBrush, v1, v5, v3, "textures/common/caulk", FALSE ); + } - if(dir == MOVE_NORTH) - AddFaceWithTexture(newBrush, v1, v5, v6, "textures/common/caulk", FALSE); + if ( dir == MOVE_EAST ) { + AddFaceWithTexture( newBrush, v2, v8, v6, "textures/common/caulk", FALSE ); + } + + if ( dir == MOVE_NORTH ) { + AddFaceWithTexture( newBrush, v1, v5, v6, "textures/common/caulk", FALSE ); + } - if(dir == MOVE_SOUTH) - AddFaceWithTexture(newBrush, v7, v8, v3, "textures/common/caulk", FALSE); + if ( dir == MOVE_SOUTH ) { + AddFaceWithTexture( newBrush, v7, v8, v3, "textures/common/caulk", FALSE ); + } } - g_FuncTable.m_pfnCommitBrushHandle(newBrush); + g_FuncTable.m_pfnCommitBrushHandle( newBrush ); } //----------------------------------------------------------------------------------- //----------------------------------------------------------------------------------- -void Build_StairStep_Wedge(int dir, vec3_t min, vec3_t max, const char* mainTexture, const char* riserTexture, bool detail) -{ +void Build_StairStep_Wedge( int dir, vec3_t min, vec3_t max, const char* mainTexture, const char* riserTexture, bool detail ){ brush_t* newBrush = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); //----- Build Outer Bounds --------- vec3_t v1, v2, v3, v5, v6, v7, v8; - VectorCopy(min, v1); - VectorCopy(min, v2); - VectorCopy(min, v3); - VectorCopy(max, v5); - VectorCopy(max, v6); - VectorCopy(max, v7); - VectorCopy(max, v8); + VectorCopy( min, v1 ); + VectorCopy( min, v2 ); + VectorCopy( min, v3 ); + VectorCopy( max, v5 ); + VectorCopy( max, v6 ); + VectorCopy( max, v7 ); + VectorCopy( max, v8 ); v2[0] = max[0]; v3[1] = max[1]; @@ -249,73 +257,80 @@ void Build_StairStep_Wedge(int dir, vec3_t min, vec3_t max, const char* mainText //---------------------------------- - AddFaceWithTexture(newBrush, v6, v5, v7, mainTexture, detail); + AddFaceWithTexture( newBrush, v6, v5, v7, mainTexture, detail ); - if(dir != MOVE_EAST) - { - if(dir == MOVE_WEST) - AddFaceWithTexture(newBrush, v5, v2, v7, riserTexture, detail); - else - AddFaceWithTexture(newBrush, v5, v2, v7, "textures/common/caulk", detail); + if ( dir != MOVE_EAST ) { + if ( dir == MOVE_WEST ) { + AddFaceWithTexture( newBrush, v5, v2, v7, riserTexture, detail ); + } + else{ + AddFaceWithTexture( newBrush, v5, v2, v7, "textures/common/caulk", detail ); + } } - if(dir != MOVE_WEST) - { - if(dir == MOVE_EAST) - AddFaceWithTexture(newBrush, v1, v3, v6, riserTexture, detail); - else - AddFaceWithTexture(newBrush, v1, v3, v6, "textures/common/caulk", detail); + if ( dir != MOVE_WEST ) { + if ( dir == MOVE_EAST ) { + AddFaceWithTexture( newBrush, v1, v3, v6, riserTexture, detail ); + } + else{ + AddFaceWithTexture( newBrush, v1, v3, v6, "textures/common/caulk", detail ); + } } - if(dir != MOVE_NORTH) - { - if(dir == MOVE_SOUTH) - AddFaceWithTexture(newBrush, v3, v5, v6, riserTexture, detail); - else - AddFaceWithTexture(newBrush, v3, v5, v6, "textures/common/caulk", detail); + if ( dir != MOVE_NORTH ) { + if ( dir == MOVE_SOUTH ) { + AddFaceWithTexture( newBrush, v3, v5, v6, riserTexture, detail ); + } + else{ + AddFaceWithTexture( newBrush, v3, v5, v6, "textures/common/caulk", detail ); + } } - if(dir != MOVE_SOUTH) - { - if(dir == MOVE_NORTH) - AddFaceWithTexture(newBrush, v1, v7, v2, riserTexture, detail); - else - AddFaceWithTexture(newBrush, v1, v7, v2, "textures/common/caulk", detail); + if ( dir != MOVE_SOUTH ) { + if ( dir == MOVE_NORTH ) { + AddFaceWithTexture( newBrush, v1, v7, v2, riserTexture, detail ); + } + else{ + AddFaceWithTexture( newBrush, v1, v7, v2, "textures/common/caulk", detail ); + } } - - if(dir == MOVE_EAST) - AddFaceWithTexture(newBrush, v1, v5, v3, "textures/common/caulk", detail); - if(dir == MOVE_WEST) - AddFaceWithTexture(newBrush, v2, v8, v6, "textures/common/caulk", detail); + if ( dir == MOVE_EAST ) { + AddFaceWithTexture( newBrush, v1, v5, v3, "textures/common/caulk", detail ); + } - if(dir == MOVE_NORTH) - AddFaceWithTexture(newBrush, v1, v5, v6, "textures/common/caulk", detail); + if ( dir == MOVE_WEST ) { + AddFaceWithTexture( newBrush, v2, v8, v6, "textures/common/caulk", detail ); + } - if(dir == MOVE_SOUTH) - AddFaceWithTexture(newBrush, v7, v8, v3, "textures/common/caulk", detail); + if ( dir == MOVE_NORTH ) { + AddFaceWithTexture( newBrush, v1, v5, v6, "textures/common/caulk", detail ); + } + + if ( dir == MOVE_SOUTH ) { + AddFaceWithTexture( newBrush, v7, v8, v3, "textures/common/caulk", detail ); + } - g_FuncTable.m_pfnCommitBrushHandle(newBrush); + g_FuncTable.m_pfnCommitBrushHandle( newBrush ); } //----------------------------------------------------------------------------------- //----------------------------------------------------------------------------------- // internal use only, to get a box without finishing construction -brush_t* Build_Get_BoundingCube_Selective(vec3_t min, vec3_t max, char* texture, bool* useFaces) -{ +brush_t* Build_Get_BoundingCube_Selective( vec3_t min, vec3_t max, char* texture, bool* useFaces ){ brush_t* newBrush = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); //----- Build Outer Bounds --------- vec3_t v1, v2, v3, v5, v6, v7; - VectorCopy(min, v1); - VectorCopy(min, v2); - VectorCopy(min, v3); - VectorCopy(max, v5); - VectorCopy(max, v6); - VectorCopy(max, v7); + VectorCopy( min, v1 ); + VectorCopy( min, v2 ); + VectorCopy( min, v3 ); + VectorCopy( max, v5 ); + VectorCopy( max, v6 ); + VectorCopy( max, v7 ); v2[0] = max[0]; v3[1] = max[1]; @@ -327,46 +342,50 @@ brush_t* Build_Get_BoundingCube_Selective(vec3_t min, vec3_t max, char* texture, //----- Add Six Cube Faces --------- - if(useFaces[0]) - AddFaceWithTexture(newBrush, v1, v2, v3, texture, FALSE); - if(useFaces[1]) - AddFaceWithTexture(newBrush, v1, v3, v6, texture, FALSE); - if(useFaces[2]) - AddFaceWithTexture(newBrush, v1, v7, v2, texture, FALSE); + if ( useFaces[0] ) { + AddFaceWithTexture( newBrush, v1, v2, v3, texture, FALSE ); + } + if ( useFaces[1] ) { + AddFaceWithTexture( newBrush, v1, v3, v6, texture, FALSE ); + } + if ( useFaces[2] ) { + AddFaceWithTexture( newBrush, v1, v7, v2, texture, FALSE ); + } - if(useFaces[3]) - AddFaceWithTexture(newBrush, v5, v6, v3, texture, FALSE); - if(useFaces[4]) - AddFaceWithTexture(newBrush, v5, v2, v7, texture, FALSE); - if(useFaces[5]) - AddFaceWithTexture(newBrush, v5, v7, v6, texture, FALSE); + if ( useFaces[3] ) { + AddFaceWithTexture( newBrush, v5, v6, v3, texture, FALSE ); + } + if ( useFaces[4] ) { + AddFaceWithTexture( newBrush, v5, v2, v7, texture, FALSE ); + } + if ( useFaces[5] ) { + AddFaceWithTexture( newBrush, v5, v7, v6, texture, FALSE ); + } //---------------------------------- return newBrush; } -brush_t* Build_Get_BoundingCube(vec3_t min, vec3_t max, char* texture) -{ - return Build_Get_BoundingCube_Selective(min, max, texture, bFacesAll); +brush_t* Build_Get_BoundingCube( vec3_t min, vec3_t max, char* texture ){ + return Build_Get_BoundingCube_Selective( min, max, texture, bFacesAll ); } //----------------------------------------------------------------------------------- //----------------------------------------------------------------------------------- -void Build_StairStep(vec3_t min, vec3_t max, const char* mainTexture, const char* riserTexture, int direction) -{ +void Build_StairStep( vec3_t min, vec3_t max, const char* mainTexture, const char* riserTexture, int direction ){ brush_t* newBrush = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); //----- Build Outer Bounds --------- vec3_t v1, v2, v3, v5, v6, v7; - VectorCopy(min, v1); - VectorCopy(min, v2); - VectorCopy(min, v3); - VectorCopy(max, v5); - VectorCopy(max, v6); - VectorCopy(max, v7); + VectorCopy( min, v1 ); + VectorCopy( min, v2 ); + VectorCopy( min, v3 ); + VectorCopy( max, v5 ); + VectorCopy( max, v6 ); + VectorCopy( max, v7 ); v2[0] = max[0]; v3[1] = max[1]; @@ -376,64 +395,73 @@ void Build_StairStep(vec3_t min, vec3_t max, const char* mainTexture, const char //---------------------------------- - AddFaceWithTexture(newBrush, v6, v5, v7, mainTexture, FALSE); + AddFaceWithTexture( newBrush, v6, v5, v7, mainTexture, FALSE ); // top gets current texture - if(direction == MOVE_EAST) - AddFaceWithTexture(newBrush, v1, v3, v6, riserTexture, FALSE); - else - AddFaceWithTexture(newBrush, v1, v3, v6, "textures/common/caulk", FALSE); + if ( direction == MOVE_EAST ) { + AddFaceWithTexture( newBrush, v1, v3, v6, riserTexture, FALSE ); + } + else{ + AddFaceWithTexture( newBrush, v1, v3, v6, "textures/common/caulk", FALSE ); + } // west facing side, etc... - - if(direction == MOVE_NORTH) - AddFaceWithTexture(newBrush, v1, v7, v2, riserTexture, FALSE); - else - AddFaceWithTexture(newBrush, v1, v7, v2, "textures/common/caulk", FALSE); - if(direction == MOVE_SOUTH) - AddFaceWithTexture(newBrush, v3, v5, v6, riserTexture, FALSE); - else - AddFaceWithTexture(newBrush, v3, v5, v6, "textures/common/caulk", FALSE); - - if(direction == MOVE_WEST) - AddFaceWithTexture(newBrush, v7, v5, v2, riserTexture, FALSE); - else - AddFaceWithTexture(newBrush, v7, v5, v2, "textures/common/caulk", FALSE); + if ( direction == MOVE_NORTH ) { + AddFaceWithTexture( newBrush, v1, v7, v2, riserTexture, FALSE ); + } + else{ + AddFaceWithTexture( newBrush, v1, v7, v2, "textures/common/caulk", FALSE ); + } + + if ( direction == MOVE_SOUTH ) { + AddFaceWithTexture( newBrush, v3, v5, v6, riserTexture, FALSE ); + } + else{ + AddFaceWithTexture( newBrush, v3, v5, v6, "textures/common/caulk", FALSE ); + } + + if ( direction == MOVE_WEST ) { + AddFaceWithTexture( newBrush, v7, v5, v2, riserTexture, FALSE ); + } + else{ + AddFaceWithTexture( newBrush, v7, v5, v2, "textures/common/caulk", FALSE ); + } - AddFaceWithTexture(newBrush, v1, v2, v3, "textures/common/caulk", FALSE); + AddFaceWithTexture( newBrush, v1, v2, v3, "textures/common/caulk", FALSE ); // base is caulked - g_FuncTable.m_pfnCommitBrushHandle(newBrush); + g_FuncTable.m_pfnCommitBrushHandle( newBrush ); // finish brush } //----------------------------------------------------------------------------------- //----------------------------------------------------------------------------------- -void BuildDoorsX2(vec3_t min, vec3_t max, - bool bSclMainHor, bool bSclMainVert, - bool bSclTrimHor, bool bSclTrimVert, - const char* mainTexture, const char* trimTexture, - int direction) -{ +void BuildDoorsX2( vec3_t min, vec3_t max, + bool bSclMainHor, bool bSclMainVert, + bool bSclTrimHor, bool bSclTrimVert, + const char* mainTexture, const char* trimTexture, + int direction ){ int xy; - if(direction == 0) + if ( direction == 0 ) { xy = 0; - else + } + else{ xy = 1; + } //----- Build Outer Bounds --------- vec3_t v1, v2, v3, v5, v6, v7, ve_1, ve_2, ve_3; - VectorCopy(min, v1); - VectorCopy(min, v2); - VectorCopy(min, v3); - VectorCopy(max, v5); - VectorCopy(max, v6); - VectorCopy(max, v7); + VectorCopy( min, v1 ); + VectorCopy( min, v2 ); + VectorCopy( min, v3 ); + VectorCopy( max, v5 ); + VectorCopy( max, v6 ); + VectorCopy( max, v7 ); v2[0] = max[0]; v3[1] = max[1]; @@ -441,19 +469,18 @@ void BuildDoorsX2(vec3_t min, vec3_t max, v6[0] = min[0]; v7[1] = min[1]; - float width = (max[xy] - min[xy])/2; - - if(direction == 0) - { - VectorCopy(v1, ve_1); - VectorCopy(v3, ve_2); - VectorCopy(v6, ve_3); + float width = ( max[xy] - min[xy] ) / 2; + + if ( direction == 0 ) { + VectorCopy( v1, ve_1 ); + VectorCopy( v3, ve_2 ); + VectorCopy( v6, ve_3 ); } else { - VectorCopy(v7, ve_1); - VectorCopy(v1, ve_2); - VectorCopy(v2, ve_3); + VectorCopy( v7, ve_1 ); + VectorCopy( v1, ve_2 ); + VectorCopy( v2, ve_3 ); } ve_1[xy] += width; @@ -465,103 +492,100 @@ void BuildDoorsX2(vec3_t min, vec3_t max, brush_t* newBrush1 = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); brush_t* newBrush2 = (brush_t*)g_FuncTable.m_pfnCreateBrushHandle(); - AddFaceWithTexture(newBrush1, v1, v2, v3, "textures/common/caulk", FALSE); - AddFaceWithTexture(newBrush1, v5, v7, v6, "textures/common/caulk", FALSE); + AddFaceWithTexture( newBrush1, v1, v2, v3, "textures/common/caulk", FALSE ); + AddFaceWithTexture( newBrush1, v5, v7, v6, "textures/common/caulk", FALSE ); - AddFaceWithTexture(newBrush2, v1, v2, v3, "textures/common/caulk", FALSE); - AddFaceWithTexture(newBrush2, v5, v7, v6, "textures/common/caulk", FALSE); + AddFaceWithTexture( newBrush2, v1, v2, v3, "textures/common/caulk", FALSE ); + AddFaceWithTexture( newBrush2, v5, v7, v6, "textures/common/caulk", FALSE ); - if(direction == 0) - { - AddFaceWithTexture(newBrush1, v1, v3, v6, "textures/common/caulk", FALSE); - AddFaceWithTexture(newBrush2, v5, v2, v7, "textures/common/caulk", FALSE); + if ( direction == 0 ) { + AddFaceWithTexture( newBrush1, v1, v3, v6, "textures/common/caulk", FALSE ); + AddFaceWithTexture( newBrush2, v5, v2, v7, "textures/common/caulk", FALSE ); } else { - AddFaceWithTexture(newBrush1, v1, v7, v2, "textures/common/caulk", FALSE); - AddFaceWithTexture(newBrush2, v5, v6, v3, "textures/common/caulk", FALSE); + AddFaceWithTexture( newBrush1, v1, v7, v2, "textures/common/caulk", FALSE ); + AddFaceWithTexture( newBrush2, v5, v6, v3, "textures/common/caulk", FALSE ); } - if(direction == 0) - { - AddFaceWithTextureScaled(newBrush1, v1, v7, v2, mainTexture, bSclMainVert, bSclMainHor, - min[0], min[2], max[0], max[2]); - AddFaceWithTextureScaled(newBrush1, v5, v6, v3, mainTexture, bSclMainVert, bSclMainHor, - max[0], min[2], min[0], max[2]); + if ( direction == 0 ) { + AddFaceWithTextureScaled( newBrush1, v1, v7, v2, mainTexture, bSclMainVert, bSclMainHor, + min[0], min[2], max[0], max[2] ); + AddFaceWithTextureScaled( newBrush1, v5, v6, v3, mainTexture, bSclMainVert, bSclMainHor, + max[0], min[2], min[0], max[2] ); + + + AddFaceWithTextureScaled( newBrush2, v1, v7, v2, mainTexture, bSclMainVert, bSclMainHor, + min[0], min[2], max[0], max[2] ); + AddFaceWithTextureScaled( newBrush2, v5, v6, v3, mainTexture, bSclMainVert, bSclMainHor, + max[0], min[2], min[0], max[2] ); // flip max/min to reverse tex dir - - AddFaceWithTextureScaled(newBrush2, v1, v7, v2, mainTexture, bSclMainVert, bSclMainHor, - min[0], min[2], max[0], max[2]); - AddFaceWithTextureScaled(newBrush2, v5, v6, v3, mainTexture, bSclMainVert, bSclMainHor, - max[0], min[2], min[0], max[2]); // flip max/min to reverse tex dir - - AddFaceWithTextureScaled(newBrush1, ve_3, ve_2, ve_1, trimTexture, bSclTrimVert, bSclTrimHor, - min[1], min[2], max[1], max[2]); + AddFaceWithTextureScaled( newBrush1, ve_3, ve_2, ve_1, trimTexture, bSclTrimVert, bSclTrimHor, + min[1], min[2], max[1], max[2] ); - AddFaceWithTextureScaled(newBrush2, ve_1, ve_2, ve_3, trimTexture, bSclTrimVert, bSclTrimHor, - max[1], min[2], min[1], max[2]); + AddFaceWithTextureScaled( newBrush2, ve_1, ve_2, ve_3, trimTexture, bSclTrimVert, bSclTrimHor, + max[1], min[2], min[1], max[2] ); } else { - AddFaceWithTextureScaled(newBrush1, v1, v3, v6, mainTexture, bSclMainVert, bSclMainHor, - min[1], min[2], max[1], max[2]); - AddFaceWithTextureScaled(newBrush1, v5, v2, v7, mainTexture, bSclMainVert, bSclMainHor, - max[1], min[2], min[1], max[2]); + AddFaceWithTextureScaled( newBrush1, v1, v3, v6, mainTexture, bSclMainVert, bSclMainHor, + min[1], min[2], max[1], max[2] ); + AddFaceWithTextureScaled( newBrush1, v5, v2, v7, mainTexture, bSclMainVert, bSclMainHor, + max[1], min[2], min[1], max[2] ); - - AddFaceWithTextureScaled(newBrush2, v1, v3, v6, mainTexture, bSclMainVert, bSclMainHor, - min[1], min[2], max[1], max[2]); - AddFaceWithTextureScaled(newBrush2, v5, v2, v7, mainTexture, bSclMainVert, bSclMainHor, - max[1], min[2], min[1], max[2]); // flip max/min to reverse tex dir + AddFaceWithTextureScaled( newBrush2, v1, v3, v6, mainTexture, bSclMainVert, bSclMainHor, + min[1], min[2], max[1], max[2] ); + AddFaceWithTextureScaled( newBrush2, v5, v2, v7, mainTexture, bSclMainVert, bSclMainHor, + max[1], min[2], min[1], max[2] ); // flip max/min to reverse tex dir - AddFaceWithTextureScaled(newBrush1, ve_1, ve_2, ve_3, trimTexture, bSclTrimVert, bSclTrimHor, - min[0], min[2], max[0], max[2]); - AddFaceWithTextureScaled(newBrush2, ve_3, ve_2, ve_1, trimTexture, bSclTrimVert, bSclTrimHor, - max[0], min[2], min[0], max[2]); + AddFaceWithTextureScaled( newBrush1, ve_1, ve_2, ve_3, trimTexture, bSclTrimVert, bSclTrimHor, + min[0], min[2], max[0], max[2] ); + + AddFaceWithTextureScaled( newBrush2, ve_3, ve_2, ve_1, trimTexture, bSclTrimVert, bSclTrimHor, + max[0], min[2], min[0], max[2] ); } //---------------------------------- - + entity_t* pEDoor1 = (entity_t*)g_FuncTable.m_pfnCreateEntityHandle(); entity_t* pEDoor2 = (entity_t*)g_FuncTable.m_pfnCreateEntityHandle(); - epair_t* epDoor11 = GetNextChainItem(NULL, "classname", "func_door"); - epair_t* epDoor21 = GetNextChainItem(NULL, "classname", "func_door"); + epair_t* epDoor11 = GetNextChainItem( NULL, "classname", "func_door" ); + epair_t* epDoor21 = GetNextChainItem( NULL, "classname", "func_door" ); epair_t* epDoor12; epair_t* epDoor22; - if(direction == 0) - { - epDoor12 = GetNextChainItem(epDoor11, "angle", "180"); - epDoor22 = GetNextChainItem(epDoor21, "angle", "360"); + if ( direction == 0 ) { + epDoor12 = GetNextChainItem( epDoor11, "angle", "180" ); + epDoor22 = GetNextChainItem( epDoor21, "angle", "360" ); } else { - epDoor12 = GetNextChainItem(epDoor11, "angle", "270"); - epDoor22 = GetNextChainItem(epDoor21, "angle", "90"); + epDoor12 = GetNextChainItem( epDoor11, "angle", "270" ); + epDoor22 = GetNextChainItem( epDoor21, "angle", "90" ); } - srand((unsigned)time(NULL)); + srand( (unsigned)time( NULL ) ); char teamname[256]; - sprintf(teamname, "t%i", rand()); - /*epair_t* epDoor13 = */ GetNextChainItem(epDoor12, "team", teamname); - /*epair_t* epDoor23 = */ GetNextChainItem(epDoor22, "team", teamname); + sprintf( teamname, "t%i", rand() ); + /*epair_t* epDoor13 = */ GetNextChainItem( epDoor12, "team", teamname ); + /*epair_t* epDoor23 = */ GetNextChainItem( epDoor22, "team", teamname ); - g_FuncTable.m_pfnCommitBrushHandleToEntity(newBrush1, pEDoor1); - g_FuncTable.m_pfnCommitBrushHandleToEntity(newBrush2, pEDoor2); + g_FuncTable.m_pfnCommitBrushHandleToEntity( newBrush1, pEDoor1 ); + g_FuncTable.m_pfnCommitBrushHandleToEntity( newBrush2, pEDoor2 ); - g_EntityTable.m_pfnSetEntityKeyValList(pEDoor1, epDoor11); - g_EntityTable.m_pfnSetEntityKeyValList(pEDoor2, epDoor21); + g_EntityTable.m_pfnSetEntityKeyValList( pEDoor1, epDoor11 ); + g_EntityTable.m_pfnSetEntityKeyValList( pEDoor2, epDoor21 ); - g_FuncTable.m_pfnCommitEntityHandleToMap(pEDoor1); - g_FuncTable.m_pfnCommitEntityHandleToMap(pEDoor2); + g_FuncTable.m_pfnCommitEntityHandleToMap( pEDoor1 ); + g_FuncTable.m_pfnCommitEntityHandleToMap( pEDoor2 ); // ResetCurrentTexture(); } @@ -569,27 +593,26 @@ void BuildDoorsX2(vec3_t min, vec3_t max, //----------------------------------------------------------------------------------- //----------------------------------------------------------------------------------- -void MakeBevel(vec3_t vMin, vec3_t vMax) -{ +void MakeBevel( vec3_t vMin, vec3_t vMax ){ int nIndex = g_FuncTable.m_pfnCreatePatchHandle(); - //$ FIXME: m_pfnGetPatchHandle - patchMesh_t* pm = g_FuncTable.m_pfnGetPatchData(nIndex); + //$ FIXME: m_pfnGetPatchHandle + patchMesh_t* pm = g_FuncTable.m_pfnGetPatchData( nIndex ); pm->height = 3; pm->width = 3; vec3_t x_3, y_3, z_3; - x_3[0] = vMin[0]; x_3[1] = vMin[0]; x_3[2] = vMax[0]; - y_3[0] = vMin[1]; y_3[1] = vMax[1]; y_3[2] = vMax[1]; - z_3[0] = vMin[2]; z_3[1] = (vMax[2] + vMin[2])/2; z_3[2] = vMax[2]; + x_3[0] = vMin[0]; x_3[1] = vMin[0]; x_3[2] = vMax[0]; + y_3[0] = vMin[1]; y_3[1] = vMax[1]; y_3[2] = vMax[1]; + z_3[0] = vMin[2]; z_3[1] = ( vMax[2] + vMin[2] ) / 2; z_3[2] = vMax[2]; /* x_3[0] = 0; x_3[1] = 0; x_3[2] = 64; - y_3[0] = 0; y_3[1] = 64; y_3[2] = 64; - z_3[0] = 0; z_3[1] = 32; z_3[2] = 64;*/ + y_3[0] = 0; y_3[1] = 64; y_3[2] = 64; + z_3[0] = 0; z_3[1] = 32; z_3[2] = 64;*/ - for(int i = 0; i < 3; i++) + for ( int i = 0; i < 3; i++ ) { - for(int j = 0; j < 3; j++) + for ( int j = 0; j < 3; j++ ) { pm->ctrl[i][j].xyz[0] = x_3[i]; pm->ctrl[i][j].xyz[1] = y_3[i]; @@ -598,33 +621,32 @@ void MakeBevel(vec3_t vMin, vec3_t vMax) } - g_FuncTable.m_pfnCommitPatchHandleToMap(nIndex, pm, "textures/common/caulk"); + g_FuncTable.m_pfnCommitPatchHandleToMap( nIndex, pm, "textures/common/caulk" ); } -void BuildCornerStairs(vec3_t vMin, vec3_t vMax, int nSteps, const char* mainTexture, const char* riserTex) -{ - vec3_t* topPoints = new vec3_t[nSteps+1]; - vec3_t* botPoints = new vec3_t[nSteps+1]; +void BuildCornerStairs( vec3_t vMin, vec3_t vMax, int nSteps, const char* mainTexture, const char* riserTex ){ + vec3_t* topPoints = new vec3_t[nSteps + 1]; + vec3_t* botPoints = new vec3_t[nSteps + 1]; bool bFacesUse[6] = {TRUE, TRUE, FALSE, TRUE, FALSE, FALSE}; vec3_t centre; - VectorCopy(vMin, centre); + VectorCopy( vMin, centre ); centre[0] = vMax[0]; - int height = (int)(vMax[2] - vMin[2]) / nSteps; + int height = (int)( vMax[2] - vMin[2] ) / nSteps; vec3_t vTop, vBot; - VectorCopy(vMax, vTop); - VectorCopy(vMin, vBot); + VectorCopy( vMax, vTop ); + VectorCopy( vMin, vBot ); vTop[2] = vMin[2] + height; - int i; - for(i = 0; i <= nSteps; i++) + int i; + for ( i = 0; i <= nSteps; i++ ) { - VectorCopy(centre, topPoints[i]); - VectorCopy(centre, botPoints[i]); - + VectorCopy( centre, topPoints[i] ); + VectorCopy( centre, botPoints[i] ); + topPoints[i][2] = vMax[2]; botPoints[i][2] = vMin[2]; @@ -636,22 +658,22 @@ void BuildCornerStairs(vec3_t vMin, vec3_t vMax, int nSteps, const char* mainTex } vec3_t tp[3]; - for(int j = 0; j < 3; j++) - VectorCopy(topPoints[j], tp[j]); + for ( int j = 0; j < 3; j++ ) + VectorCopy( topPoints[j], tp[j] ); - for(i = 0; i < nSteps; i++) + for ( i = 0; i < nSteps; i++ ) { - brush_t* brush = Build_Get_BoundingCube_Selective(vBot, vTop, "textures/common/caulk", bFacesUse); + brush_t* brush = Build_Get_BoundingCube_Selective( vBot, vTop, "textures/common/caulk", bFacesUse ); - for(int j = 0; j < 3; j++) + for ( int j = 0; j < 3; j++ ) tp[j][2] = vTop[2]; - AddFaceWithTexture(brush, tp[2], tp[1], tp[0], mainTexture, FALSE); + AddFaceWithTexture( brush, tp[2], tp[1], tp[0], mainTexture, FALSE ); - AddFaceWithTexture(brush, centre, botPoints[i+1], topPoints[i+1], "textures/common/caulk", FALSE); - AddFaceWithTexture(brush, centre, topPoints[i], botPoints[i], riserTex, FALSE); + AddFaceWithTexture( brush, centre, botPoints[i + 1], topPoints[i + 1], "textures/common/caulk", FALSE ); + AddFaceWithTexture( brush, centre, topPoints[i], botPoints[i], riserTex, FALSE ); - g_FuncTable.m_pfnCommitBrushHandle(brush); + g_FuncTable.m_pfnCommitBrushHandle( brush ); vTop[2] += height; vBot[2] += height; @@ -662,5 +684,5 @@ void BuildCornerStairs(vec3_t vMin, vec3_t vMax, int nSteps, const char* mainTex vMin[2] += height; vMax[2] += height; - MakeBevel(vMin, vMax); + MakeBevel( vMin, vMax ); } diff --git a/contrib/bobtoolz/shapes.h b/contrib/bobtoolz/shapes.h index 46eae37a..fdb58e5a 100644 --- a/contrib/bobtoolz/shapes.h +++ b/contrib/bobtoolz/shapes.h @@ -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 + */ // TODO: implement all this stuff via DBrush class. started with DShape // TODO: Auto Face Scaling, no need to pass parms, calculated via brush. @@ -24,23 +24,23 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define FACE_DETAIL 0x8000000 // defines for polygon stuff -#define MAX_POLYGON_FACES 128 +#define MAX_POLYGON_FACES 128 // generic (detail added 12/01/01, for AC+) -void AddFaceWithTexture(brush_t* brush, vec3_t va, vec3_t vb, vec3_t vc, const char* texture, bool detail); +void AddFaceWithTexture( brush_t* brush, vec3_t va, vec3_t vb, vec3_t vc, const char* texture, bool detail ); // ------------- // ---caulked--- // ------------- -void Build_Wedge(int dir, vec3_t min, vec3_t max, bool bUp); +void Build_Wedge( int dir, vec3_t min, vec3_t max, bool bUp ); // -------------- // ---textured--- // -------------- -void BuildDoorsX2(vec3_t min, vec3_t max, bool bSclMainHor, bool bSclMainVert, bool bSclTrimHor, bool bSclTrimVert, const char* mainTexture, const char* trimTexture, int direction); -void Build_StairStep(vec3_t min, vec3_t max, const char* mainTexture, const char* riserTexture, int direction); -void Build_StairStep_Wedge(int dir, vec3_t min, vec3_t max, const char* mainTexture, const char* riserTexture, bool detail); -void BuildCornerStairs(vec3_t vMin, vec3_t vMax, int nSteps, const char* mainTexture, const char* riserTex); +void BuildDoorsX2( vec3_t min, vec3_t max, bool bSclMainHor, bool bSclMainVert, bool bSclTrimHor, bool bSclTrimVert, const char* mainTexture, const char* trimTexture, int direction ); +void Build_StairStep( vec3_t min, vec3_t max, const char* mainTexture, const char* riserTexture, int direction ); +void Build_StairStep_Wedge( int dir, vec3_t min, vec3_t max, const char* mainTexture, const char* riserTexture, bool detail ); +void BuildCornerStairs( vec3_t vMin, vec3_t vMax, int nSteps, const char* mainTexture, const char* riserTex ); // stairs stuff. //void Build_Prism_Border(vec3_t min, vec3_t max, int nSides, int nBorder, bool bAlignTop = FALSE); //moved to DShape diff --git a/contrib/bobtoolz/visfind.cpp b/contrib/bobtoolz/visfind.cpp index 6a54ab44..f8e327ab 100644 --- a/contrib/bobtoolz/visfind.cpp +++ b/contrib/bobtoolz/visfind.cpp @@ -8,11 +8,11 @@ #include "bsploader.h" typedef struct { - int portalclusters; - int leafbytes; //leafbytes = ((portalclusters+63)&~63)>>3; + int portalclusters; + int leafbytes; //leafbytes = ((portalclusters+63)&~63)>>3; } vis_header; -// added because int shift = 32; i = 0xFFFFFFFF >> shift; +// added because int shift = 32; i = 0xFFFFFFFF >> shift; // then i = 0xFFFFFFFF, when it should = 0 const unsigned long bitmasks[33] = { @@ -27,150 +27,156 @@ const unsigned long bitmasks[33] = 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF }; -int bsp_leafnumfororigin(vec3_t origin) -{ - dnode_t *node; - dplane_t *plane; - float d; +int bsp_leafnumfororigin( vec3_t origin ){ + dnode_t *node; + dplane_t *plane; + float d; // TODO: check if origin is in the map?? node = dnodes; - while (true) + while ( true ) { plane = &dplanes[node->planeNum]; - d = DotProduct (origin, plane->normal) - plane->dist; - if ( d >= 0 ) - if ( node->children[0] < 0 ) - return -(node->children[0]+1); - else + d = DotProduct( origin, plane->normal ) - plane->dist; + if ( d >= 0 ) { + if ( node->children[0] < 0 ) { + return -( node->children[0] + 1 ); + } + else{ node = &dnodes[node->children[0]]; + } + } else - if ( node->children[1] < 0 ) - return -(node->children[1]+1); - else - node = &dnodes[node->children[1]]; + if ( node->children[1] < 0 ) { + return -( node->children[1] + 1 ); + } + else{ + node = &dnodes[node->children[1]]; + } } return 0; } -int bsp_leafnumforcluster(int cluster) -{ +int bsp_leafnumforcluster( int cluster ){ dleaf_t *l; int i; for ( i = 0, l = dleafs; i < numleafs; i++, l++ ) - if ( l->cluster == cluster ) return(i); - return(0); + if ( l->cluster == cluster ) { + return( i ); + } + return( 0 ); } // leaf1 = origin leaf // leaf2 = leaf to test for /*int bsp_InPVS(int cluster1, int cluster2) -{ - vis_header *vheader; - byte *visdata; + { + vis_header *vheader; + byte *visdata; - vheader = (vis_header *) visBytes; - visdata = visBytes + VIS_HEADER_SIZE; + vheader = (vis_header *) visBytes; + visdata = visBytes + VIS_HEADER_SIZE; - return( *( visdata + ( cluster1 * vheader->leafbytes ) + (cluster2 / 8) ) & ( 1 << ( cluster2 % 8 ) ) ); -}*/ + return( *( visdata + ( cluster1 * vheader->leafbytes ) + (cluster2 / 8) ) & ( 1 << ( cluster2 % 8 ) ) ); + }*/ -void bsp_setbitvectorlength( byte *v, int length_bits, int length_vector ) -{ +void bsp_setbitvectorlength( byte *v, int length_bits, int length_vector ){ int i; - i = length_bits/8; + i = length_bits / 8; - *(v+i) = (byte) bitmasks[length_bits % 8]; + *( v + i ) = (byte) bitmasks[length_bits % 8]; - memset((v+i+1), 0, length_vector-i-1); + memset( ( v + i + 1 ), 0, length_vector - i - 1 ); } -void bsp_bitvectorsubtract(byte *first, byte *second, byte *out, int length) -{ +void bsp_bitvectorsubtract( byte *first, byte *second, byte *out, int length ){ int i; for ( i = 0; i < length; i++ ) - *(out+i) = *(first+i) & ~(*(second+i)); + *( out + i ) = *( first + i ) & ~( *( second + i ) ); } -int bsp_countclusters(byte *bitvector, int length) -{ +int bsp_countclusters( byte *bitvector, int length ){ int i, j, c; c = 0; for ( i = 0; i < length; i++ ) for ( j = 0; j < 8; j++ ) - if ( (*(bitvector+i) & (1 << j)) ) c++; - return(c); + if ( ( *( bitvector + i ) & ( 1 << j ) ) ) { + c++; + } + return( c ); } -int bsp_countclusters_mask(byte *bitvector, byte *maskvector, int length) -{ +int bsp_countclusters_mask( byte *bitvector, byte *maskvector, int length ){ int i, j, c; c = 0; for ( i = 0; i < length; i++ ) for ( j = 0; j < 8; j++ ) - if ( (*(bitvector+i) & (1 << j)) && (*(maskvector+i) & (1 << j)) ) c++; - return(c); + if ( ( *( bitvector + i ) & ( 1 << j ) ) && ( *( maskvector + i ) & ( 1 << j ) ) ) { + c++; + } + return( c ); } -void AddCluster(list *pointlist, dleaf_t *cl, qboolean* repeatlist, vec3_t clr) -{ - DWinding* w; - +void AddCluster( list *pointlist, dleaf_t *cl, qboolean* repeatlist, vec3_t clr ){ + DWinding* w; + int* leafsurf = &dleafsurfaces[cl->firstLeafSurface]; - for(int k = 0; k < cl->numLeafSurfaces; k++, leafsurf++) + for ( int k = 0; k < cl->numLeafSurfaces; k++, leafsurf++ ) { - if(repeatlist[*leafsurf]) + if ( repeatlist[*leafsurf] ) { continue; + } dsurface_t* surf = &drawSurfaces[*leafsurf]; - if(surf->surfaceType != MST_PLANAR) + if ( surf->surfaceType != MST_PLANAR ) { continue; + } qdrawVert_t* vert = &drawVerts[surf->firstVert]; - if(surf->firstVert + surf->numVerts > numDrawVerts) - DoMessageBox("Warning", "Warning", MB_OK); + if ( surf->firstVert + surf->numVerts > numDrawVerts ) { + DoMessageBox( "Warning", "Warning", MB_OK ); + } w = new DWinding(); - w->AllocWinding(surf->numVerts); + w->AllocWinding( surf->numVerts ); - for (int l = 0; l < surf->numVerts; l++, vert++) + for ( int l = 0; l < surf->numVerts; l++, vert++ ) { - (w->p[l])[0] = vert->xyz[0]; - (w->p[l])[1] = vert->xyz[1]; - (w->p[l])[2] = vert->xyz[2]; + ( w->p[l] )[0] = vert->xyz[0]; + ( w->p[l] )[1] = vert->xyz[1]; + ( w->p[l] )[2] = vert->xyz[2]; - w->clr[0] = clr[0]; - w->clr[1] = clr[1]; - w->clr[2] = clr[2]; + w->clr[0] = clr[0]; + w->clr[1] = clr[1]; + w->clr[2] = clr[2]; } - pointlist->push_back(w); + pointlist->push_back( w ); repeatlist[*leafsurf] = true; } } /* -============= -CreateTrace -============= -*/ -list *CreateTrace( dleaf_t *leaf, int c, vis_header *header, byte *visdata, byte *seen ) -{ - byte *vis; - int i, j, clusterNum; + ============= + CreateTrace + ============= + */ +list *CreateTrace( dleaf_t *leaf, int c, vis_header *header, byte *visdata, byte *seen ){ + byte *vis; + int i, j, clusterNum; list *pointlist = new list; - qboolean* repeatlist = new qboolean[numDrawSurfaces]; - dleaf_t *cl; + qboolean* repeatlist = new qboolean[numDrawSurfaces]; + dleaf_t *cl; - vec3_t clrRnd[5] = { + vec3_t clrRnd[5] = { {0.f, 0.f, 1.f}, {0.f, 1.f, 1.f}, {1.f, 0.f, 0.f}, @@ -178,24 +184,25 @@ list *CreateTrace( dleaf_t *leaf, int c, vis_header *header, byte *vi {1.f, 1.f, 0.f}, }; - vec3_t clrGreen = {0.f, 1.f, 0.f}; - - memset(repeatlist, 0, sizeof(qboolean)*numDrawSurfaces); - + vec3_t clrGreen = {0.f, 1.f, 0.f}; + + memset( repeatlist, 0, sizeof( qboolean ) * numDrawSurfaces ); + vis = visdata + ( c * header->leafbytes ); clusterNum = 0; - AddCluster(pointlist, &(dleafs[bsp_leafnumforcluster( c )]), repeatlist, clrGreen); + AddCluster( pointlist, &( dleafs[bsp_leafnumforcluster( c )] ), repeatlist, clrGreen ); for ( i = 0; i < header->leafbytes; i++ ) { for ( j = 0; j < 8; j++ ) { - cl = &(dleafs[bsp_leafnumforcluster( clusterNum )]); + cl = &( dleafs[bsp_leafnumforcluster( clusterNum )] ); - if ( ( *(vis + i) & (1 << j) ) && (*(seen+i) & (1 << j)) && (leaf->area == cl->area)) - AddCluster(pointlist, cl, repeatlist, clrRnd[rand()%5]); + if ( ( *( vis + i ) & ( 1 << j ) ) && ( *( seen + i ) & ( 1 << j ) ) && ( leaf->area == cl->area ) ) { + AddCluster( pointlist, cl, repeatlist, clrRnd[rand() % 5] ); + } clusterNum++; } } @@ -206,38 +213,37 @@ list *CreateTrace( dleaf_t *leaf, int c, vis_header *header, byte *vi } /* -============= -TraceCluster - -setup for CreateTrace -============= -*/ -list *TraceCluster (int leafnum) -{ - byte seen[(MAX_MAP_LEAFS/8) + 1]; - vis_header *vheader; - byte *visdata; - dleaf_t *leaf; + ============= + TraceCluster + + setup for CreateTrace + ============= + */ +list *TraceCluster( int leafnum ){ + byte seen[( MAX_MAP_LEAFS / 8 ) + 1]; + vis_header *vheader; + byte *visdata; + dleaf_t *leaf; vheader = (vis_header *) visBytes; - visdata = visBytes + sizeof(vis_header); + visdata = visBytes + sizeof( vis_header ); - memset(seen, 0xFF, sizeof(seen)); - bsp_setbitvectorlength(seen, vheader->portalclusters, sizeof(seen)); + memset( seen, 0xFF, sizeof( seen ) ); + bsp_setbitvectorlength( seen, vheader->portalclusters, sizeof( seen ) ); - leaf = &(dleafs[leafnum]); + leaf = &( dleafs[leafnum] ); - return CreateTrace(leaf, leaf->cluster, vheader, visdata, seen); + return CreateTrace( leaf, leaf->cluster, vheader, visdata, seen ); } -list* BuildTrace(char* filename, vec3_t v_origin) -{ - if(!LoadBSPFile(filename)) +list* BuildTrace( char* filename, vec3_t v_origin ){ + if ( !LoadBSPFile( filename ) ) { return NULL; - - int leafnum = bsp_leafnumfororigin(v_origin); + } + + int leafnum = bsp_leafnumfororigin( v_origin ); - list *pointlist = TraceCluster(leafnum); + list *pointlist = TraceCluster( leafnum ); FreeBSPData(); diff --git a/contrib/bobtoolz/visfind.h b/contrib/bobtoolz/visfind.h index 0a4b601e..be825413 100644 --- a/contrib/bobtoolz/visfind.h +++ b/contrib/bobtoolz/visfind.h @@ -1 +1 @@ -list *BuildTrace(char* filename, vec3_t v_origin); +list *BuildTrace( char* filename, vec3_t v_origin ); diff --git a/contrib/camera/camera.cpp b/contrib/camera/camera.cpp index dbad8085..9c133941 100644 --- a/contrib/camera/camera.cpp +++ b/contrib/camera/camera.cpp @@ -1,28 +1,28 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ #include "camera.h" @@ -44,77 +44,81 @@ GtkWidget *g_pCameraInspectorWnd = NULL; CCamera *firstCam = NULL; // double linked list CCamera *firstFreeCam = NULL; // single linked list CCamera *currentCam = NULL; // single item -bool g_bEditOn = false; -int g_iEditMode = 0; // 0: editting points 1: adding points -int g_iActiveTarget = -1; -int g_iPreviewRunning = 0; // 0: no preview 1: start preview 2: preview in progress +bool g_bEditOn = false; +int g_iEditMode = 0; // 0: editting points 1: adding points +int g_iActiveTarget = -1; +int g_iPreviewRunning = 0; // 0: no preview 1: start preview 2: preview in progress static const char *PLUGIN_ABOUT = "Camera v1.0 for GtkRadiant\n" - "by Arnout van Meer (rr2do2@splashdamage.com)\n\n" - "This product contains software technology\n" - "from id Software, Inc. ('id Technology').\n" - "id Technology (c) 2001, 2002 id Software, Inc."; + "by Arnout van Meer (rr2do2@splashdamage.com)\n\n" + "This product contains software technology\n" + "from id Software, Inc. ('id Technology').\n" + "id Technology (c) 2001, 2002 id Software, Inc."; #include "iplugin.h" -const char* QERPlug_Init(void* hApp, void* pMainWidget) -{ - g_pRadiantWnd = (GtkWidget*)pMainWidget; +const char* QERPlug_Init( void* hApp, void* pMainWidget ){ + g_pRadiantWnd = (GtkWidget*)pMainWidget; - // initialize cams - for( int i = 0; i < MAX_CAMERAS; i++ ) { - if( i == 0 ) { - firstFreeCam = new CCamera( i ); - firstCam = firstFreeCam; - } else { - firstCam->SetNext( new CCamera( i ) ); - firstCam = firstCam->GetNext(); - } - } - firstCam = NULL; + // initialize cams + for ( int i = 0; i < MAX_CAMERAS; i++ ) { + if ( i == 0 ) { + firstFreeCam = new CCamera( i ); + firstCam = firstFreeCam; + } + else { + firstCam->SetNext( new CCamera( i ) ); + firstCam = firstCam->GetNext(); + } + } + firstCam = NULL; - if( !Renderer ) - { - Renderer = new CRenderer; - } + if ( !Renderer ) { + Renderer = new CRenderer; + } - if( g_pCameraInspectorWnd == NULL ) - g_pCameraInspectorWnd = CreateCameraInspectorDialog(); + if ( g_pCameraInspectorWnd == NULL ) { + g_pCameraInspectorWnd = CreateCameraInspectorDialog(); + } - InitIglToQgl(&g_QglTable); + InitIglToQgl( &g_QglTable ); - GetFileTypeRegistry()->addType("camera", filetype_t("Camera file", "*.camera")); + GetFileTypeRegistry()->addType( "camera", filetype_t( "Camera file", "*.camera" ) ); - return "Camera for GtkRadiant"; + return "Camera for GtkRadiant"; } -const char* QERPlug_GetName() -{ - return PLUGIN_NAME; +const char* QERPlug_GetName(){ + return PLUGIN_NAME; } -const char* QERPlug_GetCommandList() -{ - return PLUGIN_COMMANDS; +const char* QERPlug_GetCommandList(){ + return PLUGIN_COMMANDS; } -void QERPlug_Dispatch (const char* p, float* vMin, float* vMax, bool bSingleBrush) -{ - if( !strcmp( p, "New Fixed Camera" ) ) - DoNewFixedCamera(); - else if( !strcmp( p, "New Interpolated Camera" ) ) - DoNewInterpolatedCamera(); - else if( !strcmp( p, "New Spline Camera" ) ) - DoNewSplineCamera(); - else if( !strcmp( p, "Camera Inspector..." ) ) - DoCameraInspector(); - else if( !strcmp( p, "Preview Camera" ) ) - DoPreviewCamera(); - else if( !strcmp( p, "Load Camera..." ) ) - DoLoadCamera(); - else if( !strcmp( p, "About..." ) ) - g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, PLUGIN_ABOUT, "About", MB_OK, NULL ); +void QERPlug_Dispatch( const char* p, float* vMin, float* vMax, bool bSingleBrush ){ + if ( !strcmp( p, "New Fixed Camera" ) ) { + DoNewFixedCamera(); + } + else if ( !strcmp( p, "New Interpolated Camera" ) ) { + DoNewInterpolatedCamera(); + } + else if ( !strcmp( p, "New Spline Camera" ) ) { + DoNewSplineCamera(); + } + else if ( !strcmp( p, "Camera Inspector..." ) ) { + DoCameraInspector(); + } + else if ( !strcmp( p, "Preview Camera" ) ) { + DoPreviewCamera(); + } + else if ( !strcmp( p, "Load Camera..." ) ) { + DoLoadCamera(); + } + else if ( !strcmp( p, "About..." ) ) { + g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, PLUGIN_ABOUT, "About", MB_OK, NULL ); + } } @@ -122,48 +126,41 @@ void QERPlug_Dispatch (const char* p, float* vMin, float* vMax, bool bSingleBrus #include "itoolbar.h" -unsigned int ToolbarButtonCount() -{ - return 1; +unsigned int ToolbarButtonCount(){ + return 1; } class CameraInspectorButton : public IToolbarButton { public: - virtual const char* getImage() const - { - return "camera_insp.bmp"; - } - virtual const char* getText() const - { - return "Inspector"; - } - virtual const char* getTooltip() const - { - return "Camera Inspector"; - } - virtual void activate() const - { - DoCameraInspector(); - } - virtual EType getType() const - { - return eButton; - } +virtual const char* getImage() const { + return "camera_insp.bmp"; +} +virtual const char* getText() const { + return "Inspector"; +} +virtual const char* getTooltip() const { + return "Camera Inspector"; +} +virtual void activate() const { + DoCameraInspector(); +} +virtual EType getType() const { + return eButton; +} }; CameraInspectorButton g_camerainspectorbutton; -const IToolbarButton* GetToolbarButton(unsigned int index) -{ - return &g_camerainspectorbutton; +const IToolbarButton* GetToolbarButton( unsigned int index ){ + return &g_camerainspectorbutton; } -_QERFuncTable_1 g_FuncTable; -_QERQglTable g_QglTable; -_QERUITable g_UITable; -_QERCameraTable g_CameraTable; +_QERFuncTable_1 g_FuncTable; +_QERQglTable g_QglTable; +_QERUITable g_UITable; +_QERCameraTable g_CameraTable; // ============================================================================= // SYNAPSE @@ -173,12 +170,12 @@ _QERCameraTable g_CameraTable; class CameraSynapseClient : public CSynapseClient { public: - // CSynapseClient API - bool RequestAPI(APIDescriptor_t *pAPI); - const char* GetInfo(); - - CameraSynapseClient() { } - virtual ~CameraSynapseClient() { } +// CSynapseClient API +bool RequestAPI( APIDescriptor_t *pAPI ); +const char* GetInfo(); + +CameraSynapseClient() { } +virtual ~CameraSynapseClient() { } }; CSynapseServer* g_pSynapseServer = NULL; @@ -187,60 +184,55 @@ CameraSynapseClient g_SynapseClient; #if __GNUC__ >= 4 #pragma GCC visibility push(default) #endif -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) { +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(TOOLBAR_MAJOR, "camera", sizeof(_QERPlugToolbarTable)); - g_SynapseClient.AddAPI(PLUGIN_MAJOR, "camera", sizeof(_QERPluginTable)); - - g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(_QERFuncTable_1), SYN_REQUIRE, &g_FuncTable); - g_SynapseClient.AddAPI(UI_MAJOR, NULL, sizeof(_QERUITable), SYN_REQUIRE, &g_UITable); - g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(_QERQglTable), SYN_REQUIRE, &g_QglTable); - g_SynapseClient.AddAPI(CAMERA_MAJOR, NULL, sizeof(_QERCameraTable), SYN_REQUIRE, &g_CameraTable); - - return &g_SynapseClient; + 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( TOOLBAR_MAJOR, "camera", sizeof( _QERPlugToolbarTable ) ); + g_SynapseClient.AddAPI( PLUGIN_MAJOR, "camera", sizeof( _QERPluginTable ) ); + + g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( _QERFuncTable_1 ), SYN_REQUIRE, &g_FuncTable ); + g_SynapseClient.AddAPI( UI_MAJOR, NULL, sizeof( _QERUITable ), SYN_REQUIRE, &g_UITable ); + g_SynapseClient.AddAPI( QGL_MAJOR, NULL, sizeof( _QERQglTable ), SYN_REQUIRE, &g_QglTable ); + g_SynapseClient.AddAPI( CAMERA_MAJOR, NULL, sizeof( _QERCameraTable ), SYN_REQUIRE, &g_CameraTable ); + + return &g_SynapseClient; } -bool CameraSynapseClient::RequestAPI(APIDescriptor_t *pAPI) -{ - if (!strcmp(pAPI->major_name, TOOLBAR_MAJOR)) - { - _QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable); - - pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; - pTable->m_pfnGetToolbarButton = &GetToolbarButton; - return true; - } - else 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; +bool CameraSynapseClient::RequestAPI( APIDescriptor_t *pAPI ){ + if ( !strcmp( pAPI->major_name, TOOLBAR_MAJOR ) ) { + _QERPlugToolbarTable* pTable = static_cast<_QERPlugToolbarTable*>( pAPI->mpTable ); + + pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; + pTable->m_pfnGetToolbarButton = &GetToolbarButton; + return true; + } + else 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; } #include "version.h" -const char* CameraSynapseClient::GetInfo() -{ - return "Camera plugin v1.0 - Arnout van Meer - built " __DATE__ " " RADIANT_VERSION; +const char* CameraSynapseClient::GetInfo(){ + return "Camera plugin v1.0 - Arnout van Meer - built " __DATE__ " " RADIANT_VERSION; } @@ -249,49 +241,53 @@ const char* CameraSynapseClient::GetInfo() // CCamera // CCamera *AllocCam() { - if( !firstFreeCam ) - return( NULL ); - - CCamera *cam = firstFreeCam; - firstFreeCam = firstFreeCam->GetNext(); - cam->Init(); - if( firstCam ) { - cam->SetNext( firstCam ); - firstCam->SetPrev( cam ); - } - firstCam = cam; - - return( cam ); + if ( !firstFreeCam ) { + return( NULL ); + } + + CCamera *cam = firstFreeCam; + firstFreeCam = firstFreeCam->GetNext(); + cam->Init(); + if ( firstCam ) { + cam->SetNext( firstCam ); + firstCam->SetPrev( cam ); + } + firstCam = cam; + + return( cam ); } void FreeCam( CCamera *cam ) { - if( cam->GetPrev() ) { - if( cam->GetNext() ) { - cam->GetPrev()->SetNext( cam->GetNext() ); - cam->GetNext()->SetPrev( cam->GetPrev() ); - } else { - cam->GetPrev()->SetNext( NULL ); - } - } else if( cam->GetNext() ) { - cam->GetNext()->SetPrev( NULL ); - firstCam = cam->GetNext(); - } else { - firstCam = NULL; - } - - cam->GetCam()->clear(); - cam->Init(); - - if( firstFreeCam ) { - cam->SetNext( firstFreeCam ); - } - firstFreeCam = cam; + if ( cam->GetPrev() ) { + if ( cam->GetNext() ) { + cam->GetPrev()->SetNext( cam->GetNext() ); + cam->GetNext()->SetPrev( cam->GetPrev() ); + } + else { + cam->GetPrev()->SetNext( NULL ); + } + } + else if ( cam->GetNext() ) { + cam->GetNext()->SetPrev( NULL ); + firstCam = cam->GetNext(); + } + else { + firstCam = NULL; + } + + cam->GetCam()->clear(); + cam->Init(); + + if ( firstFreeCam ) { + cam->SetNext( firstFreeCam ); + } + firstFreeCam = cam; } void SetCurrentCam( CCamera *cam ) { - currentCam = cam; + currentCam = cam; } CCamera *GetCurrentCam() { - return( currentCam ); + return( currentCam ); } diff --git a/contrib/camera/camera.h b/contrib/camera/camera.h index cf1387c2..b8bd281e 100644 --- a/contrib/camera/camera.h +++ b/contrib/camera/camera.h @@ -1,28 +1,28 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ #ifndef _CAMERA_H_ #define _CAMERA_H_ @@ -30,7 +30,7 @@ Copyright (C) 2002 Splash Damage Ltd. #ifdef _WIN32 #pragma warning(disable : 4267) #else - typedef unsigned char byte; +typedef unsigned char byte; #endif class CCamera; @@ -52,21 +52,21 @@ class CCamera; #include "renderer.h" #include "listener.h" -extern _QERFuncTable_1 g_FuncTable; -extern _QERQglTable g_QglTable; -extern _QERUITable g_UITable; -extern _QERCameraTable g_CameraTable; +extern _QERFuncTable_1 g_FuncTable; +extern _QERQglTable g_QglTable; +extern _QERUITable g_UITable; +extern _QERCameraTable g_CameraTable; extern CRenderer *Renderer; extern CListener *Listener; // splinelib #define CAMERA_PLUGIN -#define DotProduct(a,b) ((a)[0]*(b)[0]+(a)[1]*(b)[1]+(a)[2]*(b)[2]) +#define DotProduct( a,b ) ( ( a )[0] * ( b )[0] + ( a )[1] * ( b )[1] + ( a )[2] * ( b )[2] ) -extern void ( APIENTRY * qglBegin )(GLenum mode); -extern void ( APIENTRY * qglEnd )(void); -extern void ( APIENTRY * qglVertex3fv )(const GLfloat *v); +extern void ( APIENTRY * qglBegin )( GLenum mode ); +extern void ( APIENTRY * qglEnd )( void ); +extern void ( APIENTRY * qglVertex3fv )( const GLfloat *v ); extern "C" void InitIglToQgl( _QERQglTable *g_QglTable ); @@ -76,7 +76,7 @@ extern "C" void InitIglToQgl( _QERQglTable *g_QglTable ); #define MAX_CAMERAS 64 extern idCameraDef camera[MAX_CAMERAS]; -extern "C" qboolean loadCamera(int camNum, const char *name); +extern "C" qboolean loadCamera( int camNum, const char *name ); // // CCamera @@ -84,64 +84,66 @@ extern "C" qboolean loadCamera(int camNum, const char *name); class CCamera { public: - CCamera( int i ) { - cam = &camera[i]; - camnum = i; - Init(); - } - ~CCamera(); - - void Init() { - next = prev = NULL; - fileName[0] = '\0'; - hasbeensaved = 0; - } - - idCameraDef *GetCam() { - return( cam ); - } - int GetCamNum() { - return( camnum ); - } - - char *GetFileName() { - return( fileName ); - } - void SetFileName( const char *name, bool save ) { - strcpy( fileName, name ); - if( save ) - hasbeensaved = 1; - } - - CCamera *GetNext() { - return( next ); - } - - CCamera *GetPrev() { - return( prev ); - } - - void SetNext( CCamera *camera ) { - next = camera; - } - void SetPrev( CCamera *camera ) { - prev = camera; - } - - int HasBeenSaved() { - return( hasbeensaved ); +CCamera( int i ) { + cam = &camera[i]; + camnum = i; + Init(); +} +~CCamera(); + +void Init() { + next = prev = NULL; + fileName[0] = '\0'; + hasbeensaved = 0; +} + +idCameraDef *GetCam() { + return( cam ); +} +int GetCamNum() { + return( camnum ); +} + +char *GetFileName() { + return( fileName ); +} +void SetFileName( const char *name, bool save ) { + strcpy( fileName, name ); + if ( save ) { + hasbeensaved = 1; } - void HasBeenModified() { - if( hasbeensaved ) - hasbeensaved = 2; +} + +CCamera *GetNext() { + return( next ); +} + +CCamera *GetPrev() { + return( prev ); +} + +void SetNext( CCamera *camera ) { + next = camera; +} +void SetPrev( CCamera *camera ) { + prev = camera; +} + +int HasBeenSaved() { + return( hasbeensaved ); +} +void HasBeenModified() { + if ( hasbeensaved ) { + hasbeensaved = 2; } +} protected: - idCameraDef *cam; - int camnum; - CCamera *next, *prev; - char fileName[PATH_MAX]; - int hasbeensaved; // 0:never saved 1:saved 2:saved, but modified +idCameraDef *cam; +int camnum; +CCamera *next, *prev; +char fileName[PATH_MAX]; +int hasbeensaved; // 0:never saved 1:saved 2:saved, but modified }; CCamera *AllocCam(); diff --git a/contrib/camera/dialogs.cpp b/contrib/camera/dialogs.cpp index 40985b38..07677e30 100644 --- a/contrib/camera/dialogs.cpp +++ b/contrib/camera/dialogs.cpp @@ -1,28 +1,28 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ #include "camera.h" @@ -41,32 +41,29 @@ static GtkWidget *g_pTrackCamera = NULL; static GtkWidget *g_pCamName = NULL; static char *g_cNull = '\0'; -static gint ci_editmode_edit( GtkWidget *widget, gpointer data ) -{ +static gint ci_editmode_edit( GtkWidget *widget, gpointer data ){ g_iEditMode = 0; return TRUE; } -static gint ci_editmode_add( GtkWidget *widget, gpointer data ) -{ +static gint ci_editmode_add( GtkWidget *widget, gpointer data ){ g_iEditMode = 1; return TRUE; } /*static gint ci_delete_selected( GtkWidget *widget, gpointer data ) -{ - return TRUE; -} + { + return TRUE; + } -static gint ci_select_all( GtkWidget *widget, gpointer data ) -{ - return TRUE; -}*/ + static gint ci_select_all( GtkWidget *widget, gpointer data ) + { + return TRUE; + }*/ -static gint ci_new( GtkWidget *widget, gpointer data ) -{ +static gint ci_new( GtkWidget *widget, gpointer data ){ GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame; //, *name; GtkWidget *fixed, *interpolated, *spline; int ret, loop = 1; @@ -74,158 +71,157 @@ static gint ci_new( GtkWidget *widget, gpointer data ) // char buf[128]; // create the window - window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_window_set_title( GTK_WINDOW (window), "New Camera" ); - gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); - gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( window ), "New Camera" ); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); // fill the window vbox = gtk_vbox_new( FALSE, 5 ); - gtk_container_add (GTK_CONTAINER (window), vbox); + gtk_container_add( GTK_CONTAINER( window ), vbox ); gtk_widget_show( vbox ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - frame = gtk_frame_new( _("Type") ); - gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 ); - gtk_widget_show( frame ); + frame = gtk_frame_new( _( "Type" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 ); + gtk_widget_show( frame ); vbox2 = gtk_vbox_new( FALSE, 5 ); gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); - gtk_container_set_border_width( GTK_CONTAINER (vbox2), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 ); gtk_widget_show( vbox2 ); // -------------------------- // fixed = gtk_radio_button_new_with_label( targetTypeRadio, "Fixed" ); gtk_box_pack_start( GTK_BOX( vbox2 ), fixed, FALSE, FALSE, 3 ); - gtk_widget_show( fixed ); - targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) ); + gtk_widget_show( fixed ); + targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) ); interpolated = gtk_radio_button_new_with_label( targetTypeRadio, "Interpolated" ); gtk_box_pack_start( GTK_BOX( vbox2 ), interpolated, FALSE, FALSE, 3 ); - gtk_widget_show( interpolated ); - targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) ); + gtk_widget_show( interpolated ); + targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) ); spline = gtk_radio_button_new_with_label( targetTypeRadio, "Spline" ); gtk_box_pack_start( GTK_BOX( vbox2 ), spline, FALSE, FALSE, 3 ); - gtk_widget_show( spline ); - targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) ); + gtk_widget_show( spline ); + targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) ); - // -------------------------- // + // -------------------------- // - w = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_widget_show (w); + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 ); + gtk_widget_show( w ); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Ok" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_show( w ); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); ret = IDCANCEL; // -------------------------- // - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); bool dialogError = TRUE; - while (dialogError) { + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if( ret == IDOK ) { - if( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) ) + if ( ret == IDOK ) { + if ( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) ) { DoNewFixedCamera(); - else if( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) ) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) ) { DoNewInterpolatedCamera(); - else if( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) ) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) ) { DoNewSplineCamera(); + } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); - return TRUE; + return TRUE; } -static gint ci_load( GtkWidget *widget, gpointer data ) -{ - DoLoadCamera(); +static gint ci_load( GtkWidget *widget, gpointer data ){ + DoLoadCamera(); - return TRUE; + return TRUE; } -static gint ci_save( GtkWidget *widget, gpointer data ) -{ - DoSaveCamera(); +static gint ci_save( GtkWidget *widget, gpointer data ){ + DoSaveCamera(); - return TRUE; + return TRUE; } -static gint ci_unload( GtkWidget *widget, gpointer data ) -{ +static gint ci_unload( GtkWidget *widget, gpointer data ){ DoUnloadCamera(); return TRUE; } -static gint ci_apply( GtkWidget *widget, gpointer data ) -{ - if( GetCurrentCam() ) { +static gint ci_apply( GtkWidget *widget, gpointer data ){ + if ( GetCurrentCam() ) { const char *str; char buf[128]; bool build = false; - str = gtk_entry_get_text( GTK_ENTRY(g_pCamName) ); + str = gtk_entry_get_text( GTK_ENTRY( g_pCamName ) ); - if( str ) { + if ( str ) { GetCurrentCam()->GetCam()->setName( str ); build = true; } - str = gtk_entry_get_text( GTK_ENTRY(g_pSecondsEntry) ); + str = gtk_entry_get_text( GTK_ENTRY( g_pSecondsEntry ) ); - if( str ) { + if ( str ) { GetCurrentCam()->GetCam()->setBaseTime( atof( str ) ); build = true; } - if( build ) { + if ( build ) { GetCurrentCam()->GetCam()->buildCamera(); } sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getBaseTime() ); - gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), buf ); + gtk_entry_set_text( GTK_ENTRY( g_pSecondsEntry ), buf ); sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() ); gtk_label_set_text( g_pCurrentTime, "0.00" ); @@ -237,111 +233,113 @@ static gint ci_apply( GtkWidget *widget, gpointer data ) GetCurrentCam()->HasBeenModified(); } - return TRUE; + return TRUE; } -static gint ci_preview( GtkWidget *widget, gpointer data ) -{ - if( GetCurrentCam() ) { +static gint ci_preview( GtkWidget *widget, gpointer data ){ + if ( GetCurrentCam() ) { g_iPreviewRunning = 1; g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); } - return TRUE; + return TRUE; } -static gint ci_expose( GtkWidget *widget, gpointer data ) -{ - // start edit mode - DoStartEdit( GetCurrentCam() ); +static gint ci_expose( GtkWidget *widget, gpointer data ){ + // start edit mode + DoStartEdit( GetCurrentCam() ); - return FALSE; + return FALSE; } -static gint ci_close( GtkWidget *widget, gpointer data ) -{ - gtk_widget_hide( g_pCameraInspectorWnd ); +static gint ci_close( GtkWidget *widget, gpointer data ){ + gtk_widget_hide( g_pCameraInspectorWnd ); - // exit edit mode - DoStopEdit(); + // exit edit mode + DoStopEdit(); - return TRUE; + return TRUE; } static GtkWidget *g_pPathListCombo = NULL; static GtkLabel *g_pPathType = NULL; -static void RefreshPathListCombo( void ) -{ - if( !g_pPathListCombo ) - return; +static void RefreshPathListCombo( void ){ + if ( !g_pPathListCombo ) { + return; + } - GList *combo_list = (GList*)NULL; + GList *combo_list = (GList*)NULL; - if( GetCurrentCam() ) { - combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getPositionObj()->getName() ); - for( int i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) { - combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() ); - } - } else { + if ( GetCurrentCam() ) { + combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getPositionObj()->getName() ); + for ( int i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) { + combo_list = g_list_append( combo_list, (void *)GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() ); + } + } + else { // add one empty string make gtk be quiet combo_list = g_list_append( combo_list, (gpointer)g_cNull ); - } + } - gtk_combo_set_popdown_strings( GTK_COMBO( g_pPathListCombo ), combo_list ); - g_list_free( combo_list ); + gtk_combo_set_popdown_strings( GTK_COMBO( g_pPathListCombo ), combo_list ); + g_list_free( combo_list ); } -static gint ci_pathlist_changed( GtkWidget *widget, gpointer data ) -{ - const char *str = gtk_entry_get_text( GTK_ENTRY(widget) ); +static gint ci_pathlist_changed( GtkWidget *widget, gpointer data ){ + const char *str = gtk_entry_get_text( GTK_ENTRY( widget ) ); - if( !str || !GetCurrentCam() ) - return TRUE; + if ( !str || !GetCurrentCam() ) { + return TRUE; + } int i; - for( i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) { - if( !strcmp( str, GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() ) ) - break; - } - - if( i >= 0 && i < GetCurrentCam()->GetCam()->numTargets() ) { - GetCurrentCam()->GetCam()->setActiveTarget( i ); - - g_iActiveTarget = i; - if( g_pPathType ) - gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->typeStr() ); - } else { - g_iActiveTarget = -1; - if( g_pPathType ) + for ( i = 0; i < GetCurrentCam()->GetCam()->numTargets(); i++ ) { + if ( !strcmp( str, GetCurrentCam()->GetCam()->getActiveTarget( i )->getName() ) ) { + break; + } + } + + if ( i >= 0 && i < GetCurrentCam()->GetCam()->numTargets() ) { + GetCurrentCam()->GetCam()->setActiveTarget( i ); + + g_iActiveTarget = i; + if ( g_pPathType ) { + gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->typeStr() ); + } + } + else { + g_iActiveTarget = -1; + if ( g_pPathType ) { gtk_label_set_text( g_pPathType, GetCurrentCam()->GetCam()->getPositionObj()->typeStr() ); - } + } + } - // start edit mode - if( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) ) - DoStartEdit( GetCurrentCam() ); + // start edit mode + if ( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) ) { + DoStartEdit( GetCurrentCam() ); + } - return TRUE; + return TRUE; } -static void RefreshEventList( void ) -{ +static void RefreshEventList( void ){ int i; char buf[128]; // Clear events list - gtk_clist_freeze( GTK_CLIST(g_pEventsList) ); - gtk_clist_clear( GTK_CLIST(g_pEventsList) ); + gtk_clist_freeze( GTK_CLIST( g_pEventsList ) ); + gtk_clist_clear( GTK_CLIST( g_pEventsList ) ); - if( GetCurrentCam() ) { + if ( GetCurrentCam() ) { // Fill events list - for( i = 0; i < GetCurrentCam()->GetCam()->numEvents(); i++ ) { + for ( i = 0; i < GetCurrentCam()->GetCam()->numEvents(); i++ ) { char rowbuf[3][128], *row[3]; // FIXME: sort by time? - sprintf( rowbuf[0], "%li", GetCurrentCam()->GetCam()->getEvent(i)->getTime() ); row[0] = rowbuf[0]; - strncpy( rowbuf[1], GetCurrentCam()->GetCam()->getEvent(i)->typeStr(), sizeof(rowbuf[0]) ); row[1] = rowbuf[1]; - strncpy( rowbuf[2], GetCurrentCam()->GetCam()->getEvent(i)->getParam(), sizeof(rowbuf[1]) ); row[2] = rowbuf[2]; - gtk_clist_append( GTK_CLIST(g_pEventsList), row ); + sprintf( rowbuf[0], "%li", GetCurrentCam()->GetCam()->getEvent( i )->getTime() ); row[0] = rowbuf[0]; + strncpy( rowbuf[1], GetCurrentCam()->GetCam()->getEvent( i )->typeStr(), sizeof( rowbuf[0] ) ); row[1] = rowbuf[1]; + strncpy( rowbuf[2], GetCurrentCam()->GetCam()->getEvent( i )->getParam(), sizeof( rowbuf[1] ) ); row[2] = rowbuf[2]; + gtk_clist_append( GTK_CLIST( g_pEventsList ), row ); } // Total duration might have changed @@ -353,368 +351,378 @@ static void RefreshEventList( void ) g_pTimeLine->upper = ( GetCurrentCam()->GetCam()->getTotalTime() * 1000 ); } - gtk_clist_thaw( GTK_CLIST(g_pEventsList) ); + gtk_clist_thaw( GTK_CLIST( g_pEventsList ) ); } -static gint ci_rename( GtkWidget *widget, gpointer data ) -{ +static gint ci_rename( GtkWidget *widget, gpointer data ){ GtkWidget *window, *w, *vbox, *hbox, *name; int ret, loop = 1; - if( !GetCurrentCam() ) + if ( !GetCurrentCam() ) { return TRUE; + } // create the window - window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_window_set_title( GTK_WINDOW (window), "Rename Path" ); - gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); - gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( window ), "Rename Path" ); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize ( window ); + gtk_widget_realize( window ); // fill the window vbox = gtk_vbox_new( FALSE, 5 ); - gtk_container_add (GTK_CONTAINER (window), vbox); + gtk_container_add( GTK_CONTAINER( window ), vbox ); gtk_widget_show( vbox ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( "Name:" ); + w = gtk_label_new( "Name:" ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - name = gtk_entry_new(); - gtk_box_pack_start( GTK_BOX( hbox ), name, FALSE, FALSE, 0 ); - gtk_widget_show( name ); + name = gtk_entry_new(); + gtk_box_pack_start( GTK_BOX( hbox ), name, FALSE, FALSE, 0 ); + gtk_widget_show( name ); - if( g_iActiveTarget < 0 ) - gtk_entry_set_text( GTK_ENTRY(name), GetCurrentCam()->GetCam()->getPositionObj()->getName() ); - else - gtk_entry_set_text( GTK_ENTRY(name), GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->getName() ); + if ( g_iActiveTarget < 0 ) { + gtk_entry_set_text( GTK_ENTRY( name ), GetCurrentCam()->GetCam()->getPositionObj()->getName() ); + } + else{ + gtk_entry_set_text( GTK_ENTRY( name ), GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->getName() ); + } - // -------------------------- // + // -------------------------- // - w = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_widget_show (w); + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 ); + gtk_widget_show( w ); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Ok" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_show( w ); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); + w = gtk_button_new_with_label( "Cancel" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); ret = IDCANCEL; // -------------------------- // - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); bool dialogError = TRUE; - while (dialogError) { + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if( ret == IDOK ) { - const char *str = gtk_entry_get_text( GTK_ENTRY(name) ); + if ( ret == IDOK ) { + const char *str = gtk_entry_get_text( GTK_ENTRY( name ) ); - if( str && str[0] ) { + if ( str && str[0] ) { // Update the path - if( g_iActiveTarget < 0 ) + if ( g_iActiveTarget < 0 ) { GetCurrentCam()->GetCam()->getPositionObj()->setName( str ); - else - GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->setName( str ); + } + else{ + GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->setName( str ); + } GetCurrentCam()->GetCam()->buildCamera(); // Rebuild the listbox RefreshPathListCombo(); - } else { + } + else { dialogError = TRUE; } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); - return TRUE; + return TRUE; } -static gint ci_add_target( GtkWidget *widget, gpointer data ) -{ +static gint ci_add_target( GtkWidget *widget, gpointer data ){ GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame, *name; GtkWidget *fixed, *interpolated, *spline; int ret, loop = 1; GSList *targetTypeRadio = NULL; char buf[128]; - if( !GetCurrentCam() ) + if ( !GetCurrentCam() ) { return TRUE; + } // create the window - window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_window_set_title( GTK_WINDOW (window), "Add Target" ); - gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); - gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( window ), "Add Target" ); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); // fill the window vbox = gtk_vbox_new( FALSE, 5 ); - gtk_container_add (GTK_CONTAINER (window), vbox); + gtk_container_add( GTK_CONTAINER( window ), vbox ); gtk_widget_show( vbox ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( "Name:" ); + w = gtk_label_new( "Name:" ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - name = gtk_entry_new(); - gtk_box_pack_start( GTK_BOX( hbox ), name, TRUE, TRUE, 0 ); - gtk_widget_show( name ); + name = gtk_entry_new(); + gtk_box_pack_start( GTK_BOX( hbox ), name, TRUE, TRUE, 0 ); + gtk_widget_show( name ); sprintf( buf, "target%i", GetCurrentCam()->GetCam()->numTargets() + 1 ); - gtk_entry_set_text( GTK_ENTRY(name), buf ); + gtk_entry_set_text( GTK_ENTRY( name ), buf ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - frame = gtk_frame_new( _("Type") ); - gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 ); - gtk_widget_show( frame ); + frame = gtk_frame_new( _( "Type" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 ); + gtk_widget_show( frame ); vbox2 = gtk_vbox_new( FALSE, 5 ); gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); - gtk_container_set_border_width( GTK_CONTAINER (vbox2), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 ); gtk_widget_show( vbox2 ); // -------------------------- // - fixed = gtk_radio_button_new_with_label( targetTypeRadio, _("Fixed") ); + fixed = gtk_radio_button_new_with_label( targetTypeRadio, _( "Fixed" ) ); gtk_box_pack_start( GTK_BOX( vbox2 ), fixed, FALSE, FALSE, 3 ); - gtk_widget_show( fixed ); - targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) ); + gtk_widget_show( fixed ); + targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( fixed ) ); - interpolated = gtk_radio_button_new_with_label( targetTypeRadio, _("Interpolated") ); + interpolated = gtk_radio_button_new_with_label( targetTypeRadio, _( "Interpolated" ) ); gtk_box_pack_start( GTK_BOX( vbox2 ), interpolated, FALSE, FALSE, 3 ); - gtk_widget_show( interpolated ); - targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) ); + gtk_widget_show( interpolated ); + targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( interpolated ) ); - spline = gtk_radio_button_new_with_label( targetTypeRadio, _("Spline") ); + spline = gtk_radio_button_new_with_label( targetTypeRadio, _( "Spline" ) ); gtk_box_pack_start( GTK_BOX( vbox2 ), spline, FALSE, FALSE, 3 ); - gtk_widget_show( spline ); - targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) ); + gtk_widget_show( spline ); + targetTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( spline ) ); - // -------------------------- // + // -------------------------- // - w = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_widget_show (w); + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 ); + gtk_widget_show( w ); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_button_new_with_label (_("Ok")); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_show (w); + w = gtk_button_new_with_label( _( "Ok" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_show( w ); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); - w = gtk_button_new_with_label (_("Cancel")); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); + w = gtk_button_new_with_label( _( "Cancel" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); ret = IDCANCEL; // -------------------------- // - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); bool dialogError = TRUE; - while (dialogError) { + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if( ret == IDOK ) { - const char *str = gtk_entry_get_text( GTK_ENTRY(name) ); + if ( ret == IDOK ) { + const char *str = gtk_entry_get_text( GTK_ENTRY( name ) ); - if( str && str[0] ) { + if ( str && str[0] ) { int type; GList *li; - if( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) ) + if ( gtk_toggle_button_get_active( (GtkToggleButton*)fixed ) ) { type = 0; - else if( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) ) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)interpolated ) ) { type = 1; - else if( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) ) + } + else if ( gtk_toggle_button_get_active( (GtkToggleButton*)spline ) ) { type = 2; + } // Add the target - GetCurrentCam()->GetCam()->addTarget( str, static_cast(type) ); + GetCurrentCam()->GetCam()->addTarget( str, static_cast( type ) ); // Rebuild the listbox RefreshPathListCombo(); // Select the last item in the listbox - li = g_list_last( GTK_LIST(GTK_COMBO(g_pPathListCombo)->list)->children ); - gtk_list_select_child( GTK_LIST(GTK_COMBO(g_pPathListCombo)->list), GTK_WIDGET (li->data) ); + li = g_list_last( GTK_LIST( GTK_COMBO( g_pPathListCombo )->list )->children ); + gtk_list_select_child( GTK_LIST( GTK_COMBO( g_pPathListCombo )->list ), GTK_WIDGET( li->data ) ); // If this was the first one, refresh the event list - if( GetCurrentCam()->GetCam()->numTargets() == 1 ) { + if ( GetCurrentCam()->GetCam()->numTargets() == 1 ) { RefreshEventList(); } // Go to editmode Add - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_pEditModeAddRadioButton ), TRUE ); - } else { + } + else { dialogError = TRUE; } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); - return TRUE; + return TRUE; } static GtkWidget *g_pCamListCombo = NULL; static GtkLabel *g_pCamType = NULL; -void RefreshCamListCombo( void ) -{ - if( !g_pCamListCombo ) - return; +void RefreshCamListCombo( void ){ + if ( !g_pCamListCombo ) { + return; + } - GList *combo_list = (GList*)NULL; - CCamera *combo_cam = firstCam; - if( combo_cam ) { - while( combo_cam ) { + GList *combo_list = (GList*)NULL; + CCamera *combo_cam = firstCam; + if ( combo_cam ) { + while ( combo_cam ) { //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() ); //if( combo_cam->HasBeenSaved() ) { - combo_list = g_list_append( combo_list, (void *)combo_cam->GetFileName() ); + combo_list = g_list_append( combo_list, (void *)combo_cam->GetFileName() ); /*} else { - char buf[128]; - sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() ); - combo_list = g_list_append( combo_list, (void *)buf ); + char buf[128]; + sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() ); + combo_list = g_list_append( combo_list, (void *)buf ); - //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() ); // FIXME: this requires camera.dll to create unique names for new cams - }*/ + //combo_list = g_list_append( combo_list, (void *)combo_cam->GetCam()->getName() ); // FIXME: this requires camera.dll to create unique names for new cams + }*/ combo_cam = combo_cam->GetNext(); } - }else { + } + else { // add one empty string make gtk be quiet combo_list = g_list_append( combo_list, (gpointer)g_cNull ); } - gtk_combo_set_popdown_strings( GTK_COMBO( g_pCamListCombo ), combo_list ); - g_list_free( combo_list ); - - // select our current entry in the list - if( GetCurrentCam() ) { - // stop editing on the current cam - //GetCurrentCam()->GetCam()->stopEdit(); // FIXME: this crashed on creating new cameras, why is it here? - - GList *li = GTK_LIST( GTK_COMBO(g_pCamListCombo)->list)->children; - combo_cam = firstCam; - while( li && combo_cam ) { - if( combo_cam == GetCurrentCam() ) { - gtk_list_select_child( GTK_LIST( GTK_COMBO(g_pCamListCombo)->list ), GTK_WIDGET( li->data ) ); - break; - } - li = li->next; - combo_cam = combo_cam->GetNext(); - } - } - - RefreshPathListCombo(); + gtk_combo_set_popdown_strings( GTK_COMBO( g_pCamListCombo ), combo_list ); + g_list_free( combo_list ); + + // select our current entry in the list + if ( GetCurrentCam() ) { + // stop editing on the current cam + //GetCurrentCam()->GetCam()->stopEdit(); // FIXME: this crashed on creating new cameras, why is it here? + + GList *li = GTK_LIST( GTK_COMBO( g_pCamListCombo )->list )->children; + combo_cam = firstCam; + while ( li && combo_cam ) { + if ( combo_cam == GetCurrentCam() ) { + gtk_list_select_child( GTK_LIST( GTK_COMBO( g_pCamListCombo )->list ), GTK_WIDGET( li->data ) ); + break; + } + li = li->next; + combo_cam = combo_cam->GetNext(); + } + } + + RefreshPathListCombo(); } -static gint ci_camlist_changed( GtkWidget *widget, gpointer data ) -{ - const char *str = gtk_entry_get_text( GTK_ENTRY(widget) ); +static gint ci_camlist_changed( GtkWidget *widget, gpointer data ){ + const char *str = gtk_entry_get_text( GTK_ENTRY( widget ) ); - CCamera *combo_cam = firstCam; - while( str && combo_cam ) { - //if( !strcmp( str, combo_cam->GetCam()->getName() ) ) + CCamera *combo_cam = firstCam; + while ( str && combo_cam ) { + //if( !strcmp( str, combo_cam->GetCam()->getName() ) ) //if( combo_cam->HasBeenSaved() ) { - if( !strcmp( str, combo_cam->GetFileName() ) ) - break; + if ( !strcmp( str, combo_cam->GetFileName() ) ) { + break; + } /*} else { - char buf[128]; - sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() ); - if( !strcmp( str, buf ) ) - //if( !strcmp( str, combo_cam->GetCam()->getName() ) ) - break; - }*/ - - combo_cam = combo_cam->GetNext(); - } + char buf[128]; + sprintf( buf, "Unsaved Camera %i", combo_cam->GetCamNum() ); + if( !strcmp( str, buf ) ) + //if( !strcmp( str, combo_cam->GetCam()->getName() ) ) + break; + }*/ + + combo_cam = combo_cam->GetNext(); + } - SetCurrentCam( combo_cam ); + SetCurrentCam( combo_cam ); - if( g_pCamType ) { - if( GetCurrentCam() ) { + if ( g_pCamType ) { + if ( GetCurrentCam() ) { // Fill in our widgets fields for this camera char buf[128]; // Set Name - gtk_entry_set_text( GTK_ENTRY(g_pCamName), GetCurrentCam()->GetCam()->getName() ); + gtk_entry_set_text( GTK_ENTRY( g_pCamName ), GetCurrentCam()->GetCam()->getName() ); // Set type gtk_label_set_text( g_pCamType, GetCurrentCam()->GetCam()->getPositionObj()->typeStr() ); // Set duration sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getBaseTime() ); - gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), buf ); + gtk_entry_set_text( GTK_ENTRY( g_pSecondsEntry ), buf ); sprintf( buf, "%.2f", GetCurrentCam()->GetCam()->getTotalTime() ); gtk_label_set_text( g_pCurrentTime, "0.00" ); @@ -722,15 +730,16 @@ static gint ci_camlist_changed( GtkWidget *widget, gpointer data ) gtk_adjustment_set_value( g_pTimeLine, 0.f ); g_pTimeLine->upper = GetCurrentCam()->GetCam()->getTotalTime() * 1000; - } else { + } + else { // Set Name - gtk_entry_set_text( GTK_ENTRY(g_pCamName), "" ); + gtk_entry_set_text( GTK_ENTRY( g_pCamName ), "" ); // Set type gtk_label_set_text( g_pCamType, "" ); // Set duration - gtk_entry_set_text( GTK_ENTRY(g_pSecondsEntry), "30.00" ); + gtk_entry_set_text( GTK_ENTRY( g_pSecondsEntry ), "30.00" ); gtk_label_set_text( g_pCurrentTime, "0.00" ); gtk_label_set_text( g_pTotalTime, "30.00" ); @@ -743,220 +752,222 @@ static gint ci_camlist_changed( GtkWidget *widget, gpointer data ) RefreshEventList(); } - RefreshPathListCombo(); + RefreshPathListCombo(); - // start edit mode - g_iActiveTarget = -1; - if( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) ) - DoStartEdit( GetCurrentCam() ); + // start edit mode + g_iActiveTarget = -1; + if ( g_pCameraInspectorWnd && GTK_WIDGET_VISIBLE( g_pCameraInspectorWnd ) ) { + DoStartEdit( GetCurrentCam() ); + } - return TRUE; + return TRUE; } enum camEventType { EVENT_NA = 0x00, - EVENT_WAIT, // - EVENT_TARGETWAIT, // - EVENT_SPEED, // - EVENT_TARGET, // char(name) - EVENT_SNAPTARGET, // - EVENT_FOV, // int(time), int(targetfov) - EVENT_CMD, // - EVENT_TRIGGER, // - EVENT_STOP, // - EVENT_CAMERA, // - EVENT_FADEOUT, // int(time) - EVENT_FADEIN, // int(time) - EVENT_FEATHER, // + EVENT_WAIT, // + EVENT_TARGETWAIT, // + EVENT_SPEED, // + EVENT_TARGET, // char(name) + EVENT_SNAPTARGET, // + EVENT_FOV, // int(time), int(targetfov) + EVENT_CMD, // + EVENT_TRIGGER, // + EVENT_STOP, // + EVENT_CAMERA, // + EVENT_FADEOUT, // int(time) + EVENT_FADEIN, // int(time) + EVENT_FEATHER, // EVENT_COUNT }; // { requires parameters, enabled } const bool camEventFlags[][2] = { - { false, false }, - { false, true }, - { false, false }, - { false, false }, - { true, true }, - { false, false }, - { true, true }, - { false, false }, - { false, false }, - { false, true }, - { true, true }, - { true, true }, - { true, true }, - { false, true }, + { false, false }, + { false, true }, + { false, false }, + { false, false }, + { true, true }, + { false, false }, + { true, true }, + { false, false }, + { false, false }, + { false, true }, + { true, true }, + { true, true }, + { true, true }, + { false, true }, }; const char *camEventStr[] = { - N_("n/a"), - N_("Wait"), - N_("Target wait"), - N_("Speed"), - N_("Change Target "), - N_("Snap Target"), - N_("FOV "), - N_("Run Script"), - N_("Trigger"), - N_("Stop"), - N_("Change to Camera (or "), - N_("Fade Out "), - N_("Fade In "), - N_("Feather") + N_( "n/a" ), + N_( "Wait" ), + N_( "Target wait" ), + N_( "Speed" ), + N_( "Change Target " ), + N_( "Snap Target" ), + N_( "FOV " ), + N_( "Run Script" ), + N_( "Trigger" ), + N_( "Stop" ), + N_( "Change to Camera (or " ), + N_( "Fade Out " ), + N_( "Fade In " ), + N_( "Feather" ) }; -static gint ci_add( GtkWidget *widget, gpointer data ) -{ +static gint ci_add( GtkWidget *widget, gpointer data ){ GtkWidget *window, *w, *vbox, *vbox2, *hbox, *frame, *parameters; GtkWidget *eventWidget[EVENT_COUNT]; int i, ret, loop = 1; GSList *eventTypeRadio = NULL; // char buf[128]; - if( !GetCurrentCam() ) + if ( !GetCurrentCam() ) { return TRUE; + } // create the window - window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_window_set_title( GTK_WINDOW (window), _("Add Event") ); - gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); - gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( window ), _( "Add Event" ) ); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pCameraInspectorWnd ) ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); // fill the window vbox = gtk_vbox_new( FALSE, 5 ); - gtk_container_add (GTK_CONTAINER (window), vbox); + gtk_container_add( GTK_CONTAINER( window ), vbox ); gtk_widget_show( vbox ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - frame = gtk_frame_new( _("Type") ); - gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 ); - gtk_widget_show( frame ); + frame = gtk_frame_new( _( "Type" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), frame, TRUE, TRUE, 0 ); + gtk_widget_show( frame ); vbox2 = gtk_vbox_new( FALSE, 5 ); gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); - gtk_container_set_border_width( GTK_CONTAINER (vbox2), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 ); gtk_widget_show( vbox2 ); // -------------------------- // - for( i = 1; i < EVENT_COUNT; i++ ) { + for ( i = 1; i < EVENT_COUNT; i++ ) { eventWidget[i] = gtk_radio_button_new_with_label( eventTypeRadio, camEventStr[i] ); gtk_box_pack_start( GTK_BOX( vbox2 ), eventWidget[i], FALSE, FALSE, 3 ); gtk_widget_show( eventWidget[i] ); eventTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( eventWidget[i] ) ); - if( camEventFlags[i][1] == false ) - gtk_widget_set_sensitive (eventWidget[i], FALSE); + if ( camEventFlags[i][1] == false ) { + gtk_widget_set_sensitive( eventWidget[i], FALSE ); + } } - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( _("Parameters:") ); + w = gtk_label_new( _( "Parameters:" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - parameters = gtk_entry_new(); - gtk_box_pack_start( GTK_BOX( hbox ), parameters, TRUE, TRUE, 0 ); - gtk_widget_show( parameters ); + parameters = gtk_entry_new(); + gtk_box_pack_start( GTK_BOX( hbox ), parameters, TRUE, TRUE, 0 ); + gtk_widget_show( parameters ); - // -------------------------- // + // -------------------------- // - w = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_widget_show (w); + w = gtk_hseparator_new(); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 2 ); + gtk_widget_show( w ); // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_button_new_with_label (_("Ok")); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_show (w); + w = gtk_button_new_with_label( _( "Ok" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_show( w ); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); - w = gtk_button_new_with_label (_("Cancel")); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_show (w); + w = gtk_button_new_with_label( _( "Cancel" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_show( w ); ret = IDCANCEL; // -------------------------- // - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); bool dialogError = TRUE; - while (dialogError) { + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); + while ( loop ) + gtk_main_iteration(); dialogError = FALSE; - if( ret == IDOK ) { - const char *str = gtk_entry_get_text( GTK_ENTRY(parameters) ); + if ( ret == IDOK ) { + const char *str = gtk_entry_get_text( GTK_ENTRY( parameters ) ); - if( !camEventFlags[i][0] || ( str && str[0] ) ) { + if ( !camEventFlags[i][0] || ( str && str[0] ) ) { int type = 0; // GList *li; - for( type = 1; type < EVENT_COUNT; type++ ) { - if( gtk_toggle_button_get_active( (GtkToggleButton*)eventWidget[type] ) ) + for ( type = 1; type < EVENT_COUNT; type++ ) { + if ( gtk_toggle_button_get_active( (GtkToggleButton*)eventWidget[type] ) ) { break; + } } // Add the event - GetCurrentCam()->GetCam()->addEvent( static_cast(type), str, (long)(g_pTimeLine->value) ); + GetCurrentCam()->GetCam()->addEvent( static_cast( type ), str, (long)( g_pTimeLine->value ) ); // Refresh event list RefreshEventList(); - } else { + } + else { dialogError = TRUE; } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + gtk_widget_destroy( window ); - return TRUE; + return TRUE; } -static gint ci_del( GtkWidget *widget, gpointer data ) -{ +static gint ci_del( GtkWidget *widget, gpointer data ){ // TODO: add support to splines lib - if( GetCurrentCam() && GTK_CLIST(g_pEventsList)->focus_row >= 0 ) { - GetCurrentCam()->GetCam()->removeEvent( GTK_CLIST(g_pEventsList)->focus_row ); + if ( GetCurrentCam() && GTK_CLIST( g_pEventsList )->focus_row >= 0 ) { + GetCurrentCam()->GetCam()->removeEvent( GTK_CLIST( g_pEventsList )->focus_row ); // Refresh event list RefreshEventList(); } - return TRUE; + return TRUE; } -static gint ci_timeline_changed( GtkAdjustment *adjustment ) -{ +static gint ci_timeline_changed( GtkAdjustment *adjustment ){ char buf[128]; sprintf( buf, "%.2f", adjustment->value / 1000.f ); @@ -965,391 +976,383 @@ static gint ci_timeline_changed( GtkAdjustment *adjustment ) // FIXME: this will never work completely perfect. Startcamera calls buildcamera, which sets all events to 'nottriggered'. // So if you have a wait at the end of the path, this will go to nontriggered immediately when you go over it and the camera // will have no idea where on the track it should be. - if( GetCurrentCam() && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(g_pTrackCamera) ) ) { + if ( GetCurrentCam() && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( g_pTrackCamera ) ) ) { float fov; - vec3_t origin = { 0.0f, 0.0f, 0.0f }, dir = { 0.0f, 0.0f, 0.0f}, angles; + vec3_t origin = { 0.0f, 0.0f, 0.0f }, dir = { 0.0f, 0.0f, 0.0f}, angles; - GetCurrentCam()->GetCam()->startCamera( 0 ); + GetCurrentCam()->GetCam()->startCamera( 0 ); - GetCurrentCam()->GetCam()->getCameraInfo( (long)(adjustment->value), &origin[0], &dir[0], &fov ); - VectorSet( angles, asin (dir[2])*180/3.14159, atan2 (dir[1], dir[0])*180/3.14159, 0 ); + GetCurrentCam()->GetCam()->getCameraInfo( (long)( adjustment->value ), &origin[0], &dir[0], &fov ); + VectorSet( angles, asin( dir[2] ) * 180 / 3.14159, atan2( dir[1], dir[0] ) * 180 / 3.14159, 0 ); g_CameraTable.m_pfnSetCamera( origin, angles ); } return TRUE; } -GtkWidget *CreateCameraInspectorDialog( void ) -{ - GtkWidget *window, *w, *vbox, *hbox, *table, *frame; +GtkWidget *CreateCameraInspectorDialog( void ){ + GtkWidget *window, *w, *vbox, *hbox, *table, *frame; - // create the window - window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_window_set_title( GTK_WINDOW (window), _("Camera Inspector") ); - gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC( ci_close ), NULL ); - gtk_signal_connect( GTK_OBJECT (window), "expose_event", GTK_SIGNAL_FUNC( ci_expose ), NULL ); + // create the window + window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( window ), _( "Camera Inspector" ) ); + gtk_signal_connect( GTK_OBJECT( window ), "delete_event", GTK_SIGNAL_FUNC( ci_close ), NULL ); + gtk_signal_connect( GTK_OBJECT( window ), "expose_event", GTK_SIGNAL_FUNC( ci_expose ), NULL ); // gtk_signal_connect( GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); - gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pRadiantWnd ) ); + gtk_window_set_transient_for( GTK_WINDOW( window ), GTK_WINDOW( g_pRadiantWnd ) ); - // don't use show, as you don't want to have it displayed on startup ;-) - gtk_widget_realize( window ); + // don't use show, as you don't want to have it displayed on startup ;-) + gtk_widget_realize( window ); - // fill the window + // fill the window - // the table - // -------------------------- // + // the table + // -------------------------- // - table = gtk_table_new( 3, 2, FALSE ); - gtk_widget_show( table ); - gtk_container_add( GTK_CONTAINER( window ), table ); - gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); - gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); - gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + table = gtk_table_new( 3, 2, FALSE ); + gtk_widget_show( table ); + gtk_container_add( GTK_CONTAINER( window ), table ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); - // the properties column + // the properties column // -------------------------- // vbox = gtk_vbox_new( FALSE, 5 ); gtk_widget_show( vbox ); - gtk_table_attach( GTK_TABLE( table ), vbox, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0 ); + gtk_table_attach( GTK_TABLE( table ), vbox, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( _("File:") ); + w = gtk_label_new( _( "File:" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - g_pCamListCombo = gtk_combo_new(); - gtk_box_pack_start (GTK_BOX( hbox ), g_pCamListCombo, TRUE, TRUE, 0); - gtk_widget_show( g_pCamListCombo ); + g_pCamListCombo = gtk_combo_new(); + gtk_box_pack_start( GTK_BOX( hbox ), g_pCamListCombo, TRUE, TRUE, 0 ); + gtk_widget_show( g_pCamListCombo ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( _("Name:") ); + w = gtk_label_new( _( "Name:" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - g_pCamName = gtk_entry_new(); - gtk_box_pack_start( GTK_BOX( hbox ), g_pCamName, FALSE, FALSE, 0 ); - gtk_widget_show( g_pCamName ); + g_pCamName = gtk_entry_new(); + gtk_box_pack_start( GTK_BOX( hbox ), g_pCamName, FALSE, FALSE, 0 ); + gtk_widget_show( g_pCamName ); - w = gtk_label_new( _("Type:") ); + w = gtk_label_new( _( "Type:" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - w = gtk_label_new( "" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_label_new( "" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); g_pCamType = GTK_LABEL( w ); - RefreshCamListCombo(); + RefreshCamListCombo(); - gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO(g_pCamListCombo)->entry ), FALSE ); - gtk_signal_connect( GTK_OBJECT(GTK_COMBO(g_pCamListCombo)->entry), "changed", GTK_SIGNAL_FUNC( ci_camlist_changed ), NULL ); + gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO( g_pCamListCombo )->entry ), FALSE ); + gtk_signal_connect( GTK_OBJECT( GTK_COMBO( g_pCamListCombo )->entry ), "changed", GTK_SIGNAL_FUNC( ci_camlist_changed ), NULL ); - // -------------------------- // + // -------------------------- // - frame = gtk_frame_new( _("Path and Target editing") ); - gtk_widget_show( frame ); - gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0 ); + frame = gtk_frame_new( _( "Path and Target editing" ) ); + gtk_widget_show( frame ); + gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); vbox = gtk_vbox_new( FALSE, 5 ); gtk_container_add( GTK_CONTAINER( frame ), vbox ); - gtk_container_set_border_width( GTK_CONTAINER (vbox), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); gtk_widget_show( vbox ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( _("Edit:") ); + w = gtk_label_new( _( "Edit:" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - g_pPathListCombo = gtk_combo_new(); - gtk_box_pack_start (GTK_BOX( hbox ), g_pPathListCombo, TRUE, TRUE, 0); - gtk_widget_show( g_pPathListCombo ); + g_pPathListCombo = gtk_combo_new(); + gtk_box_pack_start( GTK_BOX( hbox ), g_pPathListCombo, TRUE, TRUE, 0 ); + gtk_widget_show( g_pPathListCombo ); - RefreshPathListCombo(); + RefreshPathListCombo(); - gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO(g_pPathListCombo)->entry ), FALSE ); - gtk_signal_connect( GTK_OBJECT(GTK_COMBO(g_pPathListCombo)->entry), "changed", GTK_SIGNAL_FUNC( ci_pathlist_changed ), NULL ); + gtk_entry_set_editable( GTK_ENTRY( GTK_COMBO( g_pPathListCombo )->entry ), FALSE ); + gtk_signal_connect( GTK_OBJECT( GTK_COMBO( g_pPathListCombo )->entry ), "changed", GTK_SIGNAL_FUNC( ci_pathlist_changed ), NULL ); - // -------------------------- // + // -------------------------- // - hbox = gtk_hbox_new( FALSE, 5 ); + hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - g_pEditModeEditRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, _("Edit Points") ); + g_pEditModeEditRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, _( "Edit Points" ) ); gtk_box_pack_start( GTK_BOX( hbox ), g_pEditModeEditRadioButton, FALSE, FALSE, 3 ); - gtk_widget_show( g_pEditModeEditRadioButton ); - g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeEditRadioButton ) ); + gtk_widget_show( g_pEditModeEditRadioButton ); + g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeEditRadioButton ) ); gtk_signal_connect( GTK_OBJECT( g_pEditModeEditRadioButton ), "clicked", GTK_SIGNAL_FUNC( ci_editmode_edit ), NULL ); - g_pEditModeAddRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, _("Add Points") ); + g_pEditModeAddRadioButton = gtk_radio_button_new_with_label( g_pEditTypeRadio, _( "Add Points" ) ); gtk_box_pack_start( GTK_BOX( hbox ), g_pEditModeAddRadioButton, FALSE, FALSE, 3 ); - gtk_widget_show( g_pEditModeAddRadioButton ); - g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeAddRadioButton ) ); + gtk_widget_show( g_pEditModeAddRadioButton ); + g_pEditTypeRadio = gtk_radio_button_group( GTK_RADIO_BUTTON( g_pEditModeAddRadioButton ) ); gtk_signal_connect( GTK_OBJECT( g_pEditModeAddRadioButton ), "clicked", GTK_SIGNAL_FUNC( ci_editmode_add ), NULL ); // see if we should use a different default - if( g_iEditMode == 1 ) { + if ( g_iEditMode == 1 ) { // Go to editmode Add - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_pEditModeAddRadioButton ), TRUE ); } - w = gtk_label_new( _("Type:") ); + w = gtk_label_new( _( "Type:" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - w = gtk_label_new( "" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_label_new( "" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); g_pPathType = GTK_LABEL( w ); - // -------------------------- // + // -------------------------- // hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_button_new_with_label( _("Rename...") ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0); + w = gtk_button_new_with_label( _( "Rename..." ) ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_rename ), NULL ); gtk_widget_show( w ); - w = gtk_button_new_with_label( _("Add Target...") ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0); + w = gtk_button_new_with_label( _( "Add Target..." ) ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_add_target ), NULL ); gtk_widget_show( w ); // not available in splines library /*w = gtk_button_new_with_label( "Delete Selected" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_delete_selected ), NULL ); - gtk_widget_show( w ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_delete_selected ), NULL ); + gtk_widget_show( w ); - w = gtk_button_new_with_label( "Select All" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_select_all ), NULL ); - gtk_widget_show( w );*/ + w = gtk_button_new_with_label( "Select All" ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, TRUE, 0); + gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_select_all ), NULL ); + gtk_widget_show( w );*/ - // -------------------------- // + // -------------------------- // - frame = gtk_frame_new( _("Time") ); - gtk_widget_show( frame ); - gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 2, 3, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0 ); + frame = gtk_frame_new( _( "Time" ) ); + gtk_widget_show( frame ); + gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 2, 3, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); vbox = gtk_vbox_new( FALSE, 5 ); gtk_container_add( GTK_CONTAINER( frame ), vbox ); - gtk_container_set_border_width( GTK_CONTAINER (vbox), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); gtk_widget_show( vbox ); - // -------------------------- // + // -------------------------- // - hbox = gtk_hbox_new( FALSE, 5 ); + hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( _("Length (seconds):") ); + w = gtk_label_new( _( "Length (seconds):" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - g_pSecondsEntry = gtk_entry_new(); - gtk_box_pack_start( GTK_BOX( hbox ), g_pSecondsEntry, FALSE, FALSE, 0 ); - gtk_widget_show( g_pSecondsEntry ); + g_pSecondsEntry = gtk_entry_new(); + gtk_box_pack_start( GTK_BOX( hbox ), g_pSecondsEntry, FALSE, FALSE, 0 ); + gtk_widget_show( g_pSecondsEntry ); - // -------------------------- // + // -------------------------- // - hbox = gtk_hbox_new( FALSE, 5 ); + hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( _("Current Time:") ); + w = gtk_label_new( _( "Current Time:" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - w = gtk_label_new( _("0.00") ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_label_new( _( "0.00" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); g_pCurrentTime = GTK_LABEL( w ); - w = gtk_label_new( _(" of ") ); + w = gtk_label_new( _( " of " ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - w = gtk_label_new( _("0.00") ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = gtk_label_new( _( "0.00" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); g_pTotalTime = GTK_LABEL( w ); - // -------------------------- // + // -------------------------- // - hbox = gtk_hbox_new( FALSE, 5 ); + hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); g_pTimeLine = GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 30000, 100, 250, 0 ) ); - gtk_signal_connect( GTK_OBJECT(g_pTimeLine), "value_changed", GTK_SIGNAL_FUNC( ci_timeline_changed ), NULL ); - w = gtk_hscale_new( g_pTimeLine ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); - gtk_widget_show( w ); - gtk_scale_set_draw_value( GTK_SCALE( w ), FALSE ); + gtk_signal_connect( GTK_OBJECT( g_pTimeLine ), "value_changed", GTK_SIGNAL_FUNC( ci_timeline_changed ), NULL ); + w = gtk_hscale_new( g_pTimeLine ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_widget_show( w ); + gtk_scale_set_draw_value( GTK_SCALE( w ), FALSE ); - // -------------------------- // + // -------------------------- // - hbox = gtk_hbox_new( FALSE, 5 ); + hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - g_pTrackCamera = gtk_check_button_new_with_label( _("Track Camera") ); - gtk_box_pack_start( GTK_BOX( hbox ), g_pTrackCamera, FALSE, FALSE, 0 ); - gtk_widget_show( g_pTrackCamera ); + g_pTrackCamera = gtk_check_button_new_with_label( _( "Track Camera" ) ); + gtk_box_pack_start( GTK_BOX( hbox ), g_pTrackCamera, FALSE, FALSE, 0 ); + gtk_widget_show( g_pTrackCamera ); - // -------------------------- // + // -------------------------- // - hbox = gtk_hbox_new( FALSE, 5 ); + hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( _("Events:") ); + w = gtk_label_new( _( "Events:" ) ); gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - // -------------------------- // + // -------------------------- // - hbox = gtk_hbox_new( FALSE, 5 ); + hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_scrolled_window_new( NULL, NULL ); - gtk_widget_set_usize( w, 0, 150 ); - gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); - gtk_widget_show( w ); - - g_pEventsList = gtk_clist_new( 3 ); - gtk_container_add( GTK_CONTAINER(w), g_pEventsList); - //gtk_signal_connect( GTK_OBJECT(g_pEventsList), "select_row", GTK_SIGNAL_FUNC (proplist_select_row), NULL); - gtk_clist_set_selection_mode( GTK_CLIST(g_pEventsList), GTK_SELECTION_BROWSE ); - gtk_clist_column_titles_hide( GTK_CLIST(g_pEventsList) ); - gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 0, TRUE ); - gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 1, TRUE ); - gtk_clist_set_column_auto_resize( GTK_CLIST(g_pEventsList), 2, TRUE ); + w = gtk_scrolled_window_new( NULL, NULL ); + gtk_widget_set_usize( w, 0, 150 ); + gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); + gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); + gtk_widget_show( w ); + + g_pEventsList = gtk_clist_new( 3 ); + gtk_container_add( GTK_CONTAINER( w ), g_pEventsList ); + //gtk_signal_connect( GTK_OBJECT(g_pEventsList), "select_row", GTK_SIGNAL_FUNC (proplist_select_row), NULL); + gtk_clist_set_selection_mode( GTK_CLIST( g_pEventsList ), GTK_SELECTION_BROWSE ); + gtk_clist_column_titles_hide( GTK_CLIST( g_pEventsList ) ); + gtk_clist_set_column_auto_resize( GTK_CLIST( g_pEventsList ), 0, TRUE ); + gtk_clist_set_column_auto_resize( GTK_CLIST( g_pEventsList ), 1, TRUE ); + gtk_clist_set_column_auto_resize( GTK_CLIST( g_pEventsList ), 2, TRUE ); gtk_widget_show( g_pEventsList ); - vbox = gtk_vbox_new( FALSE, 5 ); + vbox = gtk_vbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( hbox ), vbox, FALSE, FALSE, 0 ); gtk_widget_show( vbox ); - w = gtk_button_new_with_label( _("Add...") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "Add..." ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_add ), NULL ); gtk_widget_show( w ); - w = gtk_button_new_with_label( _("Del") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "Del" ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_del ), NULL ); gtk_widget_show( w ); - // -------------------------- // - - /*/ - | - | - | - */ - - // the buttons column - // -------------------------- // + // -------------------------- // + // the buttons column + // -------------------------- // - vbox = gtk_vbox_new( FALSE, 5 ); + vbox = gtk_vbox_new( FALSE, 5 ); gtk_widget_show( vbox ); - gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0 ); + gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); - w = gtk_button_new_with_label( _("New...") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "New..." ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_new ), NULL ); gtk_widget_show( w ); - w = gtk_button_new_with_label( _("Load...") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "Load..." ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_load ), NULL ); gtk_widget_show( w ); - // -------------------------- // + // -------------------------- // - vbox = gtk_vbox_new( FALSE, 5 ); + vbox = gtk_vbox_new( FALSE, 5 ); gtk_widget_show( vbox ); - gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0 ); + gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); - w = gtk_button_new_with_label( _("Save...") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "Save..." ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_save ), NULL ); gtk_widget_show( w ); - w = gtk_button_new_with_label( _("Unload") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "Unload" ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_unload ), NULL ); gtk_widget_show( w ); - hbox = gtk_hbox_new( FALSE, 5 ); + hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 ); gtk_widget_show( hbox ); - w = gtk_button_new_with_label( _("Apply") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "Apply" ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_apply ), NULL ); gtk_widget_show( w ); - w = gtk_button_new_with_label( _("Preview") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "Preview" ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_preview ), NULL ); gtk_widget_show( w ); - // -------------------------- // + // -------------------------- // - vbox = gtk_vbox_new( FALSE, 5 ); + vbox = gtk_vbox_new( FALSE, 5 ); gtk_widget_show( vbox ); - gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0 ); + gtk_table_attach( GTK_TABLE( table ), vbox, 1, 2, 2, 3, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); hbox = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 ); gtk_widget_show( hbox ); - w = gtk_button_new_with_label( _("Close") ); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0); + w = gtk_button_new_with_label( _( "Close" ) ); + gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( ci_close ), NULL ); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); gtk_widget_grab_default( w ); gtk_widget_show( w ); - // -------------------------- // + // -------------------------- // - return window; + return window; } diff --git a/contrib/camera/dialogs.h b/contrib/camera/dialogs.h index 93dbce1d..9f543785 100644 --- a/contrib/camera/dialogs.h +++ b/contrib/camera/dialogs.h @@ -1,36 +1,36 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ struct TwinWidget { - GtkWidget* one; - GtkWidget* two; + GtkWidget* one; + GtkWidget* two; }; -void dialog_button_callback (GtkWidget *widget, gpointer data); -gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data); +void dialog_button_callback( GtkWidget *widget, gpointer data ); +gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ); //void dialog_button_callback_settex (GtkWidget *widget, gpointer data); void RefreshCamListCombo( void ); diff --git a/contrib/camera/dialogs_common.cpp b/contrib/camera/dialogs_common.cpp index d55e5f0a..e9d019fd 100644 --- a/contrib/camera/dialogs_common.cpp +++ b/contrib/camera/dialogs_common.cpp @@ -1,50 +1,48 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ #include "camera.h" -void dialog_button_callback (GtkWidget *widget, gpointer data) -{ +void dialog_button_callback( GtkWidget *widget, gpointer data ){ GtkWidget *parent; int *loop, *ret; - - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - ret = (int*)g_object_get_data (G_OBJECT (parent), "ret"); - + + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" ); + *loop = 0; - *ret = GPOINTER_TO_INT (data); + *ret = GPOINTER_TO_INT( data ); } -gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data) -{ +gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){ int *loop; - - gtk_widget_hide (widget); - loop = (int*)g_object_get_data (G_OBJECT (widget), "loop"); + + gtk_widget_hide( widget ); + loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" ); *loop = 0; return TRUE; diff --git a/contrib/camera/funchandlers.cpp b/contrib/camera/funchandlers.cpp index 6423d399..8f568877 100644 --- a/contrib/camera/funchandlers.cpp +++ b/contrib/camera/funchandlers.cpp @@ -1,47 +1,45 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ #include "camera.h" extern GtkWidget *g_pEditModeAddRadioButton; -char* Q_realpath(const char *path, char *resolved_path, size_t size) -{ -#if defined (__linux__) || defined (__APPLE__) - return realpath(path, resolved_path); +char* Q_realpath( const char *path, char *resolved_path, size_t size ){ +#if defined ( __linux__ ) || defined ( __APPLE__ ) + return realpath( path, resolved_path ); #else - return _fullpath(resolved_path, path, size); + return _fullpath( resolved_path, path, size ); #endif } -static void DoNewCamera( idCameraPosition::positionType type ) -{ +static void DoNewCamera( idCameraPosition::positionType type ){ CCamera *cam = AllocCam(); - if( cam ) { + if ( cam ) { char buf[128]; sprintf( buf, "camera%i", cam->GetCamNum() ); @@ -56,176 +54,182 @@ static void DoNewCamera( idCameraPosition::positionType type ) RefreshCamListCombo(); // Go to editmode Add - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_pEditModeAddRadioButton ), TRUE ); // Show the camera inspector DoCameraInspector(); // Start edit mode (if not initiated by DoCameraInspector) - if( !g_bEditOn ) + if ( !g_bEditOn ) { DoStartEdit( GetCurrentCam() ); - } else { - g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free cameras available.", "Create Camera Error", MB_OK, NULL ); + } + } + else { + g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free cameras available.", "Create Camera Error", MB_OK, NULL ); } } -void DoNewFixedCamera() -{ +void DoNewFixedCamera(){ DoNewCamera( idCameraPosition::FIXED ); } -void DoNewInterpolatedCamera() -{ +void DoNewInterpolatedCamera(){ DoNewCamera( idCameraPosition::INTERPOLATED ); } -void DoNewSplineCamera() -{ +void DoNewSplineCamera(){ DoNewCamera( idCameraPosition::SPLINE ); } -void DoCameraInspector() -{ - gtk_widget_show( g_pCameraInspectorWnd ); +void DoCameraInspector(){ + gtk_widget_show( g_pCameraInspectorWnd ); } -void DoPreviewCamera() -{ - if( GetCurrentCam() ) { +void DoPreviewCamera(){ + if ( GetCurrentCam() ) { g_iPreviewRunning = 1; g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); } } -void DoLoadCamera() -{ - char basepath[PATH_MAX]; - - if( firstCam && firstCam->HasBeenSaved() ) - CAMERA_ExtractFilePath( firstCam->GetFileName(), basepath ); - else - strcpy( basepath, g_FuncTable.m_pfnGetGamePath() ); - - const gchar *filename = g_FuncTable.m_pfnFileDialog( (GtkWidget *)g_pRadiantWnd, TRUE, "Open Camera File", basepath, "camera", NULL); - - if( filename ) - { - CCamera *cam = AllocCam(); - char fullpathtofile[PATH_MAX]; - - if( cam ) { - Q_realpath(filename, fullpathtofile, PATH_MAX); - - // see if this camera file was already loaded - CCamera *checkCam = firstCam->GetNext(); // not the first one as we just allocated it - while( checkCam ) { - if( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) { - char error[PATH_MAX+64]; - FreeCam( cam ); - sprintf( error, "Camera file \'%s\' is already loaded", fullpathtofile ); - g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL ); - //g_free( filename ); - return; - } - checkCam = checkCam->GetNext(); - } - - if( loadCamera( cam->GetCamNum(), fullpathtofile ) ) { +void DoLoadCamera(){ + char basepath[PATH_MAX]; + + if ( firstCam && firstCam->HasBeenSaved() ) { + CAMERA_ExtractFilePath( firstCam->GetFileName(), basepath ); + } + else{ + strcpy( basepath, g_FuncTable.m_pfnGetGamePath() ); + } + + const gchar *filename = g_FuncTable.m_pfnFileDialog( (GtkWidget *)g_pRadiantWnd, TRUE, "Open Camera File", basepath, "camera", NULL ); + + if ( filename ) { + CCamera *cam = AllocCam(); + char fullpathtofile[PATH_MAX]; + + if ( cam ) { + Q_realpath( filename, fullpathtofile, PATH_MAX ); + + // see if this camera file was already loaded + CCamera *checkCam = firstCam->GetNext(); // not the first one as we just allocated it + while ( checkCam ) { + if ( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) { + char error[PATH_MAX + 64]; + FreeCam( cam ); + sprintf( error, "Camera file \'%s\' is already loaded", fullpathtofile ); + g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL ); + //g_free( filename ); + return; + } + checkCam = checkCam->GetNext(); + } + + if ( loadCamera( cam->GetCamNum(), fullpathtofile ) ) { cam->GetCam()->buildCamera(); - cam->SetFileName( filename, true ); - SetCurrentCam( cam ); - RefreshCamListCombo(); - g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); - } else { - char error[PATH_MAX+64]; - FreeCam( cam ); - sprintf( error, "An error occured during the loading of \'%s\'", fullpathtofile ); - g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL ); - } - - //g_free( filename ); - } else { - g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free camera slots available", "Load error", MB_OK, NULL ); - } + cam->SetFileName( filename, true ); + SetCurrentCam( cam ); + RefreshCamListCombo(); + g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); + } + else { + char error[PATH_MAX + 64]; + FreeCam( cam ); + sprintf( error, "An error occured during the loading of \'%s\'", fullpathtofile ); + g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL ); + } + + //g_free( filename ); + } + else { + g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free camera slots available", "Load error", MB_OK, NULL ); + } } } void DoSaveCamera() { - char basepath[PATH_MAX]; + char basepath[PATH_MAX]; - if( !GetCurrentCam() ) - return; + if ( !GetCurrentCam() ) { + return; + } - if( GetCurrentCam()->GetFileName()[0] ) - CAMERA_ExtractFilePath( GetCurrentCam()->GetFileName(), basepath ); - else - strcpy( basepath, g_FuncTable.m_pfnGetGamePath() ); + if ( GetCurrentCam()->GetFileName()[0] ) { + CAMERA_ExtractFilePath( GetCurrentCam()->GetFileName(), basepath ); + } + else{ + strcpy( basepath, g_FuncTable.m_pfnGetGamePath() ); + } - const gchar *filename = g_FuncTable.m_pfnFileDialog( (void *)g_pRadiantWnd, FALSE, "Save Camera File", basepath, "camera", NULL); + const gchar *filename = g_FuncTable.m_pfnFileDialog( (void *)g_pRadiantWnd, FALSE, "Save Camera File", basepath, "camera", NULL ); - if( filename ) { - char fullpathtofile[PATH_MAX + 8]; + if ( filename ) { + char fullpathtofile[PATH_MAX + 8]; - Q_realpath(filename, fullpathtofile, PATH_MAX); + Q_realpath( filename, fullpathtofile, PATH_MAX ); // File dialog from windows (and maybe the gtk one from radiant) doesn't handle default extensions properly. // Add extension and check again if file exists - if( strcmp( fullpathtofile + (strlen(fullpathtofile) - 7), ".camera" ) ) { + if ( strcmp( fullpathtofile + ( strlen( fullpathtofile ) - 7 ), ".camera" ) ) { strcat( fullpathtofile, ".camera" ); - if( FileExists( fullpathtofile ) ) { + if ( FileExists( fullpathtofile ) ) { if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "File already exists.\nOverwrite?", "Save Camera File", MB_YESNO, NULL ) == IDNO ) { return; } } } - // see if this camera file was already loaded - CCamera *checkCam = firstCam; - while( checkCam ) { - if( checkCam == GetCurrentCam() ) { - checkCam = checkCam->GetNext(); - if( !checkCam ) // we only have one camera file opened so no need to check further + // see if this camera file was already loaded + CCamera *checkCam = firstCam; + while ( checkCam ) { + if ( checkCam == GetCurrentCam() ) { + checkCam = checkCam->GetNext(); + if ( !checkCam ) { // we only have one camera file opened so no need to check further break; - } else if( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) { - char error[PATH_MAX+64]; - sprintf( error, "Camera file \'%s\' is currently loaded by GtkRadiant.\nPlease select a different filename.", fullpathtofile ); - g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Save error", MB_OK, NULL ); - return; - } - checkCam = checkCam->GetNext(); - } - - // FIXME: check for existing directory - - GetCurrentCam()->GetCam()->save( fullpathtofile ); + } + } + else if ( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) { + char error[PATH_MAX + 64]; + sprintf( error, "Camera file \'%s\' is currently loaded by GtkRadiant.\nPlease select a different filename.", fullpathtofile ); + g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Save error", MB_OK, NULL ); + return; + } + checkCam = checkCam->GetNext(); + } + + // FIXME: check for existing directory + + GetCurrentCam()->GetCam()->save( fullpathtofile ); GetCurrentCam()->SetFileName( fullpathtofile, true ); RefreshCamListCombo(); - } + } } void DoUnloadCamera() { - if( !GetCurrentCam() ) - return; + if ( !GetCurrentCam() ) { + return; + } - if( !GetCurrentCam()->HasBeenSaved() ) { - char buf[PATH_MAX+64]; + if ( !GetCurrentCam()->HasBeenSaved() ) { + char buf[PATH_MAX + 64]; sprintf( buf, "Do you want to save the changes for camera '%s'?", GetCurrentCam()->GetCam()->getName() ); if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) { DoSaveCamera(); } - } else if( GetCurrentCam()->HasBeenSaved() == 2 ) { - char buf[PATH_MAX+64]; + } + else if ( GetCurrentCam()->HasBeenSaved() == 2 ) { + char buf[PATH_MAX + 64]; sprintf( buf, "Do you want to save the changes made to camera file '%s'?", GetCurrentCam()->GetFileName() ); - if( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) { + if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) { DoSaveCamera(); } } - if( g_pCurrentEditCam ) { - DoStopEdit(); - g_pCurrentEditCam = NULL; - } + if ( g_pCurrentEditCam ) { + DoStopEdit(); + g_pCurrentEditCam = NULL; + } FreeCam( GetCurrentCam() ); SetCurrentCam( NULL ); @@ -235,38 +239,39 @@ void DoUnloadCamera() { CCamera *g_pCurrentEditCam = NULL; void DoStartEdit( CCamera *cam ) { - if( g_pCurrentEditCam ) { - DoStopEdit(); - g_pCurrentEditCam = NULL; - } + if ( g_pCurrentEditCam ) { + DoStopEdit(); + g_pCurrentEditCam = NULL; + } - if( cam ) { - g_bEditOn = true; + if ( cam ) { + g_bEditOn = true; - if( !Listener ) - Listener = new CListener; + if ( !Listener ) { + Listener = new CListener; + } - cam->GetCam()->startEdit( g_iActiveTarget < 0 ? true : false ); + cam->GetCam()->startEdit( g_iActiveTarget < 0 ? true : false ); - g_pCurrentEditCam = cam; + g_pCurrentEditCam = cam; - g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); - } + g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); + } } void DoStopEdit( void ) { - g_bEditOn = false; + g_bEditOn = false; - if( Listener ) { - delete Listener; - Listener = NULL; - } + if ( Listener ) { + delete Listener; + Listener = NULL; + } - if( g_pCurrentEditCam ) { - // stop editing on the current cam - g_pCurrentEditCam->GetCam()->stopEdit(); - g_pCurrentEditCam = NULL; + if ( g_pCurrentEditCam ) { + // stop editing on the current cam + g_pCurrentEditCam->GetCam()->stopEdit(); + g_pCurrentEditCam = NULL; - g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); - } + g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); + } } diff --git a/contrib/camera/funchandlers.h b/contrib/camera/funchandlers.h index ee3b9274..600fe18d 100644 --- a/contrib/camera/funchandlers.h +++ b/contrib/camera/funchandlers.h @@ -1,28 +1,28 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ void DoNewFixedCamera(); void DoNewInterpolatedCamera(); @@ -34,4 +34,3 @@ void DoSaveCamera(); void DoUnloadCamera(); void DoStartEdit( CCamera *cam ); void DoStopEdit( void ); - diff --git a/contrib/camera/listener.cpp b/contrib/camera/listener.cpp index 7e3d1b66..8766c4ec 100644 --- a/contrib/camera/listener.cpp +++ b/contrib/camera/listener.cpp @@ -1,149 +1,148 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ #include "camera.h" -CListener::CListener() -{ +CListener::CListener(){ refCount = 1; m_bHooked = FALSE; - m_bLeftMBPressed = m_bRightMBPressed = m_bMiddleMBPressed = false; + m_bLeftMBPressed = m_bRightMBPressed = m_bMiddleMBPressed = false; - oldValid = false; + oldValid = false; - Register(); + Register(); } -CListener::~CListener() -{ +CListener::~CListener(){ UnRegister(); } -void CListener::Register() -{ +void CListener::Register(){ g_UITable.m_pfnHookWindow( this ); - g_pXYWndWrapper = g_UITable.m_pfnGetXYWndWrapper(); + g_pXYWndWrapper = g_UITable.m_pfnGetXYWndWrapper(); m_bHooked = TRUE; } -void CListener::UnRegister() -{ - if(m_bHooked) - { +void CListener::UnRegister(){ + if ( m_bHooked ) { g_UITable.m_pfnUnHookWindow( this ); - g_pXYWndWrapper= NULL; + g_pXYWndWrapper = NULL; m_bHooked = FALSE; } } -bool CListener::OnMouseMove( guint32 nFlags, gdouble x, gdouble y ) -{ - SetViewType( g_pXYWndWrapper->GetViewType() ); - - if( m_bLeftMBPressed && oldValid && g_iEditMode == 0 ) { - vec3_t click, delta; - - g_pXYWndWrapper->SnapToGrid( (int)x, (int)y, click ); - - switch( m_vt ) { - case XY: - VectorSet( delta, click[0] - old_x, click[1] - old_y, 0 ); - old_x = click[0]; old_y = click[1]; - break; - case XZ: - VectorSet( delta, click[0] - old_x, 0, click[2] - old_y ); - old_x = click[0]; old_y = click[2]; - break; - case YZ: - VectorSet( delta, 0, click[1] - old_x, click[2] - old_y ); - old_x = click[1]; old_y = click[2]; - break; - } - - if( g_iActiveTarget < 0 ) - GetCurrentCam()->GetCam()->getPositionObj()->updateSelection( delta[0], delta[1], delta[2] ); - else - GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->updateSelection( delta[0], delta[1], delta[2] ); +bool CListener::OnMouseMove( guint32 nFlags, gdouble x, gdouble y ){ + SetViewType( g_pXYWndWrapper->GetViewType() ); + + if ( m_bLeftMBPressed && oldValid && g_iEditMode == 0 ) { + vec3_t click, delta; + + g_pXYWndWrapper->SnapToGrid( (int)x, (int)y, click ); + + switch ( m_vt ) { + case XY: + VectorSet( delta, click[0] - old_x, click[1] - old_y, 0 ); + old_x = click[0]; old_y = click[1]; + break; + case XZ: + VectorSet( delta, click[0] - old_x, 0, click[2] - old_y ); + old_x = click[0]; old_y = click[2]; + break; + case YZ: + VectorSet( delta, 0, click[1] - old_x, click[2] - old_y ); + old_x = click[1]; old_y = click[2]; + break; + } + + if ( g_iActiveTarget < 0 ) { + GetCurrentCam()->GetCam()->getPositionObj()->updateSelection( delta[0], delta[1], delta[2] ); + } + else{ + GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->updateSelection( delta[0], delta[1], delta[2] ); + } GetCurrentCam()->HasBeenModified(); - g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); + g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); - return true; - } + return true; + } - return false; + return false; } -bool CListener::OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ) -{ - SetViewType( g_pXYWndWrapper->GetViewType() ); - - m_bLeftMBPressed = true; - oldValid = true; - - vec3_t org, delta; - - g_pXYWndWrapper->SnapToGrid( (int)x, (int)y, org ); - - switch( m_vt ) { - case XY: - old_x = org[0]; old_y = org[1]; org[2] = 64*1024; - VectorSet( delta, 0, 0, -1 ); - break; - case XZ: - old_x = org[0]; old_y = org[2]; org[1] = 64*1024; - VectorSet( delta, 0, -1, 0 ); - break; - case YZ: - old_x = org[1]; old_y = org[2]; org[0] = 64*1024; - VectorSet( delta, -1, 0, 0 ); - break; - } - - if( g_iEditMode == 0 ) { - if( g_iActiveTarget < 0 ) +bool CListener::OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ){ + SetViewType( g_pXYWndWrapper->GetViewType() ); + + m_bLeftMBPressed = true; + oldValid = true; + + vec3_t org, delta; + + g_pXYWndWrapper->SnapToGrid( (int)x, (int)y, org ); + + switch ( m_vt ) { + case XY: + old_x = org[0]; old_y = org[1]; org[2] = 64 * 1024; + VectorSet( delta, 0, 0, -1 ); + break; + case XZ: + old_x = org[0]; old_y = org[2]; org[1] = 64 * 1024; + VectorSet( delta, 0, -1, 0 ); + break; + case YZ: + old_x = org[1]; old_y = org[2]; org[0] = 64 * 1024; + VectorSet( delta, -1, 0, 0 ); + break; + } + + if ( g_iEditMode == 0 ) { + if ( g_iActiveTarget < 0 ) { GetCurrentCam()->GetCam()->getPositionObj()->selectPointByRay( org[0], org[1], org[2], delta[0], delta[1], delta[2], true ); - else - GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->selectPointByRay( org[0], org[1], org[2], delta[0], delta[1], delta[2], true ); - } else if( g_iEditMode == 1 ) { + } + else{ + GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->selectPointByRay( org[0], org[1], org[2], delta[0], delta[1], delta[2], true ); + } + } + else if ( g_iEditMode == 1 ) { idVec3 *lastcoord; idCameraPosition *camera; - if( g_iActiveTarget < 0 ) { + if ( g_iActiveTarget < 0 ) { camera = GetCurrentCam()->GetCam()->getPositionObj(); - } else { - camera = GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget); + } + else { + camera = GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget ); } - if( camera->numPoints() ) { - lastcoord = camera->getPoint( camera->numPoints() -1 ); - switch( m_vt ) { + if ( camera->numPoints() ) { + lastcoord = camera->getPoint( camera->numPoints() - 1 ); + switch ( m_vt ) { case XY: camera->addPoint( org[0], org[1], lastcoord->z ); break; @@ -154,8 +153,9 @@ bool CListener::OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ) camera->addPoint( lastcoord->x, org[1], org[2] ); break; } - } else { - switch( m_vt ) { + } + else { + switch ( m_vt ) { case XY: camera->addPoint( org[0], org[1], 0 ); break; @@ -171,64 +171,61 @@ bool CListener::OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ) GetCurrentCam()->HasBeenModified(); } - g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); + g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); - return true; + return true; //return false; } -bool CListener::OnLButtonUp( guint32 nFlags, gdouble x, gdouble y ) -{ - SetViewType( g_pXYWndWrapper->GetViewType() ); +bool CListener::OnLButtonUp( guint32 nFlags, gdouble x, gdouble y ){ + SetViewType( g_pXYWndWrapper->GetViewType() ); - m_bLeftMBPressed = false; - oldValid = false; + m_bLeftMBPressed = false; + oldValid = false; - if( g_iEditMode == 0 ) { - if( g_iActiveTarget < 0 ) + if ( g_iEditMode == 0 ) { + if ( g_iActiveTarget < 0 ) { GetCurrentCam()->GetCam()->getPositionObj()->deselectAll(); - else - GetCurrentCam()->GetCam()->getActiveTarget(g_iActiveTarget)->deselectAll(); + } + else{ + GetCurrentCam()->GetCam()->getActiveTarget( g_iActiveTarget )->deselectAll(); + } - g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); + g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); } return false; } -bool CListener::OnRButtonDown( guint32 nFlags, gdouble x, gdouble y ) -{ - SetViewType( g_pXYWndWrapper->GetViewType() ); +bool CListener::OnRButtonDown( guint32 nFlags, gdouble x, gdouble y ){ + SetViewType( g_pXYWndWrapper->GetViewType() ); - m_bRightMBPressed = true; + m_bRightMBPressed = true; return false; } -bool CListener::OnRButtonUp( guint32 nFlags, gdouble x, gdouble y ) -{ - SetViewType( g_pXYWndWrapper->GetViewType() ); +bool CListener::OnRButtonUp( guint32 nFlags, gdouble x, gdouble y ){ + SetViewType( g_pXYWndWrapper->GetViewType() ); - m_bRightMBPressed = false; + m_bRightMBPressed = false; return false; } -bool CListener::OnMButtonDown( guint32 nFlags, gdouble x, gdouble y ) -{ - SetViewType( g_pXYWndWrapper->GetViewType() ); +bool CListener::OnMButtonDown( guint32 nFlags, gdouble x, gdouble y ){ + SetViewType( g_pXYWndWrapper->GetViewType() ); - m_bMiddleMBPressed = true; + m_bMiddleMBPressed = true; return false; } -bool CListener::OnMButtonUp( guint32 nFlags, gdouble x, gdouble y ) -{ - SetViewType( g_pXYWndWrapper->GetViewType() ); +bool CListener::OnMButtonUp( guint32 nFlags, gdouble x, gdouble y ){ + SetViewType( g_pXYWndWrapper->GetViewType() ); - m_bMiddleMBPressed = false; + m_bMiddleMBPressed = false; return false; } diff --git a/contrib/camera/listener.h b/contrib/camera/listener.h index 6519508f..7ee4b058 100644 --- a/contrib/camera/listener.h +++ b/contrib/camera/listener.h @@ -1,64 +1,73 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ -class CListener : public IWindowListener +class CListener : public IWindowListener { public: - bool OnMouseMove(guint32 nFlags, gdouble x, gdouble y); - bool OnLButtonDown(guint32 nFlags, gdouble x, gdouble y); - bool OnMButtonDown(guint32 nFlags, gdouble x, gdouble y); - bool OnRButtonDown(guint32 nFlags, gdouble x, gdouble y); - bool OnLButtonUp(guint32 nFlags, gdouble x, gdouble y); - bool OnMButtonUp(guint32 nFlags, gdouble x, gdouble y); - bool OnRButtonUp(guint32 nFlags, gdouble x, gdouble y); - bool OnKeyPressed(char *s) { return false; } - bool Paint() { return true; } - void Close() { } - - void UnRegister(); - void Register(); - CListener(); - virtual ~CListener(); +bool OnMouseMove( guint32 nFlags, gdouble x, gdouble y ); +bool OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ); +bool OnMButtonDown( guint32 nFlags, gdouble x, gdouble y ); +bool OnRButtonDown( guint32 nFlags, gdouble x, gdouble y ); +bool OnLButtonUp( guint32 nFlags, gdouble x, gdouble y ); +bool OnMButtonUp( guint32 nFlags, gdouble x, gdouble y ); +bool OnRButtonUp( guint32 nFlags, gdouble x, gdouble y ); +bool OnKeyPressed( char *s ) { return false; } +bool Paint() { return true; } +void Close() { } - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } +void UnRegister(); +void Register(); +CListener(); +virtual ~CListener(); - void SetViewType( VIEWTYPE vt ) { if( m_vt != vt ) oldValid = false; m_vt = vt; } +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} + +void SetViewType( VIEWTYPE vt ) { + if ( m_vt != vt ) { + oldValid = false; + } + m_vt = vt; +} private: - IXYWndWrapper *g_pXYWndWrapper; +IXYWndWrapper *g_pXYWndWrapper; - bool m_bHooked; - int refCount; - VIEWTYPE m_vt; +bool m_bHooked; +int refCount; +VIEWTYPE m_vt; - // mouse button status - bool m_bLeftMBPressed, m_bRightMBPressed, m_bMiddleMBPressed; +// mouse button status +bool m_bLeftMBPressed, m_bRightMBPressed, m_bMiddleMBPressed; - // old mouse coordinates - bool oldValid; - gdouble old_x, old_y; +// old mouse coordinates +bool oldValid; +gdouble old_x, old_y; }; diff --git a/contrib/camera/misc.cpp b/contrib/camera/misc.cpp index a279df06..1fe7509b 100644 --- a/contrib/camera/misc.cpp +++ b/contrib/camera/misc.cpp @@ -1,102 +1,99 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ #include "camera.h" -void Sys_ERROR( char* text, ... ) -{ - va_list argptr; - char buf[32768]; +void Sys_ERROR( char* text, ... ){ + va_list argptr; + char buf[32768]; - va_start (argptr,text); - vsprintf (buf, text,argptr); - va_end (argptr); + va_start( argptr,text ); + vsprintf( buf, text,argptr ); + va_end( argptr ); - Sys_Printf("Camera::ERROR->%s", buf); + Sys_Printf( "Camera::ERROR->%s", buf ); } -char* UnixToDosPath( char* path ) -{ +char* UnixToDosPath( char* path ){ #ifndef _WIN32 return path; #else - for(char* p = path; *p; p++) + for ( char* p = path; *p; p++ ) { - if(*p == '/') + if ( *p == '/' ) { *p = '\\'; + } } return path; #endif } -void CAMERA_ExtractFilePath( const char *path, char *dest ) -{ - const char *src; +void CAMERA_ExtractFilePath( const char *path, char *dest ){ + 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; } -const char* ExtractFilename( const char* path ) -{ - char* p = (char *)strrchr(path, '/'); - if(!p) - { - p = (char *)strrchr(path, '\\'); +const char* ExtractFilename( const char* path ){ + char* p = (char *)strrchr( path, '/' ); + if ( !p ) { + p = (char *)strrchr( path, '\\' ); - if(!p) + if ( !p ) { return path; + } } return ++p; } -int Q_stricmp (const char *s1, const char *s2) { +int Q_stricmp( const char *s1, const char *s2 ) { return stricmp( s1, s2 ); } /* -============== -FileExists -============== -*/ -bool FileExists (const char *filename) -{ - FILE *f; + ============== + FileExists + ============== + */ +bool FileExists( const char *filename ){ + FILE *f; f = fopen( filename, "r" ); - if( !f ) + if ( !f ) { return false; + } fclose( f ); return true; } @@ -106,56 +103,53 @@ bool FileExists (const char *filename) // empty wrappers, don't really use them here // void Cbuf_AddText( const char *text ) {}; -void Cbuf_Execute (void) {}; +void Cbuf_Execute( void ) {}; // // Common // -void CDECL Com_Error( int level, const char *error, ... ) -{ - va_list argptr; - char buf[32768]; +void CDECL Com_Error( int level, const char *error, ... ){ + va_list argptr; + char buf[32768]; - va_start (argptr,error); - vsprintf (buf, error,argptr); - va_end (argptr); + va_start( argptr,error ); + vsprintf( buf, error,argptr ); + va_end( argptr ); - Sys_Printf("Camera::ERROR->%s", buf); + Sys_Printf( "Camera::ERROR->%s", buf ); } -void CDECL Com_Printf( const char* msg, ... ) -{ - va_list argptr; - char buf[32768]; +void CDECL Com_Printf( const char* msg, ... ){ + va_list argptr; + char buf[32768]; - va_start (argptr,msg); - vsprintf (buf, msg,argptr); - va_end (argptr); + va_start( argptr,msg ); + vsprintf( buf, msg,argptr ); + va_end( argptr ); - Sys_Printf("Camera::%s", buf); + Sys_Printf( "Camera::%s", buf ); } -void CDECL Com_DPrintf( const char* msg, ... ) -{ +void CDECL Com_DPrintf( const char* msg, ... ){ #ifdef _DEBUG - va_list argptr; - char buf[32768]; + va_list argptr; + char buf[32768]; - va_start (argptr,msg); - vsprintf (buf, msg,argptr); - va_end (argptr); + va_start( argptr,msg ); + vsprintf( buf, msg,argptr ); + va_end( argptr ); - Sys_Printf("Camera::%s", buf); + Sys_Printf( "Camera::%s", buf ); #endif } void *Com_Allocate( int bytes ) { - return( malloc( bytes ) ); + return( malloc( bytes ) ); } void Com_Dealloc( void *ptr ) { - free( ptr ); + free( ptr ); } // @@ -168,76 +162,76 @@ void Com_Dealloc( void *ptr ) { #endif int FS_Read( void *buffer, int len, fileHandle_t f ) { - return fread( buffer, len, 1, (FILE *)f ); + return fread( buffer, len, 1, (FILE *)f ); } int FS_Write( const void *buffer, int len, fileHandle_t h ) { - return fwrite( buffer, len, 1, (FILE *)h ); + return fwrite( buffer, len, 1, (FILE *)h ); } int FS_ReadFile( const char *qpath, void **buffer ) { - fileHandle_t h; - byte* buf; - int len; + fileHandle_t h; + byte* buf; + int len; - buf = NULL; + buf = NULL; - len = FS_FOpenFileRead( qpath, &h, qfalse ); + len = FS_FOpenFileRead( qpath, &h, qfalse ); - if( h == 0 ) { - if ( buffer ) { - *buffer = NULL; - } + if ( h == 0 ) { + if ( buffer ) { + *buffer = NULL; + } - return -1; - } + return -1; + } - buf = (byte *)Com_Allocate( len + 1 ); + buf = (byte *)Com_Allocate( len + 1 ); - *buffer = buf; + *buffer = buf; - FS_Read (buf, len, h); + FS_Read( buf, len, h ); - buf[len] = 0; - FS_FCloseFile( h ); + buf[len] = 0; + FS_FCloseFile( h ); - return len; + return len; } void FS_FreeFile( void *buffer ) { - Com_Dealloc( buffer ); + Com_Dealloc( buffer ); } int FS_FOpenFileRead( const char *filename, fileHandle_t *file, qboolean uniqueFILE ) { - FILE *fh; + FILE *fh; long len; - fh = fopen( filename, "rb" ); - *file = *(fileHandle_t *)&fh; + fh = fopen( filename, "rb" ); + *file = *(fileHandle_t *)&fh; - if( file ) - { - fseek (fh, 0, SEEK_END); - len = ftell (fh); - rewind (fh); - return len; + if ( file ) { + fseek( fh, 0, SEEK_END ); + len = ftell( fh ); + rewind( fh ); + return len; + } + else{ + return -1; } - else - return -1; } fileHandle_t FS_FOpenFileWrite( const char *filename ) { - FILE *fh; - fileHandle_t f; + FILE *fh; + fileHandle_t f; - memset( &f, 0, sizeof(f) ); + memset( &f, 0, sizeof( f ) ); - fh = fopen( filename, "wb" ); + fh = fopen( filename, "wb" ); - f = (fileHandle_t)fh; - return f; + f = (fileHandle_t)fh; + return f; } void FS_FCloseFile( fileHandle_t f ) { - fclose( (FILE *)f ); + fclose( (FILE *)f ); } diff --git a/contrib/camera/misc.h b/contrib/camera/misc.h index b5c06033..6dee0b25 100644 --- a/contrib/camera/misc.h +++ b/contrib/camera/misc.h @@ -1,35 +1,35 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ void Sys_ERROR( char* text, ... ); char* UnixToDosPath( char* path ); void CAMERA_ExtractFilePath( const char *path, char *dest ); const char* ExtractFilename( const char* path ); -bool FileExists (const char *filename); -int Q_stricmp (const char *s1, const char *s2); +bool FileExists( const char *filename ); +int Q_stricmp( const char *s1, const char *s2 ); typedef int fileHandle_t; @@ -39,7 +39,7 @@ typedef int fileHandle_t; extern "C" { // command buffer void Cbuf_AddText( const char *text ); -void Cbuf_Execute (void); +void Cbuf_Execute( void ); // common #ifndef CDECL @@ -67,25 +67,25 @@ void FS_FCloseFile( fileHandle_t f ); } // vectors -#define DotProduct(a,b) ((a)[0]*(b)[0]+(a)[1]*(b)[1]+(a)[2]*(b)[2]) -#define VectorSubtract(a,b,c) ((c)[0]=(a)[0]-(b)[0],(c)[1]=(a)[1]-(b)[1],(c)[2]=(a)[2]-(b)[2]) -#define VectorAdd(a,b,c) ((c)[0]=(a)[0]+(b)[0],(c)[1]=(a)[1]+(b)[1],(c)[2]=(a)[2]+(b)[2]) -#define VectorCopy(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2]) - -#define VectorScale(v, s, o) ((o)[0]=(v)[0]*(s),(o)[1]=(v)[1]*(s),(o)[2]=(v)[2]*(s)) -#define VectorMA(v, s, b, o) ((o)[0]=(v)[0]+(b)[0]*(s),(o)[1]=(v)[1]+(b)[1]*(s),(o)[2]=(v)[2]+(b)[2]*(s)) -#define CrossProduct(a,b,c) ((c)[0]=(a)[1]*(b)[2]-(a)[2]*(b)[1],(c)[1]=(a)[2]*(b)[0]-(a)[0]*(b)[2],(c)[2]=(a)[0]*(b)[1]-(a)[1]*(b)[0]) - -#define DotProduct4(x,y) ((x)[0]*(y)[0]+(x)[1]*(y)[1]+(x)[2]*(y)[2]+(x)[3]*(y)[3]) -#define VectorSubtract4(a,b,c) ((c)[0]=(a)[0]-(b)[0],(c)[1]=(a)[1]-(b)[1],(c)[2]=(a)[2]-(b)[2],(c)[3]=(a)[3]-(b)[3]) -#define VectorAdd4(a,b,c) ((c)[0]=(a)[0]+(b)[0],(c)[1]=(a)[1]+(b)[1],(c)[2]=(a)[2]+(b)[2],(c)[3]=(a)[3]+(b)[3]) -#define VectorCopy4(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3]) -#define VectorScale4(v, s, o) ((o)[0]=(v)[0]*(s),(o)[1]=(v)[1]*(s),(o)[2]=(v)[2]*(s),(o)[3]=(v)[3]*(s)) -#define VectorMA4(v, s, b, o) ((o)[0]=(v)[0]+(b)[0]*(s),(o)[1]=(v)[1]+(b)[1]*(s),(o)[2]=(v)[2]+(b)[2]*(s),(o)[3]=(v)[3]+(b)[3]*(s)) - -#define VectorClear(a) ((a)[0]=(a)[1]=(a)[2]=0) -#define VectorNegate(a,b) ((b)[0]=-(a)[0],(b)[1]=-(a)[1],(b)[2]=-(a)[2]) -#define VectorSet(v, x, y, z) ((v)[0]=(x), (v)[1]=(y), (v)[2]=(z)) -#define Vector4Copy(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3]) - -#define SnapVector(v) {v[0]=(int)v[0];v[1]=(int)v[1];v[2]=(int)v[2];} +#define DotProduct( a,b ) ( ( a )[0] * ( b )[0] + ( a )[1] * ( b )[1] + ( a )[2] * ( b )[2] ) +#define VectorSubtract( a,b,c ) ( ( c )[0] = ( a )[0] - ( b )[0],( c )[1] = ( a )[1] - ( b )[1],( c )[2] = ( a )[2] - ( b )[2] ) +#define VectorAdd( a,b,c ) ( ( c )[0] = ( a )[0] + ( b )[0],( c )[1] = ( a )[1] + ( b )[1],( c )[2] = ( a )[2] + ( b )[2] ) +#define VectorCopy( a,b ) ( ( b )[0] = ( a )[0],( b )[1] = ( a )[1],( b )[2] = ( a )[2] ) + +#define VectorScale( v, s, o ) ( ( o )[0] = ( v )[0] * ( s ),( o )[1] = ( v )[1] * ( s ),( o )[2] = ( v )[2] * ( s ) ) +#define VectorMA( v, s, b, o ) ( ( o )[0] = ( v )[0] + ( b )[0] * ( s ),( o )[1] = ( v )[1] + ( b )[1] * ( s ),( o )[2] = ( v )[2] + ( b )[2] * ( s ) ) +#define CrossProduct( a,b,c ) ( ( c )[0] = ( a )[1] * ( b )[2] - ( a )[2] * ( b )[1],( c )[1] = ( a )[2] * ( b )[0] - ( a )[0] * ( b )[2],( c )[2] = ( a )[0] * ( b )[1] - ( a )[1] * ( b )[0] ) + +#define DotProduct4( x,y ) ( ( x )[0] * ( y )[0] + ( x )[1] * ( y )[1] + ( x )[2] * ( y )[2] + ( x )[3] * ( y )[3] ) +#define VectorSubtract4( a,b,c ) ( ( c )[0] = ( a )[0] - ( b )[0],( c )[1] = ( a )[1] - ( b )[1],( c )[2] = ( a )[2] - ( b )[2],( c )[3] = ( a )[3] - ( b )[3] ) +#define VectorAdd4( a,b,c ) ( ( c )[0] = ( a )[0] + ( b )[0],( c )[1] = ( a )[1] + ( b )[1],( c )[2] = ( a )[2] + ( b )[2],( c )[3] = ( a )[3] + ( b )[3] ) +#define VectorCopy4( a,b ) ( ( b )[0] = ( a )[0],( b )[1] = ( a )[1],( b )[2] = ( a )[2],( b )[3] = ( a )[3] ) +#define VectorScale4( v, s, o ) ( ( o )[0] = ( v )[0] * ( s ),( o )[1] = ( v )[1] * ( s ),( o )[2] = ( v )[2] * ( s ),( o )[3] = ( v )[3] * ( s ) ) +#define VectorMA4( v, s, b, o ) ( ( o )[0] = ( v )[0] + ( b )[0] * ( s ),( o )[1] = ( v )[1] + ( b )[1] * ( s ),( o )[2] = ( v )[2] + ( b )[2] * ( s ),( o )[3] = ( v )[3] + ( b )[3] * ( s ) ) + +#define VectorClear( a ) ( ( a )[0] = ( a )[1] = ( a )[2] = 0 ) +#define VectorNegate( a,b ) ( ( b )[0] = -( a )[0],( b )[1] = -( a )[1],( b )[2] = -( a )[2] ) +#define VectorSet( v, x, y, z ) ( ( v )[0] = ( x ), ( v )[1] = ( y ), ( v )[2] = ( z ) ) +#define Vector4Copy( a,b ) ( ( b )[0] = ( a )[0],( b )[1] = ( a )[1],( b )[2] = ( a )[2],( b )[3] = ( a )[3] ) + +#define SnapVector( v ) {v[0] = (int)v[0]; v[1] = (int)v[1]; v[2] = (int)v[2]; } diff --git a/contrib/camera/renderer.cpp b/contrib/camera/renderer.cpp index e4b9e38f..3a44485b 100644 --- a/contrib/camera/renderer.cpp +++ b/contrib/camera/renderer.cpp @@ -1,44 +1,45 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ #include "camera.h" CRenderer::CRenderer() { - refCount = 1; + refCount = 1; - m_bHooked = FALSE; - - Register(); - Initialize(); + m_bHooked = FALSE; + + Register(); + Initialize(); } CRenderer::~CRenderer() { - if( m_bHooked ) - UnRegister(); + if ( m_bHooked ) { + UnRegister(); + } } void CRenderer::Register() { @@ -48,7 +49,7 @@ void CRenderer::Register() { } void CRenderer::UnRegister() { - if( g_QglTable.m_nSize ) { + if ( g_QglTable.m_nSize ) { g_QglTable.m_pfnUnHookGL2DWindow( this ); g_QglTable.m_pfnUnHookGL3DWindow( this ); } @@ -61,27 +62,27 @@ void CRenderer::Initialize() { void CRenderer::Draw2D( VIEWTYPE vt ) { - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); g_QglTable.m_pfn_qglPushMatrix(); - switch(vt) - { - case XY: - break; - case XZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); - break; - case YZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); - g_QglTable.m_pfn_qglRotatef(270.0f, 0.0f, 0.0f, 1.0f); - break; - } - - CCamera *cam = firstCam; - while( cam ) { - cam->GetCam()->draw( ((Listener && cam == g_pCurrentEditCam) ? true : false) ); - cam = cam->GetNext(); - } + switch ( vt ) + { + case XY: + break; + case XZ: + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); + break; + case YZ: + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); + g_QglTable.m_pfn_qglRotatef( 270.0f, 0.0f, 0.0f, 1.0f ); + break; + } + + CCamera *cam = firstCam; + while ( cam ) { + cam->GetCam()->draw( ( ( Listener && cam == g_pCurrentEditCam ) ? true : false ) ); + cam = cam->GetNext(); + } g_QglTable.m_pfn_qglPopMatrix(); g_QglTable.m_pfn_qglPopAttrib(); @@ -94,47 +95,48 @@ void CRenderer::Draw3D() { static long msecs; static long current; - if( g_iPreviewRunning ) { - if( g_iPreviewRunning == 1 ) { + if ( g_iPreviewRunning ) { + if ( g_iPreviewRunning == 1 ) { start = g_FuncTable.m_pfnQGetTickCount(); GetCurrentCam()->GetCam()->startCamera( start ); cycle = GetCurrentCam()->GetCam()->getTotalTime(); - msecs = (long)(cycle * 1000); + msecs = (long)( cycle * 1000 ); current = start; g_iPreviewRunning = 2; } - if( current < start + msecs ) { + if ( current < start + msecs ) { float fov; - vec3_t origin = {0.0f, 0.0f, 0.0f}, dir = {0.0f, 0.0f, 0.0f}, angles; + vec3_t origin = {0.0f, 0.0f, 0.0f}, dir = {0.0f, 0.0f, 0.0f}, angles; GetCurrentCam()->GetCam()->getCameraInfo( current, &origin[0], &dir[0], &fov ); - VectorSet( angles, asin (dir[2])*180/3.14159, atan2 (dir[1], dir[0])*180/3.14159, 0 ); + VectorSet( angles, asin( dir[2] ) * 180 / 3.14159, atan2( dir[1], dir[0] ) * 180 / 3.14159, 0 ); g_CameraTable.m_pfnSetCamera( origin, angles ); current = g_FuncTable.m_pfnQGetTickCount(); - } else { + } + else { g_iPreviewRunning = 0; GetCurrentCam()->GetCam()->setRunning( false ); g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA ); } } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - CCamera *cam = firstCam; - while( cam ) { - cam->GetCam()->draw( ((Listener && cam == g_pCurrentEditCam) ? true : false) ); - cam = cam->GetNext(); - } + CCamera *cam = firstCam; + while ( cam ) { + cam->GetCam()->draw( ( ( Listener && cam == g_pCurrentEditCam ) ? true : false ) ); + cam = cam->GetNext(); + } - if( g_iPreviewRunning ) { + if ( g_iPreviewRunning ) { int x, y, width, height, i; float degInRad; g_CameraTable.m_pfnGetCamWindowExtents( &x, &y, &width, &height ); // setup orthographic projection mode - g_QglTable.m_pfn_qglMatrixMode(GL_PROJECTION); + g_QglTable.m_pfn_qglMatrixMode( GL_PROJECTION ); g_QglTable.m_pfn_qglLoadIdentity(); g_QglTable.m_pfn_qglDisable( GL_DEPTH_TEST ); g_QglTable.m_pfn_qglOrtho( 0, (float)width, 0, (float)height, -100, 100 ); @@ -150,24 +152,24 @@ void CRenderer::Draw3D() { g_QglTable.m_pfn_qglEnd(); g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP ); - for( i = 0; i < 360; i += 60 ) { - degInRad = i * (3.14159265358979323846/180.f); - g_QglTable.m_pfn_qglVertex2f( 18 + cos(degInRad) * 5, 18 + sin(degInRad) * 5 ); + for ( i = 0; i < 360; i += 60 ) { + degInRad = i * ( 3.14159265358979323846 / 180.f ); + g_QglTable.m_pfn_qglVertex2f( 18 + cos( degInRad ) * 5, 18 + sin( degInRad ) * 5 ); } g_QglTable.m_pfn_qglEnd(); - degInRad = (360-((current - start) % 360)) * (3.14159265358979323846/180.f); + degInRad = ( 360 - ( ( current - start ) % 360 ) ) * ( 3.14159265358979323846 / 180.f ); g_QglTable.m_pfn_qglBegin( GL_LINES ); g_QglTable.m_pfn_qglVertex2f( 18, 18 ); - g_QglTable.m_pfn_qglVertex2f( 18 + cos(degInRad) * 5, 18 + sin(degInRad) * 5 ); + g_QglTable.m_pfn_qglVertex2f( 18 + cos( degInRad ) * 5, 18 + sin( degInRad ) * 5 ); g_QglTable.m_pfn_qglVertex2f( 32, 18 ); - g_QglTable.m_pfn_qglVertex2f( 32 + cos(degInRad) * 5, 18 + sin(degInRad) * 5 ); + g_QglTable.m_pfn_qglVertex2f( 32 + cos( degInRad ) * 5, 18 + sin( degInRad ) * 5 ); g_QglTable.m_pfn_qglEnd(); g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP ); - for( i = 0; i < 360; i += 60 ) { - degInRad = i * (3.14159265358979323846/180.f); - g_QglTable.m_pfn_qglVertex2f( 32 + cos(degInRad) * 5, 18 + sin(degInRad) * 5 ); + for ( i = 0; i < 360; i += 60 ) { + degInRad = i * ( 3.14159265358979323846 / 180.f ); + g_QglTable.m_pfn_qglVertex2f( 32 + cos( degInRad ) * 5, 18 + sin( degInRad ) * 5 ); } g_QglTable.m_pfn_qglEnd(); @@ -179,5 +181,5 @@ void CRenderer::Draw3D() { g_QglTable.m_pfn_qglEnd(); } - g_QglTable.m_pfn_qglPopAttrib(); + g_QglTable.m_pfn_qglPopAttrib(); } diff --git a/contrib/camera/renderer.h b/contrib/camera/renderer.h index 989567a1..87a9492f 100644 --- a/contrib/camera/renderer.h +++ b/contrib/camera/renderer.h @@ -1,46 +1,50 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -Camera plugin for GtkRadiant -Copyright (C) 2002 Splash Damage Ltd. -*/ + Camera plugin for GtkRadiant + Copyright (C) 2002 Splash Damage Ltd. + */ class CRenderer : public IGL2DWindow, public IGL3DWindow { public: - CRenderer(); - virtual ~CRenderer(); +CRenderer(); +virtual ~CRenderer(); protected: - int refCount; +int refCount; public: - void Register(); - void UnRegister(); - void Initialize(); - void Draw2D( VIEWTYPE vt ); - void Draw3D(); - - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } - - bool m_bHooked; +void Register(); +void UnRegister(); +void Initialize(); +void Draw2D( VIEWTYPE vt ); +void Draw3D(); + +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} + +bool m_bHooked; }; diff --git a/contrib/gtkgensurf/bitmap.cpp b/contrib/gtkgensurf/bitmap.cpp index bde2595d..b49c6ca9 100644 --- a/contrib/gtkgensurf/bitmap.cpp +++ b/contrib/gtkgensurf/bitmap.cpp @@ -1,21 +1,21 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 #include @@ -32,416 +32,428 @@ typedef __int16 int16_t; #include #include "gensurf.h" -void GenerateBitmapMapping () -{ - double value; - double C0, C1; - double x, y; - int i, j; - int O00,O01,O10,O11; - int r0, r1, c0, c1; - int color; - unsigned char *colors; - - if (!gbmp.colors) - return; - - colors = gbmp.colors; - - for (j=0; j<=NV; j++) - { - y = (double)(j*(gbmp.height-1))/(double)NV; - r0 = (int)floor(y); - r1 = (int)ceil(y); - for (i=0; i<=NH; i++) - { - x = (double)(i*(gbmp.width-1))/(double)NH; - c0 = (int)floor(x); - c1 = (int)ceil(x); - O00 = r0*gbmp.width + c0; - O01 = r0*gbmp.width + c1; - O10 = r1*gbmp.width + c0; - O11 = r1*gbmp.width + c1; - C0 = (double)colors[O00] + (double)(colors[O01]-colors[O00])*(x-(double)c0); - C1 = (double)colors[O10] + (double)(colors[O11]-colors[O10])*(x-(double)c0); - color = (int)(C0 + (C1-C0)*(y-r0)); - - value = CalculateSnapValue(gbmp.black_value + color*((gbmp.white_value-gbmp.black_value)/255.)); - - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - xyz[i][j].p[1] = value; - break; - case PLANE_YZ0: - case PLANE_YZ1: - xyz[i][j].p[0] = value; - break; - default: - xyz[i][j].p[2] = value; - } - } - } +void GenerateBitmapMapping(){ + double value; + double C0, C1; + double x, y; + int i, j; + int O00,O01,O10,O11; + int r0, r1, c0, c1; + int color; + unsigned char *colors; + + if ( !gbmp.colors ) { + return; + } + + colors = gbmp.colors; + + for ( j = 0; j <= NV; j++ ) + { + y = (double)( j * ( gbmp.height - 1 ) ) / (double)NV; + r0 = (int)floor( y ); + r1 = (int)ceil( y ); + for ( i = 0; i <= NH; i++ ) + { + x = (double)( i * ( gbmp.width - 1 ) ) / (double)NH; + c0 = (int)floor( x ); + c1 = (int)ceil( x ); + O00 = r0 * gbmp.width + c0; + O01 = r0 * gbmp.width + c1; + O10 = r1 * gbmp.width + c0; + O11 = r1 * gbmp.width + c1; + C0 = (double)colors[O00] + (double)( colors[O01] - colors[O00] ) * ( x - (double)c0 ); + C1 = (double)colors[O10] + (double)( colors[O11] - colors[O10] ) * ( x - (double)c0 ); + color = (int)( C0 + ( C1 - C0 ) * ( y - r0 ) ); + + value = CalculateSnapValue( gbmp.black_value + color * ( ( gbmp.white_value - gbmp.black_value ) / 255. ) ); + + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + xyz[i][j].p[1] = value; + break; + case PLANE_YZ0: + case PLANE_YZ1: + xyz[i][j].p[0] = value; + break; + default: + xyz[i][j].p[2] = value; + } + } + } } -static unsigned char* OpenBitmapFile () -{ -#define INVALID_FORMAT do{\ - fprintf(stderr,"%s:%d: Error file '%s' is malformed.\n",__FILE__,__LINE__,gbmp.name);\ - fclose(fp);\ - return NULL;\ -}while(0); - - int32_t bmWidth; - int32_t bmHeight; - uint16_t bmPlanes; - uint16_t bmBitsPixel; - uint8_t m1,m2; - uint32_t sizeimage; - int16_t res1,res2; - int32_t filesize, pixoff; - int32_t bmisize, compression; - int32_t xscale, yscale; - int32_t colors, impcol; - uint32_t m_bytesRead = 0; - unsigned char *image; - FILE *fp; - - fp = fopen (gbmp.name, "rb"); - if (fp == NULL) - { - fprintf(stderr,"Error: Invalid filename '%s'\n",gbmp.name); - return NULL; - } - - long rc; - rc = fread(&m1, 1, 1, fp); - m_bytesRead++; - if (rc == -1) - { - fclose(fp); - return NULL; - } - - rc = fread(&m2, 1, 1, fp); - m_bytesRead++; - if ((m1 != 'B') || (m2 != 'M')) - INVALID_FORMAT; - - rc = fread((uint32_t*)&(filesize),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint16_t*)&(res1),2,1,fp); m_bytesRead+=2; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint16_t*)&(res2),2,1,fp); m_bytesRead+=2; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(pixoff),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(bmisize),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t *)&(bmWidth),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(bmHeight),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint16_t*)&(bmPlanes),2,1,fp); m_bytesRead+=2; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint16_t*)&(bmBitsPixel),2,1,fp); m_bytesRead+=2; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(compression),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(sizeimage),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(xscale),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(yscale),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(colors),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - rc = fread((uint32_t*)&(impcol),4,1,fp); m_bytesRead+=4; - if (rc != 1) INVALID_FORMAT; - - if (bmBitsPixel != 8) - { - g_FuncTable.m_pfnMessageBox (g_pWnd, "This is not an 8-bit image. GenSurf can't use it.", - "Bitmap", MB_ICONEXCLAMATION, NULL); - INVALID_FORMAT; - } - - if (colors == 0) - colors = 1 << bmBitsPixel; - - if (bmBitsPixel != 24) - { - int i; - for (i = 0; i < colors; i++) - { - unsigned char r ,g, b, dummy; - - rc = fread(&b, 1, 1, fp); - m_bytesRead++; - if (rc!=1) - { - INVALID_FORMAT; - } - - rc = fread(&g, 1, 1, fp); - m_bytesRead++; - if (rc!=1) - { - INVALID_FORMAT; - } - - rc = fread(&r, 1, 1, fp); - m_bytesRead++; - if (rc != 1) - { - INVALID_FORMAT; - } - - rc = fread(&dummy, 1, 1, fp); - m_bytesRead++; - if (rc != 1) - { - INVALID_FORMAT; - } - } - } - - if ((long)m_bytesRead > pixoff) - { - INVALID_FORMAT; - } - - while ((long)m_bytesRead < pixoff) - { - char dummy; - fread(&dummy,1,1,fp); - m_bytesRead++; - } - - int w = bmWidth; - int h = bmHeight; - - // set the output params - image = (unsigned char*)malloc(w*h); - - if (image != NULL) - { - unsigned char* outbuf = image; - long row = 0; - long rowOffset = 0; - - if (compression == 0) // BI_RGB - { - for (row = 0; row < bmHeight; row++) - { - // which row are we working on? - rowOffset = (long unsigned)row*w; - - { - // pixels are packed as 1 , 4 or 8 bit vals. need to unpack them - int bit_count = 0; - unsigned long mask = (1 << bmBitsPixel) - 1; - unsigned char inbyte = 0; - - for (int col=0;col> bit_count) & mask; - - // lookup the color from the colormap - stuff it in our buffer - // swap red and blue - *(outbuf + rowOffset + col) = pix; - } - - // read DWORD padding - while ((m_bytesRead-pixoff)&3) - { - char dummy; - if (fread(&dummy,1,1,fp)!=1) - { - free(image); - INVALID_FORMAT; - } - m_bytesRead++; - } - } - } - } - else // compression != 0 - { - int i, x = 0; - unsigned char c, c1 = 0, *pp; - row = 0; - pp = outbuf; - - if (bmBitsPixel == 8) - { - while (row < bmHeight) - { - c = getc(fp); - - if (c) - { - // encoded mode - c1 = getc(fp); - for (i = 0; i < c; x++, i++) - { - *pp = c1; pp++; - } - } - else - { - // c==0x00, escape codes - c = getc(fp); - - if (c == 0x00) // end of line - { - row++; - x = 0; - pp = outbuf + row*bmWidth; - } - else if (c == 0x01) - break; // end of pic - else if (c == 0x02) // delta - { - c = getc(fp); - x += c; - c = getc(fp); - row += c; - pp = outbuf + x + row*bmWidth; - } - else // absolute mode - { - for (i = 0; i < c; x++, i++) - { - c1 = getc(fp); - *pp = c1; pp++; - } - - if (c & 1) - getc(fp); // odd length run: read an extra pad byte - } - } - } - } - else if (bmBitsPixel == 4) - { - while (row < bmHeight) - { - c = getc(fp); - - if (c) - { - // encoded mode - c1 = getc(fp); - for (i = 0; i < c; x++, i++) - { - *pp = (i&1) ? (c1 & 0x0f) : ((c1>>4)&0x0f); pp++; - } - } - else - { - // c==0x00, escape codes - c = getc(fp); - - if (c == 0x00) // end of line - { - row++; - x = 0; - pp = outbuf + bmHeight*bmWidth; - } - else if (c == 0x01) - break; // end of pic - else if (c == 0x02) // delta - { - c = getc(fp); - x += c; - c = getc(fp); - row += c; - pp = outbuf + x + row*bmWidth; - } - else // absolute mode - { - for (i = 0; i < c; x++, i++) - { - if ((i&1) == 0) - c1 = getc(fp); - *pp = (i&1) ? (c1 & 0x0f) : ((c1>>4)&0x0f); pp++; - } - - if (((c&3) == 1) || ((c&3) == 2)) - getc(fp); // odd length run: read an extra pad byte - } - } - } - } - } - } - fclose(fp); - - gbmp.width = w; - gbmp.height = h; - if(gbmp.colors) - free(gbmp.colors); - gbmp.colors = image; - return image; +static unsigned char* OpenBitmapFile(){ +#define INVALID_FORMAT do { \ + fprintf( stderr,"%s:%d: Error file '%s' is malformed.\n",__FILE__,__LINE__,gbmp.name ); \ + fclose( fp ); \ + return NULL; \ +} while ( 0 ) + + int32_t bmWidth; + int32_t bmHeight; + uint16_t bmPlanes; + uint16_t bmBitsPixel; + uint8_t m1,m2; + uint32_t sizeimage; + int16_t res1,res2; + int32_t filesize, pixoff; + int32_t bmisize, compression; + int32_t xscale, yscale; + int32_t colors, impcol; + uint32_t m_bytesRead = 0; + unsigned char *image; + FILE *fp; + + fp = fopen( gbmp.name, "rb" ); + if ( fp == NULL ) { + fprintf( stderr,"Error: Invalid filename '%s'\n",gbmp.name ); + return NULL; + } + + long rc; + rc = fread( &m1, 1, 1, fp ); + m_bytesRead++; + if ( rc == -1 ) { + fclose( fp ); + return NULL; + } + + rc = fread( &m2, 1, 1, fp ); + m_bytesRead++; + if ( ( m1 != 'B' ) || ( m2 != 'M' ) ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( filesize ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint16_t*)&( res1 ),2,1,fp ); m_bytesRead += 2; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint16_t*)&( res2 ),2,1,fp ); m_bytesRead += 2; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( pixoff ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( bmisize ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t *)&( bmWidth ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( bmHeight ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint16_t*)&( bmPlanes ),2,1,fp ); m_bytesRead += 2; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint16_t*)&( bmBitsPixel ),2,1,fp ); m_bytesRead += 2; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( compression ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( sizeimage ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( xscale ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( yscale ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( colors ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( (uint32_t*)&( impcol ),4,1,fp ); m_bytesRead += 4; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + if ( bmBitsPixel != 8 ) { + g_FuncTable.m_pfnMessageBox( g_pWnd, "This is not an 8-bit image. GenSurf can't use it.", + "Bitmap", MB_ICONEXCLAMATION, NULL ); + INVALID_FORMAT; + } + + if ( colors == 0 ) { + colors = 1 << bmBitsPixel; + } + + if ( bmBitsPixel != 24 ) { + int i; + for ( i = 0; i < colors; i++ ) + { + unsigned char r,g, b, dummy; + + rc = fread( &b, 1, 1, fp ); + m_bytesRead++; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( &g, 1, 1, fp ); + m_bytesRead++; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( &r, 1, 1, fp ); + m_bytesRead++; + if ( rc != 1 ) { + INVALID_FORMAT; + } + + rc = fread( &dummy, 1, 1, fp ); + m_bytesRead++; + if ( rc != 1 ) { + INVALID_FORMAT; + } + } + } + + if ( (long)m_bytesRead > pixoff ) { + INVALID_FORMAT; + } + + while ( (long)m_bytesRead < pixoff ) + { + char dummy; + fread( &dummy,1,1,fp ); + m_bytesRead++; + } + + int w = bmWidth; + int h = bmHeight; + + // set the output params + image = (unsigned char*)malloc( w * h ); + + if ( image != NULL ) { + unsigned char* outbuf = image; + long row = 0; + long rowOffset = 0; + + if ( compression == 0 ) { // BI_RGB + for ( row = 0; row < bmHeight; row++ ) + { + // which row are we working on? + rowOffset = (long unsigned)row * w; + + { + // pixels are packed as 1 , 4 or 8 bit vals. need to unpack them + int bit_count = 0; + unsigned long mask = ( 1 << bmBitsPixel ) - 1; + unsigned char inbyte = 0; + + for ( int col = 0; col < w; col++ ) + { + int pix = 0; + + // if we need another byte + if ( bit_count <= 0 ) { + bit_count = 8; + if ( fread( &inbyte,1,1,fp ) != 1 ) { + free( image ); + INVALID_FORMAT; + } + m_bytesRead++; + } + + // keep track of where we are in the bytes + bit_count -= bmBitsPixel; + pix = ( inbyte >> bit_count ) & mask; + + // lookup the color from the colormap - stuff it in our buffer + // swap red and blue + *( outbuf + rowOffset + col ) = pix; + } + + // read DWORD padding + while ( ( m_bytesRead - pixoff ) & 3 ) + { + char dummy; + if ( fread( &dummy,1,1,fp ) != 1 ) { + free( image ); + INVALID_FORMAT; + } + m_bytesRead++; + } + } + } + } + else // compression != 0 + { + int i, x = 0; + unsigned char c, c1 = 0, *pp; + row = 0; + pp = outbuf; + + if ( bmBitsPixel == 8 ) { + while ( row < bmHeight ) + { + c = getc( fp ); + + if ( c ) { + // encoded mode + c1 = getc( fp ); + for ( i = 0; i < c; x++, i++ ) + { + *pp = c1; pp++; + } + } + else + { + // c==0x00, escape codes + c = getc( fp ); + + if ( c == 0x00 ) { // end of line + row++; + x = 0; + pp = outbuf + row * bmWidth; + } + else if ( c == 0x01 ) { + break; // end of pic + } + else if ( c == 0x02 ) { // delta + c = getc( fp ); + x += c; + c = getc( fp ); + row += c; + pp = outbuf + x + row * bmWidth; + } + else // absolute mode + { + for ( i = 0; i < c; x++, i++ ) + { + c1 = getc( fp ); + *pp = c1; pp++; + } + + if ( c & 1 ) { + getc( fp ); // odd length run: read an extra pad byte + } + } + } + } + } + else if ( bmBitsPixel == 4 ) { + while ( row < bmHeight ) + { + c = getc( fp ); + + if ( c ) { + // encoded mode + c1 = getc( fp ); + for ( i = 0; i < c; x++, i++ ) + { + *pp = ( i & 1 ) ? ( c1 & 0x0f ) : ( ( c1 >> 4 ) & 0x0f ); pp++; + } + } + else + { + // c==0x00, escape codes + c = getc( fp ); + + if ( c == 0x00 ) { // end of line + row++; + x = 0; + pp = outbuf + bmHeight * bmWidth; + } + else if ( c == 0x01 ) { + break; // end of pic + } + else if ( c == 0x02 ) { // delta + c = getc( fp ); + x += c; + c = getc( fp ); + row += c; + pp = outbuf + x + row * bmWidth; + } + else // absolute mode + { + for ( i = 0; i < c; x++, i++ ) + { + if ( ( i & 1 ) == 0 ) { + c1 = getc( fp ); + } + *pp = ( i & 1 ) ? ( c1 & 0x0f ) : ( ( c1 >> 4 ) & 0x0f ); pp++; + } + + if ( ( ( c & 3 ) == 1 ) || ( ( c & 3 ) == 2 ) ) { + getc( fp ); // odd length run: read an extra pad byte + } + } + } + } + } + } + } + fclose( fp ); + + gbmp.width = w; + gbmp.height = h; + if ( gbmp.colors ) { + free( gbmp.colors ); + } + gbmp.colors = image; + return image; } -bool OpenBitmap () -{ +bool OpenBitmap(){ - OpenBitmapFile (); + OpenBitmapFile(); - if (!gbmp.colors) - { - g_print("failed to load file gbmp %s\n",gbmp.name); - char Text[256]; + if ( !gbmp.colors ) { + g_print( "failed to load file gbmp %s\n",gbmp.name ); + char Text[256]; - sprintf (Text, "Error opening %s", gbmp.name); - g_FuncTable.m_pfnMessageBox (g_pWnd, Text, "Bitmap", MB_ICONEXCLAMATION, NULL); - strcpy (gbmp.name, ""); - } + sprintf( Text, "Error opening %s", gbmp.name ); + g_FuncTable.m_pfnMessageBox( g_pWnd, Text, "Bitmap", MB_ICONEXCLAMATION, NULL ); + strcpy( gbmp.name, "" ); + } - if (g_pWnd) - { - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file")), gbmp.name); - gtk_widget_set_sensitive (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_reload")), - strlen (gbmp.name) ? TRUE : FALSE); + if ( g_pWnd ) { + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_file" ) ), gbmp.name ); + gtk_widget_set_sensitive( GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_reload" ) ), + strlen( gbmp.name ) ? TRUE : FALSE ); - UpdatePreview (true); - } + UpdatePreview( true ); + } - return (gbmp.colors != NULL); + return ( gbmp.colors != NULL ); } diff --git a/contrib/gtkgensurf/dec.cpp b/contrib/gtkgensurf/dec.cpp index 8a61b2f7..3a96410e 100644 --- a/contrib/gtkgensurf/dec.cpp +++ b/contrib/gtkgensurf/dec.cpp @@ -1,21 +1,21 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 + */ #define SINGLE #ifdef SINGLE @@ -33,50 +33,51 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA typedef struct { float error; - int node; + int node; } TRITABLE; double dh, dv; -int NVP1; - -#define Absolute(a) ((a) >= 0.0 ? (a) : -(a)) - -void MakeDecimatedMap(int *NumNodes, int *NumTris, NODE **pNode, TRI **pTri) -{ - int compare(TRITABLE *, TRITABLE *); - int Bisect(NODE *, int, int, int); - void CalcAngles(NODE *, int *, float *); - void EdgeOnSide(int *, int *, int *); - int tricall(int, NODE *, int *, TRI **, TRI **, const char *); - int CheckBorders(int *,int,NODE *,int *,TRI **); - - float biggesterror; - int i, j, N; - int j0, j1, j2; - int NumNodesToSave; - int NumNodesUsed; +int NVP1; + +#define Absolute( a ) ( ( a ) >= 0.0 ? ( a ) : -( a ) ) + +void MakeDecimatedMap( int *NumNodes, int *NumTris, NODE **pNode, TRI **pTri ){ + int compare( TRITABLE *, TRITABLE * ); + int Bisect( NODE *, int, int, int ); + void CalcAngles( NODE *, int *, float * ); + void EdgeOnSide( int *, int *, int * ); + int tricall( int, NODE *, int *, TRI * *, TRI * *, const char * ); + int CheckBorders( int *,int,NODE *,int *,TRI * * ); + + float biggesterror; + int i, j, N; + int j0, j1, j2; + int NumNodesToSave; + int NumNodesUsed; NODE *Node; TRI *Tri; TRITABLE *TriTable; - if(Decimate <= 0) return; - /* - ghCursorCurrent = LoadCursor(NULL,IDC_WAIT); - SetCursor(ghCursorCurrent); - */ - dh = (Hur-Hll)/NH; - dv = (Vur-Vll)/NV; - NVP1 = NV+1; - - NumNodes[0] = (NH+1)*(NVP1); - *pNode = (NODE *) malloc(NumNodes[0] * sizeof(NODE)); + if ( Decimate <= 0 ) { + return; + } + /* + ghCursorCurrent = LoadCursor(NULL,IDC_WAIT); + SetCursor(ghCursorCurrent); + */ + dh = ( Hur - Hll ) / NH; + dv = ( Vur - Vll ) / NV; + NVP1 = NV + 1; + + NumNodes[0] = ( NH + 1 ) * ( NVP1 ); + *pNode = (NODE *) malloc( NumNodes[0] * sizeof( NODE ) ); Node = *pNode; - memset(Node,0,NumNodes[0]*sizeof(NODE)); + memset( Node,0,NumNodes[0] * sizeof( NODE ) ); // Copy [NH][NV] vertex array to our working node array - for(i=0,N=0; i<=NH; i++) + for ( i = 0,N = 0; i <= NH; i++ ) { - for(j=0; j<=NV; j++, N++) + for ( j = 0; j <= NV; j++, N++ ) { Node[N].p[0] = (float)xyz[i][j].p[0]; Node[N].p[1] = (float)xyz[i][j].p[1]; @@ -87,14 +88,14 @@ void MakeDecimatedMap(int *NumNodes, int *NumTris, NODE **pNode, TRI **pTri) // Start things off with the corner values Node[ 0].used = 1; Node[NV].used = 1; - Node[NH*NVP1].used = 1; - Node[NH*NVP1+NV].used = 1; + Node[NH * NVP1].used = 1; + Node[NH * NVP1 + NV].used = 1; NumNodesUsed = 4; - tricall(NumNodes[0], Node, NumTris, NULL, pTri, "cnzBNPY"); + tricall( NumNodes[0], Node, NumTris, NULL, pTri, "cnzBNPY" ); Tri = *pTri; // Which coordinates are we triangulating on? - switch(Plane) + switch ( Plane ) { case PLANE_XZ0: case PLANE_XZ1: @@ -116,161 +117,181 @@ void MakeDecimatedMap(int *NumNodes, int *NumTris, NODE **pNode, TRI **pTri) // TriTable stores the largest error in a triangle and the node where that // error occurs - TriTable = (TRITABLE *) malloc(NH*NV*2 * sizeof(TRITABLE)); - NumNodesToSave = min(NumNodes[0], (int)(0.01*(100-Decimate)*(NumNodes[0]-NumNodesUsed)+NumNodesUsed)); + TriTable = (TRITABLE *) malloc( NH * NV * 2 * sizeof( TRITABLE ) ); + NumNodesToSave = min( NumNodes[0], (int)( 0.01 * ( 100 - Decimate ) * ( NumNodes[0] - NumNodesUsed ) + NumNodesUsed ) ); - while(NumNodesUsed < NumNodesToSave) + while ( NumNodesUsed < NumNodesToSave ) { - for(i=0; i TriTable[Node[i].tri].error) - { - TriTable[Node[i].tri].error = (float)(Absolute(Node[i].error)); + if ( Node[i].used ) { + continue; + } + if ( Absolute( Node[i].error ) > TriTable[Node[i].tri].error ) { + TriTable[Node[i].tri].error = (float)( Absolute( Node[i].error ) ); TriTable[Node[i].tri].node = i; } } - qsort( (void *)TriTable, (size_t)(NumTris[0]), sizeof(TRITABLE), (int (*)(const void *, const void *))compare ); - for(i=0; i 0.5*biggesterror; i++) + qsort( (void *)TriTable, (size_t)( NumTris[0] ), sizeof( TRITABLE ), ( int ( * )( const void *, const void * ) )compare ); + for ( i = 0; i < NumTris[0] && NumNodesUsed < NumNodesToSave && TriTable[i].error > 0.5 * biggesterror; i++ ) { - if(Node[TriTable[i].node].used) continue; // shouldn't happen + if ( Node[TriTable[i].node].used ) { + continue; // shouldn't happen + } NumNodesUsed++; Node[TriTable[i].node].used++; } - free(Tri); - tricall(NumNodes[0], Node, NumTris, NULL, pTri, "cnzBNPY"); + free( Tri ); + tricall( NumNodes[0], Node, NumTris, NULL, pTri, "cnzBNPY" ); Tri = *pTri; // Sliver-check along borders. Since borders are often linear, the errors // along borders will often be zero, so no new points will be added. This // tends to produce long, thin brushes. For all border triangles, check // that minimum angle isn't less than SLIVER_ANGLE. If it is, add another // vertex. - while(CheckBorders(&NumNodesUsed,NumNodes[0],Node,NumTris,pTri) > 0) + while ( CheckBorders( &NumNodesUsed,NumNodes[0],Node,NumTris,pTri ) > 0 ) { } Tri = *pTri; } } - free(TriTable); + free( TriTable ); // One last time (because we're pessimistic), check border triangles // CheckBorders(&NumNodesUsed,NumNodes[0],Node,NumTris,pTri); // Tri = *pTri; // Check that all fixed points are exact. If not, add them to the mix. // First check to see if we have any fixed points that aren't already used. - for(i=0, N=0; i 0.5) - { + if ( Absolute( Node[i].error ) > 0.5 ) { NumNodesUsed++; Node[i].used++; - free(Tri); - tricall(NumNodes[0], Node, NumTris, NULL, pTri, "cnzBNPY"); + free( Tri ); + tricall( NumNodes[0], Node, NumTris, NULL, pTri, "cnzBNPY" ); Tri = *pTri; } } @@ -279,9 +300,8 @@ void MakeDecimatedMap(int *NumNodes, int *NumTris, NODE **pNode, TRI **pTri) // Swap node orders for surfaces facing down, north or west so that // they are counterclockwise when facing the surface - if((Plane == PLANE_XY1) || (Plane == PLANE_XZ0) || (Plane == PLANE_YZ1) ) - { - for(i=0; i= R) && (v[1] >= R) ) - { + if ( ( v[0] >= R ) && ( v[1] >= R ) ) { edge[0] = 0; border[0] = 1; } - if( (v[1] >= R) && (v[2] >= R) ) - { + if ( ( v[1] >= R ) && ( v[2] >= R ) ) { edge[0] = 1; border[0] = 1; } - if( (v[2] >= R) && (v[0] >= R) ) - { + if ( ( v[2] >= R ) && ( v[0] >= R ) ) { edge[0] = 2; border[0] = 1; } - if(border[0] >= 0) - { + if ( border[0] >= 0 ) { k0 = edge[0]; - k1 = (k0+1) % 3; - N = Absolute(v[k0] - v[k1]); - Ndv = (float)(N*dv); + k1 = ( k0 + 1 ) % 3; + N = Absolute( v[k0] - v[k1] ); + Ndv = (float)( N * dv ); } - if( ((v[0] % NVP1) == 0) && ((v[1] % NVP1) == 0) ) - { - if(border[0] >= 0) - if( Ndv > (Absolute(v[0] - v[1])*dh)) return; + if ( ( ( v[0] % NVP1 ) == 0 ) && ( ( v[1] % NVP1 ) == 0 ) ) { + if ( border[0] >= 0 ) { + if ( Ndv > ( Absolute( v[0] - v[1] ) * dh ) ) { + return; + } + } edge[0] = 0; border[0] = 2; return; } - if( ((v[1] % NVP1) == 0) && ((v[2] % NVP1) == 0) ) - { - if(border[0] >= 0) - if( Ndv > (Absolute(v[1] - v[2])*dh)) return; + if ( ( ( v[1] % NVP1 ) == 0 ) && ( ( v[2] % NVP1 ) == 0 ) ) { + if ( border[0] >= 0 ) { + if ( Ndv > ( Absolute( v[1] - v[2] ) * dh ) ) { + return; + } + } edge[0] = 1; border[0] = 2; return; } - if( ((v[2] % NVP1) == 0) && ((v[0] % NVP1) == 0) ) - { - if(border[0] >= 0) - if( Ndv > (Absolute(v[2] - v[0])*dh)) return; + if ( ( ( v[2] % NVP1 ) == 0 ) && ( ( v[0] % NVP1 ) == 0 ) ) { + if ( border[0] >= 0 ) { + if ( Ndv > ( Absolute( v[2] - v[0] ) * dh ) ) { + return; + } + } edge[0] = 2; border[0] = 2; return; } - if( ((v[0] % NVP1) == NV) && ((v[1] % NVP1) == NV) ) - { - if(border[0] >= 0) - if( Ndv > (Absolute(v[0] - v[1])*dh)) return; + if ( ( ( v[0] % NVP1 ) == NV ) && ( ( v[1] % NVP1 ) == NV ) ) { + if ( border[0] >= 0 ) { + if ( Ndv > ( Absolute( v[0] - v[1] ) * dh ) ) { + return; + } + } edge[0] = 0; border[0] = 3; return; } - if( ((v[1] % NVP1) == NV) && ((v[2] % NVP1) == NV) ) - { - if(border[0] >= 0) - if( Ndv > (Absolute(v[1] - v[2])*dh)) return; + if ( ( ( v[1] % NVP1 ) == NV ) && ( ( v[2] % NVP1 ) == NV ) ) { + if ( border[0] >= 0 ) { + if ( Ndv > ( Absolute( v[1] - v[2] ) * dh ) ) { + return; + } + } edge[0] = 1; border[0] = 3; return; } - if( ((v[2] % NVP1) == NV) && ((v[0] % NVP1) == NV) ) - { - if(border[0] >= 0) - if( Ndv > (Absolute(v[2] - v[0])*dh)) return; + if ( ( ( v[2] % NVP1 ) == NV ) && ( ( v[0] % NVP1 ) == NV ) ) { + if ( border[0] >= 0 ) { + if ( Ndv > ( Absolute( v[2] - v[0] ) * dh ) ) { + return; + } + } edge[0] = 2; border[0] = 3; return; @@ -592,15 +670,14 @@ void EdgeOnSide(int *v, int *edge, int *border) return; } -void CalcAngles(NODE *node, int *v, float *angle) -{ +void CalcAngles( NODE *node, int *v, float *angle ){ int i, j, k; vec l; vec x0, x1, x2, y0, y1, y2; vec2 vv[3]; vec dot; - switch(Plane) + switch ( Plane ) { case PLANE_XZ0: case PLANE_XZ1: @@ -623,100 +700,104 @@ void CalcAngles(NODE *node, int *v, float *angle) y1 = node[v[1]].p[j]; y2 = node[v[2]].p[j]; - vv[0][0] = x1-x0; - vv[0][1] = y1-y0; - vv[1][0] = x2-x1; - vv[1][1] = y2-y1; - vv[2][0] = x0-x2; - vv[2][1] = y0-y2; + vv[0][0] = x1 - x0; + vv[0][1] = y1 - y0; + vv[1][0] = x2 - x1; + vv[1][1] = y2 - y1; + vv[2][0] = x0 - x2; + vv[2][1] = y0 - y2; - for(k=0; k<3; k++) + for ( k = 0; k < 3; k++ ) { - l = (vec)(sqrt( vv[k][0]*vv[k][0] + vv[k][1]*vv[k][1] )); - if(l > 0.) - { + l = (vec)( sqrt( vv[k][0] * vv[k][0] + vv[k][1] * vv[k][1] ) ); + if ( l > 0. ) { vv[k][0] /= l; vv[k][1] /= l; } } - dot = -(vv[0][0]*vv[2][0] + vv[0][1]*vv[2][1]); - angle[0] = (float)(acos(dot)); - dot = -(vv[1][0]*vv[0][0] + vv[1][1]*vv[0][1]); - angle[1] = (float)(acos(dot)); - dot = -(vv[2][0]*vv[1][0] + vv[2][1]*vv[1][1]); - angle[2] = (float)(acos(dot)); + dot = -( vv[0][0] * vv[2][0] + vv[0][1] * vv[2][1] ); + angle[0] = (float)( acos( dot ) ); + dot = -( vv[1][0] * vv[0][0] + vv[1][1] * vv[0][1] ); + angle[1] = (float)( acos( dot ) ); + dot = -( vv[2][0] * vv[1][0] + vv[2][1] * vv[1][1] ); + angle[2] = (float)( acos( dot ) ); } //================================================================= -int Bisect(NODE *node, int border, int j0, int j1) -{ +int Bisect( NODE *node, int border, int j0, int j1 ){ int k; - switch(border) + switch ( border ) { case 0: - k = (j0+j1)/2; + k = ( j0 + j1 ) / 2; break; case 1: - k = (j0+j1)/2; + k = ( j0 + j1 ) / 2; break; case 2: - k = (int)((j0+j1)/(2*NVP1)) * NVP1; + k = (int)( ( j0 + j1 ) / ( 2 * NVP1 ) ) * NVP1; break; case 3: - k = (int)((j0+j1+2)/(2*NVP1)) * NVP1 - 1; + k = (int)( ( j0 + j1 + 2 ) / ( 2 * NVP1 ) ) * NVP1 - 1; break; } - return( ((k != j0) && (k != j1)) ? k : 0 ); + return( ( ( k != j0 ) && ( k != j1 ) ) ? k : 0 ); } //================================================================= -int compare(TRITABLE *t1, TRITABLE *t2) -{ - if(t1->error > t2->error) return -1; - if(t1->error < t2->error) return 1; +int compare( TRITABLE *t1, TRITABLE *t2 ){ + if ( t1->error > t2->error ) { + return -1; + } + if ( t1->error < t2->error ) { + return 1; + } return 0; } -void MakeBrushes(int NumTris, NODE *Node, TRI *Tri,bool surf, - int offset,char *texture0, char *texture1, char *texture2) -{ +void MakeBrushes( int NumTris, NODE *Node, TRI *Tri,bool surf, + int offset,char *texture0, char *texture1, char *texture2 ){ extern double backface; - BRUSH brush; - int contents; - int i, j; - float Steep; - vec3_t PlaneNormal,SurfNormal; - bool CheckAngle; - vec3_t t[2]; + BRUSH brush; + int contents; + int i, j; + float Steep; + vec3_t PlaneNormal,SurfNormal; + bool CheckAngle; + vec3_t t[2]; // if texture2 is identical to texture0, there's no need to // check surface angle - if(!g_strcasecmp(texture0,texture2) || !strlen(texture2)) + if ( !g_strcasecmp( texture0,texture2 ) || !strlen( texture2 ) ) { CheckAngle = FALSE; + } else { CheckAngle = TRUE; - Steep = (float)cos((double)SlantAngle/57.2957795); - switch(Plane) + Steep = (float)cos( (double)SlantAngle / 57.2957795 ); + switch ( Plane ) { - case PLANE_XY0: PlaneNormal[0]= 0.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break; - case PLANE_XY1: PlaneNormal[0]= 0.;PlaneNormal[1]= 0.;PlaneNormal[2]=-1.;break; - case PLANE_XZ0: PlaneNormal[0]= 0.;PlaneNormal[1]= 1.;PlaneNormal[2]= 1.;break; - case PLANE_XZ1: PlaneNormal[0]= 0.;PlaneNormal[1]=-1.;PlaneNormal[2]= 1.;break; - case PLANE_YZ0: PlaneNormal[0]= 1.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break; - case PLANE_YZ1: PlaneNormal[0]=-1.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break; + case PLANE_XY0: PlaneNormal[0] = 0.; PlaneNormal[1] = 0.; PlaneNormal[2] = 1.; break; + case PLANE_XY1: PlaneNormal[0] = 0.; PlaneNormal[1] = 0.; PlaneNormal[2] = -1.; break; + case PLANE_XZ0: PlaneNormal[0] = 0.; PlaneNormal[1] = 1.; PlaneNormal[2] = 1.; break; + case PLANE_XZ1: PlaneNormal[0] = 0.; PlaneNormal[1] = -1.; PlaneNormal[2] = 1.; break; + case PLANE_YZ0: PlaneNormal[0] = 1.; PlaneNormal[1] = 0.; PlaneNormal[2] = 1.; break; + case PLANE_YZ1: PlaneNormal[0] = -1.; PlaneNormal[1] = 0.; PlaneNormal[2] = 1.; break; } } contents = 0; - if(surf) - { - if(UseDetail) contents += CONTENTS_DETAIL; - if(UseLadder) contents += CONTENTS_LADDER; + if ( surf ) { + if ( UseDetail ) { + contents += CONTENTS_DETAIL; + } + if ( UseLadder ) { + contents += CONTENTS_LADDER; + } } OpenFuncGroup(); - for(i=0; i= max(Node[q[0]].p[j1],Node[q[2]].p[j1])) continue; - if(Tri[k].min[j2] >= max(Node[q[0]].p[j2],Node[q[2]].p[j2])) continue; - if(Tri[k].max[j1] <= min(Node[q[0]].p[j1],Node[q[2]].p[j1])) continue; - if(Tri[k].max[j2] <= min(Node[q[0]].p[j2],Node[q[2]].p[j2])) continue; + if ( Tri[k].min[j1] >= max( Node[q[0]].p[j1],Node[q[2]].p[j1] ) ) { + continue; + } + if ( Tri[k].min[j2] >= max( Node[q[0]].p[j2],Node[q[2]].p[j2] ) ) { + continue; + } + if ( Tri[k].max[j1] <= min( Node[q[0]].p[j1],Node[q[2]].p[j1] ) ) { + continue; + } + if ( Tri[k].max[j2] <= min( Node[q[0]].p[j2],Node[q[2]].p[j2] ) ) { + continue; + } - for(h0=0; h0<4 && OK; h0++) + for ( h0 = 0; h0 < 4 && OK; h0++ ) { - h1 = (h0+1)%4; - for(t=0; t<3 && OK; t++) + h1 = ( h0 + 1 ) % 4; + for ( t = 0; t < 3 && OK; t++ ) { - s[t] = side(Node[q[h0]].p[j1],Node[q[h0]].p[j2], - Node[q[h1]].p[j1],Node[q[h1]].p[j2], - Node[Tri[k].v[t]].p[j1],Node[Tri[k].v[t]].p[j2]); + s[t] = side( Node[q[h0]].p[j1],Node[q[h0]].p[j2], + Node[q[h1]].p[j1],Node[q[h1]].p[j2], + Node[Tri[k].v[t]].p[j1],Node[Tri[k].v[t]].p[j2] ); + } + if ( ( s[1] > 0 || s[2] > 0 ) && s[0] < 0 ) { + OK = 0; + } + if ( ( s[2] > 0 || s[0] > 0 ) && s[1] < 0 ) { + OK = 0; + } + if ( ( s[0] > 0 || s[1] > 0 ) && s[2] < 0 ) { + OK = 0; } - if((s[1] > 0 || s[2] > 0) && s[0] < 0) OK=0; - if((s[2] > 0 || s[0] > 0) && s[1] < 0) OK=0; - if((s[0] > 0 || s[1] > 0) && s[2] < 0) OK=0; } } - if(!OK) continue; - switch(Plane) + if ( !OK ) { + continue; + } + switch ( Plane ) { case PLANE_XZ0: case PLANE_XZ1: @@ -1152,10 +1252,10 @@ void MapOut(int NumNodes,int NumTris, NODE *Node, TRI *Tri) brush.face[1].v[2][1] = (float)backface; brush.face[1].v[2][2] = Node[q[2]].p[2]; - for(k0=0; k0= 0) - { - if(!Node[j].used) // Shouldn't be used, but... - { + EdgeOnSide( Tri[i].v,&k0,&border ); + if ( border < 0 ) { + continue; + } + CalcAngles( Node, Tri[i].v, angle ); + k1 = ( k0 + 1 ) % 3; + if ( ( angle[k0] < SLIVER_ANGLE ) || ( angle[k1] < SLIVER_ANGLE ) ) { + j = Bisect( Node, border, Tri[i].v[k0], Tri[i].v[k1] ); + if ( j >= 0 ) { + if ( !Node[j].used ) { // Shouldn't be used, but... NumNodesUsed[0]++; Node[j].used++; } } } } - if(NumNodesUsed[0] > N) - { - free(*pTri); - tricall(NumNodes, Node, NumTris, NULL, pTri, "cnzBNPY"); + if ( NumNodesUsed[0] > N ) { + free( *pTri ); + tricall( NumNodes, Node, NumTris, NULL, pTri, "cnzBNPY" ); Tri = *pTri; } - return (NumNodesUsed[0] - N); + return ( NumNodesUsed[0] - N ); } diff --git a/contrib/gtkgensurf/face.cpp b/contrib/gtkgensurf/face.cpp index 3ef44e69..8151dfe8 100644 --- a/contrib/gtkgensurf/face.cpp +++ b/contrib/gtkgensurf/face.cpp @@ -1,52 +1,50 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 #include #include "gensurf.h" #define MAX_FACES 128 // Maximum number of faces on a brush -#define MAX_POINTS_ON_WINDING 64 -#define SIDE_FRONT 0 -#define SIDE_ON 2 -#define SIDE_BACK 1 -#define SIDE_CROSS -2 +#define MAX_POINTS_ON_WINDING 64 +#define SIDE_FRONT 0 +#define SIDE_ON 2 +#define SIDE_BACK 1 +#define SIDE_CROSS -2 vec3 gensurf_vec3_origin; -void PlaneFromPoints (float *p0, float *p1, float *p2, PLANE *plane) -{ +void PlaneFromPoints( float *p0, float *p1, float *p2, PLANE *plane ){ vec3 t1, t2; - vec length; - - VectorSubtract (p0, p1, t1); - VectorSubtract (p2, p1, t2); - plane->normal[0] = t1[1]*t2[2] - t1[2]*t2[1]; - plane->normal[1] = t1[2]*t2[0] - t1[0]*t2[2]; - plane->normal[2] = t1[0]*t2[1] - t1[1]*t2[0]; - - length = (vec)(sqrt(plane->normal[0]*plane->normal[0] + - plane->normal[1]*plane->normal[1] + - plane->normal[2]*plane->normal[2] )); - if (length == 0) - { - VectorClear(plane->normal); + vec length; + + VectorSubtract( p0, p1, t1 ); + VectorSubtract( p2, p1, t2 ); + plane->normal[0] = t1[1] * t2[2] - t1[2] * t2[1]; + plane->normal[1] = t1[2] * t2[0] - t1[0] * t2[2]; + plane->normal[2] = t1[0] * t2[1] - t1[1] * t2[0]; + + length = (vec)( sqrt( plane->normal[0] * plane->normal[0] + + plane->normal[1] * plane->normal[1] + + plane->normal[2] * plane->normal[2] ) ); + if ( length == 0 ) { + VectorClear( plane->normal ); } else { @@ -54,169 +52,165 @@ void PlaneFromPoints (float *p0, float *p1, float *p2, PLANE *plane) plane->normal[1] /= length; plane->normal[2] /= length; } - plane->dist = DotProduct (p0, plane->normal); + plane->dist = DotProduct( p0, plane->normal ); } -void VectorMA (vec3 va, vec scale, vec3 vb, vec3 vc) -{ - vc[0] = va[0] + scale*vb[0]; - vc[1] = va[1] + scale*vb[1]; - vc[2] = va[2] + scale*vb[2]; +void VectorMA( vec3 va, vec scale, vec3 vb, vec3 vc ){ + vc[0] = va[0] + scale * vb[0]; + vc[1] = va[1] + scale * vb[1]; + vc[2] = va[2] + scale * vb[2]; } -void CrossProduct (vec3 v1, vec3 v2, vec3 cross) -{ - cross[0] = v1[1]*v2[2] - v1[2]*v2[1]; - cross[1] = v1[2]*v2[0] - v1[0]*v2[2]; - cross[2] = v1[0]*v2[1] - v1[1]*v2[0]; +void CrossProduct( vec3 v1, vec3 v2, vec3 cross ){ + cross[0] = v1[1] * v2[2] - v1[2] * v2[1]; + cross[1] = v1[2] * v2[0] - v1[0] * v2[2]; + cross[2] = v1[0] * v2[1] - v1[1] * v2[0]; } /* -============= -AllocWinding -============= -*/ -MY_WINDING *AllocWinding (int points) -{ - MY_WINDING *w; - int s; - - s = sizeof(vec)*3*points + sizeof(int); - w = (MY_WINDING*)malloc (s); - memset (w, 0, s); + ============= + AllocWinding + ============= + */ +MY_WINDING *AllocWinding( int points ){ + MY_WINDING *w; + int s; + + s = sizeof( vec ) * 3 * points + sizeof( int ); + w = (MY_WINDING*)malloc( s ); + memset( w, 0, s ); return w; } -vec VectorNormalize (vec3 in, vec3 out) -{ - vec length, ilength; +vec VectorNormalize( vec3 in, vec3 out ){ + vec length, ilength; - length = (vec)(sqrt (in[0]*in[0] + in[1]*in[1] + in[2]*in[2])); - if (length == 0) - { - VectorClear (out); + length = (vec)( sqrt( in[0] * in[0] + in[1] * in[1] + in[2] * in[2] ) ); + if ( length == 0 ) { + VectorClear( out ); return 0; } - ilength = (vec)1.0/length; - out[0] = in[0]*ilength; - out[1] = in[1]*ilength; - out[2] = in[2]*ilength; + ilength = (vec)1.0 / length; + out[0] = in[0] * ilength; + out[1] = in[1] * ilength; + out[2] = in[2] * ilength; return length; } /* -================= -BaseWindingForPlane -================= -*/ -MY_WINDING *BaseWindingForPlane (vec3 normal, vec dist) -{ - int i, x; - vec max, v; - vec3 org, vright, vup; + ================= + BaseWindingForPlane + ================= + */ +MY_WINDING *BaseWindingForPlane( vec3 normal, vec dist ){ + int i, x; + vec max, v; + vec3 org, vright, vup; MY_WINDING *w; // find the major axis max = -BOGUS_RANGE; x = -1; - for (i=0 ; i<3; i++) + for ( i = 0 ; i < 3; i++ ) { - v = (vec)(fabs(normal[i])); - if (v > max) - { + v = (vec)( fabs( normal[i] ) ); + if ( v > max ) { x = i; max = v; } } - if (x==-1) x = 2; - - VectorCopy(gensurf_vec3_origin,vup); - switch (x) + if ( x == -1 ) { + x = 2; + } + + VectorCopy( gensurf_vec3_origin,vup ); + switch ( x ) { case 0: case 1: vup[2] = 1; - break; + break; case 2: vup[0] = 1; - break; + break; } - v = DotProduct (vup, normal); - VectorMA (vup, -v, normal, vup); - VectorNormalize (vup, vup); - - VectorScale (normal, dist, org); - - CrossProduct (vup, normal, vright); - - VectorScale (vup, 65536, vup); - VectorScale (vright, 65536, vright); + v = DotProduct( vup, normal ); + VectorMA( vup, -v, normal, vup ); + VectorNormalize( vup, vup ); + + VectorScale( normal, dist, org ); + + CrossProduct( vup, normal, vright ); + + VectorScale( vup, 65536, vup ); + VectorScale( vright, 65536, vright ); // project a really big axis aligned box onto the plane - w = AllocWinding (4); - - VectorSubtract (org, vright, w->p[0]); - VectorAdd (w->p[0], vup, w->p[0]); - - VectorAdd (org, vright, w->p[1]); - VectorAdd (w->p[1], vup, w->p[1]); - - VectorAdd (org, vright, w->p[2]); - VectorSubtract (w->p[2], vup, w->p[2]); - - VectorSubtract (org, vright, w->p[3]); - VectorSubtract (w->p[3], vup, w->p[3]); - + w = AllocWinding( 4 ); + + VectorSubtract( org, vright, w->p[0] ); + VectorAdd( w->p[0], vup, w->p[0] ); + + VectorAdd( org, vright, w->p[1] ); + VectorAdd( w->p[1], vup, w->p[1] ); + + VectorAdd( org, vright, w->p[2] ); + VectorSubtract( w->p[2], vup, w->p[2] ); + + VectorSubtract( org, vright, w->p[3] ); + VectorSubtract( w->p[3], vup, w->p[3] ); + w->numpoints = 4; - - return w; + + return w; } -void FreeWinding (MY_WINDING *w) -{ - if (*(unsigned *)w == 0xdeaddead) +void FreeWinding( MY_WINDING *w ){ + if ( *(unsigned *)w == 0xdeaddead ) { // Error ("FreeWinding: freed a freed winding"); return; + } *(unsigned *)w = 0xdeaddead; - free (w); + free( w ); } /* -============= -ChopWindingInPlace -============= -*/ -void ChopWindingInPlace (MY_WINDING **inout, vec3 normal, vec dist, vec epsilon) -{ + ============= + ChopWindingInPlace + ============= + */ +void ChopWindingInPlace( MY_WINDING **inout, vec3 normal, vec dist, vec epsilon ){ MY_WINDING *in; - vec dists[MAX_POINTS_ON_WINDING+4]; - int sides[MAX_POINTS_ON_WINDING+4]; - int counts[3]; - static vec dot; // VC 4.2 optimizer bug if not static - int i, j; + vec dists[MAX_POINTS_ON_WINDING + 4]; + int sides[MAX_POINTS_ON_WINDING + 4]; + int counts[3]; + static vec dot; // VC 4.2 optimizer bug if not static + int i, j; vec *p1, *p2; - vec3 mid; + vec3 mid; MY_WINDING *f; - int maxpts; + int maxpts; in = *inout; counts[0] = counts[1] = counts[2] = 0; // determine sides for each point - for (i=0 ; inumpoints ; i++) + for ( i = 0 ; i < in->numpoints ; i++ ) { - dot = DotProduct (in->p[i], normal); + dot = DotProduct( in->p[i], normal ); dot -= dist; dists[i] = dot; - if (dot > epsilon) + if ( dot > epsilon ) { sides[i] = SIDE_FRONT; - else if (dot < -epsilon) + } + else if ( dot < -epsilon ) { sides[i] = SIDE_BACK; + } else { sides[i] = SIDE_ON; @@ -225,89 +219,90 @@ void ChopWindingInPlace (MY_WINDING **inout, vec3 normal, vec dist, vec epsilon) } sides[i] = sides[0]; dists[i] = dists[0]; - - if (!counts[0]) - { - FreeWinding(in); + + if ( !counts[0] ) { + FreeWinding( in ); *inout = NULL; return; } - if (!counts[1]) - return; // inout stays the same + if ( !counts[1] ) { + return; // inout stays the same - maxpts = in->numpoints+4; // cant use counts[0]+2 because - // of fp grouping errors + } + maxpts = in->numpoints + 4; // cant use counts[0]+2 because + // of fp grouping errors + + f = AllocWinding( maxpts ); - f = AllocWinding (maxpts); - - for (i=0 ; inumpoints ; i++) + for ( i = 0 ; i < in->numpoints ; i++ ) { p1 = in->p[i]; - - if (sides[i] == SIDE_ON) - { - VectorCopy (p1, f->p[f->numpoints]); + + if ( sides[i] == SIDE_ON ) { + VectorCopy( p1, f->p[f->numpoints] ); f->numpoints++; continue; } - - if (sides[i] == SIDE_FRONT) - { - VectorCopy (p1, f->p[f->numpoints]); + + if ( sides[i] == SIDE_FRONT ) { + VectorCopy( p1, f->p[f->numpoints] ); f->numpoints++; } - if (sides[i+1] == SIDE_ON || sides[i+1] == sides[i]) + if ( sides[i + 1] == SIDE_ON || sides[i + 1] == sides[i] ) { continue; - - // generate a split point - p2 = in->p[(i+1)%in->numpoints]; - - dot = dists[i] / (dists[i]-dists[i+1]); - for (j=0 ; j<3 ; j++) - { // avoid round off error when possible - if (normal[j] == 1) + } + + // generate a split point + p2 = in->p[( i + 1 ) % in->numpoints]; + + dot = dists[i] / ( dists[i] - dists[i + 1] ); + for ( j = 0 ; j < 3 ; j++ ) + { // avoid round off error when possible + if ( normal[j] == 1 ) { mid[j] = dist; - else if (normal[j] == -1) + } + else if ( normal[j] == -1 ) { mid[j] = -dist; - else - mid[j] = p1[j] + dot*(p2[j]-p1[j]); + } + else{ + mid[j] = p1[j] + dot * ( p2[j] - p1[j] ); + } } - - VectorCopy (mid, f->p[f->numpoints]); + + VectorCopy( mid, f->p[f->numpoints] ); f->numpoints++; } - + // if (f->numpoints > maxpts) // Error ("ClipWinding: points exceeded estimate"); // if (f->numpoints > MAX_POINTS_ON_WINDING) // Error ("ClipWinding: MAX_POINTS_ON_WINDING"); - FreeWinding(in); + FreeWinding( in ); *inout = f; } -void UseFaceBounds() -{ - LPVOID vp; - float Dot, BestDot; - float planepts[3][3]; - int BestFace; - int i, j; - int NumFaces; - vec3 SurfNormal; - vec3 vmin,vmax; +void UseFaceBounds(){ + LPVOID vp; + float Dot, BestDot; + float planepts[3][3]; + int BestFace; + int i, j; + int NumFaces; + vec3 SurfNormal; + vec3 vmin,vmax; _QERFaceData *QERFaceData; - PLANE plane[MAX_FACES*2]; - PLANE pface; + PLANE plane[MAX_FACES * 2]; + PLANE pface; MY_WINDING *w; - switch(Plane) + switch ( Plane ) { case PLANE_XY1: SurfNormal[0] = 0.0; SurfNormal[1] = 0.0; - SurfNormal[2] =-1.0; + SurfNormal[2] = -1.0; break; case PLANE_XZ0: SurfNormal[0] = 0.0; @@ -316,7 +311,7 @@ void UseFaceBounds() break; case PLANE_XZ1: SurfNormal[0] = 0.0; - SurfNormal[1] =-1.0; + SurfNormal[1] = -1.0; SurfNormal[2] = 0.0; break; case PLANE_YZ0: @@ -325,7 +320,7 @@ void UseFaceBounds() SurfNormal[2] = 0.0; break; case PLANE_YZ1: - SurfNormal[0] =-1.0; + SurfNormal[0] = -1.0; SurfNormal[1] = 0.0; SurfNormal[2] = 0.0; break; @@ -336,15 +331,15 @@ void UseFaceBounds() } i = g_FuncTable.m_pfnAllocateSelectedBrushHandles(); - vp = g_FuncTable.m_pfnGetSelectedBrushHandle(0); - NumFaces = g_FuncTable.m_pfnGetFaceCount(vp); + vp = g_FuncTable.m_pfnGetSelectedBrushHandle( 0 ); + NumFaces = g_FuncTable.m_pfnGetFaceCount( vp ); BestFace = -1; BestDot = 0.0; - for(i=0; im_v1[0]; planepts[0][1] = QERFaceData->m_v1[1]; planepts[0][2] = QERFaceData->m_v1[2]; @@ -355,96 +350,107 @@ void UseFaceBounds() planepts[2][1] = QERFaceData->m_v3[1]; planepts[2][2] = QERFaceData->m_v3[2]; - PlaneFromPoints (planepts[0], planepts[1], planepts[2], &plane[2*i]); - VectorSubtract (gensurf_vec3_origin, plane[2*i].normal, plane[2*i+1].normal); - plane[2*i+1].dist = -plane[2*i].dist; + PlaneFromPoints( planepts[0], planepts[1], planepts[2], &plane[2 * i] ); + VectorSubtract( gensurf_vec3_origin, plane[2 * i].normal, plane[2 * i + 1].normal ); + plane[2 * i + 1].dist = -plane[2 * i].dist; - Dot = DotProduct(plane[2*i].normal,SurfNormal); - if(Dot > BestDot) - { + Dot = DotProduct( plane[2 * i].normal,SurfNormal ); + if ( Dot > BestDot ) { BestDot = Dot; BestFace = i; - if(strlen(QERFaceData->m_TextureName)) - strcpy(Texture[Game][0],QERFaceData->m_TextureName); + if ( strlen( QERFaceData->m_TextureName ) ) { + strcpy( Texture[Game][0],QERFaceData->m_TextureName ); + } } } - for(i=0; im_TextureName)) - { - if(strcmp(Texture[Game][0],QERFaceData->m_TextureName)) - strcpy(Texture[Game][1],QERFaceData->m_TextureName); + if ( i == BestFace ) { + continue; + } + QERFaceData = g_FuncTable.m_pfnGetFaceData( vp,i ); + if ( strlen( QERFaceData->m_TextureName ) ) { + if ( strcmp( Texture[Game][0],QERFaceData->m_TextureName ) ) { + strcpy( Texture[Game][1],QERFaceData->m_TextureName ); + } } } g_FuncTable.m_pfnReleaseSelectedBrushHandles(); - w = BaseWindingForPlane (plane[BestFace*2].normal, plane[BestFace*2].dist); + w = BaseWindingForPlane( plane[BestFace * 2].normal, plane[BestFace * 2].dist ); - for (i=0 ; ip[0][0]; vmin[1] = vmax[1] = w->p[0][1]; vmin[2] = vmax[2] = w->p[0][2]; - for(j=1; jnumpoints; j++) + for ( j = 1; j < w->numpoints; j++ ) { - vmin[0] = min(vmin[0],w->p[j][0]); - vmin[1] = min(vmin[1],w->p[j][1]); - vmin[2] = min(vmin[2],w->p[j][2]); - vmax[0] = max(vmax[0],w->p[j][0]); - vmax[1] = max(vmax[1],w->p[j][1]); - vmax[2] = max(vmax[2],w->p[j][2]); + vmin[0] = min( vmin[0],w->p[j][0] ); + vmin[1] = min( vmin[1],w->p[j][1] ); + vmin[2] = min( vmin[2],w->p[j][2] ); + vmax[0] = max( vmax[0],w->p[j][0] ); + vmax[1] = max( vmax[1],w->p[j][1] ); + vmax[2] = max( vmax[2],w->p[j][2] ); } - FreeWinding(w); + FreeWinding( w ); - VectorCopy(plane[BestFace*2].normal,pface.normal); - pface.dist = plane[BestFace*2].dist; - switch(Plane) + VectorCopy( plane[BestFace * 2].normal,pface.normal ); + pface.dist = plane[BestFace * 2].dist; + switch ( Plane ) { case PLANE_XZ0: case PLANE_XZ1: - if(pface.normal[1] == 0.) return; + if ( pface.normal[1] == 0. ) { + return; + } Hll = vmin[0]; Hur = vmax[0]; Vll = vmin[2]; Vur = vmax[2]; - Z00 = (pface.dist - pface.normal[0]*Hll - pface.normal[2]*Vll)/pface.normal[1]; - Z01 = (pface.dist - pface.normal[0]*Hll - pface.normal[2]*Vur)/pface.normal[1]; - Z10 = (pface.dist - pface.normal[0]*Hur - pface.normal[2]*Vll)/pface.normal[1]; - Z11 = (pface.dist - pface.normal[0]*Hur - pface.normal[2]*Vur)/pface.normal[1]; + Z00 = ( pface.dist - pface.normal[0] * Hll - pface.normal[2] * Vll ) / pface.normal[1]; + Z01 = ( pface.dist - pface.normal[0] * Hll - pface.normal[2] * Vur ) / pface.normal[1]; + Z10 = ( pface.dist - pface.normal[0] * Hur - pface.normal[2] * Vll ) / pface.normal[1]; + Z11 = ( pface.dist - pface.normal[0] * Hur - pface.normal[2] * Vur ) / pface.normal[1]; break; case PLANE_YZ0: case PLANE_YZ1: - if(pface.normal[0] == 0.) return; + if ( pface.normal[0] == 0. ) { + return; + } Hll = vmin[1]; Hur = vmax[1]; Vll = vmin[2]; Vur = vmax[2]; - Z00 = (pface.dist - pface.normal[1]*Hll - pface.normal[2]*Vll)/pface.normal[0]; - Z01 = (pface.dist - pface.normal[1]*Hll - pface.normal[2]*Vur)/pface.normal[0]; - Z10 = (pface.dist - pface.normal[1]*Hur - pface.normal[2]*Vll)/pface.normal[0]; - Z11 = (pface.dist - pface.normal[1]*Hur - pface.normal[2]*Vur)/pface.normal[0]; + Z00 = ( pface.dist - pface.normal[1] * Hll - pface.normal[2] * Vll ) / pface.normal[0]; + Z01 = ( pface.dist - pface.normal[1] * Hll - pface.normal[2] * Vur ) / pface.normal[0]; + Z10 = ( pface.dist - pface.normal[1] * Hur - pface.normal[2] * Vll ) / pface.normal[0]; + Z11 = ( pface.dist - pface.normal[1] * Hur - pface.normal[2] * Vur ) / pface.normal[0]; break; default: - if(pface.normal[2] == 0.) return; + if ( pface.normal[2] == 0. ) { + return; + } Hll = vmin[0]; Hur = vmax[0]; Vll = vmin[1]; Vur = vmax[1]; - Z00 = (pface.dist - pface.normal[0]*Hll - pface.normal[1]*Vll)/pface.normal[2]; - Z01 = (pface.dist - pface.normal[0]*Hll - pface.normal[1]*Vur)/pface.normal[2]; - Z10 = (pface.dist - pface.normal[0]*Hur - pface.normal[1]*Vll)/pface.normal[2]; - Z11 = (pface.dist - pface.normal[0]*Hur - pface.normal[1]*Vur)/pface.normal[2]; + Z00 = ( pface.dist - pface.normal[0] * Hll - pface.normal[1] * Vll ) / pface.normal[2]; + Z01 = ( pface.dist - pface.normal[0] * Hll - pface.normal[1] * Vur ) / pface.normal[2]; + Z10 = ( pface.dist - pface.normal[0] * Hur - pface.normal[1] * Vll ) / pface.normal[2]; + Z11 = ( pface.dist - pface.normal[0] * Hur - pface.normal[1] * Vur ) / pface.normal[2]; } } diff --git a/contrib/gtkgensurf/font.cpp b/contrib/gtkgensurf/font.cpp index 17a557ec..870e121f 100644 --- a/contrib/gtkgensurf/font.cpp +++ b/contrib/gtkgensurf/font.cpp @@ -1,25 +1,25 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 + */ // // Texture Font -// +// // Taken from LeoCAD (www.leocad.org) and used in GtkGenSurf // with permission from the author. // @@ -30,241 +30,247 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "gensurf.h" static const unsigned char data[2048] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 207, 255, 255, 159, 255, 31, 255, 231, 159, 153, 63, 255, 255, 255, 255, - 255, 207, 255, 255, 159, 255, 207, 255, 231, 159, 153, 63, 255, 255, 255, 255, - 255, 207, 255, 255, 159, 255, 207, 255, 231, 255, 159, 63, 255, 255, 255, 255, - 7, 78, 252, 240, 145, 135, 3, 71, 38, 158, 153, 51, 19, 227, 196, 255, - 243, 140, 121, 230, 140, 51, 207, 51, 198, 156, 153, 57, 99, 204, 152, 255, - 255, 204, 51, 111, 158, 121, 206, 121, 230, 153, 153, 60, 115, 206, 60, 255, - 31, 204, 51, 127, 158, 121, 206, 121, 230, 153, 25, 62, 115, 206, 60, 255, - 199, 204, 51, 127, 158, 1, 206, 121, 230, 153, 25, 62, 115, 206, 60, 255, - 243, 204, 51, 127, 158, 249, 207, 121, 230, 153, 153, 60, 115, 206, 60, 255, - 243, 204, 51, 111, 158, 249, 207, 121, 230, 153, 153, 57, 115, 206, 60, 255, - 243, 140, 121, 230, 140, 115, 206, 51, 230, 153, 153, 51, 115, 206, 60, 255, - 7, 73, 252, 240, 145, 7, 207, 71, 230, 153, 153, 39, 115, 206, 60, 255, - 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 249, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 249, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 57, 255, 255, 249, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 131, 255, 255, 252, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 227, 255, - 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 201, 255, - 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 156, 255, - 15, 79, 252, 200, 196, 96, 32, 79, 62, 252, 15, 15, 159, 192, 156, 255, - 103, 142, 121, 198, 112, 206, 57, 79, 62, 60, 15, 15, 159, 207, 156, 255, - 243, 204, 51, 207, 120, 254, 57, 207, 156, 57, 103, 102, 206, 231, 156, 255, - 243, 204, 51, 207, 124, 252, 57, 207, 156, 25, 230, 112, 206, 231, 156, 255, - 243, 204, 51, 207, 252, 224, 57, 207, 156, 25, 230, 121, 206, 243, 156, 255, - 243, 204, 51, 207, 252, 199, 57, 207, 201, 211, 242, 240, 228, 249, 156, 255, - 243, 204, 51, 207, 252, 207, 57, 207, 201, 195, 112, 230, 228, 249, 156, 255, - 103, 142, 121, 198, 124, 206, 121, 198, 227, 231, 57, 207, 241, 252, 201, 255, - 15, 79, 252, 200, 252, 224, 227, 200, 227, 231, 57, 207, 241, 192, 227, 255, - 255, 207, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, - 255, 207, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, - 255, 207, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, - 255, 207, 255, 207, 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 159, 15, 30, 252, 57, 224, 225, 128, 131, 7, 255, 254, 128, 127, 240, 255, - 135, 231, 204, 249, 57, 255, 252, 159, 57, 115, 126, 252, 60, 63, 231, 255, - 159, 247, 236, 249, 56, 127, 254, 159, 57, 115, 126, 252, 124, 158, 207, 255, - 159, 255, 252, 249, 56, 127, 254, 207, 57, 115, 62, 249, 124, 158, 207, 255, - 159, 255, 252, 121, 56, 112, 254, 207, 57, 115, 62, 249, 60, 207, 255, 255, - 159, 127, 62, 60, 57, 103, 224, 231, 131, 115, 158, 243, 128, 207, 255, 255, - 159, 63, 255, 57, 249, 103, 206, 231, 57, 7, 158, 243, 60, 207, 255, 255, - 159, 159, 255, 153, 249, 103, 206, 231, 57, 127, 206, 231, 124, 206, 255, 255, - 159, 207, 255, 25, 240, 103, 206, 243, 57, 127, 14, 224, 124, 158, 207, 255, - 159, 231, 239, 249, 185, 103, 206, 243, 57, 127, 230, 207, 124, 158, 207, 255, - 159, 231, 207, 249, 57, 103, 206, 243, 57, 63, 231, 207, 60, 63, 231, 255, - 159, 7, 28, 252, 121, 240, 224, 243, 131, 135, 231, 207, 128, 127, 240, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 7, 126, 128, 3, 124, 240, 249, 156, 63, 231, 57, 255, 252, 57, 159, 255, - 231, 124, 254, 243, 63, 231, 249, 156, 63, 231, 60, 255, 252, 57, 159, 255, - 231, 121, 254, 243, 159, 207, 249, 156, 63, 103, 62, 255, 248, 56, 158, 255, - 231, 121, 254, 243, 159, 207, 249, 156, 63, 39, 63, 255, 248, 56, 156, 255, - 231, 115, 254, 243, 207, 255, 249, 156, 63, 135, 63, 255, 112, 56, 152, 255, - 231, 115, 192, 3, 206, 255, 1, 156, 63, 199, 63, 255, 112, 56, 153, 255, - 231, 115, 254, 243, 207, 193, 249, 156, 63, 135, 63, 255, 36, 57, 147, 255, - 231, 115, 254, 243, 207, 207, 249, 156, 63, 39, 63, 255, 36, 57, 131, 255, - 231, 121, 254, 243, 159, 207, 249, 156, 57, 103, 62, 255, 140, 57, 135, 255, - 231, 121, 254, 243, 159, 199, 249, 156, 57, 231, 60, 255, 140, 57, 143, 255, - 231, 124, 254, 243, 63, 199, 249, 156, 147, 231, 57, 255, 220, 57, 159, 255, - 7, 126, 128, 243, 127, 208, 249, 156, 199, 231, 51, 192, 220, 57, 159, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 63, 252, 128, 63, 252, 128, 63, 28, 128, 249, 204, 79, 254, 39, 63, 255, - 159, 249, 60, 159, 249, 60, 159, 249, 249, 249, 204, 79, 158, 39, 63, 255, - 207, 243, 124, 206, 243, 124, 206, 243, 249, 249, 156, 103, 158, 103, 158, 255, - 207, 243, 124, 206, 243, 124, 206, 255, 249, 249, 156, 231, 156, 243, 204, 255, - 231, 231, 124, 230, 231, 124, 158, 255, 249, 249, 156, 231, 12, 243, 225, 255, - 231, 231, 60, 231, 231, 60, 63, 252, 249, 249, 60, 243, 12, 243, 243, 255, - 231, 231, 128, 231, 231, 128, 255, 249, 249, 249, 60, 243, 105, 249, 243, 255, - 231, 231, 252, 103, 230, 60, 255, 243, 249, 249, 124, 251, 97, 248, 225, 255, - 207, 243, 252, 207, 240, 124, 254, 243, 249, 249, 124, 248, 97, 248, 204, 255, - 207, 243, 252, 207, 241, 124, 206, 243, 249, 249, 124, 248, 243, 124, 158, 255, - 159, 249, 252, 159, 241, 124, 158, 249, 249, 115, 254, 252, 243, 60, 63, 255, - 63, 252, 252, 63, 228, 252, 60, 252, 249, 7, 255, 252, 243, 60, 63, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 243, 19, 192, 255, 252, 255, 255, 127, 14, 127, 248, 15, 252, 247, 227, 231, - 243, 243, 207, 255, 252, 255, 153, 127, 102, 62, 243, 227, 241, 193, 201, 243, - 231, 249, 231, 255, 252, 255, 60, 127, 242, 156, 231, 249, 231, 148, 201, 249, - 207, 252, 243, 255, 204, 124, 126, 126, 254, 156, 231, 57, 230, 148, 201, 252, - 207, 252, 243, 255, 204, 60, 255, 60, 255, 156, 231, 156, 204, 244, 99, 254, - 31, 254, 249, 255, 252, 159, 255, 57, 127, 158, 231, 204, 204, 244, 63, 255, - 31, 254, 252, 255, 252, 207, 255, 51, 63, 159, 231, 204, 204, 193, 159, 255, - 63, 127, 254, 255, 252, 159, 255, 57, 159, 207, 207, 204, 204, 151, 207, 248, - 63, 127, 254, 255, 252, 63, 255, 156, 159, 159, 231, 204, 228, 151, 103, 242, - 63, 63, 255, 255, 255, 127, 126, 158, 255, 159, 231, 25, 241, 148, 115, 242, - 63, 159, 127, 230, 204, 252, 60, 159, 159, 159, 231, 249, 255, 148, 121, 242, - 63, 31, 64, 230, 204, 252, 153, 159, 159, 159, 231, 227, 255, 193, 252, 248, - 255, 255, 63, 255, 231, 255, 255, 255, 255, 159, 231, 15, 252, 247, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 243, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 248, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 63, 254, 255, 195, 255, 255, 255, 255, 3, 252, 147, 255, 255, 255, 255, 255, - 159, 252, 255, 153, 255, 255, 255, 255, 243, 252, 147, 255, 255, 255, 255, 255, - 159, 252, 255, 153, 255, 243, 255, 255, 243, 252, 147, 255, 255, 255, 255, 255, - 159, 252, 204, 60, 255, 243, 255, 255, 243, 252, 0, 255, 255, 255, 255, 255, - 63, 254, 204, 60, 255, 243, 128, 255, 243, 252, 201, 255, 255, 255, 255, 255, - 63, 254, 225, 60, 255, 243, 255, 255, 243, 252, 201, 255, 255, 255, 255, 255, - 31, 126, 128, 60, 127, 128, 255, 255, 243, 252, 201, 255, 255, 255, 255, 255, - 159, 228, 225, 60, 193, 243, 128, 255, 243, 252, 201, 255, 255, 255, 255, 255, - 207, 240, 204, 60, 255, 243, 255, 255, 243, 124, 128, 255, 255, 255, 255, 255, - 207, 249, 204, 60, 255, 243, 255, 255, 243, 252, 228, 255, 255, 255, 255, 255, - 207, 240, 255, 60, 255, 243, 255, 255, 243, 252, 228, 255, 255, 255, 255, 255, - 31, 242, 255, 60, 255, 255, 255, 255, 243, 252, 228, 255, 255, 255, 255, 255, - 255, 255, 255, 60, 255, 255, 255, 255, 243, 252, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 153, 255, 255, 255, 0, 242, 252, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 153, 255, 255, 255, 255, 243, 252, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 195, 255, 255, 255, 255, 3, 252, 255, 255, 255, 255, 255, 255 + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 207, 255, 255, 159, 255, 31, 255, 231, 159, 153, 63, 255, 255, 255, 255, + 255, 207, 255, 255, 159, 255, 207, 255, 231, 159, 153, 63, 255, 255, 255, 255, + 255, 207, 255, 255, 159, 255, 207, 255, 231, 255, 159, 63, 255, 255, 255, 255, + 7, 78, 252, 240, 145, 135, 3, 71, 38, 158, 153, 51, 19, 227, 196, 255, + 243, 140, 121, 230, 140, 51, 207, 51, 198, 156, 153, 57, 99, 204, 152, 255, + 255, 204, 51, 111, 158, 121, 206, 121, 230, 153, 153, 60, 115, 206, 60, 255, + 31, 204, 51, 127, 158, 121, 206, 121, 230, 153, 25, 62, 115, 206, 60, 255, + 199, 204, 51, 127, 158, 1, 206, 121, 230, 153, 25, 62, 115, 206, 60, 255, + 243, 204, 51, 127, 158, 249, 207, 121, 230, 153, 153, 60, 115, 206, 60, 255, + 243, 204, 51, 111, 158, 249, 207, 121, 230, 153, 153, 57, 115, 206, 60, 255, + 243, 140, 121, 230, 140, 115, 206, 51, 230, 153, 153, 51, 115, 206, 60, 255, + 7, 73, 252, 240, 145, 7, 207, 71, 230, 153, 153, 39, 115, 206, 60, 255, + 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 249, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 249, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 57, 255, 255, 249, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 131, 255, 255, 252, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 227, 255, + 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 201, 255, + 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 156, 255, + 15, 79, 252, 200, 196, 96, 32, 79, 62, 252, 15, 15, 159, 192, 156, 255, + 103, 142, 121, 198, 112, 206, 57, 79, 62, 60, 15, 15, 159, 207, 156, 255, + 243, 204, 51, 207, 120, 254, 57, 207, 156, 57, 103, 102, 206, 231, 156, 255, + 243, 204, 51, 207, 124, 252, 57, 207, 156, 25, 230, 112, 206, 231, 156, 255, + 243, 204, 51, 207, 252, 224, 57, 207, 156, 25, 230, 121, 206, 243, 156, 255, + 243, 204, 51, 207, 252, 199, 57, 207, 201, 211, 242, 240, 228, 249, 156, 255, + 243, 204, 51, 207, 252, 207, 57, 207, 201, 195, 112, 230, 228, 249, 156, 255, + 103, 142, 121, 198, 124, 206, 121, 198, 227, 231, 57, 207, 241, 252, 201, 255, + 15, 79, 252, 200, 252, 224, 227, 200, 227, 231, 57, 207, 241, 192, 227, 255, + 255, 207, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, + 255, 207, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, + 255, 207, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, + 255, 207, 255, 207, 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 159, 15, 30, 252, 57, 224, 225, 128, 131, 7, 255, 254, 128, 127, 240, 255, + 135, 231, 204, 249, 57, 255, 252, 159, 57, 115, 126, 252, 60, 63, 231, 255, + 159, 247, 236, 249, 56, 127, 254, 159, 57, 115, 126, 252, 124, 158, 207, 255, + 159, 255, 252, 249, 56, 127, 254, 207, 57, 115, 62, 249, 124, 158, 207, 255, + 159, 255, 252, 121, 56, 112, 254, 207, 57, 115, 62, 249, 60, 207, 255, 255, + 159, 127, 62, 60, 57, 103, 224, 231, 131, 115, 158, 243, 128, 207, 255, 255, + 159, 63, 255, 57, 249, 103, 206, 231, 57, 7, 158, 243, 60, 207, 255, 255, + 159, 159, 255, 153, 249, 103, 206, 231, 57, 127, 206, 231, 124, 206, 255, 255, + 159, 207, 255, 25, 240, 103, 206, 243, 57, 127, 14, 224, 124, 158, 207, 255, + 159, 231, 239, 249, 185, 103, 206, 243, 57, 127, 230, 207, 124, 158, 207, 255, + 159, 231, 207, 249, 57, 103, 206, 243, 57, 63, 231, 207, 60, 63, 231, 255, + 159, 7, 28, 252, 121, 240, 224, 243, 131, 135, 231, 207, 128, 127, 240, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 7, 126, 128, 3, 124, 240, 249, 156, 63, 231, 57, 255, 252, 57, 159, 255, + 231, 124, 254, 243, 63, 231, 249, 156, 63, 231, 60, 255, 252, 57, 159, 255, + 231, 121, 254, 243, 159, 207, 249, 156, 63, 103, 62, 255, 248, 56, 158, 255, + 231, 121, 254, 243, 159, 207, 249, 156, 63, 39, 63, 255, 248, 56, 156, 255, + 231, 115, 254, 243, 207, 255, 249, 156, 63, 135, 63, 255, 112, 56, 152, 255, + 231, 115, 192, 3, 206, 255, 1, 156, 63, 199, 63, 255, 112, 56, 153, 255, + 231, 115, 254, 243, 207, 193, 249, 156, 63, 135, 63, 255, 36, 57, 147, 255, + 231, 115, 254, 243, 207, 207, 249, 156, 63, 39, 63, 255, 36, 57, 131, 255, + 231, 121, 254, 243, 159, 207, 249, 156, 57, 103, 62, 255, 140, 57, 135, 255, + 231, 121, 254, 243, 159, 199, 249, 156, 57, 231, 60, 255, 140, 57, 143, 255, + 231, 124, 254, 243, 63, 199, 249, 156, 147, 231, 57, 255, 220, 57, 159, 255, + 7, 126, 128, 243, 127, 208, 249, 156, 199, 231, 51, 192, 220, 57, 159, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 63, 252, 128, 63, 252, 128, 63, 28, 128, 249, 204, 79, 254, 39, 63, 255, + 159, 249, 60, 159, 249, 60, 159, 249, 249, 249, 204, 79, 158, 39, 63, 255, + 207, 243, 124, 206, 243, 124, 206, 243, 249, 249, 156, 103, 158, 103, 158, 255, + 207, 243, 124, 206, 243, 124, 206, 255, 249, 249, 156, 231, 156, 243, 204, 255, + 231, 231, 124, 230, 231, 124, 158, 255, 249, 249, 156, 231, 12, 243, 225, 255, + 231, 231, 60, 231, 231, 60, 63, 252, 249, 249, 60, 243, 12, 243, 243, 255, + 231, 231, 128, 231, 231, 128, 255, 249, 249, 249, 60, 243, 105, 249, 243, 255, + 231, 231, 252, 103, 230, 60, 255, 243, 249, 249, 124, 251, 97, 248, 225, 255, + 207, 243, 252, 207, 240, 124, 254, 243, 249, 249, 124, 248, 97, 248, 204, 255, + 207, 243, 252, 207, 241, 124, 206, 243, 249, 249, 124, 248, 243, 124, 158, 255, + 159, 249, 252, 159, 241, 124, 158, 249, 249, 115, 254, 252, 243, 60, 63, 255, + 63, 252, 252, 63, 228, 252, 60, 252, 249, 7, 255, 252, 243, 60, 63, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 243, 19, 192, 255, 252, 255, 255, 127, 14, 127, 248, 15, 252, 247, 227, 231, + 243, 243, 207, 255, 252, 255, 153, 127, 102, 62, 243, 227, 241, 193, 201, 243, + 231, 249, 231, 255, 252, 255, 60, 127, 242, 156, 231, 249, 231, 148, 201, 249, + 207, 252, 243, 255, 204, 124, 126, 126, 254, 156, 231, 57, 230, 148, 201, 252, + 207, 252, 243, 255, 204, 60, 255, 60, 255, 156, 231, 156, 204, 244, 99, 254, + 31, 254, 249, 255, 252, 159, 255, 57, 127, 158, 231, 204, 204, 244, 63, 255, + 31, 254, 252, 255, 252, 207, 255, 51, 63, 159, 231, 204, 204, 193, 159, 255, + 63, 127, 254, 255, 252, 159, 255, 57, 159, 207, 207, 204, 204, 151, 207, 248, + 63, 127, 254, 255, 252, 63, 255, 156, 159, 159, 231, 204, 228, 151, 103, 242, + 63, 63, 255, 255, 255, 127, 126, 158, 255, 159, 231, 25, 241, 148, 115, 242, + 63, 159, 127, 230, 204, 252, 60, 159, 159, 159, 231, 249, 255, 148, 121, 242, + 63, 31, 64, 230, 204, 252, 153, 159, 159, 159, 231, 227, 255, 193, 252, 248, + 255, 255, 63, 255, 231, 255, 255, 255, 255, 159, 231, 15, 252, 247, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 243, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 248, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 63, 254, 255, 195, 255, 255, 255, 255, 3, 252, 147, 255, 255, 255, 255, 255, + 159, 252, 255, 153, 255, 255, 255, 255, 243, 252, 147, 255, 255, 255, 255, 255, + 159, 252, 255, 153, 255, 243, 255, 255, 243, 252, 147, 255, 255, 255, 255, 255, + 159, 252, 204, 60, 255, 243, 255, 255, 243, 252, 0, 255, 255, 255, 255, 255, + 63, 254, 204, 60, 255, 243, 128, 255, 243, 252, 201, 255, 255, 255, 255, 255, + 63, 254, 225, 60, 255, 243, 255, 255, 243, 252, 201, 255, 255, 255, 255, 255, + 31, 126, 128, 60, 127, 128, 255, 255, 243, 252, 201, 255, 255, 255, 255, 255, + 159, 228, 225, 60, 193, 243, 128, 255, 243, 252, 201, 255, 255, 255, 255, 255, + 207, 240, 204, 60, 255, 243, 255, 255, 243, 124, 128, 255, 255, 255, 255, 255, + 207, 249, 204, 60, 255, 243, 255, 255, 243, 252, 228, 255, 255, 255, 255, 255, + 207, 240, 255, 60, 255, 243, 255, 255, 243, 252, 228, 255, 255, 255, 255, 255, + 31, 242, 255, 60, 255, 255, 255, 255, 243, 252, 228, 255, 255, 255, 255, 255, + 255, 255, 255, 60, 255, 255, 255, 255, 243, 252, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 153, 255, 255, 255, 0, 242, 252, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 153, 255, 255, 255, 255, 243, 252, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 195, 255, 255, 255, 255, 3, 252, 255, 255, 255, 255, 255, 255 }; -typedef struct +typedef struct { - unsigned char width; - float left, right, top, bottom; + unsigned char width; + float left, right, top, bottom; } LC_TXFVERT; static LC_TXFVERT glyphs[93]; static GLuint texture; -void texfont_init () -{ - if (texture != 0) - return; +void texfont_init(){ + if ( texture != 0 ) { + return; + } - int i, j, x, y; - float inv = 1.0f/128; - const char *charlines[16] = { - "abcdefghijklmn", "opqrstuvwxyz0", "123456789ABC", "DEFGHIJKLMN", - "OPQRSTUVWX", "YZ,.!;:<>/?{}@$%", "&*()-+=_[] #" }; - unsigned char lefts[7][17] = { - { 1, 11, 21, 30, 40, 50, 56, 66, 76, 80, 84, 93, 97, 111, 121 }, - { 1, 11, 21, 31, 38, 47, 53, 63, 72, 86, 94, 103, 111, 120 }, - { 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 94, 106, 118, }, - { 1, 13, 24, 34, 47, 59, 64, 73, 84, 94, 108, 120 }, - { 1, 14, 25, 38, 50, 61, 71, 83, 94, 109, 120 }, - { 1, 12, 22, 26, 30, 35, 39, 43, 52, 61, 65, 75, 81, 87, 103, 112, 125 }, - { 3, 14, 23, 28, 33, 38, 47, 56, 65, 70, 75, 79, 88 } }; - // tops = 1 20 39 58 77 96 112 (+16) - memset(glyphs, 0, sizeof(glyphs)); + int i, j, x, y; + float inv = 1.0f / 128; + const char *charlines[16] = { + "abcdefghijklmn", "opqrstuvwxyz0", "123456789ABC", "DEFGHIJKLMN", + "OPQRSTUVWX", "YZ,.!;:<>/?{}@$%", "&*()-+=_[] #" + }; + unsigned char lefts[7][17] = { + { 1, 11, 21, 30, 40, 50, 56, 66, 76, 80, 84, 93, 97, 111, 121 }, + { 1, 11, 21, 31, 38, 47, 53, 63, 72, 86, 94, 103, 111, 120 }, + { 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 94, 106, 118, }, + { 1, 13, 24, 34, 47, 59, 64, 73, 84, 94, 108, 120 }, + { 1, 14, 25, 38, 50, 61, 71, 83, 94, 109, 120 }, + { 1, 12, 22, 26, 30, 35, 39, 43, 52, 61, 65, 75, 81, 87, 103, 112, 125 }, + { 3, 14, 23, 28, 33, 38, 47, 56, 65, 70, 75, 79, 88 } + }; + // tops = 1 20 39 58 77 96 112 (+16) + memset( glyphs, 0, sizeof( glyphs ) ); - // ASCII 32-125 - for (i = 32; i < 126; i++) - for (x = 0; x < 7; x++) - for (y = 0; charlines[x][y]; y++) - if (charlines[x][y] == i) - { - glyphs[i-32].width = lefts[x][y+1] - lefts[x][y]; - glyphs[i-32].left = (float)lefts[x][y]*inv; - glyphs[i-32].right = (float)(lefts[x][y+1])*inv; + // ASCII 32-125 + for ( i = 32; i < 126; i++ ) + for ( x = 0; x < 7; x++ ) + for ( y = 0; charlines[x][y]; y++ ) + if ( charlines[x][y] == i ) { + glyphs[i - 32].width = lefts[x][y + 1] - lefts[x][y]; + glyphs[i - 32].left = (float)lefts[x][y] * inv; + glyphs[i - 32].right = (float)( lefts[x][y + 1] ) * inv; - if (x != 6) - glyphs[i-32].top = (float)(1 + 19*x); - else - glyphs[i-32].top = 112; - glyphs[i-32].bottom = glyphs[i-32].top + 16; - glyphs[i-32].top *= inv; - glyphs[i-32].bottom *= inv; - } + if ( x != 6 ) { + glyphs[i - 32].top = (float)( 1 + 19 * x ); + } + else{ + glyphs[i - 32].top = 112; + } + glyphs[i - 32].bottom = glyphs[i - 32].top + 16; + glyphs[i - 32].top *= inv; + glyphs[i - 32].bottom *= inv; + } - g_GLTable.m_pfn_qglGenTextures (1, &texture); - g_GLTable.m_pfn_qglBindTexture (GL_TEXTURE_2D, texture); - g_GLTable.m_pfn_qglDisable (GL_TEXTURE_GEN_S); - g_GLTable.m_pfn_qglDisable (GL_TEXTURE_GEN_T); - g_GLTable.m_pfn_qglTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - g_GLTable.m_pfn_qglTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - g_GLTable.m_pfn_qglTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - g_GLTable.m_pfn_qglTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - // g_GLTable.m_pfn_qglPixelStorei (GL_UNPACK_ALIGNMENT, 1); + g_GLTable.m_pfn_qglGenTextures( 1, &texture ); + g_GLTable.m_pfn_qglBindTexture( GL_TEXTURE_2D, texture ); + g_GLTable.m_pfn_qglDisable( GL_TEXTURE_GEN_S ); + g_GLTable.m_pfn_qglDisable( GL_TEXTURE_GEN_T ); + g_GLTable.m_pfn_qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + g_GLTable.m_pfn_qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + g_GLTable.m_pfn_qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + g_GLTable.m_pfn_qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + // g_GLTable.m_pfn_qglPixelStorei (GL_UNPACK_ALIGNMENT, 1); - unsigned char *buf = (unsigned char*)malloc (128*128); - memset (buf, 255, 128*128); + unsigned char *buf = (unsigned char*)malloc( 128 * 128 ); + memset( buf, 255, 128 * 128 ); - for (i = 0; i < 2048; i++) - for (j = 0; j < 8; j++) - if ((data[i] & (1 << j)) != 0) - buf[i*8+j] = 0; + for ( i = 0; i < 2048; i++ ) + for ( j = 0; j < 8; j++ ) + if ( ( data[i] & ( 1 << j ) ) != 0 ) { + buf[i * 8 + j] = 0; + } - g_GLTable.m_pfn_qglTexImage2D (GL_TEXTURE_2D, 0, GL_INTENSITY4, 128, 128, 0, - GL_LUMINANCE, GL_UNSIGNED_BYTE, buf); - free (buf); + g_GLTable.m_pfn_qglTexImage2D( GL_TEXTURE_2D, 0, GL_INTENSITY4, 128, 128, 0, + GL_LUMINANCE, GL_UNSIGNED_BYTE, buf ); + free( buf ); } -void texfont_write (const char *text, float l, float t) -{ - if (texture == 0) - return; +void texfont_write( const char *text, float l, float t ){ + if ( texture == 0 ) { + return; + } - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglBindTexture (GL_TEXTURE_2D, texture); - g_GLTable.m_pfn_qglEnable (GL_TEXTURE_2D); - // g_GLTable.m_pfn_qglTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - g_GLTable.m_pfn_qglAlphaFunc (GL_GREATER, 0.0625); - g_GLTable.m_pfn_qglEnable (GL_ALPHA_TEST); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglBindTexture( GL_TEXTURE_2D, texture ); + g_GLTable.m_pfn_qglEnable( GL_TEXTURE_2D ); + // g_GLTable.m_pfn_qglTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + g_GLTable.m_pfn_qglAlphaFunc( GL_GREATER, 0.0625 ); + g_GLTable.m_pfn_qglEnable( GL_ALPHA_TEST ); - g_GLTable.m_pfn_qglBegin (GL_QUADS); - for (const char* p = text; *p; p++) - { - if (*p < 32 || *p > 125) - continue; - if (glyphs[*p-32].width == 0) - continue; + g_GLTable.m_pfn_qglBegin( GL_QUADS ); + for ( const char* p = text; *p; p++ ) + { + if ( *p < 32 || *p > 125 ) { + continue; + } + if ( glyphs[*p - 32].width == 0 ) { + continue; + } - g_GLTable.m_pfn_qglTexCoord2f (glyphs[*p-32].left, glyphs[*p-32].top); - g_GLTable.m_pfn_qglVertex2f (l, t); - g_GLTable.m_pfn_qglTexCoord2f (glyphs[*p-32].left, glyphs[*p-32].bottom); - g_GLTable.m_pfn_qglVertex2f (l, t-16); - g_GLTable.m_pfn_qglTexCoord2f (glyphs[*p-32].right, glyphs[*p-32].bottom); - g_GLTable.m_pfn_qglVertex2f (l + glyphs[*p-32].width, t-16); - g_GLTable.m_pfn_qglTexCoord2f (glyphs[*p-32].right, glyphs[*p-32].top); - g_GLTable.m_pfn_qglVertex2f (l + glyphs[*p-32].width, t); - l += glyphs[*p-32].width; - } - g_GLTable.m_pfn_qglEnd (); + g_GLTable.m_pfn_qglTexCoord2f( glyphs[*p - 32].left, glyphs[*p - 32].top ); + g_GLTable.m_pfn_qglVertex2f( l, t ); + g_GLTable.m_pfn_qglTexCoord2f( glyphs[*p - 32].left, glyphs[*p - 32].bottom ); + g_GLTable.m_pfn_qglVertex2f( l, t - 16 ); + g_GLTable.m_pfn_qglTexCoord2f( glyphs[*p - 32].right, glyphs[*p - 32].bottom ); + g_GLTable.m_pfn_qglVertex2f( l + glyphs[*p - 32].width, t - 16 ); + g_GLTable.m_pfn_qglTexCoord2f( glyphs[*p - 32].right, glyphs[*p - 32].top ); + g_GLTable.m_pfn_qglVertex2f( l + glyphs[*p - 32].width, t ); + l += glyphs[*p - 32].width; + } + g_GLTable.m_pfn_qglEnd(); - g_GLTable.m_pfn_qglDisable (GL_ALPHA_TEST); - g_GLTable.m_pfn_qglDisable (GL_TEXTURE_2D); - g_GLTable.m_pfn_qglBindTexture (GL_TEXTURE_2D, 0); + g_GLTable.m_pfn_qglDisable( GL_ALPHA_TEST ); + g_GLTable.m_pfn_qglDisable( GL_TEXTURE_2D ); + g_GLTable.m_pfn_qglBindTexture( GL_TEXTURE_2D, 0 ); } diff --git a/contrib/gtkgensurf/gendlgs.cpp b/contrib/gtkgensurf/gendlgs.cpp index a089ed0a..5766aa90 100644 --- a/contrib/gtkgensurf/gendlgs.cpp +++ b/contrib/gtkgensurf/gendlgs.cpp @@ -1,21 +1,21 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 #include @@ -32,10 +32,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define TEXTURE_TAB 4 //#define BUFF_SIZE 32768 -#define ENABLE_WIDGET(name,enable) \ - gtk_widget_set_sensitive (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), (name))), (enable)) -#define CHECK_WIDGET(name,check) \ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), name)), check) +#define ENABLE_WIDGET( name,enable ) \ + gtk_widget_set_sensitive( GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), ( name ) ) ), ( enable ) ) +#define CHECK_WIDGET( name,check ) \ + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), name ) ), check ) static GtkWidget *game_radios[NUMGAMES]; static GtkWidget *wave_radios[5]; @@ -46,2194 +46,2159 @@ static int WasDetail; static GtkTooltips *tooltips; static int FirstPassComplete = 0; -void About (GtkWidget *parent) -{ +void About( GtkWidget *parent ){ /* - char *icon_xpm[] = { -"32 32 4 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #838183", -"................................", -"................................", -"................................", -"................................", -"................................", -"................................", -"................................", -"...............++...............", -".............++++++.............", -"............++@+++@+............", -"..........+++..++..+++..........", -"........++.+.++..++.+.@+........", -".......+..+..+.++.+..+..++......", -".....++..++.+..++..+.++..++.....", -"...++..++...+.+..+.++..++..++...", -"..++.+.++....++..++....++.+..+..", -".+.+..+..++....++....++..++.+.+.", -"..+++....+.++++++++++.+....+++..", -"....++.@@+++++.++.++++@++.++....", -"......+++++++......++@+++++.....", -".......+++.+.++..++.+..++.......", -".........++..+.++.+..++.........", -"...........++..++..++...........", -".............++..+.+............", -"..............+..+@.............", -"...............@@...............", -"................................", -"................................", -"................................", -"................................", -"................................", -"................................" -}; -*/ - // leo: I'm too lazy to create a nice about box + char *icon_xpm[] = { + "32 32 4 1", + " c None", + ". c #000000", + "+ c #FFFFFF", + "@ c #838183", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "...............++...............", + ".............++++++.............", + "............++@+++@+............", + "..........+++..++..+++..........", + "........++.+.++..++.+.@+........", + ".......+..+..+.++.+..+..++......", + ".....++..++.+..++..+.++..++.....", + "...++..++...+.+..+.++..++..++...", + "..++.+.++....++..++....++.+..+..", + ".+.+..+..++....++....++..++.+.+.", + "..+++....+.++++++++++.+....+++..", + "....++.@@+++++.++.++++@++.++....", + "......+++++++......++@+++++.....", + ".......+++.+.++..++.+..++.......", + ".........++..+.++.+..++.........", + "...........++..++..++...........", + ".............++..+.+............", + "..............+..+@.............", + "...............@@...............", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................" + }; + */ + // leo: I'm too lazy to create a nice about box // ^Fishman - I am lazy too :P. - g_FuncTable.m_pfnMessageBox (parent, "GtkGenSurf 1.05\n\n" - "Original version\n" - "David Hyde (rascal@vicksburg.com)\n\n" - "Porting\n" - "Leonardo Zide (leo@lokigames.com)\n\n" - "Enhancements\n" - "Pablo Zurita (pablo@qeradiant.com)\n" - "Hydra (hydra@hydras-world.com)", - "About GtkGenSurf", MB_OK, NULL); + g_FuncTable.m_pfnMessageBox( parent, "GtkGenSurf 1.05\n\n" + "Original version\n" + "David Hyde (rascal@vicksburg.com)\n\n" + "Porting\n" + "Leonardo Zide (leo@lokigames.com)\n\n" + "Enhancements\n" + "Pablo Zurita (pablo@qeradiant.com)\n" + "Hydra (hydra@hydras-world.com)", + "About GtkGenSurf", MB_OK, NULL ); } // ============================================================================= // main dialog -static void SetupControls () -{ - switch (current_tab) - { - case GENERAL_TAB: - break; - - case EXTENTS_TAB: - if (Game != QUAKE3) - { - gtk_widget_hide (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "use_patches"))); - ENABLE_WIDGET ("use_patches", FALSE); - } - else - { - gtk_widget_show (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "use_patches"))); - ENABLE_WIDGET ("use_patches", TRUE); - } - - if (Game == QUAKE3 && UsePatches != 0) - { - ENABLE_WIDGET ("decimate", FALSE); - } - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "snap_text")), "Snap to grid:"); // ^Fishman - Snap to grid. - break; - - case BITMAP_TAB: - if (WaveType != WAVE_BITMAP) - { - ENABLE_WIDGET ("bmp_file", FALSE); - ENABLE_WIDGET ("bmp_file_browse", FALSE); - ENABLE_WIDGET ("bmp_black", FALSE); - ENABLE_WIDGET ("bmp_white", FALSE); - ENABLE_WIDGET ("bmp_text1", FALSE); - ENABLE_WIDGET ("bmp_text2", FALSE); - ENABLE_WIDGET ("bmp_text3", FALSE); - ENABLE_WIDGET ("bmp_reload", FALSE); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "bmp_note")), - "These options are disabled unless \"From Bitmap\"\n" - "is selected as the Waveform on the General tab."); - } - else - { - ENABLE_WIDGET ("bmp_file", TRUE); - ENABLE_WIDGET ("bmp_file_browse", TRUE); - ENABLE_WIDGET ("bmp_black", TRUE); - ENABLE_WIDGET ("bmp_white", TRUE); - ENABLE_WIDGET ("bmp_text1", TRUE); - ENABLE_WIDGET ("bmp_text2", TRUE); - ENABLE_WIDGET ("bmp_text3", TRUE); - ENABLE_WIDGET ("bmp_reload", strlen(gbmp.name) != 0); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "bmp_note")), - "GenSurf works only with 8-bit bitmaps. Color indices are\n" - "mapped to values for each vertex. Generally, gray scale\n" - "images are stored with black as color 0, white as color 255."); - } - break; - - case FIXPOINTS_TAB: - ENABLE_WIDGET ("fix_value", (NumVerticesSelected != 0)); - ENABLE_WIDGET ("fix_value_text", (NumVerticesSelected != 0)); - ENABLE_WIDGET ("fix_free", (NumVerticesSelected != 0)); - ENABLE_WIDGET ("fix_range", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY))); - ENABLE_WIDGET ("fix_range_text", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY))); - ENABLE_WIDGET ("fix_rate", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY))); - ENABLE_WIDGET ("fix_rate_text", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY))); - break; - - case TEXTURE_TAB: - ENABLE_WIDGET ("texture2", (UsePatches == 0)); - ENABLE_WIDGET ("texture3", (UsePatches == 0)); - ENABLE_WIDGET ("tex_slant", (UsePatches == 0)); - ENABLE_WIDGET ("detail", (UsePatches == 0)); - if (Game != QUAKE3 ) +static void SetupControls(){ + switch ( current_tab ) + { + case GENERAL_TAB: + break; + + case EXTENTS_TAB: + if ( Game != QUAKE3 ) { + gtk_widget_hide( GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "use_patches" ) ) ); + ENABLE_WIDGET( "use_patches", FALSE ); + } + else + { + gtk_widget_show( GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "use_patches" ) ) ); + ENABLE_WIDGET( "use_patches", TRUE ); + } + + if ( Game == QUAKE3 && UsePatches != 0 ) { + ENABLE_WIDGET( "decimate", FALSE ); + } + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "snap_text" ) ), "Snap to grid:" ); // ^Fishman - Snap to grid. + break; + + case BITMAP_TAB: + if ( WaveType != WAVE_BITMAP ) { + ENABLE_WIDGET( "bmp_file", FALSE ); + ENABLE_WIDGET( "bmp_file_browse", FALSE ); + ENABLE_WIDGET( "bmp_black", FALSE ); + ENABLE_WIDGET( "bmp_white", FALSE ); + ENABLE_WIDGET( "bmp_text1", FALSE ); + ENABLE_WIDGET( "bmp_text2", FALSE ); + ENABLE_WIDGET( "bmp_text3", FALSE ); + ENABLE_WIDGET( "bmp_reload", FALSE ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_note" ) ), + "These options are disabled unless \"From Bitmap\"\n" + "is selected as the Waveform on the General tab." ); + } + else { - ENABLE_WIDGET ("terrain_ent", FALSE); // ^Fishman - Adds terrain key to func_group. - ENABLE_WIDGET ("hint", (UsePatches == 0)); + ENABLE_WIDGET( "bmp_file", TRUE ); + ENABLE_WIDGET( "bmp_file_browse", TRUE ); + ENABLE_WIDGET( "bmp_black", TRUE ); + ENABLE_WIDGET( "bmp_white", TRUE ); + ENABLE_WIDGET( "bmp_text1", TRUE ); + ENABLE_WIDGET( "bmp_text2", TRUE ); + ENABLE_WIDGET( "bmp_text3", TRUE ); + ENABLE_WIDGET( "bmp_reload", strlen( gbmp.name ) != 0 ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_note" ) ), + "GenSurf works only with 8-bit bitmaps. Color indices are\n" + "mapped to values for each vertex. Generally, gray scale\n" + "images are stored with black as color 0, white as color 255." ); + } + break; + + case FIXPOINTS_TAB: + ENABLE_WIDGET( "fix_value", ( NumVerticesSelected != 0 ) ); + ENABLE_WIDGET( "fix_value_text", ( NumVerticesSelected != 0 ) ); + ENABLE_WIDGET( "fix_free", ( NumVerticesSelected != 0 ) ); + ENABLE_WIDGET( "fix_range", ( ( NumVerticesSelected != 0 ) && ( WaveType != WAVE_ROUGH_ONLY ) ) ); + ENABLE_WIDGET( "fix_range_text", ( ( NumVerticesSelected != 0 ) && ( WaveType != WAVE_ROUGH_ONLY ) ) ); + ENABLE_WIDGET( "fix_rate", ( ( NumVerticesSelected != 0 ) && ( WaveType != WAVE_ROUGH_ONLY ) ) ); + ENABLE_WIDGET( "fix_rate_text", ( ( NumVerticesSelected != 0 ) && ( WaveType != WAVE_ROUGH_ONLY ) ) ); + break; + + case TEXTURE_TAB: + ENABLE_WIDGET( "texture2", ( UsePatches == 0 ) ); + ENABLE_WIDGET( "texture3", ( UsePatches == 0 ) ); + ENABLE_WIDGET( "tex_slant", ( UsePatches == 0 ) ); + ENABLE_WIDGET( "detail", ( UsePatches == 0 ) ); + if ( Game != QUAKE3 ) { + ENABLE_WIDGET( "terrain_ent", FALSE ); // ^Fishman - Adds terrain key to func_group. + ENABLE_WIDGET( "hint", ( UsePatches == 0 ) ); } - break; - } - - switch (WaveType) - { - case WAVE_HCYLINDER: - case WAVE_VCYLINDER: - ENABLE_WIDGET ("amplitude", TRUE); - ENABLE_WIDGET ("wavelength", TRUE); - ENABLE_WIDGET ("z00", TRUE); - ENABLE_WIDGET ("z01", TRUE); - ENABLE_WIDGET ("z10", TRUE); - ENABLE_WIDGET ("z11", TRUE); - ENABLE_WIDGET ("linearborder", TRUE); - ENABLE_WIDGET ("go", TRUE); - break; - case WAVE_BITMAP: - ENABLE_WIDGET ("amplitude", FALSE); - ENABLE_WIDGET ("wavelength", FALSE); - ENABLE_WIDGET ("z00", FALSE); - ENABLE_WIDGET ("z01", FALSE); - ENABLE_WIDGET ("z10", FALSE); - ENABLE_WIDGET ("z11", FALSE); - ENABLE_WIDGET ("linearborder", FALSE); - ENABLE_WIDGET ("go", (gbmp.colors != NULL ? TRUE : FALSE)); - break; - case WAVE_ROUGH_ONLY: - ENABLE_WIDGET ("amplitude", FALSE); - ENABLE_WIDGET ("wavelength", FALSE); - ENABLE_WIDGET ("z00", TRUE); - ENABLE_WIDGET ("z01", TRUE); - ENABLE_WIDGET ("z10", TRUE); - ENABLE_WIDGET ("z11", TRUE); - ENABLE_WIDGET ("linearborder", TRUE); - ENABLE_WIDGET ("go", TRUE); - break; - default: - ENABLE_WIDGET ("amplitude", TRUE); - ENABLE_WIDGET ("wavelength", TRUE); - ENABLE_WIDGET ("z00", TRUE); - ENABLE_WIDGET ("z01", TRUE); - ENABLE_WIDGET ("z10", TRUE); - ENABLE_WIDGET ("z11", TRUE); - ENABLE_WIDGET ("linearborder", TRUE); - ENABLE_WIDGET ("go", TRUE); - } - - switch (Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmin_text")), "X:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmax_text")), "X:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmin_text")), "Z:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmax_text")), "Z:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nh_text")), "X:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nv_text")), "Z:"); - break; - case PLANE_YZ0: - case PLANE_YZ1: - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmin_text")), "Y:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmax_text")), "Y:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmin_text")), "Z:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmax_text")), "Z:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nh_text")), "Y:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nv_text")), "Z:"); - break; - default: - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmin_text")), "X:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmax_text")), "X:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmin_text")), "Y:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmax_text")), "Y:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nh_text")), "X:"); - gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nv_text")), "Y:"); - break; - } + break; + } + + switch ( WaveType ) + { + case WAVE_HCYLINDER: + case WAVE_VCYLINDER: + ENABLE_WIDGET( "amplitude", TRUE ); + ENABLE_WIDGET( "wavelength", TRUE ); + ENABLE_WIDGET( "z00", TRUE ); + ENABLE_WIDGET( "z01", TRUE ); + ENABLE_WIDGET( "z10", TRUE ); + ENABLE_WIDGET( "z11", TRUE ); + ENABLE_WIDGET( "linearborder", TRUE ); + ENABLE_WIDGET( "go", TRUE ); + break; + case WAVE_BITMAP: + ENABLE_WIDGET( "amplitude", FALSE ); + ENABLE_WIDGET( "wavelength", FALSE ); + ENABLE_WIDGET( "z00", FALSE ); + ENABLE_WIDGET( "z01", FALSE ); + ENABLE_WIDGET( "z10", FALSE ); + ENABLE_WIDGET( "z11", FALSE ); + ENABLE_WIDGET( "linearborder", FALSE ); + ENABLE_WIDGET( "go", ( gbmp.colors != NULL ? TRUE : FALSE ) ); + break; + case WAVE_ROUGH_ONLY: + ENABLE_WIDGET( "amplitude", FALSE ); + ENABLE_WIDGET( "wavelength", FALSE ); + ENABLE_WIDGET( "z00", TRUE ); + ENABLE_WIDGET( "z01", TRUE ); + ENABLE_WIDGET( "z10", TRUE ); + ENABLE_WIDGET( "z11", TRUE ); + ENABLE_WIDGET( "linearborder", TRUE ); + ENABLE_WIDGET( "go", TRUE ); + break; + default: + ENABLE_WIDGET( "amplitude", TRUE ); + ENABLE_WIDGET( "wavelength", TRUE ); + ENABLE_WIDGET( "z00", TRUE ); + ENABLE_WIDGET( "z01", TRUE ); + ENABLE_WIDGET( "z10", TRUE ); + ENABLE_WIDGET( "z11", TRUE ); + ENABLE_WIDGET( "linearborder", TRUE ); + ENABLE_WIDGET( "go", TRUE ); + } + + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmin_text" ) ), "X:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmax_text" ) ), "X:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmin_text" ) ), "Z:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmax_text" ) ), "Z:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nh_text" ) ), "X:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nv_text" ) ), "Z:" ); + break; + case PLANE_YZ0: + case PLANE_YZ1: + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmin_text" ) ), "Y:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmax_text" ) ), "Y:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmin_text" ) ), "Z:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmax_text" ) ), "Z:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nh_text" ) ), "Y:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nv_text" ) ), "Z:" ); + break; + default: + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmin_text" ) ), "X:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "hmax_text" ) ), "X:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmin_text" ) ), "Y:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "vmax_text" ) ), "Y:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nh_text" ) ), "X:" ); + gtk_label_set_text( GTK_LABEL( g_object_get_data( G_OBJECT( g_pWnd ), "nv_text" ) ), "Y:" ); + break; + } } // SetDlgValues fills in text boxes and initializes other input controls -static void SetDlgValues (int tab) -{ - char Text[256]; - char RForm[16] = "%.5g"; - - switch (tab) - { - case GENERAL_TAB: - // mattn: Deactivated because one wasn't able to switch the gametype or orientation +static void SetDlgValues( int tab ){ + char Text[256]; + char RForm[16] = "%.5g"; + + switch ( tab ) + { + case GENERAL_TAB: + // mattn: Deactivated because one wasn't able to switch the gametype or orientation #if 0 - // Hell if I know why, but in the release build the 2nd pass thru the - // set_sensitive loop for game_radios crashes. No need to do this more - // than once anyhow. - if (!FirstPassComplete) - { - int i; - for (i = 0; i < NUMGAMES; i++) - gtk_widget_set_sensitive (game_radios[i], (i == Game ? TRUE : FALSE)); - for (i = 0; i < 6; i++) - gtk_widget_set_sensitive (plane_radios[i], (i == Plane ? TRUE : FALSE)); - } + // Hell if I know why, but in the release build the 2nd pass thru the + // set_sensitive loop for game_radios crashes. No need to do this more + // than once anyhow. + if ( !FirstPassComplete ) { + int i; + for ( i = 0; i < NUMGAMES; i++ ) + gtk_widget_set_sensitive( game_radios[i], ( i == Game ? TRUE : FALSE ) ); + for ( i = 0; i < 6; i++ ) + gtk_widget_set_sensitive( plane_radios[i], ( i == Plane ? TRUE : FALSE ) ); + } #endif - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (game_radios[Game]), TRUE); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (plane_radios[Plane]), TRUE); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wave_radios[WaveType]), TRUE); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "random")), - RandomSeed); - sprintf (Text, RForm, WaveLength); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "wavelength")), Text); - sprintf (Text, RForm, Amplitude); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "amplitude")), Text); - sprintf (Text, RForm, Roughness); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "roughness")), Text); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data - (G_OBJECT (g_pWnd), "main_antialiasing")), Antialiasing); - break; - - case EXTENTS_TAB: - sprintf (Text,RForm,Hll); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "hmin")), Text); - sprintf (Text,RForm,Vll); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "vmin")), Text); - sprintf (Text,RForm,Hur); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "hmax")), Text); - sprintf (Text,RForm,Vur); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "vmax")), Text); - sprintf (Text,RForm,Z00); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "z00")), Text); - sprintf (Text,RForm,Z01); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "z01")), Text); - sprintf (Text,RForm,Z10); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "z10")), Text); - sprintf (Text,RForm,Z11); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "z11")), Text); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "nh")), NH); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "nv")), NV); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "sp")), SP); // ^Fishman - Snap to grid. - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data - (G_OBJECT (g_pWnd), "linearborder")), FixBorders); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data - (G_OBJECT (g_pWnd), "use_patches")), UsePatches); - gtk_adjustment_set_value (GTK_ADJUSTMENT (g_object_get_data (G_OBJECT (g_pWnd), "decimate_adj")), - Decimate); - - if (Game == QUAKE3 && UsePatches) - { - gtk_widget_set_sensitive (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "decimate")), FALSE); - - if (NH % 2) - { - NH++; - if (NH > MAX_ROWS) NH -= 2; - SetDlgValues (current_tab); - } - - if (NV % 2) - { - NV++; - if (NV > MAX_ROWS) NV -= 2; - SetDlgValues (current_tab); - } - if (NH % 2 ) NH++; - if (NH < 2 ) NH = 2; - if (NH > MAX_ROWS) NH = MAX_ROWS; - if (NV % 2 ) NV++; - if (NV < 2 ) NV = 2; - if (NV > MAX_ROWS) NV = MAX_ROWS; - - gpointer spin = g_object_get_data (G_OBJECT (g_pWnd), "nh"); - GtkAdjustment *adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin)); - adj->lower = 2; - gtk_adjustment_changed (adj); - spin = g_object_get_data (G_OBJECT (g_pWnd), "nv"); - adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin)); - adj->lower = 2; - gtk_adjustment_changed (adj); - } - else - { - gtk_widget_set_sensitive (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "decimate")), TRUE); - - gpointer spin = g_object_get_data (G_OBJECT (g_pWnd), "nh"); - GtkAdjustment *adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin)); - adj->lower = 1; - gtk_adjustment_changed (adj); - spin = g_object_get_data (G_OBJECT (g_pWnd), "nv"); - adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin)); - adj->lower = 1; - gtk_adjustment_changed (adj); - } - - gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "nh")), NH); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "nv")), NV); - - break; - - case BITMAP_TAB: - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file")), gbmp.name); - sprintf(Text,"%g",gbmp.black_value); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_black")), Text); - sprintf(Text,"%g",gbmp.white_value); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_white")), Text); - break; - - case FIXPOINTS_TAB: - break; - - case TEXTURE_TAB: - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texture1")), Texture[Game][0]); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texture2")), Texture[Game][1]); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texture3")), Texture[Game][2]); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "tex_slant")), - SlantAngle); - sprintf(Text,RForm,TexOffset[0]); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texoffsetx")), Text); - sprintf(Text,RForm,TexOffset[1]); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texoffsety")), Text); - sprintf(Text,RForm,TexScale[0]); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texscalex")), Text); - sprintf(Text,RForm,TexScale[1]); - gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texscaley")), Text); - CHECK_WIDGET ("detail", UseDetail); - - if (Game==QUAKE3) - { - ENABLE_WIDGET ("hint", FALSE); - AddHints=0; - } - else - ENABLE_WIDGET ("hint", TRUE); - CHECK_WIDGET ("hint", AddHints); - - /* - if (Game==SIN) - { - // ArghRad doesn't currently support SiN - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); - SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use sin file"); - SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Sin:"); - } - */ - - if(Game==QUAKE3) - { - /* - // ArghRad sun is inapplicable (so far) - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); - // No ladders in Q3 - EnableWindow(GetDlgItem(hwndDisplay,DLG_LADDER), 0); - ShowWindow(GetDlgItem(hwndDisplay,DLG_LADDER), SW_HIDE); - SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use pk3 file"); - SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"PK3:"); - */ - } + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( game_radios[Game] ), TRUE ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( plane_radios[Plane] ), TRUE ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( wave_radios[WaveType] ), TRUE ); + gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "random" ) ), + RandomSeed ); + sprintf( Text, RForm, WaveLength ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "wavelength" ) ), Text ); + sprintf( Text, RForm, Amplitude ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "amplitude" ) ), Text ); + sprintf( Text, RForm, Roughness ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "roughness" ) ), Text ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data + ( G_OBJECT( g_pWnd ), "main_antialiasing" ) ), Antialiasing ); + break; -/*trix if(Game==HERETIC2) - { - // ArghRad doesn't currently support Heretic2 - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); - - SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use pak file"); - SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Pak:"); - } */ - /* - if(Game==HALFLIFE) + case EXTENTS_TAB: + sprintf( Text,RForm,Hll ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "hmin" ) ), Text ); + sprintf( Text,RForm,Vll ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "vmin" ) ), Text ); + sprintf( Text,RForm,Hur ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "hmax" ) ), Text ); + sprintf( Text,RForm,Vur ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "vmax" ) ), Text ); + sprintf( Text,RForm,Z00 ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "z00" ) ), Text ); + sprintf( Text,RForm,Z01 ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "z01" ) ), Text ); + sprintf( Text,RForm,Z10 ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "z10" ) ), Text ); + sprintf( Text,RForm,Z11 ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "z11" ) ), Text ); + gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "nh" ) ), NH ); + gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "nv" ) ), NV ); + gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "sp" ) ), SP ); // ^Fishman - Snap to grid. + + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data + ( G_OBJECT( g_pWnd ), "linearborder" ) ), FixBorders ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data + ( G_OBJECT( g_pWnd ), "use_patches" ) ), UsePatches ); + gtk_adjustment_set_value( GTK_ADJUSTMENT( g_object_get_data( G_OBJECT( g_pWnd ), "decimate_adj" ) ), + Decimate ); + + if ( Game == QUAKE3 && UsePatches ) { + gtk_widget_set_sensitive( GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "decimate" ) ), FALSE ); + + if ( NH % 2 ) { + NH++; + if ( NH > MAX_ROWS ) { + NH -= 2; + } + SetDlgValues( current_tab ); + } + + if ( NV % 2 ) { + NV++; + if ( NV > MAX_ROWS ) { + NV -= 2; + } + SetDlgValues( current_tab ); + } + if ( NH % 2 ) { + NH++; + } + if ( NH < 2 ) { + NH = 2; + } + if ( NH > MAX_ROWS ) { + NH = MAX_ROWS; + } + if ( NV % 2 ) { + NV++; + } + if ( NV < 2 ) { + NV = 2; + } + if ( NV > MAX_ROWS ) { + NV = MAX_ROWS; + } + + gpointer spin = g_object_get_data( G_OBJECT( g_pWnd ), "nh" ); + GtkAdjustment *adj = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin ) ); + adj->lower = 2; + gtk_adjustment_changed( adj ); + spin = g_object_get_data( G_OBJECT( g_pWnd ), "nv" ); + adj = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin ) ); + adj->lower = 2; + gtk_adjustment_changed( adj ); + } + else { - // A bunch of controls aren't applicable to HL - EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE_BROWSE), 0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE2_BROWSE),0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE3_BROWSE),0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_DETAIL), 0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_LADDER), 0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); - ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE_BROWSE), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE2_BROWSE),SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE3_BROWSE),SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_DETAIL), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_LADDER), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); - - SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use wad file"); - SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Wad:"); - SetDlgItemText(hwndDisplay,DLG_HINT,"Hint brushes"); + gtk_widget_set_sensitive( GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "decimate" ) ), TRUE ); + + gpointer spin = g_object_get_data( G_OBJECT( g_pWnd ), "nh" ); + GtkAdjustment *adj = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin ) ); + adj->lower = 1; + gtk_adjustment_changed( adj ); + spin = g_object_get_data( G_OBJECT( g_pWnd ), "nv" ); + adj = gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON( spin ) ); + adj->lower = 1; + gtk_adjustment_changed( adj ); } - if(Game==GENESIS3D) - { - // No Q2-type compilers support Genesis3D (including ArghRad) - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); - EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); - ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); - - SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use sin file"); - SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Sin:"); + gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "nh" ) ), NH ); + gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "nv" ) ), NV ); + + break; + + case BITMAP_TAB: + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_file" ) ), gbmp.name ); + sprintf( Text,"%g",gbmp.black_value ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_black" ) ), Text ); + sprintf( Text,"%g",gbmp.white_value ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_white" ) ), Text ); + break; + + case FIXPOINTS_TAB: + break; + + case TEXTURE_TAB: + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texture1" ) ), Texture[Game][0] ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texture2" ) ), Texture[Game][1] ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texture3" ) ), Texture[Game][2] ); + gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "tex_slant" ) ), + SlantAngle ); + sprintf( Text,RForm,TexOffset[0] ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texoffsetx" ) ), Text ); + sprintf( Text,RForm,TexOffset[1] ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texoffsety" ) ), Text ); + sprintf( Text,RForm,TexScale[0] ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texscalex" ) ), Text ); + sprintf( Text,RForm,TexScale[1] ); + gtk_entry_set_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "texscaley" ) ), Text ); + CHECK_WIDGET( "detail", UseDetail ); + + if ( Game == QUAKE3 ) { + ENABLE_WIDGET( "hint", FALSE ); + AddHints = 0; + } + else{ + ENABLE_WIDGET( "hint", TRUE ); } - */ - break; - } - SetupControls (); + CHECK_WIDGET( "hint", AddHints ); + + /* + if (Game==SIN) + { + // ArghRad doesn't currently support SiN + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); + SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use sin file"); + SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Sin:"); + } + */ + + if ( Game == QUAKE3 ) { + /* + // ArghRad sun is inapplicable (so far) + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); + // No ladders in Q3 + EnableWindow(GetDlgItem(hwndDisplay,DLG_LADDER), 0); + ShowWindow(GetDlgItem(hwndDisplay,DLG_LADDER), SW_HIDE); + SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use pk3 file"); + SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"PK3:"); + */ + } + +/*trix if(Game==HERETIC2) + { + // ArghRad doesn't currently support Heretic2 + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); + + SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use pak file"); + SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Pak:"); + } */ + /* + if(Game==HALFLIFE) + { + // A bunch of controls aren't applicable to HL + EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE2_BROWSE),0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE3_BROWSE),0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_DETAIL), 0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_LADDER), 0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); + ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE_BROWSE), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE2_BROWSE),SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE3_BROWSE),SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_DETAIL), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_LADDER), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); + + SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use wad file"); + SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Wad:"); + SetDlgItemText(hwndDisplay,DLG_HINT,"Hint brushes"); + } + + if(Game==GENESIS3D) + { + // No Q2-type compilers support Genesis3D (including ArghRad) + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0); + EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE); + ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE); + + SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use sin file"); + SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Sin:"); + } + */ + break; + } + SetupControls(); } -static void ReadDlgValues (int tab) -{ - // char Text[256]; - // int i; - - switch (tab) - { - case GENERAL_TAB: - gpointer spin; - Roughness = atof ( gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "roughness")))); - WaveLength = atof ( gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "wavelength")))); - Amplitude = atof ( gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "amplitude")))); - spin = g_object_get_data (G_OBJECT (g_pWnd), "random"); - RandomSeed = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin)); - break; - - case EXTENTS_TAB: - SP = atoi (gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "sp")))); - NH = atoi (gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "nh")))); - NV = atoi (gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "nv")))); - - if (Game == QUAKE3 && UsePatches != 0) - { - if (NH % 2 ) NH++; - if (NH < 2 ) NH = 2; - if (NH > MAX_ROWS) NH = MAX_ROWS; - if (NV % 2 ) NV++; - if (NV < 2 ) NV = 2; - if (NV > MAX_ROWS) NV = MAX_ROWS; - } - break; +static void ReadDlgValues( int tab ){ + // char Text[256]; + // int i; + + switch ( tab ) + { + case GENERAL_TAB: + gpointer spin; + Roughness = atof( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "roughness" ) ) ) ); + WaveLength = atof( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "wavelength" ) ) ) ); + Amplitude = atof( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "amplitude" ) ) ) ); + spin = g_object_get_data( G_OBJECT( g_pWnd ), "random" ); + RandomSeed = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spin ) ); + break; + + case EXTENTS_TAB: + SP = atoi( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "sp" ) ) ) ); + NH = atoi( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "nh" ) ) ) ); + NV = atoi( gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "nv" ) ) ) ); + + if ( Game == QUAKE3 && UsePatches != 0 ) { + if ( NH % 2 ) { + NH++; + } + if ( NH < 2 ) { + NH = 2; + } + if ( NH > MAX_ROWS ) { + NH = MAX_ROWS; + } + if ( NV % 2 ) { + NV++; + } + if ( NV < 2 ) { + NV = 2; + } + if ( NV > MAX_ROWS ) { + NV = MAX_ROWS; + } + } + break; #if 0 - case BITMAP_TAB: - - if (WaveType == WAVE_BITMAP) - { - GetDlgItemText(hwnd,DLG_BMP_FILE,gbmp.name,sizeof(gbmp.name)); - CheckValidDIB(hwnd); - GetDlgItemText(hwnd,DLG_BMP_BLACK,Text,sizeof(Text)); - gbmp.black_value = atof(Text); - GetDlgItemText(hwnd,DLG_BMP_WHITE,Text,sizeof(Text)); - gbmp.white_value = atof(Text); - UpdatePreview(TRUE); - } - break; - - case FIXPOINTS_TAB: - GetDlgItemText(hwnd,DLG_FIX_VALUE,Text,sizeof(Text)); - temp.fixed_value = atoi(Text); - GetDlgItemText(hwnd,DLG_FIX_RANGE,Text,sizeof(Text)); - temp.range = atoi(Text); - GetDlgItemText(hwnd,DLG_FIX_RATE, Text,sizeof(Text)); - temp.rate = atof(Text); - for(k=0; k MAX_ROWS) - { - sprintf (Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS); - g_FuncTable.m_pfnMessageBox (g_pWnd, Text, "GenSurf", MB_ICONEXCLAMATION, NULL); - gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB); - return; - } - - if (NV < 1 || NV > MAX_ROWS) - { - sprintf (Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS); - g_FuncTable.m_pfnMessageBox (g_pWnd, Text, "GenSurf", MB_ICONEXCLAMATION, NULL); - gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB); - return; - } - - if (Hll >= Hur) - { - g_FuncTable.m_pfnMessageBox (g_pWnd, "The \"lower-left\" values must be less than " - "the corresponding \"upper-right\" values in " - "the \"Extent\" box.","GenSurf", MB_OK | MB_ICONEXCLAMATION, NULL); - gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB); - return; - } - - if (Vll >= Vur) - { - g_FuncTable.m_pfnMessageBox (g_pWnd,"The \"lower-left\" values must be less than " - "the corresponding \"upper-right\" values in " - "the \"Extent\" box.","GenSurf", MB_OK | MB_ICONEXCLAMATION, NULL); - gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB); - return; - } - - if (!strlen (Texture[Game][0])) - { - g_FuncTable.m_pfnMessageBox (g_pWnd, "You must supply a texture name.", "GenSurf", MB_ICONEXCLAMATION, NULL); - gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB); - return; - } +static void main_go( GtkWidget *widget, gpointer data ){ + GtkWidget *notebook = GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "notebook" ) ); + char Text[256]; + + ReadDlgValues( current_tab ); + if ( NH < 1 || NH > MAX_ROWS ) { + sprintf( Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS ); + g_FuncTable.m_pfnMessageBox( g_pWnd, Text, "GenSurf", MB_ICONEXCLAMATION, NULL ); + gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB ); + return; + } + + if ( NV < 1 || NV > MAX_ROWS ) { + sprintf( Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS ); + g_FuncTable.m_pfnMessageBox( g_pWnd, Text, "GenSurf", MB_ICONEXCLAMATION, NULL ); + gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB ); + return; + } + + if ( Hll >= Hur ) { + g_FuncTable.m_pfnMessageBox( g_pWnd, "The \"lower-left\" values must be less than " + "the corresponding \"upper-right\" values in " + "the \"Extent\" box.","GenSurf", MB_OK | MB_ICONEXCLAMATION, NULL ); + gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB ); + return; + } + + if ( Vll >= Vur ) { + g_FuncTable.m_pfnMessageBox( g_pWnd,"The \"lower-left\" values must be less than " + "the corresponding \"upper-right\" values in " + "the \"Extent\" box.","GenSurf", MB_OK | MB_ICONEXCLAMATION, NULL ); + gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB ); + return; + } + + if ( !strlen( Texture[Game][0] ) ) { + g_FuncTable.m_pfnMessageBox( g_pWnd, "You must supply a texture name.", "GenSurf", MB_ICONEXCLAMATION, NULL ); + gtk_notebook_set_page( GTK_NOTEBOOK( notebook ), EXTENTS_TAB ); + return; + } /* if (Decimate>0 && GimpHints!=0) - { + { MessageBox(hwnd,"You've elected to use a decimated grid and gimp's non-detail hint brushes. " "This combination usually produces bizarre visual errors in the game, " "so GenSurf has turned off the hint brush option.", "GenSurf",MB_ICONEXCLAMATION); GimpHints = 0; - } */ + } */ - gtk_widget_hide (g_pWnd); - if (g_pWndPreview) - gtk_widget_hide (g_pWndPreview); + gtk_widget_hide( g_pWnd ); + if ( g_pWndPreview ) { + gtk_widget_hide( g_pWndPreview ); + } - GenerateMap(); - WriteIniFile(gszIni); + GenerateMap(); + WriteIniFile( gszIni ); } // ============================================================================= // general tab callbacks -static void general_game (GtkToggleButton *widget, gpointer data) -{ - if (gtk_toggle_button_get_active (widget)) - { - Game = GPOINTER_TO_INT (data); - UpdatePreview (TRUE); - } +static void general_game( GtkToggleButton *widget, gpointer data ){ + if ( gtk_toggle_button_get_active( widget ) ) { + Game = GPOINTER_TO_INT( data ); + UpdatePreview( TRUE ); + } } -static void general_plane (GtkToggleButton *widget, gpointer data) -{ - if (gtk_toggle_button_get_active (widget)) - { - Plane = GPOINTER_TO_INT (data); - SetupControls (); - UpdatePreview (TRUE); - } +static void general_plane( GtkToggleButton *widget, gpointer data ){ + if ( gtk_toggle_button_get_active( widget ) ) { + Plane = GPOINTER_TO_INT( data ); + SetupControls(); + UpdatePreview( TRUE ); + } } -static void general_wave (GtkToggleButton *widget, gpointer data) -{ - if (gtk_toggle_button_get_active (widget)) - { - WaveType = GPOINTER_TO_INT (data); - SetupControls (); - UpdatePreview (TRUE); - } +static void general_wave( GtkToggleButton *widget, gpointer data ){ + if ( gtk_toggle_button_get_active( widget ) ) { + WaveType = GPOINTER_TO_INT( data ); + SetupControls(); + UpdatePreview( TRUE ); + } } -static void general_random (GtkAdjustment *adj, gpointer data) -{ - int nPos = (int)adj->value; +static void general_random( GtkAdjustment *adj, gpointer data ){ + int nPos = (int)adj->value; - if (RandomSeed != nPos) - { - RandomSeed = nPos; - UpdatePreview (true); - } + if ( RandomSeed != nPos ) { + RandomSeed = nPos; + UpdatePreview( true ); + } } // ============================================================================= // extents tab callbacks -static void extents_linearborder (GtkToggleButton *check, gpointer data) -{ - FixBorders = gtk_toggle_button_get_active (check); - UpdatePreview (true); +static void extents_linearborder( GtkToggleButton *check, gpointer data ){ + FixBorders = gtk_toggle_button_get_active( check ); + UpdatePreview( true ); } -static void extents_use_patches (GtkToggleButton *check, gpointer data) -{ - if (Game != QUAKE3) - return; +static void extents_use_patches( GtkToggleButton *check, gpointer data ){ + if ( Game != QUAKE3 ) { + return; + } - UsePatches = gtk_toggle_button_get_active (check); - SetDlgValues (current_tab); - SetupControls (); - UpdatePreview (true); + UsePatches = gtk_toggle_button_get_active( check ); + SetDlgValues( current_tab ); + SetupControls(); + UpdatePreview( true ); } -static void extents_nhnv_spin (GtkAdjustment *adj, int *data) -{ - int nPos = (int)adj->value; - - if (*data != nPos) - { - if (Game==QUAKE3 && UsePatches && (nPos % 2)) - { - if (*data < nPos) - *data += 2; - else - *data -= 2; - gtk_adjustment_set_value (adj, *data); - } - else - *data = nPos; - UpdatePreview (true); - } +static void extents_nhnv_spin( GtkAdjustment *adj, int *data ){ + int nPos = (int)adj->value; + + if ( *data != nPos ) { + if ( Game == QUAKE3 && UsePatches && ( nPos % 2 ) ) { + if ( *data < nPos ) { + *data += 2; + } + else{ + *data -= 2; + } + gtk_adjustment_set_value( adj, *data ); + } + else{ + *data = nPos; + } + UpdatePreview( true ); + } } -static void extents_decimate (GtkAdjustment *adj, gpointer data) -{ - int nPos = (int)adj->value; +static void extents_decimate( GtkAdjustment *adj, gpointer data ){ + int nPos = (int)adj->value; - Decimate = nPos; - UpdatePreview (true); + Decimate = nPos; + UpdatePreview( true ); } // Hydra : snap to grid begin /*static void extents_snaptogrid (GtkAdjustment *adj, gpointer data) -{ - int nPos = (int)adj->value; + { + int nPos = (int)adj->value; - SnapToGrid = nPos; - UpdatePreview (true); -}*/ + SnapToGrid = nPos; + UpdatePreview (true); + }*/ // ^Fishman - Modified version of Hydra's snap to grid code. -static void extents_snaptogrid_spin (GtkAdjustment *adj, int *data) -{ +static void extents_snaptogrid_spin( GtkAdjustment *adj, int *data ){ int nPos = (int)adj->value; SnapToGrid = nPos; - UpdatePreview (true); + UpdatePreview( true ); } // ============================================================================= // bitmap tab callbacks -static gint bitmap_file_entryfocusout(GtkWidget* widget, GdkEventFocus* event, gpointer data) -{ - char filename[NAME_MAX]; - - strcpy (filename, gtk_entry_get_text (GTK_ENTRY(widget))); - if(strcmp (filename,gbmp.name)) - { - strcpy (gbmp.name,filename); - if (strlen(gbmp.name) ) - OpenBitmap (); - ENABLE_WIDGET ("go", (gbmp.colors != NULL ? TRUE : FALSE)); - } - return FALSE; +static gint bitmap_file_entryfocusout( GtkWidget* widget, GdkEventFocus* event, gpointer data ){ + char filename[NAME_MAX]; + + strcpy( filename, gtk_entry_get_text( GTK_ENTRY( widget ) ) ); + if ( strcmp( filename,gbmp.name ) ) { + strcpy( gbmp.name,filename ); + if ( strlen( gbmp.name ) ) { + OpenBitmap(); + } + ENABLE_WIDGET( "go", ( gbmp.colors != NULL ? TRUE : FALSE ) ); + } + return FALSE; } -static void bitmap_browse (GtkWidget *widget, gpointer data) -{ - const char *filename; - char *ptr; +static void bitmap_browse( GtkWidget *widget, gpointer data ){ + const char *filename; + char *ptr; - filename = g_FuncTable.m_pfnFileDialog (g_pWnd, TRUE, "Bitmap File", gbmp.defpath, "gtkgensurf", NULL); + filename = g_FuncTable.m_pfnFileDialog( g_pWnd, TRUE, "Bitmap File", gbmp.defpath, "gtkgensurf", NULL ); - if (filename != NULL) - { - strcpy (gbmp.name, filename); + if ( filename != NULL ) { + strcpy( gbmp.name, filename ); - ptr = (char *) strrchr (filename, G_DIR_SEPARATOR); - if (ptr != NULL) - { - *(ptr+1) = '\0'; - strcpy (gbmp.defpath, filename); - } + ptr = (char *) strrchr( filename, G_DIR_SEPARATOR ); + if ( ptr != NULL ) { + *( ptr + 1 ) = '\0'; + strcpy( gbmp.defpath, filename ); + } - OpenBitmap (); - ENABLE_WIDGET ("go", (gbmp.colors != NULL ? TRUE : FALSE)); - } + OpenBitmap(); + ENABLE_WIDGET( "go", ( gbmp.colors != NULL ? TRUE : FALSE ) ); + } } -static void bitmap_reload (GtkWidget *widget, gpointer data) -{ - strcpy (gbmp.name, gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file")))); - if(strlen (gbmp.name) ) - { - OpenBitmap (); - ENABLE_WIDGET ("go", (gbmp.colors != NULL ? TRUE : FALSE)); - } - else - ENABLE_WIDGET ("go", FALSE ); +static void bitmap_reload( GtkWidget *widget, gpointer data ){ + strcpy( gbmp.name, gtk_entry_get_text( GTK_ENTRY( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_file" ) ) ) ); + if ( strlen( gbmp.name ) ) { + OpenBitmap(); + ENABLE_WIDGET( "go", ( gbmp.colors != NULL ? TRUE : FALSE ) ); + } + else{ + ENABLE_WIDGET( "go", FALSE ); + } } // ============================================================================= // fix points tab callbacks -static gint fix_value_entryfocusout (GtkWidget* widget, GdkEventFocus *event, gpointer data) -{ - int i = atoi (gtk_entry_get_text (GTK_ENTRY(widget))), k; - char Text[32]; - - if (i < -65536 || i > 65536) - { - gdk_beep (); - g_FuncTable.m_pfnMessageBox (g_pWnd, "The value must be between -65536 and 65536, inclusive.", - "GenSurf", MB_OK | MB_ICONEXCLAMATION, NULL); - sprintf (Text, "%d", (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value); - gtk_entry_set_text (GTK_ENTRY(widget), Text); - gtk_window_set_focus (GTK_WINDOW (gtk_widget_get_toplevel (widget)), widget); - } - else if (i != xyz[Vertex[0].i][Vertex[0].j].fixed_value) - { - for(k=0; k 65536 ) { + gdk_beep(); + g_FuncTable.m_pfnMessageBox( g_pWnd, "The value must be between -65536 and 65536, inclusive.", + "GenSurf", MB_OK | MB_ICONEXCLAMATION, NULL ); + sprintf( Text, "%d", (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value ); + gtk_entry_set_text( GTK_ENTRY( widget ), Text ); + gtk_window_set_focus( GTK_WINDOW( gtk_widget_get_toplevel( widget ) ), widget ); + } + else if ( i != xyz[Vertex[0].i][Vertex[0].j].fixed_value ) { + for ( k = 0; k < NumVerticesSelected; k++ ) + xyz[Vertex[k].i][Vertex[k].j].fixed_value = i; + + gtk_spin_button_set_value( GTK_SPIN_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "fix_value" ) ), + (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value ); + UpdatePreview( true ); + } + return FALSE; } -static void fix_value_changed (GtkAdjustment *adj, gpointer data) -{ - int k, i = (int)adj->value; +static void fix_value_changed( GtkAdjustment *adj, gpointer data ){ + int k, i = (int)adj->value; - if (xyz[Vertex[0].i][Vertex[0].j].fixed_value != i) - { - for(k=0; k(data)); - return FALSE; +static gint doublevariable_entryfocusout( GtkWidget* widget, GdkEventFocus* event, gpointer data ){ + UpdateVariable( GTK_ENTRY( widget ), event, reinterpret_cast( data ) ); + return FALSE; } // ============================================================================= // create tooltips -void create_tooltips () -{ - tooltips = gtk_tooltips_new (); - - // Main - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "go")), - "Accept all input and generate a surface in Q3Radiant", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "open")), - "Open a previously saved GenSurf settings file.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "save")), - "Save all settings to a file.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "defaults")), - "Restore default values from DEFAULTS.SRF. If this file does not exist, GenSurf " - "initializes all input parameters to reasonable values. You can create your own " - "default surface by setting all parameters to your liking, then saving a settings " - "file as DEFAULTS.SRF with the Save As button.", - ""); - - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "main_preview")), - "View a wire-frame representation of the surface", - ""); - - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "main_antialiasing")), - "The lines in the preview window are antialiased for better quality", - ""); - - // General tab - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (wave_radios[0]), - "Builds a surface with alternating hills and valleys. Uses the general form Z=cos(X) " - "x sin(Y)", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (wave_radios[1]), - "Builds a surface with ridges parallel to the vertical axis.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (wave_radios[2]), - "Builds a surface with ridges parallel to the horizontal axis.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (wave_radios[3]), - "Builds a map from a bitmap image representing a contour plot. Click the \"Bitmap\" " - "tab to select the image. GenSurf only supports 256-color (8 bit) " - "bitmaps. GenSurf will work with any 256-color bitmap, but gray scale bitmaps are a bit " - "more intuitive.", - "" ); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (wave_radios[4]), - "Builds a random surface using the Plasma Cloud technique. Variance is controlled " - "by the Roughness input. To build a surface with completely random values not " - "dependent on neighboring vertices, use one of the other waveforms with 0 amplitude.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "wavelength")), - "Enter the wavelength (distance between crests). NOTE: Wavelengths equal to the grid " - "size or 2 times the grid size will result in 0 amplitudes. For best results, the " - "wavelength value should be at least 4 times the grid size (extents divided by the " - "number of divisions", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "amplitude")), - "Enter the height of hills/ridges.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "roughness")), - "Enter the roughness value (noise) for the surface. For fractal surfaces, this value " - "is used as a variance in the fractal calculations.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "random")), - "Seed value for the pseudo-random number generator.", - ""); - // Extents tab - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "hmin")), - "Minimum horizontal coordinate of the surface, i.e. X for a surface parallel to " - "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, " - "the extents (maximum-minimum values) in a given direction should be evenly " - "divisible by the number of divisions in that direction.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "hmax")), - "Maximum horizontal coordinate of the surface, i.e. X for a surface parallel to " - "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, " - "the extents (maximum-minimum values) in a given direction should be evenly " - "divisible by the number of divisions in that direction.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "vmin")), - "Minimum vertical coordinate of the surface, i.e. Y for a surface parallel to " - "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, " - "the extents (maximum-minimum values) in a given direction should be evenly " - "divisible by the number of divisions in that direction.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "vmax")), - "Maximum vertical coordinate of the surface, i.e. Y for a surface parallel to " - "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, " - "the extents (maximum-minimum values) in a given direction should be evenly " - "divisible by the number of divisions in that direction.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "nh")), - "Number of divisions in the horizontal direction. For best results, the extents " - "in a given direction should be evenly divisible by the number of divisions in " - "that direction.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "nv")), - "Number of divisions in the vertical direction. For best results, the extents " - "in a given direction should be evenly divisible by the number of divisions in " - "that direction.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "use_patches")), - "Produce one or more curved patches in the shape of your selected surface rather " - "than producing solid brushes. Depending on the size of your surface (and the " - "user's graphic detail settings, which you cannot control), curved surfaces will " - "be represented in the game by a very large number of polygons. Read the warnings " - "concerning curved surfaces on the GenSurf web page before using this feature.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "decimate")), - "Use the slider to control the number of vertices discarded by GenSurf. For many " - "surfaces, you can produce roughly the same shape surface with a high decimation " - "value. This will generally result in a map with lower polygon counts (and better " - "in-game performance). However, this feature should NOT be used for large terrain " - "surfaces in Q3", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "z00")), - "Enter the height of the surface at the lower left corner. This value will likely " - "be modified unless \"Linear Borders\" is checked.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "z01")), - "Enter the height of the surface at the upper left corner. This value will likely " - "be modified unless \"Linear Borders\" is checked.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "z10")), - "Enter the height of the surface at the lower right corner. This value will likely " - "be modified unless \"Linear Borders\" is checked.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "z11")), - "Enter the height of the surface at the upper right corner. This value will likely " - "be modified unless \"Linear Borders\" is checked.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "linearborder")), - "Restrict the edges of the surface to a straight line. This will help match up " - "brush edges if you drop this surface into another map.", - ""); - // Bitmap tab - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file")), - "Type the name of an 8-bit bitmap image file, or click Browse to select an image " - "from a list of those available on your system.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file_browse")), - "Select a bitmap image file from a list of those available on your system.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_reload")), - "Reload the selected bitmap file after making changes in an external image editor.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_black")), - "Enter the value corresponding to color index 0 in the bitmap file. For gray scale " - "images, color 0 is normally black.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_white")), - "Enter the value corresponding to color index 255 in the bitmap file. For gray scale " - "images, color 255 is normally white.", - ""); - // Fixpoints tab - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_value")), - "Enter a value for the selected vertex. This value will not be adjusted when applying " - "a waveform or roughness to the surface. Unlock this vertex (so that it will be " - "adjusted normally) by clicking \"Free\". This vertex will influence vertices within " - "the \"Range affected\" of this vertex.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_range")), - "Enter the range away from the selected vertex that other vertices will be affected. " - "Use 0 if you don't want other vertices to be influenced by the currently selected " - "one. Note: this box is disabled if you've chosen the fractal generator, as it uses " - "a completely different method for determining values.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_rate")), - "Enter a rate of change for the surface affected by the fixed value. 0 gives a smooth " - "sinusoidal curve, values less than 0 give progressively sharper spikes, and values " - "greater than 0 take on a square shape. Values less than -30 or greater than 30 are " - "set to -30 and 30, respectively. Note that this entry will have no effect unless " - "you also specify a \"range affected\".", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_free")), - "Click this to free (unlock the value of) the currently selected vertex.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_freeall")), - "Click this to free (unlock the values of) all vertices.", - ""); - // Texture tab - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "texture1")), - "Enter the name of the texture or shader used for the surface faces.", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "texture2")), - "Enter the name of the texture or shader used for faces other than the surface. Under " - "normal circumstances this should be \"common/caulk\"", - ""); - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "texture3")), - "Enter the name of the texture or shader used for \"steep\" surface faces, where \"steep\" " - "is the angle specified below. If this entry is left blank or if the \"steep\" angle is 0, " - "all surface faces will use the texture specified by \"Surface\".", - ""); - - gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips), - GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "detail")), - "Check this box to use the detail content property on the generated brushes. Compile " - "times will be considerably shorter if the detail property is used, though the surface " - "will not block visibility at all. If you use the detail property, you should make sure " - "that \"common/caulk\" is used for the non-surface faces, or the polygon count will be " - "much higher than necessary.", - ""); +void create_tooltips(){ + tooltips = gtk_tooltips_new(); + + // Main + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "go" ) ), + "Accept all input and generate a surface in Q3Radiant", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "open" ) ), + "Open a previously saved GenSurf settings file.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "save" ) ), + "Save all settings to a file.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "defaults" ) ), + "Restore default values from DEFAULTS.SRF. If this file does not exist, GenSurf " + "initializes all input parameters to reasonable values. You can create your own " + "default surface by setting all parameters to your liking, then saving a settings " + "file as DEFAULTS.SRF with the Save As button.", + "" ); + + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "main_preview" ) ), + "View a wire-frame representation of the surface", + "" ); + + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "main_antialiasing" ) ), + "The lines in the preview window are antialiased for better quality", + "" ); + + // General tab + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( wave_radios[0] ), + "Builds a surface with alternating hills and valleys. Uses the general form Z=cos(X) " + "x sin(Y)", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( wave_radios[1] ), + "Builds a surface with ridges parallel to the vertical axis.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( wave_radios[2] ), + "Builds a surface with ridges parallel to the horizontal axis.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( wave_radios[3] ), + "Builds a map from a bitmap image representing a contour plot. Click the \"Bitmap\" " + "tab to select the image. GenSurf only supports 256-color (8 bit) " + "bitmaps. GenSurf will work with any 256-color bitmap, but gray scale bitmaps are a bit " + "more intuitive.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( wave_radios[4] ), + "Builds a random surface using the Plasma Cloud technique. Variance is controlled " + "by the Roughness input. To build a surface with completely random values not " + "dependent on neighboring vertices, use one of the other waveforms with 0 amplitude.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "wavelength" ) ), + "Enter the wavelength (distance between crests). NOTE: Wavelengths equal to the grid " + "size or 2 times the grid size will result in 0 amplitudes. For best results, the " + "wavelength value should be at least 4 times the grid size (extents divided by the " + "number of divisions", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "amplitude" ) ), + "Enter the height of hills/ridges.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "roughness" ) ), + "Enter the roughness value (noise) for the surface. For fractal surfaces, this value " + "is used as a variance in the fractal calculations.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "random" ) ), + "Seed value for the pseudo-random number generator.", + "" ); + // Extents tab + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "hmin" ) ), + "Minimum horizontal coordinate of the surface, i.e. X for a surface parallel to " + "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, " + "the extents (maximum-minimum values) in a given direction should be evenly " + "divisible by the number of divisions in that direction.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "hmax" ) ), + "Maximum horizontal coordinate of the surface, i.e. X for a surface parallel to " + "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, " + "the extents (maximum-minimum values) in a given direction should be evenly " + "divisible by the number of divisions in that direction.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "vmin" ) ), + "Minimum vertical coordinate of the surface, i.e. Y for a surface parallel to " + "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, " + "the extents (maximum-minimum values) in a given direction should be evenly " + "divisible by the number of divisions in that direction.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "vmax" ) ), + "Maximum vertical coordinate of the surface, i.e. Y for a surface parallel to " + "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, " + "the extents (maximum-minimum values) in a given direction should be evenly " + "divisible by the number of divisions in that direction.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "nh" ) ), + "Number of divisions in the horizontal direction. For best results, the extents " + "in a given direction should be evenly divisible by the number of divisions in " + "that direction.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "nv" ) ), + "Number of divisions in the vertical direction. For best results, the extents " + "in a given direction should be evenly divisible by the number of divisions in " + "that direction.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "use_patches" ) ), + "Produce one or more curved patches in the shape of your selected surface rather " + "than producing solid brushes. Depending on the size of your surface (and the " + "user's graphic detail settings, which you cannot control), curved surfaces will " + "be represented in the game by a very large number of polygons. Read the warnings " + "concerning curved surfaces on the GenSurf web page before using this feature.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "decimate" ) ), + "Use the slider to control the number of vertices discarded by GenSurf. For many " + "surfaces, you can produce roughly the same shape surface with a high decimation " + "value. This will generally result in a map with lower polygon counts (and better " + "in-game performance). However, this feature should NOT be used for large terrain " + "surfaces in Q3", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "z00" ) ), + "Enter the height of the surface at the lower left corner. This value will likely " + "be modified unless \"Linear Borders\" is checked.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "z01" ) ), + "Enter the height of the surface at the upper left corner. This value will likely " + "be modified unless \"Linear Borders\" is checked.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "z10" ) ), + "Enter the height of the surface at the lower right corner. This value will likely " + "be modified unless \"Linear Borders\" is checked.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "z11" ) ), + "Enter the height of the surface at the upper right corner. This value will likely " + "be modified unless \"Linear Borders\" is checked.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "linearborder" ) ), + "Restrict the edges of the surface to a straight line. This will help match up " + "brush edges if you drop this surface into another map.", + "" ); + // Bitmap tab + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_file" ) ), + "Type the name of an 8-bit bitmap image file, or click Browse to select an image " + "from a list of those available on your system.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_file_browse" ) ), + "Select a bitmap image file from a list of those available on your system.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_reload" ) ), + "Reload the selected bitmap file after making changes in an external image editor.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_black" ) ), + "Enter the value corresponding to color index 0 in the bitmap file. For gray scale " + "images, color 0 is normally black.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "bmp_white" ) ), + "Enter the value corresponding to color index 255 in the bitmap file. For gray scale " + "images, color 255 is normally white.", + "" ); + // Fixpoints tab + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "fix_value" ) ), + "Enter a value for the selected vertex. This value will not be adjusted when applying " + "a waveform or roughness to the surface. Unlock this vertex (so that it will be " + "adjusted normally) by clicking \"Free\". This vertex will influence vertices within " + "the \"Range affected\" of this vertex.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "fix_range" ) ), + "Enter the range away from the selected vertex that other vertices will be affected. " + "Use 0 if you don't want other vertices to be influenced by the currently selected " + "one. Note: this box is disabled if you've chosen the fractal generator, as it uses " + "a completely different method for determining values.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "fix_rate" ) ), + "Enter a rate of change for the surface affected by the fixed value. 0 gives a smooth " + "sinusoidal curve, values less than 0 give progressively sharper spikes, and values " + "greater than 0 take on a square shape. Values less than -30 or greater than 30 are " + "set to -30 and 30, respectively. Note that this entry will have no effect unless " + "you also specify a \"range affected\".", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "fix_free" ) ), + "Click this to free (unlock the value of) the currently selected vertex.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "fix_freeall" ) ), + "Click this to free (unlock the values of) all vertices.", + "" ); + // Texture tab + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "texture1" ) ), + "Enter the name of the texture or shader used for the surface faces.", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "texture2" ) ), + "Enter the name of the texture or shader used for faces other than the surface. Under " + "normal circumstances this should be \"common/caulk\"", + "" ); + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "texture3" ) ), + "Enter the name of the texture or shader used for \"steep\" surface faces, where \"steep\" " + "is the angle specified below. If this entry is left blank or if the \"steep\" angle is 0, " + "all surface faces will use the texture specified by \"Surface\".", + "" ); + + gtk_tooltips_set_tip( GTK_TOOLTIPS( tooltips ), + GTK_WIDGET( g_object_get_data( G_OBJECT( g_pWnd ), "detail" ) ), + "Check this box to use the detail content property on the generated brushes. Compile " + "times will be considerably shorter if the detail property is used, though the surface " + "will not block visibility at all. If you use the detail property, you should make sure " + "that \"common/caulk\" is used for the non-surface faces, or the polygon count will be " + "much higher than necessary.", + "" ); } // ============================================================================= // create main dialog -GtkWidget* create_main_dialog () -{ - GtkWidget *dlg, *vbox, *hbox, *hbox2, *button, *notebook, *frame, *table, *table2; - GtkWidget *check, *spin, *radio, *label, *entry, *scale; - GtkObject *adj; - GSList *group; - int i; - const char *games[] = { "Quake 2", "Half-Life", "SiN", "Heretic 2", "Kingpin", "Genesis3D", "Quake 3 Arena" }; - const char *waveforms[] = { "Alternating hill/valley", "Cylindrical left-to-right", "Cylindrical top-to-bottom", - "From bitmap", "Fractal" }; - const char *orientations[] = { "Ground surface", "Ceiling", "Wall facing 0", "Wall facing 90", - "Wall facing 180","Wall facing 270" }; - - g_pWnd = dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), gszCaption); - g_signal_connect (G_OBJECT (dlg), "delete_event", G_CALLBACK (main_close), NULL); - // g_signal_connect (G_OBJECT (dlg), "destroy", G_CALLBACK (gtk_widget_destroy), NULL); - gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (g_pRadiantWnd)); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_container_add (GTK_CONTAINER (dlg), hbox); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); - - notebook = gtk_notebook_new (); - gtk_widget_show (notebook); - gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0); - g_signal_connect (G_OBJECT (notebook), "switch_page", - G_CALLBACK (switch_page), NULL); - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); - g_object_set_data (G_OBJECT (dlg), "notebook", notebook); - - table = gtk_table_new (2, 2, FALSE); - gtk_widget_show (table); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("General")); - gtk_widget_show (label); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table, label); - - frame = gtk_frame_new (_("Game")); - gtk_widget_show (frame); - gtk_table_attach (GTK_TABLE (table), frame, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - - vbox = gtk_vbox_new (TRUE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - for (i = 0, group = NULL; i < NUMGAMES; i++) - { - radio = gtk_radio_button_new_with_label (group, games[i]); - gtk_widget_show (radio); - gtk_box_pack_start (GTK_BOX (vbox), radio, TRUE, TRUE, 0); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - game_radios[i] = radio; - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (general_game), GINT_TO_POINTER (i)); - } - - frame = gtk_frame_new (_("Waveform")); - gtk_widget_show (frame); - gtk_table_attach (GTK_TABLE (table), frame, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - - vbox = gtk_vbox_new (TRUE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - for (i = 0, group = NULL; i < 5; i++) - { - radio = gtk_radio_button_new_with_label (group, waveforms[i]); - gtk_widget_show (radio); - gtk_box_pack_start (GTK_BOX (vbox), radio, TRUE, TRUE, 0); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - wave_radios[i] = radio; - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (general_wave), GINT_TO_POINTER (i)); - } - - frame = gtk_frame_new (_("Orientation")); - gtk_widget_show (frame); - gtk_table_attach (GTK_TABLE (table), frame, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - - vbox = gtk_vbox_new (TRUE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - for (i = 0, group = NULL; i < 6; i++) - { - radio = gtk_radio_button_new_with_label (group, orientations[i]); - gtk_widget_show (radio); - gtk_box_pack_start (GTK_BOX (vbox), radio, TRUE, TRUE, 0); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - plane_radios[i] = radio; - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (general_plane), GINT_TO_POINTER (i)); - } - - table2 = gtk_table_new (4, 2, FALSE); - gtk_widget_show (table2); - gtk_table_set_row_spacings (GTK_TABLE (table2), 5); - gtk_table_set_col_spacings (GTK_TABLE (table2), 5); - gtk_table_attach (GTK_TABLE (table), table2, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - - label = gtk_label_new (_("Wavelength:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); - - label = gtk_label_new (_("Max. amplitude:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); - - label = gtk_label_new (_("Roughness:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 2, 3, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); - - label = gtk_label_new (_("Random seed:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 3, 4, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table2), entry, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "wavelength", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &WaveLength); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table2), entry, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "amplitude", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Amplitude); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table2), entry, 1, 2, 2, 3, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "roughness", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Roughness); - - adj = gtk_adjustment_new (1, 1, 32767, 1, 10, 10); - g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (general_random), NULL); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_table_attach (GTK_TABLE (table2), spin, 1, 2, 3, 4, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (spin, 60, -2); - g_object_set_data (G_OBJECT (dlg), "random", spin); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - label = gtk_label_new (_("Extents")); - gtk_widget_show (label); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); - - hbox2 = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox2); - gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, TRUE, 0); - - frame = gtk_frame_new (_("Extents")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (hbox2), frame, TRUE, TRUE, 0); - - table = gtk_table_new (3, 4, FALSE); - gtk_widget_show (table); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("X:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "hmin_text", label); - - label = gtk_label_new (_("X:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "hmax_text", label); - - label = gtk_label_new (_("Y:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "vmin_text", label); - - label = gtk_label_new (_("Y:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 2, 3, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "vmax_text", label); - - label = gtk_label_new (_("Lower-left")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - - label = gtk_label_new (_("Upper-right")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 3, 4, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "hmin", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Hll); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "hmax", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Hur); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "vmin", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Vll); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 2, 3, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "vmax", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Vur); - - frame = gtk_frame_new (_("Divisions")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (hbox2), frame, TRUE, TRUE, 0); - - table = gtk_table_new (2, 2, FALSE); - gtk_widget_show (table); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("X:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "nh_text", label); - - label = gtk_label_new (_("Y:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "nv_text", label); - - adj = gtk_adjustment_new (8, 1, MAX_ROWS, 1, 10, 10); - g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (extents_nhnv_spin), &NH); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_table_attach (GTK_TABLE (table), spin, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (spin, 60, -2); - g_object_set_data (G_OBJECT (dlg), "nh", spin); - - adj = gtk_adjustment_new (8, 1, MAX_ROWS, 1, 10, 10); - g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (extents_nhnv_spin), &NV); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_table_attach (GTK_TABLE (table), spin, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (spin, 60, -2); - g_object_set_data (G_OBJECT (dlg), "nv", spin); - - check = gtk_check_button_new_with_label ("Use Bezier patches"); - gtk_widget_show (check); - gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "use_patches", check); - g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (extents_use_patches), NULL); +GtkWidget* create_main_dialog(){ + GtkWidget *dlg, *vbox, *hbox, *hbox2, *button, *notebook, *frame, *table, *table2; + GtkWidget *check, *spin, *radio, *label, *entry, *scale; + GtkObject *adj; + GSList *group; + int i; + const char *games[] = { "Quake 2", "Half-Life", "SiN", "Heretic 2", "Kingpin", "Genesis3D", "Quake 3 Arena" }; + const char *waveforms[] = { "Alternating hill/valley", "Cylindrical left-to-right", "Cylindrical top-to-bottom", + "From bitmap", "Fractal" }; + const char *orientations[] = { "Ground surface", "Ceiling", "Wall facing 0", "Wall facing 90", + "Wall facing 180","Wall facing 270" }; + + g_pWnd = dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( dlg ), gszCaption ); + g_signal_connect( G_OBJECT( dlg ), "delete_event", G_CALLBACK( main_close ), NULL ); + // g_signal_connect (G_OBJECT (dlg), "destroy", G_CALLBACK (gtk_widget_destroy), NULL); + gtk_window_set_transient_for( GTK_WINDOW( dlg ), GTK_WINDOW( g_pRadiantWnd ) ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_container_add( GTK_CONTAINER( dlg ), hbox ); + gtk_container_set_border_width( GTK_CONTAINER( hbox ), 5 ); + + notebook = gtk_notebook_new(); + gtk_widget_show( notebook ); + gtk_box_pack_start( GTK_BOX( hbox ), notebook, TRUE, TRUE, 0 ); + g_signal_connect( G_OBJECT( notebook ), "switch_page", + G_CALLBACK( switch_page ), NULL ); + gtk_notebook_set_tab_pos( GTK_NOTEBOOK( notebook ), GTK_POS_TOP ); + g_object_set_data( G_OBJECT( dlg ), "notebook", notebook ); + + table = gtk_table_new( 2, 2, FALSE ); + gtk_widget_show( table ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "General" ) ); + gtk_widget_show( label ); + gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), table, label ); + + frame = gtk_frame_new( _( "Game" ) ); + gtk_widget_show( frame ); + gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + + vbox = gtk_vbox_new( TRUE, 5 ); + gtk_widget_show( vbox ); + gtk_container_add( GTK_CONTAINER( frame ), vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + for ( i = 0, group = NULL; i < NUMGAMES; i++ ) + { + radio = gtk_radio_button_new_with_label( group, games[i] ); + gtk_widget_show( radio ); + gtk_box_pack_start( GTK_BOX( vbox ), radio, TRUE, TRUE, 0 ); + group = gtk_radio_button_group( GTK_RADIO_BUTTON( radio ) ); + game_radios[i] = radio; + g_signal_connect( G_OBJECT( radio ), "toggled", G_CALLBACK( general_game ), GINT_TO_POINTER( i ) ); + } + + frame = gtk_frame_new( _( "Waveform" ) ); + gtk_widget_show( frame ); + gtk_table_attach( GTK_TABLE( table ), frame, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + + vbox = gtk_vbox_new( TRUE, 5 ); + gtk_widget_show( vbox ); + gtk_container_add( GTK_CONTAINER( frame ), vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + for ( i = 0, group = NULL; i < 5; i++ ) + { + radio = gtk_radio_button_new_with_label( group, waveforms[i] ); + gtk_widget_show( radio ); + gtk_box_pack_start( GTK_BOX( vbox ), radio, TRUE, TRUE, 0 ); + group = gtk_radio_button_group( GTK_RADIO_BUTTON( radio ) ); + wave_radios[i] = radio; + g_signal_connect( G_OBJECT( radio ), "toggled", G_CALLBACK( general_wave ), GINT_TO_POINTER( i ) ); + } + + frame = gtk_frame_new( _( "Orientation" ) ); + gtk_widget_show( frame ); + gtk_table_attach( GTK_TABLE( table ), frame, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + + vbox = gtk_vbox_new( TRUE, 5 ); + gtk_widget_show( vbox ); + gtk_container_add( GTK_CONTAINER( frame ), vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + for ( i = 0, group = NULL; i < 6; i++ ) + { + radio = gtk_radio_button_new_with_label( group, orientations[i] ); + gtk_widget_show( radio ); + gtk_box_pack_start( GTK_BOX( vbox ), radio, TRUE, TRUE, 0 ); + group = gtk_radio_button_group( GTK_RADIO_BUTTON( radio ) ); + plane_radios[i] = radio; + g_signal_connect( G_OBJECT( radio ), "toggled", G_CALLBACK( general_plane ), GINT_TO_POINTER( i ) ); + } + + table2 = gtk_table_new( 4, 2, FALSE ); + gtk_widget_show( table2 ); + gtk_table_set_row_spacings( GTK_TABLE( table2 ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table2 ), 5 ); + gtk_table_attach( GTK_TABLE( table ), table2, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + + label = gtk_label_new( _( "Wavelength:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table2 ), label, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT ); + + label = gtk_label_new( _( "Max. amplitude:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table2 ), label, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT ); + + label = gtk_label_new( _( "Roughness:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table2 ), label, 0, 1, 2, 3, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT ); + + label = gtk_label_new( _( "Random seed:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table2 ), label, 0, 1, 3, 4, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table2 ), entry, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "wavelength", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &WaveLength ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table2 ), entry, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "amplitude", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Amplitude ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table2 ), entry, 1, 2, 2, 3, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "roughness", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Roughness ); + + adj = gtk_adjustment_new( 1, 1, 32767, 1, 10, 10 ); + g_signal_connect( G_OBJECT( adj ), "value_changed", G_CALLBACK( general_random ), NULL ); + spin = gtk_spin_button_new( GTK_ADJUSTMENT( adj ), 1, 0 ); + gtk_widget_show( spin ); + gtk_table_attach( GTK_TABLE( table2 ), spin, 1, 2, 3, 4, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( spin, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "random", spin ); + + vbox = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + label = gtk_label_new( _( "Extents" ) ); + gtk_widget_show( label ); + gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), vbox, label ); + + hbox2 = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox2 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox2, FALSE, TRUE, 0 ); + + frame = gtk_frame_new( _( "Extents" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( hbox2 ), frame, TRUE, TRUE, 0 ); + + table = gtk_table_new( 3, 4, FALSE ); + gtk_widget_show( table ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "X:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "hmin_text", label ); + + label = gtk_label_new( _( "X:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "hmax_text", label ); + + label = gtk_label_new( _( "Y:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 2, 3, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "vmin_text", label ); + + label = gtk_label_new( _( "Y:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 2, 3, 2, 3, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "vmax_text", label ); + + label = gtk_label_new( _( "Lower-left" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + + label = gtk_label_new( _( "Upper-right" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 3, 4, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "hmin", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Hll ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 3, 4, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "hmax", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Hur ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 2, 3, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "vmin", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Vll ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 3, 4, 2, 3, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "vmax", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Vur ); + + frame = gtk_frame_new( _( "Divisions" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( hbox2 ), frame, TRUE, TRUE, 0 ); + + table = gtk_table_new( 2, 2, FALSE ); + gtk_widget_show( table ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "X:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "nh_text", label ); + + label = gtk_label_new( _( "Y:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "nv_text", label ); + + adj = gtk_adjustment_new( 8, 1, MAX_ROWS, 1, 10, 10 ); + g_signal_connect( G_OBJECT( adj ), "value_changed", G_CALLBACK( extents_nhnv_spin ), &NH ); + spin = gtk_spin_button_new( GTK_ADJUSTMENT( adj ), 1, 0 ); + gtk_widget_show( spin ); + gtk_table_attach( GTK_TABLE( table ), spin, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( spin, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "nh", spin ); + + adj = gtk_adjustment_new( 8, 1, MAX_ROWS, 1, 10, 10 ); + g_signal_connect( G_OBJECT( adj ), "value_changed", G_CALLBACK( extents_nhnv_spin ), &NV ); + spin = gtk_spin_button_new( GTK_ADJUSTMENT( adj ), 1, 0 ); + gtk_widget_show( spin ); + gtk_table_attach( GTK_TABLE( table ), spin, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( spin, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "nv", spin ); + + check = gtk_check_button_new_with_label( "Use Bezier patches" ); + gtk_widget_show( check ); + gtk_box_pack_start( GTK_BOX( vbox ), check, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "use_patches", check ); + g_signal_connect( G_OBJECT( check ), "toggled", G_CALLBACK( extents_use_patches ), NULL ); // ^Fishman - Snap to grid, replaced scroll bar with a texbox. - label = gtk_label_new (_("Snap to grid:")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); - gtk_object_set_data (GTK_OBJECT (dlg), "snap_text", label); - - adj = gtk_adjustment_new (8, 0, 256, 1, 10, 10); - g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (extents_snaptogrid_spin), &SP); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, TRUE, 0); - gtk_widget_set_usize (spin, 60, -2); - g_object_set_data (G_OBJECT (dlg), "sp", spin); + label = gtk_label_new( _( "Snap to grid:" ) ); + gtk_widget_show( label ); + gtk_box_pack_start( GTK_BOX( vbox ), label, FALSE, TRUE, 0 ); + gtk_object_set_data( GTK_OBJECT( dlg ), "snap_text", label ); + + adj = gtk_adjustment_new( 8, 0, 256, 1, 10, 10 ); + g_signal_connect( G_OBJECT( adj ), "value_changed", G_CALLBACK( extents_snaptogrid_spin ), &SP ); + spin = gtk_spin_button_new( GTK_ADJUSTMENT( adj ), 1, 0 ); + gtk_widget_show( spin ); + gtk_box_pack_start( GTK_BOX( vbox ), spin, FALSE, TRUE, 0 ); + gtk_widget_set_usize( spin, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "sp", spin ); // ^Fishman - End of Snap to grid code. - hbox2 = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox2); - gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, TRUE, 10); - - label = gtk_label_new (_("Decimate:")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0); - - adj = gtk_adjustment_new (0, 0, 110, 1, 10, 10); - g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (extents_decimate), NULL); - g_object_set_data (G_OBJECT (dlg), "decimate_adj", adj); - scale = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (scale); - gtk_box_pack_start (GTK_BOX (hbox2), scale, TRUE, TRUE, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_RIGHT); - gtk_scale_set_digits (GTK_SCALE (scale), 0); - g_object_set_data (G_OBJECT (dlg), "decimate", scale); - - frame = gtk_frame_new (_("Corner values")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); - - table = gtk_table_new (3, 4, FALSE); - gtk_widget_show (table); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("Upper-left:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - - label = gtk_label_new (_("Lower-left:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - - label = gtk_label_new (_("Upper-right:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - - label = gtk_label_new (_("Lower-right:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "z01", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Z01); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "z00", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Z00); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "z11", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Z11); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "z10", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Z10); - - check = gtk_check_button_new_with_label ("Linear borders"); - gtk_widget_show (check); - gtk_table_attach (GTK_TABLE (table), check, 0, 4, 2, 3, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "linearborder", check); - g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (extents_linearborder), NULL); - - vbox = gtk_vbox_new (FALSE, 10); - gtk_widget_show (vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - label = gtk_label_new (_("Bitmap")); - gtk_widget_show (label); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); - - label = gtk_label_new (""); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "bmp_note", label); - - table = gtk_table_new (2, 2, FALSE); - gtk_widget_show (table); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("Filename:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "bmp_text1", label); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "bmp_file", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (bitmap_file_entryfocusout), NULL); - - hbox2 = gtk_hbox_new (TRUE, 5); - gtk_widget_show (hbox2); - gtk_table_attach (GTK_TABLE (table), hbox2, 1, 2, 1, 2, - (GtkAttachOptions) (0), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - - button = gtk_button_new_with_label (_("Browse...")); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (hbox2), button, FALSE, FALSE, 0); - gtk_widget_set_usize (button, 60, -2); - g_object_set_data (G_OBJECT (dlg), "bmp_file_browse", button); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (bitmap_browse), NULL); - - button = gtk_button_new_with_label (_("Reload")); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (hbox2), button, FALSE, FALSE, 0); - gtk_widget_set_usize (button, 60, -2); - g_object_set_data (G_OBJECT (dlg), "bmp_reload", button); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (bitmap_reload), NULL); - - table = gtk_table_new (2, 2, TRUE); - gtk_widget_show (table); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("Map color 0 to:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), - (GtkAttachOptions) (GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "bmp_text2", label); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); - - label = gtk_label_new (_("Map color 255 to:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), - (GtkAttachOptions) (GTK_FILL), 0, 0); - g_object_set_data (G_OBJECT (dlg), "bmp_text3", label); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); - - hbox2 = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox2); - gtk_table_attach (GTK_TABLE (table), hbox2, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_box_pack_start (GTK_BOX (hbox2), entry, FALSE, FALSE, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "bmp_black", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &gbmp.black_value); - - hbox2 = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox2); - gtk_table_attach (GTK_TABLE (table), hbox2, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_box_pack_start (GTK_BOX (hbox2), entry, FALSE, FALSE, 0); - gtk_widget_set_usize (entry, 50, -2); - g_object_set_data (G_OBJECT (dlg), "bmp_white", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &gbmp.white_value); - - vbox = gtk_vbox_new (FALSE, 10); - gtk_widget_show (vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - label = gtk_label_new (_("Fix Points")); - gtk_widget_show (label); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); - - label = gtk_label_new (_("Click on a vertex in the lower half of the preview window,\n" - "then use the arrow keys or text box to assign a value.\n" - "Use Ctrl+Click to select multiple vertices/toggle a\n" - "selection. Use Shift+Click to select a range of vertices.\n\n" - "Click \"Free\" to unlock a vertex. Vertices within \"Range\n" - "affected\" will be influenced by this vertex.")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); - - table = gtk_table_new (3, 3, FALSE); - gtk_widget_show (table); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("Value:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - g_object_set_data (G_OBJECT (dlg), "fix_value_text", label); - - label = gtk_label_new (_("Range affected:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - g_object_set_data (G_OBJECT (dlg), "fix_range_text", label); - - label = gtk_label_new (_("Rate of change:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - g_object_set_data (G_OBJECT (dlg), "fix_rate_text", label); - - adj = gtk_adjustment_new (0, -65536, 65536, 1, 16, 16); - g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (fix_value_changed), NULL); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_table_attach (GTK_TABLE (table), spin, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_EXPAND), - (GtkAttachOptions) (GTK_EXPAND), 0, 0); - gtk_widget_set_usize (spin, 60, -2); - g_object_set_data (G_OBJECT (dlg), "fix_value", spin); - g_signal_connect (G_OBJECT (spin), "focus_out_event", G_CALLBACK (fix_value_entryfocusout), NULL); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "fix_range", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (fix_range_entryfocusout), NULL); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3, - (GtkAttachOptions) (GTK_EXPAND), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "fix_rate", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (fix_rate_entryfocusout), NULL); - - button = gtk_button_new_with_label (_("Free")); - gtk_widget_show (button); - gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_EXPAND), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (button, 60, -2); - g_object_set_data (G_OBJECT (dlg), "fix_free", button); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (fix_free), NULL); - - button = gtk_button_new_with_label (_("Free All")); - gtk_widget_show (button); - gtk_table_attach (GTK_TABLE (table), button, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_EXPAND), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (button, 60, -2); - g_object_set_data (G_OBJECT (dlg), "fix_freeall", button); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (fix_freeall), NULL); - - vbox = gtk_vbox_new (FALSE, 10); - gtk_widget_show (vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - label = gtk_label_new (_("Texture")); - gtk_widget_show (label); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); + hbox2 = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox2 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox2, FALSE, TRUE, 10 ); + + label = gtk_label_new( _( "Decimate:" ) ); + gtk_widget_show( label ); + gtk_box_pack_start( GTK_BOX( hbox2 ), label, FALSE, TRUE, 0 ); + + adj = gtk_adjustment_new( 0, 0, 110, 1, 10, 10 ); + g_signal_connect( G_OBJECT( adj ), "value_changed", G_CALLBACK( extents_decimate ), NULL ); + g_object_set_data( G_OBJECT( dlg ), "decimate_adj", adj ); + scale = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( scale ); + gtk_box_pack_start( GTK_BOX( hbox2 ), scale, TRUE, TRUE, 0 ); + gtk_scale_set_value_pos( GTK_SCALE( scale ), GTK_POS_RIGHT ); + gtk_scale_set_digits( GTK_SCALE( scale ), 0 ); + g_object_set_data( G_OBJECT( dlg ), "decimate", scale ); + + frame = gtk_frame_new( _( "Corner values" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, FALSE, TRUE, 0 ); + + table = gtk_table_new( 3, 4, FALSE ); + gtk_widget_show( table ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + gtk_container_add( GTK_CONTAINER( frame ), table ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "Upper-left:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + + label = gtk_label_new( _( "Lower-left:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + + label = gtk_label_new( _( "Upper-right:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + + label = gtk_label_new( _( "Lower-right:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "z01", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Z01 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "z00", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Z00 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 3, 4, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "z11", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Z11 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 3, 4, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "z10", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &Z10 ); + + check = gtk_check_button_new_with_label( "Linear borders" ); + gtk_widget_show( check ); + gtk_table_attach( GTK_TABLE( table ), check, 0, 4, 2, 3, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "linearborder", check ); + g_signal_connect( G_OBJECT( check ), "toggled", G_CALLBACK( extents_linearborder ), NULL ); + + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_widget_show( vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + label = gtk_label_new( _( "Bitmap" ) ); + gtk_widget_show( label ); + gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), vbox, label ); + + label = gtk_label_new( "" ); + gtk_widget_show( label ); + gtk_box_pack_start( GTK_BOX( vbox ), label, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_note", label ); + + table = gtk_table_new( 2, 2, FALSE ); + gtk_widget_show( table ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + gtk_box_pack_start( GTK_BOX( vbox ), table, FALSE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "Filename:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_text1", label ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_file", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( bitmap_file_entryfocusout ), NULL ); + + hbox2 = gtk_hbox_new( TRUE, 5 ); + gtk_widget_show( hbox2 ); + gtk_table_attach( GTK_TABLE( table ), hbox2, 1, 2, 1, 2, + (GtkAttachOptions) ( 0 ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + + button = gtk_button_new_with_label( _( "Browse..." ) ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( hbox2 ), button, FALSE, FALSE, 0 ); + gtk_widget_set_usize( button, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_file_browse", button ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( bitmap_browse ), NULL ); + + button = gtk_button_new_with_label( _( "Reload" ) ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( hbox2 ), button, FALSE, FALSE, 0 ); + gtk_widget_set_usize( button, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_reload", button ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( bitmap_reload ), NULL ); + + table = gtk_table_new( 2, 2, TRUE ); + gtk_widget_show( table ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + gtk_box_pack_start( GTK_BOX( vbox ), table, FALSE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "Map color 0 to:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL | GTK_EXPAND ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_text2", label ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT ); + + label = gtk_label_new( _( "Map color 255 to:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL | GTK_EXPAND ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_text3", label ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_RIGHT ); + + hbox2 = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox2 ); + gtk_table_attach( GTK_TABLE( table ), hbox2, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_box_pack_start( GTK_BOX( hbox2 ), entry, FALSE, FALSE, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_black", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &gbmp.black_value ); + + hbox2 = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox2 ); + gtk_table_attach( GTK_TABLE( table ), hbox2, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), 0, 0 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_box_pack_start( GTK_BOX( hbox2 ), entry, FALSE, FALSE, 0 ); + gtk_widget_set_usize( entry, 50, -2 ); + g_object_set_data( G_OBJECT( dlg ), "bmp_white", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( doublevariable_entryfocusout ), &gbmp.white_value ); + + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_widget_show( vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + label = gtk_label_new( _( "Fix Points" ) ); + gtk_widget_show( label ); + gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), vbox, label ); + + label = gtk_label_new( _( "Click on a vertex in the lower half of the preview window,\n" + "then use the arrow keys or text box to assign a value.\n" + "Use Ctrl+Click to select multiple vertices/toggle a\n" + "selection. Use Shift+Click to select a range of vertices.\n\n" + "Click \"Free\" to unlock a vertex. Vertices within \"Range\n" + "affected\" will be influenced by this vertex." ) ); + gtk_widget_show( label ); + gtk_box_pack_start( GTK_BOX( vbox ), label, FALSE, TRUE, 0 ); + + table = gtk_table_new( 3, 3, FALSE ); + gtk_widget_show( table ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + gtk_box_pack_start( GTK_BOX( vbox ), table, FALSE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "Value:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + g_object_set_data( G_OBJECT( dlg ), "fix_value_text", label ); + + label = gtk_label_new( _( "Range affected:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + g_object_set_data( G_OBJECT( dlg ), "fix_range_text", label ); + + label = gtk_label_new( _( "Rate of change:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 2, 3, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + g_object_set_data( G_OBJECT( dlg ), "fix_rate_text", label ); + + adj = gtk_adjustment_new( 0, -65536, 65536, 1, 16, 16 ); + g_signal_connect( G_OBJECT( adj ), "value_changed", G_CALLBACK( fix_value_changed ), NULL ); + spin = gtk_spin_button_new( GTK_ADJUSTMENT( adj ), 1, 0 ); + gtk_widget_show( spin ); + gtk_table_attach( GTK_TABLE( table ), spin, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND ), + (GtkAttachOptions) ( GTK_EXPAND ), 0, 0 ); + gtk_widget_set_usize( spin, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "fix_value", spin ); + g_signal_connect( G_OBJECT( spin ), "focus_out_event", G_CALLBACK( fix_value_entryfocusout ), NULL ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "fix_range", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( fix_range_entryfocusout ), NULL ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 2, 3, + (GtkAttachOptions) ( GTK_EXPAND ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "fix_rate", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( fix_rate_entryfocusout ), NULL ); + + button = gtk_button_new_with_label( _( "Free" ) ); + gtk_widget_show( button ); + gtk_table_attach( GTK_TABLE( table ), button, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( button, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "fix_free", button ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( fix_free ), NULL ); + + button = gtk_button_new_with_label( _( "Free All" ) ); + gtk_widget_show( button ); + gtk_table_attach( GTK_TABLE( table ), button, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( button, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "fix_freeall", button ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( fix_freeall ), NULL ); + + vbox = gtk_vbox_new( FALSE, 10 ); + gtk_widget_show( vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + label = gtk_label_new( _( "Texture" ) ); + gtk_widget_show( label ); + gtk_notebook_append_page( GTK_NOTEBOOK( notebook ), vbox, label ); // ^Fishman - Modified to add more labels and textboxes. - table = gtk_table_new (5, 2, FALSE); - gtk_widget_show (table); - gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("Surface:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - - label = gtk_label_new (_("Other:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - - label = gtk_label_new (_("Steep:")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "texture1", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK(texture_entryfocusout), GINT_TO_POINTER (0)); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "texture2", entry); - g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK(texture_entryfocusout), GINT_TO_POINTER (1)); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "texture3", entry); - - hbox2 = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox2); - gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, TRUE, 0); - - label = gtk_label_new (_("\"Steep\" angle:")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0); - - adj = gtk_adjustment_new (60, 0, 90, 1, 10, 10); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_box_pack_start (GTK_BOX (hbox2), spin, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "tex_slant", spin); - - table = gtk_table_new (2, 4, TRUE); - gtk_widget_show (table); - gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - label = gtk_label_new (_("Offset ")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 0, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - - label = gtk_label_new (_("Scale ")); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (table), label, 2, 4, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "texoffsetx", entry); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "texoffsety", entry); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "texscalex", entry); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (GTK_FILL), 0, 0); - gtk_widget_set_usize (entry, 60, -2); - g_object_set_data (G_OBJECT (dlg), "texscaley", entry); - - - - check = gtk_check_button_new_with_label (_("Use detail brushes")); - gtk_widget_show (check); - gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "detail", check); - g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (texture_detail), NULL); - - check = gtk_check_button_new_with_label (_("Detail hint brushes")); - gtk_widget_show (check); - gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "hint", check); - g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (texture_hint), NULL); + table = gtk_table_new( 5, 2, FALSE ); + gtk_widget_show( table ); + gtk_box_pack_start( GTK_BOX( vbox ), table, FALSE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "Surface:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + + label = gtk_label_new( _( "Other:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + + label = gtk_label_new( _( "Steep:" ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 1, 2, 3, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "texture1", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( texture_entryfocusout ), GINT_TO_POINTER( 0 ) ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "texture2", entry ); + g_signal_connect( G_OBJECT( entry ), "focus_out_event", G_CALLBACK( texture_entryfocusout ), GINT_TO_POINTER( 1 ) ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 2, 3, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "texture3", entry ); + + hbox2 = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox2 ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox2, FALSE, TRUE, 0 ); + + label = gtk_label_new( _( "\"Steep\" angle:" ) ); + gtk_widget_show( label ); + gtk_box_pack_start( GTK_BOX( hbox2 ), label, FALSE, TRUE, 0 ); + + adj = gtk_adjustment_new( 60, 0, 90, 1, 10, 10 ); + spin = gtk_spin_button_new( GTK_ADJUSTMENT( adj ), 1, 0 ); + gtk_widget_show( spin ); + gtk_box_pack_start( GTK_BOX( hbox2 ), spin, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "tex_slant", spin ); + + table = gtk_table_new( 2, 4, TRUE ); + gtk_widget_show( table ); + gtk_box_pack_start( GTK_BOX( vbox ), table, FALSE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + label = gtk_label_new( _( "Offset " ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 0, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + + label = gtk_label_new( _( "Scale " ) ); + gtk_widget_show( label ); + gtk_table_attach( GTK_TABLE( table ), label, 2, 4, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "texoffsetx", entry ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "texoffsety", entry ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "texscalex", entry ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_table_attach( GTK_TABLE( table ), entry, 3, 4, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( GTK_FILL ), 0, 0 ); + gtk_widget_set_usize( entry, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "texscaley", entry ); + + + + check = gtk_check_button_new_with_label( _( "Use detail brushes" ) ); + gtk_widget_show( check ); + gtk_box_pack_start( GTK_BOX( vbox ), check, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "detail", check ); + g_signal_connect( G_OBJECT( check ), "toggled", G_CALLBACK( texture_detail ), NULL ); + + check = gtk_check_button_new_with_label( _( "Detail hint brushes" ) ); + gtk_widget_show( check ); + gtk_box_pack_start( GTK_BOX( vbox ), check, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "hint", check ); + g_signal_connect( G_OBJECT( check ), "toggled", G_CALLBACK( texture_hint ), NULL ); // ^Fishman - Add terrain key to func_group. - check = gtk_check_button_new_with_label (_("Add terrain key")); - gtk_widget_show (check); - gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "terrain_ent", check); - g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (texture_terrainent), NULL); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, TRUE, 0); - - button = gtk_button_new_with_label (_("OK")); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0); - gtk_widget_set_usize (button, 60, -2); - g_object_set_data (G_OBJECT (dlg), "go", button); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_go), NULL); - - label = gtk_label_new (_("Settings:")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); - - button = gtk_button_new_with_label ("Open..."); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "open", button); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_open), NULL); - - button = gtk_button_new_with_label (_("Save as...")); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "save", button); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_save), NULL); - - button = gtk_button_new_with_label (_("Defaults")); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "defaults", button); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_defaults), NULL); - - button = gtk_button_new_with_label (_("About...")); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0); - g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_about), NULL); - - check = gtk_check_button_new_with_label (_("Preview")); - gtk_widget_show (check); - gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0); - g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (main_preview), NULL); - g_object_set_data (G_OBJECT (dlg), "main_preview", check); + check = gtk_check_button_new_with_label( _( "Add terrain key" ) ); + gtk_widget_show( check ); + gtk_box_pack_start( GTK_BOX( vbox ), check, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "terrain_ent", check ); + g_signal_connect( G_OBJECT( check ), "toggled", G_CALLBACK( texture_terrainent ), NULL ); + + vbox = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox ); + gtk_box_pack_start( GTK_BOX( hbox ), vbox, FALSE, TRUE, 0 ); + + button = gtk_button_new_with_label( _( "OK" ) ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, TRUE, 0 ); + gtk_widget_set_usize( button, 60, -2 ); + g_object_set_data( G_OBJECT( dlg ), "go", button ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( main_go ), NULL ); + + label = gtk_label_new( _( "Settings:" ) ); + gtk_widget_show( label ); + gtk_box_pack_start( GTK_BOX( vbox ), label, FALSE, TRUE, 0 ); + + button = gtk_button_new_with_label( "Open..." ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "open", button ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( main_open ), NULL ); + + button = gtk_button_new_with_label( _( "Save as..." ) ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "save", button ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( main_save ), NULL ); + + button = gtk_button_new_with_label( _( "Defaults" ) ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "defaults", button ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( main_defaults ), NULL ); + + button = gtk_button_new_with_label( _( "About..." ) ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, TRUE, 0 ); + g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( main_about ), NULL ); + + check = gtk_check_button_new_with_label( _( "Preview" ) ); + gtk_widget_show( check ); + gtk_box_pack_start( GTK_BOX( vbox ), check, FALSE, TRUE, 0 ); + g_signal_connect( G_OBJECT( check ), "toggled", G_CALLBACK( main_preview ), NULL ); + g_object_set_data( G_OBJECT( dlg ), "main_preview", check ); // ^Fishman - Antializing for the preview window. - check = gtk_check_button_new_with_label (_("Antialised lines")); - gtk_widget_show (check); - gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0); - g_object_set_data (G_OBJECT (dlg), "main_antialiasing", check); - g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (main_antialiasing), NULL); + check = gtk_check_button_new_with_label( _( "Antialised lines" ) ); + gtk_widget_show( check ); + gtk_box_pack_start( GTK_BOX( vbox ), check, FALSE, TRUE, 0 ); + g_object_set_data( G_OBJECT( dlg ), "main_antialiasing", check ); + g_signal_connect( G_OBJECT( check ), "toggled", G_CALLBACK( main_antialiasing ), NULL ); - for (i = 0; i < 5; i++) - SetDlgValues (i); + for ( i = 0; i < 5; i++ ) + SetDlgValues( i ); - CreateViewWindow (); + CreateViewWindow(); - create_tooltips(); + create_tooltips(); - FirstPassComplete = 1; + FirstPassComplete = 1; - return dlg; + return dlg; } @@ -2241,106 +2206,103 @@ GtkWidget* create_main_dialog () HWND hwndDisplay = (HWND)NULL; HWND ghwndTab = (HWND)NULL; -int iTab=0; +int iTab = 0; RECT rcTab; FILE *ftex; char GenSurfURL[40] = {"http://tarot.telefragged.com/gensurf"}; -char GenSurfBoard[40]={"http://tarot.telefragged.com/board"}; +char GenSurfBoard[40] = {"http://tarot.telefragged.com/board"}; /* -* AboutDlgProc - processes messages for the about dialog. -*/ + * AboutDlgProc - processes messages for the about dialog. + */ -qboolean CALLBACK AboutDlgProc( HWND hwnd, unsigned msg, UINT wparam, LONG lparam ) -{ - char szText[256]; +qboolean CALLBACK AboutDlgProc( HWND hwnd, unsigned msg, UINT wparam, LONG lparam ){ + char szText[256]; DRAWITEMSTRUCT *dis; - HDC hdc; - HPEN hpen; - HWND hwndURL; - RECT rc; - SIZE size; + HDC hdc; + HPEN hpen; + HWND hwndURL; + RECT rc; + SIZE size; - lparam = lparam; /* turn off warning */ + lparam = lparam; /* turn off warning */ - switch( msg ) { + switch ( msg ) { case WM_INITDIALOG: - strcpy(szText,"About " ); - strcat(szText,gszCaption); - SetWindowText(hwnd,gszCaption); - SetDlgItemText(hwnd,DLG_ABOUT_APP,szText); + strcpy( szText,"About " ); + strcat( szText,gszCaption ); + SetWindowText( hwnd,gszCaption ); + SetDlgItemText( hwnd,DLG_ABOUT_APP,szText ); /* Application icon: */ SendDlgItemMessage( hwnd, DLG_ABOUT_ICON, - STM_SETICON, (WPARAM)(HICON)LoadIcon(ghInst,"GENSURF"), - (LPARAM) NULL); - - hwndURL = GetDlgItem(hwnd,DLG_ABOUT_URL); - hdc = GetDC(hwndURL); - GetTextExtentPoint(hdc,GenSurfURL,strlen(GenSurfURL),&size); - ReleaseDC(hwndURL,hdc); - GetWindowRect(hwndURL,&rc); - SetWindowPos(hwndURL,(HWND)NULL,0,0,size.cx,size.cy+2, - SWP_NOMOVE | SWP_NOZORDER); - - hwndURL = GetDlgItem(hwnd,DLG_ABOUT_BOARD); - hdc = GetDC(hwndURL); - GetTextExtentPoint(hdc,GenSurfBoard,strlen(GenSurfBoard),&size); - ReleaseDC(hwndURL,hdc); - GetWindowRect(hwndURL,&rc); - SetWindowPos(hwndURL,(HWND)NULL,0,0,size.cx,size.cy+2, - SWP_NOMOVE | SWP_NOZORDER); + STM_SETICON, (WPARAM)(HICON)LoadIcon( ghInst,"GENSURF" ), + (LPARAM) NULL ); + + hwndURL = GetDlgItem( hwnd,DLG_ABOUT_URL ); + hdc = GetDC( hwndURL ); + GetTextExtentPoint( hdc,GenSurfURL,strlen( GenSurfURL ),&size ); + ReleaseDC( hwndURL,hdc ); + GetWindowRect( hwndURL,&rc ); + SetWindowPos( hwndURL,(HWND)NULL,0,0,size.cx,size.cy + 2, + SWP_NOMOVE | SWP_NOZORDER ); + + hwndURL = GetDlgItem( hwnd,DLG_ABOUT_BOARD ); + hdc = GetDC( hwndURL ); + GetTextExtentPoint( hdc,GenSurfBoard,strlen( GenSurfBoard ),&size ); + ReleaseDC( hwndURL,hdc ); + GetWindowRect( hwndURL,&rc ); + SetWindowPos( hwndURL,(HWND)NULL,0,0,size.cx,size.cy + 2, + SWP_NOMOVE | SWP_NOZORDER ); return TRUE; case WM_COMMAND: - switch(LOWORD(wparam)) + switch ( LOWORD( wparam ) ) { case DLG_ABOUT_URL: - HTTP(GenSurfURL); + HTTP( GenSurfURL ); break; case DLG_ABOUT_BOARD: - HTTP(GenSurfBoard); + HTTP( GenSurfBoard ); break; case IDOK: - EndDialog(hwnd,1); + EndDialog( hwnd,1 ); return TRUE; } break; case WM_DRAWITEM: - if(wparam == DLG_ABOUT_URL) - { + if ( wparam == DLG_ABOUT_URL ) { dis = (LPDRAWITEMSTRUCT)lparam; - SetTextColor(dis->hDC,RGB(0,0,255)); - TextOut(dis->hDC,0,0,GenSurfURL,strlen(GenSurfURL)); - GetWindowRect(dis->hwndItem,&rc); - GetTextExtentPoint(dis->hDC,GenSurfURL,strlen(GenSurfURL),&size); - hpen = CreatePen(PS_SOLID,0,RGB(0,0,255)); - SelectObject(dis->hDC,hpen); - MoveToEx(dis->hDC,0,size.cy,NULL); - LineTo(dis->hDC,size.cx,size.cy); - SelectObject(dis->hDC,GetStockObject(BLACK_PEN)); - DeleteObject(hpen); + SetTextColor( dis->hDC,RGB( 0,0,255 ) ); + TextOut( dis->hDC,0,0,GenSurfURL,strlen( GenSurfURL ) ); + GetWindowRect( dis->hwndItem,&rc ); + GetTextExtentPoint( dis->hDC,GenSurfURL,strlen( GenSurfURL ),&size ); + hpen = CreatePen( PS_SOLID,0,RGB( 0,0,255 ) ); + SelectObject( dis->hDC,hpen ); + MoveToEx( dis->hDC,0,size.cy,NULL ); + LineTo( dis->hDC,size.cx,size.cy ); + SelectObject( dis->hDC,GetStockObject( BLACK_PEN ) ); + DeleteObject( hpen ); } - else if(wparam==DLG_ABOUT_BOARD) - { + else if ( wparam == DLG_ABOUT_BOARD ) { dis = (LPDRAWITEMSTRUCT)lparam; - SetTextColor(dis->hDC,RGB(0,0,255)); - TextOut(dis->hDC,0,0,GenSurfBoard,strlen(GenSurfBoard)); - GetWindowRect(dis->hwndItem,&rc); - GetTextExtentPoint(dis->hDC,GenSurfBoard,strlen(GenSurfBoard),&size); - hpen = CreatePen(PS_SOLID,0,RGB(0,0,255)); - SelectObject(dis->hDC,hpen); - MoveToEx(dis->hDC,0,size.cy,NULL); - LineTo(dis->hDC,size.cx,size.cy); - SelectObject(dis->hDC,GetStockObject(BLACK_PEN)); - DeleteObject(hpen); + SetTextColor( dis->hDC,RGB( 0,0,255 ) ); + TextOut( dis->hDC,0,0,GenSurfBoard,strlen( GenSurfBoard ) ); + GetWindowRect( dis->hwndItem,&rc ); + GetTextExtentPoint( dis->hDC,GenSurfBoard,strlen( GenSurfBoard ),&size ); + hpen = CreatePen( PS_SOLID,0,RGB( 0,0,255 ) ); + SelectObject( dis->hDC,hpen ); + MoveToEx( dis->hDC,0,size.cy,NULL ); + LineTo( dis->hDC,size.cx,size.cy ); + SelectObject( dis->hDC,GetStockObject( BLACK_PEN ) ); + DeleteObject( hpen ); } break; case WM_CLOSE: - EndDialog(hwnd,1); + EndDialog( hwnd,1 ); return TRUE; default: @@ -2350,13 +2312,11 @@ qboolean CALLBACK AboutDlgProc( HWND hwnd, unsigned msg, UINT wparam, LONG lpara } /* AboutDlgProc */ -void About() -{ - if( DialogBox( ghInst,"About", ghwnd_main, (DLGPROC)AboutDlgProc ) < 0) - { +void About(){ + if ( DialogBox( ghInst,"About", ghwnd_main, (DLGPROC)AboutDlgProc ) < 0 ) { char Text[256]; - sprintf(Text,"In About(), GetLastError()=0x%08x",GetLastError()); - MessageBox(ghwnd_main,Text,"GenSurf",MB_ICONEXCLAMATION); + sprintf( Text,"In About(), GetLastError()=0x%08x",GetLastError() ); + MessageBox( ghwnd_main,Text,"GenSurf",MB_ICONEXCLAMATION ); } } diff --git a/contrib/gtkgensurf/gendlgs.h b/contrib/gtkgensurf/gendlgs.h index dd954678..d4df4374 100644 --- a/contrib/gtkgensurf/gendlgs.h +++ b/contrib/gtkgensurf/gendlgs.h @@ -1,151 +1,151 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 + */ -#define DLG_PLANE_XY0 100 -#define DLG_PLANE_XY1 101 -#define DLG_PLANE_YZ0 102 -#define DLG_PLANE_XZ0 103 -#define DLG_PLANE_YZ1 104 -#define DLG_PLANE_XZ1 105 -#define DLG_WAVE_01 106 -#define DLG_WAVE_02 107 -#define DLG_WAVE_03 108 -#define DLG_WAVE_04 109 -#define DLG_WAVE_05 110 -#define DLG_WAVE_06 111 -#define DLG_LAMBDA 112 -#define DLG_LAMBDA_TEXT 113 -#define DLG_AMP 114 -#define DLG_AMP_TEXT 115 -#define DLG_ROUGH 116 -#define DLG_ROUGH_TEXT 117 -#define DLG_LINEARBORDER 118 -#define DLG_FILE 119 -#define DLG_FILE_BROWSE 120 -#define DLG_PREVIEW 121 -#define DLG_GO 122 -#define DLG_ABOUT 123 -#define DLG_NH_TEXT 124 -#define DLG_NH 125 -#define DLG_NH_SPIN 126 -#define DLG_NV_TEXT 127 -#define DLG_NV 128 -#define DLG_NV_SPIN 129 -#define DLG_HMIN_TEXT 130 -#define DLG_HMIN 131 -#define DLG_HMAX_TEXT 132 -#define DLG_HMAX 133 -#define DLG_VMIN_TEXT 134 -#define DLG_VMIN 135 -#define DLG_VMAX_TEXT 136 -#define DLG_VMAX 137 -#define DLG_Z00_TEXT 138 -#define DLG_Z00 139 -#define DLG_Z01_TEXT 140 -#define DLG_Z01 141 -#define DLG_Z10_TEXT 142 -#define DLG_Z10 143 -#define DLG_Z11_TEXT 144 -#define DLG_Z11 145 -#define DLG_TEXTURE 146 -#define DLG_SKYBOX 147 -#define DLG_AUTOOVERWRITE 148 -#define DLG_DETAIL 149 -#define DLG_ARGHRAD2 150 -#define DLG_ARGHRAD2_SPIN 151 -#define DLG_APPEND 152 -#define DLG_REFRESH 153 -#define DLG_TEXOFFSETX 154 -#define DLG_TEXOFFSETY 155 -#define DLG_TEXSCALEX 156 -#define DLG_TEXSCALEY 157 -#define DLG_FIXPOINTS 158 -#define DLG_TEXTURE_BROWSE 159 -#define DLG_AZIMUTH 162 -#define DLG_AZIMUTH_SPIN 163 -#define DLG_ELEVATION 164 -#define DLG_ELEVATION_SPIN 165 -#define DLG_RANDOMSEED 166 -#define DLG_RANDOMSEED_SPIN 167 -#define DLG_BITMAP 168 -#define DLG_SAVE 169 -#define DLG_OPEN 170 -#define DLG_TAB 171 -#define DLG_TEXTURE2 172 -#define DLG_TEXTURE2_BROWSE 173 -#define DLG_LADDER 174 -#define DLG_ARGHRAD2_TEXT 175 -#define DLG_FILE_TEXT 176 -#define DLG_DECIMATE 177 -#define DLG_DECIMATE_TEXT 178 -#define DLG_HIDEBACKFACES 179 -#define DLG_DEFAULTS 180 -#define DLG_ABOUT_APP 200 -#define DLG_ABOUT_ICON 201 -#define DLG_BMP_FILE 202 -#define DLG_BMP_FILE_BROWSE 203 -#define DLG_BMP_BLACK 204 -#define DLG_BMP_WHITE 205 -#define DLG_BMP_TEXT1 206 -#define DLG_BMP_TEXT2 207 -#define DLG_BMP_TEXT3 208 -#define DLG_BMP_NOTE 209 -#define DLG_BMP_RELOAD 210 -#define DLG_ABOUT_URL 211 -#define DLG_ABOUT_BOARD 212 -#define DLG_FIX_FREE 300 -#define DLG_FIX_FREEALL 301 -#define DLG_FIX_VALUE_TEXT 302 -#define DLG_FIX_VALUE 303 -#define DLG_FIX_VALUE_SPIN 304 -#define DLG_FIX_DONE 305 -#define DLG_FIX_RANGE_TEXT 306 -#define DLG_FIX_RANGE 307 -#define DLG_FIX_NOTE 308 -#define DLG_FIX_RATE_TEXT 309 -#define DLG_FIX_RATE 310 -#define DLG_USE_PATCHES 311 -#define DLG_DECIMATE_LABEL 312 -#define DLG_HINT 350 -#define DLG_GAME_00 400 -#define DLG_GAME_01 401 -#define DLG_GAME_02 402 -#define DLG_GAME_03 403 -#define DLG_GAME_04 404 -#define DLG_GAME_05 405 -#define DLG_GAME_06 406 -#define DLG_GAME_07 407 -#define DLG_GAME_08 408 -#define DLG_GAME_09 409 -#define DLG_TEX_USEPAK 420 -#define DLG_TEX_PAK_TEXT 421 -#define DLG_TEX_PAKFILE 422 -#define DLG_TEX_PAK_BROWSE 423 -#define DLG_TEX_LIST1 424 -#define DLG_TEX_LIST2 425 -#define DLG_TEX_LIST3 426 -#define DLG_TEXTURE3 427 -#define DLG_TEXTURE3_BROWSE 428 -#define DLG_TEX_SLANT_TEXT 429 -#define DLG_TEX_SLANT 430 -#define DLG_TEX_SLANT_SPIN 431 -#define DLG_EXCEL_FUNC 500 -#define DLG_EXCEL_FUNC_TEXT 501 -#define DLG_PREVIEW_ANTIALIASING 502 // ^Fishman - Antializing for the preview window. -#define DLG_SNAP_TO_GRID 503 // Hydra : snap to grid +#define DLG_PLANE_XY0 100 +#define DLG_PLANE_XY1 101 +#define DLG_PLANE_YZ0 102 +#define DLG_PLANE_XZ0 103 +#define DLG_PLANE_YZ1 104 +#define DLG_PLANE_XZ1 105 +#define DLG_WAVE_01 106 +#define DLG_WAVE_02 107 +#define DLG_WAVE_03 108 +#define DLG_WAVE_04 109 +#define DLG_WAVE_05 110 +#define DLG_WAVE_06 111 +#define DLG_LAMBDA 112 +#define DLG_LAMBDA_TEXT 113 +#define DLG_AMP 114 +#define DLG_AMP_TEXT 115 +#define DLG_ROUGH 116 +#define DLG_ROUGH_TEXT 117 +#define DLG_LINEARBORDER 118 +#define DLG_FILE 119 +#define DLG_FILE_BROWSE 120 +#define DLG_PREVIEW 121 +#define DLG_GO 122 +#define DLG_ABOUT 123 +#define DLG_NH_TEXT 124 +#define DLG_NH 125 +#define DLG_NH_SPIN 126 +#define DLG_NV_TEXT 127 +#define DLG_NV 128 +#define DLG_NV_SPIN 129 +#define DLG_HMIN_TEXT 130 +#define DLG_HMIN 131 +#define DLG_HMAX_TEXT 132 +#define DLG_HMAX 133 +#define DLG_VMIN_TEXT 134 +#define DLG_VMIN 135 +#define DLG_VMAX_TEXT 136 +#define DLG_VMAX 137 +#define DLG_Z00_TEXT 138 +#define DLG_Z00 139 +#define DLG_Z01_TEXT 140 +#define DLG_Z01 141 +#define DLG_Z10_TEXT 142 +#define DLG_Z10 143 +#define DLG_Z11_TEXT 144 +#define DLG_Z11 145 +#define DLG_TEXTURE 146 +#define DLG_SKYBOX 147 +#define DLG_AUTOOVERWRITE 148 +#define DLG_DETAIL 149 +#define DLG_ARGHRAD2 150 +#define DLG_ARGHRAD2_SPIN 151 +#define DLG_APPEND 152 +#define DLG_REFRESH 153 +#define DLG_TEXOFFSETX 154 +#define DLG_TEXOFFSETY 155 +#define DLG_TEXSCALEX 156 +#define DLG_TEXSCALEY 157 +#define DLG_FIXPOINTS 158 +#define DLG_TEXTURE_BROWSE 159 +#define DLG_AZIMUTH 162 +#define DLG_AZIMUTH_SPIN 163 +#define DLG_ELEVATION 164 +#define DLG_ELEVATION_SPIN 165 +#define DLG_RANDOMSEED 166 +#define DLG_RANDOMSEED_SPIN 167 +#define DLG_BITMAP 168 +#define DLG_SAVE 169 +#define DLG_OPEN 170 +#define DLG_TAB 171 +#define DLG_TEXTURE2 172 +#define DLG_TEXTURE2_BROWSE 173 +#define DLG_LADDER 174 +#define DLG_ARGHRAD2_TEXT 175 +#define DLG_FILE_TEXT 176 +#define DLG_DECIMATE 177 +#define DLG_DECIMATE_TEXT 178 +#define DLG_HIDEBACKFACES 179 +#define DLG_DEFAULTS 180 +#define DLG_ABOUT_APP 200 +#define DLG_ABOUT_ICON 201 +#define DLG_BMP_FILE 202 +#define DLG_BMP_FILE_BROWSE 203 +#define DLG_BMP_BLACK 204 +#define DLG_BMP_WHITE 205 +#define DLG_BMP_TEXT1 206 +#define DLG_BMP_TEXT2 207 +#define DLG_BMP_TEXT3 208 +#define DLG_BMP_NOTE 209 +#define DLG_BMP_RELOAD 210 +#define DLG_ABOUT_URL 211 +#define DLG_ABOUT_BOARD 212 +#define DLG_FIX_FREE 300 +#define DLG_FIX_FREEALL 301 +#define DLG_FIX_VALUE_TEXT 302 +#define DLG_FIX_VALUE 303 +#define DLG_FIX_VALUE_SPIN 304 +#define DLG_FIX_DONE 305 +#define DLG_FIX_RANGE_TEXT 306 +#define DLG_FIX_RANGE 307 +#define DLG_FIX_NOTE 308 +#define DLG_FIX_RATE_TEXT 309 +#define DLG_FIX_RATE 310 +#define DLG_USE_PATCHES 311 +#define DLG_DECIMATE_LABEL 312 +#define DLG_HINT 350 +#define DLG_GAME_00 400 +#define DLG_GAME_01 401 +#define DLG_GAME_02 402 +#define DLG_GAME_03 403 +#define DLG_GAME_04 404 +#define DLG_GAME_05 405 +#define DLG_GAME_06 406 +#define DLG_GAME_07 407 +#define DLG_GAME_08 408 +#define DLG_GAME_09 409 +#define DLG_TEX_USEPAK 420 +#define DLG_TEX_PAK_TEXT 421 +#define DLG_TEX_PAKFILE 422 +#define DLG_TEX_PAK_BROWSE 423 +#define DLG_TEX_LIST1 424 +#define DLG_TEX_LIST2 425 +#define DLG_TEX_LIST3 426 +#define DLG_TEXTURE3 427 +#define DLG_TEXTURE3_BROWSE 428 +#define DLG_TEX_SLANT_TEXT 429 +#define DLG_TEX_SLANT 430 +#define DLG_TEX_SLANT_SPIN 431 +#define DLG_EXCEL_FUNC 500 +#define DLG_EXCEL_FUNC_TEXT 501 +#define DLG_PREVIEW_ANTIALIASING 502 // ^Fishman - Antializing for the preview window. +#define DLG_SNAP_TO_GRID 503 // Hydra : snap to grid diff --git a/contrib/gtkgensurf/genmap.cpp b/contrib/gtkgensurf/genmap.cpp index 6c04ef60..8ed89353 100644 --- a/contrib/gtkgensurf/genmap.cpp +++ b/contrib/gtkgensurf/genmap.cpp @@ -1,2056 +1,2105 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 #include #include #include "gensurf.h" -double xmin,xmax,ymin,ymax,zmin,zmax; -double backface; +double xmin,xmax,ymin,ymax,zmin,zmax; +double backface; extern double dh, dv; FILE *fmap; -XYZ xyz[MAX_ROWS+1][MAX_ROWS+1]; -int contents; -int surface[3]; -LPVOID h_func_group; -LPVOID terrainkey; // ^Fishman - Add terrain key to func_group. +XYZ xyz[MAX_ROWS + 1][MAX_ROWS + 1]; +int contents; +int surface[3]; +LPVOID h_func_group; +LPVOID terrainkey; // ^Fishman - Add terrain key to func_group. //============================================================= // Hydra : snap-to-grid begin -double CalculateSnapValue(double value) -{ - long snapvalue; +double CalculateSnapValue( double value ){ + long snapvalue; - // simple uncomplicated snapping, rounding both UP and DOWN to the nearest + // simple uncomplicated snapping, rounding both UP and DOWN to the nearest // grid unit. - if (SnapToGrid >0) - { + if ( SnapToGrid > 0 ) { snapvalue = (int)value / SnapToGrid; - if ((long)value % SnapToGrid < (SnapToGrid / 2)) // Snap Downwards if less than halfway between to grid units - value = snapvalue * SnapToGrid; - else // Snap Upwards if more than halfway between to grid units - value = (snapvalue+1) * SnapToGrid; + if ( (long)value % SnapToGrid < ( SnapToGrid / 2 ) ) { // Snap Downwards if less than halfway between to grid units + value = snapvalue * SnapToGrid; + } + else{ // Snap Upwards if more than halfway between to grid units + value = ( snapvalue + 1 ) * SnapToGrid; + } } - return value; + return value; } // Hydra : snap-to-grid end //============================================================= -bool ValidSurface() -{ - if(WaveType == WAVE_BITMAP && !gbmp.colors) return FALSE; - if(NH < 1) return FALSE; - if(NH > MAX_ROWS) return FALSE; - if(NV < 1) return FALSE; - if(NV > MAX_ROWS) return FALSE; - if(Hll >= Hur) return FALSE; - if(Vll >= Vur) return FALSE; - return TRUE; +bool ValidSurface(){ + if ( WaveType == WAVE_BITMAP && !gbmp.colors ) { + return FALSE; + } + if ( NH < 1 ) { + return FALSE; + } + if ( NH > MAX_ROWS ) { + return FALSE; + } + if ( NV < 1 ) { + return FALSE; + } + if ( NV > MAX_ROWS ) { + return FALSE; + } + if ( Hll >= Hur ) { + return FALSE; + } + if ( Vll >= Vur ) { + return FALSE; + } + return TRUE; } //============================================================= -int MapPatches() -{ - int NH_remain; - int NV_remain; - int NH_patch; - int NV_patch; - int BrushNum = 0; - int i, j, k1, k2, k3; - int i0, j0, ii; - char szOops[128]; - patchMesh_t p; - - dh = (Hur-Hll)/NH; - dv = (Vur-Vll)/NV; - memset(&p,0,sizeof(patchMesh_t)); - - // Generate control points in pp array to give desired values currently - // in p array. - switch(Plane) - { - case PLANE_XY0: - case PLANE_XY1: - k1 = 0; - k2 = 1; - k3 = 2; - break; - case PLANE_XZ0: - case PLANE_XZ1: - k1 = 0; - k2 = 2; - k3 = 1; - break; - case PLANE_YZ0: - case PLANE_YZ1: - k1 = 1; - k2 = 2; - k3 = 0; - break; - } - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - xyz[i][j].pp[k1] = xyz[i][j].p[k1]; - xyz[i][j].pp[k2] = xyz[i][j].p[k2]; - } - } - for(i=0; i<=NH; i+=2) - { - for(j=0; j<=NV; j+=2) - xyz[i][j].pp[k3] = xyz[i][j].p[k3]; - } - for(i=1; i 1) - { - if(( (NH_remain-1) % 14) == 0) - NH_patch = 15; - else if(( (NH_remain-1) % 12) == 0) - NH_patch = 13; - else if(( (NH_remain-1) % 10) == 0) - NH_patch = 11; - else if(( (NH_remain-1) % 8) == 0) - NH_patch = 9; - else if(( (NH_remain-1) % 6) == 0) - NH_patch = 7; - else if(( (NH_remain-1) % 4) == 0) - NH_patch = 5; - else if(( (NH_remain-1) % 2) == 0) - NH_patch = 3; - else if(NH_remain > 16) - NH_patch = 7; - else if(NH_remain > 4) - NH_patch = 5; - else - NH_patch = 3; - while( NH_patch > 3 && (NH_patch-1)*dh > 512 ) - NH_patch -= 2; - NH_remain -= (NH_patch-1); - if(NH_remain < 0) - { - sprintf(szOops,"Oops... screwed up with NH=%d",NH); - g_FuncTable.m_pfnMessageBox(NULL,szOops,"Uh oh", 0, NULL); - } - NV_remain = NV+1; - j0 = 0; - while(NV_remain > 1) - { - if(( (NV_remain-1) % 14) == 0) - NV_patch = 15; - else if(( (NV_remain-1) % 12) == 0) - NV_patch = 13; - else if(( (NV_remain-1) % 10) == 0) - NV_patch = 11; - else if(( (NV_remain-1) % 8) == 0) - NV_patch = 9; - else if(( (NV_remain-1) % 6) == 0) - NV_patch = 7; - else if(( (NV_remain-1) % 4) == 0) - NV_patch = 5; - else if(( (NV_remain-1) % 2) == 0) - NV_patch = 3; - else if(NV_remain > 16) - NV_patch = 7; - else if(NV_remain > 4) - NV_patch = 5; - else - NV_patch = 3; - while( NV_patch > 3 && (NV_patch-1)*dh > 512 ) - NV_patch -= 2; - NV_remain -= (NV_patch-1); - if(NV_remain < 0) - { - sprintf(szOops,"Oops... screwed up with NV=%d",NV); - g_FuncTable.m_pfnMessageBox(NULL,szOops,"Uh oh", 0, NULL); - } - - p.width = NH_patch; - p.height = NV_patch; - p.type = PATCH_GENERIC; - for(i=0; i 1 ) + { + if ( ( ( NH_remain - 1 ) % 14 ) == 0 ) { + NH_patch = 15; + } + else if ( ( ( NH_remain - 1 ) % 12 ) == 0 ) { + NH_patch = 13; + } + else if ( ( ( NH_remain - 1 ) % 10 ) == 0 ) { + NH_patch = 11; + } + else if ( ( ( NH_remain - 1 ) % 8 ) == 0 ) { + NH_patch = 9; + } + else if ( ( ( NH_remain - 1 ) % 6 ) == 0 ) { + NH_patch = 7; + } + else if ( ( ( NH_remain - 1 ) % 4 ) == 0 ) { + NH_patch = 5; + } + else if ( ( ( NH_remain - 1 ) % 2 ) == 0 ) { + NH_patch = 3; + } + else if ( NH_remain > 16 ) { + NH_patch = 7; + } + else if ( NH_remain > 4 ) { + NH_patch = 5; + } + else{ + NH_patch = 3; + } + while ( NH_patch > 3 && ( NH_patch - 1 ) * dh > 512 ) + NH_patch -= 2; + NH_remain -= ( NH_patch - 1 ); + if ( NH_remain < 0 ) { + sprintf( szOops,"Oops... screwed up with NH=%d",NH ); + g_FuncTable.m_pfnMessageBox( NULL,szOops,"Uh oh", 0, NULL ); + } + NV_remain = NV + 1; + j0 = 0; + while ( NV_remain > 1 ) + { + if ( ( ( NV_remain - 1 ) % 14 ) == 0 ) { + NV_patch = 15; + } + else if ( ( ( NV_remain - 1 ) % 12 ) == 0 ) { + NV_patch = 13; + } + else if ( ( ( NV_remain - 1 ) % 10 ) == 0 ) { + NV_patch = 11; + } + else if ( ( ( NV_remain - 1 ) % 8 ) == 0 ) { + NV_patch = 9; + } + else if ( ( ( NV_remain - 1 ) % 6 ) == 0 ) { + NV_patch = 7; + } + else if ( ( ( NV_remain - 1 ) % 4 ) == 0 ) { + NV_patch = 5; + } + else if ( ( ( NV_remain - 1 ) % 2 ) == 0 ) { + NV_patch = 3; + } + else if ( NV_remain > 16 ) { + NV_patch = 7; + } + else if ( NV_remain > 4 ) { + NV_patch = 5; + } + else{ + NV_patch = 3; + } + while ( NV_patch > 3 && ( NV_patch - 1 ) * dh > 512 ) + NV_patch -= 2; + NV_remain -= ( NV_patch - 1 ); + if ( NV_remain < 0 ) { + sprintf( szOops,"Oops... screwed up with NV=%d",NV ); + g_FuncTable.m_pfnMessageBox( NULL,szOops,"Uh oh", 0, NULL ); + } + + p.width = NH_patch; + p.height = NV_patch; + p.type = PATCH_GENERIC; + for ( i = 0; i < NH_patch; i++ ) + { + switch ( Plane ) + { + case PLANE_XY1: + case PLANE_XZ0: + case PLANE_YZ1: + ii = i0 + NH_patch - 1 - i; + break; + default: + ii = i0 + i; + } + for ( j = 0; j < NV_patch; j++ ) + { + p.ctrl[i][j].xyz[0] = (float)xyz[ii][j0 + j].pp[0]; + p.ctrl[i][j].xyz[1] = (float)xyz[ii][j0 + j].pp[1]; + p.ctrl[i][j].xyz[2] = (float)xyz[ii][j0 + j].pp[2]; + p.ctrl[i][j].st[0] = (float)i; + p.ctrl[i][j].st[1] = (float)j; + } + } + MakePatch( &p ); + BrushNum++; + j0 += NV_patch - 1; + } + i0 += NH_patch - 1; + } + return BrushNum; } //============================================================= -void MapBrushes() -{ - char hint[128]; - char skip[128]; - char sidetext[64]; - char surftext[64]; - char surftext2[64]; - char surft[64]; - float Steep; - vec3_t PlaneNormal,SurfNormal; - vec3_t t[2]; - int i, j, k; - int surf; - bool CheckAngle; - BRUSH brush; - XYZ v[8]; - - strcpy(surftext,Texture[Game][0]); - strcpy(sidetext,(strlen(Texture[Game][1]) ? Texture[Game][1] : Texture[Game][0])); - strcpy(surftext2,(strlen(Texture[Game][2]) ? Texture[Game][2] : Texture[Game][0])); - - // if surftext2 is identical to surftext, there's no need to - // check surface angle - if(!g_strcasecmp(surftext,surftext2)) - CheckAngle = FALSE; - else - { - CheckAngle = TRUE; - Steep = (float)cos((double)SlantAngle/57.2957795); - switch(Plane) - { - case PLANE_XY0: PlaneNormal[0]= 0.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break; - case PLANE_XY1: PlaneNormal[0]= 0.;PlaneNormal[1]= 0.;PlaneNormal[2]=-1.;break; - case PLANE_XZ0: PlaneNormal[0]= 0.;PlaneNormal[1]= 1.;PlaneNormal[2]= 1.;break; - case PLANE_XZ1: PlaneNormal[0]= 0.;PlaneNormal[1]=-1.;PlaneNormal[2]= 1.;break; - case PLANE_YZ0: PlaneNormal[0]= 1.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break; - case PLANE_YZ1: PlaneNormal[0]=-1.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break; - } - } - - OpenFuncGroup(); - - for(i=0; i 0 && (Game != QUAKE3 || UsePatches==0) ) - { - MapOut(gNumNodes,gNumTris,gNode,gTri); - /* - ghCursorCurrent = ghCursorDefault; - SetCursor(ghCursorCurrent); - */ - return; - } - - contents = 0; - // HL doesn't have detail property - if((Game != HALFLIFE) && UseDetail) contents += CONTENTS_DETAIL; - // HL and Q3 don't have ladder property - if((Game != HALFLIFE && Game != QUAKE3) && UseLadder) contents += CONTENTS_LADDER; - // Genesis requires solid property to be set explicitly - if(Game == GENESIS3D) contents |= CONTENTS_SOLID; - // Heretic 2 uses different sounds (in surface props) for different texture types - if(Game == HERETIC2) - { - surface[0] = GetDefSurfaceProps(Texture[Game][0]); - surface[1] = GetDefSurfaceProps(Texture[Game][1]); - surface[2] = GetDefSurfaceProps(Texture[Game][2]); - } - else - { - surface[0] = 0; - surface[1] = 0; - surface[2] = 0; - } - if(Game!=QUAKE3 || UsePatches == 0) - MapBrushes(); - - /* - ghCursorCurrent = ghCursorDefault; - SetCursor(ghCursorCurrent); - */ +void GenerateMap(){ + extern void MapOut( int,int,NODE *,TRI * ); + extern bool SingleBrushSelected; + int ntri; + + if ( !ValidSurface() ) { + return; + } + /* + ghCursorCurrent = LoadCursor(NULL,IDC_WAIT); + SetCursor(ghCursorCurrent); + */ + if ( SingleBrushSelected ) { + g_FuncTable.m_pfnDeleteSelection(); + } + + GenerateXYZ(); + ntri = NH * NV * 2; + + if ( Game == QUAKE3 && UsePatches != 0 ) { + MapPatches(); + } + + if ( Decimate > 0 && ( Game != QUAKE3 || UsePatches == 0 ) ) { + MapOut( gNumNodes,gNumTris,gNode,gTri ); + /* + ghCursorCurrent = ghCursorDefault; + SetCursor(ghCursorCurrent); + */ + return; + } + + contents = 0; + // HL doesn't have detail property + if ( ( Game != HALFLIFE ) && UseDetail ) { + contents += CONTENTS_DETAIL; + } + // HL and Q3 don't have ladder property + if ( ( Game != HALFLIFE && Game != QUAKE3 ) && UseLadder ) { + contents += CONTENTS_LADDER; + } + // Genesis requires solid property to be set explicitly + if ( Game == GENESIS3D ) { + contents |= CONTENTS_SOLID; + } + // Heretic 2 uses different sounds (in surface props) for different texture types + if ( Game == HERETIC2 ) { + surface[0] = GetDefSurfaceProps( Texture[Game][0] ); + surface[1] = GetDefSurfaceProps( Texture[Game][1] ); + surface[2] = GetDefSurfaceProps( Texture[Game][2] ); + } + else + { + surface[0] = 0; + surface[1] = 0; + surface[2] = 0; + } + if ( Game != QUAKE3 || UsePatches == 0 ) { + MapBrushes(); + } + + /* + ghCursorCurrent = ghCursorDefault; + SetCursor(ghCursorCurrent); + */ } //============================================================= -void GenerateXYZ() -{ - extern void MakeDecimatedMap(int *, int *, NODE **, TRI **); - double zl, zu; - double wh, wv; - int NHalfcycles; - double a,v,h,ha,va; - double delta, dr, rate; - double range, maxrange; - double r; - int i, j, k, N; - int i0, i1, j0, j1; - int ii, jj; +void GenerateXYZ(){ + extern void MakeDecimatedMap( int *, int *, NODE * *, TRI * * ); + double zl, zu; + double wh, wv; + int NHalfcycles; + double a,v,h,ha,va; + double delta, dr, rate; + double range, maxrange; + double r; + int i, j, k, N; + int i0, i1, j0, j1; + int ii, jj; // FILE *f; // char CSV[64]; - if(!ValidSurface()) return; - - srand(1); - srand(RandomSeed); - - dh = (Hur-Hll)/NH; - dv = (Vur-Vll)/NV; - - // H & V - for(i=0; i<=NH; i++) - { - for(j=0;j<=NV;j++) - { - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - xyz[i][j].p[0] = Hll + i*dh; - xyz[i][j].p[2] = Vll + j*dv; - break; - case PLANE_YZ0: - case PLANE_YZ1: - xyz[i][j].p[1] = Hll + i*dh; - xyz[i][j].p[2] = Vll + j*dv; - break; - default: - xyz[i][j].p[0] = Hll + i*dh; - xyz[i][j].p[1] = Vll + j*dv; - } - } - } - - if(WaveType == WAVE_BITMAP) - GenerateBitmapMapping(); - /* - else if(WaveType == WAVE_FORMULA) - DoFormula(); - */ - else - { - // Initialize Z values using bilinear interpolation - for(i=0; i<=NH; i++) - { - zl = Z00 + i*(Z10 - Z00)/NH; - zu = Z01 + i*(Z11 - Z01)/NH; - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - for(j=0; j<=NV; j++) - xyz[i][j].p[1] = zl + j*(zu-zl)/NV; - break; - case PLANE_YZ0: - case PLANE_YZ1: - for(j=0; j<=NV; j++) - xyz[i][j].p[0] = zl + j*(zu-zl)/NV; - break; - default: - for(j=0; j<=NV; j++) - xyz[i][j].p[2] = zl + j*(zu-zl)/NV; - } - } - } - - switch(WaveType) - { - case WAVE_COS_SIN: - if(FixBorders) - { - NHalfcycles = (int)((Hur-Hll)/(WaveLength/2.)); - NHalfcycles = max(NHalfcycles,1); - wh = 2.*(Hur-Hll)/NHalfcycles; - NHalfcycles = (int)((Vur-Vll)/(WaveLength/2.)); - wv = 2.*(Vur-Vll)/NHalfcycles; - NHalfcycles = max(NHalfcycles,1); - i0 = 1; - i1 = NH-1; - j0 = 1; - j1 = NV-1; - } - else - { - wh = WaveLength; - wv = WaveLength; - i0 = 0; - i1 = NH; - j0 = 0; - j1 = NV; - } - - for(i=i0; i<=i1; i++) - { - h = Hll + i*dh; - ha = ((h-Hll)/wh)*2.*PI - PI/2.; - for(j=j0; j<=j1; j++) - { - v = Vll + j*dv; - va = ((v-Vll)/wv)*2.*PI; - a = Amplitude * cos( ha ) * sin( va ); - switch(Plane) - { - case PLANE_XY1: - xyz[i][j].p[2] -= a; - break; - case PLANE_XZ0: - xyz[i][j].p[1] += a; - break; - case PLANE_XZ1: - xyz[i][j].p[1] -= a; - break; - case PLANE_YZ0: - xyz[i][j].p[0] += a; - break; - case PLANE_YZ1: - xyz[i][j].p[0] -= a; - break; - default: - xyz[i][j].p[2] += a; - } - } - } - break; - case WAVE_HCYLINDER: - for(i=0; i<=NH; i++) - { - h = Hll + i*dh; - ha = ((h-Hll)/WaveLength)*2.*PI - PI/2.; - for(j=0; j<=NV; j++) - { - a = Amplitude * cos( ha ); - switch(Plane) - { - case PLANE_XY1: - xyz[i][j].p[2] -= a; - break; - case PLANE_XZ0: - xyz[i][j].p[1] += a; - break; - case PLANE_XZ1: - xyz[i][j].p[1] -= a; - break; - case PLANE_YZ0: - xyz[i][j].p[0] += a; - break; - case PLANE_YZ1: - xyz[i][j].p[0] -= a; - break; - default: - xyz[i][j].p[2] += a; - } - } - } - break; - case WAVE_VCYLINDER: - for(i=0; i<=NH; i++) - { - h = Hll + i*dh; - for(j=0; j<=NV; j++) - { - v = Vll + j*dv; - va = ((v-Vll)/WaveLength)*2.*PI; - a = Amplitude * sin( va ); - switch(Plane) - { - case PLANE_XY1: - xyz[i][j].p[2] -= a; - break; - case PLANE_XZ0: - xyz[i][j].p[1] += a; - break; - case PLANE_XZ1: - xyz[i][j].p[1] -= a; - break; - case PLANE_YZ0: - xyz[i][j].p[0] += a; - break; - case PLANE_YZ1: - xyz[i][j].p[0] -= a; - break; - default: - xyz[i][j].p[2] += a; - } - } - } - break; - case WAVE_ROUGH_ONLY: - PlasmaCloud(); - break; - } - - if(WaveType != WAVE_ROUGH_ONLY) - { - // Fixed values - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - if(xyz[i][j].fixed) - { - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - xyz[i][j].p[1] = xyz[i][j].fixed_value; - break; - case PLANE_YZ0: - case PLANE_YZ1: - xyz[i][j].p[0] = xyz[i][j].fixed_value; - break; - default: - xyz[i][j].p[2] = xyz[i][j].fixed_value; - } - - if(xyz[i][j].range > 0) - { - maxrange = pow(xyz[i][j].range,2); // so we don't have to do sqrt's - i0 = i - (int)( floor(xyz[i][j].range/dh - 0.5) + 1 ); - i1 = i + i - i0; - j0 = j - (int)( floor(xyz[i][j].range/dv - 0.5) + 1 ); - j1 = j + j - j0; - if(FixBorders) - { - i0 = max(i0,1); - i1 = min(i1,NH-1); - j0 = max(j0,1); - j1 = min(j1,NV-1); - } - else - { - i0 = max(i0,0); - i1 = min(i1,NH); - j0 = max(j0,0); - j1 = min(j1,NV); - } - for(ii=i0; ii<=i1; ii++) - { - for(jj=j0; jj<=j1; jj++) - { - if(ii==i && jj==j) continue; - range = pow( dh*(i-ii), 2) + pow( dv*(j-jj), 2); - if(range > maxrange) continue; - dr = sqrt(range/maxrange); - rate = max(-30.,min(xyz[i][j].rate,30.)); - if(rate < -1.) - { - delta = pow((1.-dr),-rate+1.); - } - else if(rate < 0.) - { - delta = (1+rate)*0.5*(cos(dr*PI)+1.0) - - rate*pow((1.-dr),2); - } - else if(rate == 0.) - { - delta = 0.5*(cos(dr*PI)+1.0); - } - else if(rate <= 1.) - { - delta = (1.-rate)*0.5*(cos(dr*PI)+1.0) + - rate*(1.-pow(dr,2)); - } - else - { - delta = 1.-pow(dr,rate+1); - } - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - xyz[ii][jj].p[1] += (xyz[i][j].p[1] - xyz[ii][jj].p[1])*delta; - break; - case PLANE_YZ0: - case PLANE_YZ1: - xyz[ii][jj].p[0] += (xyz[i][j].p[0] - xyz[ii][jj].p[0])*delta; - break; - default: - xyz[ii][jj].p[2] += (xyz[i][j].p[2] - xyz[ii][jj].p[2])*delta; - } - } - } - } - } - } - } - } - - if((Roughness > 0.) && (WaveType != WAVE_ROUGH_ONLY) ) - { - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - if(CanEdit(i,j) && !xyz[i][j].fixed) - { - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - xyz[i][j].p[1] += -Roughness/2. + Roughness*((double)rand()/(double)RAND_MAX); - break; - case PLANE_YZ0: - case PLANE_YZ1: - xyz[i][j].p[0] += -Roughness/2. + Roughness*((double)rand()/(double)RAND_MAX); - break; - default: - xyz[i][j].p[2] += -Roughness/2. + Roughness*((double)rand()/(double)RAND_MAX); - } - } - else - r = rand(); // We still get a random number, so that fixing points - // doesn't change the sequence. - - } - } - } - - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - for(k=0; k<3; k++) - { - xyz[i][j].p[k] = Nearest(xyz[i][j].p[k],2.0); - } - } - } - - // Find minima and maxima - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - xmin = Hll; - xmax = Hur; - zmin = Vll; - zmax = Vur; - ymin = xyz[0][0].p[1]; - ymax = ymin; - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - ymin = min(ymin,xyz[i][j].p[1]); - ymax = max(ymax,xyz[i][j].p[1]); - } - } - break; - case PLANE_YZ0: - case PLANE_YZ1: - ymin = Hll; - ymax = Hur; - zmin = Vll; - zmax = Vur; - xmin = xyz[0][0].p[0]; - xmax = ymin; - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - xmin = min(xmin,xyz[i][j].p[0]); - xmax = max(xmax,xyz[i][j].p[0]); - } - } - break; - break; - default: - xmin = Hll; - xmax = Hur; - ymin = Vll; - ymax = Vur; - zmin = xyz[0][0].p[2]; - zmax = zmin; - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - zmin = min(zmin,xyz[i][j].p[2]); - zmax = max(zmax,xyz[i][j].p[2]); - } - } - } - - xmin = Nearest(xmin,2.); - xmax = Nearest(xmax,2.); - ymin = Nearest(ymin,2.); - ymax = Nearest(ymax,2.); - zmin = Nearest(zmin,2.); - zmax = Nearest(zmax,2.); - - switch(Plane) - { - case PLANE_XY1: - backface = AtLeast(zmax+32.,32.); - break; - case PLANE_XZ0: - backface = NoMoreThan(ymin-32.,32.); - break; - case PLANE_XZ1: - backface = AtLeast(ymax+32.,32.); - break; - case PLANE_YZ0: - backface = NoMoreThan(xmin-32.,32.); - break; - case PLANE_YZ1: - backface = AtLeast(xmax+32.,32.); - break; - default: - backface = NoMoreThan(zmin-32.,32.); - } - - if(gNode) - { - free(gNode); - free(gTri); - gNode = (NODE *)NULL; - gTri = (TRI *)NULL; - } - if(Decimate > 0 && (Game != QUAKE3 || UsePatches==0) ) - { - MakeDecimatedMap(&gNumNodes,&gNumTris,&gNode,&gTri); - } - else - { - gNumNodes = (NH+1)*(NV+1); - gNumTris = NH*NV*2; - gNode = (NODE *) malloc(gNumNodes * sizeof(NODE)); - gTri = (TRI *) malloc(gNumTris * sizeof(TRI)); - - for(i=0,N=0; i<=NH; i++) - { - for(j=0; j<=NV; j++, N++) - { - gNode[N].used = 1; - gNode[N].p[0] = (float)xyz[i][j].p[0]; - gNode[N].p[1] = (float)xyz[i][j].p[1]; - gNode[N].p[2] = (float)xyz[i][j].p[2]; - } - } - - for(i=0; i 0 ) { + maxrange = pow( xyz[i][j].range,2 ); // so we don't have to do sqrt's + i0 = i - (int)( floor( xyz[i][j].range / dh - 0.5 ) + 1 ); + i1 = i + i - i0; + j0 = j - (int)( floor( xyz[i][j].range / dv - 0.5 ) + 1 ); + j1 = j + j - j0; + if ( FixBorders ) { + i0 = max( i0,1 ); + i1 = min( i1,NH - 1 ); + j0 = max( j0,1 ); + j1 = min( j1,NV - 1 ); + } + else + { + i0 = max( i0,0 ); + i1 = min( i1,NH ); + j0 = max( j0,0 ); + j1 = min( j1,NV ); + } + for ( ii = i0; ii <= i1; ii++ ) + { + for ( jj = j0; jj <= j1; jj++ ) + { + if ( ii == i && jj == j ) { + continue; + } + range = pow( dh * ( i - ii ), 2 ) + pow( dv * ( j - jj ), 2 ); + if ( range > maxrange ) { + continue; + } + dr = sqrt( range / maxrange ); + rate = max( -30.,min( xyz[i][j].rate,30. ) ); + if ( rate < -1. ) { + delta = pow( ( 1. - dr ),-rate + 1. ); + } + else if ( rate < 0. ) { + delta = ( 1 + rate ) * 0.5 * ( cos( dr * PI ) + 1.0 ) - + rate*pow( ( 1. - dr ),2 ); + } + else if ( rate == 0. ) { + delta = 0.5 * ( cos( dr * PI ) + 1.0 ); + } + else if ( rate <= 1. ) { + delta = ( 1. - rate ) * 0.5 * ( cos( dr * PI ) + 1.0 ) + + rate * ( 1. - pow( dr,2 ) ); + } + else + { + delta = 1. - pow( dr,rate + 1 ); + } + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + xyz[ii][jj].p[1] += ( xyz[i][j].p[1] - xyz[ii][jj].p[1] ) * delta; + break; + case PLANE_YZ0: + case PLANE_YZ1: + xyz[ii][jj].p[0] += ( xyz[i][j].p[0] - xyz[ii][jj].p[0] ) * delta; + break; + default: + xyz[ii][jj].p[2] += ( xyz[i][j].p[2] - xyz[ii][jj].p[2] ) * delta; + } + } + } + } + } + } + } + } + + if ( ( Roughness > 0. ) && ( WaveType != WAVE_ROUGH_ONLY ) ) { + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + if ( CanEdit( i,j ) && !xyz[i][j].fixed ) { + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + xyz[i][j].p[1] += -Roughness / 2. + Roughness * ( (double)rand() / (double)RAND_MAX ); + break; + case PLANE_YZ0: + case PLANE_YZ1: + xyz[i][j].p[0] += -Roughness / 2. + Roughness * ( (double)rand() / (double)RAND_MAX ); + break; + default: + xyz[i][j].p[2] += -Roughness / 2. + Roughness * ( (double)rand() / (double)RAND_MAX ); + } + } + else{ + r = rand(); // We still get a random number, so that fixing points + } + // doesn't change the sequence. + + } + } + } + + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + for ( k = 0; k < 3; k++ ) + { + xyz[i][j].p[k] = Nearest( xyz[i][j].p[k],2.0 ); + } + } + } + + // Find minima and maxima + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + xmin = Hll; + xmax = Hur; + zmin = Vll; + zmax = Vur; + ymin = xyz[0][0].p[1]; + ymax = ymin; + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + ymin = min( ymin,xyz[i][j].p[1] ); + ymax = max( ymax,xyz[i][j].p[1] ); + } + } + break; + case PLANE_YZ0: + case PLANE_YZ1: + ymin = Hll; + ymax = Hur; + zmin = Vll; + zmax = Vur; + xmin = xyz[0][0].p[0]; + xmax = ymin; + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + xmin = min( xmin,xyz[i][j].p[0] ); + xmax = max( xmax,xyz[i][j].p[0] ); + } + } + break; + break; + default: + xmin = Hll; + xmax = Hur; + ymin = Vll; + ymax = Vur; + zmin = xyz[0][0].p[2]; + zmax = zmin; + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + zmin = min( zmin,xyz[i][j].p[2] ); + zmax = max( zmax,xyz[i][j].p[2] ); + } + } + } + + xmin = Nearest( xmin,2. ); + xmax = Nearest( xmax,2. ); + ymin = Nearest( ymin,2. ); + ymax = Nearest( ymax,2. ); + zmin = Nearest( zmin,2. ); + zmax = Nearest( zmax,2. ); + + switch ( Plane ) + { + case PLANE_XY1: + backface = AtLeast( zmax + 32.,32. ); + break; + case PLANE_XZ0: + backface = NoMoreThan( ymin - 32.,32. ); + break; + case PLANE_XZ1: + backface = AtLeast( ymax + 32.,32. ); + break; + case PLANE_YZ0: + backface = NoMoreThan( xmin - 32.,32. ); + break; + case PLANE_YZ1: + backface = AtLeast( xmax + 32.,32. ); + break; + default: + backface = NoMoreThan( zmin - 32.,32. ); + } + + if ( gNode ) { + free( gNode ); + free( gTri ); + gNode = (NODE *)NULL; + gTri = (TRI *)NULL; + } + if ( Decimate > 0 && ( Game != QUAKE3 || UsePatches == 0 ) ) { + MakeDecimatedMap( &gNumNodes,&gNumTris,&gNode,&gTri ); + } + else + { + gNumNodes = ( NH + 1 ) * ( NV + 1 ); + gNumTris = NH * NV * 2; + gNode = (NODE *) malloc( gNumNodes * sizeof( NODE ) ); + gTri = (TRI *) malloc( gNumTris * sizeof( TRI ) ); + + for ( i = 0,N = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++, N++ ) + { + gNode[N].used = 1; + gNode[N].p[0] = (float)xyz[i][j].p[0]; + gNode[N].p[1] = (float)xyz[i][j].p[1]; + gNode[N].p[2] = (float)xyz[i][j].p[2]; + } + } + + for ( i = 0; i < NH; i++ ) + { + for ( j = 0; j < NV; j++ ) + { + k = i * NV * 2 + j * 2; + if ( ( i + j ) % 2 ) { + switch ( Plane ) + { + case PLANE_XY1: + case PLANE_XZ1: + case PLANE_YZ1: + gTri[k ].v[0] = i * ( NV + 1 ) + j; + gTri[k ].v[1] = ( i + 1 ) * ( NV + 1 ) + j + 1; + gTri[k ].v[2] = ( i + 1 ) * ( NV + 1 ) + j; + gTri[k + 1].v[0] = i * ( NV + 1 ) + j; + gTri[k + 1].v[1] = i * ( NV + 1 ) + j + 1; + gTri[k + 1].v[2] = ( i + 1 ) * ( NV + 1 ) + j + 1; + break; + default: + gTri[k ].v[0] = i * ( NV + 1 ) + j; + gTri[k ].v[1] = ( i + 1 ) * ( NV + 1 ) + j; + gTri[k ].v[2] = ( i + 1 ) * ( NV + 1 ) + j + 1; + gTri[k + 1].v[0] = i * ( NV + 1 ) + j; + gTri[k + 1].v[1] = ( i + 1 ) * ( NV + 1 ) + j + 1; + gTri[k + 1].v[2] = i * ( NV + 1 ) + j + 1; + } + } + else + { + switch ( Plane ) + { + case PLANE_XY1: + case PLANE_XZ1: + case PLANE_YZ1: + gTri[k ].v[0] = i * ( NV + 1 ) + j; + gTri[k ].v[1] = i * ( NV + 1 ) + j + 1; + gTri[k ].v[2] = ( i + 1 ) * ( NV + 1 ) + j; + gTri[k + 1].v[0] = ( i + 1 ) * ( NV + 1 ) + j; + gTri[k + 1].v[1] = i * ( NV + 1 ) + j + 1; + gTri[k + 1].v[2] = ( i + 1 ) * ( NV + 1 ) + j + 1; + break; + default: + gTri[k ].v[0] = i * ( NV + 1 ) + j; + gTri[k ].v[1] = ( i + 1 ) * ( NV + 1 ) + j; + gTri[k ].v[2] = i * ( NV + 1 ) + j + 1; + gTri[k + 1].v[0] = ( i + 1 ) * ( NV + 1 ) + j; + gTri[k + 1].v[1] = ( i + 1 ) * ( NV + 1 ) + j + 1; + gTri[k + 1].v[2] = i * ( NV + 1 ) + j + 1; + } + } + } + } + } /* - sprintf(CSV,"csv%03d.csv",Decimate); - f = fopen(CSV,"w"); - for(i=0; i 0) - { - for(i=0; i 0 ) { + for ( i = 0; i < NH; i++ ) + { + for ( j = 0; j < NV; j++ ) + { + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + xyz[i][j].p[1] = CalculateSnapValue( xyz[i][j].p[1] ); + break; + case PLANE_YZ0: + case PLANE_YZ1: + xyz[i][j].p[0] = CalculateSnapValue( xyz[i][j].p[0] ); + break; + default: + xyz[i][j].p[2] = CalculateSnapValue( xyz[i][j].p[2] ); + } + } + } + } + // Hydra: snap-to-grid end } //============================================================= -double Nearest(double x, double dx) -{ - double xx; +double Nearest( double x, double dx ){ + double xx; - xx = (double)(floor(x/dx - 0.5)+1.)*dx; - if(fabs(xx) < dx/2) xx = 0.; - return xx; + xx = (double)( floor( x / dx - 0.5 ) + 1. ) * dx; + if ( fabs( xx ) < dx / 2 ) { + xx = 0.; + } + return xx; } //============================================================= -double NoMoreThan(double x, double dx) -{ - double xx; +double NoMoreThan( double x, double dx ){ + double xx; - xx = (double)(floor(x/dx - 0.5)+1.)*dx; - if(xx > x) xx -= dx; - return xx; + xx = (double)( floor( x / dx - 0.5 ) + 1. ) * dx; + if ( xx > x ) { + xx -= dx; + } + return xx; } //============================================================= -double AtLeast(double x, double dx) -{ - double xx; +double AtLeast( double x, double dx ){ + double xx; - xx = (double)(floor(x/dx - 0.5)+1.)*dx; - if(xx < x) xx += dx; - return xx; + xx = (double)( floor( x / dx - 0.5 ) + 1. ) * dx; + if ( xx < x ) { + xx += dx; + } + return xx; } //============================================================= -double LessThan(double x,double dx) -{ - double xx; +double LessThan( double x,double dx ){ + double xx; - xx = (double)(floor(x/dx - 0.5)+1.)*dx; - if(xx >= x) xx -= dx; - return xx; + xx = (double)( floor( x / dx - 0.5 ) + 1. ) * dx; + if ( xx >= x ) { + xx -= dx; + } + return xx; } //============================================================= -double MoreThan(double x,double dx) -{ - double xx; - - xx = (double)(floor(x/dx - 0.5)+1.)*dx; - while(xx <= x) - xx += dx; - return xx; +double MoreThan( double x,double dx ){ + double xx; + + xx = (double)( floor( x / dx - 0.5 ) + 1. ) * dx; + while ( xx <= x ) + xx += dx; + return xx; } //============================================================= -void SubdividePlasma(int i0,int j0,int i1,int j1) -{ - int i, j; - double z1, z2; - double r; // NOTE: This is used to keep the random number sequence the same - // when we fix a point. If we did NOT do this, then simply - // fixing a point at its current value would change the entire - // surface. - - i = (i0+i1)/2; - j = (j0+j1)/2; - if(i1 > i0+1) - { - if(!xyz[i][j0].done) - { - xyz[i][j0].pp[2] = xyz[i0][j0].pp[2] + - (xyz[i1][j0].pp[2] - xyz[i0][j0].pp[2])*(double)(i-i0)/(double)(i1-i0) + - ((double)(i-i0))*(-Roughness/2. + Roughness*((double)rand()/(double)RAND_MAX)); - xyz[i][j0].done = 1; - } - else - r = rand(); - if((j1 > j0) && (!xyz[i][j1].done) ) - { - xyz[i][j1].pp[2] = xyz[i0][j1].pp[2] + - (xyz[i1][j1].pp[2] - xyz[i0][j1].pp[2])*(double)(i-i0)/(double)(i1-i0) + - ((double)(i-i0))*(-Roughness/2. + Roughness*((double)rand()/(double)RAND_MAX)); - xyz[i][j1].done = 1; - } - else - r = rand(); - } - if(j1 > j0 + 1) - { - if(!xyz[i0][j].done) - { - xyz[i0][j].pp[2] = xyz[i0][j0].pp[2] + - (xyz[i0][j1].pp[2] - xyz[i0][j0].pp[2])*(double)(j-j0)/(double)(j1-j0) + - ((double)(j-j0))*(-Roughness/2. + Roughness*((double)rand()/(double)RAND_MAX)); - xyz[i0][j].done = 1; - } - else - r = rand(); - if((i1 > i0) && (!xyz[i1][j].done)) - { - xyz[i1][j].pp[2] = xyz[i1][j0].pp[2] + - (xyz[i1][j1].pp[2] - xyz[i1][j0].pp[2])*(double)(j-j0)/(double)(j1-j0) + - ((double)(j-j0))*(-Roughness/2. + Roughness*((double)rand()/(double)RAND_MAX)); - xyz[i1][j].done = 1; - } - else - r = rand(); - } - if((i1 > i0+1) && (j1 > j0+1)) - { - if(!xyz[i][j].done) - { - z1 = xyz[i0][j].pp[2] + - (xyz[i1][j].pp[2] - xyz[i0][j].pp[2])*(double)(i-i0)/(double)(i1-i0); - z2 = xyz[i][j0].pp[2] + - (xyz[i][j1].pp[2] - xyz[i][j0].pp[2])*(double)(j-j0)/(double)(j1-j0); - xyz[i][j].pp[2] = (z1+z2)/2. + - ((double)(i-i0))*(-Roughness/2. + Roughness*((double)rand()/(double)RAND_MAX)); - xyz[i][j].done = 1; - } - else - r = rand(); - } - if(i > i0+1 || j > j0+1) - SubdividePlasma(i0,j0,i,j); - if(i1 > i+1 || j > j0+1) - SubdividePlasma(i,j0,i1,j); - if(i > i0+1 || j1 > j0+1) - SubdividePlasma(i0,j,i,j1); - if(i1 > i+1 || j1 > j0+1) - SubdividePlasma(i,j,i1,j1); +void SubdividePlasma( int i0,int j0,int i1,int j1 ){ + int i, j; + double z1, z2; + double r; // NOTE: This is used to keep the random number sequence the same + // when we fix a point. If we did NOT do this, then simply + // fixing a point at its current value would change the entire + // surface. + + i = ( i0 + i1 ) / 2; + j = ( j0 + j1 ) / 2; + if ( i1 > i0 + 1 ) { + if ( !xyz[i][j0].done ) { + xyz[i][j0].pp[2] = xyz[i0][j0].pp[2] + + ( xyz[i1][j0].pp[2] - xyz[i0][j0].pp[2] ) * (double)( i - i0 ) / (double)( i1 - i0 ) + + ( (double)( i - i0 ) ) * ( -Roughness / 2. + Roughness * ( (double)rand() / (double)RAND_MAX ) ); + xyz[i][j0].done = 1; + } + else{ + r = rand(); + } + if ( ( j1 > j0 ) && ( !xyz[i][j1].done ) ) { + xyz[i][j1].pp[2] = xyz[i0][j1].pp[2] + + ( xyz[i1][j1].pp[2] - xyz[i0][j1].pp[2] ) * (double)( i - i0 ) / (double)( i1 - i0 ) + + ( (double)( i - i0 ) ) * ( -Roughness / 2. + Roughness * ( (double)rand() / (double)RAND_MAX ) ); + xyz[i][j1].done = 1; + } + else{ + r = rand(); + } + } + if ( j1 > j0 + 1 ) { + if ( !xyz[i0][j].done ) { + xyz[i0][j].pp[2] = xyz[i0][j0].pp[2] + + ( xyz[i0][j1].pp[2] - xyz[i0][j0].pp[2] ) * (double)( j - j0 ) / (double)( j1 - j0 ) + + ( (double)( j - j0 ) ) * ( -Roughness / 2. + Roughness * ( (double)rand() / (double)RAND_MAX ) ); + xyz[i0][j].done = 1; + } + else{ + r = rand(); + } + if ( ( i1 > i0 ) && ( !xyz[i1][j].done ) ) { + xyz[i1][j].pp[2] = xyz[i1][j0].pp[2] + + ( xyz[i1][j1].pp[2] - xyz[i1][j0].pp[2] ) * (double)( j - j0 ) / (double)( j1 - j0 ) + + ( (double)( j - j0 ) ) * ( -Roughness / 2. + Roughness * ( (double)rand() / (double)RAND_MAX ) ); + xyz[i1][j].done = 1; + } + else{ + r = rand(); + } + } + if ( ( i1 > i0 + 1 ) && ( j1 > j0 + 1 ) ) { + if ( !xyz[i][j].done ) { + z1 = xyz[i0][j].pp[2] + + ( xyz[i1][j].pp[2] - xyz[i0][j].pp[2] ) * (double)( i - i0 ) / (double)( i1 - i0 ); + z2 = xyz[i][j0].pp[2] + + ( xyz[i][j1].pp[2] - xyz[i][j0].pp[2] ) * (double)( j - j0 ) / (double)( j1 - j0 ); + xyz[i][j].pp[2] = ( z1 + z2 ) / 2. + + ( (double)( i - i0 ) ) * ( -Roughness / 2. + Roughness * ( (double)rand() / (double)RAND_MAX ) ); + xyz[i][j].done = 1; + } + else{ + r = rand(); + } + } + if ( i > i0 + 1 || j > j0 + 1 ) { + SubdividePlasma( i0,j0,i,j ); + } + if ( i1 > i + 1 || j > j0 + 1 ) { + SubdividePlasma( i,j0,i1,j ); + } + if ( i > i0 + 1 || j1 > j0 + 1 ) { + SubdividePlasma( i0,j,i,j1 ); + } + if ( i1 > i + 1 || j1 > j0 + 1 ) { + SubdividePlasma( i,j,i1,j1 ); + } } //================================================================================== -void PlasmaCloud() -{ - int i, j; - /* use pp[2] values until done to avoid messing with a bunch of - switch statements */ - - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - if(FixedPoint(i,j)) - xyz[i][j].done = 1; - else - xyz[i][j].done = 0; - } - } - - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - if(xyz[i][j].fixed) - xyz[i][j].pp[2] = xyz[i][j].fixed_value; - else - xyz[i][j].pp[2] = xyz[i][j].p[1]; - } - } - break; - case PLANE_YZ0: - case PLANE_YZ1: - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - if(xyz[i][j].fixed) - xyz[i][j].pp[2] = xyz[i][j].fixed_value; - else - xyz[i][j].pp[2] = xyz[i][j].p[0]; - } - } - break; - default: - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - if(xyz[i][j].fixed) - xyz[i][j].pp[2] = xyz[i][j].fixed_value; - else - xyz[i][j].pp[2] = xyz[i][j].p[2]; - } - } - break; - } - SubdividePlasma(0,0,NH,NV); - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - xyz[i][j].p[1] = xyz[i][j].pp[2]; - } - } - break; - case PLANE_YZ0: - case PLANE_YZ1: - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - xyz[i][j].p[0] = xyz[i][j].pp[2]; - } - } - break; - default: - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - xyz[i][j].p[2] = xyz[i][j].pp[2]; - } - } - break; - } +void PlasmaCloud(){ + int i, j; + /* use pp[2] values until done to avoid messing with a bunch of + switch statements */ + + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + if ( FixedPoint( i,j ) ) { + xyz[i][j].done = 1; + } + else{ + xyz[i][j].done = 0; + } + } + } + + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + if ( xyz[i][j].fixed ) { + xyz[i][j].pp[2] = xyz[i][j].fixed_value; + } + else{ + xyz[i][j].pp[2] = xyz[i][j].p[1]; + } + } + } + break; + case PLANE_YZ0: + case PLANE_YZ1: + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + if ( xyz[i][j].fixed ) { + xyz[i][j].pp[2] = xyz[i][j].fixed_value; + } + else{ + xyz[i][j].pp[2] = xyz[i][j].p[0]; + } + } + } + break; + default: + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + if ( xyz[i][j].fixed ) { + xyz[i][j].pp[2] = xyz[i][j].fixed_value; + } + else{ + xyz[i][j].pp[2] = xyz[i][j].p[2]; + } + } + } + break; + } + SubdividePlasma( 0,0,NH,NV ); + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + xyz[i][j].p[1] = xyz[i][j].pp[2]; + } + } + break; + case PLANE_YZ0: + case PLANE_YZ1: + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + xyz[i][j].p[0] = xyz[i][j].pp[2]; + } + } + break; + default: + for ( i = 0; i <= NH; i++ ) + { + for ( j = 0; j <= NV; j++ ) + { + xyz[i][j].p[2] = xyz[i][j].pp[2]; + } + } + break; + } } //=========================================================================== -bool FixedPoint(int i, int j) -{ - if(xyz[i][j].fixed) return TRUE; - return !CanEdit(i,j); +bool FixedPoint( int i, int j ){ + if ( xyz[i][j].fixed ) { + return TRUE; + } + return !CanEdit( i,j ); } //=========================================================================== -bool CanEdit(int i, int j) -{ - if(FixBorders && ( (WaveType==WAVE_COS_SIN) || (WaveType==WAVE_ROUGH_ONLY) ) ) - { - if(i== 0) return FALSE; - if(i==NH) return FALSE; - if(j== 0) return FALSE; - if(j==NV) return FALSE; - } - if(i== 0 && j== 0) return FALSE; - if(i==NH && j== 0) return FALSE; - if(i== 0 && j==NV) return FALSE; - if(i==NH && j==NV) return FALSE; - return TRUE; +bool CanEdit( int i, int j ){ + if ( FixBorders && ( ( WaveType == WAVE_COS_SIN ) || ( WaveType == WAVE_ROUGH_ONLY ) ) ) { + if ( i == 0 ) { + return FALSE; + } + if ( i == NH ) { + return FALSE; + } + if ( j == 0 ) { + return FALSE; + } + if ( j == NV ) { + return FALSE; + } + } + if ( i == 0 && j == 0 ) { + return FALSE; + } + if ( i == NH && j == 0 ) { + return FALSE; + } + if ( i == 0 && j == NV ) { + return FALSE; + } + if ( i == NH && j == NV ) { + return FALSE; + } + return TRUE; } /*============================================================================ - TriangleFromPoint - Determines which triangle in the gTri array bounds the input point. Doesn't - do anything special with border points. -*/ -int TriangleFromPoint(double x, double y) -{ - int j, tri; - - if(!gTri) return -1; - - for(j=0, tri=-1; jp[0],2.); - v[0][1] = (vec)Nearest(xyz->p[1],2.); - v[0][2] = (vec)Nearest(xyz->p[2],2.); +void XYZtoV( XYZ *xyz, vec3 *v ){ + v[0][0] = (vec)Nearest( xyz->p[0],2. ); + v[0][1] = (vec)Nearest( xyz->p[1],2. ); + v[0][2] = (vec)Nearest( xyz->p[2],2. ); } //============================================================= -void MakePatch(patchMesh_t *p) -{ - int ret; - char shadername[64+9]; - - ret = g_FuncTable.m_pfnCreatePatchHandle(); - // strcpy(shadername, "textures/"); - // strcpy(shadername+9, Texture[Game][0]); - strcpy(shadername, Texture[Game][0]); - g_FuncTable.m_pfnCommitPatchHandleToMap(ret,p,shadername); - g_FuncTable.m_pfnReleasePatchHandles(); +void MakePatch( patchMesh_t *p ){ + int ret; + char shadername[64 + 9]; + + ret = g_FuncTable.m_pfnCreatePatchHandle(); + // strcpy(shadername, "textures/"); + // strcpy(shadername+9, Texture[Game][0]); + strcpy( shadername, Texture[Game][0] ); + g_FuncTable.m_pfnCommitPatchHandleToMap( ret,p,shadername ); + g_FuncTable.m_pfnReleasePatchHandles(); } //============================================================= -void MakeBrush(BRUSH *brush) -{ - LPVOID vp; - int i; - _QERFaceData QERFaceData; - - if(g_FuncTable.m_pfnCreateBrushHandle==NULL) - { - g_FuncTable.m_pfnMessageBox(g_pRadiantWnd,"m_pfnCreateBrushHandle==NULL","Aw damn",0, NULL); - return; - } - vp=(g_FuncTable.m_pfnCreateBrushHandle)(); - if(!vp) return; - for(i=0; iNumFaces; i++) - { - if(!strncmp(brush->face[i].texture, "textures/", 9)) - strcpy(QERFaceData.m_TextureName,brush->face[i].texture); - else - { - strcpy(QERFaceData.m_TextureName,"textures/"); - strcpy(QERFaceData.m_TextureName+9,brush->face[i].texture); - } - QERFaceData.m_nContents = brush->face[i].Contents; - QERFaceData.m_nFlags = brush->face[i].Surface; - QERFaceData.m_nValue = brush->face[i].Value; - QERFaceData.m_fShift[0] = brush->face[i].Shift[0]; - QERFaceData.m_fShift[1] = brush->face[i].Shift[1]; - QERFaceData.m_fRotate = brush->face[i].Rotate; - QERFaceData.m_fScale[0] = brush->face[i].Scale[0]; - QERFaceData.m_fScale[1] = brush->face[i].Scale[1]; - QERFaceData.m_v1[0] = brush->face[i].v[0][0]; - QERFaceData.m_v1[1] = brush->face[i].v[0][1]; - QERFaceData.m_v1[2] = brush->face[i].v[0][2]; - QERFaceData.m_v2[0] = brush->face[i].v[1][0]; - QERFaceData.m_v2[1] = brush->face[i].v[1][1]; - QERFaceData.m_v2[2] = brush->face[i].v[1][2]; - QERFaceData.m_v3[0] = brush->face[i].v[2][0]; - QERFaceData.m_v3[1] = brush->face[i].v[2][1]; - QERFaceData.m_v3[2] = brush->face[i].v[2][2]; - QERFaceData.m_bBPrimit = false; - (g_FuncTable.m_pfnAddFaceData)(vp,&QERFaceData); - } - if(g_FuncTable.m_pfnCommitBrushHandle!=NULL) - { - if(h_func_group) - g_FuncTable.m_pfnCommitBrushHandleToEntity(vp,h_func_group); - else - g_FuncTable.m_pfnCommitBrushHandle(vp); - } +void MakeBrush( BRUSH *brush ){ + LPVOID vp; + int i; + _QERFaceData QERFaceData; + + if ( g_FuncTable.m_pfnCreateBrushHandle == NULL ) { + g_FuncTable.m_pfnMessageBox( g_pRadiantWnd,"m_pfnCreateBrushHandle==NULL","Aw damn",0, NULL ); + return; + } + vp = ( g_FuncTable.m_pfnCreateBrushHandle )(); + if ( !vp ) { + return; + } + for ( i = 0; i < brush->NumFaces; i++ ) + { + if ( !strncmp( brush->face[i].texture, "textures/", 9 ) ) { + strcpy( QERFaceData.m_TextureName,brush->face[i].texture ); + } + else + { + strcpy( QERFaceData.m_TextureName,"textures/" ); + strcpy( QERFaceData.m_TextureName + 9,brush->face[i].texture ); + } + QERFaceData.m_nContents = brush->face[i].Contents; + QERFaceData.m_nFlags = brush->face[i].Surface; + QERFaceData.m_nValue = brush->face[i].Value; + QERFaceData.m_fShift[0] = brush->face[i].Shift[0]; + QERFaceData.m_fShift[1] = brush->face[i].Shift[1]; + QERFaceData.m_fRotate = brush->face[i].Rotate; + QERFaceData.m_fScale[0] = brush->face[i].Scale[0]; + QERFaceData.m_fScale[1] = brush->face[i].Scale[1]; + QERFaceData.m_v1[0] = brush->face[i].v[0][0]; + QERFaceData.m_v1[1] = brush->face[i].v[0][1]; + QERFaceData.m_v1[2] = brush->face[i].v[0][2]; + QERFaceData.m_v2[0] = brush->face[i].v[1][0]; + QERFaceData.m_v2[1] = brush->face[i].v[1][1]; + QERFaceData.m_v2[2] = brush->face[i].v[1][2]; + QERFaceData.m_v3[0] = brush->face[i].v[2][0]; + QERFaceData.m_v3[1] = brush->face[i].v[2][1]; + QERFaceData.m_v3[2] = brush->face[i].v[2][2]; + QERFaceData.m_bBPrimit = false; + ( g_FuncTable.m_pfnAddFaceData )( vp,&QERFaceData ); + } + if ( g_FuncTable.m_pfnCommitBrushHandle != NULL ) { + if ( h_func_group ) { + g_FuncTable.m_pfnCommitBrushHandleToEntity( vp,h_func_group ); + } + else{ + g_FuncTable.m_pfnCommitBrushHandle( vp ); + } + } } //============================================================= -void OpenFuncGroup() -{ - if (g_FuncTable.m_pfnAllocateEpair!=NULL) - { - epair_t *ep; - - h_func_group = g_FuncTable.m_pfnCreateEntityHandle(); - ep = g_EntityTable.m_pfnAllocateEpair("classname","func_group"); - g_EntityTable.m_pfnSetEntityKeyValList((entity_t *)h_func_group,ep); - - if (AddTerrainKey) // ^Fishman - Add terrain key to func_group. - { +void OpenFuncGroup(){ + if ( g_FuncTable.m_pfnAllocateEpair != NULL ) { + epair_t *ep; + + h_func_group = g_FuncTable.m_pfnCreateEntityHandle(); + ep = g_EntityTable.m_pfnAllocateEpair( "classname","func_group" ); + g_EntityTable.m_pfnSetEntityKeyValList( (entity_t *)h_func_group,ep ); + + if ( AddTerrainKey ) { // ^Fishman - Add terrain key to func_group. epair_t *ep2; terrainkey = g_FuncTable.m_pfnCreateEntityHandle(); - ep2 = g_EntityTable.m_pfnAllocateEpair("terrain","1"); + ep2 = g_EntityTable.m_pfnAllocateEpair( "terrain","1" ); ep->next = ep2; - g_EntityTable.m_pfnSetEntityKeyValList((entity_t *)h_func_group,ep); + g_EntityTable.m_pfnSetEntityKeyValList( (entity_t *)h_func_group,ep ); } } - else - h_func_group = NULL; + else{ + h_func_group = NULL; + } } //============================================================= -void CloseFuncGroup() -{ - if (h_func_group) - g_FuncTable.m_pfnCommitEntityHandleToMap (h_func_group); - if (g_FuncTable.m_pfnSysUpdateWindows != NULL) - g_FuncTable.m_pfnSysUpdateWindows (W_ALL); +void CloseFuncGroup(){ + if ( h_func_group ) { + g_FuncTable.m_pfnCommitEntityHandleToMap( h_func_group ); + } + if ( g_FuncTable.m_pfnSysUpdateWindows != NULL ) { + g_FuncTable.m_pfnSysUpdateWindows( W_ALL ); + } } diff --git a/contrib/gtkgensurf/gensurf.cpp b/contrib/gtkgensurf/gensurf.cpp index 77ef3086..f06d060f 100644 --- a/contrib/gtkgensurf/gensurf.cpp +++ b/contrib/gtkgensurf/gensurf.cpp @@ -1,96 +1,96 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 #include #include /* -#include -#include -#include -*/ + #include + #include + #include + */ #include "gensurf.h" -char gszAppDir[NAME_MAX]; -char gszCaption[64]; -char gszIni[NAME_MAX]; -char gszHelpFile[NAME_MAX]; -char gszMapFile[NAME_MAX]; -char gszVersion[64]; -double Amplitude; -double Roughness; -double TexOffset[2]; -double TexScale[2]; -double WaveLength; -double Hll, Hur, Vll, Vur; -double Z00, Z01, Z10, Z11; -ELEMENT Vertex[(MAX_ROWS+1)*(MAX_ROWS+1)]; -int AddHints; -int ArghRad2; -int AutoOverwrite; -int Decimate=0; -int SnapToGrid=0; // 0, or the grid size to snap to. // Hydra : snap to grid -int FileAppend=0; -int FixBorders; -int HideBackFaces=0; -int NH, NV; -int NumVerticesSelected; -int Plane; -int Preview; -int RandomSeed=1; -int Skybox; -int UseDetail; -int UseLadder; -int VertexMode=0; -int WaveType; -int gNumNodes=0; -int gNumTris=0; -int vid_x, vid_y; -int view_x, view_y; -int view_cx, view_cy; -int UsePatches; -int SlantAngle; -int GimpHints; -int Antialiasing; // ^Fishman - Antializing for the preview window. -int AddTerrainKey; // ^Fishman - Add terrain key to func_group. -int SP; // ^Fishman - Snap to grid. +char gszAppDir[NAME_MAX]; +char gszCaption[64]; +char gszIni[NAME_MAX]; +char gszHelpFile[NAME_MAX]; +char gszMapFile[NAME_MAX]; +char gszVersion[64]; +double Amplitude; +double Roughness; +double TexOffset[2]; +double TexScale[2]; +double WaveLength; +double Hll, Hur, Vll, Vur; +double Z00, Z01, Z10, Z11; +ELEMENT Vertex[( MAX_ROWS + 1 ) * ( MAX_ROWS + 1 )]; +int AddHints; +int ArghRad2; +int AutoOverwrite; +int Decimate = 0; +int SnapToGrid = 0; // 0, or the grid size to snap to. // Hydra : snap to grid +int FileAppend = 0; +int FixBorders; +int HideBackFaces = 0; +int NH, NV; +int NumVerticesSelected; +int Plane; +int Preview; +int RandomSeed = 1; +int Skybox; +int UseDetail; +int UseLadder; +int VertexMode = 0; +int WaveType; +int gNumNodes = 0; +int gNumTris = 0; +int vid_x, vid_y; +int view_x, view_y; +int view_cx, view_cy; +int UsePatches; +int SlantAngle; +int GimpHints; +int Antialiasing; // ^Fishman - Antializing for the preview window. +int AddTerrainKey; // ^Fishman - Add terrain key to func_group. +int SP; // ^Fishman - Snap to grid. GtkWidget *g_pWnd; // ghwnd; GtkWidget *g_pRadiantWnd; // ghwnd_main; /*HWND ghwndAngles; -*/GtkWidget *g_pWndPreview; + */GtkWidget *g_pWndPreview; GtkWidget *g_pPreviewWidget; -MYBITMAP gbmp; -NODE *gNode=(NODE *)NULL; -TRI *gTri=(TRI *)NULL; +MYBITMAP gbmp; +NODE *gNode = (NODE *)NULL; +TRI *gTri = (TRI *)NULL; -int Game; +int Game; bounding_box PlayerBox[NUMGAMES] = { {{-16., 16.}, {-16., 16.}, {-24., 32.}}, // Quake2 - {{-16., 16.}, {-16., 16.}, {-36., 36.}}, // Half-Life - {{-16., 16.}, {-16., 16.}, {-32., 32.}}, // SiN - {{-16., 16.}, {-16., 16.}, {-24., 32.}}, // Heretic2 (guess) - {{-16., 16.}, {-16., 16.}, {-24., 32.}}, // KingPin (guess) - {{-30., 30.}, {-30., 30.}, {-10.,160.}}, // Genesis3D (no idea) - {{-16., 16.}, {-16., 16.}, {-24., 32.}}}; // Quake3 (not sure) + {{-16., 16.}, {-16., 16.}, {-36., 36.}}, // Half-Life + {{-16., 16.}, {-16., 16.}, {-32., 32.}}, // SiN + {{-16., 16.}, {-16., 16.}, {-24., 32.}}, // Heretic2 (guess) + {{-16., 16.}, {-16., 16.}, {-24., 32.}}, // KingPin (guess) + {{-30., 30.}, {-30., 30.}, {-10.,160.}}, // Genesis3D (no idea) + {{-16., 16.}, {-16., 16.}, {-24., 32.}}}; // Quake3 (not sure) //char gszOutputDir[NUMGAMES][NAME_MAX]; //char gszTextureDir[NUMGAMES][NAME_MAX]; -char Texture[NUMGAMES][3][64]; +char Texture[NUMGAMES][3][64]; //char pakfile[NUMGAMES][NAME_MAX]; //char lastpakfile[NUMGAMES][NAME_MAX]; //int UsePak[NUMGAMES]; @@ -99,21 +99,19 @@ char Texture[NUMGAMES][3][64]; char GameName[NUMGAMES][16] = {"Quake2", "Half-Life", "SiN", "Heretic2", "Kingpin", "Genesis3D", "Quake3" }; -bool GenSurfInit () -{ - strcpy (gszVersion, "1.05"); - strcpy (gszCaption, "GtkGenSurf"); - if (strlen (gszVersion)) - { - strcat (gszCaption, " v"); - strcat (gszCaption, gszVersion); - } +bool GenSurfInit(){ + strcpy( gszVersion, "1.05" ); + strcpy( gszCaption, "GtkGenSurf" ); + if ( strlen( gszVersion ) ) { + strcat( gszCaption, " v" ); + strcat( gszCaption, gszVersion ); + } - strcpy (gszIni, g_FuncTable.m_pfnProfileGetDirectory ()); - strcat (gszIni, "gensurf.ini"); + strcpy( gszIni, g_FuncTable.m_pfnProfileGetDirectory() ); + strcat( gszIni, "gensurf.ini" ); /*if (g_FuncTable.m_pfnReadProjectKey != NULL) - { + { char *basepath; basepath = g_FuncTable.m_pfnReadProjectKey("basepath"); @@ -129,341 +127,362 @@ bool GenSurfInit () } else Game = QUAKE3; - } - else */ - Game = QUAKE3; + } + else */ + Game = QUAKE3; - if (g_pWnd == NULL) - g_pWnd = create_main_dialog (); + if ( g_pWnd == NULL ) { + g_pWnd = create_main_dialog(); + } - ReadIniFile (gszIni); + ReadIniFile( gszIni ); - return true; + return true; } // Reads default values #define OPTS_SECTION "Options" -void ReadIniFile (const char *file) -{ - char *Text; - float x1,x2,x3,x4; - int i; - - Text = g_FuncTable.m_pfnProfileLoadString (file, OPTS_SECTION, "Amplitude", ""); - if (strlen (Text)) - Amplitude = atof (Text); - else - Amplitude = 128; - - Text = g_FuncTable.m_pfnProfileLoadString (file, OPTS_SECTION, "Roughness", ""); - if (strlen (Text)) - Roughness = atof (Text); - else - Roughness = 16; - - Text = g_FuncTable.m_pfnProfileLoadString (file, OPTS_SECTION, "WaveLength", ""); - if (strlen (Text)) - WaveLength = atof (Text); - else - WaveLength = 1024; - - Text = g_FuncTable.m_pfnProfileLoadString (file, OPTS_SECTION, "Extents", ""); - if (strlen (Text)) - { - sscanf(Text,"%f,%f,%f,%f",&x1,&x2,&x3,&x4); - Hll = x1; - Vll = x2; - Hur = x3; - Vur = x4; - } - else - { - Hll = -512; - Vll = -512; - Hur = 512; - Vur = 512; - } - - Text = g_FuncTable.m_pfnProfileLoadString (file, OPTS_SECTION, "CornerValues", ""); - if (strlen (Text)) - { - sscanf(Text,"%f,%f,%f,%f",&x1,&x2,&x3,&x4); - Z00 = x1; - Z01 = x2; - Z10 = x3; - Z11 = x4; - } - else - { - Z00 = 0.; - Z01 = 0.; - Z10 = 0.; - Z11 = 0.; - } - - Text = g_FuncTable.m_pfnProfileLoadString (file, OPTS_SECTION, "TextureOffset", ""); - if (strlen (Text)) - { - sscanf(Text,"%f,%f",&x1,&x2); - TexOffset[0] = x1; - TexOffset[1] = x2; - } - else - { - TexOffset[0] = 0.; - TexOffset[1] = 0.; - } - - Text = g_FuncTable.m_pfnProfileLoadString (file, OPTS_SECTION,"TextureScale",""); - if (strlen (Text)) - { - sscanf(Text,"%f,%f",&x1,&x2); - TexScale[0] = x1; - TexScale[1] = x2; - if(TexScale[0] == 0.) TexScale[0] = 1.0; - if(TexScale[1] == 0.) TexScale[1] = 1.0; - } - else - { - TexScale[0] = 1.; - TexScale[1] = 1.; - } - - NH = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"NH",8); - NH = max(1,min(NH,MAX_ROWS)); - NV = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"NV",8); - NV = max(1,min(NV,MAX_ROWS)); +void ReadIniFile( const char *file ){ + char *Text; + float x1,x2,x3,x4; + int i; + + Text = g_FuncTable.m_pfnProfileLoadString( file, OPTS_SECTION, "Amplitude", "" ); + if ( strlen( Text ) ) { + Amplitude = atof( Text ); + } + else{ + Amplitude = 128; + } + + Text = g_FuncTable.m_pfnProfileLoadString( file, OPTS_SECTION, "Roughness", "" ); + if ( strlen( Text ) ) { + Roughness = atof( Text ); + } + else{ + Roughness = 16; + } + + Text = g_FuncTable.m_pfnProfileLoadString( file, OPTS_SECTION, "WaveLength", "" ); + if ( strlen( Text ) ) { + WaveLength = atof( Text ); + } + else{ + WaveLength = 1024; + } + + Text = g_FuncTable.m_pfnProfileLoadString( file, OPTS_SECTION, "Extents", "" ); + if ( strlen( Text ) ) { + sscanf( Text,"%f,%f,%f,%f",&x1,&x2,&x3,&x4 ); + Hll = x1; + Vll = x2; + Hur = x3; + Vur = x4; + } + else + { + Hll = -512; + Vll = -512; + Hur = 512; + Vur = 512; + } + + Text = g_FuncTable.m_pfnProfileLoadString( file, OPTS_SECTION, "CornerValues", "" ); + if ( strlen( Text ) ) { + sscanf( Text,"%f,%f,%f,%f",&x1,&x2,&x3,&x4 ); + Z00 = x1; + Z01 = x2; + Z10 = x3; + Z11 = x4; + } + else + { + Z00 = 0.; + Z01 = 0.; + Z10 = 0.; + Z11 = 0.; + } + + Text = g_FuncTable.m_pfnProfileLoadString( file, OPTS_SECTION, "TextureOffset", "" ); + if ( strlen( Text ) ) { + sscanf( Text,"%f,%f",&x1,&x2 ); + TexOffset[0] = x1; + TexOffset[1] = x2; + } + else + { + TexOffset[0] = 0.; + TexOffset[1] = 0.; + } + + Text = g_FuncTable.m_pfnProfileLoadString( file, OPTS_SECTION,"TextureScale","" ); + if ( strlen( Text ) ) { + sscanf( Text,"%f,%f",&x1,&x2 ); + TexScale[0] = x1; + TexScale[1] = x2; + if ( TexScale[0] == 0. ) { + TexScale[0] = 1.0; + } + if ( TexScale[1] == 0. ) { + TexScale[1] = 1.0; + } + } + else + { + TexScale[0] = 1.; + TexScale[1] = 1.; + } + + NH = g_FuncTable.m_pfnProfileLoadInt( file, OPTS_SECTION,"NH",8 ); + NH = max( 1,min( NH,MAX_ROWS ) ); + NV = g_FuncTable.m_pfnProfileLoadInt( file, OPTS_SECTION,"NV",8 ); + NV = max( 1,min( NV,MAX_ROWS ) ); // Decimate = GetPrivateProfileInt(OPTS_SECTION,"Decimate",0,file); // Decimate = max(0,min(Decimate,100)); - AddHints = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"AddHints",0); - ArghRad2 = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"ArghRad2",0); - AutoOverwrite = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"AutoOverwrite",0); - FixBorders = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"FixBorders",1); - HideBackFaces = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"HideBackFaces",0); - Plane = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"Plane",0); - Preview = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"Preview", 0); - Antialiasing = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"Antialiasing",0); // ^Fishman - Antializing for the preview window. - RandomSeed = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"RandomSeed",1); - Skybox = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"Skybox",0); - UseDetail = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"UseDetail",0); - AddTerrainKey = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"AddTerrainKey",0); // ^Fishman - Add terrain key to func_group. - UseLadder = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"UseLadder",0); - WaveType = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"WaveType",0); - vid_x = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"vid_x", 0); - vid_y = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"vid_y", 0); - view_x = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"view_x",0); - view_y = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"view_y",0); - view_cx = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"view_cx",0); - view_cy = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"view_cy",0); - - UsePatches = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"UsePatches",0); - - SlantAngle = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"SlantAngle",60); - GimpHints = g_FuncTable.m_pfnProfileLoadInt (file, OPTS_SECTION,"GimpHints",0); - - for(i=0; i -inline T min (T x, T y) { return (x < y) ? x : y; } +inline T min( T x, T y ) { return ( x < y ) ? x : y; } template -inline T max (T x, T y) { return (x > y) ? x : y; } +inline T max( T x, T y ) { return ( x > y ) ? x : y; } typedef struct { long x, y; } POINT; typedef struct { long left, top, right, bottom; } RECT; #endif -inline bool PtInRect (RECT *rc, POINT pt) -{ - if (pt.x < rc->left) return false; - if (pt.x > rc->right) return false; - if (pt.y < rc->bottom) return false; - if (pt.y > rc->top) return false; - return true; +inline bool PtInRect( RECT *rc, POINT pt ){ + if ( pt.x < rc->left ) { + return false; + } + if ( pt.x > rc->right ) { + return false; + } + if ( pt.y < rc->bottom ) { + return false; + } + if ( pt.y > rc->top ) { + return false; + } + return true; } #define NUMGAMES 7 #define CONTENTS_SOLID 0x00000001 -#define CONTENTS_DETAIL 0x08000000 // brushes to be added after vis leafs -#define CONTENTS_LADDER 0x20000000 -#define SURF_HINT 0x100 // make a primary bsp splitter -#define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes +#define CONTENTS_DETAIL 0x08000000 // brushes to be added after vis leafs +#define CONTENTS_LADDER 0x20000000 +#define SURF_HINT 0x100 // make a primary bsp splitter +#define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes #define HINT_OFFSET 96 #define PI 3.14159265358979224 -#define RadiansToDegrees(a) (floor(a*57.2957795 - 0.5)+1.) -#define DegreesToRadians(a) (a/57.2957795) - -#define BOGUS_RANGE 65536 -#define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2]) -#define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];} -#define VectorClear(x) {x[0] = x[1] = x[2] = 0;} -#define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];} -#define VectorScale(a,b,c) {c[0]=b*a[0];c[1]=b*a[1];c[2]=b*a[2];} -#define VectorSubtract(a,b,c) {c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];} -#define XYZVectorSubtract(a,b,c) {c[0]=(float)a[0]-(float)b[0];c[1]=(float)a[1]-(float)b[1];c[2]=(float)a[2]-(float)b[2];} -#define side(u1,v1,u2,v2,u3,v3) (v3-v1)*(u2-u1) - (u3-u1)*(v2-v1) +#define RadiansToDegrees( a ) ( floor( a * 57.2957795 - 0.5 ) + 1. ) +#define DegreesToRadians( a ) ( a / 57.2957795 ) + +#define BOGUS_RANGE 65536 +#define DotProduct( x,y ) ( x[0] * y[0] + x[1] * y[1] + x[2] * y[2] ) +#define VectorAdd( a,b,c ) {c[0] = a[0] + b[0]; c[1] = a[1] + b[1]; c[2] = a[2] + b[2]; } +#define VectorClear( x ) {x[0] = x[1] = x[2] = 0; } +#define VectorCopy( a,b ) {b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; } +#define VectorScale( a,b,c ) {c[0] = b * a[0]; c[1] = b * a[1]; c[2] = b * a[2]; } +#define VectorSubtract( a,b,c ) {c[0] = a[0] - b[0]; c[1] = a[1] - b[1]; c[2] = a[2] - b[2]; } +#define XYZVectorSubtract( a,b,c ) {c[0] = (float)a[0] - (float)b[0]; c[1] = (float)a[1] - (float)b[1]; c[2] = (float)a[2] - (float)b[2]; } +#define side( u1,v1,u2,v2,u3,v3 ) ( v3 - v1 ) * ( u2 - u1 ) - ( u3 - u1 ) * ( v2 - v1 ) #define QUAKE2 0 #define HALFLIFE 1 @@ -84,9 +91,9 @@ inline bool PtInRect (RECT *rc, POINT pt) #define QUAKE3 6 #define MAX_FACES_PER_BRUSH 6 -#define SLIVER_ANGLE DegreesToRadians(20) -#define MAX_NODES (MAX_ROWS+1)*(MAX_ROWS+1) -#define MAX_TRIS (MAX_ROWS)*(MAX_ROWS) +#define SLIVER_ANGLE DegreesToRadians( 20 ) +#define MAX_NODES ( MAX_ROWS + 1 ) * ( MAX_ROWS + 1 ) +#define MAX_TRIS (MAX_ROWS)*( MAX_ROWS ) typedef float vec; typedef vec vec3[3]; @@ -94,32 +101,32 @@ typedef vec vec2[2]; typedef struct { - vec3 v[3]; - char texture[64]; - float Shift[2]; - float Rotate; - float Scale[2]; - int Contents; - int Surface; - int Value; + vec3 v[3]; + char texture[64]; + float Shift[2]; + float Rotate; + float Scale[2]; + int Contents; + int Surface; + int Value; } FACE; typedef struct { vec3 normal; - vec dist; + vec dist; } PLANE; typedef struct { - int numpoints; - vec3 p[4]; // variable sized + int numpoints; + vec3 p[4]; // variable sized } MY_WINDING; typedef struct { - int Number; - int NumFaces; + int Number; + int NumFaces; FACE face[MAX_FACES_PER_BRUSH]; } BRUSH; @@ -150,131 +157,131 @@ typedef struct } pak_item_t; // SiN .SIN structures -#define SINPAKHEADER (('K'<<24)+('A'<<16)+('P'<<8)+'S') +#define SINPAKHEADER ( ( 'K' << 24 ) + ( 'A' << 16 ) + ( 'P' << 8 ) + 'S' ) #define MAX_PAK_FILENAME_LENGTH 120 typedef struct { - char name[MAX_PAK_FILENAME_LENGTH]; - int filepos, filelen; + char name[MAX_PAK_FILENAME_LENGTH]; + int filepos, filelen; } dpackfile_t; typedef struct { - int ident; // == IDPAKHEADER - int dirofs; - int dirlen; + int ident; // == IDPAKHEADER + int dirofs; + int dirlen; } dpackheader_t; // Half-Life WAD file structures typedef struct { - char identification[4]; // should be WAD2 or 2DAW - int numlumps; - int infotableofs; + char identification[4]; // should be WAD2 or 2DAW + int numlumps; + int infotableofs; } wadinfo_t; typedef struct { - int filepos; - int disksize; - int size; // uncompressed - char type; - char compression; - char pad1, pad2; - char name[16]; // must be null terminated + int filepos; + int disksize; + int size; // uncompressed + char type; + char compression; + char pad1, pad2; + char name[16]; // must be null terminated } lumpinfo_t; typedef struct { - int signature; - short version; - short bitflag; - short compression_method; - short modfiletime; - short modfiledate; - int crc; - int compressed_size; - int uncompressed_size; - short filename_size; - short extra_size; + int signature; + short version; + short bitflag; + short compression_method; + short modfiletime; + short modfiledate; + int crc; + int compressed_size; + int uncompressed_size; + short filename_size; + short extra_size; } zipheader_t; typedef struct { - double x[2]; - double y[2]; - double z[2]; + double x[2]; + double y[2]; + double z[2]; } bounding_box; typedef struct { float p[3]; - int used; - int tri; + int used; + int tri; float error; - int fixed; + int fixed; } NODE; typedef struct { - int v[3]; - int n[3]; // indices of neighboring triangles + int v[3]; + int n[3]; // indices of neighboring triangles PLANE plane; - int flag; + int flag; float min[3]; float max[3]; } TRI; //--------------- bitmap.c ----------------------------- -bool OpenBitmap (); -void GenerateBitmapMapping (); +bool OpenBitmap(); +void GenerateBitmapMapping(); //--------------- face.c ------------------------------- -void PlaneFromPoints (float *, float *, float *, PLANE *); -void CrossProduct (vec3 v1, vec3 v2, vec3 cross); -vec VectorNormalize (vec3 in, vec3 out); +void PlaneFromPoints( float *, float *, float *, PLANE * ); +void CrossProduct( vec3 v1, vec3 v2, vec3 cross ); +vec VectorNormalize( vec3 in, vec3 out ); //--------------- gendlg.c ----------------------------- -GtkWidget* create_main_dialog (); -void About (GtkWidget *parent); +GtkWidget* create_main_dialog(); +void About( GtkWidget *parent ); //--------------- genmap.c ----------------------------- -double AtLeast(double,double); -bool CanEdit(int, int); +double AtLeast( double,double ); +bool CanEdit( int, int ); void CloseFuncGroup(); -bool FixedPoint(int,int); +bool FixedPoint( int,int ); void GenerateMap(); void GenerateXYZ(); -double LessThan(double,double); -void MakeBrush(BRUSH *); -double MoreThan(double,double); -double Nearest(double,double); -double NoMoreThan(double,double); +double LessThan( double,double ); +void MakeBrush( BRUSH * ); +double MoreThan( double,double ); +double Nearest( double,double ); +double NoMoreThan( double,double ); void OpenFuncGroup(); void PlasmaCloud(); -int PlayerStartZ(double,double); -void SubdividePlasma(int,int,int,int); +int PlayerStartZ( double,double ); +void SubdividePlasma( int,int,int,int ); bool ValidSurface(); -void XYZtoV(XYZ *, vec3 *); -void MakePatch(patchMesh_t *); -double CalculateSnapValue(double value); +void XYZtoV( XYZ *, vec3 * ); +void MakePatch( patchMesh_t * ); +double CalculateSnapValue( double value ); //---------------- gensurf.c --------------------------- -bool GenSurfInit (); -void ReadIniFile (const char *); -void WriteIniFile (const char *); -void OpenSetup (GtkWidget*,int); -void SaveSetup (GtkWidget*); +bool GenSurfInit(); +void ReadIniFile( const char * ); +void WriteIniFile( const char * ); +void OpenSetup( GtkWidget*,int ); +void SaveSetup( GtkWidget* ); //---------------- heretic.c --------------------------- -int GetDefSurfaceProps(char *); +int GetDefSurfaceProps( char * ); //---------------- view.c ------------------------------ -void CreateViewWindow (); -void DrawGrid(RECT); -void DrawPreview(RECT); +void CreateViewWindow(); +void DrawGrid( RECT ); +void DrawPreview( RECT ); void evaluate(); -void GetScaleFactor(RECT); -void project(XYZ *); -void Scale(RECT,XYZ,POINT *); -void ShowPreview (); -void UpdatePreview (bool); +void GetScaleFactor( RECT ); +void project( XYZ * ); +void Scale( RECT,XYZ,POINT * ); +void ShowPreview(); +void UpdatePreview( bool ); //---------------- plugin.c ----------------------------- void UseFaceBounds(); @@ -301,18 +308,18 @@ extern _QEREntityTable g_EntityTable; #define WAVE_FORMULA 5 #define WAVE_FIRST WAVE_COS_SIN #define WAVE_LAST WAVE_FORMULA -#define DLG_WAVE_LAST DLG_WAVE_01+WAVE_LAST-WAVE_FIRST +#define DLG_WAVE_LAST DLG_WAVE_01 + WAVE_LAST - WAVE_FIRST -#define MSG_VERTEX_SELECTED WM_USER+1 +#define MSG_VERTEX_SELECTED WM_USER + 1 typedef struct tagMYBITMAP { - char name[NAME_MAX]; - char defpath[NAME_MAX]; - double black_value; - double white_value; - int width, height; - unsigned char* colors; + char name[NAME_MAX]; + char defpath[NAME_MAX]; + double black_value; + double white_value; + int width, height; + unsigned char* colors; } MYBITMAP; typedef struct tagELEMENT { @@ -320,72 +327,72 @@ typedef struct tagELEMENT { int j; } ELEMENT; -extern char gszAppDir[NAME_MAX]; -extern char gszCaption[64]; -extern char gszHelpFile[NAME_MAX]; -extern char gszIni[NAME_MAX]; -extern char gszMapFile[NAME_MAX]; -extern char gszVersion[64]; -extern double Amplitude; -extern double Roughness; -extern double TexOffset[2]; -extern double TexScale[2]; -extern double WaveLength; -extern double Hll, Hur, Vll, Vur; -extern double Z00, Z01, Z10, Z11; -extern double yaw, pitch, roll; -extern ELEMENT Vertex[(MAX_ROWS+1)*(MAX_ROWS+1)]; -extern int AddHints; -extern int ArghRad2; -extern int AutoOverwrite; -extern int Decimate; -extern int FileAppend; -extern int FixBorders; -extern int HideBackFaces; -extern int NH, NV; -extern int NumVerticesSelected; -extern int Plane; -extern int Preview; -extern int RandomSeed; -extern int Skybox; -extern int UseDetail; -extern int UseLadder; -extern int VertexMode; -extern int vid_x, vid_y; -extern int WaveType; -extern int gNumNodes; -extern int gNumTris; -extern int view_x, view_y; -extern int view_cx, view_cy; -extern int UsePatches; -extern int SlantAngle; -extern int GimpHints; -extern int Antialiasing; // ^Fishman - Antializing for the preview window. -extern int AddTerrainKey; // ^Fishman - Add terrain key to func_group. -extern int SnapToGrid; // Hydra : snap to grid -extern int SP; // ^Fishman - Snap to grid. +extern char gszAppDir[NAME_MAX]; +extern char gszCaption[64]; +extern char gszHelpFile[NAME_MAX]; +extern char gszIni[NAME_MAX]; +extern char gszMapFile[NAME_MAX]; +extern char gszVersion[64]; +extern double Amplitude; +extern double Roughness; +extern double TexOffset[2]; +extern double TexScale[2]; +extern double WaveLength; +extern double Hll, Hur, Vll, Vur; +extern double Z00, Z01, Z10, Z11; +extern double yaw, pitch, roll; +extern ELEMENT Vertex[( MAX_ROWS + 1 ) * ( MAX_ROWS + 1 )]; +extern int AddHints; +extern int ArghRad2; +extern int AutoOverwrite; +extern int Decimate; +extern int FileAppend; +extern int FixBorders; +extern int HideBackFaces; +extern int NH, NV; +extern int NumVerticesSelected; +extern int Plane; +extern int Preview; +extern int RandomSeed; +extern int Skybox; +extern int UseDetail; +extern int UseLadder; +extern int VertexMode; +extern int vid_x, vid_y; +extern int WaveType; +extern int gNumNodes; +extern int gNumTris; +extern int view_x, view_y; +extern int view_cx, view_cy; +extern int UsePatches; +extern int SlantAngle; +extern int GimpHints; +extern int Antialiasing; // ^Fishman - Antializing for the preview window. +extern int AddTerrainKey; // ^Fishman - Add terrain key to func_group. +extern int SnapToGrid; // Hydra : snap to grid +extern int SP; // ^Fishman - Snap to grid. /*extern HCURSOR ghCursorCurrent; -extern HCURSOR ghCursorDefault; -extern HCURSOR ghCursorVertex; -extern HINSTANCE ghInst;*/ + extern HCURSOR ghCursorDefault; + extern HCURSOR ghCursorVertex; + extern HINSTANCE ghInst;*/ extern GtkWidget *g_pRadiantWnd; extern GtkWidget *g_pWnd; /*extern HWND ghwndAngles; -extern HWND ghwndFix; -*/extern GtkWidget *g_pWndPreview; + extern HWND ghwndFix; + */extern GtkWidget *g_pWndPreview; extern GtkWidget *g_pPreviewWidget; -extern MYBITMAP gbmp; +extern MYBITMAP gbmp; extern NODE *gNode; extern TRI *gTri; -extern XYZ xyz[MAX_ROWS+1][MAX_ROWS+1]; +extern XYZ xyz[MAX_ROWS + 1][MAX_ROWS + 1]; -extern int Game; +extern int Game; extern bounding_box PlayerBox[NUMGAMES]; //extern char gszOutputDir[NUMGAMES][NAME_MAX]; -extern char Texture[NUMGAMES][3][64]; +extern char Texture[NUMGAMES][3][64]; //extern char gszTextureDir[NUMGAMES][NAME_MAX]; -extern char GameName[NUMGAMES][16]; +extern char GameName[NUMGAMES][16]; //extern char pakfile[NUMGAMES][NAME_MAX]; //extern char lastpakfile[NUMGAMES][NAME_MAX]; //extern int UsePak[NUMGAMES]; diff --git a/contrib/gtkgensurf/heretic.cpp b/contrib/gtkgensurf/heretic.cpp index 4fb19a23..e07a378b 100644 --- a/contrib/gtkgensurf/heretic.cpp +++ b/contrib/gtkgensurf/heretic.cpp @@ -1,21 +1,21 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 #include @@ -26,125 +26,124 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA typedef struct palette_s { - guint8 r,g,b; + guint8 r,g,b; } palette_t; -#define MIP_VERSION 2 -#define PAL_SIZE 256 -#define MIPLEVELS 16 +#define MIP_VERSION 2 +#define PAL_SIZE 256 +#define MIPLEVELS 16 typedef struct miptex_s { - int version; - char name[32]; - unsigned width[MIPLEVELS], height[MIPLEVELS]; - unsigned offsets[MIPLEVELS]; // four mip maps stored - char animname[32]; // next frame in animation chain - palette_t palette[PAL_SIZE]; - int flags; - int contents; - int value; + int version; + char name[32]; + unsigned width[MIPLEVELS], height[MIPLEVELS]; + unsigned offsets[MIPLEVELS]; // four mip maps stored + char animname[32]; // next frame in animation chain + palette_t palette[PAL_SIZE]; + int flags; + int contents; + int value; } miptex_t; //============================================================= -int GetDefSurfaceProps(char *Tex) -{ - return 0; // leo: only used for Heretic 2, fix later - /* - char path[NAME_MAX]; - char *p; - int flags; - miptex_t *mt; - FILE *f; - int length; - int pos; +int GetDefSurfaceProps( char *Tex ){ + return 0; // leo: only used for Heretic 2, fix later + /* + char path[NAME_MAX]; + char *p; + int flags; + miptex_t *mt; + FILE *f; + int length; + int pos; - if(Game != HERETIC2) return 0; - if(!strlen(Tex)) return 0; + if(Game != HERETIC2) return 0; + if(!strlen(Tex)) return 0; - mt = NULL; - flags = 0; - if(UsePak[Game]) - { - FILE *fpak; - pak_header_t pakheader; - pak_item_t pakitem; - int i; - int num; - int numitems; + mt = NULL; + flags = 0; + if(UsePak[Game]) + { + FILE *fpak; + pak_header_t pakheader; + pak_item_t pakitem; + int i; + int num; + int numitems; - if (NULL != (fpak = fopen(pakfile[Game], "rb"))) - { - sprintf(path,"textures/%s.m8",Tex); - g_strdown(path); - num=fread(&pakheader,1,sizeof(pak_header_t),fpak); - if((size_t)num < sizeof(pak_header_t)) - { - fclose(fpak); - return 0; - } - if(strncmp(pakheader.id,"PACK",4)) - { - fclose(fpak); - return 0; - } - numitems = pakheader.dsize/sizeof(pak_item_t); - fseek(fpak,pakheader.dstart,SEEK_SET); - for(i=0; iflags; - free(mt); - } - } - } - fclose(fpak); - } - } - else - { - // Assume .map will be output to gamedir/maps, then back up - // to the gamedir and append /textures. Ugly but it should work - strcpy(path,gszMapFile); - g_strdown(path); - p = strstr(path,"maps"); - if(!p) return 0; - p[0] = '\0'; - strcat(path,"textures/"); - strcat(path,Tex); - strcat(path,".m8"); - f = fopen (path, "rb"); - if (!f) - flags = 0; - else - { - pos = ftell (f); - fseek (f, 0, SEEK_END); - length = ftell (f); - fseek (f, pos, SEEK_SET); - if((mt = (miptex_t*)malloc(length+1))==NULL) - flags = 0; - else - { - ((char *)mt)[length] = 0; - fread(mt, 1, length, f); - fclose (f); - flags = mt->flags; - free(mt); - } - } - } - return flags; - */ + if (NULL != (fpak = fopen(pakfile[Game], "rb"))) + { + sprintf(path,"textures/%s.m8",Tex); + g_strdown(path); + num=fread(&pakheader,1,sizeof(pak_header_t),fpak); + if((size_t)num < sizeof(pak_header_t)) + { + fclose(fpak); + return 0; + } + if(strncmp(pakheader.id,"PACK",4)) + { + fclose(fpak); + return 0; + } + numitems = pakheader.dsize/sizeof(pak_item_t); + fseek(fpak,pakheader.dstart,SEEK_SET); + for(i=0; iflags; + free(mt); + } + } + } + fclose(fpak); + } + } + else + { + // Assume .map will be output to gamedir/maps, then back up + // to the gamedir and append /textures. Ugly but it should work + strcpy(path,gszMapFile); + g_strdown(path); + p = strstr(path,"maps"); + if(!p) return 0; + p[0] = '\0'; + strcat(path,"textures/"); + strcat(path,Tex); + strcat(path,".m8"); + f = fopen (path, "rb"); + if (!f) + flags = 0; + else + { + pos = ftell (f); + fseek (f, 0, SEEK_END); + length = ftell (f); + fseek (f, pos, SEEK_SET); + if((mt = (miptex_t*)malloc(length+1))==NULL) + flags = 0; + else + { + ((char *)mt)[length] = 0; + fread(mt, 1, length, f); + fclose (f); + flags = mt->flags; + free(mt); + } + } + } + return flags; + */ } diff --git a/contrib/gtkgensurf/plugin.cpp b/contrib/gtkgensurf/plugin.cpp index ec8e6a3f..2ec3d469 100644 --- a/contrib/gtkgensurf/plugin.cpp +++ b/contrib/gtkgensurf/plugin.cpp @@ -1,21 +1,21 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 "gensurf.h" @@ -29,137 +29,121 @@ bool g_bInitDone; #include "iplugin.h" -const char* QERPlug_Init(void* hApp, void* pMainWidget) -{ - g_pRadiantWnd = (GtkWidget*)pMainWidget; +const char* QERPlug_Init( void* hApp, void* pMainWidget ){ + g_pRadiantWnd = (GtkWidget*)pMainWidget; - return "GenSurf for Q3Radiant"; + return "GenSurf for Q3Radiant"; } -const char* QERPlug_GetName () -{ - return "GtkGenSurf"; +const char* QERPlug_GetName(){ + return "GtkGenSurf"; } -const char* QERPlug_GetCommandList () -{ - return "Wall facing 270...;Wall facing 180...;Wall facing 90...;Wall facing 0...;" - "Ceiling...;Ground surface...;-;About..."; +const char* QERPlug_GetCommandList(){ + return "Wall facing 270...;Wall facing 180...;Wall facing 90...;Wall facing 0...;" + "Ceiling...;Ground surface...;-;About..."; } // vMin/vMax provide the bounds of the selection, they are zero if there is no selection // if there is a selection, bSingleBrush will be true if a single brush is selected // if so, typical plugin behaviour (such as primitive creation) would use the bounds as // a rule to create the primitive, then delete the selection -void QERPlug_Dispatch (const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) -{ - bool Generate = false; - - if (!g_bInitDone) - { - if (GenSurfInit ()) - g_bInitDone = true; - } - - if (!strcmp (p, "Ground surface...")) - { - SingleBrushSelected = bSingleBrush; - Plane = PLANE_XY0; - if (SingleBrushSelected) - { - Hll = vMin[0]; - Vll = vMin[1]; - Hur = vMax[0]; - Vur = vMax[1]; - Z00 = Z01 = Z10 = Z11 = vMax[2]; - } - Generate = true; - } - else if (!strcmp (p, "Ceiling...")) - { - SingleBrushSelected = bSingleBrush; - Plane = PLANE_XY1; - if(SingleBrushSelected) - { - Hll = vMin[0]; - Vll = vMin[1]; - Hur = vMax[0]; - Vur = vMax[1]; - Z00 = Z01 = Z10 = Z11 = vMin[2]; - } - Generate = true; - } - else if (!strcmp (p, "Wall facing 0...")) - { - SingleBrushSelected = bSingleBrush; - Plane = PLANE_YZ0; - if (SingleBrushSelected) - { - Hll = vMin[1]; - Vll = vMin[2]; - Hur = vMax[1]; - Vur = vMax[2]; - Z00 = Z01 = Z10 = Z11 = vMax[0]; - } - Generate = true; - } - else if (!strcmp (p, "Wall facing 90...")) - { - SingleBrushSelected = bSingleBrush; - Plane = PLANE_XZ0; - if (SingleBrushSelected) - { - Hll = vMin[0]; - Vll = vMin[2]; - Hur = vMax[0]; - Vur = vMax[2]; - Z00 = Z01 = Z10 = Z11 = vMax[1]; - } - Generate = true; - } - else if (!strcmp (p, "Wall facing 180...")) - { - SingleBrushSelected = bSingleBrush; - Plane = PLANE_YZ1; - if (SingleBrushSelected) - { - Hll = vMin[1]; - Vll = vMin[2]; - Hur = vMax[1]; - Vur = vMax[2]; - Z00 = Z01 = Z10 = Z11 = vMin[0]; - } - Generate = true; - } - else if (!strcmp (p, "Wall facing 270...")) - { - SingleBrushSelected = bSingleBrush; - Plane = PLANE_XZ1; - if (SingleBrushSelected) - { - Hll = vMin[0]; - Vll = vMin[2]; - Hur = vMax[0]; - Vur = vMax[2]; - Z00 = Z01 = Z10 = Z11 = vMin[1]; - } - Generate = true; - } - else if (!strcmp(p,"About...")) - About (g_pRadiantWnd); - - if (Generate) - { - if (SingleBrushSelected) - UseFaceBounds (); - - gtk_widget_show (g_pWnd); - } +void QERPlug_Dispatch( const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ){ + bool Generate = false; + + if ( !g_bInitDone ) { + if ( GenSurfInit() ) { + g_bInitDone = true; + } + } + + if ( !strcmp( p, "Ground surface..." ) ) { + SingleBrushSelected = bSingleBrush; + Plane = PLANE_XY0; + if ( SingleBrushSelected ) { + Hll = vMin[0]; + Vll = vMin[1]; + Hur = vMax[0]; + Vur = vMax[1]; + Z00 = Z01 = Z10 = Z11 = vMax[2]; + } + Generate = true; + } + else if ( !strcmp( p, "Ceiling..." ) ) { + SingleBrushSelected = bSingleBrush; + Plane = PLANE_XY1; + if ( SingleBrushSelected ) { + Hll = vMin[0]; + Vll = vMin[1]; + Hur = vMax[0]; + Vur = vMax[1]; + Z00 = Z01 = Z10 = Z11 = vMin[2]; + } + Generate = true; + } + else if ( !strcmp( p, "Wall facing 0..." ) ) { + SingleBrushSelected = bSingleBrush; + Plane = PLANE_YZ0; + if ( SingleBrushSelected ) { + Hll = vMin[1]; + Vll = vMin[2]; + Hur = vMax[1]; + Vur = vMax[2]; + Z00 = Z01 = Z10 = Z11 = vMax[0]; + } + Generate = true; + } + else if ( !strcmp( p, "Wall facing 90..." ) ) { + SingleBrushSelected = bSingleBrush; + Plane = PLANE_XZ0; + if ( SingleBrushSelected ) { + Hll = vMin[0]; + Vll = vMin[2]; + Hur = vMax[0]; + Vur = vMax[2]; + Z00 = Z01 = Z10 = Z11 = vMax[1]; + } + Generate = true; + } + else if ( !strcmp( p, "Wall facing 180..." ) ) { + SingleBrushSelected = bSingleBrush; + Plane = PLANE_YZ1; + if ( SingleBrushSelected ) { + Hll = vMin[1]; + Vll = vMin[2]; + Hur = vMax[1]; + Vur = vMax[2]; + Z00 = Z01 = Z10 = Z11 = vMin[0]; + } + Generate = true; + } + else if ( !strcmp( p, "Wall facing 270..." ) ) { + SingleBrushSelected = bSingleBrush; + Plane = PLANE_XZ1; + if ( SingleBrushSelected ) { + Hll = vMin[0]; + Vll = vMin[2]; + Hur = vMax[0]; + Vur = vMax[2]; + Z00 = Z01 = Z10 = Z11 = vMin[1]; + } + Generate = true; + } + else if ( !strcmp( p,"About..." ) ) { + About( g_pRadiantWnd ); + } + + if ( Generate ) { + if ( SingleBrushSelected ) { + UseFaceBounds(); + } + + gtk_widget_show( g_pWnd ); + } } -extern "C" LPVOID WINAPI QERPlug_GetFuncTable() -{ - return &g_FuncTable; +extern "C" LPVOID WINAPI QERPlug_GetFuncTable(){ + return &g_FuncTable; } // ============================================================================= @@ -170,12 +154,12 @@ extern "C" LPVOID WINAPI QERPlug_GetFuncTable() class GenSurfSynapseClient : public CSynapseClient { public: - // CSynapseClient API - bool RequestAPI(APIDescriptor_t *pAPI); - const char* GetInfo(); - - GenSurfSynapseClient() { } - virtual ~GenSurfSynapseClient() { } +// CSynapseClient API +bool RequestAPI( APIDescriptor_t *pAPI ); +const char* GetInfo(); + +GenSurfSynapseClient() { } +virtual ~GenSurfSynapseClient() { } }; CSynapseServer* g_pSynapseServer = NULL; @@ -184,49 +168,45 @@ GenSurfSynapseClient g_SynapseClient; #if __GNUC__ >= 4 #pragma GCC visibility push(default) #endif -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) { +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, "gtkgensurf", sizeof(_QERPluginTable)); - - g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(_QERFuncTable_1), SYN_REQUIRE, &g_FuncTable); - g_SynapseClient.AddAPI(UIGTK_MAJOR, NULL, sizeof(_QERUIGtkTable), SYN_REQUIRE, &g_UIGtkTable); - g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(_QERQglTable), SYN_REQUIRE, &g_GLTable); - g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(_QEREntityTable), SYN_REQUIRE, &g_EntityTable); - - return &g_SynapseClient; + 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, "gtkgensurf", sizeof( _QERPluginTable ) ); + + g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( _QERFuncTable_1 ), SYN_REQUIRE, &g_FuncTable ); + g_SynapseClient.AddAPI( UIGTK_MAJOR, NULL, sizeof( _QERUIGtkTable ), SYN_REQUIRE, &g_UIGtkTable ); + g_SynapseClient.AddAPI( QGL_MAJOR, NULL, sizeof( _QERQglTable ), SYN_REQUIRE, &g_GLTable ); + g_SynapseClient.AddAPI( ENTITY_MAJOR, NULL, sizeof( _QEREntityTable ), SYN_REQUIRE, &g_EntityTable ); + + return &g_SynapseClient; } -bool GenSurfSynapseClient::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; +bool GenSurfSynapseClient::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; } #include "version.h" -const char* GenSurfSynapseClient::GetInfo() -{ - return "GtkGenSurf - built " __DATE__ " " RADIANT_VERSION; +const char* GenSurfSynapseClient::GetInfo(){ + return "GtkGenSurf - built " __DATE__ " " RADIANT_VERSION; } diff --git a/contrib/gtkgensurf/triangle.c b/contrib/gtkgensurf/triangle.c index 1e155cac..8d4e0c98 100644 --- a/contrib/gtkgensurf/triangle.c +++ b/contrib/gtkgensurf/triangle.c @@ -352,7 +352,7 @@ enum locateresult {INTRIANGLE, ONEDGE, ONVERTEX, OUTSIDE}; /* or was not inserted because another point occupies the same location. */ enum insertsiteresult {SUCCESSFULPOINT, ENCROACHINGPOINT, VIOLATINGPOINT, - DUPLICATEPOINT}; + DUPLICATEPOINT}; /* Labels that signify the result of direction finding. The result */ /* indicates that a segment connecting the two query points falls within */ @@ -488,8 +488,8 @@ typedef REAL **triangle; /* Really: typedef triangle *triangle */ /* directed to point counterclockwise about the corresponding triangle. */ struct triedge { - triangle *tri; - int orient; /* Ranges from 0 to 2. */ + triangle *tri; + int orient; /* Ranges from 0 to 2. */ }; /* The shell data structure. Each shell edge contains two pointers to */ @@ -504,8 +504,8 @@ typedef REAL **shelle; /* Really: typedef shelle *shelle */ /* directed so that the "side" denoted is the right side of the edge. */ struct edge { - shelle *sh; - int shorient; /* Ranges from 0 to 1. */ + shelle *sh; + int shorient; /* Ranges from 0 to 1. */ }; /* The point data structure. Each point is actually an array of REALs. */ @@ -519,9 +519,9 @@ typedef REAL *point; /* stored so that one can check whether a segment is still the same. */ struct badsegment { - struct edge encsegment; /* An encroached segment. */ - point segorg, segdest; /* The two vertices. */ - struct badsegment *nextsegment; /* Pointer to next encroached segment. */ + struct edge encsegment; /* An encroached segment. */ + point segorg, segdest; /* The two vertices. */ + struct badsegment *nextsegment; /* Pointer to next encroached segment. */ }; /* A queue used to store bad triangles. The key is the square of the cosine */ @@ -529,10 +529,10 @@ struct badsegment { /* stored so that one can check whether a triangle is still the same. */ struct badface { - struct triedge badfacetri; /* A bad triangle. */ - REAL key; /* cos^2 of smallest (apical) angle. */ - point faceorg, facedest, faceapex; /* The three vertices. */ - struct badface *nextface; /* Pointer to next bad triangle. */ + struct triedge badfacetri; /* A bad triangle. */ + REAL key; /* cos^2 of smallest (apical) angle. */ + point faceorg, facedest, faceapex; /* The three vertices. */ + struct badface *nextface; /* Pointer to next bad triangle. */ }; /* A node in a heap used to store events for the sweepline Delaunay */ @@ -546,9 +546,9 @@ struct badface { /* events are given an invalid (smaller than `xmin') x-coordinate `xkey'. */ struct event { - REAL xkey, ykey; /* Coordinates of the event. */ - VOID *eventptr; /* Can be a point or the location of a circle event. */ - int heapposition; /* Marks this event's position in the heap. */ + REAL xkey, ykey; /* Coordinates of the event. */ + VOID *eventptr; /* Can be a point or the location of a circle event. */ + int heapposition; /* Marks this event's position in the heap. */ }; /* A node in the splay tree. Each node holds an oriented ghost triangle */ @@ -563,9 +563,9 @@ struct event { /* boundary edge and should be deleted. */ struct splaynode { - struct triedge keyedge; /* Lprev of an edge on the front. */ - point keydest; /* Used to verify that splay node is still live. */ - struct splaynode *lchild, *rchild; /* Children in splay tree. */ + struct triedge keyedge; /* Lprev of an edge on the front. */ + point keydest; /* Used to verify that splay node is still live. */ + struct splaynode *lchild, *rchild; /* Children in splay tree. */ }; /* A type used to allocate memory. firstblock is the first block of items. */ @@ -593,18 +593,18 @@ struct splaynode { /* on deaditemstack. */ struct memorypool { - VOID **firstblock, **nowblock; - VOID *nextitem; - VOID *deaditemstack; - VOID **pathblock; - VOID *pathitem; - enum wordtype itemwordtype; - int alignbytes; - int itembytes, itemwords; - int itemsperblock; - long items, maxitems; - int unallocateditems; - int pathitemsleft; + VOID **firstblock, **nowblock; + VOID *nextitem; + VOID *deaditemstack; + VOID **pathblock; + VOID *pathitem; + enum wordtype itemwordtype; + int alignbytes; + int itembytes, itemwords; + int itemsperblock; + long items, maxitems; + int unallocateditems; + int pathitemsleft; }; /* Variables used to allocate memory for triangles, shell edges, points, */ @@ -786,17 +786,17 @@ int minus1mod3[3] = {2, 0, 1}; /* decode() converts a pointer to an oriented triangle. The orientation is */ /* extracted from the two least significant bits of the pointer. */ -#define decode(ptr, triedge) \ - (triedge).orient = (int) ((unsigned long) (ptr) & (unsigned long) 3l); \ - (triedge).tri = (triangle *) \ - ((unsigned long) (ptr) ^ (unsigned long) (triedge).orient) +#define decode( ptr, triedge ) \ + ( triedge ).orient = (int) ( (unsigned long) ( ptr ) & (unsigned long) 3l ); \ + ( triedge ).tri = (triangle *) \ + ( (unsigned long) ( ptr ) ^ (unsigned long) ( triedge ).orient ) /* encode() compresses an oriented triangle into a single pointer. It */ /* relies on the assumption that all triangles are aligned to four-byte */ /* boundaries, so the two least significant bits of (triedge).tri are zero.*/ -#define encode(triedge) \ - (triangle) ((unsigned long) (triedge).tri | (unsigned long) (triedge).orient) +#define encode( triedge ) \ + (triangle) ( (unsigned long) ( triedge ).tri | (unsigned long) ( triedge ).orient ) /* The following edge manipulation primitives are all described by Guibas */ /* and Stolfi. However, they use an edge-based data structure, whereas I */ @@ -806,190 +806,190 @@ int minus1mod3[3] = {2, 0, 1}; /* edge direction is necessarily reversed, because triangle/edge handles */ /* are always directed counterclockwise around the triangle. */ -#define sym(triedge1, triedge2) \ - ptr = (triedge1).tri[(triedge1).orient]; \ - decode(ptr, triedge2); +#define sym( triedge1, triedge2 ) \ + ptr = ( triedge1 ).tri[( triedge1 ).orient]; \ + decode( ptr, triedge2 ); -#define symself(triedge) \ - ptr = (triedge).tri[(triedge).orient]; \ - decode(ptr, triedge); +#define symself( triedge ) \ + ptr = ( triedge ).tri[( triedge ).orient]; \ + decode( ptr, triedge ); /* lnext() finds the next edge (counterclockwise) of a triangle. */ -#define lnext(triedge1, triedge2) \ - (triedge2).tri = (triedge1).tri; \ - (triedge2).orient = plus1mod3[(triedge1).orient] +#define lnext( triedge1, triedge2 ) \ + ( triedge2 ).tri = ( triedge1 ).tri; \ + ( triedge2 ).orient = plus1mod3[( triedge1 ).orient] -#define lnextself(triedge) \ - (triedge).orient = plus1mod3[(triedge).orient] +#define lnextself( triedge ) \ + ( triedge ).orient = plus1mod3[( triedge ).orient] /* lprev() finds the previous edge (clockwise) of a triangle. */ -#define lprev(triedge1, triedge2) \ - (triedge2).tri = (triedge1).tri; \ - (triedge2).orient = minus1mod3[(triedge1).orient] +#define lprev( triedge1, triedge2 ) \ + ( triedge2 ).tri = ( triedge1 ).tri; \ + ( triedge2 ).orient = minus1mod3[( triedge1 ).orient] -#define lprevself(triedge) \ - (triedge).orient = minus1mod3[(triedge).orient] +#define lprevself( triedge ) \ + ( triedge ).orient = minus1mod3[( triedge ).orient] /* onext() spins counterclockwise around a point; that is, it finds the next */ /* edge with the same origin in the counterclockwise direction. This edge */ /* will be part of a different triangle. */ -#define onext(triedge1, triedge2) \ - lprev(triedge1, triedge2); \ - symself(triedge2); +#define onext( triedge1, triedge2 ) \ + lprev( triedge1, triedge2 ); \ + symself( triedge2 ); -#define onextself(triedge) \ - lprevself(triedge); \ - symself(triedge); +#define onextself( triedge ) \ + lprevself( triedge ); \ + symself( triedge ); /* oprev() spins clockwise around a point; that is, it finds the next edge */ /* with the same origin in the clockwise direction. This edge will be */ /* part of a different triangle. */ -#define oprev(triedge1, triedge2) \ - sym(triedge1, triedge2); \ - lnextself(triedge2); +#define oprev( triedge1, triedge2 ) \ + sym( triedge1, triedge2 ); \ + lnextself( triedge2 ); -#define oprevself(triedge) \ - symself(triedge); \ - lnextself(triedge); +#define oprevself( triedge ) \ + symself( triedge ); \ + lnextself( triedge ); /* dnext() spins counterclockwise around a point; that is, it finds the next */ /* edge with the same destination in the counterclockwise direction. This */ /* edge will be part of a different triangle. */ -#define dnext(triedge1, triedge2) \ - sym(triedge1, triedge2); \ - lprevself(triedge2); +#define dnext( triedge1, triedge2 ) \ + sym( triedge1, triedge2 ); \ + lprevself( triedge2 ); -#define dnextself(triedge) \ - symself(triedge); \ - lprevself(triedge); +#define dnextself( triedge ) \ + symself( triedge ); \ + lprevself( triedge ); /* dprev() spins clockwise around a point; that is, it finds the next edge */ /* with the same destination in the clockwise direction. This edge will */ /* be part of a different triangle. */ -#define dprev(triedge1, triedge2) \ - lnext(triedge1, triedge2); \ - symself(triedge2); +#define dprev( triedge1, triedge2 ) \ + lnext( triedge1, triedge2 ); \ + symself( triedge2 ); -#define dprevself(triedge) \ - lnextself(triedge); \ - symself(triedge); +#define dprevself( triedge ) \ + lnextself( triedge ); \ + symself( triedge ); /* rnext() moves one edge counterclockwise about the adjacent triangle. */ /* (It's best understood by reading Guibas and Stolfi. It involves */ /* changing triangles twice.) */ -#define rnext(triedge1, triedge2) \ - sym(triedge1, triedge2); \ - lnextself(triedge2); \ - symself(triedge2); +#define rnext( triedge1, triedge2 ) \ + sym( triedge1, triedge2 ); \ + lnextself( triedge2 ); \ + symself( triedge2 ); -#define rnextself(triedge) \ - symself(triedge); \ - lnextself(triedge); \ - symself(triedge); +#define rnextself( triedge ) \ + symself( triedge ); \ + lnextself( triedge ); \ + symself( triedge ); /* rnext() moves one edge clockwise about the adjacent triangle. */ /* (It's best understood by reading Guibas and Stolfi. It involves */ /* changing triangles twice.) */ -#define rprev(triedge1, triedge2) \ - sym(triedge1, triedge2); \ - lprevself(triedge2); \ - symself(triedge2); +#define rprev( triedge1, triedge2 ) \ + sym( triedge1, triedge2 ); \ + lprevself( triedge2 ); \ + symself( triedge2 ); -#define rprevself(triedge) \ - symself(triedge); \ - lprevself(triedge); \ - symself(triedge); +#define rprevself( triedge ) \ + symself( triedge ); \ + lprevself( triedge ); \ + symself( triedge ); /* These primitives determine or set the origin, destination, or apex of a */ /* triangle. */ -#define org(triedge, pointptr) \ - pointptr = (point) (triedge).tri[plus1mod3[(triedge).orient] + 3] +#define org( triedge, pointptr ) \ + pointptr = (point) ( triedge ).tri[plus1mod3[( triedge ).orient] + 3] -#define dest(triedge, pointptr) \ - pointptr = (point) (triedge).tri[minus1mod3[(triedge).orient] + 3] +#define dest( triedge, pointptr ) \ + pointptr = (point) ( triedge ).tri[minus1mod3[( triedge ).orient] + 3] -#define apex(triedge, pointptr) \ - pointptr = (point) (triedge).tri[(triedge).orient + 3] +#define apex( triedge, pointptr ) \ + pointptr = (point) ( triedge ).tri[( triedge ).orient + 3] -#define setorg(triedge, pointptr) \ - (triedge).tri[plus1mod3[(triedge).orient] + 3] = (triangle) pointptr +#define setorg( triedge, pointptr ) \ + ( triedge ).tri[plus1mod3[( triedge ).orient] + 3] = (triangle) pointptr -#define setdest(triedge, pointptr) \ - (triedge).tri[minus1mod3[(triedge).orient] + 3] = (triangle) pointptr +#define setdest( triedge, pointptr ) \ + ( triedge ).tri[minus1mod3[( triedge ).orient] + 3] = (triangle) pointptr -#define setapex(triedge, pointptr) \ - (triedge).tri[(triedge).orient + 3] = (triangle) pointptr +#define setapex( triedge, pointptr ) \ + ( triedge ).tri[( triedge ).orient + 3] = (triangle) pointptr -#define setvertices2null(triedge) \ - (triedge).tri[3] = (triangle) NULL; \ - (triedge).tri[4] = (triangle) NULL; \ - (triedge).tri[5] = (triangle) NULL; +#define setvertices2null( triedge ) \ + ( triedge ).tri[3] = (triangle) NULL; \ + ( triedge ).tri[4] = (triangle) NULL; \ + ( triedge ).tri[5] = (triangle) NULL; /* Bond two triangles together. */ -#define bond(triedge1, triedge2) \ - (triedge1).tri[(triedge1).orient] = encode(triedge2); \ - (triedge2).tri[(triedge2).orient] = encode(triedge1) +#define bond( triedge1, triedge2 ) \ + ( triedge1 ).tri[( triedge1 ).orient] = encode( triedge2 ); \ + ( triedge2 ).tri[( triedge2 ).orient] = encode( triedge1 ) /* Dissolve a bond (from one side). Note that the other triangle will still */ /* think it's connected to this triangle. Usually, however, the other */ /* triangle is being deleted entirely, or bonded to another triangle, so */ /* it doesn't matter. */ -#define dissolve(triedge) \ - (triedge).tri[(triedge).orient] = (triangle) dummytri +#define dissolve( triedge ) \ + ( triedge ).tri[( triedge ).orient] = (triangle) dummytri /* Copy a triangle/edge handle. */ -#define triedgecopy(triedge1, triedge2) \ - (triedge2).tri = (triedge1).tri; \ - (triedge2).orient = (triedge1).orient +#define triedgecopy( triedge1, triedge2 ) \ + ( triedge2 ).tri = ( triedge1 ).tri; \ + ( triedge2 ).orient = ( triedge1 ).orient /* Test for equality of triangle/edge handles. */ -#define triedgeequal(triedge1, triedge2) \ - (((triedge1).tri == (triedge2).tri) && \ - ((triedge1).orient == (triedge2).orient)) +#define triedgeequal( triedge1, triedge2 ) \ + ( ( ( triedge1 ).tri == ( triedge2 ).tri ) && \ + ( ( triedge1 ).orient == ( triedge2 ).orient ) ) /* Primitives to infect or cure a triangle with the virus. These rely on */ /* the assumption that all shell edges are aligned to four-byte boundaries.*/ -#define infect(triedge) \ - (triedge).tri[6] = (triangle) \ - ((unsigned long) (triedge).tri[6] | (unsigned long) 2l) +#define infect( triedge ) \ + ( triedge ).tri[6] = (triangle) \ + ( (unsigned long) ( triedge ).tri[6] | (unsigned long) 2l ) -#define uninfect(triedge) \ - (triedge).tri[6] = (triangle) \ - ((unsigned long) (triedge).tri[6] & ~ (unsigned long) 2l) +#define uninfect( triedge ) \ + ( triedge ).tri[6] = (triangle) \ + ( (unsigned long) ( triedge ).tri[6] & ~(unsigned long) 2l ) /* Test a triangle for viral infection. */ -#define infected(triedge) \ - (((unsigned long) (triedge).tri[6] & (unsigned long) 2l) != 0) +#define infected( triedge ) \ + ( ( (unsigned long) ( triedge ).tri[6] & (unsigned long) 2l ) != 0 ) /* Check or set a triangle's attributes. */ -#define elemattribute(triedge, attnum) \ - ((REAL *) (triedge).tri)[elemattribindex + (attnum)] +#define elemattribute( triedge, attnum ) \ + ( (REAL *) ( triedge ).tri )[elemattribindex + ( attnum )] -#define setelemattribute(triedge, attnum, value) \ - ((REAL *) (triedge).tri)[elemattribindex + (attnum)] = (REAL)value +#define setelemattribute( triedge, attnum, value ) \ + ( (REAL *) ( triedge ).tri )[elemattribindex + ( attnum )] = (REAL)value /* Check or set a triangle's maximum area bound. */ -#define areabound(triedge) ((REAL *) (triedge).tri)[areaboundindex] +#define areabound( triedge ) ( (REAL *) ( triedge ).tri )[areaboundindex] -#define setareabound(triedge, value) \ - ((REAL *) (triedge).tri)[areaboundindex] = (REAL)value +#define setareabound( triedge, value ) \ + ( (REAL *) ( triedge ).tri )[areaboundindex] = (REAL)value /********* Primitives for shell edges *********/ /* */ @@ -1000,95 +1000,95 @@ int minus1mod3[3] = {2, 0, 1}; /* least significant bits (one for orientation, one for viral infection) */ /* are masked out to produce the real pointer. */ -#define sdecode(sptr, edge) \ - (edge).shorient = (int) ((unsigned long) (sptr) & (unsigned long) 1l); \ - (edge).sh = (shelle *) \ - ((unsigned long) (sptr) & ~ (unsigned long) 3l) +#define sdecode( sptr, edge ) \ + ( edge ).shorient = (int) ( (unsigned long) ( sptr ) & (unsigned long) 1l ); \ + ( edge ).sh = (shelle *) \ + ( (unsigned long) ( sptr ) & ~(unsigned long) 3l ) /* sencode() compresses an oriented shell edge into a single pointer. It */ /* relies on the assumption that all shell edges are aligned to two-byte */ /* boundaries, so the least significant bit of (edge).sh is zero. */ -#define sencode(edge) \ - (shelle) ((unsigned long) (edge).sh | (unsigned long) (edge).shorient) +#define sencode( edge ) \ + (shelle) ( (unsigned long) ( edge ).sh | (unsigned long) ( edge ).shorient ) /* ssym() toggles the orientation of a shell edge. */ -#define ssym(edge1, edge2) \ - (edge2).sh = (edge1).sh; \ - (edge2).shorient = 1 - (edge1).shorient +#define ssym( edge1, edge2 ) \ + ( edge2 ).sh = ( edge1 ).sh; \ + ( edge2 ).shorient = 1 - ( edge1 ).shorient -#define ssymself(edge) \ - (edge).shorient = 1 - (edge).shorient +#define ssymself( edge ) \ + ( edge ).shorient = 1 - ( edge ).shorient /* spivot() finds the other shell edge (from the same segment) that shares */ /* the same origin. */ -#define spivot(edge1, edge2) \ - sptr = (edge1).sh[(edge1).shorient]; \ - sdecode(sptr, edge2) +#define spivot( edge1, edge2 ) \ + sptr = ( edge1 ).sh[( edge1 ).shorient]; \ + sdecode( sptr, edge2 ) -#define spivotself(edge) \ - sptr = (edge).sh[(edge).shorient]; \ - sdecode(sptr, edge) +#define spivotself( edge ) \ + sptr = ( edge ).sh[( edge ).shorient]; \ + sdecode( sptr, edge ) /* snext() finds the next shell edge (from the same segment) in sequence; */ /* one whose origin is the input shell edge's destination. */ -#define snext(edge1, edge2) \ - sptr = (edge1).sh[1 - (edge1).shorient]; \ - sdecode(sptr, edge2) +#define snext( edge1, edge2 ) \ + sptr = ( edge1 ).sh[1 - ( edge1 ).shorient]; \ + sdecode( sptr, edge2 ) -#define snextself(edge) \ - sptr = (edge).sh[1 - (edge).shorient]; \ - sdecode(sptr, edge) +#define snextself( edge ) \ + sptr = ( edge ).sh[1 - ( edge ).shorient]; \ + sdecode( sptr, edge ) /* These primitives determine or set the origin or destination of a shell */ /* edge. */ -#define sorg(edge, pointptr) \ - pointptr = (point) (edge).sh[2 + (edge).shorient] +#define sorg( edge, pointptr ) \ + pointptr = (point) ( edge ).sh[2 + ( edge ).shorient] -#define sdest(edge, pointptr) \ - pointptr = (point) (edge).sh[3 - (edge).shorient] +#define sdest( edge, pointptr ) \ + pointptr = (point) ( edge ).sh[3 - ( edge ).shorient] -#define setsorg(edge, pointptr) \ - (edge).sh[2 + (edge).shorient] = (shelle) pointptr +#define setsorg( edge, pointptr ) \ + ( edge ).sh[2 + ( edge ).shorient] = (shelle) pointptr -#define setsdest(edge, pointptr) \ - (edge).sh[3 - (edge).shorient] = (shelle) pointptr +#define setsdest( edge, pointptr ) \ + ( edge ).sh[3 - ( edge ).shorient] = (shelle) pointptr /* These primitives read or set a shell marker. Shell markers are used to */ /* hold user boundary information. */ -#define mark(edge) (* (int *) ((edge).sh + 6)) +#define mark( edge ) ( *(int *) ( ( edge ).sh + 6 ) ) -#define setmark(edge, value) \ - * (int *) ((edge).sh + 6) = value +#define setmark( edge, value ) \ + *(int *) ( ( edge ).sh + 6 ) = value /* Bond two shell edges together. */ -#define sbond(edge1, edge2) \ - (edge1).sh[(edge1).shorient] = sencode(edge2); \ - (edge2).sh[(edge2).shorient] = sencode(edge1) +#define sbond( edge1, edge2 ) \ + ( edge1 ).sh[( edge1 ).shorient] = sencode( edge2 ); \ + ( edge2 ).sh[( edge2 ).shorient] = sencode( edge1 ) /* Dissolve a shell edge bond (from one side). Note that the other shell */ /* edge will still think it's connected to this shell edge. */ -#define sdissolve(edge) \ - (edge).sh[(edge).shorient] = (shelle) dummysh +#define sdissolve( edge ) \ + ( edge ).sh[( edge ).shorient] = (shelle) dummysh /* Copy a shell edge. */ -#define shellecopy(edge1, edge2) \ - (edge2).sh = (edge1).sh; \ - (edge2).shorient = (edge1).shorient +#define shellecopy( edge1, edge2 ) \ + ( edge2 ).sh = ( edge1 ).sh; \ + ( edge2 ).shorient = ( edge1 ).shorient /* Test for equality of shell edges. */ -#define shelleequal(edge1, edge2) \ - (((edge1).sh == (edge2).sh) && \ - ((edge1).shorient == (edge2).shorient)) +#define shelleequal( edge1, edge2 ) \ + ( ( ( edge1 ).sh == ( edge2 ).sh ) && \ + ( ( edge1 ).shorient == ( edge2 ).shorient ) ) /********* Primitives for interacting triangles and shell edges *********/ /* */ @@ -1096,46 +1096,46 @@ int minus1mod3[3] = {2, 0, 1}; /* tspivot() finds a shell edge abutting a triangle. */ -#define tspivot(triedge, edge) \ - sptr = (shelle) (triedge).tri[6 + (triedge).orient]; \ - sdecode(sptr, edge) +#define tspivot( triedge, edge ) \ + sptr = (shelle) ( triedge ).tri[6 + ( triedge ).orient]; \ + sdecode( sptr, edge ) /* stpivot() finds a triangle abutting a shell edge. It requires that the */ /* variable `ptr' of type `triangle' be defined. */ -#define stpivot(edge, triedge) \ - ptr = (triangle) (edge).sh[4 + (edge).shorient]; \ - decode(ptr, triedge) +#define stpivot( edge, triedge ) \ + ptr = (triangle) ( edge ).sh[4 + ( edge ).shorient]; \ + decode( ptr, triedge ) /* Bond a triangle to a shell edge. */ -#define tsbond(triedge, edge) \ - (triedge).tri[6 + (triedge).orient] = (triangle) sencode(edge); \ - (edge).sh[4 + (edge).shorient] = (shelle) encode(triedge) +#define tsbond( triedge, edge ) \ + ( triedge ).tri[6 + ( triedge ).orient] = (triangle) sencode( edge ); \ + ( edge ).sh[4 + ( edge ).shorient] = (shelle) encode( triedge ) /* Dissolve a bond (from the triangle side). */ -#define tsdissolve(triedge) \ - (triedge).tri[6 + (triedge).orient] = (triangle) dummysh +#define tsdissolve( triedge ) \ + ( triedge ).tri[6 + ( triedge ).orient] = (triangle) dummysh /* Dissolve a bond (from the shell edge side). */ -#define stdissolve(edge) \ - (edge).sh[4 + (edge).shorient] = (shelle) dummytri +#define stdissolve( edge ) \ + ( edge ).sh[4 + ( edge ).shorient] = (shelle) dummytri /********* Primitives for points *********/ /* */ /* */ -#define pointmark(pt) ((int *) (pt))[pointmarkindex] +#define pointmark( pt ) ( (int *) ( pt ) )[pointmarkindex] -#define setpointmark(pt, value) \ - ((int *) (pt))[pointmarkindex] = value +#define setpointmark( pt, value ) \ + ( (int *) ( pt ) )[pointmarkindex] = value -#define point2tri(pt) ((triangle *) (pt))[point2triindex] +#define point2tri( pt ) ( (triangle *) ( pt ) )[point2triindex] -#define setpoint2tri(pt, value) \ - ((triangle *) (pt))[point2triindex] = value +#define setpoint2tri( pt, value ) \ + ( (triangle *) ( pt ) )[point2triindex] = value /** **/ /** **/ @@ -1153,65 +1153,64 @@ int minus1mod3[3] = {2, 0, 1}; #ifndef TRILIBRARY -void syntax() -{ +void syntax(){ #ifdef CDT_ONLY #ifdef REDUCED - printf("triangle [-pAcevngBPNEIOXzo_lQVh] input_file\n"); + printf( "triangle [-pAcevngBPNEIOXzo_lQVh] input_file\n" ); #else /* not REDUCED */ - printf("triangle [-pAcevngBPNEIOXzo_iFlCQVh] input_file\n"); + printf( "triangle [-pAcevngBPNEIOXzo_iFlCQVh] input_file\n" ); #endif /* not REDUCED */ #else /* not CDT_ONLY */ #ifdef REDUCED - printf("triangle [-prq__a__AcevngBPNEIOXzo_YS__lQVh] input_file\n"); + printf( "triangle [-prq__a__AcevngBPNEIOXzo_YS__lQVh] input_file\n" ); #else /* not REDUCED */ - printf("triangle [-prq__a__AcevngBPNEIOXzo_YS__iFlsCQVh] input_file\n"); + printf( "triangle [-prq__a__AcevngBPNEIOXzo_YS__iFlsCQVh] input_file\n" ); #endif /* not REDUCED */ #endif /* not CDT_ONLY */ - printf(" -p Triangulates a Planar Straight Line Graph (.poly file).\n"); + printf( " -p Triangulates a Planar Straight Line Graph (.poly file).\n" ); #ifndef CDT_ONLY - printf(" -r Refines a previously generated mesh.\n"); - printf( - " -q Quality mesh generation. A minimum angle may be specified.\n"); - printf(" -a Applies a maximum triangle area constraint.\n"); + printf( " -r Refines a previously generated mesh.\n" ); + printf( + " -q Quality mesh generation. A minimum angle may be specified.\n" ); + printf( " -a Applies a maximum triangle area constraint.\n" ); #endif /* not CDT_ONLY */ - printf( - " -A Applies attributes to identify elements in certain regions.\n"); - printf(" -c Encloses the convex hull with segments.\n"); - printf(" -e Generates an edge list.\n"); - printf(" -v Generates a Voronoi diagram.\n"); - printf(" -n Generates a list of triangle neighbors.\n"); - printf(" -g Generates an .off file for Geomview.\n"); - printf(" -B Suppresses output of boundary information.\n"); - printf(" -P Suppresses output of .poly file.\n"); - printf(" -N Suppresses output of .node file.\n"); - printf(" -E Suppresses output of .ele file.\n"); - printf(" -I Suppresses mesh iteration numbers.\n"); - printf(" -O Ignores holes in .poly file.\n"); - printf(" -X Suppresses use of exact arithmetic.\n"); - printf(" -z Numbers all items starting from zero (rather than one).\n"); - printf(" -o2 Generates second-order subparametric elements.\n"); + printf( + " -A Applies attributes to identify elements in certain regions.\n" ); + printf( " -c Encloses the convex hull with segments.\n" ); + printf( " -e Generates an edge list.\n" ); + printf( " -v Generates a Voronoi diagram.\n" ); + printf( " -n Generates a list of triangle neighbors.\n" ); + printf( " -g Generates an .off file for Geomview.\n" ); + printf( " -B Suppresses output of boundary information.\n" ); + printf( " -P Suppresses output of .poly file.\n" ); + printf( " -N Suppresses output of .node file.\n" ); + printf( " -E Suppresses output of .ele file.\n" ); + printf( " -I Suppresses mesh iteration numbers.\n" ); + printf( " -O Ignores holes in .poly file.\n" ); + printf( " -X Suppresses use of exact arithmetic.\n" ); + printf( " -z Numbers all items starting from zero (rather than one).\n" ); + printf( " -o2 Generates second-order subparametric elements.\n" ); #ifndef CDT_ONLY - printf(" -Y Suppresses boundary segment splitting.\n"); - printf(" -S Specifies maximum number of added Steiner points.\n"); + printf( " -Y Suppresses boundary segment splitting.\n" ); + printf( " -S Specifies maximum number of added Steiner points.\n" ); #endif /* not CDT_ONLY */ #ifndef REDUCED - printf(" -i Uses incremental method, rather than divide-and-conquer.\n"); - printf(" -F Uses Fortune's sweepline algorithm, rather than d-and-c.\n"); + printf( " -i Uses incremental method, rather than divide-and-conquer.\n" ); + printf( " -F Uses Fortune's sweepline algorithm, rather than d-and-c.\n" ); #endif /* not REDUCED */ - printf(" -l Uses vertical cuts only, rather than alternating cuts.\n"); + printf( " -l Uses vertical cuts only, rather than alternating cuts.\n" ); #ifndef REDUCED #ifndef CDT_ONLY - printf( - " -s Force segments into mesh by splitting (instead of using CDT).\n"); + printf( + " -s Force segments into mesh by splitting (instead of using CDT).\n" ); #endif /* not CDT_ONLY */ - printf(" -C Check consistency of final mesh.\n"); + printf( " -C Check consistency of final mesh.\n" ); #endif /* not REDUCED */ - printf(" -Q Quiet: No terminal output except errors.\n"); - printf(" -V Verbose: Detailed information on what I'm doing.\n"); - printf(" -h Help: Detailed instructions for Triangle.\n"); - exit(0); + printf( " -Q Quiet: No terminal output except errors.\n" ); + printf( " -V Verbose: Detailed information on what I'm doing.\n" ); + printf( " -h Help: Detailed instructions for Triangle.\n" ); + exit( 0 ); } #endif /* not TRILIBRARY */ @@ -1224,1427 +1223,1426 @@ void syntax() #ifndef TRILIBRARY -void info() -{ - printf("Triangle\n"); - printf( -"A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator.\n"); - printf("Version 1.3\n\n"); - printf( -"Copyright 1996 Jonathan Richard Shewchuk (bugs/comments to jrs@cs.cmu.edu)\n" -); - printf("School of Computer Science / Carnegie Mellon University\n"); - printf("5000 Forbes Avenue / Pittsburgh, Pennsylvania 15213-3891\n"); - printf( -"Created as part of the Archimedes project (tools for parallel FEM).\n"); - printf( -"Supported in part by NSF Grant CMS-9318163 and an NSERC 1967 Scholarship.\n"); - printf("There is no warranty whatsoever. Use at your own risk.\n"); +void info(){ + printf( "Triangle\n" ); + printf( + "A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator.\n" ); + printf( "Version 1.3\n\n" ); + printf( + "Copyright 1996 Jonathan Richard Shewchuk (bugs/comments to jrs@cs.cmu.edu)\n" + ); + printf( "School of Computer Science / Carnegie Mellon University\n" ); + printf( "5000 Forbes Avenue / Pittsburgh, Pennsylvania 15213-3891\n" ); + printf( + "Created as part of the Archimedes project (tools for parallel FEM).\n" ); + printf( + "Supported in part by NSF Grant CMS-9318163 and an NSERC 1967 Scholarship.\n" ); + printf( "There is no warranty whatsoever. Use at your own risk.\n" ); #ifdef SINGLE - printf("This executable is compiled for single precision arithmetic.\n\n\n"); + printf( "This executable is compiled for single precision arithmetic.\n\n\n" ); #else /* not SINGLE */ - printf("This executable is compiled for double precision arithmetic.\n\n\n"); + printf( "This executable is compiled for double precision arithmetic.\n\n\n" ); #endif /* not SINGLE */ - printf( -"Triangle generates exact Delaunay triangulations, constrained Delaunay\n"); - printf( -"triangulations, and quality conforming Delaunay triangulations. The latter\n" -); - printf( -"can be generated with no small angles, and are thus suitable for finite\n"); - printf( -"element analysis. If no command line switches are specified, your .node\n"); - printf( -"input file will be read, and the Delaunay triangulation will be returned in\n" -); - printf(".node and .ele output files. The command syntax is:\n\n"); + printf( + "Triangle generates exact Delaunay triangulations, constrained Delaunay\n" ); + printf( + "triangulations, and quality conforming Delaunay triangulations. The latter\n" + ); + printf( + "can be generated with no small angles, and are thus suitable for finite\n" ); + printf( + "element analysis. If no command line switches are specified, your .node\n" ); + printf( + "input file will be read, and the Delaunay triangulation will be returned in\n" + ); + printf( ".node and .ele output files. The command syntax is:\n\n" ); #ifdef CDT_ONLY #ifdef REDUCED - printf("triangle [-pAcevngBPNEIOXzo_lQVh] input_file\n\n"); + printf( "triangle [-pAcevngBPNEIOXzo_lQVh] input_file\n\n" ); #else /* not REDUCED */ - printf("triangle [-pAcevngBPNEIOXzo_iFlCQVh] input_file\n\n"); + printf( "triangle [-pAcevngBPNEIOXzo_iFlCQVh] input_file\n\n" ); #endif /* not REDUCED */ #else /* not CDT_ONLY */ #ifdef REDUCED - printf("triangle [-prq__a__AcevngBPNEIOXzo_YS__lQVh] input_file\n\n"); + printf( "triangle [-prq__a__AcevngBPNEIOXzo_YS__lQVh] input_file\n\n" ); #else /* not REDUCED */ - printf("triangle [-prq__a__AcevngBPNEIOXzo_YS__iFlsCQVh] input_file\n\n"); + printf( "triangle [-prq__a__AcevngBPNEIOXzo_YS__iFlsCQVh] input_file\n\n" ); #endif /* not REDUCED */ #endif /* not CDT_ONLY */ - printf( -"Underscores indicate that numbers may optionally follow certain switches;\n"); - printf( -"do not leave any space between a switch and its numeric parameter.\n"); - printf( -"input_file must be a file with extension .node, or extension .poly if the\n"); - printf( -"-p switch is used. If -r is used, you must supply .node and .ele files,\n"); - printf( -"and possibly a .poly file and .area file as well. The formats of these\n"); - printf("files are described below.\n\n"); - printf("Command Line Switches:\n\n"); - printf( -" -p Reads a Planar Straight Line Graph (.poly file), which can specify\n" -); - printf( -" points, segments, holes, and regional attributes and area\n"); - printf( -" constraints. Will generate a constrained Delaunay triangulation\n"); - printf( -" fitting the input; or, if -s, -q, or -a is used, a conforming\n"); - printf( -" Delaunay triangulation. If -p is not used, Triangle reads a .node\n" -); - printf(" file by default.\n"); - printf( -" -r Refines a previously generated mesh. The mesh is read from a .node\n" -); - printf( -" file and an .ele file. If -p is also used, a .poly file is read\n"); - printf( -" and used to constrain edges in the mesh. Further details on\n"); - printf(" refinement are given below.\n"); - printf( -" -q Quality mesh generation by Jim Ruppert's Delaunay refinement\n"); - printf( -" algorithm. Adds points to the mesh to ensure that no angles\n"); - printf( -" smaller than 20 degrees occur. An alternative minimum angle may be\n" -); - printf( -" specified after the `q'. If the minimum angle is 20.7 degrees or\n"); - printf( -" smaller, the triangulation algorithm is theoretically guaranteed to\n" -); - printf( -" terminate (assuming infinite precision arithmetic - Triangle may\n"); - printf( -" fail to terminate if you run out of precision). In practice, the\n"); - printf( -" algorithm often succeeds for minimum angles up to 33.8 degrees.\n"); - printf( -" For highly refined meshes, however, it may be necessary to reduce\n"); - printf( -" the minimum angle to well below 20 to avoid problems associated\n"); - printf( -" with insufficient floating-point precision. The specified angle\n"); - printf(" may include a decimal point.\n"); - printf( -" -a Imposes a maximum triangle area. If a number follows the `a', no\n"); - printf( -" triangle will be generated whose area is larger than that number.\n"); - printf( -" If no number is specified, an .area file (if -r is used) or .poly\n"); - printf( -" file (if -r is not used) specifies a number of maximum area\n"); - printf( -" constraints. An .area file contains a separate area constraint for\n" -); - printf( -" each triangle, and is useful for refining a finite element mesh\n"); - printf( -" based on a posteriori error estimates. A .poly file can optionally\n" -); - printf( -" contain an area constraint for each segment-bounded region, thereby\n" -); - printf( -" enforcing triangle densities in a first triangulation. You can\n"); - printf( -" impose both a fixed area constraint and a varying area constraint\n"); - printf( -" by invoking the -a switch twice, once with and once without a\n"); - printf( -" number following. Each area specified may include a decimal point.\n" -); - printf( -" -A Assigns an additional attribute to each triangle that identifies\n"); - printf( -" what segment-bounded region each triangle belongs to. Attributes\n"); - printf( -" are assigned to regions by the .poly file. If a region is not\n"); - printf( -" explicitly marked by the .poly file, triangles in that region are\n"); - printf( -" assigned an attribute of zero. The -A switch has an effect only\n"); - printf(" when the -p switch is used and the -r switch is not.\n"); - printf( -" -c Creates segments on the convex hull of the triangulation. If you\n"); - printf( -" are triangulating a point set, this switch causes a .poly file to\n"); - printf( -" be written, containing all edges in the convex hull. (By default,\n" -); - printf( -" a .poly file is written only if a .poly file is read.) If you are\n" -); - printf( -" triangulating a PSLG, this switch specifies that the interior of\n"); - printf( -" the convex hull of the PSLG should be triangulated. If you do not\n" -); - printf( -" use this switch when triangulating a PSLG, it is assumed that you\n"); - printf( -" have identified the region to be triangulated by surrounding it\n"); - printf( -" with segments of the input PSLG. Beware: if you are not careful,\n" -); - printf( -" this switch can cause the introduction of an extremely thin angle\n"); - printf( -" between a PSLG segment and a convex hull segment, which can cause\n"); - printf( -" overrefinement or failure if Triangle runs out of precision. If\n"); - printf( -" you are refining a mesh, the -c switch works differently; it\n"); - printf( -" generates the set of boundary edges of the mesh, rather than the\n"); - printf(" convex hull.\n"); - printf( -" -e Outputs (to an .edge file) a list of edges of the triangulation.\n"); - printf( -" -v Outputs the Voronoi diagram associated with the triangulation.\n"); - printf(" Does not attempt to detect degeneracies.\n"); - printf( -" -n Outputs (to a .neigh file) a list of triangles neighboring each\n"); - printf(" triangle.\n"); - printf( -" -g Outputs the mesh to an Object File Format (.off) file, suitable for\n" -); - printf(" viewing with the Geometry Center's Geomview package.\n"); - printf( -" -B No boundary markers in the output .node, .poly, and .edge output\n"); - printf( -" files. See the detailed discussion of boundary markers below.\n"); - printf( -" -P No output .poly file. Saves disk space, but you lose the ability\n"); - printf( -" to impose segment constraints on later refinements of the mesh.\n"); - printf(" -N No output .node file.\n"); - printf(" -E No output .ele file.\n"); - printf( -" -I No iteration numbers. Suppresses the output of .node and .poly\n"); - printf( -" files, so your input files won't be overwritten. (If your input is\n" -); - printf( -" a .poly file only, a .node file will be written.) Cannot be used\n"); - printf( -" with the -r switch, because that would overwrite your input .ele\n"); - printf( -" file. Shouldn't be used with the -s, -q, or -a switch if you are\n"); - printf( -" using a .node file for input, because no .node file will be\n"); - printf(" written, so there will be no record of any added points.\n"); - printf(" -O No holes. Ignores the holes in the .poly file.\n"); - printf( -" -X No exact arithmetic. Normally, Triangle uses exact floating-point\n" -); - printf( -" arithmetic for certain tests if it thinks the inexact tests are not\n" -); - printf( -" accurate enough. Exact arithmetic ensures the robustness of the\n"); - printf( -" triangulation algorithms, despite floating-point roundoff error.\n"); - printf( -" Disabling exact arithmetic with the -X switch will cause a small\n"); - printf( -" improvement in speed and create the possibility (albeit small) that\n" -); - printf( -" Triangle will fail to produce a valid mesh. Not recommended.\n"); - printf( -" -z Numbers all items starting from zero (rather than one). Note that\n" -); - printf( -" this switch is normally overrided by the value used to number the\n"); - printf( -" first point of the input .node or .poly file. However, this switch\n" -); - printf(" is useful when calling Triangle from another program.\n"); - printf( -" -o2 Generates second-order subparametric elements with six nodes each.\n" -); - printf( -" -Y No new points on the boundary. This switch is useful when the mesh\n" -); - printf( -" boundary must be preserved so that it conforms to some adjacent\n"); - printf( -" mesh. Be forewarned that you will probably sacrifice some of the\n"); - printf( -" quality of the mesh; Triangle will try, but the resulting mesh may\n" -); - printf( -" contain triangles of poor aspect ratio. Works well if all the\n"); - printf( -" boundary points are closely spaced. Specify this switch twice\n"); - printf( -" (`-YY') to prevent all segment splitting, including internal\n"); - printf(" boundaries.\n"); - printf( -" -S Specifies the maximum number of Steiner points (points that are not\n" -); - printf( -" in the input, but are added to meet the constraints of minimum\n"); - printf( -" angle and maximum area). The default is to allow an unlimited\n"); - printf( -" number. If you specify this switch with no number after it,\n"); - printf( -" the limit is set to zero. Triangle always adds points at segment\n"); - printf( -" intersections, even if it needs to use more points than the limit\n"); - printf( -" you set. When Triangle inserts segments by splitting (-s), it\n"); - printf( -" always adds enough points to ensure that all the segments appear in\n" -); - printf( -" the triangulation, again ignoring the limit. Be forewarned that\n"); - printf( -" the -S switch may result in a conforming triangulation that is not\n" -); - printf( -" truly Delaunay, because Triangle may be forced to stop adding\n"); - printf( -" points when the mesh is in a state where a segment is non-Delaunay\n" -); - printf( -" and needs to be split. If so, Triangle will print a warning.\n"); - printf( -" -i Uses an incremental rather than divide-and-conquer algorithm to\n"); - printf( -" form a Delaunay triangulation. Try it if the divide-and-conquer\n"); - printf(" algorithm fails.\n"); - printf( -" -F Uses Steven Fortune's sweepline algorithm to form a Delaunay\n"); - printf( -" triangulation. Warning: does not use exact arithmetic for all\n"); - printf(" calculations. An exact result is not guaranteed.\n"); - printf( -" -l Uses only vertical cuts in the divide-and-conquer algorithm. By\n"); - printf( -" default, Triangle uses alternating vertical and horizontal cuts,\n"); - printf( -" which usually improve the speed except with point sets that are\n"); - printf( -" small or short and wide. This switch is primarily of theoretical\n"); - printf(" interest.\n"); - printf( -" -s Specifies that segments should be forced into the triangulation by\n" -); - printf( -" recursively splitting them at their midpoints, rather than by\n"); - printf( -" generating a constrained Delaunay triangulation. Segment splitting\n" -); - printf( -" is true to Ruppert's original algorithm, but can create needlessly\n" -); - printf(" small triangles near external small features.\n"); - printf( -" -C Check the consistency of the final mesh. Uses exact arithmetic for\n" -); - printf( -" checking, even if the -X switch is used. Useful if you suspect\n"); - printf(" Triangle is buggy.\n"); - printf( -" -Q Quiet: Suppresses all explanation of what Triangle is doing, unless\n" -); - printf(" an error occurs.\n"); - printf( -" -V Verbose: Gives detailed information about what Triangle is doing.\n"); - printf( -" Add more `V's for increasing amount of detail. `-V' gives\n"); - printf( -" information on algorithmic progress and more detailed statistics.\n"); - printf( -" `-VV' gives point-by-point details, and will print so much that\n"); - printf( -" Triangle will run much more slowly. `-VVV' gives information only\n" -); - printf(" a debugger could love.\n"); - printf(" -h Help: Displays these instructions.\n"); - printf("\n"); - printf("Definitions:\n"); - printf("\n"); - printf( -" A Delaunay triangulation of a point set is a triangulation whose vertices\n" -); - printf( -" are the point set, having the property that no point in the point set\n"); - printf( -" falls in the interior of the circumcircle (circle that passes through all\n" -); - printf(" three vertices) of any triangle in the triangulation.\n\n"); - printf( -" A Voronoi diagram of a point set is a subdivision of the plane into\n"); - printf( -" polygonal regions (some of which may be infinite), where each region is\n"); - printf( -" the set of points in the plane that are closer to some input point than\n"); - printf( -" to any other input point. (The Voronoi diagram is the geometric dual of\n" -); - printf(" the Delaunay triangulation.)\n\n"); - printf( -" A Planar Straight Line Graph (PSLG) is a collection of points and\n"); - printf( -" segments. Segments are simply edges, whose endpoints are points in the\n"); - printf( -" PSLG. The file format for PSLGs (.poly files) is described below.\n"); - printf("\n"); - printf( -" A constrained Delaunay triangulation of a PSLG is similar to a Delaunay\n"); - printf( -" triangulation, but each PSLG segment is present as a single edge in the\n"); - printf( -" triangulation. (A constrained Delaunay triangulation is not truly a\n"); - printf(" Delaunay triangulation.)\n\n"); - printf( -" A conforming Delaunay triangulation of a PSLG is a true Delaunay\n"); - printf( -" triangulation in which each PSLG segment may have been subdivided into\n"); - printf( -" several edges by the insertion of additional points. These inserted\n"); - printf( -" points are necessary to allow the segments to exist in the mesh while\n"); - printf(" maintaining the Delaunay property.\n\n"); - printf("File Formats:\n\n"); - printf( -" All files may contain comments prefixed by the character '#'. Points,\n"); - printf( -" triangles, edges, holes, and maximum area constraints must be numbered\n"); - printf( -" consecutively, starting from either 1 or 0. Whichever you choose, all\n"); - printf( -" input files must be consistent; if the nodes are numbered from 1, so must\n" -); - printf( -" be all other objects. Triangle automatically detects your choice while\n"); - printf( -" reading the .node (or .poly) file. (When calling Triangle from another\n"); - printf( -" program, use the -z switch if you wish to number objects from zero.)\n"); - printf(" Examples of these file formats are given below.\n\n"); - printf(" .node files:\n"); - printf( -" First line: <# of points> <# of attributes>\n"); - printf( -" <# of boundary markers (0 or 1)>\n" -); - printf( -" Remaining lines: [attributes] [boundary marker]\n"); - printf("\n"); - printf( -" The attributes, which are typically floating-point values of physical\n"); - printf( -" quantities (such as mass or conductivity) associated with the nodes of\n" -); - printf( -" a finite element mesh, are copied unchanged to the output mesh. If -s,\n" -); - printf( -" -q, or -a is selected, each new Steiner point added to the mesh will\n"); - printf(" have attributes assigned to it by linear interpolation.\n\n"); - printf( -" If the fourth entry of the first line is `1', the last column of the\n"); - printf( -" remainder of the file is assumed to contain boundary markers. Boundary\n" -); - printf( -" markers are used to identify boundary points and points resting on PSLG\n" -); - printf( -" segments; a complete description appears in a section below. The .node\n" -); - printf( -" file produced by Triangle will contain boundary markers in the last\n"); - printf(" column unless they are suppressed by the -B switch.\n\n"); - printf(" .ele files:\n"); - printf( -" First line: <# of triangles> <# of attributes>\n"); - printf( -" Remaining lines: ... [attributes]\n" -); - printf("\n"); - printf( -" Points are indices into the corresponding .node file. The first three\n" -); - printf( -" points are the corners, and are listed in counterclockwise order around\n" -); - printf( -" each triangle. (The remaining points, if any, depend on the type of\n"); - printf( -" finite element used.) The attributes are just like those of .node\n"); - printf( -" files. Because there is no simple mapping from input to output\n"); - printf( -" triangles, an attempt is made to interpolate attributes, which may\n"); - printf( -" result in a good deal of diffusion of attributes among nearby triangles\n" -); - printf( -" as the triangulation is refined. Diffusion does not occur across\n"); - printf( -" segments, so attributes used to identify segment-bounded regions remain\n" -); - printf( -" intact. In output .ele files, all triangles have three points each\n"); - printf( -" unless the -o2 switch is used, in which case they have six, and the\n"); - printf( -" fourth, fifth, and sixth points lie on the midpoints of the edges\n"); - printf(" opposite the first, second, and third corners.\n\n"); - printf(" .poly files:\n"); - printf( -" First line: <# of points> <# of attributes>\n"); - printf( -" <# of boundary markers (0 or 1)>\n" -); - printf( -" Following lines: [attributes] [boundary marker]\n"); - printf(" One line: <# of segments> <# of boundary markers (0 or 1)>\n"); - printf( -" Following lines: [boundary marker]\n"); - printf(" One line: <# of holes>\n"); - printf(" Following lines: \n"); - printf( -" Optional line: <# of regional attributes and/or area constraints>\n"); - printf( -" Optional following lines: \n"); - printf("\n"); - printf( -" A .poly file represents a PSLG, as well as some additional information.\n" -); - printf( -" The first section lists all the points, and is identical to the format\n" -); - printf( -" of .node files. <# of points> may be set to zero to indicate that the\n" -); - printf( -" points are listed in a separate .node file; .poly files produced by\n"); - printf( -" Triangle always have this format. This has the advantage that a point\n" -); - printf( -" set may easily be triangulated with or without segments. (The same\n"); - printf( -" effect can be achieved, albeit using more disk space, by making a copy\n" -); - printf( -" of the .poly file with the extension .node; all sections of the file\n"); - printf(" but the first are ignored.)\n\n"); - printf( -" The second section lists the segments. Segments are edges whose\n"); - printf( -" presence in the triangulation is enforced. Each segment is specified\n"); - printf( -" by listing the indices of its two endpoints. This means that you must\n" -); - printf( -" include its endpoints in the point list. If -s, -q, and -a are not\n"); - printf( -" selected, Triangle will produce a constrained Delaunay triangulation,\n"); - printf( -" in which each segment appears as a single edge in the triangulation.\n"); - printf( -" If -q or -a is selected, Triangle will produce a conforming Delaunay\n"); - printf( -" triangulation, in which segments may be subdivided into smaller edges.\n" -); - printf(" Each segment, like each point, may have a boundary marker.\n\n"); - printf( -" The third section lists holes (and concavities, if -c is selected) in\n"); - printf( -" the triangulation. Holes are specified by identifying a point inside\n"); - printf( -" each hole. After the triangulation is formed, Triangle creates holes\n"); - printf( -" by eating triangles, spreading out from each hole point until its\n"); - printf( -" progress is blocked by PSLG segments; you must be careful to enclose\n"); - printf( -" each hole in segments, or your whole triangulation may be eaten away.\n"); - printf( -" If the two triangles abutting a segment are eaten, the segment itself\n"); - printf( -" is also eaten. Do not place a hole directly on a segment; if you do,\n"); - printf(" Triangle will choose one side of the segment arbitrarily.\n\n"); - printf( -" The optional fourth section lists regional attributes (to be assigned\n"); - printf( -" to all triangles in a region) and regional constraints on the maximum\n"); - printf( -" triangle area. Triangle will read this section only if the -A switch\n"); - printf( -" is used or the -a switch is used without a number following it, and the\n" -); - printf( -" -r switch is not used. Regional attributes and area constraints are\n"); - printf( -" propagated in the same manner as holes; you specify a point for each\n"); - printf( -" attribute and/or constraint, and the attribute and/or constraint will\n"); - printf( -" affect the whole region (bounded by segments) containing the point. If\n" -); - printf( -" two values are written on a line after the x and y coordinate, the\n"); - printf( -" former is assumed to be a regional attribute (but will only be applied\n" -); - printf( -" if the -A switch is selected), and the latter is assumed to be a\n"); - printf( -" regional area constraint (but will only be applied if the -a switch is\n" -); - printf( -" selected). You may also specify just one value after the coordinates,\n" -); - printf( -" which can serve as both an attribute and an area constraint, depending\n" -); - printf( -" on the choice of switches. If you are using the -A and -a switches\n"); - printf( -" simultaneously and wish to assign an attribute to some region without\n"); - printf(" imposing an area constraint, use a negative maximum area.\n\n"); - printf( -" When a triangulation is created from a .poly file, you must either\n"); - printf( -" enclose the entire region to be triangulated in PSLG segments, or\n"); - printf( -" use the -c switch, which encloses the convex hull of the input point\n"); - printf( -" set. If you do not use the -c switch, Triangle will eat all triangles\n" -); - printf( -" on the outer boundary that are not protected by segments; if you are\n"); - printf( -" not careful, your whole triangulation may be eaten away. If you do\n"); - printf( -" use the -c switch, you can still produce concavities by appropriate\n"); - printf(" placement of holes just inside the convex hull.\n\n"); - printf( -" An ideal PSLG has no intersecting segments, nor any points that lie\n"); - printf( -" upon segments (except, of course, the endpoints of each segment.) You\n" -); - printf( -" aren't required to make your .poly files ideal, but you should be aware\n" -); - printf( -" of what can go wrong. Segment intersections are relatively safe -\n"); - printf( -" Triangle will calculate the intersection points for you and add them to\n" -); - printf( -" the triangulation - as long as your machine's floating-point precision\n" -); - printf( -" doesn't become a problem. You are tempting the fates if you have three\n" -); - printf( -" segments that cross at the same location, and expect Triangle to figure\n" -); - printf( -" out where the intersection point is. Thanks to floating-point roundoff\n" -); - printf( -" error, Triangle will probably decide that the three segments intersect\n" -); - printf( -" at three different points, and you will find a minuscule triangle in\n"); - printf( -" your output - unless Triangle tries to refine the tiny triangle, uses\n"); - printf( -" up the last bit of machine precision, and fails to terminate at all.\n"); - printf( -" You're better off putting the intersection point in the input files,\n"); - printf( -" and manually breaking up each segment into two. Similarly, if you\n"); - printf( -" place a point at the middle of a segment, and hope that Triangle will\n"); - printf( -" break up the segment at that point, you might get lucky. On the other\n" -); - printf( -" hand, Triangle might decide that the point doesn't lie precisely on the\n" -); - printf( -" line, and you'll have a needle-sharp triangle in your output - or a lot\n" -); - printf(" of tiny triangles if you're generating a quality mesh.\n\n"); - printf( -" When Triangle reads a .poly file, it also writes a .poly file, which\n"); - printf( -" includes all edges that are part of input segments. If the -c switch\n"); - printf( -" is used, the output .poly file will also include all of the edges on\n"); - printf( -" the convex hull. Hence, the output .poly file is useful for finding\n"); - printf( -" edges associated with input segments and setting boundary conditions in\n" -); - printf( -" finite element simulations. More importantly, you will need it if you\n" -); - printf( -" plan to refine the output mesh, and don't want segments to be missing\n"); - printf(" in later triangulations.\n\n"); - printf(" .area files:\n"); - printf(" First line: <# of triangles>\n"); - printf(" Following lines: \n\n"); - printf( -" An .area file associates with each triangle a maximum area that is used\n" -); - printf( -" for mesh refinement. As with other file formats, every triangle must\n"); - printf( -" be represented, and they must be numbered consecutively. A triangle\n"); - printf( -" may be left unconstrained by assigning it a negative maximum area.\n"); - printf("\n"); - printf(" .edge files:\n"); - printf(" First line: <# of edges> <# of boundary markers (0 or 1)>\n"); - printf( -" Following lines: [boundary marker]\n"); - printf("\n"); - printf( -" Endpoints are indices into the corresponding .node file. Triangle can\n" -); - printf( -" produce .edge files (use the -e switch), but cannot read them. The\n"); - printf( -" optional column of boundary markers is suppressed by the -B switch.\n"); - printf("\n"); - printf( -" In Voronoi diagrams, one also finds a special kind of edge that is an\n"); - printf( -" infinite ray with only one endpoint. For these edges, a different\n"); - printf(" format is used:\n\n"); - printf(" -1 \n\n"); - printf( -" The `direction' is a floating-point vector that indicates the direction\n" -); - printf(" of the infinite ray.\n\n"); - printf(" .neigh files:\n"); - printf( -" First line: <# of triangles> <# of neighbors per triangle (always 3)>\n" -); - printf( -" Following lines: \n"); - printf("\n"); - printf( -" Neighbors are indices into the corresponding .ele file. An index of -1\n" -); - printf( -" indicates a mesh boundary, and therefore no neighbor. Triangle can\n"); - printf( -" produce .neigh files (use the -n switch), but cannot read them.\n"); - printf("\n"); - printf( -" The first neighbor of triangle i is opposite the first corner of\n"); - printf(" triangle i, and so on.\n\n"); - printf("Boundary Markers:\n\n"); - printf( -" Boundary markers are tags used mainly to identify which output points and\n" -); - printf( -" edges are associated with which PSLG segment, and to identify which\n"); - printf( -" points and edges occur on a boundary of the triangulation. A common use\n" -); - printf( -" is to determine where boundary conditions should be applied to a finite\n"); - printf( -" element mesh. You can prevent boundary markers from being written into\n"); - printf(" files produced by Triangle by using the -B switch.\n\n"); - printf( -" The boundary marker associated with each segment in an output .poly file\n" -); - printf(" or edge in an output .edge file is chosen as follows:\n"); - printf( -" - If an output edge is part or all of a PSLG segment with a nonzero\n"); - printf( -" boundary marker, then the edge is assigned the same marker.\n"); - printf( -" - Otherwise, if the edge occurs on a boundary of the triangulation\n"); - printf( -" (including boundaries of holes), then the edge is assigned the marker\n" -); - printf(" one (1).\n"); - printf(" - Otherwise, the edge is assigned the marker zero (0).\n"); - printf( -" The boundary marker associated with each point in an output .node file is\n" -); - printf(" chosen as follows:\n"); - printf( -" - If a point is assigned a nonzero boundary marker in the input file,\n"); - printf( -" then it is assigned the same marker in the output .node file.\n"); - printf( -" - Otherwise, if the point lies on a PSLG segment (including the\n"); - printf( -" segment's endpoints) with a nonzero boundary marker, then the point\n"); - printf( -" is assigned the same marker. If the point lies on several such\n"); - printf(" segments, one of the markers is chosen arbitrarily.\n"); - printf( -" - Otherwise, if the point occurs on a boundary of the triangulation,\n"); - printf(" then the point is assigned the marker one (1).\n"); - printf(" - Otherwise, the point is assigned the marker zero (0).\n"); - printf("\n"); - printf( -" If you want Triangle to determine for you which points and edges are on\n"); - printf( -" the boundary, assign them the boundary marker zero (or use no markers at\n" -); - printf( -" all) in your input files. Alternatively, you can mark some of them and\n"); - printf(" leave others marked zero, allowing Triangle to label them.\n\n"); - printf("Triangulation Iteration Numbers:\n\n"); - printf( -" Because Triangle can read and refine its own triangulations, input\n"); - printf( -" and output files have iteration numbers. For instance, Triangle might\n"); - printf( -" read the files mesh.3.node, mesh.3.ele, and mesh.3.poly, refine the\n"); - printf( -" triangulation, and output the files mesh.4.node, mesh.4.ele, and\n"); - printf(" mesh.4.poly. Files with no iteration number are treated as if\n"); - printf( -" their iteration number is zero; hence, Triangle might read the file\n"); - printf( -" points.node, triangulate it, and produce the files points.1.node and\n"); - printf(" points.1.ele.\n\n"); - printf( -" Iteration numbers allow you to create a sequence of successively finer\n"); - printf( -" meshes suitable for multigrid methods. They also allow you to produce a\n" -); - printf( -" sequence of meshes using error estimate-driven mesh refinement.\n"); - printf("\n"); - printf( -" If you're not using refinement or quality meshing, and you don't like\n"); - printf( -" iteration numbers, use the -I switch to disable them. This switch will\n"); - printf( -" also disable output of .node and .poly files to prevent your input files\n" -); - printf( -" from being overwritten. (If the input is a .poly file that contains its\n" -); - printf(" own points, a .node file will be written.)\n\n"); - printf("Examples of How to Use Triangle:\n\n"); - printf( -" `triangle dots' will read points from dots.node, and write their Delaunay\n" -); - printf( -" triangulation to dots.1.node and dots.1.ele. (dots.1.node will be\n"); - printf( -" identical to dots.node.) `triangle -I dots' writes the triangulation to\n" -); - printf( -" dots.ele instead. (No additional .node file is needed, so none is\n"); - printf(" written.)\n\n"); - printf( -" `triangle -pe object.1' will read a PSLG from object.1.poly (and possibly\n" -); - printf( -" object.1.node, if the points are omitted from object.1.poly) and write\n"); - printf(" their constrained Delaunay triangulation to object.2.node and\n"); - printf( -" object.2.ele. The segments will be copied to object.2.poly, and all\n"); - printf(" edges will be written to object.2.edge.\n\n"); - printf( -" `triangle -pq31.5a.1 object' will read a PSLG from object.poly (and\n"); - printf( -" possibly object.node), generate a mesh whose angles are all greater than\n" -); - printf( -" 31.5 degrees and whose triangles all have area smaller than 0.1, and\n"); - printf( -" write the mesh to object.1.node and object.1.ele. Each segment may have\n" -); - printf( -" been broken up into multiple edges; the resulting constrained edges are\n"); - printf(" written to object.1.poly.\n\n"); - printf( -" Here is a sample file `box.poly' describing a square with a square hole:\n" -); - printf("\n"); - printf( -" # A box with eight points in 2D, no attributes, one boundary marker.\n"); - printf(" 8 2 0 1\n"); - printf(" # Outer box has these vertices:\n"); - printf(" 1 0 0 0\n"); - printf(" 2 0 3 0\n"); - printf(" 3 3 0 0\n"); - printf(" 4 3 3 33 # A special marker for this point.\n"); - printf(" # Inner square has these vertices:\n"); - printf(" 5 1 1 0\n"); - printf(" 6 1 2 0\n"); - printf(" 7 2 1 0\n"); - printf(" 8 2 2 0\n"); - printf(" # Five segments with boundary markers.\n"); - printf(" 5 1\n"); - printf(" 1 1 2 5 # Left side of outer box.\n"); - printf(" 2 5 7 0 # Segments 2 through 5 enclose the hole.\n"); - printf(" 3 7 8 0\n"); - printf(" 4 8 6 10\n"); - printf(" 5 6 5 0\n"); - printf(" # One hole in the middle of the inner square.\n"); - printf(" 1\n"); - printf(" 1 1.5 1.5\n\n"); - printf( -" Note that some segments are missing from the outer square, so one must\n"); - printf( -" use the `-c' switch. After `triangle -pqc box.poly', here is the output\n" -); - printf( -" file `box.1.node', with twelve points. The last four points were added\n"); - printf( -" to meet the angle constraint. Points 1, 2, and 9 have markers from\n"); - printf( -" segment 1. Points 6 and 8 have markers from segment 4. All the other\n"); - printf( -" points but 4 have been marked to indicate that they lie on a boundary.\n"); - printf("\n"); - printf(" 12 2 0 1\n"); - printf(" 1 0 0 5\n"); - printf(" 2 0 3 5\n"); - printf(" 3 3 0 1\n"); - printf(" 4 3 3 33\n"); - printf(" 5 1 1 1\n"); - printf(" 6 1 2 10\n"); - printf(" 7 2 1 1\n"); - printf(" 8 2 2 10\n"); - printf(" 9 0 1.5 5\n"); - printf(" 10 1.5 0 1\n"); - printf(" 11 3 1.5 1\n"); - printf(" 12 1.5 3 1\n"); - printf(" # Generated by triangle -pqc box.poly\n\n"); - printf(" Here is the output file `box.1.ele', with twelve triangles.\n\n"); - printf(" 12 3 0\n"); - printf(" 1 5 6 9\n"); - printf(" 2 10 3 7\n"); - printf(" 3 6 8 12\n"); - printf(" 4 9 1 5\n"); - printf(" 5 6 2 9\n"); - printf(" 6 7 3 11\n"); - printf(" 7 11 4 8\n"); - printf(" 8 7 5 10\n"); - printf(" 9 12 2 6\n"); - printf(" 10 8 7 11\n"); - printf(" 11 5 1 10\n"); - printf(" 12 8 4 12\n"); - printf(" # Generated by triangle -pqc box.poly\n\n"); - printf( -" Here is the output file `box.1.poly'. Note that segments have been added\n" -); - printf( -" to represent the convex hull, and some segments have been split by newly\n" -); - printf( -" added points. Note also that <# of points> is set to zero to indicate\n"); - printf(" that the points should be read from the .node file.\n\n"); - printf(" 0 2 0 1\n"); - printf(" 12 1\n"); - printf(" 1 1 9 5\n"); - printf(" 2 5 7 1\n"); - printf(" 3 8 7 1\n"); - printf(" 4 6 8 10\n"); - printf(" 5 5 6 1\n"); - printf(" 6 3 10 1\n"); - printf(" 7 4 11 1\n"); - printf(" 8 2 12 1\n"); - printf(" 9 9 2 5\n"); - printf(" 10 10 1 1\n"); - printf(" 11 11 3 1\n"); - printf(" 12 12 4 1\n"); - printf(" 1\n"); - printf(" 1 1.5 1.5\n"); - printf(" # Generated by triangle -pqc box.poly\n\n"); - printf("Refinement and Area Constraints:\n\n"); - printf( -" The -r switch causes a mesh (.node and .ele files) to be read and\n"); - printf( -" refined. If the -p switch is also used, a .poly file is read and used to\n" -); - printf( -" specify edges that are constrained and cannot be eliminated (although\n"); - printf( -" they can be divided into smaller edges) by the refinement process.\n"); - printf("\n"); - printf( -" When you refine a mesh, you generally want to impose tighter quality\n"); - printf( -" constraints. One way to accomplish this is to use -q with a larger\n"); - printf( -" angle, or -a followed by a smaller area than you used to generate the\n"); - printf( -" mesh you are refining. Another way to do this is to create an .area\n"); - printf( -" file, which specifies a maximum area for each triangle, and use the -a\n"); - printf( -" switch (without a number following). Each triangle's area constraint is\n" -); - printf( -" applied to that triangle. Area constraints tend to diffuse as the mesh\n"); - printf( -" is refined, so if there are large variations in area constraint between\n"); - printf(" adjacent triangles, you may not get the results you want.\n\n"); - printf( -" If you are refining a mesh composed of linear (three-node) elements, the\n" -); - printf( -" output mesh will contain all the nodes present in the input mesh, in the\n" -); - printf( -" same order, with new nodes added at the end of the .node file. However,\n" -); - printf( -" there is no guarantee that each output element is contained in a single\n"); - printf( -" input element. Often, output elements will overlap two input elements,\n"); - printf( -" and input edges are not present in the output mesh. Hence, a sequence of\n" -); - printf( -" refined meshes will form a hierarchy of nodes, but not a hierarchy of\n"); - printf( -" elements. If you a refining a mesh of higher-order elements, the\n"); - printf( -" hierarchical property applies only to the nodes at the corners of an\n"); - printf(" element; other nodes may not be present in the refined mesh.\n\n"); - printf( -" It is important to understand that maximum area constraints in .poly\n"); - printf( -" files are handled differently from those in .area files. A maximum area\n" -); - printf( -" in a .poly file applies to the whole (segment-bounded) region in which a\n" -); - printf( -" point falls, whereas a maximum area in an .area file applies to only one\n" -); - printf( -" triangle. Area constraints in .poly files are used only when a mesh is\n"); - printf( -" first generated, whereas area constraints in .area files are used only to\n" -); - printf( -" refine an existing mesh, and are typically based on a posteriori error\n"); - printf( -" estimates resulting from a finite element simulation on that mesh.\n"); - printf("\n"); - printf( -" `triangle -rq25 object.1' will read object.1.node and object.1.ele, then\n" -); - printf( -" refine the triangulation to enforce a 25 degree minimum angle, and then\n"); - printf( -" write the refined triangulation to object.2.node and object.2.ele.\n"); - printf("\n"); - printf( -" `triangle -rpaa6.2 z.3' will read z.3.node, z.3.ele, z.3.poly, and\n"); - printf( -" z.3.area. After reconstructing the mesh and its segments, Triangle will\n" -); - printf( -" refine the mesh so that no triangle has area greater than 6.2, and\n"); - printf( -" furthermore the triangles satisfy the maximum area constraints in\n"); - printf( -" z.3.area. The output is written to z.4.node, z.4.ele, and z.4.poly.\n"); - printf("\n"); - printf( -" The sequence `triangle -qa1 x', `triangle -rqa.3 x.1', `triangle -rqa.1\n"); - printf( -" x.2' creates a sequence of successively finer meshes x.1, x.2, and x.3,\n"); - printf(" suitable for multigrid.\n\n"); - printf("Convex Hulls and Mesh Boundaries:\n\n"); - printf( -" If the input is a point set (rather than a PSLG), Triangle produces its\n"); - printf( -" convex hull as a by-product in the output .poly file if you use the -c\n"); - printf( -" switch. There are faster algorithms for finding a two-dimensional convex\n" -); - printf( -" hull than triangulation, of course, but this one comes for free. If the\n" -); - printf( -" input is an unconstrained mesh (you are using the -r switch but not the\n"); - printf( -" -p switch), Triangle produces a list of its boundary edges (including\n"); - printf(" hole boundaries) as a by-product if you use the -c switch.\n\n"); - printf("Voronoi Diagrams:\n\n"); - printf( -" The -v switch produces a Voronoi diagram, in files suffixed .v.node and\n"); - printf( -" .v.edge. For example, `triangle -v points' will read points.node,\n"); - printf( -" produce its Delaunay triangulation in points.1.node and points.1.ele,\n"); - printf( -" and produce its Voronoi diagram in points.1.v.node and points.1.v.edge.\n"); - printf( -" The .v.node file contains a list of all Voronoi vertices, and the .v.edge\n" -); - printf( -" file contains a list of all Voronoi edges, some of which may be infinite\n" -); - printf( -" rays. (The choice of filenames makes it easy to run the set of Voronoi\n"); - printf(" vertices through Triangle, if so desired.)\n\n"); - printf( -" This implementation does not use exact arithmetic to compute the Voronoi\n" -); - printf( -" vertices, and does not check whether neighboring vertices are identical.\n" -); - printf( -" Be forewarned that if the Delaunay triangulation is degenerate or\n"); - printf( -" near-degenerate, the Voronoi diagram may have duplicate points, crossing\n" -); - printf( -" edges, or infinite rays whose direction vector is zero. Also, if you\n"); - printf( -" generate a constrained (as opposed to conforming) Delaunay triangulation,\n" -); - printf( -" or if the triangulation has holes, the corresponding Voronoi diagram is\n"); - printf(" likely to have crossing edges and unlikely to make sense.\n\n"); - printf("Mesh Topology:\n\n"); - printf( -" You may wish to know which triangles are adjacent to a certain Delaunay\n"); - printf( -" edge in an .edge file, which Voronoi regions are adjacent to a certain\n"); - printf( -" Voronoi edge in a .v.edge file, or which Voronoi regions are adjacent to\n" -); - printf( -" each other. All of this information can be found by cross-referencing\n"); - printf( -" output files with the recollection that the Delaunay triangulation and\n"); - printf(" the Voronoi diagrams are planar duals.\n\n"); - printf( -" Specifically, edge i of an .edge file is the dual of Voronoi edge i of\n"); - printf( -" the corresponding .v.edge file, and is rotated 90 degrees counterclock-\n"); - printf( -" wise from the Voronoi edge. Triangle j of an .ele file is the dual of\n"); - printf( -" vertex j of the corresponding .v.node file; and Voronoi region k is the\n"); - printf(" dual of point k of the corresponding .node file.\n\n"); - printf( -" Hence, to find the triangles adjacent to a Delaunay edge, look at the\n"); - printf( -" vertices of the corresponding Voronoi edge; their dual triangles are on\n"); - printf( -" the left and right of the Delaunay edge, respectively. To find the\n"); - printf( -" Voronoi regions adjacent to a Voronoi edge, look at the endpoints of the\n" -); - printf( -" corresponding Delaunay edge; their dual regions are on the right and left\n" -); - printf( -" of the Voronoi edge, respectively. To find which Voronoi regions are\n"); - printf(" adjacent to each other, just read the list of Delaunay edges.\n"); - printf("\n"); - printf("Statistics:\n"); - printf("\n"); - printf( -" After generating a mesh, Triangle prints a count of the number of points,\n" -); - printf( -" triangles, edges, boundary edges, and segments in the output mesh. If\n"); - printf( -" you've forgotten the statistics for an existing mesh, the -rNEP switches\n" -); - printf( -" (or -rpNEP if you've got a .poly file for the existing mesh) will\n"); - printf(" regenerate these statistics without writing any output.\n\n"); - printf( -" The -V switch produces extended statistics, including a rough estimate\n"); - printf( -" of memory use and a histogram of triangle aspect ratios and angles in the\n" -); - printf(" mesh.\n\n"); - printf("Exact Arithmetic:\n\n"); - printf( -" Triangle uses adaptive exact arithmetic to perform what computational\n"); - printf( -" geometers call the `orientation' and `incircle' tests. If the floating-\n" -); - printf( -" point arithmetic of your machine conforms to the IEEE 754 standard (as\n"); - printf( -" most workstations do), and does not use extended precision internal\n"); - printf( -" registers, then your output is guaranteed to be an absolutely true\n"); - printf(" Delaunay or conforming Delaunay triangulation, roundoff error\n"); - printf( -" notwithstanding. The word `adaptive' implies that these arithmetic\n"); - printf( -" routines compute the result only to the precision necessary to guarantee\n" -); - printf( -" correctness, so they are usually nearly as fast as their approximate\n"); - printf( -" counterparts. The exact tests can be disabled with the -X switch. On\n"); - printf( -" most inputs, this switch will reduce the computation time by about eight\n" -); - printf( -" percent - it's not worth the risk. There are rare difficult inputs\n"); - printf( -" (having many collinear and cocircular points), however, for which the\n"); - printf( -" difference could be a factor of two. These are precisely the inputs most\n" -); - printf(" likely to cause errors if you use the -X switch.\n\n"); - printf( -" Unfortunately, these routines don't solve every numerical problem. Exact\n" -); - printf( -" arithmetic is not used to compute the positions of points, because the\n"); - printf( -" bit complexity of point coordinates would grow without bound. Hence,\n"); - printf( -" segment intersections aren't computed exactly; in very unusual cases,\n"); - printf( -" roundoff error in computing an intersection point might actually lead to\n" -); - printf( -" an inverted triangle and an invalid triangulation. (This is one reason\n"); - printf( -" to compute your own intersection points in your .poly files.) Similarly,\n" -); - printf( -" exact arithmetic is not used to compute the vertices of the Voronoi\n"); - printf(" diagram.\n\n"); - printf( -" Underflow and overflow can also cause difficulties; the exact arithmetic\n" -); - printf( -" routines do not ameliorate out-of-bounds exponents, which can arise\n"); - printf( -" during the orientation and incircle tests. As a rule of thumb, you\n"); - printf( -" should ensure that your input values are within a range such that their\n"); - printf( -" third powers can be taken without underflow or overflow. Underflow can\n"); - printf( -" silently prevent the tests from being performed exactly, while overflow\n"); - printf(" will typically cause a floating exception.\n\n"); - printf("Calling Triangle from Another Program:\n\n"); - printf(" Read the file triangle.h for details.\n\n"); - printf("Troubleshooting:\n\n"); - printf(" Please read this section before mailing me bugs.\n\n"); - printf(" `My output mesh has no triangles!'\n\n"); - printf( -" If you're using a PSLG, you've probably failed to specify a proper set\n" -); - printf( -" of bounding segments, or forgotten to use the -c switch. Or you may\n"); - printf( -" have placed a hole badly. To test these possibilities, try again with\n" -); - printf( -" the -c and -O switches. Alternatively, all your input points may be\n"); - printf( -" collinear, in which case you can hardly expect to triangulate them.\n"); - printf("\n"); - printf(" `Triangle doesn't terminate, or just crashes.'\n"); - printf("\n"); - printf( -" Bad things can happen when triangles get so small that the distance\n"); - printf( -" between their vertices isn't much larger than the precision of your\n"); - printf( -" machine's arithmetic. If you've compiled Triangle for single-precision\n" -); - printf( -" arithmetic, you might do better by recompiling it for double-precision.\n" -); - printf( -" Then again, you might just have to settle for more lenient constraints\n" -); - printf( -" on the minimum angle and the maximum area than you had planned.\n"); - printf("\n"); - printf( -" You can minimize precision problems by ensuring that the origin lies\n"); - printf( -" inside your point set, or even inside the densest part of your\n"); - printf( -" mesh. On the other hand, if you're triangulating an object whose x\n"); - printf( -" coordinates all fall between 6247133 and 6247134, you're not leaving\n"); - printf(" much floating-point precision for Triangle to work with.\n\n"); - printf( -" Precision problems can occur covertly if the input PSLG contains two\n"); - printf( -" segments that meet (or intersect) at a very small angle, or if such an\n" -); - printf( -" angle is introduced by the -c switch, which may occur if a point lies\n"); - printf( -" ever-so-slightly inside the convex hull, and is connected by a PSLG\n"); - printf( -" segment to a point on the convex hull. If you don't realize that a\n"); - printf( -" small angle is being formed, you might never discover why Triangle is\n"); - printf( -" crashing. To check for this possibility, use the -S switch (with an\n"); - printf( -" appropriate limit on the number of Steiner points, found by trial-and-\n" -); - printf( -" error) to stop Triangle early, and view the output .poly file with\n"); - printf( -" Show Me (described below). Look carefully for small angles between\n"); - printf( -" segments; zoom in closely, as such segments might look like a single\n"); - printf(" segment from a distance.\n\n"); - printf( -" If some of the input values are too large, Triangle may suffer a\n"); - printf( -" floating exception due to overflow when attempting to perform an\n"); - printf( -" orientation or incircle test. (Read the section on exact arithmetic\n"); - printf( -" above.) Again, I recommend compiling Triangle for double (rather\n"); - printf(" than single) precision arithmetic.\n\n"); - printf( -" `The numbering of the output points doesn't match the input points.'\n"); - printf("\n"); - printf( -" You may have eaten some of your input points with a hole, or by placing\n" -); - printf(" them outside the area enclosed by segments.\n\n"); - printf( -" `Triangle executes without incident, but when I look at the resulting\n"); - printf( -" mesh, it has overlapping triangles or other geometric inconsistencies.'\n"); - printf("\n"); - printf( -" If you select the -X switch, Triangle's divide-and-conquer Delaunay\n"); - printf( -" triangulation algorithm occasionally makes mistakes due to floating-\n"); - printf( -" point roundoff error. Although these errors are rare, don't use the -X\n" -); - printf(" switch. If you still have problems, please report the bug.\n"); - printf("\n"); - printf( -" Strange things can happen if you've taken liberties with your PSLG. Do\n"); - printf( -" you have a point lying in the middle of a segment? Triangle sometimes\n"); - printf( -" copes poorly with that sort of thing. Do you want to lay out a collinear\n" -); - printf( -" row of evenly spaced, segment-connected points? Have you simply defined\n" -); - printf( -" one long segment connecting the leftmost point to the rightmost point,\n"); - printf( -" and a bunch of points lying along it? This method occasionally works,\n"); - printf( -" especially with horizontal and vertical lines, but often it doesn't, and\n" -); - printf( -" you'll have to connect each adjacent pair of points with a separate\n"); - printf(" segment. If you don't like it, tough.\n\n"); - printf( -" Furthermore, if you have segments that intersect other than at their\n"); - printf( -" endpoints, try not to let the intersections fall extremely close to PSLG\n" -); - printf(" points or each other.\n\n"); - printf( -" If you have problems refining a triangulation not produced by Triangle:\n"); - printf( -" Are you sure the triangulation is geometrically valid? Is it formatted\n"); - printf( -" correctly for Triangle? Are the triangles all listed so the first three\n" -); - printf(" points are their corners in counterclockwise order?\n\n"); - printf("Show Me:\n\n"); - printf( -" Triangle comes with a separate program named `Show Me', whose primary\n"); - printf( -" purpose is to draw meshes on your screen or in PostScript. Its secondary\n" -); - printf( -" purpose is to check the validity of your input files, and do so more\n"); - printf( -" thoroughly than Triangle does. Show Me requires that you have the X\n"); - printf( -" Windows system. If you didn't receive Show Me with Triangle, complain to\n" -); - printf(" whomever you obtained Triangle from, then send me mail.\n\n"); - printf("Triangle on the Web:\n\n"); - printf( -" To see an illustrated, updated version of these instructions, check out\n"); - printf("\n"); - printf(" http://www.cs.cmu.edu/~quake/triangle.html\n"); - printf("\n"); - printf("A Brief Plea:\n"); - printf("\n"); - printf( -" If you use Triangle, and especially if you use it to accomplish real\n"); - printf( -" work, I would like very much to hear from you. A short letter or email\n"); - printf( -" (to jrs@cs.cmu.edu) describing how you use Triangle will mean a lot to\n"); - printf( -" me. The more people I know are using this program, the more easily I can\n" -); - printf( -" justify spending time on improvements and on the three-dimensional\n"); - printf( -" successor to Triangle, which in turn will benefit you. Also, I can put\n"); - printf( -" you on a list to receive email whenever a new version of Triangle is\n"); - printf(" available.\n\n"); - printf( -" If you use a mesh generated by Triangle in a publication, please include\n" -); - printf(" an acknowledgment as well.\n\n"); - printf("Research credit:\n\n"); - printf( -" Of course, I can take credit for only a fraction of the ideas that made\n"); - printf( -" this mesh generator possible. Triangle owes its existence to the efforts\n" -); - printf( -" of many fine computational geometers and other researchers, including\n"); - printf( -" Marshall Bern, L. Paul Chew, Boris Delaunay, Rex A. Dwyer, David\n"); - printf( -" Eppstein, Steven Fortune, Leonidas J. Guibas, Donald E. Knuth, C. L.\n"); - printf( -" Lawson, Der-Tsai Lee, Ernst P. Mucke, Douglas M. Priest, Jim Ruppert,\n"); - printf( -" Isaac Saias, Bruce J. Schachter, Micha Sharir, Jorge Stolfi, Christopher\n" -); - printf( -" J. Van Wyk, David F. Watson, and Binhai Zhu. See the comments at the\n"); - printf(" beginning of the source code for references.\n\n"); - exit(0); + printf( + "Underscores indicate that numbers may optionally follow certain switches;\n" ); + printf( + "do not leave any space between a switch and its numeric parameter.\n" ); + printf( + "input_file must be a file with extension .node, or extension .poly if the\n" ); + printf( + "-p switch is used. If -r is used, you must supply .node and .ele files,\n" ); + printf( + "and possibly a .poly file and .area file as well. The formats of these\n" ); + printf( "files are described below.\n\n" ); + printf( "Command Line Switches:\n\n" ); + printf( + " -p Reads a Planar Straight Line Graph (.poly file), which can specify\n" + ); + printf( + " points, segments, holes, and regional attributes and area\n" ); + printf( + " constraints. Will generate a constrained Delaunay triangulation\n" ); + printf( + " fitting the input; or, if -s, -q, or -a is used, a conforming\n" ); + printf( + " Delaunay triangulation. If -p is not used, Triangle reads a .node\n" + ); + printf( " file by default.\n" ); + printf( + " -r Refines a previously generated mesh. The mesh is read from a .node\n" + ); + printf( + " file and an .ele file. If -p is also used, a .poly file is read\n" ); + printf( + " and used to constrain edges in the mesh. Further details on\n" ); + printf( " refinement are given below.\n" ); + printf( + " -q Quality mesh generation by Jim Ruppert's Delaunay refinement\n" ); + printf( + " algorithm. Adds points to the mesh to ensure that no angles\n" ); + printf( + " smaller than 20 degrees occur. An alternative minimum angle may be\n" + ); + printf( + " specified after the `q'. If the minimum angle is 20.7 degrees or\n" ); + printf( + " smaller, the triangulation algorithm is theoretically guaranteed to\n" + ); + printf( + " terminate (assuming infinite precision arithmetic - Triangle may\n" ); + printf( + " fail to terminate if you run out of precision). In practice, the\n" ); + printf( + " algorithm often succeeds for minimum angles up to 33.8 degrees.\n" ); + printf( + " For highly refined meshes, however, it may be necessary to reduce\n" ); + printf( + " the minimum angle to well below 20 to avoid problems associated\n" ); + printf( + " with insufficient floating-point precision. The specified angle\n" ); + printf( " may include a decimal point.\n" ); + printf( + " -a Imposes a maximum triangle area. If a number follows the `a', no\n" ); + printf( + " triangle will be generated whose area is larger than that number.\n" ); + printf( + " If no number is specified, an .area file (if -r is used) or .poly\n" ); + printf( + " file (if -r is not used) specifies a number of maximum area\n" ); + printf( + " constraints. An .area file contains a separate area constraint for\n" + ); + printf( + " each triangle, and is useful for refining a finite element mesh\n" ); + printf( + " based on a posteriori error estimates. A .poly file can optionally\n" + ); + printf( + " contain an area constraint for each segment-bounded region, thereby\n" + ); + printf( + " enforcing triangle densities in a first triangulation. You can\n" ); + printf( + " impose both a fixed area constraint and a varying area constraint\n" ); + printf( + " by invoking the -a switch twice, once with and once without a\n" ); + printf( + " number following. Each area specified may include a decimal point.\n" + ); + printf( + " -A Assigns an additional attribute to each triangle that identifies\n" ); + printf( + " what segment-bounded region each triangle belongs to. Attributes\n" ); + printf( + " are assigned to regions by the .poly file. If a region is not\n" ); + printf( + " explicitly marked by the .poly file, triangles in that region are\n" ); + printf( + " assigned an attribute of zero. The -A switch has an effect only\n" ); + printf( " when the -p switch is used and the -r switch is not.\n" ); + printf( + " -c Creates segments on the convex hull of the triangulation. If you\n" ); + printf( + " are triangulating a point set, this switch causes a .poly file to\n" ); + printf( + " be written, containing all edges in the convex hull. (By default,\n" + ); + printf( + " a .poly file is written only if a .poly file is read.) If you are\n" + ); + printf( + " triangulating a PSLG, this switch specifies that the interior of\n" ); + printf( + " the convex hull of the PSLG should be triangulated. If you do not\n" + ); + printf( + " use this switch when triangulating a PSLG, it is assumed that you\n" ); + printf( + " have identified the region to be triangulated by surrounding it\n" ); + printf( + " with segments of the input PSLG. Beware: if you are not careful,\n" + ); + printf( + " this switch can cause the introduction of an extremely thin angle\n" ); + printf( + " between a PSLG segment and a convex hull segment, which can cause\n" ); + printf( + " overrefinement or failure if Triangle runs out of precision. If\n" ); + printf( + " you are refining a mesh, the -c switch works differently; it\n" ); + printf( + " generates the set of boundary edges of the mesh, rather than the\n" ); + printf( " convex hull.\n" ); + printf( + " -e Outputs (to an .edge file) a list of edges of the triangulation.\n" ); + printf( + " -v Outputs the Voronoi diagram associated with the triangulation.\n" ); + printf( " Does not attempt to detect degeneracies.\n" ); + printf( + " -n Outputs (to a .neigh file) a list of triangles neighboring each\n" ); + printf( " triangle.\n" ); + printf( + " -g Outputs the mesh to an Object File Format (.off) file, suitable for\n" + ); + printf( " viewing with the Geometry Center's Geomview package.\n" ); + printf( + " -B No boundary markers in the output .node, .poly, and .edge output\n" ); + printf( + " files. See the detailed discussion of boundary markers below.\n" ); + printf( + " -P No output .poly file. Saves disk space, but you lose the ability\n" ); + printf( + " to impose segment constraints on later refinements of the mesh.\n" ); + printf( " -N No output .node file.\n" ); + printf( " -E No output .ele file.\n" ); + printf( + " -I No iteration numbers. Suppresses the output of .node and .poly\n" ); + printf( + " files, so your input files won't be overwritten. (If your input is\n" + ); + printf( + " a .poly file only, a .node file will be written.) Cannot be used\n" ); + printf( + " with the -r switch, because that would overwrite your input .ele\n" ); + printf( + " file. Shouldn't be used with the -s, -q, or -a switch if you are\n" ); + printf( + " using a .node file for input, because no .node file will be\n" ); + printf( " written, so there will be no record of any added points.\n" ); + printf( " -O No holes. Ignores the holes in the .poly file.\n" ); + printf( + " -X No exact arithmetic. Normally, Triangle uses exact floating-point\n" + ); + printf( + " arithmetic for certain tests if it thinks the inexact tests are not\n" + ); + printf( + " accurate enough. Exact arithmetic ensures the robustness of the\n" ); + printf( + " triangulation algorithms, despite floating-point roundoff error.\n" ); + printf( + " Disabling exact arithmetic with the -X switch will cause a small\n" ); + printf( + " improvement in speed and create the possibility (albeit small) that\n" + ); + printf( + " Triangle will fail to produce a valid mesh. Not recommended.\n" ); + printf( + " -z Numbers all items starting from zero (rather than one). Note that\n" + ); + printf( + " this switch is normally overrided by the value used to number the\n" ); + printf( + " first point of the input .node or .poly file. However, this switch\n" + ); + printf( " is useful when calling Triangle from another program.\n" ); + printf( + " -o2 Generates second-order subparametric elements with six nodes each.\n" + ); + printf( + " -Y No new points on the boundary. This switch is useful when the mesh\n" + ); + printf( + " boundary must be preserved so that it conforms to some adjacent\n" ); + printf( + " mesh. Be forewarned that you will probably sacrifice some of the\n" ); + printf( + " quality of the mesh; Triangle will try, but the resulting mesh may\n" + ); + printf( + " contain triangles of poor aspect ratio. Works well if all the\n" ); + printf( + " boundary points are closely spaced. Specify this switch twice\n" ); + printf( + " (`-YY') to prevent all segment splitting, including internal\n" ); + printf( " boundaries.\n" ); + printf( + " -S Specifies the maximum number of Steiner points (points that are not\n" + ); + printf( + " in the input, but are added to meet the constraints of minimum\n" ); + printf( + " angle and maximum area). The default is to allow an unlimited\n" ); + printf( + " number. If you specify this switch with no number after it,\n" ); + printf( + " the limit is set to zero. Triangle always adds points at segment\n" ); + printf( + " intersections, even if it needs to use more points than the limit\n" ); + printf( + " you set. When Triangle inserts segments by splitting (-s), it\n" ); + printf( + " always adds enough points to ensure that all the segments appear in\n" + ); + printf( + " the triangulation, again ignoring the limit. Be forewarned that\n" ); + printf( + " the -S switch may result in a conforming triangulation that is not\n" + ); + printf( + " truly Delaunay, because Triangle may be forced to stop adding\n" ); + printf( + " points when the mesh is in a state where a segment is non-Delaunay\n" + ); + printf( + " and needs to be split. If so, Triangle will print a warning.\n" ); + printf( + " -i Uses an incremental rather than divide-and-conquer algorithm to\n" ); + printf( + " form a Delaunay triangulation. Try it if the divide-and-conquer\n" ); + printf( " algorithm fails.\n" ); + printf( + " -F Uses Steven Fortune's sweepline algorithm to form a Delaunay\n" ); + printf( + " triangulation. Warning: does not use exact arithmetic for all\n" ); + printf( " calculations. An exact result is not guaranteed.\n" ); + printf( + " -l Uses only vertical cuts in the divide-and-conquer algorithm. By\n" ); + printf( + " default, Triangle uses alternating vertical and horizontal cuts,\n" ); + printf( + " which usually improve the speed except with point sets that are\n" ); + printf( + " small or short and wide. This switch is primarily of theoretical\n" ); + printf( " interest.\n" ); + printf( + " -s Specifies that segments should be forced into the triangulation by\n" + ); + printf( + " recursively splitting them at their midpoints, rather than by\n" ); + printf( + " generating a constrained Delaunay triangulation. Segment splitting\n" + ); + printf( + " is true to Ruppert's original algorithm, but can create needlessly\n" + ); + printf( " small triangles near external small features.\n" ); + printf( + " -C Check the consistency of the final mesh. Uses exact arithmetic for\n" + ); + printf( + " checking, even if the -X switch is used. Useful if you suspect\n" ); + printf( " Triangle is buggy.\n" ); + printf( + " -Q Quiet: Suppresses all explanation of what Triangle is doing, unless\n" + ); + printf( " an error occurs.\n" ); + printf( + " -V Verbose: Gives detailed information about what Triangle is doing.\n" ); + printf( + " Add more `V's for increasing amount of detail. `-V' gives\n" ); + printf( + " information on algorithmic progress and more detailed statistics.\n" ); + printf( + " `-VV' gives point-by-point details, and will print so much that\n" ); + printf( + " Triangle will run much more slowly. `-VVV' gives information only\n" + ); + printf( " a debugger could love.\n" ); + printf( " -h Help: Displays these instructions.\n" ); + printf( "\n" ); + printf( "Definitions:\n" ); + printf( "\n" ); + printf( + " A Delaunay triangulation of a point set is a triangulation whose vertices\n" + ); + printf( + " are the point set, having the property that no point in the point set\n" ); + printf( + " falls in the interior of the circumcircle (circle that passes through all\n" + ); + printf( " three vertices) of any triangle in the triangulation.\n\n" ); + printf( + " A Voronoi diagram of a point set is a subdivision of the plane into\n" ); + printf( + " polygonal regions (some of which may be infinite), where each region is\n" ); + printf( + " the set of points in the plane that are closer to some input point than\n" ); + printf( + " to any other input point. (The Voronoi diagram is the geometric dual of\n" + ); + printf( " the Delaunay triangulation.)\n\n" ); + printf( + " A Planar Straight Line Graph (PSLG) is a collection of points and\n" ); + printf( + " segments. Segments are simply edges, whose endpoints are points in the\n" ); + printf( + " PSLG. The file format for PSLGs (.poly files) is described below.\n" ); + printf( "\n" ); + printf( + " A constrained Delaunay triangulation of a PSLG is similar to a Delaunay\n" ); + printf( + " triangulation, but each PSLG segment is present as a single edge in the\n" ); + printf( + " triangulation. (A constrained Delaunay triangulation is not truly a\n" ); + printf( " Delaunay triangulation.)\n\n" ); + printf( + " A conforming Delaunay triangulation of a PSLG is a true Delaunay\n" ); + printf( + " triangulation in which each PSLG segment may have been subdivided into\n" ); + printf( + " several edges by the insertion of additional points. These inserted\n" ); + printf( + " points are necessary to allow the segments to exist in the mesh while\n" ); + printf( " maintaining the Delaunay property.\n\n" ); + printf( "File Formats:\n\n" ); + printf( + " All files may contain comments prefixed by the character '#'. Points,\n" ); + printf( + " triangles, edges, holes, and maximum area constraints must be numbered\n" ); + printf( + " consecutively, starting from either 1 or 0. Whichever you choose, all\n" ); + printf( + " input files must be consistent; if the nodes are numbered from 1, so must\n" + ); + printf( + " be all other objects. Triangle automatically detects your choice while\n" ); + printf( + " reading the .node (or .poly) file. (When calling Triangle from another\n" ); + printf( + " program, use the -z switch if you wish to number objects from zero.)\n" ); + printf( " Examples of these file formats are given below.\n\n" ); + printf( " .node files:\n" ); + printf( + " First line: <# of points> <# of attributes>\n" ); + printf( + " <# of boundary markers (0 or 1)>\n" + ); + printf( + " Remaining lines: [attributes] [boundary marker]\n" ); + printf( "\n" ); + printf( + " The attributes, which are typically floating-point values of physical\n" ); + printf( + " quantities (such as mass or conductivity) associated with the nodes of\n" + ); + printf( + " a finite element mesh, are copied unchanged to the output mesh. If -s,\n" + ); + printf( + " -q, or -a is selected, each new Steiner point added to the mesh will\n" ); + printf( " have attributes assigned to it by linear interpolation.\n\n" ); + printf( + " If the fourth entry of the first line is `1', the last column of the\n" ); + printf( + " remainder of the file is assumed to contain boundary markers. Boundary\n" + ); + printf( + " markers are used to identify boundary points and points resting on PSLG\n" + ); + printf( + " segments; a complete description appears in a section below. The .node\n" + ); + printf( + " file produced by Triangle will contain boundary markers in the last\n" ); + printf( " column unless they are suppressed by the -B switch.\n\n" ); + printf( " .ele files:\n" ); + printf( + " First line: <# of triangles> <# of attributes>\n" ); + printf( + " Remaining lines: ... [attributes]\n" + ); + printf( "\n" ); + printf( + " Points are indices into the corresponding .node file. The first three\n" + ); + printf( + " points are the corners, and are listed in counterclockwise order around\n" + ); + printf( + " each triangle. (The remaining points, if any, depend on the type of\n" ); + printf( + " finite element used.) The attributes are just like those of .node\n" ); + printf( + " files. Because there is no simple mapping from input to output\n" ); + printf( + " triangles, an attempt is made to interpolate attributes, which may\n" ); + printf( + " result in a good deal of diffusion of attributes among nearby triangles\n" + ); + printf( + " as the triangulation is refined. Diffusion does not occur across\n" ); + printf( + " segments, so attributes used to identify segment-bounded regions remain\n" + ); + printf( + " intact. In output .ele files, all triangles have three points each\n" ); + printf( + " unless the -o2 switch is used, in which case they have six, and the\n" ); + printf( + " fourth, fifth, and sixth points lie on the midpoints of the edges\n" ); + printf( " opposite the first, second, and third corners.\n\n" ); + printf( " .poly files:\n" ); + printf( + " First line: <# of points> <# of attributes>\n" ); + printf( + " <# of boundary markers (0 or 1)>\n" + ); + printf( + " Following lines: [attributes] [boundary marker]\n" ); + printf( " One line: <# of segments> <# of boundary markers (0 or 1)>\n" ); + printf( + " Following lines: [boundary marker]\n" ); + printf( " One line: <# of holes>\n" ); + printf( " Following lines: \n" ); + printf( + " Optional line: <# of regional attributes and/or area constraints>\n" ); + printf( + " Optional following lines: \n" ); + printf( "\n" ); + printf( + " A .poly file represents a PSLG, as well as some additional information.\n" + ); + printf( + " The first section lists all the points, and is identical to the format\n" + ); + printf( + " of .node files. <# of points> may be set to zero to indicate that the\n" + ); + printf( + " points are listed in a separate .node file; .poly files produced by\n" ); + printf( + " Triangle always have this format. This has the advantage that a point\n" + ); + printf( + " set may easily be triangulated with or without segments. (The same\n" ); + printf( + " effect can be achieved, albeit using more disk space, by making a copy\n" + ); + printf( + " of the .poly file with the extension .node; all sections of the file\n" ); + printf( " but the first are ignored.)\n\n" ); + printf( + " The second section lists the segments. Segments are edges whose\n" ); + printf( + " presence in the triangulation is enforced. Each segment is specified\n" ); + printf( + " by listing the indices of its two endpoints. This means that you must\n" + ); + printf( + " include its endpoints in the point list. If -s, -q, and -a are not\n" ); + printf( + " selected, Triangle will produce a constrained Delaunay triangulation,\n" ); + printf( + " in which each segment appears as a single edge in the triangulation.\n" ); + printf( + " If -q or -a is selected, Triangle will produce a conforming Delaunay\n" ); + printf( + " triangulation, in which segments may be subdivided into smaller edges.\n" + ); + printf( " Each segment, like each point, may have a boundary marker.\n\n" ); + printf( + " The third section lists holes (and concavities, if -c is selected) in\n" ); + printf( + " the triangulation. Holes are specified by identifying a point inside\n" ); + printf( + " each hole. After the triangulation is formed, Triangle creates holes\n" ); + printf( + " by eating triangles, spreading out from each hole point until its\n" ); + printf( + " progress is blocked by PSLG segments; you must be careful to enclose\n" ); + printf( + " each hole in segments, or your whole triangulation may be eaten away.\n" ); + printf( + " If the two triangles abutting a segment are eaten, the segment itself\n" ); + printf( + " is also eaten. Do not place a hole directly on a segment; if you do,\n" ); + printf( " Triangle will choose one side of the segment arbitrarily.\n\n" ); + printf( + " The optional fourth section lists regional attributes (to be assigned\n" ); + printf( + " to all triangles in a region) and regional constraints on the maximum\n" ); + printf( + " triangle area. Triangle will read this section only if the -A switch\n" ); + printf( + " is used or the -a switch is used without a number following it, and the\n" + ); + printf( + " -r switch is not used. Regional attributes and area constraints are\n" ); + printf( + " propagated in the same manner as holes; you specify a point for each\n" ); + printf( + " attribute and/or constraint, and the attribute and/or constraint will\n" ); + printf( + " affect the whole region (bounded by segments) containing the point. If\n" + ); + printf( + " two values are written on a line after the x and y coordinate, the\n" ); + printf( + " former is assumed to be a regional attribute (but will only be applied\n" + ); + printf( + " if the -A switch is selected), and the latter is assumed to be a\n" ); + printf( + " regional area constraint (but will only be applied if the -a switch is\n" + ); + printf( + " selected). You may also specify just one value after the coordinates,\n" + ); + printf( + " which can serve as both an attribute and an area constraint, depending\n" + ); + printf( + " on the choice of switches. If you are using the -A and -a switches\n" ); + printf( + " simultaneously and wish to assign an attribute to some region without\n" ); + printf( " imposing an area constraint, use a negative maximum area.\n\n" ); + printf( + " When a triangulation is created from a .poly file, you must either\n" ); + printf( + " enclose the entire region to be triangulated in PSLG segments, or\n" ); + printf( + " use the -c switch, which encloses the convex hull of the input point\n" ); + printf( + " set. If you do not use the -c switch, Triangle will eat all triangles\n" + ); + printf( + " on the outer boundary that are not protected by segments; if you are\n" ); + printf( + " not careful, your whole triangulation may be eaten away. If you do\n" ); + printf( + " use the -c switch, you can still produce concavities by appropriate\n" ); + printf( " placement of holes just inside the convex hull.\n\n" ); + printf( + " An ideal PSLG has no intersecting segments, nor any points that lie\n" ); + printf( + " upon segments (except, of course, the endpoints of each segment.) You\n" + ); + printf( + " aren't required to make your .poly files ideal, but you should be aware\n" + ); + printf( + " of what can go wrong. Segment intersections are relatively safe -\n" ); + printf( + " Triangle will calculate the intersection points for you and add them to\n" + ); + printf( + " the triangulation - as long as your machine's floating-point precision\n" + ); + printf( + " doesn't become a problem. You are tempting the fates if you have three\n" + ); + printf( + " segments that cross at the same location, and expect Triangle to figure\n" + ); + printf( + " out where the intersection point is. Thanks to floating-point roundoff\n" + ); + printf( + " error, Triangle will probably decide that the three segments intersect\n" + ); + printf( + " at three different points, and you will find a minuscule triangle in\n" ); + printf( + " your output - unless Triangle tries to refine the tiny triangle, uses\n" ); + printf( + " up the last bit of machine precision, and fails to terminate at all.\n" ); + printf( + " You're better off putting the intersection point in the input files,\n" ); + printf( + " and manually breaking up each segment into two. Similarly, if you\n" ); + printf( + " place a point at the middle of a segment, and hope that Triangle will\n" ); + printf( + " break up the segment at that point, you might get lucky. On the other\n" + ); + printf( + " hand, Triangle might decide that the point doesn't lie precisely on the\n" + ); + printf( + " line, and you'll have a needle-sharp triangle in your output - or a lot\n" + ); + printf( " of tiny triangles if you're generating a quality mesh.\n\n" ); + printf( + " When Triangle reads a .poly file, it also writes a .poly file, which\n" ); + printf( + " includes all edges that are part of input segments. If the -c switch\n" ); + printf( + " is used, the output .poly file will also include all of the edges on\n" ); + printf( + " the convex hull. Hence, the output .poly file is useful for finding\n" ); + printf( + " edges associated with input segments and setting boundary conditions in\n" + ); + printf( + " finite element simulations. More importantly, you will need it if you\n" + ); + printf( + " plan to refine the output mesh, and don't want segments to be missing\n" ); + printf( " in later triangulations.\n\n" ); + printf( " .area files:\n" ); + printf( " First line: <# of triangles>\n" ); + printf( " Following lines: \n\n" ); + printf( + " An .area file associates with each triangle a maximum area that is used\n" + ); + printf( + " for mesh refinement. As with other file formats, every triangle must\n" ); + printf( + " be represented, and they must be numbered consecutively. A triangle\n" ); + printf( + " may be left unconstrained by assigning it a negative maximum area.\n" ); + printf( "\n" ); + printf( " .edge files:\n" ); + printf( " First line: <# of edges> <# of boundary markers (0 or 1)>\n" ); + printf( + " Following lines: [boundary marker]\n" ); + printf( "\n" ); + printf( + " Endpoints are indices into the corresponding .node file. Triangle can\n" + ); + printf( + " produce .edge files (use the -e switch), but cannot read them. The\n" ); + printf( + " optional column of boundary markers is suppressed by the -B switch.\n" ); + printf( "\n" ); + printf( + " In Voronoi diagrams, one also finds a special kind of edge that is an\n" ); + printf( + " infinite ray with only one endpoint. For these edges, a different\n" ); + printf( " format is used:\n\n" ); + printf( " -1 \n\n" ); + printf( + " The `direction' is a floating-point vector that indicates the direction\n" + ); + printf( " of the infinite ray.\n\n" ); + printf( " .neigh files:\n" ); + printf( + " First line: <# of triangles> <# of neighbors per triangle (always 3)>\n" + ); + printf( + " Following lines: \n" ); + printf( "\n" ); + printf( + " Neighbors are indices into the corresponding .ele file. An index of -1\n" + ); + printf( + " indicates a mesh boundary, and therefore no neighbor. Triangle can\n" ); + printf( + " produce .neigh files (use the -n switch), but cannot read them.\n" ); + printf( "\n" ); + printf( + " The first neighbor of triangle i is opposite the first corner of\n" ); + printf( " triangle i, and so on.\n\n" ); + printf( "Boundary Markers:\n\n" ); + printf( + " Boundary markers are tags used mainly to identify which output points and\n" + ); + printf( + " edges are associated with which PSLG segment, and to identify which\n" ); + printf( + " points and edges occur on a boundary of the triangulation. A common use\n" + ); + printf( + " is to determine where boundary conditions should be applied to a finite\n" ); + printf( + " element mesh. You can prevent boundary markers from being written into\n" ); + printf( " files produced by Triangle by using the -B switch.\n\n" ); + printf( + " The boundary marker associated with each segment in an output .poly file\n" + ); + printf( " or edge in an output .edge file is chosen as follows:\n" ); + printf( + " - If an output edge is part or all of a PSLG segment with a nonzero\n" ); + printf( + " boundary marker, then the edge is assigned the same marker.\n" ); + printf( + " - Otherwise, if the edge occurs on a boundary of the triangulation\n" ); + printf( + " (including boundaries of holes), then the edge is assigned the marker\n" + ); + printf( " one (1).\n" ); + printf( " - Otherwise, the edge is assigned the marker zero (0).\n" ); + printf( + " The boundary marker associated with each point in an output .node file is\n" + ); + printf( " chosen as follows:\n" ); + printf( + " - If a point is assigned a nonzero boundary marker in the input file,\n" ); + printf( + " then it is assigned the same marker in the output .node file.\n" ); + printf( + " - Otherwise, if the point lies on a PSLG segment (including the\n" ); + printf( + " segment's endpoints) with a nonzero boundary marker, then the point\n" ); + printf( + " is assigned the same marker. If the point lies on several such\n" ); + printf( " segments, one of the markers is chosen arbitrarily.\n" ); + printf( + " - Otherwise, if the point occurs on a boundary of the triangulation,\n" ); + printf( " then the point is assigned the marker one (1).\n" ); + printf( " - Otherwise, the point is assigned the marker zero (0).\n" ); + printf( "\n" ); + printf( + " If you want Triangle to determine for you which points and edges are on\n" ); + printf( + " the boundary, assign them the boundary marker zero (or use no markers at\n" + ); + printf( + " all) in your input files. Alternatively, you can mark some of them and\n" ); + printf( " leave others marked zero, allowing Triangle to label them.\n\n" ); + printf( "Triangulation Iteration Numbers:\n\n" ); + printf( + " Because Triangle can read and refine its own triangulations, input\n" ); + printf( + " and output files have iteration numbers. For instance, Triangle might\n" ); + printf( + " read the files mesh.3.node, mesh.3.ele, and mesh.3.poly, refine the\n" ); + printf( + " triangulation, and output the files mesh.4.node, mesh.4.ele, and\n" ); + printf( " mesh.4.poly. Files with no iteration number are treated as if\n" ); + printf( + " their iteration number is zero; hence, Triangle might read the file\n" ); + printf( + " points.node, triangulate it, and produce the files points.1.node and\n" ); + printf( " points.1.ele.\n\n" ); + printf( + " Iteration numbers allow you to create a sequence of successively finer\n" ); + printf( + " meshes suitable for multigrid methods. They also allow you to produce a\n" + ); + printf( + " sequence of meshes using error estimate-driven mesh refinement.\n" ); + printf( "\n" ); + printf( + " If you're not using refinement or quality meshing, and you don't like\n" ); + printf( + " iteration numbers, use the -I switch to disable them. This switch will\n" ); + printf( + " also disable output of .node and .poly files to prevent your input files\n" + ); + printf( + " from being overwritten. (If the input is a .poly file that contains its\n" + ); + printf( " own points, a .node file will be written.)\n\n" ); + printf( "Examples of How to Use Triangle:\n\n" ); + printf( + " `triangle dots' will read points from dots.node, and write their Delaunay\n" + ); + printf( + " triangulation to dots.1.node and dots.1.ele. (dots.1.node will be\n" ); + printf( + " identical to dots.node.) `triangle -I dots' writes the triangulation to\n" + ); + printf( + " dots.ele instead. (No additional .node file is needed, so none is\n" ); + printf( " written.)\n\n" ); + printf( + " `triangle -pe object.1' will read a PSLG from object.1.poly (and possibly\n" + ); + printf( + " object.1.node, if the points are omitted from object.1.poly) and write\n" ); + printf( " their constrained Delaunay triangulation to object.2.node and\n" ); + printf( + " object.2.ele. The segments will be copied to object.2.poly, and all\n" ); + printf( " edges will be written to object.2.edge.\n\n" ); + printf( + " `triangle -pq31.5a.1 object' will read a PSLG from object.poly (and\n" ); + printf( + " possibly object.node), generate a mesh whose angles are all greater than\n" + ); + printf( + " 31.5 degrees and whose triangles all have area smaller than 0.1, and\n" ); + printf( + " write the mesh to object.1.node and object.1.ele. Each segment may have\n" + ); + printf( + " been broken up into multiple edges; the resulting constrained edges are\n" ); + printf( " written to object.1.poly.\n\n" ); + printf( + " Here is a sample file `box.poly' describing a square with a square hole:\n" + ); + printf( "\n" ); + printf( + " # A box with eight points in 2D, no attributes, one boundary marker.\n" ); + printf( " 8 2 0 1\n" ); + printf( " # Outer box has these vertices:\n" ); + printf( " 1 0 0 0\n" ); + printf( " 2 0 3 0\n" ); + printf( " 3 3 0 0\n" ); + printf( " 4 3 3 33 # A special marker for this point.\n" ); + printf( " # Inner square has these vertices:\n" ); + printf( " 5 1 1 0\n" ); + printf( " 6 1 2 0\n" ); + printf( " 7 2 1 0\n" ); + printf( " 8 2 2 0\n" ); + printf( " # Five segments with boundary markers.\n" ); + printf( " 5 1\n" ); + printf( " 1 1 2 5 # Left side of outer box.\n" ); + printf( " 2 5 7 0 # Segments 2 through 5 enclose the hole.\n" ); + printf( " 3 7 8 0\n" ); + printf( " 4 8 6 10\n" ); + printf( " 5 6 5 0\n" ); + printf( " # One hole in the middle of the inner square.\n" ); + printf( " 1\n" ); + printf( " 1 1.5 1.5\n\n" ); + printf( + " Note that some segments are missing from the outer square, so one must\n" ); + printf( + " use the `-c' switch. After `triangle -pqc box.poly', here is the output\n" + ); + printf( + " file `box.1.node', with twelve points. The last four points were added\n" ); + printf( + " to meet the angle constraint. Points 1, 2, and 9 have markers from\n" ); + printf( + " segment 1. Points 6 and 8 have markers from segment 4. All the other\n" ); + printf( + " points but 4 have been marked to indicate that they lie on a boundary.\n" ); + printf( "\n" ); + printf( " 12 2 0 1\n" ); + printf( " 1 0 0 5\n" ); + printf( " 2 0 3 5\n" ); + printf( " 3 3 0 1\n" ); + printf( " 4 3 3 33\n" ); + printf( " 5 1 1 1\n" ); + printf( " 6 1 2 10\n" ); + printf( " 7 2 1 1\n" ); + printf( " 8 2 2 10\n" ); + printf( " 9 0 1.5 5\n" ); + printf( " 10 1.5 0 1\n" ); + printf( " 11 3 1.5 1\n" ); + printf( " 12 1.5 3 1\n" ); + printf( " # Generated by triangle -pqc box.poly\n\n" ); + printf( " Here is the output file `box.1.ele', with twelve triangles.\n\n" ); + printf( " 12 3 0\n" ); + printf( " 1 5 6 9\n" ); + printf( " 2 10 3 7\n" ); + printf( " 3 6 8 12\n" ); + printf( " 4 9 1 5\n" ); + printf( " 5 6 2 9\n" ); + printf( " 6 7 3 11\n" ); + printf( " 7 11 4 8\n" ); + printf( " 8 7 5 10\n" ); + printf( " 9 12 2 6\n" ); + printf( " 10 8 7 11\n" ); + printf( " 11 5 1 10\n" ); + printf( " 12 8 4 12\n" ); + printf( " # Generated by triangle -pqc box.poly\n\n" ); + printf( + " Here is the output file `box.1.poly'. Note that segments have been added\n" + ); + printf( + " to represent the convex hull, and some segments have been split by newly\n" + ); + printf( + " added points. Note also that <# of points> is set to zero to indicate\n" ); + printf( " that the points should be read from the .node file.\n\n" ); + printf( " 0 2 0 1\n" ); + printf( " 12 1\n" ); + printf( " 1 1 9 5\n" ); + printf( " 2 5 7 1\n" ); + printf( " 3 8 7 1\n" ); + printf( " 4 6 8 10\n" ); + printf( " 5 5 6 1\n" ); + printf( " 6 3 10 1\n" ); + printf( " 7 4 11 1\n" ); + printf( " 8 2 12 1\n" ); + printf( " 9 9 2 5\n" ); + printf( " 10 10 1 1\n" ); + printf( " 11 11 3 1\n" ); + printf( " 12 12 4 1\n" ); + printf( " 1\n" ); + printf( " 1 1.5 1.5\n" ); + printf( " # Generated by triangle -pqc box.poly\n\n" ); + printf( "Refinement and Area Constraints:\n\n" ); + printf( + " The -r switch causes a mesh (.node and .ele files) to be read and\n" ); + printf( + " refined. If the -p switch is also used, a .poly file is read and used to\n" + ); + printf( + " specify edges that are constrained and cannot be eliminated (although\n" ); + printf( + " they can be divided into smaller edges) by the refinement process.\n" ); + printf( "\n" ); + printf( + " When you refine a mesh, you generally want to impose tighter quality\n" ); + printf( + " constraints. One way to accomplish this is to use -q with a larger\n" ); + printf( + " angle, or -a followed by a smaller area than you used to generate the\n" ); + printf( + " mesh you are refining. Another way to do this is to create an .area\n" ); + printf( + " file, which specifies a maximum area for each triangle, and use the -a\n" ); + printf( + " switch (without a number following). Each triangle's area constraint is\n" + ); + printf( + " applied to that triangle. Area constraints tend to diffuse as the mesh\n" ); + printf( + " is refined, so if there are large variations in area constraint between\n" ); + printf( " adjacent triangles, you may not get the results you want.\n\n" ); + printf( + " If you are refining a mesh composed of linear (three-node) elements, the\n" + ); + printf( + " output mesh will contain all the nodes present in the input mesh, in the\n" + ); + printf( + " same order, with new nodes added at the end of the .node file. However,\n" + ); + printf( + " there is no guarantee that each output element is contained in a single\n" ); + printf( + " input element. Often, output elements will overlap two input elements,\n" ); + printf( + " and input edges are not present in the output mesh. Hence, a sequence of\n" + ); + printf( + " refined meshes will form a hierarchy of nodes, but not a hierarchy of\n" ); + printf( + " elements. If you a refining a mesh of higher-order elements, the\n" ); + printf( + " hierarchical property applies only to the nodes at the corners of an\n" ); + printf( " element; other nodes may not be present in the refined mesh.\n\n" ); + printf( + " It is important to understand that maximum area constraints in .poly\n" ); + printf( + " files are handled differently from those in .area files. A maximum area\n" + ); + printf( + " in a .poly file applies to the whole (segment-bounded) region in which a\n" + ); + printf( + " point falls, whereas a maximum area in an .area file applies to only one\n" + ); + printf( + " triangle. Area constraints in .poly files are used only when a mesh is\n" ); + printf( + " first generated, whereas area constraints in .area files are used only to\n" + ); + printf( + " refine an existing mesh, and are typically based on a posteriori error\n" ); + printf( + " estimates resulting from a finite element simulation on that mesh.\n" ); + printf( "\n" ); + printf( + " `triangle -rq25 object.1' will read object.1.node and object.1.ele, then\n" + ); + printf( + " refine the triangulation to enforce a 25 degree minimum angle, and then\n" ); + printf( + " write the refined triangulation to object.2.node and object.2.ele.\n" ); + printf( "\n" ); + printf( + " `triangle -rpaa6.2 z.3' will read z.3.node, z.3.ele, z.3.poly, and\n" ); + printf( + " z.3.area. After reconstructing the mesh and its segments, Triangle will\n" + ); + printf( + " refine the mesh so that no triangle has area greater than 6.2, and\n" ); + printf( + " furthermore the triangles satisfy the maximum area constraints in\n" ); + printf( + " z.3.area. The output is written to z.4.node, z.4.ele, and z.4.poly.\n" ); + printf( "\n" ); + printf( + " The sequence `triangle -qa1 x', `triangle -rqa.3 x.1', `triangle -rqa.1\n" ); + printf( + " x.2' creates a sequence of successively finer meshes x.1, x.2, and x.3,\n" ); + printf( " suitable for multigrid.\n\n" ); + printf( "Convex Hulls and Mesh Boundaries:\n\n" ); + printf( + " If the input is a point set (rather than a PSLG), Triangle produces its\n" ); + printf( + " convex hull as a by-product in the output .poly file if you use the -c\n" ); + printf( + " switch. There are faster algorithms for finding a two-dimensional convex\n" + ); + printf( + " hull than triangulation, of course, but this one comes for free. If the\n" + ); + printf( + " input is an unconstrained mesh (you are using the -r switch but not the\n" ); + printf( + " -p switch), Triangle produces a list of its boundary edges (including\n" ); + printf( " hole boundaries) as a by-product if you use the -c switch.\n\n" ); + printf( "Voronoi Diagrams:\n\n" ); + printf( + " The -v switch produces a Voronoi diagram, in files suffixed .v.node and\n" ); + printf( + " .v.edge. For example, `triangle -v points' will read points.node,\n" ); + printf( + " produce its Delaunay triangulation in points.1.node and points.1.ele,\n" ); + printf( + " and produce its Voronoi diagram in points.1.v.node and points.1.v.edge.\n" ); + printf( + " The .v.node file contains a list of all Voronoi vertices, and the .v.edge\n" + ); + printf( + " file contains a list of all Voronoi edges, some of which may be infinite\n" + ); + printf( + " rays. (The choice of filenames makes it easy to run the set of Voronoi\n" ); + printf( " vertices through Triangle, if so desired.)\n\n" ); + printf( + " This implementation does not use exact arithmetic to compute the Voronoi\n" + ); + printf( + " vertices, and does not check whether neighboring vertices are identical.\n" + ); + printf( + " Be forewarned that if the Delaunay triangulation is degenerate or\n" ); + printf( + " near-degenerate, the Voronoi diagram may have duplicate points, crossing\n" + ); + printf( + " edges, or infinite rays whose direction vector is zero. Also, if you\n" ); + printf( + " generate a constrained (as opposed to conforming) Delaunay triangulation,\n" + ); + printf( + " or if the triangulation has holes, the corresponding Voronoi diagram is\n" ); + printf( " likely to have crossing edges and unlikely to make sense.\n\n" ); + printf( "Mesh Topology:\n\n" ); + printf( + " You may wish to know which triangles are adjacent to a certain Delaunay\n" ); + printf( + " edge in an .edge file, which Voronoi regions are adjacent to a certain\n" ); + printf( + " Voronoi edge in a .v.edge file, or which Voronoi regions are adjacent to\n" + ); + printf( + " each other. All of this information can be found by cross-referencing\n" ); + printf( + " output files with the recollection that the Delaunay triangulation and\n" ); + printf( " the Voronoi diagrams are planar duals.\n\n" ); + printf( + " Specifically, edge i of an .edge file is the dual of Voronoi edge i of\n" ); + printf( + " the corresponding .v.edge file, and is rotated 90 degrees counterclock-\n" ); + printf( + " wise from the Voronoi edge. Triangle j of an .ele file is the dual of\n" ); + printf( + " vertex j of the corresponding .v.node file; and Voronoi region k is the\n" ); + printf( " dual of point k of the corresponding .node file.\n\n" ); + printf( + " Hence, to find the triangles adjacent to a Delaunay edge, look at the\n" ); + printf( + " vertices of the corresponding Voronoi edge; their dual triangles are on\n" ); + printf( + " the left and right of the Delaunay edge, respectively. To find the\n" ); + printf( + " Voronoi regions adjacent to a Voronoi edge, look at the endpoints of the\n" + ); + printf( + " corresponding Delaunay edge; their dual regions are on the right and left\n" + ); + printf( + " of the Voronoi edge, respectively. To find which Voronoi regions are\n" ); + printf( " adjacent to each other, just read the list of Delaunay edges.\n" ); + printf( "\n" ); + printf( "Statistics:\n" ); + printf( "\n" ); + printf( + " After generating a mesh, Triangle prints a count of the number of points,\n" + ); + printf( + " triangles, edges, boundary edges, and segments in the output mesh. If\n" ); + printf( + " you've forgotten the statistics for an existing mesh, the -rNEP switches\n" + ); + printf( + " (or -rpNEP if you've got a .poly file for the existing mesh) will\n" ); + printf( " regenerate these statistics without writing any output.\n\n" ); + printf( + " The -V switch produces extended statistics, including a rough estimate\n" ); + printf( + " of memory use and a histogram of triangle aspect ratios and angles in the\n" + ); + printf( " mesh.\n\n" ); + printf( "Exact Arithmetic:\n\n" ); + printf( + " Triangle uses adaptive exact arithmetic to perform what computational\n" ); + printf( + " geometers call the `orientation' and `incircle' tests. If the floating-\n" + ); + printf( + " point arithmetic of your machine conforms to the IEEE 754 standard (as\n" ); + printf( + " most workstations do), and does not use extended precision internal\n" ); + printf( + " registers, then your output is guaranteed to be an absolutely true\n" ); + printf( " Delaunay or conforming Delaunay triangulation, roundoff error\n" ); + printf( + " notwithstanding. The word `adaptive' implies that these arithmetic\n" ); + printf( + " routines compute the result only to the precision necessary to guarantee\n" + ); + printf( + " correctness, so they are usually nearly as fast as their approximate\n" ); + printf( + " counterparts. The exact tests can be disabled with the -X switch. On\n" ); + printf( + " most inputs, this switch will reduce the computation time by about eight\n" + ); + printf( + " percent - it's not worth the risk. There are rare difficult inputs\n" ); + printf( + " (having many collinear and cocircular points), however, for which the\n" ); + printf( + " difference could be a factor of two. These are precisely the inputs most\n" + ); + printf( " likely to cause errors if you use the -X switch.\n\n" ); + printf( + " Unfortunately, these routines don't solve every numerical problem. Exact\n" + ); + printf( + " arithmetic is not used to compute the positions of points, because the\n" ); + printf( + " bit complexity of point coordinates would grow without bound. Hence,\n" ); + printf( + " segment intersections aren't computed exactly; in very unusual cases,\n" ); + printf( + " roundoff error in computing an intersection point might actually lead to\n" + ); + printf( + " an inverted triangle and an invalid triangulation. (This is one reason\n" ); + printf( + " to compute your own intersection points in your .poly files.) Similarly,\n" + ); + printf( + " exact arithmetic is not used to compute the vertices of the Voronoi\n" ); + printf( " diagram.\n\n" ); + printf( + " Underflow and overflow can also cause difficulties; the exact arithmetic\n" + ); + printf( + " routines do not ameliorate out-of-bounds exponents, which can arise\n" ); + printf( + " during the orientation and incircle tests. As a rule of thumb, you\n" ); + printf( + " should ensure that your input values are within a range such that their\n" ); + printf( + " third powers can be taken without underflow or overflow. Underflow can\n" ); + printf( + " silently prevent the tests from being performed exactly, while overflow\n" ); + printf( " will typically cause a floating exception.\n\n" ); + printf( "Calling Triangle from Another Program:\n\n" ); + printf( " Read the file triangle.h for details.\n\n" ); + printf( "Troubleshooting:\n\n" ); + printf( " Please read this section before mailing me bugs.\n\n" ); + printf( " `My output mesh has no triangles!'\n\n" ); + printf( + " If you're using a PSLG, you've probably failed to specify a proper set\n" + ); + printf( + " of bounding segments, or forgotten to use the -c switch. Or you may\n" ); + printf( + " have placed a hole badly. To test these possibilities, try again with\n" + ); + printf( + " the -c and -O switches. Alternatively, all your input points may be\n" ); + printf( + " collinear, in which case you can hardly expect to triangulate them.\n" ); + printf( "\n" ); + printf( " `Triangle doesn't terminate, or just crashes.'\n" ); + printf( "\n" ); + printf( + " Bad things can happen when triangles get so small that the distance\n" ); + printf( + " between their vertices isn't much larger than the precision of your\n" ); + printf( + " machine's arithmetic. If you've compiled Triangle for single-precision\n" + ); + printf( + " arithmetic, you might do better by recompiling it for double-precision.\n" + ); + printf( + " Then again, you might just have to settle for more lenient constraints\n" + ); + printf( + " on the minimum angle and the maximum area than you had planned.\n" ); + printf( "\n" ); + printf( + " You can minimize precision problems by ensuring that the origin lies\n" ); + printf( + " inside your point set, or even inside the densest part of your\n" ); + printf( + " mesh. On the other hand, if you're triangulating an object whose x\n" ); + printf( + " coordinates all fall between 6247133 and 6247134, you're not leaving\n" ); + printf( " much floating-point precision for Triangle to work with.\n\n" ); + printf( + " Precision problems can occur covertly if the input PSLG contains two\n" ); + printf( + " segments that meet (or intersect) at a very small angle, or if such an\n" + ); + printf( + " angle is introduced by the -c switch, which may occur if a point lies\n" ); + printf( + " ever-so-slightly inside the convex hull, and is connected by a PSLG\n" ); + printf( + " segment to a point on the convex hull. If you don't realize that a\n" ); + printf( + " small angle is being formed, you might never discover why Triangle is\n" ); + printf( + " crashing. To check for this possibility, use the -S switch (with an\n" ); + printf( + " appropriate limit on the number of Steiner points, found by trial-and-\n" + ); + printf( + " error) to stop Triangle early, and view the output .poly file with\n" ); + printf( + " Show Me (described below). Look carefully for small angles between\n" ); + printf( + " segments; zoom in closely, as such segments might look like a single\n" ); + printf( " segment from a distance.\n\n" ); + printf( + " If some of the input values are too large, Triangle may suffer a\n" ); + printf( + " floating exception due to overflow when attempting to perform an\n" ); + printf( + " orientation or incircle test. (Read the section on exact arithmetic\n" ); + printf( + " above.) Again, I recommend compiling Triangle for double (rather\n" ); + printf( " than single) precision arithmetic.\n\n" ); + printf( + " `The numbering of the output points doesn't match the input points.'\n" ); + printf( "\n" ); + printf( + " You may have eaten some of your input points with a hole, or by placing\n" + ); + printf( " them outside the area enclosed by segments.\n\n" ); + printf( + " `Triangle executes without incident, but when I look at the resulting\n" ); + printf( + " mesh, it has overlapping triangles or other geometric inconsistencies.'\n" ); + printf( "\n" ); + printf( + " If you select the -X switch, Triangle's divide-and-conquer Delaunay\n" ); + printf( + " triangulation algorithm occasionally makes mistakes due to floating-\n" ); + printf( + " point roundoff error. Although these errors are rare, don't use the -X\n" + ); + printf( " switch. If you still have problems, please report the bug.\n" ); + printf( "\n" ); + printf( + " Strange things can happen if you've taken liberties with your PSLG. Do\n" ); + printf( + " you have a point lying in the middle of a segment? Triangle sometimes\n" ); + printf( + " copes poorly with that sort of thing. Do you want to lay out a collinear\n" + ); + printf( + " row of evenly spaced, segment-connected points? Have you simply defined\n" + ); + printf( + " one long segment connecting the leftmost point to the rightmost point,\n" ); + printf( + " and a bunch of points lying along it? This method occasionally works,\n" ); + printf( + " especially with horizontal and vertical lines, but often it doesn't, and\n" + ); + printf( + " you'll have to connect each adjacent pair of points with a separate\n" ); + printf( " segment. If you don't like it, tough.\n\n" ); + printf( + " Furthermore, if you have segments that intersect other than at their\n" ); + printf( + " endpoints, try not to let the intersections fall extremely close to PSLG\n" + ); + printf( " points or each other.\n\n" ); + printf( + " If you have problems refining a triangulation not produced by Triangle:\n" ); + printf( + " Are you sure the triangulation is geometrically valid? Is it formatted\n" ); + printf( + " correctly for Triangle? Are the triangles all listed so the first three\n" + ); + printf( " points are their corners in counterclockwise order?\n\n" ); + printf( "Show Me:\n\n" ); + printf( + " Triangle comes with a separate program named `Show Me', whose primary\n" ); + printf( + " purpose is to draw meshes on your screen or in PostScript. Its secondary\n" + ); + printf( + " purpose is to check the validity of your input files, and do so more\n" ); + printf( + " thoroughly than Triangle does. Show Me requires that you have the X\n" ); + printf( + " Windows system. If you didn't receive Show Me with Triangle, complain to\n" + ); + printf( " whomever you obtained Triangle from, then send me mail.\n\n" ); + printf( "Triangle on the Web:\n\n" ); + printf( + " To see an illustrated, updated version of these instructions, check out\n" ); + printf( "\n" ); + printf( " http://www.cs.cmu.edu/~quake/triangle.html\n" ); + printf( "\n" ); + printf( "A Brief Plea:\n" ); + printf( "\n" ); + printf( + " If you use Triangle, and especially if you use it to accomplish real\n" ); + printf( + " work, I would like very much to hear from you. A short letter or email\n" ); + printf( + " (to jrs@cs.cmu.edu) describing how you use Triangle will mean a lot to\n" ); + printf( + " me. The more people I know are using this program, the more easily I can\n" + ); + printf( + " justify spending time on improvements and on the three-dimensional\n" ); + printf( + " successor to Triangle, which in turn will benefit you. Also, I can put\n" ); + printf( + " you on a list to receive email whenever a new version of Triangle is\n" ); + printf( " available.\n\n" ); + printf( + " If you use a mesh generated by Triangle in a publication, please include\n" + ); + printf( " an acknowledgment as well.\n\n" ); + printf( "Research credit:\n\n" ); + printf( + " Of course, I can take credit for only a fraction of the ideas that made\n" ); + printf( + " this mesh generator possible. Triangle owes its existence to the efforts\n" + ); + printf( + " of many fine computational geometers and other researchers, including\n" ); + printf( + " Marshall Bern, L. Paul Chew, Boris Delaunay, Rex A. Dwyer, David\n" ); + printf( + " Eppstein, Steven Fortune, Leonidas J. Guibas, Donald E. Knuth, C. L.\n" ); + printf( + " Lawson, Der-Tsai Lee, Ernst P. Mucke, Douglas M. Priest, Jim Ruppert,\n" ); + printf( + " Isaac Saias, Bruce J. Schachter, Micha Sharir, Jorge Stolfi, Christopher\n" + ); + printf( + " J. Van Wyk, David F. Watson, and Binhai Zhu. See the comments at the\n" ); + printf( " beginning of the source code for references.\n\n" ); + exit( 0 ); } #endif /* not TRILIBRARY */ @@ -2655,12 +2653,11 @@ void info() /* */ /*****************************************************************************/ -void internalerror() -{ - printf(" Please report this bug to jrs@cs.cmu.edu\n"); - printf(" Include the message above, your input data set, and the exact\n"); - printf(" command line you used to run Triangle.\n"); - exit(1); +void internalerror(){ + printf( " Please report this bug to jrs@cs.cmu.edu\n" ); + printf( " Include the message above, your input data set, and the exact\n" ); + printf( " command line you used to run Triangle.\n" ); + exit( 1 ); } /*****************************************************************************/ @@ -2672,7 +2669,7 @@ void internalerror() /* */ /*****************************************************************************/ -void parsecommandline(argc, argv) +void parsecommandline( argc, argv ) int argc; char **argv; { @@ -2680,315 +2677,320 @@ char **argv; #define STARTINDEX 0 #else /* not TRILIBRARY */ #define STARTINDEX 1 - int increment; - int meshnumber; + int increment; + int meshnumber; #endif /* not TRILIBRARY */ - int i, j; + int i, j; #ifndef CDT_ONLY - int k; - char workstring[FILENAMESIZE]; + int k; + char workstring[FILENAMESIZE]; #endif - poly = refine = quality = vararea = fixedarea = regionattrib = convex = 0; - firstnumber = 1; - edgesout = voronoi = neighbors = geomview = 0; - nobound = nopolywritten = nonodewritten = noelewritten = noiterationnum = 0; - noholes = noexact = 0; - incremental = sweepline = 0; - dwyer = 1; - splitseg = 0; - docheck = 0; - nobisect = 0; - steiner = -1; - order = 1; - minangle = 0.0; - maxarea = -1.0; - quiet = verbose = 0; + poly = refine = quality = vararea = fixedarea = regionattrib = convex = 0; + firstnumber = 1; + edgesout = voronoi = neighbors = geomview = 0; + nobound = nopolywritten = nonodewritten = noelewritten = noiterationnum = 0; + noholes = noexact = 0; + incremental = sweepline = 0; + dwyer = 1; + splitseg = 0; + docheck = 0; + nobisect = 0; + steiner = -1; + order = 1; + minangle = 0.0; + maxarea = -1.0; + quiet = verbose = 0; #ifndef TRILIBRARY - innodefilename[0] = '\0'; + innodefilename[0] = '\0'; #endif /* not TRILIBRARY */ - for (i = STARTINDEX; i < argc; i++) { + for ( i = STARTINDEX; i < argc; i++ ) { #ifndef TRILIBRARY - if (argv[i][0] == '-') { + if ( argv[i][0] == '-' ) { #endif /* not TRILIBRARY */ - for (j = STARTINDEX; argv[i][j] != '\0'; j++) { - if (argv[i][j] == 'p') { - poly = 1; - } + for ( j = STARTINDEX; argv[i][j] != '\0'; j++ ) { + if ( argv[i][j] == 'p' ) { + poly = 1; + } #ifndef CDT_ONLY - if (argv[i][j] == 'r') { - refine = 1; - } - if (argv[i][j] == 'q') { - quality = 1; - if (((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) || - (argv[i][j + 1] == '.')) { - k = 0; - while (((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) || - (argv[i][j + 1] == '.')) { - j++; - workstring[k] = argv[i][j]; - k++; - } - workstring[k] = '\0'; - minangle = (REAL) strtod(workstring, (char **) NULL); - } else { - minangle = 20.0; - } - } - if (argv[i][j] == 'a') { - quality = 1; - if (((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) || - (argv[i][j + 1] == '.')) { - fixedarea = 1; - k = 0; - while (((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) || - (argv[i][j + 1] == '.')) { - j++; - workstring[k] = argv[i][j]; - k++; - } - workstring[k] = '\0'; - maxarea = (REAL) strtod(workstring, (char **) NULL); - if (maxarea <= 0.0) { - printf("Error: Maximum area must be greater than zero.\n"); - exit(1); - } - } else { - vararea = 1; - } - } + if ( argv[i][j] == 'r' ) { + refine = 1; + } + if ( argv[i][j] == 'q' ) { + quality = 1; + if ( ( ( argv[i][j + 1] >= '0' ) && ( argv[i][j + 1] <= '9' ) ) || + ( argv[i][j + 1] == '.' ) ) { + k = 0; + while ( ( ( argv[i][j + 1] >= '0' ) && ( argv[i][j + 1] <= '9' ) ) || + ( argv[i][j + 1] == '.' ) ) { + j++; + workstring[k] = argv[i][j]; + k++; + } + workstring[k] = '\0'; + minangle = (REAL) strtod( workstring, (char **) NULL ); + } + else { + minangle = 20.0; + } + } + if ( argv[i][j] == 'a' ) { + quality = 1; + if ( ( ( argv[i][j + 1] >= '0' ) && ( argv[i][j + 1] <= '9' ) ) || + ( argv[i][j + 1] == '.' ) ) { + fixedarea = 1; + k = 0; + while ( ( ( argv[i][j + 1] >= '0' ) && ( argv[i][j + 1] <= '9' ) ) || + ( argv[i][j + 1] == '.' ) ) { + j++; + workstring[k] = argv[i][j]; + k++; + } + workstring[k] = '\0'; + maxarea = (REAL) strtod( workstring, (char **) NULL ); + if ( maxarea <= 0.0 ) { + printf( "Error: Maximum area must be greater than zero.\n" ); + exit( 1 ); + } + } + else { + vararea = 1; + } + } #endif /* not CDT_ONLY */ - if (argv[i][j] == 'A') { - regionattrib = 1; - } - if (argv[i][j] == 'c') { - convex = 1; - } - if (argv[i][j] == 'z') { - firstnumber = 0; - } - if (argv[i][j] == 'e') { - edgesout = 1; - } - if (argv[i][j] == 'v') { - voronoi = 1; - } - if (argv[i][j] == 'n') { - neighbors = 1; - } - if (argv[i][j] == 'g') { - geomview = 1; - } - if (argv[i][j] == 'B') { - nobound = 1; - } - if (argv[i][j] == 'P') { - nopolywritten = 1; - } - if (argv[i][j] == 'N') { - nonodewritten = 1; - } - if (argv[i][j] == 'E') { - noelewritten = 1; - } + if ( argv[i][j] == 'A' ) { + regionattrib = 1; + } + if ( argv[i][j] == 'c' ) { + convex = 1; + } + if ( argv[i][j] == 'z' ) { + firstnumber = 0; + } + if ( argv[i][j] == 'e' ) { + edgesout = 1; + } + if ( argv[i][j] == 'v' ) { + voronoi = 1; + } + if ( argv[i][j] == 'n' ) { + neighbors = 1; + } + if ( argv[i][j] == 'g' ) { + geomview = 1; + } + if ( argv[i][j] == 'B' ) { + nobound = 1; + } + if ( argv[i][j] == 'P' ) { + nopolywritten = 1; + } + if ( argv[i][j] == 'N' ) { + nonodewritten = 1; + } + if ( argv[i][j] == 'E' ) { + noelewritten = 1; + } #ifndef TRILIBRARY - if (argv[i][j] == 'I') { - noiterationnum = 1; - } + if ( argv[i][j] == 'I' ) { + noiterationnum = 1; + } #endif /* not TRILIBRARY */ - if (argv[i][j] == 'O') { - noholes = 1; - } - if (argv[i][j] == 'X') { - noexact = 1; - } - if (argv[i][j] == 'o') { - if (argv[i][j + 1] == '2') { - j++; - order = 2; - } - } + if ( argv[i][j] == 'O' ) { + noholes = 1; + } + if ( argv[i][j] == 'X' ) { + noexact = 1; + } + if ( argv[i][j] == 'o' ) { + if ( argv[i][j + 1] == '2' ) { + j++; + order = 2; + } + } #ifndef CDT_ONLY - if (argv[i][j] == 'Y') { - nobisect++; - } - if (argv[i][j] == 'S') { - steiner = 0; - while ((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) { - j++; - steiner = steiner * 10 + (int) (argv[i][j] - '0'); - } - } + if ( argv[i][j] == 'Y' ) { + nobisect++; + } + if ( argv[i][j] == 'S' ) { + steiner = 0; + while ( ( argv[i][j + 1] >= '0' ) && ( argv[i][j + 1] <= '9' ) ) { + j++; + steiner = steiner * 10 + (int) ( argv[i][j] - '0' ); + } + } #endif /* not CDT_ONLY */ #ifndef REDUCED - if (argv[i][j] == 'i') { - incremental = 1; - } - if (argv[i][j] == 'F') { - sweepline = 1; - } + if ( argv[i][j] == 'i' ) { + incremental = 1; + } + if ( argv[i][j] == 'F' ) { + sweepline = 1; + } #endif /* not REDUCED */ - if (argv[i][j] == 'l') { - dwyer = 0; - } + if ( argv[i][j] == 'l' ) { + dwyer = 0; + } #ifndef REDUCED #ifndef CDT_ONLY - if (argv[i][j] == 's') { - splitseg = 1; - } + if ( argv[i][j] == 's' ) { + splitseg = 1; + } #endif /* not CDT_ONLY */ - if (argv[i][j] == 'C') { - docheck = 1; - } + if ( argv[i][j] == 'C' ) { + docheck = 1; + } #endif /* not REDUCED */ - if (argv[i][j] == 'Q') { - quiet = 1; - } - if (argv[i][j] == 'V') { - verbose++; - } + if ( argv[i][j] == 'Q' ) { + quiet = 1; + } + if ( argv[i][j] == 'V' ) { + verbose++; + } #ifndef TRILIBRARY - if ((argv[i][j] == 'h') || (argv[i][j] == 'H') || - (argv[i][j] == '?')) { - info(); - } + if ( ( argv[i][j] == 'h' ) || ( argv[i][j] == 'H' ) || + ( argv[i][j] == '?' ) ) { + info(); + } #endif /* not TRILIBRARY */ - } + } #ifndef TRILIBRARY - } else { - strncpy(innodefilename, argv[i], FILENAMESIZE - 1); - innodefilename[FILENAMESIZE - 1] = '\0'; - } + } else { + strncpy( innodefilename, argv[i], FILENAMESIZE - 1 ); + innodefilename[FILENAMESIZE - 1] = '\0'; + } #endif /* not TRILIBRARY */ - } + } #ifndef TRILIBRARY - if (innodefilename[0] == '\0') { - syntax(); - } - if (!strcmp(&innodefilename[strlen(innodefilename) - 5], ".node")) { - innodefilename[strlen(innodefilename) - 5] = '\0'; - } - if (!strcmp(&innodefilename[strlen(innodefilename) - 5], ".poly")) { - innodefilename[strlen(innodefilename) - 5] = '\0'; - poly = 1; - } + if ( innodefilename[0] == '\0' ) { + syntax(); + } + if ( !strcmp( &innodefilename[strlen( innodefilename ) - 5], ".node" ) ) { + innodefilename[strlen( innodefilename ) - 5] = '\0'; + } + if ( !strcmp( &innodefilename[strlen( innodefilename ) - 5], ".poly" ) ) { + innodefilename[strlen( innodefilename ) - 5] = '\0'; + poly = 1; + } #ifndef CDT_ONLY - if (!strcmp(&innodefilename[strlen(innodefilename) - 4], ".ele")) { - innodefilename[strlen(innodefilename) - 4] = '\0'; - refine = 1; - } - if (!strcmp(&innodefilename[strlen(innodefilename) - 5], ".area")) { - innodefilename[strlen(innodefilename) - 5] = '\0'; - refine = 1; - quality = 1; - vararea = 1; - } + if ( !strcmp( &innodefilename[strlen( innodefilename ) - 4], ".ele" ) ) { + innodefilename[strlen( innodefilename ) - 4] = '\0'; + refine = 1; + } + if ( !strcmp( &innodefilename[strlen( innodefilename ) - 5], ".area" ) ) { + innodefilename[strlen( innodefilename ) - 5] = '\0'; + refine = 1; + quality = 1; + vararea = 1; + } #endif /* not CDT_ONLY */ #endif /* not TRILIBRARY */ - steinerleft = steiner; - useshelles = poly || refine || quality || convex; - goodangle = (REAL)cos(minangle * PI / 180.0); - goodangle *= goodangle; - if (refine && noiterationnum) { - printf( - "Error: You cannot use the -I switch when refining a triangulation.\n"); - exit(1); - } - /* Be careful not to allocate space for element area constraints that */ - /* will never be assigned any value (other than the default -1.0). */ - if (!refine && !poly) { - vararea = 0; - } - /* Be careful not to add an extra attribute to each element unless the */ - /* input supports it (PSLG in, but not refining a preexisting mesh). */ - if (refine || !poly) { - regionattrib = 0; - } + steinerleft = steiner; + useshelles = poly || refine || quality || convex; + goodangle = (REAL)cos( minangle * PI / 180.0 ); + goodangle *= goodangle; + if ( refine && noiterationnum ) { + printf( + "Error: You cannot use the -I switch when refining a triangulation.\n" ); + exit( 1 ); + } + /* Be careful not to allocate space for element area constraints that */ + /* will never be assigned any value (other than the default -1.0). */ + if ( !refine && !poly ) { + vararea = 0; + } + /* Be careful not to add an extra attribute to each element unless the */ + /* input supports it (PSLG in, but not refining a preexisting mesh). */ + if ( refine || !poly ) { + regionattrib = 0; + } #ifndef TRILIBRARY - strcpy(inpolyfilename, innodefilename); - strcpy(inelefilename, innodefilename); - strcpy(areafilename, innodefilename); - increment = 0; - strcpy(workstring, innodefilename); - j = 1; - while (workstring[j] != '\0') { - if ((workstring[j] == '.') && (workstring[j + 1] != '\0')) { - increment = j + 1; - } - j++; - } - meshnumber = 0; - if (increment > 0) { - j = increment; - do { - if ((workstring[j] >= '0') && (workstring[j] <= '9')) { - meshnumber = meshnumber * 10 + (int) (workstring[j] - '0'); - } else { - increment = 0; - } - j++; - } while (workstring[j] != '\0'); - } - if (noiterationnum) { - strcpy(outnodefilename, innodefilename); - strcpy(outelefilename, innodefilename); - strcpy(edgefilename, innodefilename); - strcpy(vnodefilename, innodefilename); - strcpy(vedgefilename, innodefilename); - strcpy(neighborfilename, innodefilename); - strcpy(offfilename, innodefilename); - strcat(outnodefilename, ".node"); - strcat(outelefilename, ".ele"); - strcat(edgefilename, ".edge"); - strcat(vnodefilename, ".v.node"); - strcat(vedgefilename, ".v.edge"); - strcat(neighborfilename, ".neigh"); - strcat(offfilename, ".off"); - } else if (increment == 0) { - strcpy(outnodefilename, innodefilename); - strcpy(outpolyfilename, innodefilename); - strcpy(outelefilename, innodefilename); - strcpy(edgefilename, innodefilename); - strcpy(vnodefilename, innodefilename); - strcpy(vedgefilename, innodefilename); - strcpy(neighborfilename, innodefilename); - strcpy(offfilename, innodefilename); - strcat(outnodefilename, ".1.node"); - strcat(outpolyfilename, ".1.poly"); - strcat(outelefilename, ".1.ele"); - strcat(edgefilename, ".1.edge"); - strcat(vnodefilename, ".1.v.node"); - strcat(vedgefilename, ".1.v.edge"); - strcat(neighborfilename, ".1.neigh"); - strcat(offfilename, ".1.off"); - } else { - workstring[increment] = '%'; - workstring[increment + 1] = 'd'; - workstring[increment + 2] = '\0'; - sprintf(outnodefilename, workstring, meshnumber + 1); - strcpy(outpolyfilename, outnodefilename); - strcpy(outelefilename, outnodefilename); - strcpy(edgefilename, outnodefilename); - strcpy(vnodefilename, outnodefilename); - strcpy(vedgefilename, outnodefilename); - strcpy(neighborfilename, outnodefilename); - strcpy(offfilename, outnodefilename); - strcat(outnodefilename, ".node"); - strcat(outpolyfilename, ".poly"); - strcat(outelefilename, ".ele"); - strcat(edgefilename, ".edge"); - strcat(vnodefilename, ".v.node"); - strcat(vedgefilename, ".v.edge"); - strcat(neighborfilename, ".neigh"); - strcat(offfilename, ".off"); - } - strcat(innodefilename, ".node"); - strcat(inpolyfilename, ".poly"); - strcat(inelefilename, ".ele"); - strcat(areafilename, ".area"); + strcpy( inpolyfilename, innodefilename ); + strcpy( inelefilename, innodefilename ); + strcpy( areafilename, innodefilename ); + increment = 0; + strcpy( workstring, innodefilename ); + j = 1; + while ( workstring[j] != '\0' ) { + if ( ( workstring[j] == '.' ) && ( workstring[j + 1] != '\0' ) ) { + increment = j + 1; + } + j++; + } + meshnumber = 0; + if ( increment > 0 ) { + j = increment; + do { + if ( ( workstring[j] >= '0' ) && ( workstring[j] <= '9' ) ) { + meshnumber = meshnumber * 10 + (int) ( workstring[j] - '0' ); + } + else { + increment = 0; + } + j++; + } while ( workstring[j] != '\0' ); + } + if ( noiterationnum ) { + strcpy( outnodefilename, innodefilename ); + strcpy( outelefilename, innodefilename ); + strcpy( edgefilename, innodefilename ); + strcpy( vnodefilename, innodefilename ); + strcpy( vedgefilename, innodefilename ); + strcpy( neighborfilename, innodefilename ); + strcpy( offfilename, innodefilename ); + strcat( outnodefilename, ".node" ); + strcat( outelefilename, ".ele" ); + strcat( edgefilename, ".edge" ); + strcat( vnodefilename, ".v.node" ); + strcat( vedgefilename, ".v.edge" ); + strcat( neighborfilename, ".neigh" ); + strcat( offfilename, ".off" ); + } + else if ( increment == 0 ) { + strcpy( outnodefilename, innodefilename ); + strcpy( outpolyfilename, innodefilename ); + strcpy( outelefilename, innodefilename ); + strcpy( edgefilename, innodefilename ); + strcpy( vnodefilename, innodefilename ); + strcpy( vedgefilename, innodefilename ); + strcpy( neighborfilename, innodefilename ); + strcpy( offfilename, innodefilename ); + strcat( outnodefilename, ".1.node" ); + strcat( outpolyfilename, ".1.poly" ); + strcat( outelefilename, ".1.ele" ); + strcat( edgefilename, ".1.edge" ); + strcat( vnodefilename, ".1.v.node" ); + strcat( vedgefilename, ".1.v.edge" ); + strcat( neighborfilename, ".1.neigh" ); + strcat( offfilename, ".1.off" ); + } + else { + workstring[increment] = '%'; + workstring[increment + 1] = 'd'; + workstring[increment + 2] = '\0'; + sprintf( outnodefilename, workstring, meshnumber + 1 ); + strcpy( outpolyfilename, outnodefilename ); + strcpy( outelefilename, outnodefilename ); + strcpy( edgefilename, outnodefilename ); + strcpy( vnodefilename, outnodefilename ); + strcpy( vedgefilename, outnodefilename ); + strcpy( neighborfilename, outnodefilename ); + strcpy( offfilename, outnodefilename ); + strcat( outnodefilename, ".node" ); + strcat( outpolyfilename, ".poly" ); + strcat( outelefilename, ".ele" ); + strcat( edgefilename, ".edge" ); + strcat( vnodefilename, ".v.node" ); + strcat( vedgefilename, ".v.edge" ); + strcat( neighborfilename, ".neigh" ); + strcat( offfilename, ".off" ); + } + strcat( innodefilename, ".node" ); + strcat( inpolyfilename, ".poly" ); + strcat( inelefilename, ".ele" ); + strcat( areafilename, ".area" ); #endif /* not TRILIBRARY */ } @@ -3011,77 +3013,86 @@ char **argv; /* */ /*****************************************************************************/ -void printtriangle(t) +void printtriangle( t ) struct triedge *t; { - struct triedge printtri; - struct edge printsh; - point printpoint; - - printf("triangle x%lx with orientation %d:\n", (unsigned long) t->tri, - t->orient); - decode(t->tri[0], printtri); - if (printtri.tri == dummytri) { - printf(" [0] = Outer space\n"); - } else { - printf(" [0] = x%lx %d\n", (unsigned long) printtri.tri, - printtri.orient); - } - decode(t->tri[1], printtri); - if (printtri.tri == dummytri) { - printf(" [1] = Outer space\n"); - } else { - printf(" [1] = x%lx %d\n", (unsigned long) printtri.tri, - printtri.orient); - } - decode(t->tri[2], printtri); - if (printtri.tri == dummytri) { - printf(" [2] = Outer space\n"); - } else { - printf(" [2] = x%lx %d\n", (unsigned long) printtri.tri, - printtri.orient); - } - org(*t, printpoint); - if (printpoint == (point) NULL) - printf(" Origin[%d] = NULL\n", (t->orient + 1) % 3 + 3); - else - printf(" Origin[%d] = x%lx (%.12g, %.12g)\n", - (t->orient + 1) % 3 + 3, (unsigned long) printpoint, - printpoint[0], printpoint[1]); - dest(*t, printpoint); - if (printpoint == (point) NULL) - printf(" Dest [%d] = NULL\n", (t->orient + 2) % 3 + 3); - else - printf(" Dest [%d] = x%lx (%.12g, %.12g)\n", - (t->orient + 2) % 3 + 3, (unsigned long) printpoint, - printpoint[0], printpoint[1]); - apex(*t, printpoint); - if (printpoint == (point) NULL) - printf(" Apex [%d] = NULL\n", t->orient + 3); - else - printf(" Apex [%d] = x%lx (%.12g, %.12g)\n", - t->orient + 3, (unsigned long) printpoint, - printpoint[0], printpoint[1]); - if (useshelles) { - sdecode(t->tri[6], printsh); - if (printsh.sh != dummysh) { - printf(" [6] = x%lx %d\n", (unsigned long) printsh.sh, - printsh.shorient); - } - sdecode(t->tri[7], printsh); - if (printsh.sh != dummysh) { - printf(" [7] = x%lx %d\n", (unsigned long) printsh.sh, - printsh.shorient); - } - sdecode(t->tri[8], printsh); - if (printsh.sh != dummysh) { - printf(" [8] = x%lx %d\n", (unsigned long) printsh.sh, - printsh.shorient); - } - } - if (vararea) { - printf(" Area constraint: %.4g\n", areabound(*t)); - } + struct triedge printtri; + struct edge printsh; + point printpoint; + + printf( "triangle x%lx with orientation %d:\n", (unsigned long) t->tri, + t->orient ); + decode( t->tri[0], printtri ); + if ( printtri.tri == dummytri ) { + printf( " [0] = Outer space\n" ); + } + else { + printf( " [0] = x%lx %d\n", (unsigned long) printtri.tri, + printtri.orient ); + } + decode( t->tri[1], printtri ); + if ( printtri.tri == dummytri ) { + printf( " [1] = Outer space\n" ); + } + else { + printf( " [1] = x%lx %d\n", (unsigned long) printtri.tri, + printtri.orient ); + } + decode( t->tri[2], printtri ); + if ( printtri.tri == dummytri ) { + printf( " [2] = Outer space\n" ); + } + else { + printf( " [2] = x%lx %d\n", (unsigned long) printtri.tri, + printtri.orient ); + } + org( *t, printpoint ); + if ( printpoint == (point) NULL ) { + printf( " Origin[%d] = NULL\n", ( t->orient + 1 ) % 3 + 3 ); + } + else{ + printf( " Origin[%d] = x%lx (%.12g, %.12g)\n", + ( t->orient + 1 ) % 3 + 3, (unsigned long) printpoint, + printpoint[0], printpoint[1] ); + } + dest( *t, printpoint ); + if ( printpoint == (point) NULL ) { + printf( " Dest [%d] = NULL\n", ( t->orient + 2 ) % 3 + 3 ); + } + else{ + printf( " Dest [%d] = x%lx (%.12g, %.12g)\n", + ( t->orient + 2 ) % 3 + 3, (unsigned long) printpoint, + printpoint[0], printpoint[1] ); + } + apex( *t, printpoint ); + if ( printpoint == (point) NULL ) { + printf( " Apex [%d] = NULL\n", t->orient + 3 ); + } + else{ + printf( " Apex [%d] = x%lx (%.12g, %.12g)\n", + t->orient + 3, (unsigned long) printpoint, + printpoint[0], printpoint[1] ); + } + if ( useshelles ) { + sdecode( t->tri[6], printsh ); + if ( printsh.sh != dummysh ) { + printf( " [6] = x%lx %d\n", (unsigned long) printsh.sh, + printsh.shorient ); + } + sdecode( t->tri[7], printsh ); + if ( printsh.sh != dummysh ) { + printf( " [7] = x%lx %d\n", (unsigned long) printsh.sh, + printsh.shorient ); + } + sdecode( t->tri[8], printsh ); + if ( printsh.sh != dummysh ) { + printf( " [8] = x%lx %d\n", (unsigned long) printsh.sh, + printsh.shorient ); + } + } + if ( vararea ) { + printf( " Area constraint: %.4g\n", areabound( *t ) ); + } } /*****************************************************************************/ @@ -3095,57 +3106,65 @@ struct triedge *t; /* */ /*****************************************************************************/ -void printshelle(s) +void printshelle( s ) struct edge *s; { - struct edge printsh; - struct triedge printtri; - point printpoint; - - printf("shell edge x%lx with orientation %d and mark %d:\n", - (unsigned long) s->sh, s->shorient, mark(*s)); - sdecode(s->sh[0], printsh); - if (printsh.sh == dummysh) { - printf(" [0] = No shell\n"); - } else { - printf(" [0] = x%lx %d\n", (unsigned long) printsh.sh, - printsh.shorient); - } - sdecode(s->sh[1], printsh); - if (printsh.sh == dummysh) { - printf(" [1] = No shell\n"); - } else { - printf(" [1] = x%lx %d\n", (unsigned long) printsh.sh, - printsh.shorient); - } - sorg(*s, printpoint); - if (printpoint == (point) NULL) - printf(" Origin[%d] = NULL\n", 2 + s->shorient); - else - printf(" Origin[%d] = x%lx (%.12g, %.12g)\n", - 2 + s->shorient, (unsigned long) printpoint, - printpoint[0], printpoint[1]); - sdest(*s, printpoint); - if (printpoint == (point) NULL) - printf(" Dest [%d] = NULL\n", 3 - s->shorient); - else - printf(" Dest [%d] = x%lx (%.12g, %.12g)\n", - 3 - s->shorient, (unsigned long) printpoint, - printpoint[0], printpoint[1]); - decode(s->sh[4], printtri); - if (printtri.tri == dummytri) { - printf(" [4] = Outer space\n"); - } else { - printf(" [4] = x%lx %d\n", (unsigned long) printtri.tri, - printtri.orient); - } - decode(s->sh[5], printtri); - if (printtri.tri == dummytri) { - printf(" [5] = Outer space\n"); - } else { - printf(" [5] = x%lx %d\n", (unsigned long) printtri.tri, - printtri.orient); - } + struct edge printsh; + struct triedge printtri; + point printpoint; + + printf( "shell edge x%lx with orientation %d and mark %d:\n", + (unsigned long) s->sh, s->shorient, mark( *s ) ); + sdecode( s->sh[0], printsh ); + if ( printsh.sh == dummysh ) { + printf( " [0] = No shell\n" ); + } + else { + printf( " [0] = x%lx %d\n", (unsigned long) printsh.sh, + printsh.shorient ); + } + sdecode( s->sh[1], printsh ); + if ( printsh.sh == dummysh ) { + printf( " [1] = No shell\n" ); + } + else { + printf( " [1] = x%lx %d\n", (unsigned long) printsh.sh, + printsh.shorient ); + } + sorg( *s, printpoint ); + if ( printpoint == (point) NULL ) { + printf( " Origin[%d] = NULL\n", 2 + s->shorient ); + } + else{ + printf( " Origin[%d] = x%lx (%.12g, %.12g)\n", + 2 + s->shorient, (unsigned long) printpoint, + printpoint[0], printpoint[1] ); + } + sdest( *s, printpoint ); + if ( printpoint == (point) NULL ) { + printf( " Dest [%d] = NULL\n", 3 - s->shorient ); + } + else{ + printf( " Dest [%d] = x%lx (%.12g, %.12g)\n", + 3 - s->shorient, (unsigned long) printpoint, + printpoint[0], printpoint[1] ); + } + decode( s->sh[4], printtri ); + if ( printtri.tri == dummytri ) { + printf( " [4] = Outer space\n" ); + } + else { + printf( " [4] = x%lx %d\n", (unsigned long) printtri.tri, + printtri.orient ); + } + decode( s->sh[5], printtri ); + if ( printtri.tri == dummytri ) { + printf( " [5] = Outer space\n" ); + } + else { + printf( " [5] = x%lx %d\n", (unsigned long) printtri.tri, + printtri.orient ); + } } /** **/ @@ -3175,48 +3194,49 @@ struct edge *s; /* */ /*****************************************************************************/ -void poolinit(pool, bytecount, itemcount, wtype, alignment) +void poolinit( pool, bytecount, itemcount, wtype, alignment ) struct memorypool *pool; int bytecount; int itemcount; enum wordtype wtype; int alignment; { - int wordsize; - - /* Initialize values in the pool. */ - pool->itemwordtype = wtype; - wordsize = (pool->itemwordtype == POINTER) ? sizeof(VOID *) : sizeof(REAL); - /* Find the proper alignment, which must be at least as large as: */ - /* - The parameter `alignment'. */ - /* - The primary word type, to avoid unaligned accesses. */ - /* - sizeof(VOID *), so the stack of dead items can be maintained */ - /* without unaligned accesses. */ - if (alignment > wordsize) { - pool->alignbytes = alignment; - } else { - pool->alignbytes = wordsize; - } - if (sizeof(VOID *) > pool->alignbytes) { - pool->alignbytes = sizeof(VOID *); - } - pool->itemwords = ((bytecount + pool->alignbytes - 1) / pool->alignbytes) - * (pool->alignbytes / wordsize); - pool->itembytes = pool->itemwords * wordsize; - pool->itemsperblock = itemcount; - - /* Allocate a block of items. Space for `itemsperblock' items and one */ - /* pointer (to point to the next block) are allocated, as well as space */ - /* to ensure alignment of the items. */ - pool->firstblock = (VOID **) malloc(pool->itemsperblock * pool->itembytes - + sizeof(VOID *) + pool->alignbytes); - if (pool->firstblock == (VOID **) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - /* Set the next block pointer to NULL. */ - *(pool->firstblock) = (VOID *) NULL; - poolrestart(pool); + int wordsize; + + /* Initialize values in the pool. */ + pool->itemwordtype = wtype; + wordsize = ( pool->itemwordtype == POINTER ) ? sizeof( VOID * ) : sizeof( REAL ); + /* Find the proper alignment, which must be at least as large as: */ + /* - The parameter `alignment'. */ + /* - The primary word type, to avoid unaligned accesses. */ + /* - sizeof(VOID *), so the stack of dead items can be maintained */ + /* without unaligned accesses. */ + if ( alignment > wordsize ) { + pool->alignbytes = alignment; + } + else { + pool->alignbytes = wordsize; + } + if ( sizeof( VOID * ) > pool->alignbytes ) { + pool->alignbytes = sizeof( VOID * ); + } + pool->itemwords = ( ( bytecount + pool->alignbytes - 1 ) / pool->alignbytes ) + * ( pool->alignbytes / wordsize ); + pool->itembytes = pool->itemwords * wordsize; + pool->itemsperblock = itemcount; + + /* Allocate a block of items. Space for `itemsperblock' items and one */ + /* pointer (to point to the next block) are allocated, as well as space */ + /* to ensure alignment of the items. */ + pool->firstblock = (VOID **) malloc( pool->itemsperblock * pool->itembytes + + sizeof( VOID * ) + pool->alignbytes ); + if ( pool->firstblock == (VOID **) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + /* Set the next block pointer to NULL. */ + *( pool->firstblock ) = (VOID *) NULL; + poolrestart( pool ); } /*****************************************************************************/ @@ -3229,26 +3249,26 @@ int alignment; /* */ /*****************************************************************************/ -void poolrestart(pool) +void poolrestart( pool ) struct memorypool *pool; { - unsigned long alignptr; - - pool->items = 0; - pool->maxitems = 0; - - /* Set the currently active block. */ - pool->nowblock = pool->firstblock; - /* Find the first item in the pool. Increment by the size of (VOID *). */ - alignptr = (unsigned long) (pool->nowblock + 1); - /* Align the item on an `alignbytes'-byte boundary. */ - pool->nextitem = (VOID *) - (alignptr + (unsigned long) pool->alignbytes - - (alignptr % (unsigned long) pool->alignbytes)); - /* There are lots of unallocated items left in this block. */ - pool->unallocateditems = pool->itemsperblock; - /* The stack of deallocated items is empty. */ - pool->deaditemstack = (VOID *) NULL; + unsigned long alignptr; + + pool->items = 0; + pool->maxitems = 0; + + /* Set the currently active block. */ + pool->nowblock = pool->firstblock; + /* Find the first item in the pool. Increment by the size of (VOID *). */ + alignptr = (unsigned long) ( pool->nowblock + 1 ); + /* Align the item on an `alignbytes'-byte boundary. */ + pool->nextitem = (VOID *) + ( alignptr + (unsigned long) pool->alignbytes + - ( alignptr % (unsigned long) pool->alignbytes ) ); + /* There are lots of unallocated items left in this block. */ + pool->unallocateditems = pool->itemsperblock; + /* The stack of deallocated items is empty. */ + pool->deaditemstack = (VOID *) NULL; } /*****************************************************************************/ @@ -3257,14 +3277,14 @@ struct memorypool *pool; /* */ /*****************************************************************************/ -void pooldeinit(pool) +void pooldeinit( pool ) struct memorypool *pool; { - while (pool->firstblock != (VOID **) NULL) { - pool->nowblock = (VOID **) *(pool->firstblock); - free(pool->firstblock); - pool->firstblock = pool->nowblock; - } + while ( pool->firstblock != (VOID **) NULL ) { + pool->nowblock = (VOID **) *( pool->firstblock ); + free( pool->firstblock ); + pool->firstblock = pool->nowblock; + } } /*****************************************************************************/ @@ -3273,59 +3293,61 @@ struct memorypool *pool; /* */ /*****************************************************************************/ -VOID *poolalloc(pool) +VOID *poolalloc( pool ) struct memorypool *pool; { - VOID *newitem; - VOID **newblock; - unsigned long alignptr; - - /* First check the linked list of dead items. If the list is not */ - /* empty, allocate an item from the list rather than a fresh one. */ - if (pool->deaditemstack != (VOID *) NULL) { - newitem = pool->deaditemstack; /* Take first item in list. */ - pool->deaditemstack = * (VOID **) pool->deaditemstack; - } else { - /* Check if there are any free items left in the current block. */ - if (pool->unallocateditems == 0) { - /* Check if another block must be allocated. */ - if (*(pool->nowblock) == (VOID *) NULL) { - /* Allocate a new block of items, pointed to by the previous block. */ - newblock = (VOID **) malloc(pool->itemsperblock * pool->itembytes - + sizeof(VOID *) + pool->alignbytes); - if (newblock == (VOID **) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - *(pool->nowblock) = (VOID *) newblock; - /* The next block pointer is NULL. */ - *newblock = (VOID *) NULL; - } - /* Move to the new block. */ - pool->nowblock = (VOID **) *(pool->nowblock); - /* Find the first item in the block. */ - /* Increment by the size of (VOID *). */ - alignptr = (unsigned long) (pool->nowblock + 1); - /* Align the item on an `alignbytes'-byte boundary. */ - pool->nextitem = (VOID *) - (alignptr + (unsigned long) pool->alignbytes - - (alignptr % (unsigned long) pool->alignbytes)); - /* There are lots of unallocated items left in this block. */ - pool->unallocateditems = pool->itemsperblock; - } - /* Allocate a new item. */ - newitem = pool->nextitem; - /* Advance `nextitem' pointer to next free item in block. */ - if (pool->itemwordtype == POINTER) { - pool->nextitem = (VOID *) ((VOID **) pool->nextitem + pool->itemwords); - } else { - pool->nextitem = (VOID *) ((REAL *) pool->nextitem + pool->itemwords); - } - pool->unallocateditems--; - pool->maxitems++; - } - pool->items++; - return newitem; + VOID *newitem; + VOID **newblock; + unsigned long alignptr; + + /* First check the linked list of dead items. If the list is not */ + /* empty, allocate an item from the list rather than a fresh one. */ + if ( pool->deaditemstack != (VOID *) NULL ) { + newitem = pool->deaditemstack; /* Take first item in list. */ + pool->deaditemstack = *(VOID **) pool->deaditemstack; + } + else { + /* Check if there are any free items left in the current block. */ + if ( pool->unallocateditems == 0 ) { + /* Check if another block must be allocated. */ + if ( *( pool->nowblock ) == (VOID *) NULL ) { + /* Allocate a new block of items, pointed to by the previous block. */ + newblock = (VOID **) malloc( pool->itemsperblock * pool->itembytes + + sizeof( VOID * ) + pool->alignbytes ); + if ( newblock == (VOID **) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + *( pool->nowblock ) = (VOID *) newblock; + /* The next block pointer is NULL. */ + *newblock = (VOID *) NULL; + } + /* Move to the new block. */ + pool->nowblock = (VOID **) *( pool->nowblock ); + /* Find the first item in the block. */ + /* Increment by the size of (VOID *). */ + alignptr = (unsigned long) ( pool->nowblock + 1 ); + /* Align the item on an `alignbytes'-byte boundary. */ + pool->nextitem = (VOID *) + ( alignptr + (unsigned long) pool->alignbytes + - ( alignptr % (unsigned long) pool->alignbytes ) ); + /* There are lots of unallocated items left in this block. */ + pool->unallocateditems = pool->itemsperblock; + } + /* Allocate a new item. */ + newitem = pool->nextitem; + /* Advance `nextitem' pointer to next free item in block. */ + if ( pool->itemwordtype == POINTER ) { + pool->nextitem = (VOID *) ( (VOID **) pool->nextitem + pool->itemwords ); + } + else { + pool->nextitem = (VOID *) ( (REAL *) pool->nextitem + pool->itemwords ); + } + pool->unallocateditems--; + pool->maxitems++; + } + pool->items++; + return newitem; } /*****************************************************************************/ @@ -3336,14 +3358,14 @@ struct memorypool *pool; /* */ /*****************************************************************************/ -void pooldealloc(pool, dyingitem) +void pooldealloc( pool, dyingitem ) struct memorypool *pool; VOID *dyingitem; { - /* Push freshly killed item onto stack. */ - *((VOID **) dyingitem) = pool->deaditemstack; - pool->deaditemstack = dyingitem; - pool->items--; + /* Push freshly killed item onto stack. */ + *( (VOID **) dyingitem ) = pool->deaditemstack; + pool->deaditemstack = dyingitem; + pool->items--; } /*****************************************************************************/ @@ -3354,21 +3376,21 @@ VOID *dyingitem; /* */ /*****************************************************************************/ -void traversalinit(pool) +void traversalinit( pool ) struct memorypool *pool; { - unsigned long alignptr; - - /* Begin the traversal in the first block. */ - pool->pathblock = pool->firstblock; - /* Find the first item in the block. Increment by the size of (VOID *). */ - alignptr = (unsigned long) (pool->pathblock + 1); - /* Align with item on an `alignbytes'-byte boundary. */ - pool->pathitem = (VOID *) - (alignptr + (unsigned long) pool->alignbytes - - (alignptr % (unsigned long) pool->alignbytes)); - /* Set the number of items left in the current block. */ - pool->pathitemsleft = pool->itemsperblock; + unsigned long alignptr; + + /* Begin the traversal in the first block. */ + pool->pathblock = pool->firstblock; + /* Find the first item in the block. Increment by the size of (VOID *). */ + alignptr = (unsigned long) ( pool->pathblock + 1 ); + /* Align with item on an `alignbytes'-byte boundary. */ + pool->pathitem = (VOID *) + ( alignptr + (unsigned long) pool->alignbytes + - ( alignptr % (unsigned long) pool->alignbytes ) ); + /* Set the number of items left in the current block. */ + pool->pathitemsleft = pool->itemsperblock; } /*****************************************************************************/ @@ -3385,38 +3407,39 @@ struct memorypool *pool; /* */ /*****************************************************************************/ -VOID *traverse(pool) +VOID *traverse( pool ) struct memorypool *pool; { - VOID *newitem; - unsigned long alignptr; - - /* Stop upon exhausting the list of items. */ - if (pool->pathitem == pool->nextitem) { - return (VOID *) NULL; - } - /* Check whether any untraversed items remain in the current block. */ - if (pool->pathitemsleft == 0) { - /* Find the next block. */ - pool->pathblock = (VOID **) *(pool->pathblock); - /* Find the first item in the block. Increment by the size of (VOID *). */ - alignptr = (unsigned long) (pool->pathblock + 1); - /* Align with item on an `alignbytes'-byte boundary. */ - pool->pathitem = (VOID *) - (alignptr + (unsigned long) pool->alignbytes - - (alignptr % (unsigned long) pool->alignbytes)); - /* Set the number of items left in the current block. */ - pool->pathitemsleft = pool->itemsperblock; - } - newitem = pool->pathitem; - /* Find the next item in the block. */ - if (pool->itemwordtype == POINTER) { - pool->pathitem = (VOID *) ((VOID **) pool->pathitem + pool->itemwords); - } else { - pool->pathitem = (VOID *) ((REAL *) pool->pathitem + pool->itemwords); - } - pool->pathitemsleft--; - return newitem; + VOID *newitem; + unsigned long alignptr; + + /* Stop upon exhausting the list of items. */ + if ( pool->pathitem == pool->nextitem ) { + return (VOID *) NULL; + } + /* Check whether any untraversed items remain in the current block. */ + if ( pool->pathitemsleft == 0 ) { + /* Find the next block. */ + pool->pathblock = (VOID **) *( pool->pathblock ); + /* Find the first item in the block. Increment by the size of (VOID *). */ + alignptr = (unsigned long) ( pool->pathblock + 1 ); + /* Align with item on an `alignbytes'-byte boundary. */ + pool->pathitem = (VOID *) + ( alignptr + (unsigned long) pool->alignbytes + - ( alignptr % (unsigned long) pool->alignbytes ) ); + /* Set the number of items left in the current block. */ + pool->pathitemsleft = pool->itemsperblock; + } + newitem = pool->pathitem; + /* Find the next item in the block. */ + if ( pool->itemwordtype == POINTER ) { + pool->pathitem = (VOID *) ( (VOID **) pool->pathitem + pool->itemwords ); + } + else { + pool->pathitem = (VOID *) ( (REAL *) pool->pathitem + pool->itemwords ); + } + pool->pathitemsleft--; + return newitem; } /*****************************************************************************/ @@ -3436,77 +3459,77 @@ struct memorypool *pool; /* */ /*****************************************************************************/ -void dummyinit(trianglewords, shellewords) +void dummyinit( trianglewords, shellewords ) int trianglewords; int shellewords; { - unsigned long alignptr; - - /* `triwords' and `shwords' are used by the mesh manipulation primitives */ - /* to extract orientations of triangles and shell edges from pointers. */ - triwords = trianglewords; /* Initialize `triwords' once and for all. */ - shwords = shellewords; /* Initialize `shwords' once and for all. */ - - /* Set up `dummytri', the `triangle' that occupies "outer space". */ - dummytribase = (triangle *) malloc(triwords * sizeof(triangle) - + triangles.alignbytes); - if (dummytribase == (triangle *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - /* Align `dummytri' on a `triangles.alignbytes'-byte boundary. */ - alignptr = (unsigned long) dummytribase; - dummytri = (triangle *) - (alignptr + (unsigned long) triangles.alignbytes - - (alignptr % (unsigned long) triangles.alignbytes)); - /* Initialize the three adjoining triangles to be "outer space". These */ - /* will eventually be changed by various bonding operations, but their */ - /* values don't really matter, as long as they can legally be */ - /* dereferenced. */ - dummytri[0] = (triangle) dummytri; - dummytri[1] = (triangle) dummytri; - dummytri[2] = (triangle) dummytri; - /* Three NULL vertex points. */ - dummytri[3] = (triangle) NULL; - dummytri[4] = (triangle) NULL; - dummytri[5] = (triangle) NULL; - - if (useshelles) { - /* Set up `dummysh', the omnipresent "shell edge" pointed to by any */ - /* triangle side or shell edge end that isn't attached to a real shell */ - /* edge. */ - dummyshbase = (shelle *) malloc(shwords * sizeof(shelle) - + shelles.alignbytes); - if (dummyshbase == (shelle *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - /* Align `dummysh' on a `shelles.alignbytes'-byte boundary. */ - alignptr = (unsigned long) dummyshbase; - dummysh = (shelle *) - (alignptr + (unsigned long) shelles.alignbytes - - (alignptr % (unsigned long) shelles.alignbytes)); - /* Initialize the two adjoining shell edges to be the omnipresent shell */ - /* edge. These will eventually be changed by various bonding */ - /* operations, but their values don't really matter, as long as they */ - /* can legally be dereferenced. */ - dummysh[0] = (shelle) dummysh; - dummysh[1] = (shelle) dummysh; - /* Two NULL vertex points. */ - dummysh[2] = (shelle) NULL; - dummysh[3] = (shelle) NULL; - /* Initialize the two adjoining triangles to be "outer space". */ - dummysh[4] = (shelle) dummytri; - dummysh[5] = (shelle) dummytri; - /* Set the boundary marker to zero. */ - * (int *) (dummysh + 6) = 0; - - /* Initialize the three adjoining shell edges of `dummytri' to be */ - /* the omnipresent shell edge. */ - dummytri[6] = (triangle) dummysh; - dummytri[7] = (triangle) dummysh; - dummytri[8] = (triangle) dummysh; - } + unsigned long alignptr; + + /* `triwords' and `shwords' are used by the mesh manipulation primitives */ + /* to extract orientations of triangles and shell edges from pointers. */ + triwords = trianglewords; /* Initialize `triwords' once and for all. */ + shwords = shellewords; /* Initialize `shwords' once and for all. */ + + /* Set up `dummytri', the `triangle' that occupies "outer space". */ + dummytribase = (triangle *) malloc( triwords * sizeof( triangle ) + + triangles.alignbytes ); + if ( dummytribase == (triangle *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + /* Align `dummytri' on a `triangles.alignbytes'-byte boundary. */ + alignptr = (unsigned long) dummytribase; + dummytri = (triangle *) + ( alignptr + (unsigned long) triangles.alignbytes + - ( alignptr % (unsigned long) triangles.alignbytes ) ); + /* Initialize the three adjoining triangles to be "outer space". These */ + /* will eventually be changed by various bonding operations, but their */ + /* values don't really matter, as long as they can legally be */ + /* dereferenced. */ + dummytri[0] = (triangle) dummytri; + dummytri[1] = (triangle) dummytri; + dummytri[2] = (triangle) dummytri; + /* Three NULL vertex points. */ + dummytri[3] = (triangle) NULL; + dummytri[4] = (triangle) NULL; + dummytri[5] = (triangle) NULL; + + if ( useshelles ) { + /* Set up `dummysh', the omnipresent "shell edge" pointed to by any */ + /* triangle side or shell edge end that isn't attached to a real shell */ + /* edge. */ + dummyshbase = (shelle *) malloc( shwords * sizeof( shelle ) + + shelles.alignbytes ); + if ( dummyshbase == (shelle *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + /* Align `dummysh' on a `shelles.alignbytes'-byte boundary. */ + alignptr = (unsigned long) dummyshbase; + dummysh = (shelle *) + ( alignptr + (unsigned long) shelles.alignbytes + - ( alignptr % (unsigned long) shelles.alignbytes ) ); + /* Initialize the two adjoining shell edges to be the omnipresent shell */ + /* edge. These will eventually be changed by various bonding */ + /* operations, but their values don't really matter, as long as they */ + /* can legally be dereferenced. */ + dummysh[0] = (shelle) dummysh; + dummysh[1] = (shelle) dummysh; + /* Two NULL vertex points. */ + dummysh[2] = (shelle) NULL; + dummysh[3] = (shelle) NULL; + /* Initialize the two adjoining triangles to be "outer space". */ + dummysh[4] = (shelle) dummytri; + dummysh[5] = (shelle) dummytri; + /* Set the boundary marker to zero. */ + *(int *) ( dummysh + 6 ) = 0; + + /* Initialize the three adjoining shell edges of `dummytri' to be */ + /* the omnipresent shell edge. */ + dummytri[6] = (triangle) dummysh; + dummytri[7] = (triangle) dummysh; + dummytri[8] = (triangle) dummysh; + } } /*****************************************************************************/ @@ -3519,24 +3542,23 @@ int shellewords; /* */ /*****************************************************************************/ -void initializepointpool() -{ - int pointsize; - - /* The index within each point at which the boundary marker is found. */ - /* Ensure the point marker is aligned to a sizeof(int)-byte address. */ - pointmarkindex = ((mesh_dim + nextras) * sizeof(REAL) + sizeof(int) - 1) - / sizeof(int); - pointsize = (pointmarkindex + 1) * sizeof(int); - if (poly) { - /* The index within each point at which a triangle pointer is found. */ - /* Ensure the pointer is aligned to a sizeof(triangle)-byte address. */ - point2triindex = (pointsize + sizeof(triangle) - 1) / sizeof(triangle); - pointsize = (point2triindex + 1) * sizeof(triangle); - } - /* Initialize the pool of points. */ - poolinit(&points, pointsize, POINTPERBLOCK, - (sizeof(REAL) >= sizeof(triangle)) ? FLOATINGPOINT : POINTER, 0); +void initializepointpool(){ + int pointsize; + + /* The index within each point at which the boundary marker is found. */ + /* Ensure the point marker is aligned to a sizeof(int)-byte address. */ + pointmarkindex = ( ( mesh_dim + nextras ) * sizeof( REAL ) + sizeof( int ) - 1 ) + / sizeof( int ); + pointsize = ( pointmarkindex + 1 ) * sizeof( int ); + if ( poly ) { + /* The index within each point at which a triangle pointer is found. */ + /* Ensure the pointer is aligned to a sizeof(triangle)-byte address. */ + point2triindex = ( pointsize + sizeof( triangle ) - 1 ) / sizeof( triangle ); + pointsize = ( point2triindex + 1 ) * sizeof( triangle ); + } + /* Initialize the pool of points. */ + poolinit( &points, pointsize, POINTPERBLOCK, + ( sizeof( REAL ) >= sizeof( triangle ) ) ? FLOATINGPOINT : POINTER, 0 ); } /*****************************************************************************/ @@ -3550,54 +3572,55 @@ void initializepointpool() /* */ /*****************************************************************************/ -void initializetrisegpools() -{ - int trisize; - - /* The index within each triangle at which the extra nodes (above three) */ - /* associated with high order elements are found. There are three */ - /* pointers to other triangles, three pointers to corners, and possibly */ - /* three pointers to shell edges before the extra nodes. */ - highorderindex = 6 + (useshelles * 3); - /* The number of bytes occupied by a triangle. */ - trisize = ((order + 1) * (order + 2) / 2 + (highorderindex - 3)) * - sizeof(triangle); - /* The index within each triangle at which its attributes are found, */ - /* where the index is measured in REALs. */ - elemattribindex = (trisize + sizeof(REAL) - 1) / sizeof(REAL); - /* The index within each triangle at which the maximum area constraint */ - /* is found, where the index is measured in REALs. Note that if the */ - /* `regionattrib' flag is set, an additional attribute will be added. */ - areaboundindex = elemattribindex + eextras + regionattrib; - /* If triangle attributes or an area bound are needed, increase the number */ - /* of bytes occupied by a triangle. */ - if (vararea) { - trisize = (areaboundindex + 1) * sizeof(REAL); - } else if (eextras + regionattrib > 0) { - trisize = areaboundindex * sizeof(REAL); - } - /* If a Voronoi diagram or triangle neighbor graph is requested, make */ - /* sure there's room to store an integer index in each triangle. This */ - /* integer index can occupy the same space as the shell edges or */ - /* attributes or area constraint or extra nodes. */ - if ((voronoi || neighbors) && - (trisize < 6 * sizeof(triangle) + sizeof(int))) { - trisize = 6 * sizeof(triangle) + sizeof(int); - } - /* Having determined the memory size of a triangle, initialize the pool. */ - poolinit(&triangles, trisize, TRIPERBLOCK, POINTER, 4); - - if (useshelles) { - /* Initialize the pool of shell edges. */ - poolinit(&shelles, 6 * sizeof(triangle) + sizeof(int), SHELLEPERBLOCK, - POINTER, 4); - - /* Initialize the "outer space" triangle and omnipresent shell edge. */ - dummyinit(triangles.itemwords, shelles.itemwords); - } else { - /* Initialize the "outer space" triangle. */ - dummyinit(triangles.itemwords, 0); - } +void initializetrisegpools(){ + int trisize; + + /* The index within each triangle at which the extra nodes (above three) */ + /* associated with high order elements are found. There are three */ + /* pointers to other triangles, three pointers to corners, and possibly */ + /* three pointers to shell edges before the extra nodes. */ + highorderindex = 6 + ( useshelles * 3 ); + /* The number of bytes occupied by a triangle. */ + trisize = ( ( order + 1 ) * ( order + 2 ) / 2 + ( highorderindex - 3 ) ) * + sizeof( triangle ); + /* The index within each triangle at which its attributes are found, */ + /* where the index is measured in REALs. */ + elemattribindex = ( trisize + sizeof( REAL ) - 1 ) / sizeof( REAL ); + /* The index within each triangle at which the maximum area constraint */ + /* is found, where the index is measured in REALs. Note that if the */ + /* `regionattrib' flag is set, an additional attribute will be added. */ + areaboundindex = elemattribindex + eextras + regionattrib; + /* If triangle attributes or an area bound are needed, increase the number */ + /* of bytes occupied by a triangle. */ + if ( vararea ) { + trisize = ( areaboundindex + 1 ) * sizeof( REAL ); + } + else if ( eextras + regionattrib > 0 ) { + trisize = areaboundindex * sizeof( REAL ); + } + /* If a Voronoi diagram or triangle neighbor graph is requested, make */ + /* sure there's room to store an integer index in each triangle. This */ + /* integer index can occupy the same space as the shell edges or */ + /* attributes or area constraint or extra nodes. */ + if ( ( voronoi || neighbors ) && + ( trisize < 6 * sizeof( triangle ) + sizeof( int ) ) ) { + trisize = 6 * sizeof( triangle ) + sizeof( int ); + } + /* Having determined the memory size of a triangle, initialize the pool. */ + poolinit( &triangles, trisize, TRIPERBLOCK, POINTER, 4 ); + + if ( useshelles ) { + /* Initialize the pool of shell edges. */ + poolinit( &shelles, 6 * sizeof( triangle ) + sizeof( int ), SHELLEPERBLOCK, + POINTER, 4 ); + + /* Initialize the "outer space" triangle and omnipresent shell edge. */ + dummyinit( triangles.itemwords, shelles.itemwords ); + } + else { + /* Initialize the "outer space" triangle. */ + dummyinit( triangles.itemwords, 0 ); + } } /*****************************************************************************/ @@ -3606,15 +3629,15 @@ void initializetrisegpools() /* */ /*****************************************************************************/ -void triangledealloc(dyingtriangle) -triangle *dyingtriangle; +void triangledealloc( dyingtriangle ) +triangle * dyingtriangle; { - /* Set triangle's vertices to NULL. This makes it possible to */ - /* detect dead triangles when traversing the list of all triangles. */ - dyingtriangle[3] = (triangle) NULL; - dyingtriangle[4] = (triangle) NULL; - dyingtriangle[5] = (triangle) NULL; - pooldealloc(&triangles, (VOID *) dyingtriangle); + /* Set triangle's vertices to NULL. This makes it possible to */ + /* detect dead triangles when traversing the list of all triangles. */ + dyingtriangle[3] = (triangle) NULL; + dyingtriangle[4] = (triangle) NULL; + dyingtriangle[5] = (triangle) NULL; + pooldealloc( &triangles, (VOID *) dyingtriangle ); } /*****************************************************************************/ @@ -3623,17 +3646,16 @@ triangle *dyingtriangle; /* */ /*****************************************************************************/ -triangle *triangletraverse() -{ - triangle *newtriangle; - - do { - newtriangle = (triangle *) traverse(&triangles); - if (newtriangle == (triangle *) NULL) { - return (triangle *) NULL; - } - } while (newtriangle[3] == (triangle) NULL); /* Skip dead ones. */ - return newtriangle; +triangle *triangletraverse(){ + triangle *newtriangle; + + do { + newtriangle = (triangle *) traverse( &triangles ); + if ( newtriangle == (triangle *) NULL ) { + return (triangle *) NULL; + } + } while ( newtriangle[3] == (triangle) NULL ); /* Skip dead ones. */ + return newtriangle; } /*****************************************************************************/ @@ -3642,14 +3664,14 @@ triangle *triangletraverse() /* */ /*****************************************************************************/ -void shelledealloc(dyingshelle) -shelle *dyingshelle; +void shelledealloc( dyingshelle ) +shelle * dyingshelle; { - /* Set shell edge's vertices to NULL. This makes it possible to */ - /* detect dead shells when traversing the list of all shells. */ - dyingshelle[2] = (shelle) NULL; - dyingshelle[3] = (shelle) NULL; - pooldealloc(&shelles, (VOID *) dyingshelle); + /* Set shell edge's vertices to NULL. This makes it possible to */ + /* detect dead shells when traversing the list of all shells. */ + dyingshelle[2] = (shelle) NULL; + dyingshelle[3] = (shelle) NULL; + pooldealloc( &shelles, (VOID *) dyingshelle ); } /*****************************************************************************/ @@ -3658,17 +3680,16 @@ shelle *dyingshelle; /* */ /*****************************************************************************/ -shelle *shelletraverse() -{ - shelle *newshelle; - - do { - newshelle = (shelle *) traverse(&shelles); - if (newshelle == (shelle *) NULL) { - return (shelle *) NULL; - } - } while (newshelle[2] == (shelle) NULL); /* Skip dead ones. */ - return newshelle; +shelle *shelletraverse(){ + shelle *newshelle; + + do { + newshelle = (shelle *) traverse( &shelles ); + if ( newshelle == (shelle *) NULL ) { + return (shelle *) NULL; + } + } while ( newshelle[2] == (shelle) NULL ); /* Skip dead ones. */ + return newshelle; } /*****************************************************************************/ @@ -3677,13 +3698,13 @@ shelle *shelletraverse() /* */ /*****************************************************************************/ -void pointdealloc(dyingpoint) +void pointdealloc( dyingpoint ) point dyingpoint; { - /* Mark the point as dead. This makes it possible to detect dead points */ - /* when traversing the list of all points. */ - setpointmark(dyingpoint, DEADPOINT); - pooldealloc(&points, (VOID *) dyingpoint); + /* Mark the point as dead. This makes it possible to detect dead points */ + /* when traversing the list of all points. */ + setpointmark( dyingpoint, DEADPOINT ); + pooldealloc( &points, (VOID *) dyingpoint ); } /*****************************************************************************/ @@ -3692,17 +3713,16 @@ point dyingpoint; /* */ /*****************************************************************************/ -point pointtraverse() -{ - point newpoint; - - do { - newpoint = (point) traverse(&points); - if (newpoint == (point) NULL) { - return (point) NULL; - } - } while (pointmark(newpoint) == DEADPOINT); /* Skip dead ones. */ - return newpoint; +point pointtraverse(){ + point newpoint; + + do { + newpoint = (point) traverse( &points ); + if ( newpoint == (point) NULL ) { + return (point) NULL; + } + } while ( pointmark( newpoint ) == DEADPOINT ); /* Skip dead ones. */ + return newpoint; } /*****************************************************************************/ @@ -3714,13 +3734,13 @@ point pointtraverse() #ifndef CDT_ONLY -void badsegmentdealloc(dyingseg) +void badsegmentdealloc( dyingseg ) struct edge *dyingseg; { - /* Set segment's orientation to -1. This makes it possible to */ - /* detect dead segments when traversing the list of all segments. */ - dyingseg->shorient = -1; - pooldealloc(&badsegments, (VOID *) dyingseg); + /* Set segment's orientation to -1. This makes it possible to */ + /* detect dead segments when traversing the list of all segments. */ + dyingseg->shorient = -1; + pooldealloc( &badsegments, (VOID *) dyingseg ); } #endif /* not CDT_ONLY */ @@ -3733,17 +3753,16 @@ struct edge *dyingseg; #ifndef CDT_ONLY -struct edge *badsegmenttraverse() -{ - struct edge *newseg; - - do { - newseg = (struct edge *) traverse(&badsegments); - if (newseg == (struct edge *) NULL) { - return (struct edge *) NULL; - } - } while (newseg->shorient == -1); /* Skip dead ones. */ - return newseg; +struct edge *badsegmenttraverse(){ + struct edge *newseg; + + do { + newseg = (struct edge *) traverse( &badsegments ); + if ( newseg == (struct edge *) NULL ) { + return (struct edge *) NULL; + } + } while ( newseg->shorient == -1 ); /* Skip dead ones. */ + return newseg; } #endif /* not CDT_ONLY */ @@ -3760,30 +3779,30 @@ struct edge *badsegmenttraverse() /* */ /*****************************************************************************/ -point getpoint(number) +point getpoint( number ) int number; { - VOID **getblock; - point foundpoint; - unsigned long alignptr; - int current; - - getblock = points.firstblock; - current = firstnumber; - /* Find the right block. */ - while (current + points.itemsperblock <= number) { - getblock = (VOID **) *getblock; - current += points.itemsperblock; - } - /* Now find the right point. */ - alignptr = (unsigned long) (getblock + 1); - foundpoint = (point) (alignptr + (unsigned long) points.alignbytes - - (alignptr % (unsigned long) points.alignbytes)); - while (current < number) { - foundpoint += points.itemwords; - current++; - } - return foundpoint; + VOID **getblock; + point foundpoint; + unsigned long alignptr; + int current; + + getblock = points.firstblock; + current = firstnumber; + /* Find the right block. */ + while ( current + points.itemsperblock <= number ) { + getblock = (VOID **) *getblock; + current += points.itemsperblock; + } + /* Now find the right point. */ + alignptr = (unsigned long) ( getblock + 1 ); + foundpoint = (point) ( alignptr + (unsigned long) points.alignbytes + - ( alignptr % (unsigned long) points.alignbytes ) ); + while ( current < number ) { + foundpoint += points.itemwords; + current++; + } + return foundpoint; } /*****************************************************************************/ @@ -3792,22 +3811,21 @@ int number; /* */ /*****************************************************************************/ -void triangledeinit() -{ - pooldeinit(&triangles); - free(dummytribase); - if (useshelles) { - pooldeinit(&shelles); - free(dummyshbase); - } - pooldeinit(&points); +void triangledeinit(){ + pooldeinit( &triangles ); + free( dummytribase ); + if ( useshelles ) { + pooldeinit( &shelles ); + free( dummyshbase ); + } + pooldeinit( &points ); #ifndef CDT_ONLY - if (quality) { - pooldeinit(&badsegments); - if ((minangle > 0.0) || vararea || fixedarea) { - pooldeinit(&badtriangles); - } - } + if ( quality ) { + pooldeinit( &badsegments ); + if ( ( minangle > 0.0 ) || vararea || fixedarea ) { + pooldeinit( &badtriangles ); + } + } #endif /* not CDT_ONLY */ } @@ -3825,35 +3843,35 @@ void triangledeinit() /* */ /*****************************************************************************/ -void maketriangle(newtriedge) +void maketriangle( newtriedge ) struct triedge *newtriedge; { - int i; - - newtriedge->tri = (triangle *) poolalloc(&triangles); - /* Initialize the three adjoining triangles to be "outer space". */ - newtriedge->tri[0] = (triangle) dummytri; - newtriedge->tri[1] = (triangle) dummytri; - newtriedge->tri[2] = (triangle) dummytri; - /* Three NULL vertex points. */ - newtriedge->tri[3] = (triangle) NULL; - newtriedge->tri[4] = (triangle) NULL; - newtriedge->tri[5] = (triangle) NULL; - /* Initialize the three adjoining shell edges to be the omnipresent */ - /* shell edge. */ - if (useshelles) { - newtriedge->tri[6] = (triangle) dummysh; - newtriedge->tri[7] = (triangle) dummysh; - newtriedge->tri[8] = (triangle) dummysh; - } - for (i = 0; i < eextras; i++) { - setelemattribute(*newtriedge, i, 0.0); - } - if (vararea) { - setareabound(*newtriedge, -1.0); - } - - newtriedge->orient = 0; + int i; + + newtriedge->tri = (triangle *) poolalloc( &triangles ); + /* Initialize the three adjoining triangles to be "outer space". */ + newtriedge->tri[0] = (triangle) dummytri; + newtriedge->tri[1] = (triangle) dummytri; + newtriedge->tri[2] = (triangle) dummytri; + /* Three NULL vertex points. */ + newtriedge->tri[3] = (triangle) NULL; + newtriedge->tri[4] = (triangle) NULL; + newtriedge->tri[5] = (triangle) NULL; + /* Initialize the three adjoining shell edges to be the omnipresent */ + /* shell edge. */ + if ( useshelles ) { + newtriedge->tri[6] = (triangle) dummysh; + newtriedge->tri[7] = (triangle) dummysh; + newtriedge->tri[8] = (triangle) dummysh; + } + for ( i = 0; i < eextras; i++ ) { + setelemattribute( *newtriedge, i, 0.0 ); + } + if ( vararea ) { + setareabound( *newtriedge, -1.0 ); + } + + newtriedge->orient = 0; } /*****************************************************************************/ @@ -3862,24 +3880,24 @@ struct triedge *newtriedge; /* */ /*****************************************************************************/ -void makeshelle(newedge) +void makeshelle( newedge ) struct edge *newedge; { - newedge->sh = (shelle *) poolalloc(&shelles); - /* Initialize the two adjoining shell edges to be the omnipresent */ - /* shell edge. */ - newedge->sh[0] = (shelle) dummysh; - newedge->sh[1] = (shelle) dummysh; - /* Two NULL vertex points. */ - newedge->sh[2] = (shelle) NULL; - newedge->sh[3] = (shelle) NULL; - /* Initialize the two adjoining triangles to be "outer space". */ - newedge->sh[4] = (shelle) dummytri; - newedge->sh[5] = (shelle) dummytri; - /* Set the boundary marker to zero. */ - setmark(*newedge, 0); - - newedge->shorient = 0; + newedge->sh = (shelle *) poolalloc( &shelles ); + /* Initialize the two adjoining shell edges to be the omnipresent */ + /* shell edge. */ + newedge->sh[0] = (shelle) dummysh; + newedge->sh[1] = (shelle) dummysh; + /* Two NULL vertex points. */ + newedge->sh[2] = (shelle) NULL; + newedge->sh[3] = (shelle) NULL; + /* Initialize the two adjoining triangles to be "outer space". */ + newedge->sh[4] = (shelle) dummytri; + newedge->sh[5] = (shelle) dummytri; + /* Set the boundary marker to zero. */ + setmark( *newedge, 0 ); + + newedge->shorient = 0; } /** **/ @@ -3900,7 +3918,7 @@ struct edge *newedge; /* which is disastrously slow. A faster way on IEEE machines might be to */ /* mask the appropriate bit, but that's difficult to do in C. */ -#define Absolute(a) ((a) >= 0.0 ? (a) : -(a)) +#define Absolute( a ) ( ( a ) >= 0.0 ? ( a ) : -( a ) ) /* #define Absolute(a) fabs(a) */ /* Many of the operations are broken up into two pieces, a main part that */ @@ -3916,95 +3934,95 @@ struct edge *newedge; /* The input parameter `x' (or the highest numbered `x_' parameter) must */ /* also be declared `INEXACT'. */ -#define Fast_Two_Sum_Tail(a, b, x, y) \ - bvirt = x - a; \ - y = b - bvirt - -#define Fast_Two_Sum(a, b, x, y) \ - x = (REAL) (a + b); \ - Fast_Two_Sum_Tail(a, b, x, y) - -#define Two_Sum_Tail(a, b, x, y) \ - bvirt = (REAL) (x - a); \ - avirt = x - bvirt; \ - bround = b - bvirt; \ - around = a - avirt; \ - y = around + bround - -#define Two_Sum(a, b, x, y) \ - x = (REAL) (a + b); \ - Two_Sum_Tail(a, b, x, y) - -#define Two_Diff_Tail(a, b, x, y) \ - bvirt = (REAL) (a - x); \ - avirt = x + bvirt; \ - bround = bvirt - b; \ - around = a - avirt; \ - y = around + bround - -#define Two_Diff(a, b, x, y) \ - x = (REAL) (a - b); \ - Two_Diff_Tail(a, b, x, y) - -#define Split(a, ahi, alo) \ - c = (REAL) (splitter * a); \ - abig = (REAL) (c - a); \ - ahi = (REAL)(c - abig); \ - alo = (REAL)(a - ahi) - -#define Two_Product_Tail(a, b, x, y) \ - Split(a, ahi, alo); \ - Split(b, bhi, blo); \ - err1 = x - (ahi * bhi); \ - err2 = err1 - (alo * bhi); \ - err3 = err2 - (ahi * blo); \ - y = (alo * blo) - err3 - -#define Two_Product(a, b, x, y) \ - x = (REAL) (a * b); \ - Two_Product_Tail(a, b, x, y) +#define Fast_Two_Sum_Tail( a, b, x, y ) \ + bvirt = x - a; \ + y = b - bvirt + +#define Fast_Two_Sum( a, b, x, y ) \ + x = (REAL) ( a + b ); \ + Fast_Two_Sum_Tail( a, b, x, y ) + +#define Two_Sum_Tail( a, b, x, y ) \ + bvirt = (REAL) ( x - a ); \ + avirt = x - bvirt; \ + bround = b - bvirt; \ + around = a - avirt; \ + y = around + bround + +#define Two_Sum( a, b, x, y ) \ + x = (REAL) ( a + b ); \ + Two_Sum_Tail( a, b, x, y ) + +#define Two_Diff_Tail( a, b, x, y ) \ + bvirt = (REAL) ( a - x ); \ + avirt = x + bvirt; \ + bround = bvirt - b; \ + around = a - avirt; \ + y = around + bround + +#define Two_Diff( a, b, x, y ) \ + x = (REAL) ( a - b ); \ + Two_Diff_Tail( a, b, x, y ) + +#define Split( a, ahi, alo ) \ + c = (REAL) ( splitter * a ); \ + abig = (REAL) ( c - a ); \ + ahi = (REAL)( c - abig ); \ + alo = (REAL)( a - ahi ) + +#define Two_Product_Tail( a, b, x, y ) \ + Split( a, ahi, alo ); \ + Split( b, bhi, blo ); \ + err1 = x - ( ahi * bhi ); \ + err2 = err1 - ( alo * bhi ); \ + err3 = err2 - ( ahi * blo ); \ + y = ( alo * blo ) - err3 + +#define Two_Product( a, b, x, y ) \ + x = (REAL) ( a * b ); \ + Two_Product_Tail( a, b, x, y ) /* Two_Product_Presplit() is Two_Product() where one of the inputs has */ /* already been split. Avoids redundant splitting. */ -#define Two_Product_Presplit(a, b, bhi, blo, x, y) \ - x = (REAL) (a * b); \ - Split(a, ahi, alo); \ - err1 = x - (ahi * bhi); \ - err2 = err1 - (alo * bhi); \ - err3 = err2 - (ahi * blo); \ - y = (alo * blo) - err3 +#define Two_Product_Presplit( a, b, bhi, blo, x, y ) \ + x = (REAL) ( a * b ); \ + Split( a, ahi, alo ); \ + err1 = x - ( ahi * bhi ); \ + err2 = err1 - ( alo * bhi ); \ + err3 = err2 - ( ahi * blo ); \ + y = ( alo * blo ) - err3 /* Square() can be done more quickly than Two_Product(). */ -#define Square_Tail(a, x, y) \ - Split(a, ahi, alo); \ - err1 = x - (ahi * ahi); \ - err3 = err1 - ((ahi + ahi) * alo); \ - y = (alo * alo) - err3 +#define Square_Tail( a, x, y ) \ + Split( a, ahi, alo ); \ + err1 = x - ( ahi * ahi ); \ + err3 = err1 - ( ( ahi + ahi ) * alo ); \ + y = ( alo * alo ) - err3 -#define Square(a, x, y) \ - x = (REAL) (a * a); \ - Square_Tail(a, x, y) +#define Square( a, x, y ) \ + x = (REAL) ( a * a ); \ + Square_Tail( a, x, y ) /* Macros for summing expansions of various fixed lengths. These are all */ /* unrolled versions of Expansion_Sum(). */ -#define Two_One_Sum(a1, a0, b, x2, x1, x0) \ - Two_Sum(a0, b , _i, x0); \ - Two_Sum(a1, _i, x2, x1) +#define Two_One_Sum( a1, a0, b, x2, x1, x0 ) \ + Two_Sum( a0, b, _i, x0 ); \ + Two_Sum( a1, _i, x2, x1 ) -#define Two_One_Diff(a1, a0, b, x2, x1, x0) \ - Two_Diff(a0, b , _i, x0); \ - Two_Sum( a1, _i, x2, x1) +#define Two_One_Diff( a1, a0, b, x2, x1, x0 ) \ + Two_Diff( a0, b, _i, x0 ); \ + Two_Sum( a1, _i, x2, x1 ) -#define Two_Two_Sum(a1, a0, b1, b0, x3, x2, x1, x0) \ - Two_One_Sum(a1, a0, b0, _j, _0, x0); \ - Two_One_Sum(_j, _0, b1, x3, x2, x1) +#define Two_Two_Sum( a1, a0, b1, b0, x3, x2, x1, x0 ) \ + Two_One_Sum( a1, a0, b0, _j, _0, x0 ); \ + Two_One_Sum( _j, _0, b1, x3, x2, x1 ) -#define Two_Two_Diff(a1, a0, b1, b0, x3, x2, x1, x0) \ - Two_One_Diff(a1, a0, b0, _j, _0, x0); \ - Two_One_Diff(_j, _0, b1, x3, x2, x1) +#define Two_Two_Diff( a1, a0, b1, b0, x3, x2, x1, x0 ) \ + Two_One_Diff( a1, a0, b0, _j, _0, x0 ); \ + Two_One_Diff( _j, _0, b1, x3, x2, x1 ) /*****************************************************************************/ /* */ @@ -4025,43 +4043,42 @@ struct edge *newedge; /* */ /*****************************************************************************/ -void exactinit() -{ - REAL half; - REAL check, lastcheck; - int every_other; - - every_other = 1; - half = 0.5; - epsilon = 1.0; - splitter = 1.0; - check = 1.0; - /* Repeatedly divide `epsilon' by two until it is too small to add to */ - /* one without causing roundoff. (Also check if the sum is equal to */ - /* the previous sum, for machines that round up instead of using exact */ - /* rounding. Not that these routines will work on such machines anyway. */ - do { - lastcheck = check; - epsilon *= half; - if (every_other) { - splitter *= 2.0; - } - every_other = !every_other; - check = (REAL)(1.0 + epsilon); - } while ((check != 1.0) && (check != lastcheck)); - splitter += 1.0; - if (verbose > 1) { - printf("Floating point roundoff is of magnitude %.17g\n", epsilon); - printf("Floating point splitter is %.17g\n", splitter); - } - /* Error bounds for orientation and incircle tests. */ - resulterrbound = (REAL)((3.0 + 8.0 * epsilon) * epsilon); - ccwerrboundA = (REAL)((3.0 + 16.0 * epsilon) * epsilon); - ccwerrboundB = (REAL)((2.0 + 12.0 * epsilon) * epsilon); - ccwerrboundC = (REAL)((9.0 + 64.0 * epsilon) * epsilon * epsilon); - iccerrboundA = (REAL)((10.0 + 96.0 * epsilon) * epsilon); - iccerrboundB = (REAL)((4.0 + 48.0 * epsilon) * epsilon); - iccerrboundC = (REAL)((44.0 + 576.0 * epsilon) * epsilon * epsilon); +void exactinit(){ + REAL half; + REAL check, lastcheck; + int every_other; + + every_other = 1; + half = 0.5; + epsilon = 1.0; + splitter = 1.0; + check = 1.0; + /* Repeatedly divide `epsilon' by two until it is too small to add to */ + /* one without causing roundoff. (Also check if the sum is equal to */ + /* the previous sum, for machines that round up instead of using exact */ + /* rounding. Not that these routines will work on such machines anyway. */ + do { + lastcheck = check; + epsilon *= half; + if ( every_other ) { + splitter *= 2.0; + } + every_other = !every_other; + check = (REAL)( 1.0 + epsilon ); + } while ( ( check != 1.0 ) && ( check != lastcheck ) ); + splitter += 1.0; + if ( verbose > 1 ) { + printf( "Floating point roundoff is of magnitude %.17g\n", epsilon ); + printf( "Floating point splitter is %.17g\n", splitter ); + } + /* Error bounds for orientation and incircle tests. */ + resulterrbound = (REAL)( ( 3.0 + 8.0 * epsilon ) * epsilon ); + ccwerrboundA = (REAL)( ( 3.0 + 16.0 * epsilon ) * epsilon ); + ccwerrboundB = (REAL)( ( 2.0 + 12.0 * epsilon ) * epsilon ); + ccwerrboundC = (REAL)( ( 9.0 + 64.0 * epsilon ) * epsilon * epsilon ); + iccerrboundA = (REAL)( ( 10.0 + 96.0 * epsilon ) * epsilon ); + iccerrboundB = (REAL)( ( 4.0 + 48.0 * epsilon ) * epsilon ); + iccerrboundC = (REAL)( ( 44.0 + 576.0 * epsilon ) * epsilon * epsilon ); } /*****************************************************************************/ @@ -4078,78 +4095,81 @@ void exactinit() /* */ /*****************************************************************************/ -int fast_expansion_sum_zeroelim(elen, e, flen, f, h) /* h cannot be e or f. */ +int fast_expansion_sum_zeroelim( elen, e, flen, f, h ) /* h cannot be e or f. */ int elen; REAL *e; int flen; REAL *f; REAL *h; { - REAL Q; - INEXACT REAL Qnew; - INEXACT REAL hh; - INEXACT REAL bvirt; - REAL avirt, bround, around; - int eindex, findex, hindex; - REAL enow, fnow; - - enow = e[0]; - fnow = f[0]; - eindex = findex = 0; - if ((fnow > enow) == (fnow > -enow)) { - Q = enow; - enow = e[++eindex]; - } else { - Q = fnow; - fnow = f[++findex]; - } - hindex = 0; - if ((eindex < elen) && (findex < flen)) { - if ((fnow > enow) == (fnow > -enow)) { - Fast_Two_Sum(enow, Q, Qnew, hh); - enow = e[++eindex]; - } else { - Fast_Two_Sum(fnow, Q, Qnew, hh); - fnow = f[++findex]; - } - Q = Qnew; - if (hh != 0.0) { - h[hindex++] = hh; - } - while ((eindex < elen) && (findex < flen)) { - if ((fnow > enow) == (fnow > -enow)) { - Two_Sum(Q, enow, Qnew, hh); - enow = e[++eindex]; - } else { - Two_Sum(Q, fnow, Qnew, hh); - fnow = f[++findex]; - } - Q = Qnew; - if (hh != 0.0) { - h[hindex++] = hh; - } - } - } - while (eindex < elen) { - Two_Sum(Q, enow, Qnew, hh); - enow = e[++eindex]; - Q = Qnew; - if (hh != 0.0) { - h[hindex++] = hh; - } - } - while (findex < flen) { - Two_Sum(Q, fnow, Qnew, hh); - fnow = f[++findex]; - Q = Qnew; - if (hh != 0.0) { - h[hindex++] = hh; - } - } - if ((Q != 0.0) || (hindex == 0)) { - h[hindex++] = Q; - } - return hindex; + REAL Q; + INEXACT REAL Qnew; + INEXACT REAL hh; + INEXACT REAL bvirt; + REAL avirt, bround, around; + int eindex, findex, hindex; + REAL enow, fnow; + + enow = e[0]; + fnow = f[0]; + eindex = findex = 0; + if ( ( fnow > enow ) == ( fnow > -enow ) ) { + Q = enow; + enow = e[++eindex]; + } + else { + Q = fnow; + fnow = f[++findex]; + } + hindex = 0; + if ( ( eindex < elen ) && ( findex < flen ) ) { + if ( ( fnow > enow ) == ( fnow > -enow ) ) { + Fast_Two_Sum( enow, Q, Qnew, hh ); + enow = e[++eindex]; + } + else { + Fast_Two_Sum( fnow, Q, Qnew, hh ); + fnow = f[++findex]; + } + Q = Qnew; + if ( hh != 0.0 ) { + h[hindex++] = hh; + } + while ( ( eindex < elen ) && ( findex < flen ) ) { + if ( ( fnow > enow ) == ( fnow > -enow ) ) { + Two_Sum( Q, enow, Qnew, hh ); + enow = e[++eindex]; + } + else { + Two_Sum( Q, fnow, Qnew, hh ); + fnow = f[++findex]; + } + Q = Qnew; + if ( hh != 0.0 ) { + h[hindex++] = hh; + } + } + } + while ( eindex < elen ) { + Two_Sum( Q, enow, Qnew, hh ); + enow = e[++eindex]; + Q = Qnew; + if ( hh != 0.0 ) { + h[hindex++] = hh; + } + } + while ( findex < flen ) { + Two_Sum( Q, fnow, Qnew, hh ); + fnow = f[++findex]; + Q = Qnew; + if ( hh != 0.0 ) { + h[hindex++] = hh; + } + } + if ( ( Q != 0.0 ) || ( hindex == 0 ) ) { + h[hindex++] = Q; + } + return hindex; } /*****************************************************************************/ @@ -4167,47 +4187,47 @@ REAL *h; /* */ /*****************************************************************************/ -int scale_expansion_zeroelim(elen, e, b, h) /* e and h cannot be the same. */ +int scale_expansion_zeroelim( elen, e, b, h ) /* e and h cannot be the same. */ int elen; REAL *e; REAL b; REAL *h; { - INEXACT REAL Q, sum; - REAL hh; - INEXACT REAL product1; - REAL product0; - int eindex, hindex; - REAL enow; - INEXACT REAL bvirt; - REAL avirt, bround, around; - INEXACT REAL c; - INEXACT REAL abig; - REAL ahi, alo, bhi, blo; - REAL err1, err2, err3; - - Split(b, bhi, blo); - Two_Product_Presplit(e[0], b, bhi, blo, Q, hh); - hindex = 0; - if (hh != 0) { - h[hindex++] = hh; - } - for (eindex = 1; eindex < elen; eindex++) { - enow = e[eindex]; - Two_Product_Presplit(enow, b, bhi, blo, product1, product0); - Two_Sum(Q, product0, sum, hh); - if (hh != 0) { - h[hindex++] = hh; - } - Fast_Two_Sum(product1, sum, Q, hh); - if (hh != 0) { - h[hindex++] = hh; - } - } - if ((Q != 0.0) || (hindex == 0)) { - h[hindex++] = Q; - } - return hindex; + INEXACT REAL Q, sum; + REAL hh; + INEXACT REAL product1; + REAL product0; + int eindex, hindex; + REAL enow; + INEXACT REAL bvirt; + REAL avirt, bround, around; + INEXACT REAL c; + INEXACT REAL abig; + REAL ahi, alo, bhi, blo; + REAL err1, err2, err3; + + Split( b, bhi, blo ); + Two_Product_Presplit( e[0], b, bhi, blo, Q, hh ); + hindex = 0; + if ( hh != 0 ) { + h[hindex++] = hh; + } + for ( eindex = 1; eindex < elen; eindex++ ) { + enow = e[eindex]; + Two_Product_Presplit( enow, b, bhi, blo, product1, product0 ); + Two_Sum( Q, product0, sum, hh ); + if ( hh != 0 ) { + h[hindex++] = hh; + } + Fast_Two_Sum( product1, sum, Q, hh ); + if ( hh != 0 ) { + h[hindex++] = hh; + } + } + if ( ( Q != 0.0 ) || ( hindex == 0 ) ) { + h[hindex++] = Q; + } + return hindex; } /*****************************************************************************/ @@ -4218,18 +4238,18 @@ REAL *h; /* */ /*****************************************************************************/ -REAL estimate(elen, e) +REAL estimate( elen, e ) int elen; REAL *e; { - REAL Q; - int eindex; - - Q = e[0]; - for (eindex = 1; eindex < elen; eindex++) { - Q += e[eindex]; - } - return Q; + REAL Q; + int eindex; + + Q = e[0]; + for ( eindex = 1; eindex < elen; eindex++ ) { + Q += e[eindex]; + } + return Q; } /*****************************************************************************/ @@ -4252,130 +4272,134 @@ REAL *e; /* */ /*****************************************************************************/ -REAL counterclockwiseadapt(pa, pb, pc, detsum) +REAL counterclockwiseadapt( pa, pb, pc, detsum ) point pa; point pb; point pc; REAL detsum; { - INEXACT REAL acx, acy, bcx, bcy; - REAL acxtail, acytail, bcxtail, bcytail; - INEXACT REAL detleft, detright; - REAL detlefttail, detrighttail; - REAL det, errbound; - REAL B[4], C1[8], C2[12], D[16]; - INEXACT REAL B3; - int C1length, C2length, Dlength; - REAL u[4]; - INEXACT REAL u3; - INEXACT REAL s1, t1; - REAL s0, t0; - - INEXACT REAL bvirt; - REAL avirt, bround, around; - INEXACT REAL c; - INEXACT REAL abig; - REAL ahi, alo, bhi, blo; - REAL err1, err2, err3; - INEXACT REAL _i, _j; - REAL _0; - - acx = (REAL) (pa[0] - pc[0]); - bcx = (REAL) (pb[0] - pc[0]); - acy = (REAL) (pa[1] - pc[1]); - bcy = (REAL) (pb[1] - pc[1]); - - Two_Product(acx, bcy, detleft, detlefttail); - Two_Product(acy, bcx, detright, detrighttail); - - Two_Two_Diff(detleft, detlefttail, detright, detrighttail, - B3, B[2], B[1], B[0]); - B[3] = B3; - - det = estimate(4, B); - errbound = (REAL)(ccwerrboundB * detsum); - if ((det >= errbound) || (-det >= errbound)) { - return det; - } - - Two_Diff_Tail(pa[0], pc[0], acx, acxtail); - Two_Diff_Tail(pb[0], pc[0], bcx, bcxtail); - Two_Diff_Tail(pa[1], pc[1], acy, acytail); - Two_Diff_Tail(pb[1], pc[1], bcy, bcytail); - - if ((acxtail == 0.0) && (acytail == 0.0) - && (bcxtail == 0.0) && (bcytail == 0.0)) { - return det; - } - - errbound = (REAL)(ccwerrboundC * detsum + resulterrbound * Absolute(det)); - det += (acx * bcytail + bcy * acxtail) - - (acy * bcxtail + bcx * acytail); - if ((det >= errbound) || (-det >= errbound)) { - return det; - } - - Two_Product(acxtail, bcy, s1, s0); - Two_Product(acytail, bcx, t1, t0); - Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]); - u[3] = u3; - C1length = fast_expansion_sum_zeroelim(4, B, 4, u, C1); - - Two_Product(acx, bcytail, s1, s0); - Two_Product(acy, bcxtail, t1, t0); - Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]); - u[3] = u3; - C2length = fast_expansion_sum_zeroelim(C1length, C1, 4, u, C2); - - Two_Product(acxtail, bcytail, s1, s0); - Two_Product(acytail, bcxtail, t1, t0); - Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]); - u[3] = u3; - Dlength = fast_expansion_sum_zeroelim(C2length, C2, 4, u, D); - - return(D[Dlength - 1]); + INEXACT REAL acx, acy, bcx, bcy; + REAL acxtail, acytail, bcxtail, bcytail; + INEXACT REAL detleft, detright; + REAL detlefttail, detrighttail; + REAL det, errbound; + REAL B[4], C1[8], C2[12], D[16]; + INEXACT REAL B3; + int C1length, C2length, Dlength; + REAL u[4]; + INEXACT REAL u3; + INEXACT REAL s1, t1; + REAL s0, t0; + + INEXACT REAL bvirt; + REAL avirt, bround, around; + INEXACT REAL c; + INEXACT REAL abig; + REAL ahi, alo, bhi, blo; + REAL err1, err2, err3; + INEXACT REAL _i, _j; + REAL _0; + + acx = (REAL) ( pa[0] - pc[0] ); + bcx = (REAL) ( pb[0] - pc[0] ); + acy = (REAL) ( pa[1] - pc[1] ); + bcy = (REAL) ( pb[1] - pc[1] ); + + Two_Product( acx, bcy, detleft, detlefttail ); + Two_Product( acy, bcx, detright, detrighttail ); + + Two_Two_Diff( detleft, detlefttail, detright, detrighttail, + B3, B[2], B[1], B[0] ); + B[3] = B3; + + det = estimate( 4, B ); + errbound = (REAL)( ccwerrboundB * detsum ); + if ( ( det >= errbound ) || ( -det >= errbound ) ) { + return det; + } + + Two_Diff_Tail( pa[0], pc[0], acx, acxtail ); + Two_Diff_Tail( pb[0], pc[0], bcx, bcxtail ); + Two_Diff_Tail( pa[1], pc[1], acy, acytail ); + Two_Diff_Tail( pb[1], pc[1], bcy, bcytail ); + + if ( ( acxtail == 0.0 ) && ( acytail == 0.0 ) + && ( bcxtail == 0.0 ) && ( bcytail == 0.0 ) ) { + return det; + } + + errbound = (REAL)( ccwerrboundC * detsum + resulterrbound * Absolute( det ) ); + det += ( acx * bcytail + bcy * acxtail ) + - ( acy * bcxtail + bcx * acytail ); + if ( ( det >= errbound ) || ( -det >= errbound ) ) { + return det; + } + + Two_Product( acxtail, bcy, s1, s0 ); + Two_Product( acytail, bcx, t1, t0 ); + Two_Two_Diff( s1, s0, t1, t0, u3, u[2], u[1], u[0] ); + u[3] = u3; + C1length = fast_expansion_sum_zeroelim( 4, B, 4, u, C1 ); + + Two_Product( acx, bcytail, s1, s0 ); + Two_Product( acy, bcxtail, t1, t0 ); + Two_Two_Diff( s1, s0, t1, t0, u3, u[2], u[1], u[0] ); + u[3] = u3; + C2length = fast_expansion_sum_zeroelim( C1length, C1, 4, u, C2 ); + + Two_Product( acxtail, bcytail, s1, s0 ); + Two_Product( acytail, bcxtail, t1, t0 ); + Two_Two_Diff( s1, s0, t1, t0, u3, u[2], u[1], u[0] ); + u[3] = u3; + Dlength = fast_expansion_sum_zeroelim( C2length, C2, 4, u, D ); + + return( D[Dlength - 1] ); } -REAL counterclockwise(pa, pb, pc) +REAL counterclockwise( pa, pb, pc ) point pa; point pb; point pc; { - REAL detleft, detright, det; - REAL detsum, errbound; - - counterclockcount++; - - detleft = (pa[0] - pc[0]) * (pb[1] - pc[1]); - detright = (pa[1] - pc[1]) * (pb[0] - pc[0]); - det = detleft - detright; - - if (noexact) { - return det; - } - - if (detleft > 0.0) { - if (detright <= 0.0) { - return det; - } else { - detsum = detleft + detright; - } - } else if (detleft < 0.0) { - if (detright >= 0.0) { - return det; - } else { - detsum = -detleft - detright; - } - } else { - return det; - } - - errbound = ccwerrboundA * detsum; - if ((det >= errbound) || (-det >= errbound)) { - return det; - } - - return counterclockwiseadapt(pa, pb, pc, detsum); + REAL detleft, detright, det; + REAL detsum, errbound; + + counterclockcount++; + + detleft = ( pa[0] - pc[0] ) * ( pb[1] - pc[1] ); + detright = ( pa[1] - pc[1] ) * ( pb[0] - pc[0] ); + det = detleft - detright; + + if ( noexact ) { + return det; + } + + if ( detleft > 0.0 ) { + if ( detright <= 0.0 ) { + return det; + } + else { + detsum = detleft + detright; + } + } + else if ( detleft < 0.0 ) { + if ( detright >= 0.0 ) { + return det; + } + else { + detsum = -detleft - detright; + } + } + else { + return det; + } + + errbound = ccwerrboundA * detsum; + if ( ( det >= errbound ) || ( -det >= errbound ) ) { + return det; + } + + return counterclockwiseadapt( pa, pb, pc, detsum ); } /*****************************************************************************/ @@ -4397,630 +4421,633 @@ point pc; /* */ /*****************************************************************************/ -REAL incircleadapt(pa, pb, pc, pd, permanent) +REAL incircleadapt( pa, pb, pc, pd, permanent ) point pa; point pb; point pc; point pd; REAL permanent; { - INEXACT REAL adx, bdx, cdx, ady, bdy, cdy; - REAL det, errbound; - - INEXACT REAL bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1; - REAL bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0; - REAL bc[4], ca[4], ab[4]; - INEXACT REAL bc3, ca3, ab3; - REAL axbc[8], axxbc[16], aybc[8], ayybc[16], adet[32]; - int axbclen, axxbclen, aybclen, ayybclen, alen; - REAL bxca[8], bxxca[16], byca[8], byyca[16], bdet[32]; - int bxcalen, bxxcalen, bycalen, byycalen, blen; - REAL cxab[8], cxxab[16], cyab[8], cyyab[16], cdet[32]; - int cxablen, cxxablen, cyablen, cyyablen, clen; - REAL abdet[64]; - int ablen; - REAL fin1[1152], fin2[1152]; - REAL *finnow, *finother, *finswap; - int finlength; - - REAL adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail; - INEXACT REAL adxadx1, adyady1, bdxbdx1, bdybdy1, cdxcdx1, cdycdy1; - REAL adxadx0, adyady0, bdxbdx0, bdybdy0, cdxcdx0, cdycdy0; - REAL aa[4], bb[4], cc[4]; - INEXACT REAL aa3, bb3, cc3; - INEXACT REAL ti1, tj1; - REAL ti0, tj0; - REAL u[4], v[4]; - INEXACT REAL u3, v3; - REAL temp8[8], temp16a[16], temp16b[16], temp16c[16]; - REAL temp32a[32], temp32b[32], temp48[48], temp64[64]; - int temp8len, temp16alen, temp16blen, temp16clen; - int temp32alen, temp32blen, temp48len, temp64len; - REAL axtbb[8], axtcc[8], aytbb[8], aytcc[8]; - int axtbblen, axtcclen, aytbblen, aytcclen; - REAL bxtaa[8], bxtcc[8], bytaa[8], bytcc[8]; - int bxtaalen, bxtcclen, bytaalen, bytcclen; - REAL cxtaa[8], cxtbb[8], cytaa[8], cytbb[8]; - int cxtaalen, cxtbblen, cytaalen, cytbblen; - REAL axtbc[8], aytbc[8], bxtca[8], bytca[8], cxtab[8], cytab[8]; - int axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen; - REAL axtbct[16], aytbct[16], bxtcat[16], bytcat[16], cxtabt[16], cytabt[16]; - int axtbctlen, aytbctlen, bxtcatlen, bytcatlen, cxtabtlen, cytabtlen; - REAL axtbctt[8], aytbctt[8], bxtcatt[8]; - REAL bytcatt[8], cxtabtt[8], cytabtt[8]; - int axtbcttlen, aytbcttlen, bxtcattlen, bytcattlen, cxtabttlen, cytabttlen; - REAL abt[8], bct[8], cat[8]; - int abtlen, bctlen, catlen; - REAL abtt[4], bctt[4], catt[4]; - int abttlen, bcttlen, cattlen; - INEXACT REAL abtt3, bctt3, catt3; - REAL negate; - - INEXACT REAL bvirt; - REAL avirt, bround, around; - INEXACT REAL c; - INEXACT REAL abig; - REAL ahi, alo, bhi, blo; - REAL err1, err2, err3; - INEXACT REAL _i, _j; - REAL _0; - - adx = (REAL) (pa[0] - pd[0]); - bdx = (REAL) (pb[0] - pd[0]); - cdx = (REAL) (pc[0] - pd[0]); - ady = (REAL) (pa[1] - pd[1]); - bdy = (REAL) (pb[1] - pd[1]); - cdy = (REAL) (pc[1] - pd[1]); - - Two_Product(bdx, cdy, bdxcdy1, bdxcdy0); - Two_Product(cdx, bdy, cdxbdy1, cdxbdy0); - Two_Two_Diff(bdxcdy1, bdxcdy0, cdxbdy1, cdxbdy0, bc3, bc[2], bc[1], bc[0]); - bc[3] = bc3; - axbclen = scale_expansion_zeroelim(4, bc, adx, axbc); - axxbclen = scale_expansion_zeroelim(axbclen, axbc, adx, axxbc); - aybclen = scale_expansion_zeroelim(4, bc, ady, aybc); - ayybclen = scale_expansion_zeroelim(aybclen, aybc, ady, ayybc); - alen = fast_expansion_sum_zeroelim(axxbclen, axxbc, ayybclen, ayybc, adet); - - Two_Product(cdx, ady, cdxady1, cdxady0); - Two_Product(adx, cdy, adxcdy1, adxcdy0); - Two_Two_Diff(cdxady1, cdxady0, adxcdy1, adxcdy0, ca3, ca[2], ca[1], ca[0]); - ca[3] = ca3; - bxcalen = scale_expansion_zeroelim(4, ca, bdx, bxca); - bxxcalen = scale_expansion_zeroelim(bxcalen, bxca, bdx, bxxca); - bycalen = scale_expansion_zeroelim(4, ca, bdy, byca); - byycalen = scale_expansion_zeroelim(bycalen, byca, bdy, byyca); - blen = fast_expansion_sum_zeroelim(bxxcalen, bxxca, byycalen, byyca, bdet); - - Two_Product(adx, bdy, adxbdy1, adxbdy0); - Two_Product(bdx, ady, bdxady1, bdxady0); - Two_Two_Diff(adxbdy1, adxbdy0, bdxady1, bdxady0, ab3, ab[2], ab[1], ab[0]); - ab[3] = ab3; - cxablen = scale_expansion_zeroelim(4, ab, cdx, cxab); - cxxablen = scale_expansion_zeroelim(cxablen, cxab, cdx, cxxab); - cyablen = scale_expansion_zeroelim(4, ab, cdy, cyab); - cyyablen = scale_expansion_zeroelim(cyablen, cyab, cdy, cyyab); - clen = fast_expansion_sum_zeroelim(cxxablen, cxxab, cyyablen, cyyab, cdet); - - ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet); - finlength = fast_expansion_sum_zeroelim(ablen, abdet, clen, cdet, fin1); - - det = estimate(finlength, fin1); - errbound = (REAL)(iccerrboundB * permanent); - if ((det >= errbound) || (-det >= errbound)) { - return det; - } - - Two_Diff_Tail(pa[0], pd[0], adx, adxtail); - Two_Diff_Tail(pa[1], pd[1], ady, adytail); - Two_Diff_Tail(pb[0], pd[0], bdx, bdxtail); - Two_Diff_Tail(pb[1], pd[1], bdy, bdytail); - Two_Diff_Tail(pc[0], pd[0], cdx, cdxtail); - Two_Diff_Tail(pc[1], pd[1], cdy, cdytail); - if ((adxtail == 0.0) && (bdxtail == 0.0) && (cdxtail == 0.0) - && (adytail == 0.0) && (bdytail == 0.0) && (cdytail == 0.0)) { - return det; - } - - errbound = (REAL)(iccerrboundC * permanent + resulterrbound * Absolute(det)); - det += (REAL)(((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - - (bdy * cdxtail + cdx * bdytail)) - + 2.0 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) - + ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - - (cdy * adxtail + adx * cdytail)) - + 2.0 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) - + ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - - (ady * bdxtail + bdx * adytail)) - + 2.0 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx))); - if ((det >= errbound) || (-det >= errbound)) { - return det; - } - - finnow = fin1; - finother = fin2; - - if ((bdxtail != 0.0) || (bdytail != 0.0) - || (cdxtail != 0.0) || (cdytail != 0.0)) { - Square(adx, adxadx1, adxadx0); - Square(ady, adyady1, adyady0); - Two_Two_Sum(adxadx1, adxadx0, adyady1, adyady0, aa3, aa[2], aa[1], aa[0]); - aa[3] = aa3; - } - if ((cdxtail != 0.0) || (cdytail != 0.0) - || (adxtail != 0.0) || (adytail != 0.0)) { - Square(bdx, bdxbdx1, bdxbdx0); - Square(bdy, bdybdy1, bdybdy0); - Two_Two_Sum(bdxbdx1, bdxbdx0, bdybdy1, bdybdy0, bb3, bb[2], bb[1], bb[0]); - bb[3] = bb3; - } - if ((adxtail != 0.0) || (adytail != 0.0) - || (bdxtail != 0.0) || (bdytail != 0.0)) { - Square(cdx, cdxcdx1, cdxcdx0); - Square(cdy, cdycdy1, cdycdy0); - Two_Two_Sum(cdxcdx1, cdxcdx0, cdycdy1, cdycdy0, cc3, cc[2], cc[1], cc[0]); - cc[3] = cc3; - } - - if (adxtail != 0.0) { - axtbclen = scale_expansion_zeroelim(4, bc, adxtail, axtbc); - temp16alen = scale_expansion_zeroelim(axtbclen, axtbc, 2.0 * adx, - temp16a); - - axtcclen = scale_expansion_zeroelim(4, cc, adxtail, axtcc); - temp16blen = scale_expansion_zeroelim(axtcclen, axtcc, bdy, temp16b); - - axtbblen = scale_expansion_zeroelim(4, bb, adxtail, axtbb); - temp16clen = scale_expansion_zeroelim(axtbblen, axtbb, -cdy, temp16c); - - temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (adytail != 0.0) { - aytbclen = scale_expansion_zeroelim(4, bc, adytail, aytbc); - temp16alen = scale_expansion_zeroelim(aytbclen, aytbc, 2.0 * ady, - temp16a); - - aytbblen = scale_expansion_zeroelim(4, bb, adytail, aytbb); - temp16blen = scale_expansion_zeroelim(aytbblen, aytbb, cdx, temp16b); - - aytcclen = scale_expansion_zeroelim(4, cc, adytail, aytcc); - temp16clen = scale_expansion_zeroelim(aytcclen, aytcc, -bdx, temp16c); - - temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (bdxtail != 0.0) { - bxtcalen = scale_expansion_zeroelim(4, ca, bdxtail, bxtca); - temp16alen = scale_expansion_zeroelim(bxtcalen, bxtca, 2.0 * bdx, - temp16a); - - bxtaalen = scale_expansion_zeroelim(4, aa, bdxtail, bxtaa); - temp16blen = scale_expansion_zeroelim(bxtaalen, bxtaa, cdy, temp16b); - - bxtcclen = scale_expansion_zeroelim(4, cc, bdxtail, bxtcc); - temp16clen = scale_expansion_zeroelim(bxtcclen, bxtcc, -ady, temp16c); - - temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (bdytail != 0.0) { - bytcalen = scale_expansion_zeroelim(4, ca, bdytail, bytca); - temp16alen = scale_expansion_zeroelim(bytcalen, bytca, 2.0 * bdy, - temp16a); - - bytcclen = scale_expansion_zeroelim(4, cc, bdytail, bytcc); - temp16blen = scale_expansion_zeroelim(bytcclen, bytcc, adx, temp16b); - - bytaalen = scale_expansion_zeroelim(4, aa, bdytail, bytaa); - temp16clen = scale_expansion_zeroelim(bytaalen, bytaa, -cdx, temp16c); - - temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (cdxtail != 0.0) { - cxtablen = scale_expansion_zeroelim(4, ab, cdxtail, cxtab); - temp16alen = scale_expansion_zeroelim(cxtablen, cxtab, 2.0 * cdx, - temp16a); - - cxtbblen = scale_expansion_zeroelim(4, bb, cdxtail, cxtbb); - temp16blen = scale_expansion_zeroelim(cxtbblen, cxtbb, ady, temp16b); - - cxtaalen = scale_expansion_zeroelim(4, aa, cdxtail, cxtaa); - temp16clen = scale_expansion_zeroelim(cxtaalen, cxtaa, -bdy, temp16c); - - temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (cdytail != 0.0) { - cytablen = scale_expansion_zeroelim(4, ab, cdytail, cytab); - temp16alen = scale_expansion_zeroelim(cytablen, cytab, 2.0 * cdy, - temp16a); - - cytaalen = scale_expansion_zeroelim(4, aa, cdytail, cytaa); - temp16blen = scale_expansion_zeroelim(cytaalen, cytaa, bdx, temp16b); - - cytbblen = scale_expansion_zeroelim(4, bb, cdytail, cytbb); - temp16clen = scale_expansion_zeroelim(cytbblen, cytbb, -adx, temp16c); - - temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - - if ((adxtail != 0.0) || (adytail != 0.0)) { - if ((bdxtail != 0.0) || (bdytail != 0.0) - || (cdxtail != 0.0) || (cdytail != 0.0)) { - Two_Product(bdxtail, cdy, ti1, ti0); - Two_Product(bdx, cdytail, tj1, tj0); - Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]); - u[3] = u3; - negate = -bdy; - Two_Product(cdxtail, negate, ti1, ti0); - negate = -bdytail; - Two_Product(cdx, negate, tj1, tj0); - Two_Two_Sum(ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0]); - v[3] = v3; - bctlen = fast_expansion_sum_zeroelim(4, u, 4, v, bct); - - Two_Product(bdxtail, cdytail, ti1, ti0); - Two_Product(cdxtail, bdytail, tj1, tj0); - Two_Two_Diff(ti1, ti0, tj1, tj0, bctt3, bctt[2], bctt[1], bctt[0]); - bctt[3] = bctt3; - bcttlen = 4; - } else { - bct[0] = 0.0; - bctlen = 1; - bctt[0] = 0.0; - bcttlen = 1; - } - - if (adxtail != 0.0) { - temp16alen = scale_expansion_zeroelim(axtbclen, axtbc, adxtail, temp16a); - axtbctlen = scale_expansion_zeroelim(bctlen, bct, adxtail, axtbct); - temp32alen = scale_expansion_zeroelim(axtbctlen, axtbct, 2.0 * adx, - temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - if (bdytail != 0.0) { - temp8len = scale_expansion_zeroelim(4, cc, adxtail, temp8); - temp16alen = scale_expansion_zeroelim(temp8len, temp8, bdytail, - temp16a); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, - temp16a, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (cdytail != 0.0) { - temp8len = scale_expansion_zeroelim(4, bb, -adxtail, temp8); - temp16alen = scale_expansion_zeroelim(temp8len, temp8, cdytail, - temp16a); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, - temp16a, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - - temp32alen = scale_expansion_zeroelim(axtbctlen, axtbct, adxtail, - temp32a); - axtbcttlen = scale_expansion_zeroelim(bcttlen, bctt, adxtail, axtbctt); - temp16alen = scale_expansion_zeroelim(axtbcttlen, axtbctt, 2.0 * adx, - temp16a); - temp16blen = scale_expansion_zeroelim(axtbcttlen, axtbctt, adxtail, - temp16b); - temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32b); - temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, - temp32blen, temp32b, temp64); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, - temp64, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (adytail != 0.0) { - temp16alen = scale_expansion_zeroelim(aytbclen, aytbc, adytail, temp16a); - aytbctlen = scale_expansion_zeroelim(bctlen, bct, adytail, aytbct); - temp32alen = scale_expansion_zeroelim(aytbctlen, aytbct, 2.0 * ady, - temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - - - temp32alen = scale_expansion_zeroelim(aytbctlen, aytbct, adytail, - temp32a); - aytbcttlen = scale_expansion_zeroelim(bcttlen, bctt, adytail, aytbctt); - temp16alen = scale_expansion_zeroelim(aytbcttlen, aytbctt, 2.0 * ady, - temp16a); - temp16blen = scale_expansion_zeroelim(aytbcttlen, aytbctt, adytail, - temp16b); - temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32b); - temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, - temp32blen, temp32b, temp64); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, - temp64, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - } - if ((bdxtail != 0.0) || (bdytail != 0.0)) { - if ((cdxtail != 0.0) || (cdytail != 0.0) - || (adxtail != 0.0) || (adytail != 0.0)) { - Two_Product(cdxtail, ady, ti1, ti0); - Two_Product(cdx, adytail, tj1, tj0); - Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]); - u[3] = u3; - negate = -cdy; - Two_Product(adxtail, negate, ti1, ti0); - negate = -cdytail; - Two_Product(adx, negate, tj1, tj0); - Two_Two_Sum(ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0]); - v[3] = v3; - catlen = fast_expansion_sum_zeroelim(4, u, 4, v, cat); - - Two_Product(cdxtail, adytail, ti1, ti0); - Two_Product(adxtail, cdytail, tj1, tj0); - Two_Two_Diff(ti1, ti0, tj1, tj0, catt3, catt[2], catt[1], catt[0]); - catt[3] = catt3; - cattlen = 4; - } else { - cat[0] = 0.0; - catlen = 1; - catt[0] = 0.0; - cattlen = 1; - } - - if (bdxtail != 0.0) { - temp16alen = scale_expansion_zeroelim(bxtcalen, bxtca, bdxtail, temp16a); - bxtcatlen = scale_expansion_zeroelim(catlen, cat, bdxtail, bxtcat); - temp32alen = scale_expansion_zeroelim(bxtcatlen, bxtcat, 2.0 * bdx, - temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - if (cdytail != 0.0) { - temp8len = scale_expansion_zeroelim(4, aa, bdxtail, temp8); - temp16alen = scale_expansion_zeroelim(temp8len, temp8, cdytail, - temp16a); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, - temp16a, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (adytail != 0.0) { - temp8len = scale_expansion_zeroelim(4, cc, -bdxtail, temp8); - temp16alen = scale_expansion_zeroelim(temp8len, temp8, adytail, - temp16a); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, - temp16a, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - - temp32alen = scale_expansion_zeroelim(bxtcatlen, bxtcat, bdxtail, - temp32a); - bxtcattlen = scale_expansion_zeroelim(cattlen, catt, bdxtail, bxtcatt); - temp16alen = scale_expansion_zeroelim(bxtcattlen, bxtcatt, 2.0 * bdx, - temp16a); - temp16blen = scale_expansion_zeroelim(bxtcattlen, bxtcatt, bdxtail, - temp16b); - temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32b); - temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, - temp32blen, temp32b, temp64); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, - temp64, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (bdytail != 0.0) { - temp16alen = scale_expansion_zeroelim(bytcalen, bytca, bdytail, temp16a); - bytcatlen = scale_expansion_zeroelim(catlen, cat, bdytail, bytcat); - temp32alen = scale_expansion_zeroelim(bytcatlen, bytcat, 2.0 * bdy, - temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - - - temp32alen = scale_expansion_zeroelim(bytcatlen, bytcat, bdytail, - temp32a); - bytcattlen = scale_expansion_zeroelim(cattlen, catt, bdytail, bytcatt); - temp16alen = scale_expansion_zeroelim(bytcattlen, bytcatt, 2.0 * bdy, - temp16a); - temp16blen = scale_expansion_zeroelim(bytcattlen, bytcatt, bdytail, - temp16b); - temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32b); - temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, - temp32blen, temp32b, temp64); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, - temp64, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - } - if ((cdxtail != 0.0) || (cdytail != 0.0)) { - if ((adxtail != 0.0) || (adytail != 0.0) - || (bdxtail != 0.0) || (bdytail != 0.0)) { - Two_Product(adxtail, bdy, ti1, ti0); - Two_Product(adx, bdytail, tj1, tj0); - Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]); - u[3] = u3; - negate = -ady; - Two_Product(bdxtail, negate, ti1, ti0); - negate = -adytail; - Two_Product(bdx, negate, tj1, tj0); - Two_Two_Sum(ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0]); - v[3] = v3; - abtlen = fast_expansion_sum_zeroelim(4, u, 4, v, abt); - - Two_Product(adxtail, bdytail, ti1, ti0); - Two_Product(bdxtail, adytail, tj1, tj0); - Two_Two_Diff(ti1, ti0, tj1, tj0, abtt3, abtt[2], abtt[1], abtt[0]); - abtt[3] = abtt3; - abttlen = 4; - } else { - abt[0] = 0.0; - abtlen = 1; - abtt[0] = 0.0; - abttlen = 1; - } - - if (cdxtail != 0.0) { - temp16alen = scale_expansion_zeroelim(cxtablen, cxtab, cdxtail, temp16a); - cxtabtlen = scale_expansion_zeroelim(abtlen, abt, cdxtail, cxtabt); - temp32alen = scale_expansion_zeroelim(cxtabtlen, cxtabt, 2.0 * cdx, - temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - if (adytail != 0.0) { - temp8len = scale_expansion_zeroelim(4, bb, cdxtail, temp8); - temp16alen = scale_expansion_zeroelim(temp8len, temp8, adytail, - temp16a); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, - temp16a, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (bdytail != 0.0) { - temp8len = scale_expansion_zeroelim(4, aa, -cdxtail, temp8); - temp16alen = scale_expansion_zeroelim(temp8len, temp8, bdytail, - temp16a); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, - temp16a, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - - temp32alen = scale_expansion_zeroelim(cxtabtlen, cxtabt, cdxtail, - temp32a); - cxtabttlen = scale_expansion_zeroelim(abttlen, abtt, cdxtail, cxtabtt); - temp16alen = scale_expansion_zeroelim(cxtabttlen, cxtabtt, 2.0 * cdx, - temp16a); - temp16blen = scale_expansion_zeroelim(cxtabttlen, cxtabtt, cdxtail, - temp16b); - temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32b); - temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, - temp32blen, temp32b, temp64); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, - temp64, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - if (cdytail != 0.0) { - temp16alen = scale_expansion_zeroelim(cytablen, cytab, cdytail, temp16a); - cytabtlen = scale_expansion_zeroelim(abtlen, abt, cdytail, cytabt); - temp32alen = scale_expansion_zeroelim(cytabtlen, cytabt, 2.0 * cdy, - temp32a); - temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp32alen, temp32a, temp48); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, - temp48, finother); - finswap = finnow; finnow = finother; finother = finswap; - - - temp32alen = scale_expansion_zeroelim(cytabtlen, cytabt, cdytail, - temp32a); - cytabttlen = scale_expansion_zeroelim(abttlen, abtt, cdytail, cytabtt); - temp16alen = scale_expansion_zeroelim(cytabttlen, cytabtt, 2.0 * cdy, - temp16a); - temp16blen = scale_expansion_zeroelim(cytabttlen, cytabtt, cdytail, - temp16b); - temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, - temp16blen, temp16b, temp32b); - temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, - temp32blen, temp32b, temp64); - finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, - temp64, finother); - finswap = finnow; finnow = finother; finother = finswap; - } - } - - return finnow[finlength - 1]; + INEXACT REAL adx, bdx, cdx, ady, bdy, cdy; + REAL det, errbound; + + INEXACT REAL bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1; + REAL bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0; + REAL bc[4], ca[4], ab[4]; + INEXACT REAL bc3, ca3, ab3; + REAL axbc[8], axxbc[16], aybc[8], ayybc[16], adet[32]; + int axbclen, axxbclen, aybclen, ayybclen, alen; + REAL bxca[8], bxxca[16], byca[8], byyca[16], bdet[32]; + int bxcalen, bxxcalen, bycalen, byycalen, blen; + REAL cxab[8], cxxab[16], cyab[8], cyyab[16], cdet[32]; + int cxablen, cxxablen, cyablen, cyyablen, clen; + REAL abdet[64]; + int ablen; + REAL fin1[1152], fin2[1152]; + REAL *finnow, *finother, *finswap; + int finlength; + + REAL adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail; + INEXACT REAL adxadx1, adyady1, bdxbdx1, bdybdy1, cdxcdx1, cdycdy1; + REAL adxadx0, adyady0, bdxbdx0, bdybdy0, cdxcdx0, cdycdy0; + REAL aa[4], bb[4], cc[4]; + INEXACT REAL aa3, bb3, cc3; + INEXACT REAL ti1, tj1; + REAL ti0, tj0; + REAL u[4], v[4]; + INEXACT REAL u3, v3; + REAL temp8[8], temp16a[16], temp16b[16], temp16c[16]; + REAL temp32a[32], temp32b[32], temp48[48], temp64[64]; + int temp8len, temp16alen, temp16blen, temp16clen; + int temp32alen, temp32blen, temp48len, temp64len; + REAL axtbb[8], axtcc[8], aytbb[8], aytcc[8]; + int axtbblen, axtcclen, aytbblen, aytcclen; + REAL bxtaa[8], bxtcc[8], bytaa[8], bytcc[8]; + int bxtaalen, bxtcclen, bytaalen, bytcclen; + REAL cxtaa[8], cxtbb[8], cytaa[8], cytbb[8]; + int cxtaalen, cxtbblen, cytaalen, cytbblen; + REAL axtbc[8], aytbc[8], bxtca[8], bytca[8], cxtab[8], cytab[8]; + int axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen; + REAL axtbct[16], aytbct[16], bxtcat[16], bytcat[16], cxtabt[16], cytabt[16]; + int axtbctlen, aytbctlen, bxtcatlen, bytcatlen, cxtabtlen, cytabtlen; + REAL axtbctt[8], aytbctt[8], bxtcatt[8]; + REAL bytcatt[8], cxtabtt[8], cytabtt[8]; + int axtbcttlen, aytbcttlen, bxtcattlen, bytcattlen, cxtabttlen, cytabttlen; + REAL abt[8], bct[8], cat[8]; + int abtlen, bctlen, catlen; + REAL abtt[4], bctt[4], catt[4]; + int abttlen, bcttlen, cattlen; + INEXACT REAL abtt3, bctt3, catt3; + REAL negate; + + INEXACT REAL bvirt; + REAL avirt, bround, around; + INEXACT REAL c; + INEXACT REAL abig; + REAL ahi, alo, bhi, blo; + REAL err1, err2, err3; + INEXACT REAL _i, _j; + REAL _0; + + adx = (REAL) ( pa[0] - pd[0] ); + bdx = (REAL) ( pb[0] - pd[0] ); + cdx = (REAL) ( pc[0] - pd[0] ); + ady = (REAL) ( pa[1] - pd[1] ); + bdy = (REAL) ( pb[1] - pd[1] ); + cdy = (REAL) ( pc[1] - pd[1] ); + + Two_Product( bdx, cdy, bdxcdy1, bdxcdy0 ); + Two_Product( cdx, bdy, cdxbdy1, cdxbdy0 ); + Two_Two_Diff( bdxcdy1, bdxcdy0, cdxbdy1, cdxbdy0, bc3, bc[2], bc[1], bc[0] ); + bc[3] = bc3; + axbclen = scale_expansion_zeroelim( 4, bc, adx, axbc ); + axxbclen = scale_expansion_zeroelim( axbclen, axbc, adx, axxbc ); + aybclen = scale_expansion_zeroelim( 4, bc, ady, aybc ); + ayybclen = scale_expansion_zeroelim( aybclen, aybc, ady, ayybc ); + alen = fast_expansion_sum_zeroelim( axxbclen, axxbc, ayybclen, ayybc, adet ); + + Two_Product( cdx, ady, cdxady1, cdxady0 ); + Two_Product( adx, cdy, adxcdy1, adxcdy0 ); + Two_Two_Diff( cdxady1, cdxady0, adxcdy1, adxcdy0, ca3, ca[2], ca[1], ca[0] ); + ca[3] = ca3; + bxcalen = scale_expansion_zeroelim( 4, ca, bdx, bxca ); + bxxcalen = scale_expansion_zeroelim( bxcalen, bxca, bdx, bxxca ); + bycalen = scale_expansion_zeroelim( 4, ca, bdy, byca ); + byycalen = scale_expansion_zeroelim( bycalen, byca, bdy, byyca ); + blen = fast_expansion_sum_zeroelim( bxxcalen, bxxca, byycalen, byyca, bdet ); + + Two_Product( adx, bdy, adxbdy1, adxbdy0 ); + Two_Product( bdx, ady, bdxady1, bdxady0 ); + Two_Two_Diff( adxbdy1, adxbdy0, bdxady1, bdxady0, ab3, ab[2], ab[1], ab[0] ); + ab[3] = ab3; + cxablen = scale_expansion_zeroelim( 4, ab, cdx, cxab ); + cxxablen = scale_expansion_zeroelim( cxablen, cxab, cdx, cxxab ); + cyablen = scale_expansion_zeroelim( 4, ab, cdy, cyab ); + cyyablen = scale_expansion_zeroelim( cyablen, cyab, cdy, cyyab ); + clen = fast_expansion_sum_zeroelim( cxxablen, cxxab, cyyablen, cyyab, cdet ); + + ablen = fast_expansion_sum_zeroelim( alen, adet, blen, bdet, abdet ); + finlength = fast_expansion_sum_zeroelim( ablen, abdet, clen, cdet, fin1 ); + + det = estimate( finlength, fin1 ); + errbound = (REAL)( iccerrboundB * permanent ); + if ( ( det >= errbound ) || ( -det >= errbound ) ) { + return det; + } + + Two_Diff_Tail( pa[0], pd[0], adx, adxtail ); + Two_Diff_Tail( pa[1], pd[1], ady, adytail ); + Two_Diff_Tail( pb[0], pd[0], bdx, bdxtail ); + Two_Diff_Tail( pb[1], pd[1], bdy, bdytail ); + Two_Diff_Tail( pc[0], pd[0], cdx, cdxtail ); + Two_Diff_Tail( pc[1], pd[1], cdy, cdytail ); + if ( ( adxtail == 0.0 ) && ( bdxtail == 0.0 ) && ( cdxtail == 0.0 ) + && ( adytail == 0.0 ) && ( bdytail == 0.0 ) && ( cdytail == 0.0 ) ) { + return det; + } + + errbound = (REAL)( iccerrboundC * permanent + resulterrbound * Absolute( det ) ); + det += (REAL)( ( ( adx * adx + ady * ady ) * ( ( bdx * cdytail + cdy * bdxtail ) + - ( bdy * cdxtail + cdx * bdytail ) ) + + 2.0 * ( adx * adxtail + ady * adytail ) * ( bdx * cdy - bdy * cdx ) ) + + ( ( bdx * bdx + bdy * bdy ) * ( ( cdx * adytail + ady * cdxtail ) + - ( cdy * adxtail + adx * cdytail ) ) + + 2.0 * ( bdx * bdxtail + bdy * bdytail ) * ( cdx * ady - cdy * adx ) ) + + ( ( cdx * cdx + cdy * cdy ) * ( ( adx * bdytail + bdy * adxtail ) + - ( ady * bdxtail + bdx * adytail ) ) + + 2.0 * ( cdx * cdxtail + cdy * cdytail ) * ( adx * bdy - ady * bdx ) ) ); + if ( ( det >= errbound ) || ( -det >= errbound ) ) { + return det; + } + + finnow = fin1; + finother = fin2; + + if ( ( bdxtail != 0.0 ) || ( bdytail != 0.0 ) + || ( cdxtail != 0.0 ) || ( cdytail != 0.0 ) ) { + Square( adx, adxadx1, adxadx0 ); + Square( ady, adyady1, adyady0 ); + Two_Two_Sum( adxadx1, adxadx0, adyady1, adyady0, aa3, aa[2], aa[1], aa[0] ); + aa[3] = aa3; + } + if ( ( cdxtail != 0.0 ) || ( cdytail != 0.0 ) + || ( adxtail != 0.0 ) || ( adytail != 0.0 ) ) { + Square( bdx, bdxbdx1, bdxbdx0 ); + Square( bdy, bdybdy1, bdybdy0 ); + Two_Two_Sum( bdxbdx1, bdxbdx0, bdybdy1, bdybdy0, bb3, bb[2], bb[1], bb[0] ); + bb[3] = bb3; + } + if ( ( adxtail != 0.0 ) || ( adytail != 0.0 ) + || ( bdxtail != 0.0 ) || ( bdytail != 0.0 ) ) { + Square( cdx, cdxcdx1, cdxcdx0 ); + Square( cdy, cdycdy1, cdycdy0 ); + Two_Two_Sum( cdxcdx1, cdxcdx0, cdycdy1, cdycdy0, cc3, cc[2], cc[1], cc[0] ); + cc[3] = cc3; + } + + if ( adxtail != 0.0 ) { + axtbclen = scale_expansion_zeroelim( 4, bc, adxtail, axtbc ); + temp16alen = scale_expansion_zeroelim( axtbclen, axtbc, 2.0 * adx, + temp16a ); + + axtcclen = scale_expansion_zeroelim( 4, cc, adxtail, axtcc ); + temp16blen = scale_expansion_zeroelim( axtcclen, axtcc, bdy, temp16b ); + + axtbblen = scale_expansion_zeroelim( 4, bb, adxtail, axtbb ); + temp16clen = scale_expansion_zeroelim( axtbblen, axtbb, -cdy, temp16c ); + + temp32alen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16clen, temp16c, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( adytail != 0.0 ) { + aytbclen = scale_expansion_zeroelim( 4, bc, adytail, aytbc ); + temp16alen = scale_expansion_zeroelim( aytbclen, aytbc, 2.0 * ady, + temp16a ); + + aytbblen = scale_expansion_zeroelim( 4, bb, adytail, aytbb ); + temp16blen = scale_expansion_zeroelim( aytbblen, aytbb, cdx, temp16b ); + + aytcclen = scale_expansion_zeroelim( 4, cc, adytail, aytcc ); + temp16clen = scale_expansion_zeroelim( aytcclen, aytcc, -bdx, temp16c ); + + temp32alen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16clen, temp16c, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( bdxtail != 0.0 ) { + bxtcalen = scale_expansion_zeroelim( 4, ca, bdxtail, bxtca ); + temp16alen = scale_expansion_zeroelim( bxtcalen, bxtca, 2.0 * bdx, + temp16a ); + + bxtaalen = scale_expansion_zeroelim( 4, aa, bdxtail, bxtaa ); + temp16blen = scale_expansion_zeroelim( bxtaalen, bxtaa, cdy, temp16b ); + + bxtcclen = scale_expansion_zeroelim( 4, cc, bdxtail, bxtcc ); + temp16clen = scale_expansion_zeroelim( bxtcclen, bxtcc, -ady, temp16c ); + + temp32alen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16clen, temp16c, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( bdytail != 0.0 ) { + bytcalen = scale_expansion_zeroelim( 4, ca, bdytail, bytca ); + temp16alen = scale_expansion_zeroelim( bytcalen, bytca, 2.0 * bdy, + temp16a ); + + bytcclen = scale_expansion_zeroelim( 4, cc, bdytail, bytcc ); + temp16blen = scale_expansion_zeroelim( bytcclen, bytcc, adx, temp16b ); + + bytaalen = scale_expansion_zeroelim( 4, aa, bdytail, bytaa ); + temp16clen = scale_expansion_zeroelim( bytaalen, bytaa, -cdx, temp16c ); + + temp32alen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16clen, temp16c, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( cdxtail != 0.0 ) { + cxtablen = scale_expansion_zeroelim( 4, ab, cdxtail, cxtab ); + temp16alen = scale_expansion_zeroelim( cxtablen, cxtab, 2.0 * cdx, + temp16a ); + + cxtbblen = scale_expansion_zeroelim( 4, bb, cdxtail, cxtbb ); + temp16blen = scale_expansion_zeroelim( cxtbblen, cxtbb, ady, temp16b ); + + cxtaalen = scale_expansion_zeroelim( 4, aa, cdxtail, cxtaa ); + temp16clen = scale_expansion_zeroelim( cxtaalen, cxtaa, -bdy, temp16c ); + + temp32alen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16clen, temp16c, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( cdytail != 0.0 ) { + cytablen = scale_expansion_zeroelim( 4, ab, cdytail, cytab ); + temp16alen = scale_expansion_zeroelim( cytablen, cytab, 2.0 * cdy, + temp16a ); + + cytaalen = scale_expansion_zeroelim( 4, aa, cdytail, cytaa ); + temp16blen = scale_expansion_zeroelim( cytaalen, cytaa, bdx, temp16b ); + + cytbblen = scale_expansion_zeroelim( 4, bb, cdytail, cytbb ); + temp16clen = scale_expansion_zeroelim( cytbblen, cytbb, -adx, temp16c ); + + temp32alen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16clen, temp16c, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + + if ( ( adxtail != 0.0 ) || ( adytail != 0.0 ) ) { + if ( ( bdxtail != 0.0 ) || ( bdytail != 0.0 ) + || ( cdxtail != 0.0 ) || ( cdytail != 0.0 ) ) { + Two_Product( bdxtail, cdy, ti1, ti0 ); + Two_Product( bdx, cdytail, tj1, tj0 ); + Two_Two_Sum( ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0] ); + u[3] = u3; + negate = -bdy; + Two_Product( cdxtail, negate, ti1, ti0 ); + negate = -bdytail; + Two_Product( cdx, negate, tj1, tj0 ); + Two_Two_Sum( ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0] ); + v[3] = v3; + bctlen = fast_expansion_sum_zeroelim( 4, u, 4, v, bct ); + + Two_Product( bdxtail, cdytail, ti1, ti0 ); + Two_Product( cdxtail, bdytail, tj1, tj0 ); + Two_Two_Diff( ti1, ti0, tj1, tj0, bctt3, bctt[2], bctt[1], bctt[0] ); + bctt[3] = bctt3; + bcttlen = 4; + } + else { + bct[0] = 0.0; + bctlen = 1; + bctt[0] = 0.0; + bcttlen = 1; + } + + if ( adxtail != 0.0 ) { + temp16alen = scale_expansion_zeroelim( axtbclen, axtbc, adxtail, temp16a ); + axtbctlen = scale_expansion_zeroelim( bctlen, bct, adxtail, axtbct ); + temp32alen = scale_expansion_zeroelim( axtbctlen, axtbct, 2.0 * adx, + temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + if ( bdytail != 0.0 ) { + temp8len = scale_expansion_zeroelim( 4, cc, adxtail, temp8 ); + temp16alen = scale_expansion_zeroelim( temp8len, temp8, bdytail, + temp16a ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp16alen, + temp16a, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( cdytail != 0.0 ) { + temp8len = scale_expansion_zeroelim( 4, bb, -adxtail, temp8 ); + temp16alen = scale_expansion_zeroelim( temp8len, temp8, cdytail, + temp16a ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp16alen, + temp16a, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + + temp32alen = scale_expansion_zeroelim( axtbctlen, axtbct, adxtail, + temp32a ); + axtbcttlen = scale_expansion_zeroelim( bcttlen, bctt, adxtail, axtbctt ); + temp16alen = scale_expansion_zeroelim( axtbcttlen, axtbctt, 2.0 * adx, + temp16a ); + temp16blen = scale_expansion_zeroelim( axtbcttlen, axtbctt, adxtail, + temp16b ); + temp32blen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32b ); + temp64len = fast_expansion_sum_zeroelim( temp32alen, temp32a, + temp32blen, temp32b, temp64 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp64len, + temp64, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( adytail != 0.0 ) { + temp16alen = scale_expansion_zeroelim( aytbclen, aytbc, adytail, temp16a ); + aytbctlen = scale_expansion_zeroelim( bctlen, bct, adytail, aytbct ); + temp32alen = scale_expansion_zeroelim( aytbctlen, aytbct, 2.0 * ady, + temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + + + temp32alen = scale_expansion_zeroelim( aytbctlen, aytbct, adytail, + temp32a ); + aytbcttlen = scale_expansion_zeroelim( bcttlen, bctt, adytail, aytbctt ); + temp16alen = scale_expansion_zeroelim( aytbcttlen, aytbctt, 2.0 * ady, + temp16a ); + temp16blen = scale_expansion_zeroelim( aytbcttlen, aytbctt, adytail, + temp16b ); + temp32blen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32b ); + temp64len = fast_expansion_sum_zeroelim( temp32alen, temp32a, + temp32blen, temp32b, temp64 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp64len, + temp64, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + } + if ( ( bdxtail != 0.0 ) || ( bdytail != 0.0 ) ) { + if ( ( cdxtail != 0.0 ) || ( cdytail != 0.0 ) + || ( adxtail != 0.0 ) || ( adytail != 0.0 ) ) { + Two_Product( cdxtail, ady, ti1, ti0 ); + Two_Product( cdx, adytail, tj1, tj0 ); + Two_Two_Sum( ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0] ); + u[3] = u3; + negate = -cdy; + Two_Product( adxtail, negate, ti1, ti0 ); + negate = -cdytail; + Two_Product( adx, negate, tj1, tj0 ); + Two_Two_Sum( ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0] ); + v[3] = v3; + catlen = fast_expansion_sum_zeroelim( 4, u, 4, v, cat ); + + Two_Product( cdxtail, adytail, ti1, ti0 ); + Two_Product( adxtail, cdytail, tj1, tj0 ); + Two_Two_Diff( ti1, ti0, tj1, tj0, catt3, catt[2], catt[1], catt[0] ); + catt[3] = catt3; + cattlen = 4; + } + else { + cat[0] = 0.0; + catlen = 1; + catt[0] = 0.0; + cattlen = 1; + } + + if ( bdxtail != 0.0 ) { + temp16alen = scale_expansion_zeroelim( bxtcalen, bxtca, bdxtail, temp16a ); + bxtcatlen = scale_expansion_zeroelim( catlen, cat, bdxtail, bxtcat ); + temp32alen = scale_expansion_zeroelim( bxtcatlen, bxtcat, 2.0 * bdx, + temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + if ( cdytail != 0.0 ) { + temp8len = scale_expansion_zeroelim( 4, aa, bdxtail, temp8 ); + temp16alen = scale_expansion_zeroelim( temp8len, temp8, cdytail, + temp16a ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp16alen, + temp16a, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( adytail != 0.0 ) { + temp8len = scale_expansion_zeroelim( 4, cc, -bdxtail, temp8 ); + temp16alen = scale_expansion_zeroelim( temp8len, temp8, adytail, + temp16a ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp16alen, + temp16a, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + + temp32alen = scale_expansion_zeroelim( bxtcatlen, bxtcat, bdxtail, + temp32a ); + bxtcattlen = scale_expansion_zeroelim( cattlen, catt, bdxtail, bxtcatt ); + temp16alen = scale_expansion_zeroelim( bxtcattlen, bxtcatt, 2.0 * bdx, + temp16a ); + temp16blen = scale_expansion_zeroelim( bxtcattlen, bxtcatt, bdxtail, + temp16b ); + temp32blen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32b ); + temp64len = fast_expansion_sum_zeroelim( temp32alen, temp32a, + temp32blen, temp32b, temp64 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp64len, + temp64, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( bdytail != 0.0 ) { + temp16alen = scale_expansion_zeroelim( bytcalen, bytca, bdytail, temp16a ); + bytcatlen = scale_expansion_zeroelim( catlen, cat, bdytail, bytcat ); + temp32alen = scale_expansion_zeroelim( bytcatlen, bytcat, 2.0 * bdy, + temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + + + temp32alen = scale_expansion_zeroelim( bytcatlen, bytcat, bdytail, + temp32a ); + bytcattlen = scale_expansion_zeroelim( cattlen, catt, bdytail, bytcatt ); + temp16alen = scale_expansion_zeroelim( bytcattlen, bytcatt, 2.0 * bdy, + temp16a ); + temp16blen = scale_expansion_zeroelim( bytcattlen, bytcatt, bdytail, + temp16b ); + temp32blen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32b ); + temp64len = fast_expansion_sum_zeroelim( temp32alen, temp32a, + temp32blen, temp32b, temp64 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp64len, + temp64, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + } + if ( ( cdxtail != 0.0 ) || ( cdytail != 0.0 ) ) { + if ( ( adxtail != 0.0 ) || ( adytail != 0.0 ) + || ( bdxtail != 0.0 ) || ( bdytail != 0.0 ) ) { + Two_Product( adxtail, bdy, ti1, ti0 ); + Two_Product( adx, bdytail, tj1, tj0 ); + Two_Two_Sum( ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0] ); + u[3] = u3; + negate = -ady; + Two_Product( bdxtail, negate, ti1, ti0 ); + negate = -adytail; + Two_Product( bdx, negate, tj1, tj0 ); + Two_Two_Sum( ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0] ); + v[3] = v3; + abtlen = fast_expansion_sum_zeroelim( 4, u, 4, v, abt ); + + Two_Product( adxtail, bdytail, ti1, ti0 ); + Two_Product( bdxtail, adytail, tj1, tj0 ); + Two_Two_Diff( ti1, ti0, tj1, tj0, abtt3, abtt[2], abtt[1], abtt[0] ); + abtt[3] = abtt3; + abttlen = 4; + } + else { + abt[0] = 0.0; + abtlen = 1; + abtt[0] = 0.0; + abttlen = 1; + } + + if ( cdxtail != 0.0 ) { + temp16alen = scale_expansion_zeroelim( cxtablen, cxtab, cdxtail, temp16a ); + cxtabtlen = scale_expansion_zeroelim( abtlen, abt, cdxtail, cxtabt ); + temp32alen = scale_expansion_zeroelim( cxtabtlen, cxtabt, 2.0 * cdx, + temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + if ( adytail != 0.0 ) { + temp8len = scale_expansion_zeroelim( 4, bb, cdxtail, temp8 ); + temp16alen = scale_expansion_zeroelim( temp8len, temp8, adytail, + temp16a ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp16alen, + temp16a, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( bdytail != 0.0 ) { + temp8len = scale_expansion_zeroelim( 4, aa, -cdxtail, temp8 ); + temp16alen = scale_expansion_zeroelim( temp8len, temp8, bdytail, + temp16a ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp16alen, + temp16a, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + + temp32alen = scale_expansion_zeroelim( cxtabtlen, cxtabt, cdxtail, + temp32a ); + cxtabttlen = scale_expansion_zeroelim( abttlen, abtt, cdxtail, cxtabtt ); + temp16alen = scale_expansion_zeroelim( cxtabttlen, cxtabtt, 2.0 * cdx, + temp16a ); + temp16blen = scale_expansion_zeroelim( cxtabttlen, cxtabtt, cdxtail, + temp16b ); + temp32blen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32b ); + temp64len = fast_expansion_sum_zeroelim( temp32alen, temp32a, + temp32blen, temp32b, temp64 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp64len, + temp64, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + if ( cdytail != 0.0 ) { + temp16alen = scale_expansion_zeroelim( cytablen, cytab, cdytail, temp16a ); + cytabtlen = scale_expansion_zeroelim( abtlen, abt, cdytail, cytabt ); + temp32alen = scale_expansion_zeroelim( cytabtlen, cytabt, 2.0 * cdy, + temp32a ); + temp48len = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp32alen, temp32a, temp48 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp48len, + temp48, finother ); + finswap = finnow; finnow = finother; finother = finswap; + + + temp32alen = scale_expansion_zeroelim( cytabtlen, cytabt, cdytail, + temp32a ); + cytabttlen = scale_expansion_zeroelim( abttlen, abtt, cdytail, cytabtt ); + temp16alen = scale_expansion_zeroelim( cytabttlen, cytabtt, 2.0 * cdy, + temp16a ); + temp16blen = scale_expansion_zeroelim( cytabttlen, cytabtt, cdytail, + temp16b ); + temp32blen = fast_expansion_sum_zeroelim( temp16alen, temp16a, + temp16blen, temp16b, temp32b ); + temp64len = fast_expansion_sum_zeroelim( temp32alen, temp32a, + temp32blen, temp32b, temp64 ); + finlength = fast_expansion_sum_zeroelim( finlength, finnow, temp64len, + temp64, finother ); + finswap = finnow; finnow = finother; finother = finswap; + } + } + + return finnow[finlength - 1]; } -REAL incircle(pa, pb, pc, pd) +REAL incircle( pa, pb, pc, pd ) point pa; point pb; point pc; point pd; { - REAL adx, bdx, cdx, ady, bdy, cdy; - REAL bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady; - REAL alift, blift, clift; - REAL det; - REAL permanent, errbound; - - incirclecount++; - - adx = pa[0] - pd[0]; - bdx = pb[0] - pd[0]; - cdx = pc[0] - pd[0]; - ady = pa[1] - pd[1]; - bdy = pb[1] - pd[1]; - cdy = pc[1] - pd[1]; - - bdxcdy = bdx * cdy; - cdxbdy = cdx * bdy; - alift = adx * adx + ady * ady; - - cdxady = cdx * ady; - adxcdy = adx * cdy; - blift = bdx * bdx + bdy * bdy; - - adxbdy = adx * bdy; - bdxady = bdx * ady; - clift = cdx * cdx + cdy * cdy; - - det = alift * (bdxcdy - cdxbdy) - + blift * (cdxady - adxcdy) - + clift * (adxbdy - bdxady); - - if (noexact) { - return det; - } - - permanent = (Absolute(bdxcdy) + Absolute(cdxbdy)) * alift - + (Absolute(cdxady) + Absolute(adxcdy)) * blift - + (Absolute(adxbdy) + Absolute(bdxady)) * clift; - errbound = iccerrboundA * permanent; - if ((det > errbound) || (-det > errbound)) { - return det; - } - - return incircleadapt(pa, pb, pc, pd, permanent); + REAL adx, bdx, cdx, ady, bdy, cdy; + REAL bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady; + REAL alift, blift, clift; + REAL det; + REAL permanent, errbound; + + incirclecount++; + + adx = pa[0] - pd[0]; + bdx = pb[0] - pd[0]; + cdx = pc[0] - pd[0]; + ady = pa[1] - pd[1]; + bdy = pb[1] - pd[1]; + cdy = pc[1] - pd[1]; + + bdxcdy = bdx * cdy; + cdxbdy = cdx * bdy; + alift = adx * adx + ady * ady; + + cdxady = cdx * ady; + adxcdy = adx * cdy; + blift = bdx * bdx + bdy * bdy; + + adxbdy = adx * bdy; + bdxady = bdx * ady; + clift = cdx * cdx + cdy * cdy; + + det = alift * ( bdxcdy - cdxbdy ) + + blift * ( cdxady - adxcdy ) + + clift * ( adxbdy - bdxady ); + + if ( noexact ) { + return det; + } + + permanent = ( Absolute( bdxcdy ) + Absolute( cdxbdy ) ) * alift + + ( Absolute( cdxady ) + Absolute( adxcdy ) ) * blift + + ( Absolute( adxbdy ) + Absolute( bdxady ) ) * clift; + errbound = iccerrboundA * permanent; + if ( ( det > errbound ) || ( -det > errbound ) ) { + return det; + } + + return incircleadapt( pa, pb, pc, pd, permanent ); } /** **/ @@ -5033,20 +5060,19 @@ point pd; /* */ /*****************************************************************************/ -void triangleinit() -{ - points.maxitems = triangles.maxitems = shelles.maxitems = viri.maxitems = - badsegments.maxitems = badtriangles.maxitems = splaynodes.maxitems = 0l; - points.itembytes = triangles.itembytes = shelles.itembytes = viri.itembytes = - badsegments.itembytes = badtriangles.itembytes = splaynodes.itembytes = 0; - recenttri.tri = (triangle *) NULL; /* No triangle has been visited yet. */ - samples = 1; /* Point location should take at least one sample. */ - checksegments = 0; /* There are no segments in the triangulation yet. */ - incirclecount = counterclockcount = hyperbolacount = 0; - circumcentercount = circletopcount = 0; - randomseed = 1; - - exactinit(); /* Initialize exact arithmetic constants. */ +void triangleinit(){ + points.maxitems = triangles.maxitems = shelles.maxitems = viri.maxitems = + badsegments.maxitems = badtriangles.maxitems = splaynodes.maxitems = 0l; + points.itembytes = triangles.itembytes = shelles.itembytes = viri.itembytes = + badsegments.itembytes = badtriangles.itembytes = splaynodes.itembytes = 0; + recenttri.tri = (triangle *) NULL; /* No triangle has been visited yet. */ + samples = 1; /* Point location should take at least one sample. */ + checksegments = 0; /* There are no segments in the triangulation yet. */ + incirclecount = counterclockcount = hyperbolacount = 0; + circumcentercount = circletopcount = 0; + randomseed = 1; + + exactinit(); /* Initialize exact arithmetic constants. */ } /*****************************************************************************/ @@ -5059,11 +5085,11 @@ void triangleinit() /* */ /*****************************************************************************/ -unsigned long randomnation(choices) +unsigned long randomnation( choices ) unsigned int choices; { - randomseed = (randomseed * 1366l + 150889l) % 714025l; - return randomseed / (714025l / choices + 1); + randomseed = ( randomseed * 1366l + 150889l ) % 714025l; + return randomseed / ( 714025l / choices + 1 ); } /********* Mesh quality testing routines begin here *********/ @@ -5078,86 +5104,87 @@ unsigned int choices; #ifndef REDUCED -void checkmesh() -{ - struct triedge triangleloop; - struct triedge oppotri, oppooppotri; - point triorg, tridest, triapex; - point oppoorg, oppodest; - int horrors; - int saveexact; - triangle ptr; /* Temporary variable used by sym(). */ - - /* Temporarily turn on exact arithmetic if it's off. */ - saveexact = noexact; - noexact = 0; - if (!quiet) { - printf(" Checking consistency of mesh...\n"); - } - horrors = 0; - /* Run through the list of triangles, checking each one. */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - while (triangleloop.tri != (triangle *) NULL) { - /* Check all three edges of the triangle. */ - for (triangleloop.orient = 0; triangleloop.orient < 3; - triangleloop.orient++) { - org(triangleloop, triorg); - dest(triangleloop, tridest); - if (triangleloop.orient == 0) { /* Only test for inversion once. */ - /* Test if the triangle is flat or inverted. */ - apex(triangleloop, triapex); - if (counterclockwise(triorg, tridest, triapex) <= 0.0) { - printf(" !! !! Inverted "); - printtriangle(&triangleloop); - horrors++; - } - } - /* Find the neighboring triangle on this edge. */ - sym(triangleloop, oppotri); - if (oppotri.tri != dummytri) { - /* Check that the triangle's neighbor knows it's a neighbor. */ - sym(oppotri, oppooppotri); - if ((triangleloop.tri != oppooppotri.tri) - || (triangleloop.orient != oppooppotri.orient)) { - printf(" !! !! Asymmetric triangle-triangle bond:\n"); - if (triangleloop.tri == oppooppotri.tri) { - printf(" (Right triangle, wrong orientation)\n"); - } - printf(" First "); - printtriangle(&triangleloop); - printf(" Second (nonreciprocating) "); - printtriangle(&oppotri); - horrors++; - } - /* Check that both triangles agree on the identities */ - /* of their shared vertices. */ - org(oppotri, oppoorg); - dest(oppotri, oppodest); - if ((triorg != oppodest) || (tridest != oppoorg)) { - printf(" !! !! Mismatched edge coordinates between two triangles:\n" - ); - printf(" First mismatched "); - printtriangle(&triangleloop); - printf(" Second mismatched "); - printtriangle(&oppotri); - horrors++; - } - } - } - triangleloop.tri = triangletraverse(); - } - if (horrors == 0) { - if (!quiet) { - printf(" In my studied opinion, the mesh appears to be consistent.\n"); - } - } else if (horrors == 1) { - printf(" !! !! !! !! Precisely one festering wound discovered.\n"); - } else { - printf(" !! !! !! !! %d abominations witnessed.\n", horrors); - } - /* Restore the status of exact arithmetic. */ - noexact = saveexact; +void checkmesh(){ + struct triedge triangleloop; + struct triedge oppotri, oppooppotri; + point triorg, tridest, triapex; + point oppoorg, oppodest; + int horrors; + int saveexact; + triangle ptr; /* Temporary variable used by sym(). */ + + /* Temporarily turn on exact arithmetic if it's off. */ + saveexact = noexact; + noexact = 0; + if ( !quiet ) { + printf( " Checking consistency of mesh...\n" ); + } + horrors = 0; + /* Run through the list of triangles, checking each one. */ + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + while ( triangleloop.tri != (triangle *) NULL ) { + /* Check all three edges of the triangle. */ + for ( triangleloop.orient = 0; triangleloop.orient < 3; + triangleloop.orient++ ) { + org( triangleloop, triorg ); + dest( triangleloop, tridest ); + if ( triangleloop.orient == 0 ) { /* Only test for inversion once. */ + /* Test if the triangle is flat or inverted. */ + apex( triangleloop, triapex ); + if ( counterclockwise( triorg, tridest, triapex ) <= 0.0 ) { + printf( " !! !! Inverted " ); + printtriangle( &triangleloop ); + horrors++; + } + } + /* Find the neighboring triangle on this edge. */ + sym( triangleloop, oppotri ); + if ( oppotri.tri != dummytri ) { + /* Check that the triangle's neighbor knows it's a neighbor. */ + sym( oppotri, oppooppotri ); + if ( ( triangleloop.tri != oppooppotri.tri ) + || ( triangleloop.orient != oppooppotri.orient ) ) { + printf( " !! !! Asymmetric triangle-triangle bond:\n" ); + if ( triangleloop.tri == oppooppotri.tri ) { + printf( " (Right triangle, wrong orientation)\n" ); + } + printf( " First " ); + printtriangle( &triangleloop ); + printf( " Second (nonreciprocating) " ); + printtriangle( &oppotri ); + horrors++; + } + /* Check that both triangles agree on the identities */ + /* of their shared vertices. */ + org( oppotri, oppoorg ); + dest( oppotri, oppodest ); + if ( ( triorg != oppodest ) || ( tridest != oppoorg ) ) { + printf( " !! !! Mismatched edge coordinates between two triangles:\n" + ); + printf( " First mismatched " ); + printtriangle( &triangleloop ); + printf( " Second mismatched " ); + printtriangle( &oppotri ); + horrors++; + } + } + } + triangleloop.tri = triangletraverse(); + } + if ( horrors == 0 ) { + if ( !quiet ) { + printf( " In my studied opinion, the mesh appears to be consistent.\n" ); + } + } + else if ( horrors == 1 ) { + printf( " !! !! !! !! Precisely one festering wound discovered.\n" ); + } + else { + printf( " !! !! !! !! %d abominations witnessed.\n", horrors ); + } + /* Restore the status of exact arithmetic. */ + noexact = saveexact; } #endif /* not REDUCED */ @@ -5170,78 +5197,79 @@ void checkmesh() #ifndef REDUCED -void checkdelaunay() -{ - struct triedge triangleloop; - struct triedge oppotri; - struct edge opposhelle; - point triorg, tridest, triapex; - point oppoapex; - int shouldbedelaunay; - int horrors; - int saveexact; - triangle ptr; /* Temporary variable used by sym(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - /* Temporarily turn on exact arithmetic if it's off. */ - saveexact = noexact; - noexact = 0; - if (!quiet) { - printf(" Checking Delaunay property of mesh...\n"); - } - horrors = 0; - /* Run through the list of triangles, checking each one. */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - while (triangleloop.tri != (triangle *) NULL) { - /* Check all three edges of the triangle. */ - for (triangleloop.orient = 0; triangleloop.orient < 3; - triangleloop.orient++) { - org(triangleloop, triorg); - dest(triangleloop, tridest); - apex(triangleloop, triapex); - sym(triangleloop, oppotri); - apex(oppotri, oppoapex); - /* Only test that the edge is locally Delaunay if there is an */ - /* adjoining triangle whose pointer is larger (to ensure that */ - /* each pair isn't tested twice). */ - shouldbedelaunay = (oppotri.tri != dummytri) - && (triapex != (point) NULL) && (oppoapex != (point) NULL) - && (triangleloop.tri < oppotri.tri); - if (checksegments && shouldbedelaunay) { - /* If a shell edge separates the triangles, then the edge is */ - /* constrained, so no local Delaunay test should be done. */ - tspivot(triangleloop, opposhelle); - if (opposhelle.sh != dummysh){ - shouldbedelaunay = 0; - } - } - if (shouldbedelaunay) { - if (incircle(triorg, tridest, triapex, oppoapex) > 0.0) { - printf(" !! !! Non-Delaunay pair of triangles:\n"); - printf(" First non-Delaunay "); - printtriangle(&triangleloop); - printf(" Second non-Delaunay "); - printtriangle(&oppotri); - horrors++; - } - } - } - triangleloop.tri = triangletraverse(); - } - if (horrors == 0) { - if (!quiet) { - printf( - " By virtue of my perceptive intelligence, I declare the mesh Delaunay.\n"); - } - } else if (horrors == 1) { - printf( - " !! !! !! !! Precisely one terrifying transgression identified.\n"); - } else { - printf(" !! !! !! !! %d obscenities viewed with horror.\n", horrors); - } - /* Restore the status of exact arithmetic. */ - noexact = saveexact; +void checkdelaunay(){ + struct triedge triangleloop; + struct triedge oppotri; + struct edge opposhelle; + point triorg, tridest, triapex; + point oppoapex; + int shouldbedelaunay; + int horrors; + int saveexact; + triangle ptr; /* Temporary variable used by sym(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + /* Temporarily turn on exact arithmetic if it's off. */ + saveexact = noexact; + noexact = 0; + if ( !quiet ) { + printf( " Checking Delaunay property of mesh...\n" ); + } + horrors = 0; + /* Run through the list of triangles, checking each one. */ + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + while ( triangleloop.tri != (triangle *) NULL ) { + /* Check all three edges of the triangle. */ + for ( triangleloop.orient = 0; triangleloop.orient < 3; + triangleloop.orient++ ) { + org( triangleloop, triorg ); + dest( triangleloop, tridest ); + apex( triangleloop, triapex ); + sym( triangleloop, oppotri ); + apex( oppotri, oppoapex ); + /* Only test that the edge is locally Delaunay if there is an */ + /* adjoining triangle whose pointer is larger (to ensure that */ + /* each pair isn't tested twice). */ + shouldbedelaunay = ( oppotri.tri != dummytri ) + && ( triapex != (point) NULL ) && ( oppoapex != (point) NULL ) + && ( triangleloop.tri < oppotri.tri ); + if ( checksegments && shouldbedelaunay ) { + /* If a shell edge separates the triangles, then the edge is */ + /* constrained, so no local Delaunay test should be done. */ + tspivot( triangleloop, opposhelle ); + if ( opposhelle.sh != dummysh ) { + shouldbedelaunay = 0; + } + } + if ( shouldbedelaunay ) { + if ( incircle( triorg, tridest, triapex, oppoapex ) > 0.0 ) { + printf( " !! !! Non-Delaunay pair of triangles:\n" ); + printf( " First non-Delaunay " ); + printtriangle( &triangleloop ); + printf( " Second non-Delaunay " ); + printtriangle( &oppotri ); + horrors++; + } + } + } + triangleloop.tri = triangletraverse(); + } + if ( horrors == 0 ) { + if ( !quiet ) { + printf( + " By virtue of my perceptive intelligence, I declare the mesh Delaunay.\n" ); + } + } + else if ( horrors == 1 ) { + printf( + " !! !! !! !! Precisely one terrifying transgression identified.\n" ); + } + else { + printf( " !! !! !! !! %d obscenities viewed with horror.\n", horrors ); + } + /* Restore the status of exact arithmetic. */ + noexact = saveexact; } #endif /* not REDUCED */ @@ -5258,43 +5286,44 @@ void checkdelaunay() #ifndef CDT_ONLY -void enqueuebadtri(instri, angle, insapex, insorg, insdest) +void enqueuebadtri( instri, angle, insapex, insorg, insdest ) struct triedge *instri; REAL angle; point insapex; point insorg; point insdest; { - struct badface *newface; - int queuenumber; - - if (verbose > 2) { - printf(" Queueing bad triangle:\n"); - printf(" (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", insorg[0], - insorg[1], insdest[0], insdest[1], insapex[0], insapex[1]); - } - /* Allocate space for the bad triangle. */ - newface = (struct badface *) poolalloc(&badtriangles); - triedgecopy(*instri, newface->badfacetri); - newface->key = angle; - newface->faceapex = insapex; - newface->faceorg = insorg; - newface->facedest = insdest; - newface->nextface = (struct badface *) NULL; - /* Determine the appropriate queue to put the bad triangle into. */ - if (angle > 0.6) { - queuenumber = (int) (160.0 * (angle - 0.6)); - if (queuenumber > 63) { - queuenumber = 63; - } - } else { - /* It's not a bad angle; put the triangle in the lowest-priority queue. */ - queuenumber = 0; - } - /* Add the triangle to the end of a queue. */ - *queuetail[queuenumber] = newface; - /* Maintain a pointer to the NULL pointer at the end of the queue. */ - queuetail[queuenumber] = &newface->nextface; + struct badface *newface; + int queuenumber; + + if ( verbose > 2 ) { + printf( " Queueing bad triangle:\n" ); + printf( " (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", insorg[0], + insorg[1], insdest[0], insdest[1], insapex[0], insapex[1] ); + } + /* Allocate space for the bad triangle. */ + newface = (struct badface *) poolalloc( &badtriangles ); + triedgecopy( *instri, newface->badfacetri ); + newface->key = angle; + newface->faceapex = insapex; + newface->faceorg = insorg; + newface->facedest = insdest; + newface->nextface = (struct badface *) NULL; + /* Determine the appropriate queue to put the bad triangle into. */ + if ( angle > 0.6 ) { + queuenumber = (int) ( 160.0 * ( angle - 0.6 ) ); + if ( queuenumber > 63 ) { + queuenumber = 63; + } + } + else { + /* It's not a bad angle; put the triangle in the lowest-priority queue. */ + queuenumber = 0; + } + /* Add the triangle to the end of a queue. */ + *queuetail[queuenumber] = newface; + /* Maintain a pointer to the NULL pointer at the end of the queue. */ + queuetail[queuenumber] = &newface->nextface; } #endif /* not CDT_ONLY */ @@ -5307,25 +5336,24 @@ point insdest; #ifndef CDT_ONLY -struct badface *dequeuebadtri() -{ - struct badface *result; - int queuenumber; - - /* Look for a nonempty queue. */ - for (queuenumber = 63; queuenumber >= 0; queuenumber--) { - result = queuefront[queuenumber]; - if (result != (struct badface *) NULL) { - /* Remove the triangle from the queue. */ - queuefront[queuenumber] = result->nextface; - /* Maintain a pointer to the NULL pointer at the end of the queue. */ - if (queuefront[queuenumber] == (struct badface *) NULL) { - queuetail[queuenumber] = &queuefront[queuenumber]; - } - return result; - } - } - return (struct badface *) NULL; +struct badface *dequeuebadtri(){ + struct badface *result; + int queuenumber; + + /* Look for a nonempty queue. */ + for ( queuenumber = 63; queuenumber >= 0; queuenumber-- ) { + result = queuefront[queuenumber]; + if ( result != (struct badface *) NULL ) { + /* Remove the triangle from the queue. */ + queuefront[queuenumber] = result->nextface; + /* Maintain a pointer to the NULL pointer at the end of the queue. */ + if ( queuefront[queuenumber] == (struct badface *) NULL ) { + queuetail[queuenumber] = &queuefront[queuenumber]; + } + return result; + } + } + return (struct badface *) NULL; } #endif /* not CDT_ONLY */ @@ -5345,72 +5373,73 @@ struct badface *dequeuebadtri() #ifndef CDT_ONLY -int checkedge4encroach(testedge) +int checkedge4encroach( testedge ) struct edge *testedge; { - struct triedge neighbortri; - struct edge testsym; - struct edge *badedge; - int addtolist; - int sides; - point eorg, edest, eapex; - triangle ptr; /* Temporary variable used by stpivot(). */ - - addtolist = 0; - sides = 0; - - sorg(*testedge, eorg); - sdest(*testedge, edest); - /* Check one neighbor of the shell edge. */ - stpivot(*testedge, neighbortri); - /* Does the neighbor exist, or is this a boundary edge? */ - if (neighbortri.tri != dummytri) { - sides++; - /* Find a vertex opposite this edge. */ - apex(neighbortri, eapex); - /* Check whether the vertex is inside the diametral circle of the */ - /* shell edge. Pythagoras' Theorem is used to check whether the */ - /* angle at the vertex is greater than 90 degrees. */ - if (eapex[0] * (eorg[0] + edest[0]) + eapex[1] * (eorg[1] + edest[1]) > - eapex[0] * eapex[0] + eorg[0] * edest[0] + - eapex[1] * eapex[1] + eorg[1] * edest[1]) { - addtolist = 1; - } - } - /* Check the other neighbor of the shell edge. */ - ssym(*testedge, testsym); - stpivot(testsym, neighbortri); - /* Does the neighbor exist, or is this a boundary edge? */ - if (neighbortri.tri != dummytri) { - sides++; - /* Find the other vertex opposite this edge. */ - apex(neighbortri, eapex); - /* Check whether the vertex is inside the diametral circle of the */ - /* shell edge. Pythagoras' Theorem is used to check whether the */ - /* angle at the vertex is greater than 90 degrees. */ - if (eapex[0] * (eorg[0] + edest[0]) + - eapex[1] * (eorg[1] + edest[1]) > - eapex[0] * eapex[0] + eorg[0] * edest[0] + - eapex[1] * eapex[1] + eorg[1] * edest[1]) { - addtolist += 2; - } - } - - if (addtolist && (!nobisect || ((nobisect == 1) && (sides == 2)))) { - if (verbose > 2) { - printf(" Queueing encroached segment (%.12g, %.12g) (%.12g, %.12g).\n", - eorg[0], eorg[1], edest[0], edest[1]); - } - /* Add the shell edge to the list of encroached segments. */ - /* Be sure to get the orientation right. */ - badedge = (struct edge *) poolalloc(&badsegments); - if (addtolist == 1) { - shellecopy(*testedge, *badedge); - } else { - shellecopy(testsym, *badedge); - } - } - return addtolist; + struct triedge neighbortri; + struct edge testsym; + struct edge *badedge; + int addtolist; + int sides; + point eorg, edest, eapex; + triangle ptr; /* Temporary variable used by stpivot(). */ + + addtolist = 0; + sides = 0; + + sorg( *testedge, eorg ); + sdest( *testedge, edest ); + /* Check one neighbor of the shell edge. */ + stpivot( *testedge, neighbortri ); + /* Does the neighbor exist, or is this a boundary edge? */ + if ( neighbortri.tri != dummytri ) { + sides++; + /* Find a vertex opposite this edge. */ + apex( neighbortri, eapex ); + /* Check whether the vertex is inside the diametral circle of the */ + /* shell edge. Pythagoras' Theorem is used to check whether the */ + /* angle at the vertex is greater than 90 degrees. */ + if ( eapex[0] * ( eorg[0] + edest[0] ) + eapex[1] * ( eorg[1] + edest[1] ) > + eapex[0] * eapex[0] + eorg[0] * edest[0] + + eapex[1] * eapex[1] + eorg[1] * edest[1] ) { + addtolist = 1; + } + } + /* Check the other neighbor of the shell edge. */ + ssym( *testedge, testsym ); + stpivot( testsym, neighbortri ); + /* Does the neighbor exist, or is this a boundary edge? */ + if ( neighbortri.tri != dummytri ) { + sides++; + /* Find the other vertex opposite this edge. */ + apex( neighbortri, eapex ); + /* Check whether the vertex is inside the diametral circle of the */ + /* shell edge. Pythagoras' Theorem is used to check whether the */ + /* angle at the vertex is greater than 90 degrees. */ + if ( eapex[0] * ( eorg[0] + edest[0] ) + + eapex[1] * ( eorg[1] + edest[1] ) > + eapex[0] * eapex[0] + eorg[0] * edest[0] + + eapex[1] * eapex[1] + eorg[1] * edest[1] ) { + addtolist += 2; + } + } + + if ( addtolist && ( !nobisect || ( ( nobisect == 1 ) && ( sides == 2 ) ) ) ) { + if ( verbose > 2 ) { + printf( " Queueing encroached segment (%.12g, %.12g) (%.12g, %.12g).\n", + eorg[0], eorg[1], edest[0], edest[1] ); + } + /* Add the shell edge to the list of encroached segments. */ + /* Be sure to get the orientation right. */ + badedge = (struct edge *) poolalloc( &badsegments ); + if ( addtolist == 1 ) { + shellecopy( *testedge, *badedge ); + } + else { + shellecopy( testsym, *badedge ); + } + } + return addtolist; } #endif /* not CDT_ONLY */ @@ -5427,107 +5456,110 @@ struct edge *testedge; #ifndef CDT_ONLY -void testtriangle(testtri) +void testtriangle( testtri ) struct triedge *testtri; { - struct triedge sametesttri; - struct edge edge1, edge2; - point torg, tdest, tapex; - point anglevertex; - REAL dxod, dyod, dxda, dyda, dxao, dyao; - REAL dxod2, dyod2, dxda2, dyda2, dxao2, dyao2; - REAL apexlen, orglen, destlen; - REAL angle; - REAL area; - shelle sptr; /* Temporary variable used by tspivot(). */ - - org(*testtri, torg); - dest(*testtri, tdest); - apex(*testtri, tapex); - dxod = torg[0] - tdest[0]; - dyod = torg[1] - tdest[1]; - dxda = tdest[0] - tapex[0]; - dyda = tdest[1] - tapex[1]; - dxao = tapex[0] - torg[0]; - dyao = tapex[1] - torg[1]; - dxod2 = dxod * dxod; - dyod2 = dyod * dyod; - dxda2 = dxda * dxda; - dyda2 = dyda * dyda; - dxao2 = dxao * dxao; - dyao2 = dyao * dyao; - /* Find the lengths of the triangle's three edges. */ - apexlen = dxod2 + dyod2; - orglen = dxda2 + dyda2; - destlen = dxao2 + dyao2; - if ((apexlen < orglen) && (apexlen < destlen)) { - /* The edge opposite the apex is shortest. */ - /* Find the square of the cosine of the angle at the apex. */ - angle = dxda * dxao + dyda * dyao; - angle = angle * angle / (orglen * destlen); - anglevertex = tapex; - lnext(*testtri, sametesttri); - tspivot(sametesttri, edge1); - lnextself(sametesttri); - tspivot(sametesttri, edge2); - } else if (orglen < destlen) { - /* The edge opposite the origin is shortest. */ - /* Find the square of the cosine of the angle at the origin. */ - angle = dxod * dxao + dyod * dyao; - angle = angle * angle / (apexlen * destlen); - anglevertex = torg; - tspivot(*testtri, edge1); - lprev(*testtri, sametesttri); - tspivot(sametesttri, edge2); - } else { - /* The edge opposite the destination is shortest. */ - /* Find the square of the cosine of the angle at the destination. */ - angle = dxod * dxda + dyod * dyda; - angle = angle * angle / (apexlen * orglen); - anglevertex = tdest; - tspivot(*testtri, edge1); - lnext(*testtri, sametesttri); - tspivot(sametesttri, edge2); - } - /* Check if both edges that form the angle are segments. */ - if ((edge1.sh != dummysh) && (edge2.sh != dummysh)) { - /* The angle is a segment intersection. */ - if ((angle > 0.9924) && !quiet) { /* Roughly 5 degrees. */ - if (angle > 1.0) { - /* Beware of a floating exception in acos(). */ - angle = 1.0; - } - /* Find the actual angle in degrees, for printing. */ - angle = acos(sqrt(angle)) * (180.0 / PI); - printf( - "Warning: Small angle (%.4g degrees) between segments at point\n", - angle); - printf(" (%.12g, %.12g)\n", anglevertex[0], anglevertex[1]); - } - /* Don't add this bad triangle to the list; there's nothing that */ - /* can be done about a small angle between two segments. */ - angle = 0.0; - } - /* Check whether the angle is smaller than permitted. */ - if (angle > goodangle) { - /* Add this triangle to the list of bad triangles. */ - enqueuebadtri(testtri, angle, tapex, torg, tdest); - return; - } - if (vararea || fixedarea) { - /* Check whether the area is larger than permitted. */ - area = 0.5 * (dxod * dyda - dyod * dxda); - if (fixedarea && (area > maxarea)) { - /* Add this triangle to the list of bad triangles. */ - enqueuebadtri(testtri, angle, tapex, torg, tdest); - } else if (vararea) { - /* Nonpositive area constraints are treated as unconstrained. */ - if ((area > areabound(*testtri)) && (areabound(*testtri) > 0.0)) { - /* Add this triangle to the list of bad triangles. */ - enqueuebadtri(testtri, angle, tapex, torg, tdest); - } - } - } + struct triedge sametesttri; + struct edge edge1, edge2; + point torg, tdest, tapex; + point anglevertex; + REAL dxod, dyod, dxda, dyda, dxao, dyao; + REAL dxod2, dyod2, dxda2, dyda2, dxao2, dyao2; + REAL apexlen, orglen, destlen; + REAL angle; + REAL area; + shelle sptr; /* Temporary variable used by tspivot(). */ + + org( *testtri, torg ); + dest( *testtri, tdest ); + apex( *testtri, tapex ); + dxod = torg[0] - tdest[0]; + dyod = torg[1] - tdest[1]; + dxda = tdest[0] - tapex[0]; + dyda = tdest[1] - tapex[1]; + dxao = tapex[0] - torg[0]; + dyao = tapex[1] - torg[1]; + dxod2 = dxod * dxod; + dyod2 = dyod * dyod; + dxda2 = dxda * dxda; + dyda2 = dyda * dyda; + dxao2 = dxao * dxao; + dyao2 = dyao * dyao; + /* Find the lengths of the triangle's three edges. */ + apexlen = dxod2 + dyod2; + orglen = dxda2 + dyda2; + destlen = dxao2 + dyao2; + if ( ( apexlen < orglen ) && ( apexlen < destlen ) ) { + /* The edge opposite the apex is shortest. */ + /* Find the square of the cosine of the angle at the apex. */ + angle = dxda * dxao + dyda * dyao; + angle = angle * angle / ( orglen * destlen ); + anglevertex = tapex; + lnext( *testtri, sametesttri ); + tspivot( sametesttri, edge1 ); + lnextself( sametesttri ); + tspivot( sametesttri, edge2 ); + } + else if ( orglen < destlen ) { + /* The edge opposite the origin is shortest. */ + /* Find the square of the cosine of the angle at the origin. */ + angle = dxod * dxao + dyod * dyao; + angle = angle * angle / ( apexlen * destlen ); + anglevertex = torg; + tspivot( *testtri, edge1 ); + lprev( *testtri, sametesttri ); + tspivot( sametesttri, edge2 ); + } + else { + /* The edge opposite the destination is shortest. */ + /* Find the square of the cosine of the angle at the destination. */ + angle = dxod * dxda + dyod * dyda; + angle = angle * angle / ( apexlen * orglen ); + anglevertex = tdest; + tspivot( *testtri, edge1 ); + lnext( *testtri, sametesttri ); + tspivot( sametesttri, edge2 ); + } + /* Check if both edges that form the angle are segments. */ + if ( ( edge1.sh != dummysh ) && ( edge2.sh != dummysh ) ) { + /* The angle is a segment intersection. */ + if ( ( angle > 0.9924 ) && !quiet ) { /* Roughly 5 degrees. */ + if ( angle > 1.0 ) { + /* Beware of a floating exception in acos(). */ + angle = 1.0; + } + /* Find the actual angle in degrees, for printing. */ + angle = acos( sqrt( angle ) ) * ( 180.0 / PI ); + printf( + "Warning: Small angle (%.4g degrees) between segments at point\n", + angle ); + printf( " (%.12g, %.12g)\n", anglevertex[0], anglevertex[1] ); + } + /* Don't add this bad triangle to the list; there's nothing that */ + /* can be done about a small angle between two segments. */ + angle = 0.0; + } + /* Check whether the angle is smaller than permitted. */ + if ( angle > goodangle ) { + /* Add this triangle to the list of bad triangles. */ + enqueuebadtri( testtri, angle, tapex, torg, tdest ); + return; + } + if ( vararea || fixedarea ) { + /* Check whether the area is larger than permitted. */ + area = 0.5 * ( dxod * dyda - dyod * dxda ); + if ( fixedarea && ( area > maxarea ) ) { + /* Add this triangle to the list of bad triangles. */ + enqueuebadtri( testtri, angle, tapex, torg, tdest ); + } + else if ( vararea ) { + /* Nonpositive area constraints are treated as unconstrained. */ + if ( ( area > areabound( *testtri ) ) && ( areabound( *testtri ) > 0.0 ) ) { + /* Add this triangle to the list of bad triangles. */ + enqueuebadtri( testtri, angle, tapex, torg, tdest ); + } + } + } } #endif /* not CDT_ONLY */ @@ -5553,25 +5585,24 @@ struct triedge *testtri; /* */ /*****************************************************************************/ -void makepointmap() -{ - struct triedge triangleloop; - point triorg; - - if (verbose) { - printf(" Constructing mapping from points to triangles.\n"); - } - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - while (triangleloop.tri != (triangle *) NULL) { - /* Check all three points of the triangle. */ - for (triangleloop.orient = 0; triangleloop.orient < 3; - triangleloop.orient++) { - org(triangleloop, triorg); - setpoint2tri(triorg, encode(triangleloop)); - } - triangleloop.tri = triangletraverse(); - } +void makepointmap(){ + struct triedge triangleloop; + point triorg; + + if ( verbose ) { + printf( " Constructing mapping from points to triangles.\n" ); + } + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + while ( triangleloop.tri != (triangle *) NULL ) { + /* Check all three points of the triangle. */ + for ( triangleloop.orient = 0; triangleloop.orient < 3; + triangleloop.orient++ ) { + org( triangleloop, triorg ); + setpoint2tri( triorg, encode( triangleloop ) ); + } + triangleloop.tri = triangletraverse(); + } } /*****************************************************************************/ @@ -5638,102 +5669,107 @@ void makepointmap() /* */ /*****************************************************************************/ -enum locateresult preciselocate(searchpoint, searchtri) +enum locateresult preciselocate( searchpoint, searchtri ) point searchpoint; struct triedge *searchtri; { - struct triedge backtracktri; - point forg, fdest, fapex; - point swappoint; - REAL orgorient, destorient; - int moveleft; - triangle ptr; /* Temporary variable used by sym(). */ - - if (verbose > 2) { - printf(" Searching for point (%.12g, %.12g).\n", - searchpoint[0], searchpoint[1]); - } - /* Where are we? */ - org(*searchtri, forg); - dest(*searchtri, fdest); - apex(*searchtri, fapex); - while (1) { - if (verbose > 2) { - printf(" At (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", - forg[0], forg[1], fdest[0], fdest[1], fapex[0], fapex[1]); - } - /* Check whether the apex is the point we seek. */ - if ((fapex[0] == searchpoint[0]) && (fapex[1] == searchpoint[1])) { - lprevself(*searchtri); - return ONVERTEX; - } - /* Does the point lie on the other side of the line defined by the */ - /* triangle edge opposite the triangle's destination? */ - destorient = counterclockwise(forg, fapex, searchpoint); - /* Does the point lie on the other side of the line defined by the */ - /* triangle edge opposite the triangle's origin? */ - orgorient = counterclockwise(fapex, fdest, searchpoint); - if (destorient > 0.0) { - if (orgorient > 0.0) { - /* Move left if the inner product of (fapex - searchpoint) and */ - /* (fdest - forg) is positive. This is equivalent to drawing */ - /* a line perpendicular to the line (forg, fdest) passing */ - /* through `fapex', and determining which side of this line */ - /* `searchpoint' falls on. */ - moveleft = (fapex[0] - searchpoint[0]) * (fdest[0] - forg[0]) + - (fapex[1] - searchpoint[1]) * (fdest[1] - forg[1]) > 0.0; - } else { - moveleft = 1; - } - } else { - if (orgorient > 0.0) { - moveleft = 0; - } else { - /* The point we seek must be on the boundary of or inside this */ - /* triangle. */ - if (destorient == 0.0) { - lprevself(*searchtri); - return ONEDGE; - } - if (orgorient == 0.0) { - lnextself(*searchtri); - return ONEDGE; - } - return INTRIANGLE; - } - } - - /* Move to another triangle. Leave a trace `backtracktri' in case */ - /* floating-point roundoff or some such bogey causes us to walk */ - /* off a boundary of the triangulation. We can just bounce off */ - /* the boundary as if it were an elastic band. */ - if (moveleft) { - lprev(*searchtri, backtracktri); - fdest = fapex; - } else { - lnext(*searchtri, backtracktri); - forg = fapex; - } - sym(backtracktri, *searchtri); - - /* Check for walking off the edge. */ - if (searchtri->tri == dummytri) { - /* Turn around. */ - triedgecopy(backtracktri, *searchtri); - swappoint = forg; - forg = fdest; - fdest = swappoint; - apex(*searchtri, fapex); - /* Check if the point really is beyond the triangulation boundary. */ - destorient = counterclockwise(forg, fapex, searchpoint); - orgorient = counterclockwise(fapex, fdest, searchpoint); - if ((orgorient < 0.0) && (destorient < 0.0)) { - return OUTSIDE; - } - } else { - apex(*searchtri, fapex); - } - } + struct triedge backtracktri; + point forg, fdest, fapex; + point swappoint; + REAL orgorient, destorient; + int moveleft; + triangle ptr; /* Temporary variable used by sym(). */ + + if ( verbose > 2 ) { + printf( " Searching for point (%.12g, %.12g).\n", + searchpoint[0], searchpoint[1] ); + } + /* Where are we? */ + org( *searchtri, forg ); + dest( *searchtri, fdest ); + apex( *searchtri, fapex ); + while ( 1 ) { + if ( verbose > 2 ) { + printf( " At (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", + forg[0], forg[1], fdest[0], fdest[1], fapex[0], fapex[1] ); + } + /* Check whether the apex is the point we seek. */ + if ( ( fapex[0] == searchpoint[0] ) && ( fapex[1] == searchpoint[1] ) ) { + lprevself( *searchtri ); + return ONVERTEX; + } + /* Does the point lie on the other side of the line defined by the */ + /* triangle edge opposite the triangle's destination? */ + destorient = counterclockwise( forg, fapex, searchpoint ); + /* Does the point lie on the other side of the line defined by the */ + /* triangle edge opposite the triangle's origin? */ + orgorient = counterclockwise( fapex, fdest, searchpoint ); + if ( destorient > 0.0 ) { + if ( orgorient > 0.0 ) { + /* Move left if the inner product of (fapex - searchpoint) and */ + /* (fdest - forg) is positive. This is equivalent to drawing */ + /* a line perpendicular to the line (forg, fdest) passing */ + /* through `fapex', and determining which side of this line */ + /* `searchpoint' falls on. */ + moveleft = ( fapex[0] - searchpoint[0] ) * ( fdest[0] - forg[0] ) + + ( fapex[1] - searchpoint[1] ) * ( fdest[1] - forg[1] ) > 0.0; + } + else { + moveleft = 1; + } + } + else { + if ( orgorient > 0.0 ) { + moveleft = 0; + } + else { + /* The point we seek must be on the boundary of or inside this */ + /* triangle. */ + if ( destorient == 0.0 ) { + lprevself( *searchtri ); + return ONEDGE; + } + if ( orgorient == 0.0 ) { + lnextself( *searchtri ); + return ONEDGE; + } + return INTRIANGLE; + } + } + + /* Move to another triangle. Leave a trace `backtracktri' in case */ + /* floating-point roundoff or some such bogey causes us to walk */ + /* off a boundary of the triangulation. We can just bounce off */ + /* the boundary as if it were an elastic band. */ + if ( moveleft ) { + lprev( *searchtri, backtracktri ); + fdest = fapex; + } + else { + lnext( *searchtri, backtracktri ); + forg = fapex; + } + sym( backtracktri, *searchtri ); + + /* Check for walking off the edge. */ + if ( searchtri->tri == dummytri ) { + /* Turn around. */ + triedgecopy( backtracktri, *searchtri ); + swappoint = forg; + forg = fdest; + fdest = swappoint; + apex( *searchtri, fapex ); + /* Check if the point really is beyond the triangulation boundary. */ + destorient = counterclockwise( forg, fapex, searchpoint ); + orgorient = counterclockwise( fapex, fdest, searchpoint ); + if ( ( orgorient < 0.0 ) && ( destorient < 0.0 ) ) { + return OUTSIDE; + } + } + else { + apex( *searchtri, fapex ); + } + } } /*****************************************************************************/ @@ -5772,123 +5808,125 @@ struct triedge *searchtri; /* */ /*****************************************************************************/ -enum locateresult locate(searchpoint, searchtri) +enum locateresult locate( searchpoint, searchtri ) point searchpoint; struct triedge *searchtri; { - VOID **sampleblock; - triangle *firsttri; - struct triedge sampletri; - point torg, tdest; - unsigned long alignptr; - REAL searchdist, dist; - REAL ahead; - long sampleblocks, samplesperblock, samplenum; - long triblocks; - long i, j; - triangle ptr; /* Temporary variable used by sym(). */ - - if (verbose > 2) { - printf(" Randomly sampling for a triangle near point (%.12g, %.12g).\n", - searchpoint[0], searchpoint[1]); - } - /* Record the distance from the suggested starting triangle to the */ - /* point we seek. */ - org(*searchtri, torg); - searchdist = (searchpoint[0] - torg[0]) * (searchpoint[0] - torg[0]) - + (searchpoint[1] - torg[1]) * (searchpoint[1] - torg[1]); - if (verbose > 2) { - printf(" Boundary triangle has origin (%.12g, %.12g).\n", - torg[0], torg[1]); - } - - /* If a recently encountered triangle has been recorded and has not been */ - /* deallocated, test it as a good starting point. */ - if (recenttri.tri != (triangle *) NULL) { - if (recenttri.tri[3] != (triangle) NULL) { - org(recenttri, torg); - if ((torg[0] == searchpoint[0]) && (torg[1] == searchpoint[1])) { - triedgecopy(recenttri, *searchtri); - return ONVERTEX; - } - dist = (searchpoint[0] - torg[0]) * (searchpoint[0] - torg[0]) - + (searchpoint[1] - torg[1]) * (searchpoint[1] - torg[1]); - if (dist < searchdist) { - triedgecopy(recenttri, *searchtri); - searchdist = dist; - if (verbose > 2) { - printf(" Choosing recent triangle with origin (%.12g, %.12g).\n", - torg[0], torg[1]); - } - } - } - } - - /* The number of random samples taken is proportional to the cube root of */ - /* the number of triangles in the mesh. The next bit of code assumes */ - /* that the number of triangles increases monotonically. */ - while (SAMPLEFACTOR * samples * samples * samples < triangles.items) { - samples++; - } - triblocks = (triangles.maxitems + TRIPERBLOCK - 1) / TRIPERBLOCK; - samplesperblock = 1 + (samples / triblocks); - sampleblocks = samples / samplesperblock; - sampleblock = triangles.firstblock; - sampletri.orient = 0; - for (i = 0; i < sampleblocks; i++) { - alignptr = (unsigned long) (sampleblock + 1); - firsttri = (triangle *) (alignptr + (unsigned long) triangles.alignbytes - - (alignptr % (unsigned long) triangles.alignbytes)); - for (j = 0; j < samplesperblock; j++) { - if (i == triblocks - 1) { - samplenum = randomnation((int) - (triangles.maxitems - (i * TRIPERBLOCK))); - } else { - samplenum = randomnation(TRIPERBLOCK); - } - sampletri.tri = (triangle *) - (firsttri + (samplenum * triangles.itemwords)); - if (sampletri.tri[3] != (triangle) NULL) { - org(sampletri, torg); - dist = (searchpoint[0] - torg[0]) * (searchpoint[0] - torg[0]) - + (searchpoint[1] - torg[1]) * (searchpoint[1] - torg[1]); - if (dist < searchdist) { - triedgecopy(sampletri, *searchtri); - searchdist = dist; - if (verbose > 2) { - printf(" Choosing triangle with origin (%.12g, %.12g).\n", - torg[0], torg[1]); - } - } - } - } - sampleblock = (VOID **) *sampleblock; - } - /* Where are we? */ - org(*searchtri, torg); - dest(*searchtri, tdest); - /* Check the starting triangle's vertices. */ - if ((torg[0] == searchpoint[0]) && (torg[1] == searchpoint[1])) { - return ONVERTEX; - } - if ((tdest[0] == searchpoint[0]) && (tdest[1] == searchpoint[1])) { - lnextself(*searchtri); - return ONVERTEX; - } - /* Orient `searchtri' to fit the preconditions of calling preciselocate(). */ - ahead = counterclockwise(torg, tdest, searchpoint); - if (ahead < 0.0) { - /* Turn around so that `searchpoint' is to the left of the */ - /* edge specified by `searchtri'. */ - symself(*searchtri); - } else if (ahead == 0.0) { - /* Check if `searchpoint' is between `torg' and `tdest'. */ - if (((torg[0] < searchpoint[0]) == (searchpoint[0] < tdest[0])) - && ((torg[1] < searchpoint[1]) == (searchpoint[1] < tdest[1]))) { - return ONEDGE; - } - } - return preciselocate(searchpoint, searchtri); + VOID **sampleblock; + triangle *firsttri; + struct triedge sampletri; + point torg, tdest; + unsigned long alignptr; + REAL searchdist, dist; + REAL ahead; + long sampleblocks, samplesperblock, samplenum; + long triblocks; + long i, j; + triangle ptr; /* Temporary variable used by sym(). */ + + if ( verbose > 2 ) { + printf( " Randomly sampling for a triangle near point (%.12g, %.12g).\n", + searchpoint[0], searchpoint[1] ); + } + /* Record the distance from the suggested starting triangle to the */ + /* point we seek. */ + org( *searchtri, torg ); + searchdist = ( searchpoint[0] - torg[0] ) * ( searchpoint[0] - torg[0] ) + + ( searchpoint[1] - torg[1] ) * ( searchpoint[1] - torg[1] ); + if ( verbose > 2 ) { + printf( " Boundary triangle has origin (%.12g, %.12g).\n", + torg[0], torg[1] ); + } + + /* If a recently encountered triangle has been recorded and has not been */ + /* deallocated, test it as a good starting point. */ + if ( recenttri.tri != (triangle *) NULL ) { + if ( recenttri.tri[3] != (triangle) NULL ) { + org( recenttri, torg ); + if ( ( torg[0] == searchpoint[0] ) && ( torg[1] == searchpoint[1] ) ) { + triedgecopy( recenttri, *searchtri ); + return ONVERTEX; + } + dist = ( searchpoint[0] - torg[0] ) * ( searchpoint[0] - torg[0] ) + + ( searchpoint[1] - torg[1] ) * ( searchpoint[1] - torg[1] ); + if ( dist < searchdist ) { + triedgecopy( recenttri, *searchtri ); + searchdist = dist; + if ( verbose > 2 ) { + printf( " Choosing recent triangle with origin (%.12g, %.12g).\n", + torg[0], torg[1] ); + } + } + } + } + + /* The number of random samples taken is proportional to the cube root of */ + /* the number of triangles in the mesh. The next bit of code assumes */ + /* that the number of triangles increases monotonically. */ + while ( SAMPLEFACTOR * samples * samples * samples < triangles.items ) { + samples++; + } + triblocks = ( triangles.maxitems + TRIPERBLOCK - 1 ) / TRIPERBLOCK; + samplesperblock = 1 + ( samples / triblocks ); + sampleblocks = samples / samplesperblock; + sampleblock = triangles.firstblock; + sampletri.orient = 0; + for ( i = 0; i < sampleblocks; i++ ) { + alignptr = (unsigned long) ( sampleblock + 1 ); + firsttri = (triangle *) ( alignptr + (unsigned long) triangles.alignbytes + - ( alignptr % (unsigned long) triangles.alignbytes ) ); + for ( j = 0; j < samplesperblock; j++ ) { + if ( i == triblocks - 1 ) { + samplenum = randomnation( (int) + ( triangles.maxitems - ( i * TRIPERBLOCK ) ) ); + } + else { + samplenum = randomnation( TRIPERBLOCK ); + } + sampletri.tri = (triangle *) + ( firsttri + ( samplenum * triangles.itemwords ) ); + if ( sampletri.tri[3] != (triangle) NULL ) { + org( sampletri, torg ); + dist = ( searchpoint[0] - torg[0] ) * ( searchpoint[0] - torg[0] ) + + ( searchpoint[1] - torg[1] ) * ( searchpoint[1] - torg[1] ); + if ( dist < searchdist ) { + triedgecopy( sampletri, *searchtri ); + searchdist = dist; + if ( verbose > 2 ) { + printf( " Choosing triangle with origin (%.12g, %.12g).\n", + torg[0], torg[1] ); + } + } + } + } + sampleblock = (VOID **) *sampleblock; + } + /* Where are we? */ + org( *searchtri, torg ); + dest( *searchtri, tdest ); + /* Check the starting triangle's vertices. */ + if ( ( torg[0] == searchpoint[0] ) && ( torg[1] == searchpoint[1] ) ) { + return ONVERTEX; + } + if ( ( tdest[0] == searchpoint[0] ) && ( tdest[1] == searchpoint[1] ) ) { + lnextself( *searchtri ); + return ONVERTEX; + } + /* Orient `searchtri' to fit the preconditions of calling preciselocate(). */ + ahead = counterclockwise( torg, tdest, searchpoint ); + if ( ahead < 0.0 ) { + /* Turn around so that `searchpoint' is to the left of the */ + /* edge specified by `searchtri'. */ + symself( *searchtri ); + } + else if ( ahead == 0.0 ) { + /* Check if `searchpoint' is between `torg' and `tdest'. */ + if ( ( ( torg[0] < searchpoint[0] ) == ( searchpoint[0] < tdest[0] ) ) + && ( ( torg[1] < searchpoint[1] ) == ( searchpoint[1] < tdest[1] ) ) ) { + return ONEDGE; + } + } + return preciselocate( searchpoint, searchtri ); } /** **/ @@ -5910,50 +5948,51 @@ struct triedge *searchtri; /* */ /*****************************************************************************/ -void insertshelle(tri, shellemark) +void insertshelle( tri, shellemark ) struct triedge *tri; /* Edge at which to insert the new shell edge. */ int shellemark; /* Marker for the new shell edge. */ { - struct triedge oppotri; - struct edge newshelle; - point triorg, tridest; - triangle ptr; /* Temporary variable used by sym(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - /* Mark points if possible. */ - org(*tri, triorg); - dest(*tri, tridest); - if (pointmark(triorg) == 0) { - setpointmark(triorg, shellemark); - } - if (pointmark(tridest) == 0) { - setpointmark(tridest, shellemark); - } - /* Check if there's already a shell edge here. */ - tspivot(*tri, newshelle); - if (newshelle.sh == dummysh) { - /* Make new shell edge and initialize its vertices. */ - makeshelle(&newshelle); - setsorg(newshelle, tridest); - setsdest(newshelle, triorg); - /* Bond new shell edge to the two triangles it is sandwiched between. */ - /* Note that the facing triangle `oppotri' might be equal to */ - /* `dummytri' (outer space), but the new shell edge is bonded to it */ - /* all the same. */ - tsbond(*tri, newshelle); - sym(*tri, oppotri); - ssymself(newshelle); - tsbond(oppotri, newshelle); - setmark(newshelle, shellemark); - if (verbose > 2) { - printf(" Inserting new "); - printshelle(&newshelle); - } - } else { - if (mark(newshelle) == 0) { - setmark(newshelle, shellemark); - } - } + struct triedge oppotri; + struct edge newshelle; + point triorg, tridest; + triangle ptr; /* Temporary variable used by sym(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + /* Mark points if possible. */ + org( *tri, triorg ); + dest( *tri, tridest ); + if ( pointmark( triorg ) == 0 ) { + setpointmark( triorg, shellemark ); + } + if ( pointmark( tridest ) == 0 ) { + setpointmark( tridest, shellemark ); + } + /* Check if there's already a shell edge here. */ + tspivot( *tri, newshelle ); + if ( newshelle.sh == dummysh ) { + /* Make new shell edge and initialize its vertices. */ + makeshelle( &newshelle ); + setsorg( newshelle, tridest ); + setsdest( newshelle, triorg ); + /* Bond new shell edge to the two triangles it is sandwiched between. */ + /* Note that the facing triangle `oppotri' might be equal to */ + /* `dummytri' (outer space), but the new shell edge is bonded to it */ + /* all the same. */ + tsbond( *tri, newshelle ); + sym( *tri, oppotri ); + ssymself( newshelle ); + tsbond( oppotri, newshelle ); + setmark( newshelle, shellemark ); + if ( verbose > 2 ) { + printf( " Inserting new " ); + printshelle( &newshelle ); + } + } + else { + if ( mark( newshelle ) == 0 ) { + setmark( newshelle, shellemark ); + } + } } /*****************************************************************************/ @@ -6009,100 +6048,104 @@ int shellemark; /* Marker for the new shell edge. */ /* */ /*****************************************************************************/ -void flip(flipedge) +void flip( flipedge ) struct triedge *flipedge; /* Handle for the triangle abc. */ { - struct triedge botleft, botright; - struct triedge topleft, topright; - struct triedge top; - struct triedge botlcasing, botrcasing; - struct triedge toplcasing, toprcasing; - struct edge botlshelle, botrshelle; - struct edge toplshelle, toprshelle; - point leftpoint, rightpoint, botpoint; - point farpoint; - triangle ptr; /* Temporary variable used by sym(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - /* Identify the vertices of the quadrilateral. */ - org(*flipedge, rightpoint); - dest(*flipedge, leftpoint); - apex(*flipedge, botpoint); - sym(*flipedge, top); + struct triedge botleft, botright; + struct triedge topleft, topright; + struct triedge top; + struct triedge botlcasing, botrcasing; + struct triedge toplcasing, toprcasing; + struct edge botlshelle, botrshelle; + struct edge toplshelle, toprshelle; + point leftpoint, rightpoint, botpoint; + point farpoint; + triangle ptr; /* Temporary variable used by sym(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + /* Identify the vertices of the quadrilateral. */ + org( *flipedge, rightpoint ); + dest( *flipedge, leftpoint ); + apex( *flipedge, botpoint ); + sym( *flipedge, top ); #ifdef SELF_CHECK - if (top.tri == dummytri) { - printf("Internal error in flip(): Attempt to flip on boundary.\n"); - lnextself(*flipedge); - return; - } - if (checksegments) { - tspivot(*flipedge, toplshelle); - if (toplshelle.sh != dummysh) { - printf("Internal error in flip(): Attempt to flip a segment.\n"); - lnextself(*flipedge); - return; - } - } + if ( top.tri == dummytri ) { + printf( "Internal error in flip(): Attempt to flip on boundary.\n" ); + lnextself( *flipedge ); + return; + } + if ( checksegments ) { + tspivot( *flipedge, toplshelle ); + if ( toplshelle.sh != dummysh ) { + printf( "Internal error in flip(): Attempt to flip a segment.\n" ); + lnextself( *flipedge ); + return; + } + } #endif /* SELF_CHECK */ - apex(top, farpoint); - - /* Identify the casing of the quadrilateral. */ - lprev(top, topleft); - sym(topleft, toplcasing); - lnext(top, topright); - sym(topright, toprcasing); - lnext(*flipedge, botleft); - sym(botleft, botlcasing); - lprev(*flipedge, botright); - sym(botright, botrcasing); - /* Rotate the quadrilateral one-quarter turn counterclockwise. */ - bond(topleft, botlcasing); - bond(botleft, botrcasing); - bond(botright, toprcasing); - bond(topright, toplcasing); - - if (checksegments) { - /* Check for shell edges and rebond them to the quadrilateral. */ - tspivot(topleft, toplshelle); - tspivot(botleft, botlshelle); - tspivot(botright, botrshelle); - tspivot(topright, toprshelle); - if (toplshelle.sh == dummysh) { - tsdissolve(topright); - } else { - tsbond(topright, toplshelle); - } - if (botlshelle.sh == dummysh) { - tsdissolve(topleft); - } else { - tsbond(topleft, botlshelle); - } - if (botrshelle.sh == dummysh) { - tsdissolve(botleft); - } else { - tsbond(botleft, botrshelle); - } - if (toprshelle.sh == dummysh) { - tsdissolve(botright); - } else { - tsbond(botright, toprshelle); - } - } - - /* New point assignments for the rotated quadrilateral. */ - setorg(*flipedge, farpoint); - setdest(*flipedge, botpoint); - setapex(*flipedge, rightpoint); - setorg(top, botpoint); - setdest(top, farpoint); - setapex(top, leftpoint); - if (verbose > 2) { - printf(" Edge flip results in left "); - lnextself(topleft); - printtriangle(&topleft); - printf(" and right "); - printtriangle(flipedge); - } + apex( top, farpoint ); + + /* Identify the casing of the quadrilateral. */ + lprev( top, topleft ); + sym( topleft, toplcasing ); + lnext( top, topright ); + sym( topright, toprcasing ); + lnext( *flipedge, botleft ); + sym( botleft, botlcasing ); + lprev( *flipedge, botright ); + sym( botright, botrcasing ); + /* Rotate the quadrilateral one-quarter turn counterclockwise. */ + bond( topleft, botlcasing ); + bond( botleft, botrcasing ); + bond( botright, toprcasing ); + bond( topright, toplcasing ); + + if ( checksegments ) { + /* Check for shell edges and rebond them to the quadrilateral. */ + tspivot( topleft, toplshelle ); + tspivot( botleft, botlshelle ); + tspivot( botright, botrshelle ); + tspivot( topright, toprshelle ); + if ( toplshelle.sh == dummysh ) { + tsdissolve( topright ); + } + else { + tsbond( topright, toplshelle ); + } + if ( botlshelle.sh == dummysh ) { + tsdissolve( topleft ); + } + else { + tsbond( topleft, botlshelle ); + } + if ( botrshelle.sh == dummysh ) { + tsdissolve( botleft ); + } + else { + tsbond( botleft, botrshelle ); + } + if ( toprshelle.sh == dummysh ) { + tsdissolve( botright ); + } + else { + tsbond( botright, toprshelle ); + } + } + + /* New point assignments for the rotated quadrilateral. */ + setorg( *flipedge, farpoint ); + setdest( *flipedge, botpoint ); + setapex( *flipedge, rightpoint ); + setorg( top, botpoint ); + setdest( top, farpoint ); + setapex( top, leftpoint ); + if ( verbose > 2 ) { + printf( " Edge flip results in left " ); + lnextself( topleft ); + printtriangle( &topleft ); + printf( " and right " ); + printtriangle( flipedge ); + } } /*****************************************************************************/ @@ -6152,531 +6195,545 @@ struct triedge *flipedge; /* Handle for the triangle abc. */ /* */ /*****************************************************************************/ -enum insertsiteresult insertsite(insertpoint, searchtri, splitedge, - segmentflaws, triflaws) +enum insertsiteresult insertsite( insertpoint, searchtri, splitedge, + segmentflaws, triflaws ) point insertpoint; struct triedge *searchtri; struct edge *splitedge; int segmentflaws; int triflaws; { - struct triedge horiz; - struct triedge top; - struct triedge botleft, botright; - struct triedge topleft, topright; - struct triedge newbotleft, newbotright; - struct triedge newtopright; - struct triedge botlcasing, botrcasing; - struct triedge toplcasing, toprcasing; - struct triedge testtri; - struct edge botlshelle, botrshelle; - struct edge toplshelle, toprshelle; - struct edge brokenshelle; - struct edge checkshelle; - struct edge rightedge; - struct edge newedge; - struct edge *encroached; - point first; - point leftpoint, rightpoint, botpoint, toppoint, farpoint; - REAL attrib; - REAL area; - enum insertsiteresult success; - enum locateresult intersect; - int doflip; - int mirrorflag; - int i; - triangle ptr; /* Temporary variable used by sym(). */ - shelle sptr; /* Temporary variable used by spivot() and tspivot(). */ - - if (verbose > 1) { - printf(" Inserting (%.12g, %.12g).\n", insertpoint[0], insertpoint[1]); - } - if (splitedge == (struct edge *) NULL) { - /* Find the location of the point to be inserted. Check if a good */ - /* starting triangle has already been provided by the caller. */ - if (searchtri->tri == (triangle *) NULL) { - /* Find a boundary triangle. */ - horiz.tri = dummytri; - horiz.orient = 0; - symself(horiz); - /* Search for a triangle containing `insertpoint'. */ - intersect = locate(insertpoint, &horiz); - } else { - /* Start searching from the triangle provided by the caller. */ - triedgecopy(*searchtri, horiz); - intersect = preciselocate(insertpoint, &horiz); - } - } else { - /* The calling routine provides the edge in which the point is inserted. */ - triedgecopy(*searchtri, horiz); - intersect = ONEDGE; - } - if (intersect == ONVERTEX) { - /* There's already a vertex there. Return in `searchtri' a triangle */ - /* whose origin is the existing vertex. */ - triedgecopy(horiz, *searchtri); - triedgecopy(horiz, recenttri); - return DUPLICATEPOINT; - } - if ((intersect == ONEDGE) || (intersect == OUTSIDE)) { - /* The vertex falls on an edge or boundary. */ - if (checksegments && (splitedge == (struct edge *) NULL)) { - /* Check whether the vertex falls on a shell edge. */ - tspivot(horiz, brokenshelle); - if (brokenshelle.sh != dummysh) { - /* The vertex falls on a shell edge. */ - if (segmentflaws) { - if (nobisect == 0) { - /* Add the shell edge to the list of encroached segments. */ - encroached = (struct edge *) poolalloc(&badsegments); - shellecopy(brokenshelle, *encroached); - } else if ((nobisect == 1) && (intersect == ONEDGE)) { - /* This segment may be split only if it is an internal boundary. */ - sym(horiz, testtri); - if (testtri.tri != dummytri) { - /* Add the shell edge to the list of encroached segments. */ - encroached = (struct edge *) poolalloc(&badsegments); - shellecopy(brokenshelle, *encroached); - } - } - } - /* Return a handle whose primary edge contains the point, */ - /* which has not been inserted. */ - triedgecopy(horiz, *searchtri); - triedgecopy(horiz, recenttri); - return VIOLATINGPOINT; - } - } - /* Insert the point on an edge, dividing one triangle into two (if */ - /* the edge lies on a boundary) or two triangles into four. */ - lprev(horiz, botright); - sym(botright, botrcasing); - sym(horiz, topright); - /* Is there a second triangle? (Or does this edge lie on a boundary?) */ - mirrorflag = topright.tri != dummytri; - if (mirrorflag) { - lnextself(topright); - sym(topright, toprcasing); - maketriangle(&newtopright); - } else { - /* Splitting the boundary edge increases the number of boundary edges. */ - hullsize++; - } - maketriangle(&newbotright); - - /* Set the vertices of changed and new triangles. */ - org(horiz, rightpoint); - dest(horiz, leftpoint); - apex(horiz, botpoint); - setorg(newbotright, botpoint); - setdest(newbotright, rightpoint); - setapex(newbotright, insertpoint); - setorg(horiz, insertpoint); - for (i = 0; i < eextras; i++) { - /* Set the element attributes of a new triangle. */ - setelemattribute(newbotright, i, elemattribute(botright, i)); - } - if (vararea) { - /* Set the area constraint of a new triangle. */ - setareabound(newbotright, areabound(botright)); - } - if (mirrorflag) { - dest(topright, toppoint); - setorg(newtopright, rightpoint); - setdest(newtopright, toppoint); - setapex(newtopright, insertpoint); - setorg(topright, insertpoint); - for (i = 0; i < eextras; i++) { - /* Set the element attributes of another new triangle. */ - setelemattribute(newtopright, i, elemattribute(topright, i)); - } - if (vararea) { - /* Set the area constraint of another new triangle. */ - setareabound(newtopright, areabound(topright)); - } - } - - /* There may be shell edges that need to be bonded */ - /* to the new triangle(s). */ - if (checksegments) { - tspivot(botright, botrshelle); - if (botrshelle.sh != dummysh) { - tsdissolve(botright); - tsbond(newbotright, botrshelle); - } - if (mirrorflag) { - tspivot(topright, toprshelle); - if (toprshelle.sh != dummysh) { - tsdissolve(topright); - tsbond(newtopright, toprshelle); - } - } - } - - /* Bond the new triangle(s) to the surrounding triangles. */ - bond(newbotright, botrcasing); - lprevself(newbotright); - bond(newbotright, botright); - lprevself(newbotright); - if (mirrorflag) { - bond(newtopright, toprcasing); - lnextself(newtopright); - bond(newtopright, topright); - lnextself(newtopright); - bond(newtopright, newbotright); - } - - if (splitedge != (struct edge *) NULL) { - /* Split the shell edge into two. */ - setsdest(*splitedge, insertpoint); - ssymself(*splitedge); - spivot(*splitedge, rightedge); - insertshelle(&newbotright, mark(*splitedge)); - tspivot(newbotright, newedge); - sbond(*splitedge, newedge); - ssymself(newedge); - sbond(newedge, rightedge); - ssymself(*splitedge); - } + struct triedge horiz; + struct triedge top; + struct triedge botleft, botright; + struct triedge topleft, topright; + struct triedge newbotleft, newbotright; + struct triedge newtopright; + struct triedge botlcasing, botrcasing; + struct triedge toplcasing, toprcasing; + struct triedge testtri; + struct edge botlshelle, botrshelle; + struct edge toplshelle, toprshelle; + struct edge brokenshelle; + struct edge checkshelle; + struct edge rightedge; + struct edge newedge; + struct edge *encroached; + point first; + point leftpoint, rightpoint, botpoint, toppoint, farpoint; + REAL attrib; + REAL area; + enum insertsiteresult success; + enum locateresult intersect; + int doflip; + int mirrorflag; + int i; + triangle ptr; /* Temporary variable used by sym(). */ + shelle sptr; /* Temporary variable used by spivot() and tspivot(). */ + + if ( verbose > 1 ) { + printf( " Inserting (%.12g, %.12g).\n", insertpoint[0], insertpoint[1] ); + } + if ( splitedge == (struct edge *) NULL ) { + /* Find the location of the point to be inserted. Check if a good */ + /* starting triangle has already been provided by the caller. */ + if ( searchtri->tri == (triangle *) NULL ) { + /* Find a boundary triangle. */ + horiz.tri = dummytri; + horiz.orient = 0; + symself( horiz ); + /* Search for a triangle containing `insertpoint'. */ + intersect = locate( insertpoint, &horiz ); + } + else { + /* Start searching from the triangle provided by the caller. */ + triedgecopy( *searchtri, horiz ); + intersect = preciselocate( insertpoint, &horiz ); + } + } + else { + /* The calling routine provides the edge in which the point is inserted. */ + triedgecopy( *searchtri, horiz ); + intersect = ONEDGE; + } + if ( intersect == ONVERTEX ) { + /* There's already a vertex there. Return in `searchtri' a triangle */ + /* whose origin is the existing vertex. */ + triedgecopy( horiz, *searchtri ); + triedgecopy( horiz, recenttri ); + return DUPLICATEPOINT; + } + if ( ( intersect == ONEDGE ) || ( intersect == OUTSIDE ) ) { + /* The vertex falls on an edge or boundary. */ + if ( checksegments && ( splitedge == (struct edge *) NULL ) ) { + /* Check whether the vertex falls on a shell edge. */ + tspivot( horiz, brokenshelle ); + if ( brokenshelle.sh != dummysh ) { + /* The vertex falls on a shell edge. */ + if ( segmentflaws ) { + if ( nobisect == 0 ) { + /* Add the shell edge to the list of encroached segments. */ + encroached = (struct edge *) poolalloc( &badsegments ); + shellecopy( brokenshelle, *encroached ); + } + else if ( ( nobisect == 1 ) && ( intersect == ONEDGE ) ) { + /* This segment may be split only if it is an internal boundary. */ + sym( horiz, testtri ); + if ( testtri.tri != dummytri ) { + /* Add the shell edge to the list of encroached segments. */ + encroached = (struct edge *) poolalloc( &badsegments ); + shellecopy( brokenshelle, *encroached ); + } + } + } + /* Return a handle whose primary edge contains the point, */ + /* which has not been inserted. */ + triedgecopy( horiz, *searchtri ); + triedgecopy( horiz, recenttri ); + return VIOLATINGPOINT; + } + } + /* Insert the point on an edge, dividing one triangle into two (if */ + /* the edge lies on a boundary) or two triangles into four. */ + lprev( horiz, botright ); + sym( botright, botrcasing ); + sym( horiz, topright ); + /* Is there a second triangle? (Or does this edge lie on a boundary?) */ + mirrorflag = topright.tri != dummytri; + if ( mirrorflag ) { + lnextself( topright ); + sym( topright, toprcasing ); + maketriangle( &newtopright ); + } + else { + /* Splitting the boundary edge increases the number of boundary edges. */ + hullsize++; + } + maketriangle( &newbotright ); + + /* Set the vertices of changed and new triangles. */ + org( horiz, rightpoint ); + dest( horiz, leftpoint ); + apex( horiz, botpoint ); + setorg( newbotright, botpoint ); + setdest( newbotright, rightpoint ); + setapex( newbotright, insertpoint ); + setorg( horiz, insertpoint ); + for ( i = 0; i < eextras; i++ ) { + /* Set the element attributes of a new triangle. */ + setelemattribute( newbotright, i, elemattribute( botright, i ) ); + } + if ( vararea ) { + /* Set the area constraint of a new triangle. */ + setareabound( newbotright, areabound( botright ) ); + } + if ( mirrorflag ) { + dest( topright, toppoint ); + setorg( newtopright, rightpoint ); + setdest( newtopright, toppoint ); + setapex( newtopright, insertpoint ); + setorg( topright, insertpoint ); + for ( i = 0; i < eextras; i++ ) { + /* Set the element attributes of another new triangle. */ + setelemattribute( newtopright, i, elemattribute( topright, i ) ); + } + if ( vararea ) { + /* Set the area constraint of another new triangle. */ + setareabound( newtopright, areabound( topright ) ); + } + } + + /* There may be shell edges that need to be bonded */ + /* to the new triangle(s). */ + if ( checksegments ) { + tspivot( botright, botrshelle ); + if ( botrshelle.sh != dummysh ) { + tsdissolve( botright ); + tsbond( newbotright, botrshelle ); + } + if ( mirrorflag ) { + tspivot( topright, toprshelle ); + if ( toprshelle.sh != dummysh ) { + tsdissolve( topright ); + tsbond( newtopright, toprshelle ); + } + } + } + + /* Bond the new triangle(s) to the surrounding triangles. */ + bond( newbotright, botrcasing ); + lprevself( newbotright ); + bond( newbotright, botright ); + lprevself( newbotright ); + if ( mirrorflag ) { + bond( newtopright, toprcasing ); + lnextself( newtopright ); + bond( newtopright, topright ); + lnextself( newtopright ); + bond( newtopright, newbotright ); + } + + if ( splitedge != (struct edge *) NULL ) { + /* Split the shell edge into two. */ + setsdest( *splitedge, insertpoint ); + ssymself( *splitedge ); + spivot( *splitedge, rightedge ); + insertshelle( &newbotright, mark( *splitedge ) ); + tspivot( newbotright, newedge ); + sbond( *splitedge, newedge ); + ssymself( newedge ); + sbond( newedge, rightedge ); + ssymself( *splitedge ); + } #ifdef SELF_CHECK - if (counterclockwise(rightpoint, leftpoint, botpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle prior to edge point insertion (bottom).\n"); - } - if (mirrorflag) { - if (counterclockwise(leftpoint, rightpoint, toppoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle prior to edge point insertion (top).\n"); - } - if (counterclockwise(rightpoint, toppoint, insertpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle after edge point insertion (top right).\n" - ); - } - if (counterclockwise(toppoint, leftpoint, insertpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle after edge point insertion (top left).\n" - ); - } - } - if (counterclockwise(leftpoint, botpoint, insertpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle after edge point insertion (bottom left).\n" - ); - } - if (counterclockwise(botpoint, rightpoint, insertpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf( - " Clockwise triangle after edge point insertion (bottom right).\n"); - } + if ( counterclockwise( rightpoint, leftpoint, botpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle prior to edge point insertion (bottom).\n" ); + } + if ( mirrorflag ) { + if ( counterclockwise( leftpoint, rightpoint, toppoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle prior to edge point insertion (top).\n" ); + } + if ( counterclockwise( rightpoint, toppoint, insertpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle after edge point insertion (top right).\n" + ); + } + if ( counterclockwise( toppoint, leftpoint, insertpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle after edge point insertion (top left).\n" + ); + } + } + if ( counterclockwise( leftpoint, botpoint, insertpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle after edge point insertion (bottom left).\n" + ); + } + if ( counterclockwise( botpoint, rightpoint, insertpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( + " Clockwise triangle after edge point insertion (bottom right).\n" ); + } #endif /* SELF_CHECK */ - if (verbose > 2) { - printf(" Updating bottom left "); - printtriangle(&botright); - if (mirrorflag) { - printf(" Updating top left "); - printtriangle(&topright); - printf(" Creating top right "); - printtriangle(&newtopright); - } - printf(" Creating bottom right "); - printtriangle(&newbotright); - } - - /* Position `horiz' on the first edge to check for */ - /* the Delaunay property. */ - lnextself(horiz); - } else { - /* Insert the point in a triangle, splitting it into three. */ - lnext(horiz, botleft); - lprev(horiz, botright); - sym(botleft, botlcasing); - sym(botright, botrcasing); - maketriangle(&newbotleft); - maketriangle(&newbotright); - - /* Set the vertices of changed and new triangles. */ - org(horiz, rightpoint); - dest(horiz, leftpoint); - apex(horiz, botpoint); - setorg(newbotleft, leftpoint); - setdest(newbotleft, botpoint); - setapex(newbotleft, insertpoint); - setorg(newbotright, botpoint); - setdest(newbotright, rightpoint); - setapex(newbotright, insertpoint); - setapex(horiz, insertpoint); - for (i = 0; i < eextras; i++) { - /* Set the element attributes of the new triangles. */ - attrib = elemattribute(horiz, i); - setelemattribute(newbotleft, i, attrib); - setelemattribute(newbotright, i, attrib); - } - if (vararea) { - /* Set the area constraint of the new triangles. */ - area = areabound(horiz); - setareabound(newbotleft, area); - setareabound(newbotright, area); - } - - /* There may be shell edges that need to be bonded */ - /* to the new triangles. */ - if (checksegments) { - tspivot(botleft, botlshelle); - if (botlshelle.sh != dummysh) { - tsdissolve(botleft); - tsbond(newbotleft, botlshelle); - } - tspivot(botright, botrshelle); - if (botrshelle.sh != dummysh) { - tsdissolve(botright); - tsbond(newbotright, botrshelle); - } - } - - /* Bond the new triangles to the surrounding triangles. */ - bond(newbotleft, botlcasing); - bond(newbotright, botrcasing); - lnextself(newbotleft); - lprevself(newbotright); - bond(newbotleft, newbotright); - lnextself(newbotleft); - bond(botleft, newbotleft); - lprevself(newbotright); - bond(botright, newbotright); + if ( verbose > 2 ) { + printf( " Updating bottom left " ); + printtriangle( &botright ); + if ( mirrorflag ) { + printf( " Updating top left " ); + printtriangle( &topright ); + printf( " Creating top right " ); + printtriangle( &newtopright ); + } + printf( " Creating bottom right " ); + printtriangle( &newbotright ); + } + + /* Position `horiz' on the first edge to check for */ + /* the Delaunay property. */ + lnextself( horiz ); + } + else { + /* Insert the point in a triangle, splitting it into three. */ + lnext( horiz, botleft ); + lprev( horiz, botright ); + sym( botleft, botlcasing ); + sym( botright, botrcasing ); + maketriangle( &newbotleft ); + maketriangle( &newbotright ); + + /* Set the vertices of changed and new triangles. */ + org( horiz, rightpoint ); + dest( horiz, leftpoint ); + apex( horiz, botpoint ); + setorg( newbotleft, leftpoint ); + setdest( newbotleft, botpoint ); + setapex( newbotleft, insertpoint ); + setorg( newbotright, botpoint ); + setdest( newbotright, rightpoint ); + setapex( newbotright, insertpoint ); + setapex( horiz, insertpoint ); + for ( i = 0; i < eextras; i++ ) { + /* Set the element attributes of the new triangles. */ + attrib = elemattribute( horiz, i ); + setelemattribute( newbotleft, i, attrib ); + setelemattribute( newbotright, i, attrib ); + } + if ( vararea ) { + /* Set the area constraint of the new triangles. */ + area = areabound( horiz ); + setareabound( newbotleft, area ); + setareabound( newbotright, area ); + } + + /* There may be shell edges that need to be bonded */ + /* to the new triangles. */ + if ( checksegments ) { + tspivot( botleft, botlshelle ); + if ( botlshelle.sh != dummysh ) { + tsdissolve( botleft ); + tsbond( newbotleft, botlshelle ); + } + tspivot( botright, botrshelle ); + if ( botrshelle.sh != dummysh ) { + tsdissolve( botright ); + tsbond( newbotright, botrshelle ); + } + } + + /* Bond the new triangles to the surrounding triangles. */ + bond( newbotleft, botlcasing ); + bond( newbotright, botrcasing ); + lnextself( newbotleft ); + lprevself( newbotright ); + bond( newbotleft, newbotright ); + lnextself( newbotleft ); + bond( botleft, newbotleft ); + lprevself( newbotright ); + bond( botright, newbotright ); #ifdef SELF_CHECK - if (counterclockwise(rightpoint, leftpoint, botpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle prior to point insertion.\n"); - } - if (counterclockwise(rightpoint, leftpoint, insertpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle after point insertion (top).\n"); - } - if (counterclockwise(leftpoint, botpoint, insertpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle after point insertion (left).\n"); - } - if (counterclockwise(botpoint, rightpoint, insertpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle after point insertion (right).\n"); - } + if ( counterclockwise( rightpoint, leftpoint, botpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle prior to point insertion.\n" ); + } + if ( counterclockwise( rightpoint, leftpoint, insertpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle after point insertion (top).\n" ); + } + if ( counterclockwise( leftpoint, botpoint, insertpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle after point insertion (left).\n" ); + } + if ( counterclockwise( botpoint, rightpoint, insertpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle after point insertion (right).\n" ); + } #endif /* SELF_CHECK */ - if (verbose > 2) { - printf(" Updating top "); - printtriangle(&horiz); - printf(" Creating left "); - printtriangle(&newbotleft); - printf(" Creating right "); - printtriangle(&newbotright); - } - } - - /* The insertion is successful by default, unless an encroached */ - /* edge is found. */ - success = SUCCESSFULPOINT; - /* Circle around the newly inserted vertex, checking each edge opposite */ - /* it for the Delaunay property. Non-Delaunay edges are flipped. */ - /* `horiz' is always the edge being checked. `first' marks where to */ - /* stop circling. */ - org(horiz, first); - rightpoint = first; - dest(horiz, leftpoint); - /* Circle until finished. */ - while (1) { - /* By default, the edge will be flipped. */ - doflip = 1; - if (checksegments) { - /* Check for a segment, which cannot be flipped. */ - tspivot(horiz, checkshelle); - if (checkshelle.sh != dummysh) { - /* The edge is a segment and cannot be flipped. */ - doflip = 0; + if ( verbose > 2 ) { + printf( " Updating top " ); + printtriangle( &horiz ); + printf( " Creating left " ); + printtriangle( &newbotleft ); + printf( " Creating right " ); + printtriangle( &newbotright ); + } + } + + /* The insertion is successful by default, unless an encroached */ + /* edge is found. */ + success = SUCCESSFULPOINT; + /* Circle around the newly inserted vertex, checking each edge opposite */ + /* it for the Delaunay property. Non-Delaunay edges are flipped. */ + /* `horiz' is always the edge being checked. `first' marks where to */ + /* stop circling. */ + org( horiz, first ); + rightpoint = first; + dest( horiz, leftpoint ); + /* Circle until finished. */ + while ( 1 ) { + /* By default, the edge will be flipped. */ + doflip = 1; + if ( checksegments ) { + /* Check for a segment, which cannot be flipped. */ + tspivot( horiz, checkshelle ); + if ( checkshelle.sh != dummysh ) { + /* The edge is a segment and cannot be flipped. */ + doflip = 0; #ifndef CDT_ONLY - if (segmentflaws) { - /* Does the new point encroach upon this segment? */ - if (checkedge4encroach(&checkshelle)) { - success = ENCROACHINGPOINT; - } - } + if ( segmentflaws ) { + /* Does the new point encroach upon this segment? */ + if ( checkedge4encroach( &checkshelle ) ) { + success = ENCROACHINGPOINT; + } + } #endif /* not CDT_ONLY */ - } - } - if (doflip) { - /* Check if the edge is a boundary edge. */ - sym(horiz, top); - if (top.tri == dummytri) { - /* The edge is a boundary edge and cannot be flipped. */ - doflip = 0; - } else { - /* Find the point on the other side of the edge. */ - apex(top, farpoint); - /* In the incremental Delaunay triangulation algorithm, any of */ - /* `leftpoint', `rightpoint', and `farpoint' could be vertices */ - /* of the triangular bounding box. These vertices must be */ - /* treated as if they are infinitely distant, even though their */ - /* "coordinates" are not. */ - if ((leftpoint == infpoint1) || (leftpoint == infpoint2) - || (leftpoint == infpoint3)) { - /* `leftpoint' is infinitely distant. Check the convexity of */ - /* the boundary of the triangulation. 'farpoint' might be */ - /* infinite as well, but trust me, this same condition */ - /* should be applied. */ - doflip = counterclockwise(insertpoint, rightpoint, farpoint) > 0.0; - } else if ((rightpoint == infpoint1) || (rightpoint == infpoint2) - || (rightpoint == infpoint3)) { - /* `rightpoint' is infinitely distant. Check the convexity of */ - /* the boundary of the triangulation. 'farpoint' might be */ - /* infinite as well, but trust me, this same condition */ - /* should be applied. */ - doflip = counterclockwise(farpoint, leftpoint, insertpoint) > 0.0; - } else if ((farpoint == infpoint1) || (farpoint == infpoint2) - || (farpoint == infpoint3)) { - /* `farpoint' is infinitely distant and cannot be inside */ - /* the circumcircle of the triangle `horiz'. */ - doflip = 0; - } else { - /* Test whether the edge is locally Delaunay. */ - doflip = incircle(leftpoint, insertpoint, rightpoint, farpoint) - > 0.0; - } - if (doflip) { - /* We made it! Flip the edge `horiz' by rotating its containing */ - /* quadrilateral (the two triangles adjacent to `horiz'). */ - /* Identify the casing of the quadrilateral. */ - lprev(top, topleft); - sym(topleft, toplcasing); - lnext(top, topright); - sym(topright, toprcasing); - lnext(horiz, botleft); - sym(botleft, botlcasing); - lprev(horiz, botright); - sym(botright, botrcasing); - /* Rotate the quadrilateral one-quarter turn counterclockwise. */ - bond(topleft, botlcasing); - bond(botleft, botrcasing); - bond(botright, toprcasing); - bond(topright, toplcasing); - if (checksegments) { - /* Check for shell edges and rebond them to the quadrilateral. */ - tspivot(topleft, toplshelle); - tspivot(botleft, botlshelle); - tspivot(botright, botrshelle); - tspivot(topright, toprshelle); - if (toplshelle.sh == dummysh) { - tsdissolve(topright); - } else { - tsbond(topright, toplshelle); - } - if (botlshelle.sh == dummysh) { - tsdissolve(topleft); - } else { - tsbond(topleft, botlshelle); - } - if (botrshelle.sh == dummysh) { - tsdissolve(botleft); - } else { - tsbond(botleft, botrshelle); - } - if (toprshelle.sh == dummysh) { - tsdissolve(botright); - } else { - tsbond(botright, toprshelle); - } - } - /* New point assignments for the rotated quadrilateral. */ - setorg(horiz, farpoint); - setdest(horiz, insertpoint); - setapex(horiz, rightpoint); - setorg(top, insertpoint); - setdest(top, farpoint); - setapex(top, leftpoint); - for (i = 0; i < eextras; i++) { - /* Take the average of the two triangles' attributes. */ - attrib = (REAL)(0.5 * (elemattribute(top, i) + elemattribute(horiz, i))); - setelemattribute(top, i, attrib); - setelemattribute(horiz, i, attrib); - } - if (vararea) { - if ((areabound(top) <= 0.0) || (areabound(horiz) <= 0.0)) { - area = -1.0; - } else { - /* Take the average of the two triangles' area constraints. */ - /* This prevents small area constraints from migrating a */ - /* long, long way from their original location due to flips. */ - area = (REAL)(0.5 * (areabound(top) + areabound(horiz))); - } - setareabound(top, area); - setareabound(horiz, area); - } + } + } + if ( doflip ) { + /* Check if the edge is a boundary edge. */ + sym( horiz, top ); + if ( top.tri == dummytri ) { + /* The edge is a boundary edge and cannot be flipped. */ + doflip = 0; + } + else { + /* Find the point on the other side of the edge. */ + apex( top, farpoint ); + /* In the incremental Delaunay triangulation algorithm, any of */ + /* `leftpoint', `rightpoint', and `farpoint' could be vertices */ + /* of the triangular bounding box. These vertices must be */ + /* treated as if they are infinitely distant, even though their */ + /* "coordinates" are not. */ + if ( ( leftpoint == infpoint1 ) || ( leftpoint == infpoint2 ) + || ( leftpoint == infpoint3 ) ) { + /* `leftpoint' is infinitely distant. Check the convexity of */ + /* the boundary of the triangulation. 'farpoint' might be */ + /* infinite as well, but trust me, this same condition */ + /* should be applied. */ + doflip = counterclockwise( insertpoint, rightpoint, farpoint ) > 0.0; + } + else if ( ( rightpoint == infpoint1 ) || ( rightpoint == infpoint2 ) + || ( rightpoint == infpoint3 ) ) { + /* `rightpoint' is infinitely distant. Check the convexity of */ + /* the boundary of the triangulation. 'farpoint' might be */ + /* infinite as well, but trust me, this same condition */ + /* should be applied. */ + doflip = counterclockwise( farpoint, leftpoint, insertpoint ) > 0.0; + } + else if ( ( farpoint == infpoint1 ) || ( farpoint == infpoint2 ) + || ( farpoint == infpoint3 ) ) { + /* `farpoint' is infinitely distant and cannot be inside */ + /* the circumcircle of the triangle `horiz'. */ + doflip = 0; + } + else { + /* Test whether the edge is locally Delaunay. */ + doflip = incircle( leftpoint, insertpoint, rightpoint, farpoint ) + > 0.0; + } + if ( doflip ) { + /* We made it! Flip the edge `horiz' by rotating its containing */ + /* quadrilateral (the two triangles adjacent to `horiz'). */ + /* Identify the casing of the quadrilateral. */ + lprev( top, topleft ); + sym( topleft, toplcasing ); + lnext( top, topright ); + sym( topright, toprcasing ); + lnext( horiz, botleft ); + sym( botleft, botlcasing ); + lprev( horiz, botright ); + sym( botright, botrcasing ); + /* Rotate the quadrilateral one-quarter turn counterclockwise. */ + bond( topleft, botlcasing ); + bond( botleft, botrcasing ); + bond( botright, toprcasing ); + bond( topright, toplcasing ); + if ( checksegments ) { + /* Check for shell edges and rebond them to the quadrilateral. */ + tspivot( topleft, toplshelle ); + tspivot( botleft, botlshelle ); + tspivot( botright, botrshelle ); + tspivot( topright, toprshelle ); + if ( toplshelle.sh == dummysh ) { + tsdissolve( topright ); + } + else { + tsbond( topright, toplshelle ); + } + if ( botlshelle.sh == dummysh ) { + tsdissolve( topleft ); + } + else { + tsbond( topleft, botlshelle ); + } + if ( botrshelle.sh == dummysh ) { + tsdissolve( botleft ); + } + else { + tsbond( botleft, botrshelle ); + } + if ( toprshelle.sh == dummysh ) { + tsdissolve( botright ); + } + else { + tsbond( botright, toprshelle ); + } + } + /* New point assignments for the rotated quadrilateral. */ + setorg( horiz, farpoint ); + setdest( horiz, insertpoint ); + setapex( horiz, rightpoint ); + setorg( top, insertpoint ); + setdest( top, farpoint ); + setapex( top, leftpoint ); + for ( i = 0; i < eextras; i++ ) { + /* Take the average of the two triangles' attributes. */ + attrib = (REAL)( 0.5 * ( elemattribute( top, i ) + elemattribute( horiz, i ) ) ); + setelemattribute( top, i, attrib ); + setelemattribute( horiz, i, attrib ); + } + if ( vararea ) { + if ( ( areabound( top ) <= 0.0 ) || ( areabound( horiz ) <= 0.0 ) ) { + area = -1.0; + } + else { + /* Take the average of the two triangles' area constraints. */ + /* This prevents small area constraints from migrating a */ + /* long, long way from their original location due to flips. */ + area = (REAL)( 0.5 * ( areabound( top ) + areabound( horiz ) ) ); + } + setareabound( top, area ); + setareabound( horiz, area ); + } #ifdef SELF_CHECK - if (insertpoint != (point) NULL) { - if (counterclockwise(leftpoint, insertpoint, rightpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle prior to edge flip (bottom).\n"); - } - /* The following test has been removed because constrainededge() */ - /* sometimes generates inverted triangles that insertsite() */ - /* removes. */ + if ( insertpoint != (point) NULL ) { + if ( counterclockwise( leftpoint, insertpoint, rightpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle prior to edge flip (bottom).\n" ); + } + /* The following test has been removed because constrainededge() */ + /* sometimes generates inverted triangles that insertsite() */ + /* removes. */ /* if (counterclockwise(rightpoint, farpoint, leftpoint) < 0.0) { printf("Internal error in insertsite():\n"); printf(" Clockwise triangle prior to edge flip (top).\n"); } -*/ - if (counterclockwise(farpoint, leftpoint, insertpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle after edge flip (left).\n"); - } - if (counterclockwise(insertpoint, rightpoint, farpoint) < 0.0) { - printf("Internal error in insertsite():\n"); - printf(" Clockwise triangle after edge flip (right).\n"); - } - } + */ + if ( counterclockwise( farpoint, leftpoint, insertpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle after edge flip (left).\n" ); + } + if ( counterclockwise( insertpoint, rightpoint, farpoint ) < 0.0 ) { + printf( "Internal error in insertsite():\n" ); + printf( " Clockwise triangle after edge flip (right).\n" ); + } + } #endif /* SELF_CHECK */ - if (verbose > 2) { - printf(" Edge flip results in left "); - lnextself(topleft); - printtriangle(&topleft); - printf(" and right "); - printtriangle(&horiz); - } - /* On the next iterations, consider the two edges that were */ - /* exposed (this is, are now visible to the newly inserted */ - /* point) by the edge flip. */ - lprevself(horiz); - leftpoint = farpoint; - } - } - } - if (!doflip) { - /* The handle `horiz' is accepted as locally Delaunay. */ + if ( verbose > 2 ) { + printf( " Edge flip results in left " ); + lnextself( topleft ); + printtriangle( &topleft ); + printf( " and right " ); + printtriangle( &horiz ); + } + /* On the next iterations, consider the two edges that were */ + /* exposed (this is, are now visible to the newly inserted */ + /* point) by the edge flip. */ + lprevself( horiz ); + leftpoint = farpoint; + } + } + } + if ( !doflip ) { + /* The handle `horiz' is accepted as locally Delaunay. */ #ifndef CDT_ONLY - if (triflaws) { - /* Check the triangle `horiz' for quality. */ - testtriangle(&horiz); - } + if ( triflaws ) { + /* Check the triangle `horiz' for quality. */ + testtriangle( &horiz ); + } #endif /* not CDT_ONLY */ - /* Look for the next edge around the newly inserted point. */ - lnextself(horiz); - sym(horiz, testtri); - /* Check for finishing a complete revolution about the new point, or */ - /* falling off the edge of the triangulation. The latter will */ - /* happen when a point is inserted at a boundary. */ - if ((leftpoint == first) || (testtri.tri == dummytri)) { - /* We're done. Return a triangle whose origin is the new point. */ - lnext(horiz, *searchtri); - lnext(horiz, recenttri); - return success; - } - /* Finish finding the next edge around the newly inserted point. */ - lnext(testtri, horiz); - rightpoint = leftpoint; - dest(horiz, leftpoint); - } - } + /* Look for the next edge around the newly inserted point. */ + lnextself( horiz ); + sym( horiz, testtri ); + /* Check for finishing a complete revolution about the new point, or */ + /* falling off the edge of the triangulation. The latter will */ + /* happen when a point is inserted at a boundary. */ + if ( ( leftpoint == first ) || ( testtri.tri == dummytri ) ) { + /* We're done. Return a triangle whose origin is the new point. */ + lnext( horiz, *searchtri ); + lnext( horiz, recenttri ); + return success; + } + /* Finish finding the next edge around the newly inserted point. */ + lnext( testtri, horiz ); + rightpoint = leftpoint; + dest( horiz, leftpoint ); + } + } } /*****************************************************************************/ @@ -6743,76 +6800,76 @@ int triflaws; /* */ /*****************************************************************************/ -void triangulatepolygon(firstedge, lastedge, edgecount, doflip, triflaws) +void triangulatepolygon( firstedge, lastedge, edgecount, doflip, triflaws ) struct triedge *firstedge; struct triedge *lastedge; int edgecount; int doflip; int triflaws; { - struct triedge testtri; - struct triedge besttri; - struct triedge tempedge; - point leftbasepoint, rightbasepoint; - point testpoint; - point bestpoint; - int bestnumber; - int i; - triangle ptr; /* Temporary variable used by sym(), onext(), and oprev(). */ - - /* Identify the base vertices. */ - apex(*lastedge, leftbasepoint); - dest(*firstedge, rightbasepoint); - if (verbose > 2) { - printf(" Triangulating interior polygon at edge\n"); - printf(" (%.12g, %.12g) (%.12g, %.12g)\n", leftbasepoint[0], - leftbasepoint[1], rightbasepoint[0], rightbasepoint[1]); - } - /* Find the best vertex to connect the base to. */ - onext(*firstedge, besttri); - dest(besttri, bestpoint); - triedgecopy(besttri, testtri); - bestnumber = 1; - for (i = 2; i <= edgecount - 2; i++) { - onextself(testtri); - dest(testtri, testpoint); - /* Is this a better vertex? */ - if (incircle(leftbasepoint, rightbasepoint, bestpoint, testpoint) > 0.0) { - triedgecopy(testtri, besttri); - bestpoint = testpoint; - bestnumber = i; - } - } - if (verbose > 2) { - printf(" Connecting edge to (%.12g, %.12g)\n", bestpoint[0], - bestpoint[1]); - } - if (bestnumber > 1) { - /* Recursively triangulate the smaller polygon on the right. */ - oprev(besttri, tempedge); - triangulatepolygon(firstedge, &tempedge, bestnumber + 1, 1, triflaws); - } - if (bestnumber < edgecount - 2) { - /* Recursively triangulate the smaller polygon on the left. */ - sym(besttri, tempedge); - triangulatepolygon(&besttri, lastedge, edgecount - bestnumber, 1, - triflaws); - /* Find `besttri' again; it may have been lost to edge flips. */ - sym(tempedge, besttri); - } - if (doflip) { - /* Do one final edge flip. */ - flip(&besttri); + struct triedge testtri; + struct triedge besttri; + struct triedge tempedge; + point leftbasepoint, rightbasepoint; + point testpoint; + point bestpoint; + int bestnumber; + int i; + triangle ptr; /* Temporary variable used by sym(), onext(), and oprev(). */ + + /* Identify the base vertices. */ + apex( *lastedge, leftbasepoint ); + dest( *firstedge, rightbasepoint ); + if ( verbose > 2 ) { + printf( " Triangulating interior polygon at edge\n" ); + printf( " (%.12g, %.12g) (%.12g, %.12g)\n", leftbasepoint[0], + leftbasepoint[1], rightbasepoint[0], rightbasepoint[1] ); + } + /* Find the best vertex to connect the base to. */ + onext( *firstedge, besttri ); + dest( besttri, bestpoint ); + triedgecopy( besttri, testtri ); + bestnumber = 1; + for ( i = 2; i <= edgecount - 2; i++ ) { + onextself( testtri ); + dest( testtri, testpoint ); + /* Is this a better vertex? */ + if ( incircle( leftbasepoint, rightbasepoint, bestpoint, testpoint ) > 0.0 ) { + triedgecopy( testtri, besttri ); + bestpoint = testpoint; + bestnumber = i; + } + } + if ( verbose > 2 ) { + printf( " Connecting edge to (%.12g, %.12g)\n", bestpoint[0], + bestpoint[1] ); + } + if ( bestnumber > 1 ) { + /* Recursively triangulate the smaller polygon on the right. */ + oprev( besttri, tempedge ); + triangulatepolygon( firstedge, &tempedge, bestnumber + 1, 1, triflaws ); + } + if ( bestnumber < edgecount - 2 ) { + /* Recursively triangulate the smaller polygon on the left. */ + sym( besttri, tempedge ); + triangulatepolygon( &besttri, lastedge, edgecount - bestnumber, 1, + triflaws ); + /* Find `besttri' again; it may have been lost to edge flips. */ + sym( tempedge, besttri ); + } + if ( doflip ) { + /* Do one final edge flip. */ + flip( &besttri ); #ifndef CDT_ONLY - if (triflaws) { - /* Check the quality of the newly committed triangle. */ - sym(besttri, testtri); - testtriangle(&testtri); - } + if ( triflaws ) { + /* Check the quality of the newly committed triangle. */ + sym( besttri, testtri ); + testtriangle( &testtri ); + } #endif /* not CDT_ONLY */ - } - /* Return the base triangle. */ - triedgecopy(besttri, *lastedge); + } + /* Return the base triangle. */ + triedgecopy( besttri, *lastedge ); } /*****************************************************************************/ @@ -6831,84 +6888,84 @@ int triflaws; #ifndef CDT_ONLY -void deletesite(deltri) +void deletesite( deltri ) struct triedge *deltri; { - struct triedge countingtri; - struct triedge firstedge, lastedge; - struct triedge deltriright; - struct triedge lefttri, righttri; - struct triedge leftcasing, rightcasing; - struct edge leftshelle, rightshelle; - point delpoint; - point neworg; - int edgecount; - triangle ptr; /* Temporary variable used by sym(), onext(), and oprev(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - org(*deltri, delpoint); - if (verbose > 1) { - printf(" Deleting (%.12g, %.12g).\n", delpoint[0], delpoint[1]); - } - pointdealloc(delpoint); - - /* Count the degree of the point being deleted. */ - onext(*deltri, countingtri); - edgecount = 1; - while (!triedgeequal(*deltri, countingtri)) { + struct triedge countingtri; + struct triedge firstedge, lastedge; + struct triedge deltriright; + struct triedge lefttri, righttri; + struct triedge leftcasing, rightcasing; + struct edge leftshelle, rightshelle; + point delpoint; + point neworg; + int edgecount; + triangle ptr; /* Temporary variable used by sym(), onext(), and oprev(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + org( *deltri, delpoint ); + if ( verbose > 1 ) { + printf( " Deleting (%.12g, %.12g).\n", delpoint[0], delpoint[1] ); + } + pointdealloc( delpoint ); + + /* Count the degree of the point being deleted. */ + onext( *deltri, countingtri ); + edgecount = 1; + while ( !triedgeequal( *deltri, countingtri ) ) { #ifdef SELF_CHECK - if (countingtri.tri == dummytri) { - printf("Internal error in deletesite():\n"); - printf(" Attempt to delete boundary point.\n"); - internalerror(); - } + if ( countingtri.tri == dummytri ) { + printf( "Internal error in deletesite():\n" ); + printf( " Attempt to delete boundary point.\n" ); + internalerror(); + } #endif /* SELF_CHECK */ - edgecount++; - onextself(countingtri); - } + edgecount++; + onextself( countingtri ); + } #ifdef SELF_CHECK - if (edgecount < 3) { - printf("Internal error in deletesite():\n Point has degree %d.\n", - edgecount); - internalerror(); - } + if ( edgecount < 3 ) { + printf( "Internal error in deletesite():\n Point has degree %d.\n", + edgecount ); + internalerror(); + } #endif /* SELF_CHECK */ - if (edgecount > 3) { - /* Triangulate the polygon defined by the union of all triangles */ - /* adjacent to the point being deleted. Check the quality of */ - /* the resulting triangles. */ - onext(*deltri, firstedge); - oprev(*deltri, lastedge); - triangulatepolygon(&firstedge, &lastedge, edgecount, 0, !nobisect); - } - /* Splice out two triangles. */ - lprev(*deltri, deltriright); - dnext(*deltri, lefttri); - sym(lefttri, leftcasing); - oprev(deltriright, righttri); - sym(righttri, rightcasing); - bond(*deltri, leftcasing); - bond(deltriright, rightcasing); - tspivot(lefttri, leftshelle); - if (leftshelle.sh != dummysh) { - tsbond(*deltri, leftshelle); - } - tspivot(righttri, rightshelle); - if (rightshelle.sh != dummysh) { - tsbond(deltriright, rightshelle); - } - - /* Set the new origin of `deltri' and check its quality. */ - org(lefttri, neworg); - setorg(*deltri, neworg); - if (!nobisect) { - testtriangle(deltri); - } - - /* Delete the two spliced-out triangles. */ - triangledealloc(lefttri.tri); - triangledealloc(righttri.tri); + if ( edgecount > 3 ) { + /* Triangulate the polygon defined by the union of all triangles */ + /* adjacent to the point being deleted. Check the quality of */ + /* the resulting triangles. */ + onext( *deltri, firstedge ); + oprev( *deltri, lastedge ); + triangulatepolygon( &firstedge, &lastedge, edgecount, 0, !nobisect ); + } + /* Splice out two triangles. */ + lprev( *deltri, deltriright ); + dnext( *deltri, lefttri ); + sym( lefttri, leftcasing ); + oprev( deltriright, righttri ); + sym( righttri, rightcasing ); + bond( *deltri, leftcasing ); + bond( deltriright, rightcasing ); + tspivot( lefttri, leftshelle ); + if ( leftshelle.sh != dummysh ) { + tsbond( *deltri, leftshelle ); + } + tspivot( righttri, rightshelle ); + if ( rightshelle.sh != dummysh ) { + tsbond( deltriright, rightshelle ); + } + + /* Set the new origin of `deltri' and check its quality. */ + org( lefttri, neworg ); + setorg( *deltri, neworg ); + if ( !nobisect ) { + testtriangle( deltri ); + } + + /* Delete the two spliced-out triangles. */ + triangledealloc( lefttri.tri ); + triangledealloc( righttri.tri ); } #endif /* not CDT_ONLY */ @@ -6962,61 +7019,61 @@ struct triedge *deltri; /* */ /*****************************************************************************/ -void pointsort(sortarray, arraysize) -point *sortarray; +void pointsort( sortarray, arraysize ) +point * sortarray; int arraysize; { - int left, right; - int pivot; - REAL pivotx, pivoty; - point temp; - - if (arraysize == 2) { - /* Recursive base case. */ - if ((sortarray[0][0] > sortarray[1][0]) || - ((sortarray[0][0] == sortarray[1][0]) && - (sortarray[0][1] > sortarray[1][1]))) { - temp = sortarray[1]; - sortarray[1] = sortarray[0]; - sortarray[0] = temp; - } - return; - } - /* Choose a random pivot to split the array. */ - pivot = (int) randomnation(arraysize); - pivotx = sortarray[pivot][0]; - pivoty = sortarray[pivot][1]; - /* Split the array. */ - left = -1; - right = arraysize; - while (left < right) { - /* Search for a point whose x-coordinate is too large for the left. */ - do { - left++; - } while ((left <= right) && ((sortarray[left][0] < pivotx) || - ((sortarray[left][0] == pivotx) && - (sortarray[left][1] < pivoty)))); - /* Search for a point whose x-coordinate is too small for the right. */ - do { - right--; - } while ((left <= right) && ((sortarray[right][0] > pivotx) || - ((sortarray[right][0] == pivotx) && - (sortarray[right][1] > pivoty)))); - if (left < right) { - /* Swap the left and right points. */ - temp = sortarray[left]; - sortarray[left] = sortarray[right]; - sortarray[right] = temp; - } - } - if (left > 1) { - /* Recursively sort the left subset. */ - pointsort(sortarray, left); - } - if (right < arraysize - 2) { - /* Recursively sort the right subset. */ - pointsort(&sortarray[right + 1], arraysize - right - 1); - } + int left, right; + int pivot; + REAL pivotx, pivoty; + point temp; + + if ( arraysize == 2 ) { + /* Recursive base case. */ + if ( ( sortarray[0][0] > sortarray[1][0] ) || + ( ( sortarray[0][0] == sortarray[1][0] ) && + ( sortarray[0][1] > sortarray[1][1] ) ) ) { + temp = sortarray[1]; + sortarray[1] = sortarray[0]; + sortarray[0] = temp; + } + return; + } + /* Choose a random pivot to split the array. */ + pivot = (int) randomnation( arraysize ); + pivotx = sortarray[pivot][0]; + pivoty = sortarray[pivot][1]; + /* Split the array. */ + left = -1; + right = arraysize; + while ( left < right ) { + /* Search for a point whose x-coordinate is too large for the left. */ + do { + left++; + } while ( ( left <= right ) && ( ( sortarray[left][0] < pivotx ) || + ( ( sortarray[left][0] == pivotx ) && + ( sortarray[left][1] < pivoty ) ) ) ); + /* Search for a point whose x-coordinate is too small for the right. */ + do { + right--; + } while ( ( left <= right ) && ( ( sortarray[right][0] > pivotx ) || + ( ( sortarray[right][0] == pivotx ) && + ( sortarray[right][1] > pivoty ) ) ) ); + if ( left < right ) { + /* Swap the left and right points. */ + temp = sortarray[left]; + sortarray[left] = sortarray[right]; + sortarray[right] = temp; + } + } + if ( left > 1 ) { + /* Recursively sort the left subset. */ + pointsort( sortarray, left ); + } + if ( right < arraysize - 2 ) { + /* Recursively sort the right subset. */ + pointsort( &sortarray[right + 1], arraysize - right - 1 ); + } } /*****************************************************************************/ @@ -7031,66 +7088,66 @@ int arraysize; /* */ /*****************************************************************************/ -void pointmedian(sortarray, arraysize, median, axis) -point *sortarray; +void pointmedian( sortarray, arraysize, median, axis ) +point * sortarray; int arraysize; int median; int axis; { - int left, right; - int pivot; - REAL pivot1, pivot2; - point temp; - - if (arraysize == 2) { - /* Recursive base case. */ - if ((sortarray[0][axis] > sortarray[1][axis]) || - ((sortarray[0][axis] == sortarray[1][axis]) && - (sortarray[0][1 - axis] > sortarray[1][1 - axis]))) { - temp = sortarray[1]; - sortarray[1] = sortarray[0]; - sortarray[0] = temp; - } - return; - } - /* Choose a random pivot to split the array. */ - pivot = (int) randomnation(arraysize); - pivot1 = sortarray[pivot][axis]; - pivot2 = sortarray[pivot][1 - axis]; - /* Split the array. */ - left = -1; - right = arraysize; - while (left < right) { - /* Search for a point whose x-coordinate is too large for the left. */ - do { - left++; - } while ((left <= right) && ((sortarray[left][axis] < pivot1) || - ((sortarray[left][axis] == pivot1) && - (sortarray[left][1 - axis] < pivot2)))); - /* Search for a point whose x-coordinate is too small for the right. */ - do { - right--; - } while ((left <= right) && ((sortarray[right][axis] > pivot1) || - ((sortarray[right][axis] == pivot1) && - (sortarray[right][1 - axis] > pivot2)))); - if (left < right) { - /* Swap the left and right points. */ - temp = sortarray[left]; - sortarray[left] = sortarray[right]; - sortarray[right] = temp; - } - } - /* Unlike in pointsort(), at most one of the following */ - /* conditionals is true. */ - if (left > median) { - /* Recursively shuffle the left subset. */ - pointmedian(sortarray, left, median, axis); - } - if (right < median - 1) { - /* Recursively shuffle the right subset. */ - pointmedian(&sortarray[right + 1], arraysize - right - 1, - median - right - 1, axis); - } + int left, right; + int pivot; + REAL pivot1, pivot2; + point temp; + + if ( arraysize == 2 ) { + /* Recursive base case. */ + if ( ( sortarray[0][axis] > sortarray[1][axis] ) || + ( ( sortarray[0][axis] == sortarray[1][axis] ) && + ( sortarray[0][1 - axis] > sortarray[1][1 - axis] ) ) ) { + temp = sortarray[1]; + sortarray[1] = sortarray[0]; + sortarray[0] = temp; + } + return; + } + /* Choose a random pivot to split the array. */ + pivot = (int) randomnation( arraysize ); + pivot1 = sortarray[pivot][axis]; + pivot2 = sortarray[pivot][1 - axis]; + /* Split the array. */ + left = -1; + right = arraysize; + while ( left < right ) { + /* Search for a point whose x-coordinate is too large for the left. */ + do { + left++; + } while ( ( left <= right ) && ( ( sortarray[left][axis] < pivot1 ) || + ( ( sortarray[left][axis] == pivot1 ) && + ( sortarray[left][1 - axis] < pivot2 ) ) ) ); + /* Search for a point whose x-coordinate is too small for the right. */ + do { + right--; + } while ( ( left <= right ) && ( ( sortarray[right][axis] > pivot1 ) || + ( ( sortarray[right][axis] == pivot1 ) && + ( sortarray[right][1 - axis] > pivot2 ) ) ) ); + if ( left < right ) { + /* Swap the left and right points. */ + temp = sortarray[left]; + sortarray[left] = sortarray[right]; + sortarray[right] = temp; + } + } + /* Unlike in pointsort(), at most one of the following */ + /* conditionals is true. */ + if ( left > median ) { + /* Recursively shuffle the left subset. */ + pointmedian( sortarray, left, median, axis ); + } + if ( right < median - 1 ) { + /* Recursively shuffle the right subset. */ + pointmedian( &sortarray[right + 1], arraysize - right - 1, + median - right - 1, axis ); + } } /*****************************************************************************/ @@ -7104,28 +7161,28 @@ int axis; /* */ /*****************************************************************************/ -void alternateaxes(sortarray, arraysize, axis) -point *sortarray; +void alternateaxes( sortarray, arraysize, axis ) +point * sortarray; int arraysize; int axis; { - int divider; - - divider = arraysize >> 1; - if (arraysize <= 3) { - /* Recursive base case: subsets of two or three points will be */ - /* handled specially, and should always be sorted by x-coordinate. */ - axis = 0; - } - /* Partition with a horizontal or vertical cut. */ - pointmedian(sortarray, arraysize, divider, axis); - /* Recursively partition the subsets with a cross cut. */ - if (arraysize - divider >= 2) { - if (divider >= 2) { - alternateaxes(sortarray, divider, 1 - axis); - } - alternateaxes(&sortarray[divider], arraysize - divider, 1 - axis); - } + int divider; + + divider = arraysize >> 1; + if ( arraysize <= 3 ) { + /* Recursive base case: subsets of two or three points will be */ + /* handled specially, and should always be sorted by x-coordinate. */ + axis = 0; + } + /* Partition with a horizontal or vertical cut. */ + pointmedian( sortarray, arraysize, divider, axis ); + /* Recursively partition the subsets with a cross cut. */ + if ( arraysize - divider >= 2 ) { + if ( divider >= 2 ) { + alternateaxes( sortarray, divider, 1 - axis ); + } + alternateaxes( &sortarray[divider], arraysize - divider, 1 - axis ); + } } /*****************************************************************************/ @@ -7163,297 +7220,300 @@ int axis; /* */ /*****************************************************************************/ -void mergehulls(farleft, innerleft, innerright, farright, axis) +void mergehulls( farleft, innerleft, innerright, farright, axis ) struct triedge *farleft; struct triedge *innerleft; struct triedge *innerright; struct triedge *farright; int axis; { - struct triedge leftcand, rightcand; - struct triedge baseedge; - struct triedge nextedge; - struct triedge sidecasing, topcasing, outercasing; - struct triedge checkedge; - point innerleftdest; - point innerrightorg; - point innerleftapex, innerrightapex; - point farleftpt, farrightpt; - point farleftapex, farrightapex; - point lowerleft, lowerright; - point upperleft, upperright; - point nextapex; - point checkvertex; - int changemade; - int badedge; - int leftfinished, rightfinished; - triangle ptr; /* Temporary variable used by sym(). */ - - dest(*innerleft, innerleftdest); - apex(*innerleft, innerleftapex); - org(*innerright, innerrightorg); - apex(*innerright, innerrightapex); - /* Special treatment for horizontal cuts. */ - if (dwyer && (axis == 1)) { - org(*farleft, farleftpt); - apex(*farleft, farleftapex); - dest(*farright, farrightpt); - apex(*farright, farrightapex); - /* The pointers to the extremal points are shifted to point to the */ - /* topmost and bottommost point of each hull, rather than the */ - /* leftmost and rightmost points. */ - while (farleftapex[1] < farleftpt[1]) { - lnextself(*farleft); - symself(*farleft); - farleftpt = farleftapex; - apex(*farleft, farleftapex); - } - sym(*innerleft, checkedge); - apex(checkedge, checkvertex); - while (checkvertex[1] > innerleftdest[1]) { - lnext(checkedge, *innerleft); - innerleftapex = innerleftdest; - innerleftdest = checkvertex; - sym(*innerleft, checkedge); - apex(checkedge, checkvertex); - } - while (innerrightapex[1] < innerrightorg[1]) { - lnextself(*innerright); - symself(*innerright); - innerrightorg = innerrightapex; - apex(*innerright, innerrightapex); - } - sym(*farright, checkedge); - apex(checkedge, checkvertex); - while (checkvertex[1] > farrightpt[1]) { - lnext(checkedge, *farright); - farrightapex = farrightpt; - farrightpt = checkvertex; - sym(*farright, checkedge); - apex(checkedge, checkvertex); - } - } - /* Find a line tangent to and below both hulls. */ - do { - changemade = 0; - /* Make innerleftdest the "bottommost" point of the left hull. */ - if (counterclockwise(innerleftdest, innerleftapex, innerrightorg) > 0.0) { - lprevself(*innerleft); - symself(*innerleft); - innerleftdest = innerleftapex; - apex(*innerleft, innerleftapex); - changemade = 1; - } - /* Make innerrightorg the "bottommost" point of the right hull. */ - if (counterclockwise(innerrightapex, innerrightorg, innerleftdest) > 0.0) { - lnextself(*innerright); - symself(*innerright); - innerrightorg = innerrightapex; - apex(*innerright, innerrightapex); - changemade = 1; - } - } while (changemade); - /* Find the two candidates to be the next "gear tooth". */ - sym(*innerleft, leftcand); - sym(*innerright, rightcand); - /* Create the bottom new bounding triangle. */ - maketriangle(&baseedge); - /* Connect it to the bounding boxes of the left and right triangulations. */ - bond(baseedge, *innerleft); - lnextself(baseedge); - bond(baseedge, *innerright); - lnextself(baseedge); - setorg(baseedge, innerrightorg); - setdest(baseedge, innerleftdest); - /* Apex is intentionally left NULL. */ - if (verbose > 2) { - printf(" Creating base bounding "); - printtriangle(&baseedge); - } - /* Fix the extreme triangles if necessary. */ - org(*farleft, farleftpt); - if (innerleftdest == farleftpt) { - lnext(baseedge, *farleft); - } - dest(*farright, farrightpt); - if (innerrightorg == farrightpt) { - lprev(baseedge, *farright); - } - /* The vertices of the current knitting edge. */ - lowerleft = innerleftdest; - lowerright = innerrightorg; - /* The candidate vertices for knitting. */ - apex(leftcand, upperleft); - apex(rightcand, upperright); - /* Walk up the gap between the two triangulations, knitting them together. */ - while (1) { - /* Have we reached the top? (This isn't quite the right question, */ - /* because even though the left triangulation might seem finished now, */ - /* moving up on the right triangulation might reveal a new point of */ - /* the left triangulation. And vice-versa.) */ - leftfinished = counterclockwise(upperleft, lowerleft, lowerright) <= 0.0; - rightfinished = counterclockwise(upperright, lowerleft, lowerright) <= 0.0; - if (leftfinished && rightfinished) { - /* Create the top new bounding triangle. */ - maketriangle(&nextedge); - setorg(nextedge, lowerleft); - setdest(nextedge, lowerright); - /* Apex is intentionally left NULL. */ - /* Connect it to the bounding boxes of the two triangulations. */ - bond(nextedge, baseedge); - lnextself(nextedge); - bond(nextedge, rightcand); - lnextself(nextedge); - bond(nextedge, leftcand); - if (verbose > 2) { - printf(" Creating top bounding "); - printtriangle(&baseedge); - } - /* Special treatment for horizontal cuts. */ - if (dwyer && (axis == 1)) { - org(*farleft, farleftpt); - apex(*farleft, farleftapex); - dest(*farright, farrightpt); - apex(*farright, farrightapex); - sym(*farleft, checkedge); - apex(checkedge, checkvertex); - /* The pointers to the extremal points are restored to the leftmost */ - /* and rightmost points (rather than topmost and bottommost). */ - while (checkvertex[0] < farleftpt[0]) { - lprev(checkedge, *farleft); - farleftapex = farleftpt; - farleftpt = checkvertex; - sym(*farleft, checkedge); - apex(checkedge, checkvertex); - } - while (farrightapex[0] > farrightpt[0]) { - lprevself(*farright); - symself(*farright); - farrightpt = farrightapex; - apex(*farright, farrightapex); - } - } - return; - } - /* Consider eliminating edges from the left triangulation. */ - if (!leftfinished) { - /* What vertex would be exposed if an edge were deleted? */ - lprev(leftcand, nextedge); - symself(nextedge); - apex(nextedge, nextapex); - /* If nextapex is NULL, then no vertex would be exposed; the */ - /* triangulation would have been eaten right through. */ - if (nextapex != (point) NULL) { - /* Check whether the edge is Delaunay. */ - badedge = incircle(lowerleft, lowerright, upperleft, nextapex) > 0.0; - while (badedge) { - /* Eliminate the edge with an edge flip. As a result, the */ - /* left triangulation will have one more boundary triangle. */ - lnextself(nextedge); - sym(nextedge, topcasing); - lnextself(nextedge); - sym(nextedge, sidecasing); - bond(nextedge, topcasing); - bond(leftcand, sidecasing); - lnextself(leftcand); - sym(leftcand, outercasing); - lprevself(nextedge); - bond(nextedge, outercasing); - /* Correct the vertices to reflect the edge flip. */ - setorg(leftcand, lowerleft); - setdest(leftcand, NULL); - setapex(leftcand, nextapex); - setorg(nextedge, NULL); - setdest(nextedge, upperleft); - setapex(nextedge, nextapex); - /* Consider the newly exposed vertex. */ - upperleft = nextapex; - /* What vertex would be exposed if another edge were deleted? */ - triedgecopy(sidecasing, nextedge); - apex(nextedge, nextapex); - if (nextapex != (point) NULL) { - /* Check whether the edge is Delaunay. */ - badedge = incircle(lowerleft, lowerright, upperleft, nextapex) - > 0.0; - } else { - /* Avoid eating right through the triangulation. */ - badedge = 0; - } - } - } - } - /* Consider eliminating edges from the right triangulation. */ - if (!rightfinished) { - /* What vertex would be exposed if an edge were deleted? */ - lnext(rightcand, nextedge); - symself(nextedge); - apex(nextedge, nextapex); - /* If nextapex is NULL, then no vertex would be exposed; the */ - /* triangulation would have been eaten right through. */ - if (nextapex != (point) NULL) { - /* Check whether the edge is Delaunay. */ - badedge = incircle(lowerleft, lowerright, upperright, nextapex) > 0.0; - while (badedge) { - /* Eliminate the edge with an edge flip. As a result, the */ - /* right triangulation will have one more boundary triangle. */ - lprevself(nextedge); - sym(nextedge, topcasing); - lprevself(nextedge); - sym(nextedge, sidecasing); - bond(nextedge, topcasing); - bond(rightcand, sidecasing); - lprevself(rightcand); - sym(rightcand, outercasing); - lnextself(nextedge); - bond(nextedge, outercasing); - /* Correct the vertices to reflect the edge flip. */ - setorg(rightcand, NULL); - setdest(rightcand, lowerright); - setapex(rightcand, nextapex); - setorg(nextedge, upperright); - setdest(nextedge, NULL); - setapex(nextedge, nextapex); - /* Consider the newly exposed vertex. */ - upperright = nextapex; - /* What vertex would be exposed if another edge were deleted? */ - triedgecopy(sidecasing, nextedge); - apex(nextedge, nextapex); - if (nextapex != (point) NULL) { - /* Check whether the edge is Delaunay. */ - badedge = incircle(lowerleft, lowerright, upperright, nextapex) - > 0.0; - } else { - /* Avoid eating right through the triangulation. */ - badedge = 0; - } - } - } - } - if (leftfinished || (!rightfinished && - (incircle(upperleft, lowerleft, lowerright, upperright) > 0.0))) { - /* Knit the triangulations, adding an edge from `lowerleft' */ - /* to `upperright'. */ - bond(baseedge, rightcand); - lprev(rightcand, baseedge); - setdest(baseedge, lowerleft); - lowerright = upperright; - sym(baseedge, rightcand); - apex(rightcand, upperright); - } else { - /* Knit the triangulations, adding an edge from `upperleft' */ - /* to `lowerright'. */ - bond(baseedge, leftcand); - lnext(leftcand, baseedge); - setorg(baseedge, lowerright); - lowerleft = upperleft; - sym(baseedge, leftcand); - apex(leftcand, upperleft); - } - if (verbose > 2) { - printf(" Connecting "); - printtriangle(&baseedge); - } - } + struct triedge leftcand, rightcand; + struct triedge baseedge; + struct triedge nextedge; + struct triedge sidecasing, topcasing, outercasing; + struct triedge checkedge; + point innerleftdest; + point innerrightorg; + point innerleftapex, innerrightapex; + point farleftpt, farrightpt; + point farleftapex, farrightapex; + point lowerleft, lowerright; + point upperleft, upperright; + point nextapex; + point checkvertex; + int changemade; + int badedge; + int leftfinished, rightfinished; + triangle ptr; /* Temporary variable used by sym(). */ + + dest( *innerleft, innerleftdest ); + apex( *innerleft, innerleftapex ); + org( *innerright, innerrightorg ); + apex( *innerright, innerrightapex ); + /* Special treatment for horizontal cuts. */ + if ( dwyer && ( axis == 1 ) ) { + org( *farleft, farleftpt ); + apex( *farleft, farleftapex ); + dest( *farright, farrightpt ); + apex( *farright, farrightapex ); + /* The pointers to the extremal points are shifted to point to the */ + /* topmost and bottommost point of each hull, rather than the */ + /* leftmost and rightmost points. */ + while ( farleftapex[1] < farleftpt[1] ) { + lnextself( *farleft ); + symself( *farleft ); + farleftpt = farleftapex; + apex( *farleft, farleftapex ); + } + sym( *innerleft, checkedge ); + apex( checkedge, checkvertex ); + while ( checkvertex[1] > innerleftdest[1] ) { + lnext( checkedge, *innerleft ); + innerleftapex = innerleftdest; + innerleftdest = checkvertex; + sym( *innerleft, checkedge ); + apex( checkedge, checkvertex ); + } + while ( innerrightapex[1] < innerrightorg[1] ) { + lnextself( *innerright ); + symself( *innerright ); + innerrightorg = innerrightapex; + apex( *innerright, innerrightapex ); + } + sym( *farright, checkedge ); + apex( checkedge, checkvertex ); + while ( checkvertex[1] > farrightpt[1] ) { + lnext( checkedge, *farright ); + farrightapex = farrightpt; + farrightpt = checkvertex; + sym( *farright, checkedge ); + apex( checkedge, checkvertex ); + } + } + /* Find a line tangent to and below both hulls. */ + do { + changemade = 0; + /* Make innerleftdest the "bottommost" point of the left hull. */ + if ( counterclockwise( innerleftdest, innerleftapex, innerrightorg ) > 0.0 ) { + lprevself( *innerleft ); + symself( *innerleft ); + innerleftdest = innerleftapex; + apex( *innerleft, innerleftapex ); + changemade = 1; + } + /* Make innerrightorg the "bottommost" point of the right hull. */ + if ( counterclockwise( innerrightapex, innerrightorg, innerleftdest ) > 0.0 ) { + lnextself( *innerright ); + symself( *innerright ); + innerrightorg = innerrightapex; + apex( *innerright, innerrightapex ); + changemade = 1; + } + } while ( changemade ); + /* Find the two candidates to be the next "gear tooth". */ + sym( *innerleft, leftcand ); + sym( *innerright, rightcand ); + /* Create the bottom new bounding triangle. */ + maketriangle( &baseedge ); + /* Connect it to the bounding boxes of the left and right triangulations. */ + bond( baseedge, *innerleft ); + lnextself( baseedge ); + bond( baseedge, *innerright ); + lnextself( baseedge ); + setorg( baseedge, innerrightorg ); + setdest( baseedge, innerleftdest ); + /* Apex is intentionally left NULL. */ + if ( verbose > 2 ) { + printf( " Creating base bounding " ); + printtriangle( &baseedge ); + } + /* Fix the extreme triangles if necessary. */ + org( *farleft, farleftpt ); + if ( innerleftdest == farleftpt ) { + lnext( baseedge, *farleft ); + } + dest( *farright, farrightpt ); + if ( innerrightorg == farrightpt ) { + lprev( baseedge, *farright ); + } + /* The vertices of the current knitting edge. */ + lowerleft = innerleftdest; + lowerright = innerrightorg; + /* The candidate vertices for knitting. */ + apex( leftcand, upperleft ); + apex( rightcand, upperright ); + /* Walk up the gap between the two triangulations, knitting them together. */ + while ( 1 ) { + /* Have we reached the top? (This isn't quite the right question, */ + /* because even though the left triangulation might seem finished now, */ + /* moving up on the right triangulation might reveal a new point of */ + /* the left triangulation. And vice-versa.) */ + leftfinished = counterclockwise( upperleft, lowerleft, lowerright ) <= 0.0; + rightfinished = counterclockwise( upperright, lowerleft, lowerright ) <= 0.0; + if ( leftfinished && rightfinished ) { + /* Create the top new bounding triangle. */ + maketriangle( &nextedge ); + setorg( nextedge, lowerleft ); + setdest( nextedge, lowerright ); + /* Apex is intentionally left NULL. */ + /* Connect it to the bounding boxes of the two triangulations. */ + bond( nextedge, baseedge ); + lnextself( nextedge ); + bond( nextedge, rightcand ); + lnextself( nextedge ); + bond( nextedge, leftcand ); + if ( verbose > 2 ) { + printf( " Creating top bounding " ); + printtriangle( &baseedge ); + } + /* Special treatment for horizontal cuts. */ + if ( dwyer && ( axis == 1 ) ) { + org( *farleft, farleftpt ); + apex( *farleft, farleftapex ); + dest( *farright, farrightpt ); + apex( *farright, farrightapex ); + sym( *farleft, checkedge ); + apex( checkedge, checkvertex ); + /* The pointers to the extremal points are restored to the leftmost */ + /* and rightmost points (rather than topmost and bottommost). */ + while ( checkvertex[0] < farleftpt[0] ) { + lprev( checkedge, *farleft ); + farleftapex = farleftpt; + farleftpt = checkvertex; + sym( *farleft, checkedge ); + apex( checkedge, checkvertex ); + } + while ( farrightapex[0] > farrightpt[0] ) { + lprevself( *farright ); + symself( *farright ); + farrightpt = farrightapex; + apex( *farright, farrightapex ); + } + } + return; + } + /* Consider eliminating edges from the left triangulation. */ + if ( !leftfinished ) { + /* What vertex would be exposed if an edge were deleted? */ + lprev( leftcand, nextedge ); + symself( nextedge ); + apex( nextedge, nextapex ); + /* If nextapex is NULL, then no vertex would be exposed; the */ + /* triangulation would have been eaten right through. */ + if ( nextapex != (point) NULL ) { + /* Check whether the edge is Delaunay. */ + badedge = incircle( lowerleft, lowerright, upperleft, nextapex ) > 0.0; + while ( badedge ) { + /* Eliminate the edge with an edge flip. As a result, the */ + /* left triangulation will have one more boundary triangle. */ + lnextself( nextedge ); + sym( nextedge, topcasing ); + lnextself( nextedge ); + sym( nextedge, sidecasing ); + bond( nextedge, topcasing ); + bond( leftcand, sidecasing ); + lnextself( leftcand ); + sym( leftcand, outercasing ); + lprevself( nextedge ); + bond( nextedge, outercasing ); + /* Correct the vertices to reflect the edge flip. */ + setorg( leftcand, lowerleft ); + setdest( leftcand, NULL ); + setapex( leftcand, nextapex ); + setorg( nextedge, NULL ); + setdest( nextedge, upperleft ); + setapex( nextedge, nextapex ); + /* Consider the newly exposed vertex. */ + upperleft = nextapex; + /* What vertex would be exposed if another edge were deleted? */ + triedgecopy( sidecasing, nextedge ); + apex( nextedge, nextapex ); + if ( nextapex != (point) NULL ) { + /* Check whether the edge is Delaunay. */ + badedge = incircle( lowerleft, lowerright, upperleft, nextapex ) + > 0.0; + } + else { + /* Avoid eating right through the triangulation. */ + badedge = 0; + } + } + } + } + /* Consider eliminating edges from the right triangulation. */ + if ( !rightfinished ) { + /* What vertex would be exposed if an edge were deleted? */ + lnext( rightcand, nextedge ); + symself( nextedge ); + apex( nextedge, nextapex ); + /* If nextapex is NULL, then no vertex would be exposed; the */ + /* triangulation would have been eaten right through. */ + if ( nextapex != (point) NULL ) { + /* Check whether the edge is Delaunay. */ + badedge = incircle( lowerleft, lowerright, upperright, nextapex ) > 0.0; + while ( badedge ) { + /* Eliminate the edge with an edge flip. As a result, the */ + /* right triangulation will have one more boundary triangle. */ + lprevself( nextedge ); + sym( nextedge, topcasing ); + lprevself( nextedge ); + sym( nextedge, sidecasing ); + bond( nextedge, topcasing ); + bond( rightcand, sidecasing ); + lprevself( rightcand ); + sym( rightcand, outercasing ); + lnextself( nextedge ); + bond( nextedge, outercasing ); + /* Correct the vertices to reflect the edge flip. */ + setorg( rightcand, NULL ); + setdest( rightcand, lowerright ); + setapex( rightcand, nextapex ); + setorg( nextedge, upperright ); + setdest( nextedge, NULL ); + setapex( nextedge, nextapex ); + /* Consider the newly exposed vertex. */ + upperright = nextapex; + /* What vertex would be exposed if another edge were deleted? */ + triedgecopy( sidecasing, nextedge ); + apex( nextedge, nextapex ); + if ( nextapex != (point) NULL ) { + /* Check whether the edge is Delaunay. */ + badedge = incircle( lowerleft, lowerright, upperright, nextapex ) + > 0.0; + } + else { + /* Avoid eating right through the triangulation. */ + badedge = 0; + } + } + } + } + if ( leftfinished || ( !rightfinished && + ( incircle( upperleft, lowerleft, lowerright, upperright ) > 0.0 ) ) ) { + /* Knit the triangulations, adding an edge from `lowerleft' */ + /* to `upperright'. */ + bond( baseedge, rightcand ); + lprev( rightcand, baseedge ); + setdest( baseedge, lowerleft ); + lowerright = upperright; + sym( baseedge, rightcand ); + apex( rightcand, upperright ); + } + else { + /* Knit the triangulations, adding an edge from `upperleft' */ + /* to `lowerright'. */ + bond( baseedge, leftcand ); + lnext( leftcand, baseedge ); + setorg( baseedge, lowerright ); + lowerleft = upperleft; + sym( baseedge, leftcand ); + apex( leftcand, upperleft ); + } + if ( verbose > 2 ) { + printf( " Connecting " ); + printtriangle( &baseedge ); + } + } } /*****************************************************************************/ @@ -7473,205 +7533,210 @@ int axis; /* */ /*****************************************************************************/ -void divconqrecurse(sortarray, vertices, axis, farleft, farright) -point *sortarray; +void divconqrecurse( sortarray, vertices, axis, farleft, farright ) +point * sortarray; int vertices; int axis; struct triedge *farleft; struct triedge *farright; { - struct triedge midtri, tri1, tri2, tri3; - struct triedge innerleft, innerright; - REAL area; - int divider; - - if (verbose > 2) { - printf(" Triangulating %d points.\n", vertices); - } - if (vertices == 2) { - /* The triangulation of two vertices is an edge. An edge is */ - /* represented by two bounding triangles. */ - maketriangle(farleft); - setorg(*farleft, sortarray[0]); - setdest(*farleft, sortarray[1]); - /* The apex is intentionally left NULL. */ - maketriangle(farright); - setorg(*farright, sortarray[1]); - setdest(*farright, sortarray[0]); - /* The apex is intentionally left NULL. */ - bond(*farleft, *farright); - lprevself(*farleft); - lnextself(*farright); - bond(*farleft, *farright); - lprevself(*farleft); - lnextself(*farright); - bond(*farleft, *farright); - if (verbose > 2) { - printf(" Creating "); - printtriangle(farleft); - printf(" Creating "); - printtriangle(farright); - } - /* Ensure that the origin of `farleft' is sortarray[0]. */ - lprev(*farright, *farleft); - return; - } else if (vertices == 3) { - /* The triangulation of three vertices is either a triangle (with */ - /* three bounding triangles) or two edges (with four bounding */ - /* triangles). In either case, four triangles are created. */ - maketriangle(&midtri); - maketriangle(&tri1); - maketriangle(&tri2); - maketriangle(&tri3); - area = counterclockwise(sortarray[0], sortarray[1], sortarray[2]); - if (area == 0.0) { - /* Three collinear points; the triangulation is two edges. */ - setorg(midtri, sortarray[0]); - setdest(midtri, sortarray[1]); - setorg(tri1, sortarray[1]); - setdest(tri1, sortarray[0]); - setorg(tri2, sortarray[2]); - setdest(tri2, sortarray[1]); - setorg(tri3, sortarray[1]); - setdest(tri3, sortarray[2]); - /* All apices are intentionally left NULL. */ - bond(midtri, tri1); - bond(tri2, tri3); - lnextself(midtri); - lprevself(tri1); - lnextself(tri2); - lprevself(tri3); - bond(midtri, tri3); - bond(tri1, tri2); - lnextself(midtri); - lprevself(tri1); - lnextself(tri2); - lprevself(tri3); - bond(midtri, tri1); - bond(tri2, tri3); - /* Ensure that the origin of `farleft' is sortarray[0]. */ - triedgecopy(tri1, *farleft); - /* Ensure that the destination of `farright' is sortarray[2]. */ - triedgecopy(tri2, *farright); - } else { - /* The three points are not collinear; the triangulation is one */ - /* triangle, namely `midtri'. */ - setorg(midtri, sortarray[0]); - setdest(tri1, sortarray[0]); - setorg(tri3, sortarray[0]); - /* Apices of tri1, tri2, and tri3 are left NULL. */ - if (area > 0.0) { - /* The vertices are in counterclockwise order. */ - setdest(midtri, sortarray[1]); - setorg(tri1, sortarray[1]); - setdest(tri2, sortarray[1]); - setapex(midtri, sortarray[2]); - setorg(tri2, sortarray[2]); - setdest(tri3, sortarray[2]); - } else { - /* The vertices are in clockwise order. */ - setdest(midtri, sortarray[2]); - setorg(tri1, sortarray[2]); - setdest(tri2, sortarray[2]); - setapex(midtri, sortarray[1]); - setorg(tri2, sortarray[1]); - setdest(tri3, sortarray[1]); - } - /* The topology does not depend on how the vertices are ordered. */ - bond(midtri, tri1); - lnextself(midtri); - bond(midtri, tri2); - lnextself(midtri); - bond(midtri, tri3); - lprevself(tri1); - lnextself(tri2); - bond(tri1, tri2); - lprevself(tri1); - lprevself(tri3); - bond(tri1, tri3); - lnextself(tri2); - lprevself(tri3); - bond(tri2, tri3); - /* Ensure that the origin of `farleft' is sortarray[0]. */ - triedgecopy(tri1, *farleft); - /* Ensure that the destination of `farright' is sortarray[2]. */ - if (area > 0.0) { - triedgecopy(tri2, *farright); - } else { - lnext(*farleft, *farright); - } - } - if (verbose > 2) { - printf(" Creating "); - printtriangle(&midtri); - printf(" Creating "); - printtriangle(&tri1); - printf(" Creating "); - printtriangle(&tri2); - printf(" Creating "); - printtriangle(&tri3); - } - return; - } else { - /* Split the vertices in half. */ - divider = vertices >> 1; - /* Recursively triangulate each half. */ - divconqrecurse(sortarray, divider, 1 - axis, farleft, &innerleft); - divconqrecurse(&sortarray[divider], vertices - divider, 1 - axis, - &innerright, farright); - if (verbose > 1) { - printf(" Joining triangulations with %d and %d vertices.\n", divider, - vertices - divider); - } - /* Merge the two triangulations into one. */ - mergehulls(farleft, &innerleft, &innerright, farright, axis); - } + struct triedge midtri, tri1, tri2, tri3; + struct triedge innerleft, innerright; + REAL area; + int divider; + + if ( verbose > 2 ) { + printf( " Triangulating %d points.\n", vertices ); + } + if ( vertices == 2 ) { + /* The triangulation of two vertices is an edge. An edge is */ + /* represented by two bounding triangles. */ + maketriangle( farleft ); + setorg( *farleft, sortarray[0] ); + setdest( *farleft, sortarray[1] ); + /* The apex is intentionally left NULL. */ + maketriangle( farright ); + setorg( *farright, sortarray[1] ); + setdest( *farright, sortarray[0] ); + /* The apex is intentionally left NULL. */ + bond( *farleft, *farright ); + lprevself( *farleft ); + lnextself( *farright ); + bond( *farleft, *farright ); + lprevself( *farleft ); + lnextself( *farright ); + bond( *farleft, *farright ); + if ( verbose > 2 ) { + printf( " Creating " ); + printtriangle( farleft ); + printf( " Creating " ); + printtriangle( farright ); + } + /* Ensure that the origin of `farleft' is sortarray[0]. */ + lprev( *farright, *farleft ); + return; + } + else if ( vertices == 3 ) { + /* The triangulation of three vertices is either a triangle (with */ + /* three bounding triangles) or two edges (with four bounding */ + /* triangles). In either case, four triangles are created. */ + maketriangle( &midtri ); + maketriangle( &tri1 ); + maketriangle( &tri2 ); + maketriangle( &tri3 ); + area = counterclockwise( sortarray[0], sortarray[1], sortarray[2] ); + if ( area == 0.0 ) { + /* Three collinear points; the triangulation is two edges. */ + setorg( midtri, sortarray[0] ); + setdest( midtri, sortarray[1] ); + setorg( tri1, sortarray[1] ); + setdest( tri1, sortarray[0] ); + setorg( tri2, sortarray[2] ); + setdest( tri2, sortarray[1] ); + setorg( tri3, sortarray[1] ); + setdest( tri3, sortarray[2] ); + /* All apices are intentionally left NULL. */ + bond( midtri, tri1 ); + bond( tri2, tri3 ); + lnextself( midtri ); + lprevself( tri1 ); + lnextself( tri2 ); + lprevself( tri3 ); + bond( midtri, tri3 ); + bond( tri1, tri2 ); + lnextself( midtri ); + lprevself( tri1 ); + lnextself( tri2 ); + lprevself( tri3 ); + bond( midtri, tri1 ); + bond( tri2, tri3 ); + /* Ensure that the origin of `farleft' is sortarray[0]. */ + triedgecopy( tri1, *farleft ); + /* Ensure that the destination of `farright' is sortarray[2]. */ + triedgecopy( tri2, *farright ); + } + else { + /* The three points are not collinear; the triangulation is one */ + /* triangle, namely `midtri'. */ + setorg( midtri, sortarray[0] ); + setdest( tri1, sortarray[0] ); + setorg( tri3, sortarray[0] ); + /* Apices of tri1, tri2, and tri3 are left NULL. */ + if ( area > 0.0 ) { + /* The vertices are in counterclockwise order. */ + setdest( midtri, sortarray[1] ); + setorg( tri1, sortarray[1] ); + setdest( tri2, sortarray[1] ); + setapex( midtri, sortarray[2] ); + setorg( tri2, sortarray[2] ); + setdest( tri3, sortarray[2] ); + } + else { + /* The vertices are in clockwise order. */ + setdest( midtri, sortarray[2] ); + setorg( tri1, sortarray[2] ); + setdest( tri2, sortarray[2] ); + setapex( midtri, sortarray[1] ); + setorg( tri2, sortarray[1] ); + setdest( tri3, sortarray[1] ); + } + /* The topology does not depend on how the vertices are ordered. */ + bond( midtri, tri1 ); + lnextself( midtri ); + bond( midtri, tri2 ); + lnextself( midtri ); + bond( midtri, tri3 ); + lprevself( tri1 ); + lnextself( tri2 ); + bond( tri1, tri2 ); + lprevself( tri1 ); + lprevself( tri3 ); + bond( tri1, tri3 ); + lnextself( tri2 ); + lprevself( tri3 ); + bond( tri2, tri3 ); + /* Ensure that the origin of `farleft' is sortarray[0]. */ + triedgecopy( tri1, *farleft ); + /* Ensure that the destination of `farright' is sortarray[2]. */ + if ( area > 0.0 ) { + triedgecopy( tri2, *farright ); + } + else { + lnext( *farleft, *farright ); + } + } + if ( verbose > 2 ) { + printf( " Creating " ); + printtriangle( &midtri ); + printf( " Creating " ); + printtriangle( &tri1 ); + printf( " Creating " ); + printtriangle( &tri2 ); + printf( " Creating " ); + printtriangle( &tri3 ); + } + return; + } + else { + /* Split the vertices in half. */ + divider = vertices >> 1; + /* Recursively triangulate each half. */ + divconqrecurse( sortarray, divider, 1 - axis, farleft, &innerleft ); + divconqrecurse( &sortarray[divider], vertices - divider, 1 - axis, + &innerright, farright ); + if ( verbose > 1 ) { + printf( " Joining triangulations with %d and %d vertices.\n", divider, + vertices - divider ); + } + /* Merge the two triangulations into one. */ + mergehulls( farleft, &innerleft, &innerright, farright, axis ); + } } -long removeghosts(startghost) +long removeghosts( startghost ) struct triedge *startghost; { - struct triedge searchedge; - struct triedge dissolveedge; - struct triedge deadtri; - point markorg; - long hullsize; - triangle ptr; /* Temporary variable used by sym(). */ - - if (verbose) { - printf(" Removing ghost triangles.\n"); - } - /* Find an edge on the convex hull to start point location from. */ - lprev(*startghost, searchedge); - symself(searchedge); - dummytri[0] = encode(searchedge); - /* Remove the bounding box and count the convex hull edges. */ - triedgecopy(*startghost, dissolveedge); - hullsize = 0; - do { - hullsize++; - lnext(dissolveedge, deadtri); - lprevself(dissolveedge); - symself(dissolveedge); - /* If no PSLG is involved, set the boundary markers of all the points */ - /* on the convex hull. If a PSLG is used, this step is done later. */ - if (!poly) { - /* Watch out for the case where all the input points are collinear. */ - if (dissolveedge.tri != dummytri) { - org(dissolveedge, markorg); - if (pointmark(markorg) == 0) { - setpointmark(markorg, 1); - } - } - } - /* Remove a bounding triangle from a convex hull triangle. */ - dissolve(dissolveedge); - /* Find the next bounding triangle. */ - sym(deadtri, dissolveedge); - /* Delete the bounding triangle. */ - triangledealloc(deadtri.tri); - } while (!triedgeequal(dissolveedge, *startghost)); - return hullsize; + struct triedge searchedge; + struct triedge dissolveedge; + struct triedge deadtri; + point markorg; + long hullsize; + triangle ptr; /* Temporary variable used by sym(). */ + + if ( verbose ) { + printf( " Removing ghost triangles.\n" ); + } + /* Find an edge on the convex hull to start point location from. */ + lprev( *startghost, searchedge ); + symself( searchedge ); + dummytri[0] = encode( searchedge ); + /* Remove the bounding box and count the convex hull edges. */ + triedgecopy( *startghost, dissolveedge ); + hullsize = 0; + do { + hullsize++; + lnext( dissolveedge, deadtri ); + lprevself( dissolveedge ); + symself( dissolveedge ); + /* If no PSLG is involved, set the boundary markers of all the points */ + /* on the convex hull. If a PSLG is used, this step is done later. */ + if ( !poly ) { + /* Watch out for the case where all the input points are collinear. */ + if ( dissolveedge.tri != dummytri ) { + org( dissolveedge, markorg ); + if ( pointmark( markorg ) == 0 ) { + setpointmark( markorg, 1 ); + } + } + } + /* Remove a bounding triangle from a convex hull triangle. */ + dissolve( dissolveedge ); + /* Find the next bounding triangle. */ + sym( deadtri, dissolveedge ); + /* Delete the bounding triangle. */ + triangledealloc( deadtri.tri ); + } while ( !triedgeequal( dissolveedge, *startghost ) ); + return hullsize; } /*****************************************************************************/ @@ -7684,66 +7749,66 @@ struct triedge *startghost; /* */ /*****************************************************************************/ -long divconqdelaunay() -{ - point *sortarray; - struct triedge hullleft, hullright; - int divider; - int i, j; - - /* Allocate an array of pointers to points for sorting. */ - sortarray = (point *) malloc(inpoints * sizeof(point)); - if (sortarray == (point *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - traversalinit(&points); - for (i = 0; i < inpoints; i++) { - sortarray[i] = pointtraverse(); - } - if (verbose) { - printf(" Sorting points.\n"); - } - /* Sort the points. */ - pointsort(sortarray, inpoints); - /* Discard duplicate points, which can really mess up the algorithm. */ - i = 0; - for (j = 1; j < inpoints; j++) { - if ((sortarray[i][0] == sortarray[j][0]) - && (sortarray[i][1] == sortarray[j][1])) { - if (!quiet) { - printf( -"Warning: A duplicate point at (%.12g, %.12g) appeared and was ignored.\n", - sortarray[j][0], sortarray[j][1]); - } +long divconqdelaunay(){ + point *sortarray; + struct triedge hullleft, hullright; + int divider; + int i, j; + + /* Allocate an array of pointers to points for sorting. */ + sortarray = (point *) malloc( inpoints * sizeof( point ) ); + if ( sortarray == (point *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + traversalinit( &points ); + for ( i = 0; i < inpoints; i++ ) { + sortarray[i] = pointtraverse(); + } + if ( verbose ) { + printf( " Sorting points.\n" ); + } + /* Sort the points. */ + pointsort( sortarray, inpoints ); + /* Discard duplicate points, which can really mess up the algorithm. */ + i = 0; + for ( j = 1; j < inpoints; j++ ) { + if ( ( sortarray[i][0] == sortarray[j][0] ) + && ( sortarray[i][1] == sortarray[j][1] ) ) { + if ( !quiet ) { + printf( + "Warning: A duplicate point at (%.12g, %.12g) appeared and was ignored.\n", + sortarray[j][0], sortarray[j][1] ); + } /* Commented out - would eliminate point from output .node file, but causes a failure if some segment has this point as an endpoint. setpointmark(sortarray[j], DEADPOINT); -*/ - } else { - i++; - sortarray[i] = sortarray[j]; - } - } - i++; - if (dwyer) { - /* Re-sort the array of points to accommodate alternating cuts. */ - divider = i >> 1; - if (i - divider >= 2) { - if (divider >= 2) { - alternateaxes(sortarray, divider, 1); - } - alternateaxes(&sortarray[divider], i - divider, 1); - } - } - if (verbose) { - printf(" Forming triangulation.\n"); - } - /* Form the Delaunay triangulation. */ - divconqrecurse(sortarray, i, 0, &hullleft, &hullright); - free(sortarray); - - return removeghosts(&hullleft); + */ + } + else { + i++; + sortarray[i] = sortarray[j]; + } + } + i++; + if ( dwyer ) { + /* Re-sort the array of points to accommodate alternating cuts. */ + divider = i >> 1; + if ( i - divider >= 2 ) { + if ( divider >= 2 ) { + alternateaxes( sortarray, divider, 1 ); + } + alternateaxes( &sortarray[divider], i - divider, 1 ); + } + } + if ( verbose ) { + printf( " Forming triangulation.\n" ); + } + /* Form the Delaunay triangulation. */ + divconqrecurse( sortarray, i, 0, &hullleft, &hullright ); + free( sortarray ); + + return removeghosts( &hullleft ); } /** **/ @@ -7767,50 +7832,49 @@ long divconqdelaunay() #ifndef REDUCED -void boundingbox() -{ - struct triedge inftri; /* Handle for the triangular bounding box. */ - REAL width; - - if (verbose) { - printf(" Creating triangular bounding box.\n"); - } - /* Find the width (or height, whichever is larger) of the triangulation. */ - width = xmax - xmin; - if (ymax - ymin > width) { - width = ymax - ymin; - } - if (width == 0.0) { - width = 1.0; - } - /* Create the vertices of the bounding box. */ - infpoint1 = (point) malloc(points.itembytes); - infpoint2 = (point) malloc(points.itembytes); - infpoint3 = (point) malloc(points.itembytes); - if ((infpoint1 == (point) NULL) || (infpoint2 == (point) NULL) - || (infpoint3 == (point) NULL)) { - printf("Error: Out of memory.\n"); - exit(1); - } - infpoint1[0] = xmin - 50.0 * width; - infpoint1[1] = ymin - 40.0 * width; - infpoint2[0] = xmax + 50.0 * width; - infpoint2[1] = ymin - 40.0 * width; - infpoint3[0] = 0.5 * (xmin + xmax); - infpoint3[1] = ymax + 60.0 * width; - - /* Create the bounding box. */ - maketriangle(&inftri); - setorg(inftri, infpoint1); - setdest(inftri, infpoint2); - setapex(inftri, infpoint3); - /* Link dummytri to the bounding box so we can always find an */ - /* edge to begin searching (point location) from. */ - dummytri[0] = (triangle) inftri.tri; - if (verbose > 2) { - printf(" Creating "); - printtriangle(&inftri); - } +void boundingbox(){ + struct triedge inftri; /* Handle for the triangular bounding box. */ + REAL width; + + if ( verbose ) { + printf( " Creating triangular bounding box.\n" ); + } + /* Find the width (or height, whichever is larger) of the triangulation. */ + width = xmax - xmin; + if ( ymax - ymin > width ) { + width = ymax - ymin; + } + if ( width == 0.0 ) { + width = 1.0; + } + /* Create the vertices of the bounding box. */ + infpoint1 = (point) malloc( points.itembytes ); + infpoint2 = (point) malloc( points.itembytes ); + infpoint3 = (point) malloc( points.itembytes ); + if ( ( infpoint1 == (point) NULL ) || ( infpoint2 == (point) NULL ) + || ( infpoint3 == (point) NULL ) ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + infpoint1[0] = xmin - 50.0 * width; + infpoint1[1] = ymin - 40.0 * width; + infpoint2[0] = xmax + 50.0 * width; + infpoint2[1] = ymin - 40.0 * width; + infpoint3[0] = 0.5 * ( xmin + xmax ); + infpoint3[1] = ymax + 60.0 * width; + + /* Create the bounding box. */ + maketriangle( &inftri ); + setorg( inftri, infpoint1 ); + setdest( inftri, infpoint2 ); + setapex( inftri, infpoint3 ); + /* Link dummytri to the bounding box so we can always find an */ + /* edge to begin searching (point location) from. */ + dummytri[0] = (triangle) inftri.tri; + if ( verbose > 2 ) { + printf( " Creating " ); + printtriangle( &inftri ); + } } #endif /* not REDUCED */ @@ -7829,83 +7893,82 @@ void boundingbox() #ifndef REDUCED -long removebox() -{ - struct triedge deadtri; - struct triedge searchedge; - struct triedge checkedge; - struct triedge nextedge, finaledge, dissolveedge; - point markorg; - long hullsize; - triangle ptr; /* Temporary variable used by sym(). */ - - if (verbose) { - printf(" Removing triangular bounding box.\n"); - } - /* Find a boundary triangle. */ - nextedge.tri = dummytri; - nextedge.orient = 0; - symself(nextedge); - /* Mark a place to stop. */ - lprev(nextedge, finaledge); - lnextself(nextedge); - symself(nextedge); - /* Find a triangle (on the boundary of the point set) that isn't */ - /* a bounding box triangle. */ - lprev(nextedge, searchedge); - symself(searchedge); - /* Check whether nextedge is another boundary triangle */ - /* adjacent to the first one. */ - lnext(nextedge, checkedge); - symself(checkedge); - if (checkedge.tri == dummytri) { - /* Go on to the next triangle. There are only three boundary */ - /* triangles, and this next triangle cannot be the third one, */ - /* so it's safe to stop here. */ - lprevself(searchedge); - symself(searchedge); - } - /* Find a new boundary edge to search from, as the current search */ - /* edge lies on a bounding box triangle and will be deleted. */ - dummytri[0] = encode(searchedge); - hullsize = -2l; - while (!triedgeequal(nextedge, finaledge)) { - hullsize++; - lprev(nextedge, dissolveedge); - symself(dissolveedge); - /* If not using a PSLG, the vertices should be marked now. */ - /* (If using a PSLG, markhull() will do the job.) */ - if (!poly) { - /* Be careful! One must check for the case where all the input */ - /* points are collinear, and thus all the triangles are part of */ - /* the bounding box. Otherwise, the setpointmark() call below */ - /* will cause a bad pointer reference. */ - if (dissolveedge.tri != dummytri) { - org(dissolveedge, markorg); - if (pointmark(markorg) == 0) { - setpointmark(markorg, 1); - } - } - } - /* Disconnect the bounding box triangle from the mesh triangle. */ - dissolve(dissolveedge); - lnext(nextedge, deadtri); - sym(deadtri, nextedge); - /* Get rid of the bounding box triangle. */ - triangledealloc(deadtri.tri); - /* Do we need to turn the corner? */ - if (nextedge.tri == dummytri) { - /* Turn the corner. */ - triedgecopy(dissolveedge, nextedge); - } - } - triangledealloc(finaledge.tri); - - free(infpoint1); /* Deallocate the bounding box vertices. */ - free(infpoint2); - free(infpoint3); - - return hullsize; +long removebox(){ + struct triedge deadtri; + struct triedge searchedge; + struct triedge checkedge; + struct triedge nextedge, finaledge, dissolveedge; + point markorg; + long hullsize; + triangle ptr; /* Temporary variable used by sym(). */ + + if ( verbose ) { + printf( " Removing triangular bounding box.\n" ); + } + /* Find a boundary triangle. */ + nextedge.tri = dummytri; + nextedge.orient = 0; + symself( nextedge ); + /* Mark a place to stop. */ + lprev( nextedge, finaledge ); + lnextself( nextedge ); + symself( nextedge ); + /* Find a triangle (on the boundary of the point set) that isn't */ + /* a bounding box triangle. */ + lprev( nextedge, searchedge ); + symself( searchedge ); + /* Check whether nextedge is another boundary triangle */ + /* adjacent to the first one. */ + lnext( nextedge, checkedge ); + symself( checkedge ); + if ( checkedge.tri == dummytri ) { + /* Go on to the next triangle. There are only three boundary */ + /* triangles, and this next triangle cannot be the third one, */ + /* so it's safe to stop here. */ + lprevself( searchedge ); + symself( searchedge ); + } + /* Find a new boundary edge to search from, as the current search */ + /* edge lies on a bounding box triangle and will be deleted. */ + dummytri[0] = encode( searchedge ); + hullsize = -2l; + while ( !triedgeequal( nextedge, finaledge ) ) { + hullsize++; + lprev( nextedge, dissolveedge ); + symself( dissolveedge ); + /* If not using a PSLG, the vertices should be marked now. */ + /* (If using a PSLG, markhull() will do the job.) */ + if ( !poly ) { + /* Be careful! One must check for the case where all the input */ + /* points are collinear, and thus all the triangles are part of */ + /* the bounding box. Otherwise, the setpointmark() call below */ + /* will cause a bad pointer reference. */ + if ( dissolveedge.tri != dummytri ) { + org( dissolveedge, markorg ); + if ( pointmark( markorg ) == 0 ) { + setpointmark( markorg, 1 ); + } + } + } + /* Disconnect the bounding box triangle from the mesh triangle. */ + dissolve( dissolveedge ); + lnext( nextedge, deadtri ); + sym( deadtri, nextedge ); + /* Get rid of the bounding box triangle. */ + triangledealloc( deadtri.tri ); + /* Do we need to turn the corner? */ + if ( nextedge.tri == dummytri ) { + /* Turn the corner. */ + triedgecopy( dissolveedge, nextedge ); + } + } + triangledealloc( finaledge.tri ); + + free( infpoint1 ); /* Deallocate the bounding box vertices. */ + free( infpoint2 ); + free( infpoint3 ); + + return hullsize; } #endif /* not REDUCED */ @@ -7919,39 +7982,38 @@ long removebox() #ifndef REDUCED -long incrementaldelaunay() -{ - struct triedge starttri; - point pointloop; - int i; - - /* Create a triangular bounding box. */ - boundingbox(); - if (verbose) { - printf(" Incrementally inserting points.\n"); - } - traversalinit(&points); - pointloop = pointtraverse(); - i = 1; - while (pointloop != (point) NULL) { - /* Find a boundary triangle to search from. */ - starttri.tri = (triangle *) NULL; - if (insertsite(pointloop, &starttri, (struct edge *) NULL, 0, 0) == - DUPLICATEPOINT) { - if (!quiet) { - printf( -"Warning: A duplicate point at (%.12g, %.12g) appeared and was ignored.\n", - pointloop[0], pointloop[1]); - } +long incrementaldelaunay(){ + struct triedge starttri; + point pointloop; + int i; + + /* Create a triangular bounding box. */ + boundingbox(); + if ( verbose ) { + printf( " Incrementally inserting points.\n" ); + } + traversalinit( &points ); + pointloop = pointtraverse(); + i = 1; + while ( pointloop != (point) NULL ) { + /* Find a boundary triangle to search from. */ + starttri.tri = (triangle *) NULL; + if ( insertsite( pointloop, &starttri, (struct edge *) NULL, 0, 0 ) == + DUPLICATEPOINT ) { + if ( !quiet ) { + printf( + "Warning: A duplicate point at (%.12g, %.12g) appeared and was ignored.\n", + pointloop[0], pointloop[1] ); + } /* Commented out - would eliminate point from output .node file. setpointmark(pointloop, DEADPOINT); -*/ - } - pointloop = pointtraverse(); - i++; - } - /* Remove the bounding box. */ - return removebox(); + */ + } + pointloop = pointtraverse(); + i++; + } + /* Remove the bounding box. */ + return removebox(); } #endif /* not REDUCED */ @@ -7966,398 +8028,417 @@ long incrementaldelaunay() #ifndef REDUCED -void eventheapinsert(heap, heapsize, newevent) +void eventheapinsert( heap, heapsize, newevent ) struct event **heap; int heapsize; struct event *newevent; { - REAL eventx, eventy; - int eventnum; - int parent; - int notdone; - - eventx = newevent->xkey; - eventy = newevent->ykey; - eventnum = heapsize; - notdone = eventnum > 0; - while (notdone) { - parent = (eventnum - 1) >> 1; - if ((heap[parent]->ykey < eventy) || - ((heap[parent]->ykey == eventy) - && (heap[parent]->xkey <= eventx))) { - notdone = 0; - } else { - heap[eventnum] = heap[parent]; - heap[eventnum]->heapposition = eventnum; - - eventnum = parent; - notdone = eventnum > 0; - } - } - heap[eventnum] = newevent; - newevent->heapposition = eventnum; + REAL eventx, eventy; + int eventnum; + int parent; + int notdone; + + eventx = newevent->xkey; + eventy = newevent->ykey; + eventnum = heapsize; + notdone = eventnum > 0; + while ( notdone ) { + parent = ( eventnum - 1 ) >> 1; + if ( ( heap[parent]->ykey < eventy ) || + ( ( heap[parent]->ykey == eventy ) + && ( heap[parent]->xkey <= eventx ) ) ) { + notdone = 0; + } + else { + heap[eventnum] = heap[parent]; + heap[eventnum]->heapposition = eventnum; + + eventnum = parent; + notdone = eventnum > 0; + } + } + heap[eventnum] = newevent; + newevent->heapposition = eventnum; } #endif /* not REDUCED */ #ifndef REDUCED -void eventheapify(heap, heapsize, eventnum) +void eventheapify( heap, heapsize, eventnum ) struct event **heap; int heapsize; int eventnum; { - struct event *thisevent; - REAL eventx, eventy; - int leftchild, rightchild; - int smallest; - int notdone; - - thisevent = heap[eventnum]; - eventx = thisevent->xkey; - eventy = thisevent->ykey; - leftchild = 2 * eventnum + 1; - notdone = leftchild < heapsize; - while (notdone) { - if ((heap[leftchild]->ykey < eventy) || - ((heap[leftchild]->ykey == eventy) - && (heap[leftchild]->xkey < eventx))) { - smallest = leftchild; - } else { - smallest = eventnum; - } - rightchild = leftchild + 1; - if (rightchild < heapsize) { - if ((heap[rightchild]->ykey < heap[smallest]->ykey) || - ((heap[rightchild]->ykey == heap[smallest]->ykey) - && (heap[rightchild]->xkey < heap[smallest]->xkey))) { - smallest = rightchild; - } - } - if (smallest == eventnum) { - notdone = 0; - } else { - heap[eventnum] = heap[smallest]; - heap[eventnum]->heapposition = eventnum; - heap[smallest] = thisevent; - thisevent->heapposition = smallest; - - eventnum = smallest; - leftchild = 2 * eventnum + 1; - notdone = leftchild < heapsize; - } - } + struct event *thisevent; + REAL eventx, eventy; + int leftchild, rightchild; + int smallest; + int notdone; + + thisevent = heap[eventnum]; + eventx = thisevent->xkey; + eventy = thisevent->ykey; + leftchild = 2 * eventnum + 1; + notdone = leftchild < heapsize; + while ( notdone ) { + if ( ( heap[leftchild]->ykey < eventy ) || + ( ( heap[leftchild]->ykey == eventy ) + && ( heap[leftchild]->xkey < eventx ) ) ) { + smallest = leftchild; + } + else { + smallest = eventnum; + } + rightchild = leftchild + 1; + if ( rightchild < heapsize ) { + if ( ( heap[rightchild]->ykey < heap[smallest]->ykey ) || + ( ( heap[rightchild]->ykey == heap[smallest]->ykey ) + && ( heap[rightchild]->xkey < heap[smallest]->xkey ) ) ) { + smallest = rightchild; + } + } + if ( smallest == eventnum ) { + notdone = 0; + } + else { + heap[eventnum] = heap[smallest]; + heap[eventnum]->heapposition = eventnum; + heap[smallest] = thisevent; + thisevent->heapposition = smallest; + + eventnum = smallest; + leftchild = 2 * eventnum + 1; + notdone = leftchild < heapsize; + } + } } #endif /* not REDUCED */ #ifndef REDUCED -void eventheapdelete(heap, heapsize, eventnum) +void eventheapdelete( heap, heapsize, eventnum ) struct event **heap; int heapsize; int eventnum; { - struct event *moveevent; - REAL eventx, eventy; - int parent; - int notdone; - - moveevent = heap[heapsize - 1]; - if (eventnum > 0) { - eventx = moveevent->xkey; - eventy = moveevent->ykey; - do { - parent = (eventnum - 1) >> 1; - if ((heap[parent]->ykey < eventy) || - ((heap[parent]->ykey == eventy) - && (heap[parent]->xkey <= eventx))) { - notdone = 0; - } else { - heap[eventnum] = heap[parent]; - heap[eventnum]->heapposition = eventnum; - - eventnum = parent; - notdone = eventnum > 0; - } - } while (notdone); - } - heap[eventnum] = moveevent; - moveevent->heapposition = eventnum; - eventheapify(heap, heapsize - 1, eventnum); + struct event *moveevent; + REAL eventx, eventy; + int parent; + int notdone; + + moveevent = heap[heapsize - 1]; + if ( eventnum > 0 ) { + eventx = moveevent->xkey; + eventy = moveevent->ykey; + do { + parent = ( eventnum - 1 ) >> 1; + if ( ( heap[parent]->ykey < eventy ) || + ( ( heap[parent]->ykey == eventy ) + && ( heap[parent]->xkey <= eventx ) ) ) { + notdone = 0; + } + else { + heap[eventnum] = heap[parent]; + heap[eventnum]->heapposition = eventnum; + + eventnum = parent; + notdone = eventnum > 0; + } + } while ( notdone ); + } + heap[eventnum] = moveevent; + moveevent->heapposition = eventnum; + eventheapify( heap, heapsize - 1, eventnum ); } #endif /* not REDUCED */ #ifndef REDUCED -void createeventheap(eventheap, events, freeevents) +void createeventheap( eventheap, events, freeevents ) struct event ***eventheap; struct event **events; struct event **freeevents; { - point thispoint; - int maxevents; - int i; - - maxevents = (3 * inpoints) / 2; - *eventheap = (struct event **) malloc(maxevents * sizeof(struct event *)); - if (*eventheap == (struct event **) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - *events = (struct event *) malloc(maxevents * sizeof(struct event)); - if (*events == (struct event *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - traversalinit(&points); - for (i = 0; i < inpoints; i++) { - thispoint = pointtraverse(); - (*events)[i].eventptr = (VOID *) thispoint; - (*events)[i].xkey = thispoint[0]; - (*events)[i].ykey = thispoint[1]; - eventheapinsert(*eventheap, i, *events + i); - } - *freeevents = (struct event *) NULL; - for (i = maxevents - 1; i >= inpoints; i--) { - (*events)[i].eventptr = (VOID *) *freeevents; - *freeevents = *events + i; - } + point thispoint; + int maxevents; + int i; + + maxevents = ( 3 * inpoints ) / 2; + *eventheap = (struct event **) malloc( maxevents * sizeof( struct event * ) ); + if ( *eventheap == (struct event **) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + *events = (struct event *) malloc( maxevents * sizeof( struct event ) ); + if ( *events == (struct event *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + traversalinit( &points ); + for ( i = 0; i < inpoints; i++ ) { + thispoint = pointtraverse(); + ( *events )[i].eventptr = (VOID *) thispoint; + ( *events )[i].xkey = thispoint[0]; + ( *events )[i].ykey = thispoint[1]; + eventheapinsert( *eventheap, i, *events + i ); + } + *freeevents = (struct event *) NULL; + for ( i = maxevents - 1; i >= inpoints; i-- ) { + ( *events )[i].eventptr = (VOID *) *freeevents; + *freeevents = *events + i; + } } #endif /* not REDUCED */ #ifndef REDUCED -int rightofhyperbola(fronttri, newsite) +int rightofhyperbola( fronttri, newsite ) struct triedge *fronttri; point newsite; { - point leftpoint, rightpoint; - REAL dxa, dya, dxb, dyb; - - hyperbolacount++; - - dest(*fronttri, leftpoint); - apex(*fronttri, rightpoint); - if ((leftpoint[1] < rightpoint[1]) - || ((leftpoint[1] == rightpoint[1]) && (leftpoint[0] < rightpoint[0]))) { - if (newsite[0] >= rightpoint[0]) { - return 1; - } - } else { - if (newsite[0] <= leftpoint[0]) { - return 0; - } - } - dxa = leftpoint[0] - newsite[0]; - dya = leftpoint[1] - newsite[1]; - dxb = rightpoint[0] - newsite[0]; - dyb = rightpoint[1] - newsite[1]; - return dya * (dxb * dxb + dyb * dyb) > dyb * (dxa * dxa + dya * dya); + point leftpoint, rightpoint; + REAL dxa, dya, dxb, dyb; + + hyperbolacount++; + + dest( *fronttri, leftpoint ); + apex( *fronttri, rightpoint ); + if ( ( leftpoint[1] < rightpoint[1] ) + || ( ( leftpoint[1] == rightpoint[1] ) && ( leftpoint[0] < rightpoint[0] ) ) ) { + if ( newsite[0] >= rightpoint[0] ) { + return 1; + } + } + else { + if ( newsite[0] <= leftpoint[0] ) { + return 0; + } + } + dxa = leftpoint[0] - newsite[0]; + dya = leftpoint[1] - newsite[1]; + dxb = rightpoint[0] - newsite[0]; + dyb = rightpoint[1] - newsite[1]; + return dya * ( dxb * dxb + dyb * dyb ) > dyb * ( dxa * dxa + dya * dya ); } #endif /* not REDUCED */ #ifndef REDUCED -REAL circletop(pa, pb, pc, ccwabc) +REAL circletop( pa, pb, pc, ccwabc ) point pa; point pb; point pc; REAL ccwabc; { - REAL xac, yac, xbc, ybc, xab, yab; - REAL aclen2, bclen2, ablen2; - - circletopcount++; - - xac = pa[0] - pc[0]; - yac = pa[1] - pc[1]; - xbc = pb[0] - pc[0]; - ybc = pb[1] - pc[1]; - xab = pa[0] - pb[0]; - yab = pa[1] - pb[1]; - aclen2 = xac * xac + yac * yac; - bclen2 = xbc * xbc + ybc * ybc; - ablen2 = xab * xab + yab * yab; - return pc[1] + (xac * bclen2 - xbc * aclen2 + sqrt(aclen2 * bclen2 * ablen2)) - / (2.0 * ccwabc); + REAL xac, yac, xbc, ybc, xab, yab; + REAL aclen2, bclen2, ablen2; + + circletopcount++; + + xac = pa[0] - pc[0]; + yac = pa[1] - pc[1]; + xbc = pb[0] - pc[0]; + ybc = pb[1] - pc[1]; + xab = pa[0] - pb[0]; + yab = pa[1] - pb[1]; + aclen2 = xac * xac + yac * yac; + bclen2 = xbc * xbc + ybc * ybc; + ablen2 = xab * xab + yab * yab; + return pc[1] + ( xac * bclen2 - xbc * aclen2 + sqrt( aclen2 * bclen2 * ablen2 ) ) + / ( 2.0 * ccwabc ); } #endif /* not REDUCED */ #ifndef REDUCED -void check4deadevent(checktri, freeevents, eventheap, heapsize) +void check4deadevent( checktri, freeevents, eventheap, heapsize ) struct triedge *checktri; struct event **freeevents; struct event **eventheap; int *heapsize; { - struct event *deadevent; - point eventpoint; - int eventnum; - - org(*checktri, eventpoint); - if (eventpoint != (point) NULL) { - deadevent = (struct event *) eventpoint; - eventnum = deadevent->heapposition; - deadevent->eventptr = (VOID *) *freeevents; - *freeevents = deadevent; - eventheapdelete(eventheap, *heapsize, eventnum); - (*heapsize)--; - setorg(*checktri, NULL); - } + struct event *deadevent; + point eventpoint; + int eventnum; + + org( *checktri, eventpoint ); + if ( eventpoint != (point) NULL ) { + deadevent = (struct event *) eventpoint; + eventnum = deadevent->heapposition; + deadevent->eventptr = (VOID *) *freeevents; + *freeevents = deadevent; + eventheapdelete( eventheap, *heapsize, eventnum ); + ( *heapsize )--; + setorg( *checktri, NULL ); + } } #endif /* not REDUCED */ #ifndef REDUCED -struct splaynode *splay(splaytree, searchpoint, searchtri) +struct splaynode *splay( splaytree, searchpoint, searchtri ) struct splaynode *splaytree; point searchpoint; struct triedge *searchtri; { - struct splaynode *child, *grandchild; - struct splaynode *lefttree, *righttree; - struct splaynode *leftright; - point checkpoint; - int rightofroot, rightofchild; - - if (splaytree == (struct splaynode *) NULL) { - return (struct splaynode *) NULL; - } - dest(splaytree->keyedge, checkpoint); - if (checkpoint == splaytree->keydest) { - rightofroot = rightofhyperbola(&splaytree->keyedge, searchpoint); - if (rightofroot) { - triedgecopy(splaytree->keyedge, *searchtri); - child = splaytree->rchild; - } else { - child = splaytree->lchild; - } - if (child == (struct splaynode *) NULL) { - return splaytree; - } - dest(child->keyedge, checkpoint); - if (checkpoint != child->keydest) { - child = splay(child, searchpoint, searchtri); - if (child == (struct splaynode *) NULL) { - if (rightofroot) { - splaytree->rchild = (struct splaynode *) NULL; - } else { - splaytree->lchild = (struct splaynode *) NULL; - } - return splaytree; - } - } - rightofchild = rightofhyperbola(&child->keyedge, searchpoint); - if (rightofchild) { - triedgecopy(child->keyedge, *searchtri); - grandchild = splay(child->rchild, searchpoint, searchtri); - child->rchild = grandchild; - } else { - grandchild = splay(child->lchild, searchpoint, searchtri); - child->lchild = grandchild; - } - if (grandchild == (struct splaynode *) NULL) { - if (rightofroot) { - splaytree->rchild = child->lchild; - child->lchild = splaytree; - } else { - splaytree->lchild = child->rchild; - child->rchild = splaytree; - } - return child; - } - if (rightofchild) { - if (rightofroot) { - splaytree->rchild = child->lchild; - child->lchild = splaytree; - } else { - splaytree->lchild = grandchild->rchild; - grandchild->rchild = splaytree; - } - child->rchild = grandchild->lchild; - grandchild->lchild = child; - } else { - if (rightofroot) { - splaytree->rchild = grandchild->lchild; - grandchild->lchild = splaytree; - } else { - splaytree->lchild = child->rchild; - child->rchild = splaytree; - } - child->lchild = grandchild->rchild; - grandchild->rchild = child; - } - return grandchild; - } else { - lefttree = splay(splaytree->lchild, searchpoint, searchtri); - righttree = splay(splaytree->rchild, searchpoint, searchtri); - - pooldealloc(&splaynodes, (VOID *) splaytree); - if (lefttree == (struct splaynode *) NULL) { - return righttree; - } else if (righttree == (struct splaynode *) NULL) { - return lefttree; - } else if (lefttree->rchild == (struct splaynode *) NULL) { - lefttree->rchild = righttree->lchild; - righttree->lchild = lefttree; - return righttree; - } else if (righttree->lchild == (struct splaynode *) NULL) { - righttree->lchild = lefttree->rchild; - lefttree->rchild = righttree; - return lefttree; - } else { + struct splaynode *child, *grandchild; + struct splaynode *lefttree, *righttree; + struct splaynode *leftright; + point checkpoint; + int rightofroot, rightofchild; + + if ( splaytree == (struct splaynode *) NULL ) { + return (struct splaynode *) NULL; + } + dest( splaytree->keyedge, checkpoint ); + if ( checkpoint == splaytree->keydest ) { + rightofroot = rightofhyperbola( &splaytree->keyedge, searchpoint ); + if ( rightofroot ) { + triedgecopy( splaytree->keyedge, *searchtri ); + child = splaytree->rchild; + } + else { + child = splaytree->lchild; + } + if ( child == (struct splaynode *) NULL ) { + return splaytree; + } + dest( child->keyedge, checkpoint ); + if ( checkpoint != child->keydest ) { + child = splay( child, searchpoint, searchtri ); + if ( child == (struct splaynode *) NULL ) { + if ( rightofroot ) { + splaytree->rchild = (struct splaynode *) NULL; + } + else { + splaytree->lchild = (struct splaynode *) NULL; + } + return splaytree; + } + } + rightofchild = rightofhyperbola( &child->keyedge, searchpoint ); + if ( rightofchild ) { + triedgecopy( child->keyedge, *searchtri ); + grandchild = splay( child->rchild, searchpoint, searchtri ); + child->rchild = grandchild; + } + else { + grandchild = splay( child->lchild, searchpoint, searchtri ); + child->lchild = grandchild; + } + if ( grandchild == (struct splaynode *) NULL ) { + if ( rightofroot ) { + splaytree->rchild = child->lchild; + child->lchild = splaytree; + } + else { + splaytree->lchild = child->rchild; + child->rchild = splaytree; + } + return child; + } + if ( rightofchild ) { + if ( rightofroot ) { + splaytree->rchild = child->lchild; + child->lchild = splaytree; + } + else { + splaytree->lchild = grandchild->rchild; + grandchild->rchild = splaytree; + } + child->rchild = grandchild->lchild; + grandchild->lchild = child; + } + else { + if ( rightofroot ) { + splaytree->rchild = grandchild->lchild; + grandchild->lchild = splaytree; + } + else { + splaytree->lchild = child->rchild; + child->rchild = splaytree; + } + child->lchild = grandchild->rchild; + grandchild->rchild = child; + } + return grandchild; + } + else { + lefttree = splay( splaytree->lchild, searchpoint, searchtri ); + righttree = splay( splaytree->rchild, searchpoint, searchtri ); + + pooldealloc( &splaynodes, (VOID *) splaytree ); + if ( lefttree == (struct splaynode *) NULL ) { + return righttree; + } + else if ( righttree == (struct splaynode *) NULL ) { + return lefttree; + } + else if ( lefttree->rchild == (struct splaynode *) NULL ) { + lefttree->rchild = righttree->lchild; + righttree->lchild = lefttree; + return righttree; + } + else if ( righttree->lchild == (struct splaynode *) NULL ) { + righttree->lchild = lefttree->rchild; + lefttree->rchild = righttree; + return lefttree; + } + else { /* printf("Holy Toledo!!!\n"); */ - leftright = lefttree->rchild; - while (leftright->rchild != (struct splaynode *) NULL) { - leftright = leftright->rchild; - } - leftright->rchild = righttree; - return lefttree; - } - } + leftright = lefttree->rchild; + while ( leftright->rchild != (struct splaynode *) NULL ) { + leftright = leftright->rchild; + } + leftright->rchild = righttree; + return lefttree; + } + } } #endif /* not REDUCED */ #ifndef REDUCED -struct splaynode *splayinsert(splayroot, newkey, searchpoint) +struct splaynode *splayinsert( splayroot, newkey, searchpoint ) struct splaynode *splayroot; struct triedge *newkey; point searchpoint; { - struct splaynode *newsplaynode; - - newsplaynode = (struct splaynode *) poolalloc(&splaynodes); - triedgecopy(*newkey, newsplaynode->keyedge); - dest(*newkey, newsplaynode->keydest); - if (splayroot == (struct splaynode *) NULL) { - newsplaynode->lchild = (struct splaynode *) NULL; - newsplaynode->rchild = (struct splaynode *) NULL; - } else if (rightofhyperbola(&splayroot->keyedge, searchpoint)) { - newsplaynode->lchild = splayroot; - newsplaynode->rchild = splayroot->rchild; - splayroot->rchild = (struct splaynode *) NULL; - } else { - newsplaynode->lchild = splayroot->lchild; - newsplaynode->rchild = splayroot; - splayroot->lchild = (struct splaynode *) NULL; - } - return newsplaynode; + struct splaynode *newsplaynode; + + newsplaynode = (struct splaynode *) poolalloc( &splaynodes ); + triedgecopy( *newkey, newsplaynode->keyedge ); + dest( *newkey, newsplaynode->keydest ); + if ( splayroot == (struct splaynode *) NULL ) { + newsplaynode->lchild = (struct splaynode *) NULL; + newsplaynode->rchild = (struct splaynode *) NULL; + } + else if ( rightofhyperbola( &splayroot->keyedge, searchpoint ) ) { + newsplaynode->lchild = splayroot; + newsplaynode->rchild = splayroot->rchild; + splayroot->rchild = (struct splaynode *) NULL; + } + else { + newsplaynode->lchild = splayroot->lchild; + newsplaynode->rchild = splayroot; + splayroot->lchild = (struct splaynode *) NULL; + } + return newsplaynode; } #endif /* not REDUCED */ #ifndef REDUCED -struct splaynode *circletopinsert(splayroot, newkey, pa, pb, pc, topy) +struct splaynode *circletopinsert( splayroot, newkey, pa, pb, pc, topy ) struct splaynode *splayroot; struct triedge *newkey; point pa; @@ -8365,176 +8446,177 @@ point pb; point pc; REAL topy; { - REAL ccwabc; - REAL xac, yac, xbc, ybc; - REAL aclen2, bclen2; - REAL searchpoint[2]; - struct triedge dummytri; - - ccwabc = counterclockwise(pa, pb, pc); - xac = pa[0] - pc[0]; - yac = pa[1] - pc[1]; - xbc = pb[0] - pc[0]; - ybc = pb[1] - pc[1]; - aclen2 = xac * xac + yac * yac; - bclen2 = xbc * xbc + ybc * ybc; - searchpoint[0] = pc[0] - (yac * bclen2 - ybc * aclen2) / (2.0 * ccwabc); - searchpoint[1] = topy; - return splayinsert(splay(splayroot, (point) searchpoint, &dummytri), newkey, - (point) searchpoint); + REAL ccwabc; + REAL xac, yac, xbc, ybc; + REAL aclen2, bclen2; + REAL searchpoint[2]; + struct triedge dummytri; + + ccwabc = counterclockwise( pa, pb, pc ); + xac = pa[0] - pc[0]; + yac = pa[1] - pc[1]; + xbc = pb[0] - pc[0]; + ybc = pb[1] - pc[1]; + aclen2 = xac * xac + yac * yac; + bclen2 = xbc * xbc + ybc * ybc; + searchpoint[0] = pc[0] - ( yac * bclen2 - ybc * aclen2 ) / ( 2.0 * ccwabc ); + searchpoint[1] = topy; + return splayinsert( splay( splayroot, (point) searchpoint, &dummytri ), newkey, + (point) searchpoint ); } #endif /* not REDUCED */ #ifndef REDUCED -struct splaynode *frontlocate(splayroot, bottommost, searchpoint, searchtri, - farright) +struct splaynode *frontlocate( splayroot, bottommost, searchpoint, searchtri, + farright ) struct splaynode *splayroot; struct triedge *bottommost; point searchpoint; struct triedge *searchtri; int *farright; { - int farrightflag; - triangle ptr; /* Temporary variable used by onext(). */ - - triedgecopy(*bottommost, *searchtri); - splayroot = splay(splayroot, searchpoint, searchtri); - - farrightflag = 0; - while (!farrightflag && rightofhyperbola(searchtri, searchpoint)) { - onextself(*searchtri); - farrightflag = triedgeequal(*searchtri, *bottommost); - } - *farright = farrightflag; - return splayroot; + int farrightflag; + triangle ptr; /* Temporary variable used by onext(). */ + + triedgecopy( *bottommost, *searchtri ); + splayroot = splay( splayroot, searchpoint, searchtri ); + + farrightflag = 0; + while ( !farrightflag && rightofhyperbola( searchtri, searchpoint ) ) { + onextself( *searchtri ); + farrightflag = triedgeequal( *searchtri, *bottommost ); + } + *farright = farrightflag; + return splayroot; } #endif /* not REDUCED */ #ifndef REDUCED -long sweeplinedelaunay() -{ - struct event **eventheap; - struct event *events; - struct event *freeevents; - struct event *nextevent; - struct event *newevent; - struct splaynode *splayroot; - struct triedge bottommost; - struct triedge searchtri; - struct triedge fliptri; - struct triedge lefttri, righttri, farlefttri, farrighttri; - struct triedge inserttri; - point firstpoint, secondpoint; - point nextpoint, lastpoint; - point connectpoint; - point leftpoint, midpoint, rightpoint; - REAL lefttest, righttest; - int heapsize; - int check4events, farrightflag; - triangle ptr; /* Temporary variable used by sym(), onext(), and oprev(). */ - - poolinit(&splaynodes, sizeof(struct splaynode), SPLAYNODEPERBLOCK, POINTER, - 0); - splayroot = (struct splaynode *) NULL; - - if (verbose) { - printf(" Placing points in event heap.\n"); - } - createeventheap(&eventheap, &events, &freeevents); - heapsize = inpoints; - - if (verbose) { - printf(" Forming triangulation.\n"); - } - maketriangle(&lefttri); - maketriangle(&righttri); - bond(lefttri, righttri); - lnextself(lefttri); - lprevself(righttri); - bond(lefttri, righttri); - lnextself(lefttri); - lprevself(righttri); - bond(lefttri, righttri); - firstpoint = (point) eventheap[0]->eventptr; - eventheap[0]->eventptr = (VOID *) freeevents; - freeevents = eventheap[0]; - eventheapdelete(eventheap, heapsize, 0); - heapsize--; - do { - if (heapsize == 0) { - printf("Error: Input points are all identical.\n"); - exit(1); - } - secondpoint = (point) eventheap[0]->eventptr; - eventheap[0]->eventptr = (VOID *) freeevents; - freeevents = eventheap[0]; - eventheapdelete(eventheap, heapsize, 0); - heapsize--; - if ((firstpoint[0] == secondpoint[0]) - && (firstpoint[1] == secondpoint[1])) { - printf( -"Warning: A duplicate point at (%.12g, %.12g) appeared and was ignored.\n", - secondpoint[0], secondpoint[1]); +long sweeplinedelaunay(){ + struct event **eventheap; + struct event *events; + struct event *freeevents; + struct event *nextevent; + struct event *newevent; + struct splaynode *splayroot; + struct triedge bottommost; + struct triedge searchtri; + struct triedge fliptri; + struct triedge lefttri, righttri, farlefttri, farrighttri; + struct triedge inserttri; + point firstpoint, secondpoint; + point nextpoint, lastpoint; + point connectpoint; + point leftpoint, midpoint, rightpoint; + REAL lefttest, righttest; + int heapsize; + int check4events, farrightflag; + triangle ptr; /* Temporary variable used by sym(), onext(), and oprev(). */ + + poolinit( &splaynodes, sizeof( struct splaynode ), SPLAYNODEPERBLOCK, POINTER, + 0 ); + splayroot = (struct splaynode *) NULL; + + if ( verbose ) { + printf( " Placing points in event heap.\n" ); + } + createeventheap( &eventheap, &events, &freeevents ); + heapsize = inpoints; + + if ( verbose ) { + printf( " Forming triangulation.\n" ); + } + maketriangle( &lefttri ); + maketriangle( &righttri ); + bond( lefttri, righttri ); + lnextself( lefttri ); + lprevself( righttri ); + bond( lefttri, righttri ); + lnextself( lefttri ); + lprevself( righttri ); + bond( lefttri, righttri ); + firstpoint = (point) eventheap[0]->eventptr; + eventheap[0]->eventptr = (VOID *) freeevents; + freeevents = eventheap[0]; + eventheapdelete( eventheap, heapsize, 0 ); + heapsize--; + do { + if ( heapsize == 0 ) { + printf( "Error: Input points are all identical.\n" ); + exit( 1 ); + } + secondpoint = (point) eventheap[0]->eventptr; + eventheap[0]->eventptr = (VOID *) freeevents; + freeevents = eventheap[0]; + eventheapdelete( eventheap, heapsize, 0 ); + heapsize--; + if ( ( firstpoint[0] == secondpoint[0] ) + && ( firstpoint[1] == secondpoint[1] ) ) { + printf( + "Warning: A duplicate point at (%.12g, %.12g) appeared and was ignored.\n", + secondpoint[0], secondpoint[1] ); /* Commented out - would eliminate point from output .node file. setpointmark(secondpoint, DEADPOINT); -*/ - } - } while ((firstpoint[0] == secondpoint[0]) - && (firstpoint[1] == secondpoint[1])); - setorg(lefttri, firstpoint); - setdest(lefttri, secondpoint); - setorg(righttri, secondpoint); - setdest(righttri, firstpoint); - lprev(lefttri, bottommost); - lastpoint = secondpoint; - while (heapsize > 0) { - nextevent = eventheap[0]; - eventheapdelete(eventheap, heapsize, 0); - heapsize--; - check4events = 1; - if (nextevent->xkey < xmin) { - decode(nextevent->eventptr, fliptri); - oprev(fliptri, farlefttri); - check4deadevent(&farlefttri, &freeevents, eventheap, &heapsize); - onext(fliptri, farrighttri); - check4deadevent(&farrighttri, &freeevents, eventheap, &heapsize); - - if (triedgeequal(farlefttri, bottommost)) { - lprev(fliptri, bottommost); - } - flip(&fliptri); - setapex(fliptri, NULL); - lprev(fliptri, lefttri); - lnext(fliptri, righttri); - sym(lefttri, farlefttri); - - if (randomnation(SAMPLERATE) == 0) { - symself(fliptri); - dest(fliptri, leftpoint); - apex(fliptri, midpoint); - org(fliptri, rightpoint); - splayroot = circletopinsert(splayroot, &lefttri, leftpoint, midpoint, - rightpoint, nextevent->ykey); - } - } else { - nextpoint = (point) nextevent->eventptr; - if ((nextpoint[0] == lastpoint[0]) && (nextpoint[1] == lastpoint[1])) { - printf( -"Warning: A duplicate point at (%.12g, %.12g) appeared and was ignored.\n", - nextpoint[0], nextpoint[1]); + */ + } + } while ( ( firstpoint[0] == secondpoint[0] ) + && ( firstpoint[1] == secondpoint[1] ) ); + setorg( lefttri, firstpoint ); + setdest( lefttri, secondpoint ); + setorg( righttri, secondpoint ); + setdest( righttri, firstpoint ); + lprev( lefttri, bottommost ); + lastpoint = secondpoint; + while ( heapsize > 0 ) { + nextevent = eventheap[0]; + eventheapdelete( eventheap, heapsize, 0 ); + heapsize--; + check4events = 1; + if ( nextevent->xkey < xmin ) { + decode( nextevent->eventptr, fliptri ); + oprev( fliptri, farlefttri ); + check4deadevent( &farlefttri, &freeevents, eventheap, &heapsize ); + onext( fliptri, farrighttri ); + check4deadevent( &farrighttri, &freeevents, eventheap, &heapsize ); + + if ( triedgeequal( farlefttri, bottommost ) ) { + lprev( fliptri, bottommost ); + } + flip( &fliptri ); + setapex( fliptri, NULL ); + lprev( fliptri, lefttri ); + lnext( fliptri, righttri ); + sym( lefttri, farlefttri ); + + if ( randomnation( SAMPLERATE ) == 0 ) { + symself( fliptri ); + dest( fliptri, leftpoint ); + apex( fliptri, midpoint ); + org( fliptri, rightpoint ); + splayroot = circletopinsert( splayroot, &lefttri, leftpoint, midpoint, + rightpoint, nextevent->ykey ); + } + } + else { + nextpoint = (point) nextevent->eventptr; + if ( ( nextpoint[0] == lastpoint[0] ) && ( nextpoint[1] == lastpoint[1] ) ) { + printf( + "Warning: A duplicate point at (%.12g, %.12g) appeared and was ignored.\n", + nextpoint[0], nextpoint[1] ); /* Commented out - would eliminate point from output .node file. setpointmark(nextpoint, DEADPOINT); -*/ - check4events = 0; - } else { - lastpoint = nextpoint; - - splayroot = frontlocate(splayroot, &bottommost, nextpoint, &searchtri, - &farrightflag); + */ + check4events = 0; + } + else { + lastpoint = nextpoint; + + splayroot = frontlocate( splayroot, &bottommost, nextpoint, &searchtri, + &farrightflag ); /* triedgecopy(bottommost, searchtri); farrightflag = 0; @@ -8542,79 +8624,80 @@ long sweeplinedelaunay() onextself(searchtri); farrightflag = triedgeequal(searchtri, bottommost); } -*/ - - check4deadevent(&searchtri, &freeevents, eventheap, &heapsize); - - triedgecopy(searchtri, farrighttri); - sym(searchtri, farlefttri); - maketriangle(&lefttri); - maketriangle(&righttri); - dest(farrighttri, connectpoint); - setorg(lefttri, connectpoint); - setdest(lefttri, nextpoint); - setorg(righttri, nextpoint); - setdest(righttri, connectpoint); - bond(lefttri, righttri); - lnextself(lefttri); - lprevself(righttri); - bond(lefttri, righttri); - lnextself(lefttri); - lprevself(righttri); - bond(lefttri, farlefttri); - bond(righttri, farrighttri); - if (!farrightflag && triedgeequal(farrighttri, bottommost)) { - triedgecopy(lefttri, bottommost); - } + */ + + check4deadevent( &searchtri, &freeevents, eventheap, &heapsize ); + + triedgecopy( searchtri, farrighttri ); + sym( searchtri, farlefttri ); + maketriangle( &lefttri ); + maketriangle( &righttri ); + dest( farrighttri, connectpoint ); + setorg( lefttri, connectpoint ); + setdest( lefttri, nextpoint ); + setorg( righttri, nextpoint ); + setdest( righttri, connectpoint ); + bond( lefttri, righttri ); + lnextself( lefttri ); + lprevself( righttri ); + bond( lefttri, righttri ); + lnextself( lefttri ); + lprevself( righttri ); + bond( lefttri, farlefttri ); + bond( righttri, farrighttri ); + if ( !farrightflag && triedgeequal( farrighttri, bottommost ) ) { + triedgecopy( lefttri, bottommost ); + } + + if ( randomnation( SAMPLERATE ) == 0 ) { + splayroot = splayinsert( splayroot, &lefttri, nextpoint ); + } + else if ( randomnation( SAMPLERATE ) == 0 ) { + lnext( righttri, inserttri ); + splayroot = splayinsert( splayroot, &inserttri, nextpoint ); + } + } + } + nextevent->eventptr = (VOID *) freeevents; + freeevents = nextevent; + + if ( check4events ) { + apex( farlefttri, leftpoint ); + dest( lefttri, midpoint ); + apex( lefttri, rightpoint ); + lefttest = counterclockwise( leftpoint, midpoint, rightpoint ); + if ( lefttest > 0.0 ) { + newevent = freeevents; + freeevents = (struct event *) freeevents->eventptr; + newevent->xkey = xminextreme; + newevent->ykey = circletop( leftpoint, midpoint, rightpoint, + lefttest ); + newevent->eventptr = (VOID *) encode( lefttri ); + eventheapinsert( eventheap, heapsize, newevent ); + heapsize++; + setorg( lefttri, newevent ); + } + apex( righttri, leftpoint ); + org( righttri, midpoint ); + apex( farrighttri, rightpoint ); + righttest = counterclockwise( leftpoint, midpoint, rightpoint ); + if ( righttest > 0.0 ) { + newevent = freeevents; + freeevents = (struct event *) freeevents->eventptr; + newevent->xkey = xminextreme; + newevent->ykey = circletop( leftpoint, midpoint, rightpoint, + righttest ); + newevent->eventptr = (VOID *) encode( farrighttri ); + eventheapinsert( eventheap, heapsize, newevent ); + heapsize++; + setorg( farrighttri, newevent ); + } + } + } - if (randomnation(SAMPLERATE) == 0) { - splayroot = splayinsert(splayroot, &lefttri, nextpoint); - } else if (randomnation(SAMPLERATE) == 0) { - lnext(righttri, inserttri); - splayroot = splayinsert(splayroot, &inserttri, nextpoint); - } - } - } - nextevent->eventptr = (VOID *) freeevents; - freeevents = nextevent; - - if (check4events) { - apex(farlefttri, leftpoint); - dest(lefttri, midpoint); - apex(lefttri, rightpoint); - lefttest = counterclockwise(leftpoint, midpoint, rightpoint); - if (lefttest > 0.0) { - newevent = freeevents; - freeevents = (struct event *) freeevents->eventptr; - newevent->xkey = xminextreme; - newevent->ykey = circletop(leftpoint, midpoint, rightpoint, - lefttest); - newevent->eventptr = (VOID *) encode(lefttri); - eventheapinsert(eventheap, heapsize, newevent); - heapsize++; - setorg(lefttri, newevent); - } - apex(righttri, leftpoint); - org(righttri, midpoint); - apex(farrighttri, rightpoint); - righttest = counterclockwise(leftpoint, midpoint, rightpoint); - if (righttest > 0.0) { - newevent = freeevents; - freeevents = (struct event *) freeevents->eventptr; - newevent->xkey = xminextreme; - newevent->ykey = circletop(leftpoint, midpoint, rightpoint, - righttest); - newevent->eventptr = (VOID *) encode(farrighttri); - eventheapinsert(eventheap, heapsize, newevent); - heapsize++; - setorg(farrighttri, newevent); - } - } - } - - pooldeinit(&splaynodes); - lprevself(bottommost); - return removeghosts(&bottommost); + pooldeinit( &splaynodes ); + lprevself( bottommost ); + return removeghosts( &bottommost ); } #endif /* not REDUCED */ @@ -8633,35 +8716,38 @@ long sweeplinedelaunay() /* */ /*****************************************************************************/ -long delaunay() -{ - eextras = 0; - initializetrisegpools(); +long delaunay(){ + eextras = 0; + initializetrisegpools(); #ifdef REDUCED - if (!quiet) { - printf( - "Constructing Delaunay triangulation by divide-and-conquer method.\n"); - } - return divconqdelaunay(); + if ( !quiet ) { + printf( + "Constructing Delaunay triangulation by divide-and-conquer method.\n" ); + } + return divconqdelaunay(); #else /* not REDUCED */ - if (!quiet) { - printf("Constructing Delaunay triangulation "); - if (incremental) { - printf("by incremental method.\n"); - } else if (sweepline) { - printf("by sweepline method.\n"); - } else { - printf("by divide-and-conquer method.\n"); - } - } - if (incremental) { - return incrementaldelaunay(); - } else if (sweepline) { - return sweeplinedelaunay(); - } else { - return divconqdelaunay(); - } + if ( !quiet ) { + printf( "Constructing Delaunay triangulation " ); + if ( incremental ) { + printf( "by incremental method.\n" ); + } + else if ( sweepline ) { + printf( "by sweepline method.\n" ); + } + else { + printf( "by divide-and-conquer method.\n" ); + } + } + if ( incremental ) { + return incrementaldelaunay(); + } + else if ( sweepline ) { + return sweeplinedelaunay(); + } + else { + return divconqdelaunay(); + } #endif /* not REDUCED */ } @@ -8694,9 +8780,9 @@ long delaunay() #ifdef TRILIBRARY -int reconstruct(trianglelist, triangleattriblist, trianglearealist, elements, - corners, attribs, segmentlist, segmentmarkerlist, - numberofsegments) +int reconstruct( trianglelist, triangleattriblist, trianglearealist, elements, + corners, attribs, segmentlist, segmentmarkerlist, + numberofsegments ) int *trianglelist; REAL *triangleattriblist; REAL *trianglearealist; @@ -8709,7 +8795,7 @@ int numberofsegments; #else /* not TRILIBRARY */ -long reconstruct(elefilename, areafilename, polyfilename, polyfile) +long reconstruct( elefilename, areafilename, polyfilename, polyfile ) char *elefilename; char *areafilename; char *polyfilename; @@ -8719,433 +8805,442 @@ FILE *polyfile; { #ifdef TRILIBRARY - int pointindex; - int attribindex; + int pointindex; + int attribindex; #else /* not TRILIBRARY */ - FILE *elefile; - FILE *areafile; - char inputline[INPUTLINESIZE]; - char *stringptr; - int areaelements; + FILE *elefile; + FILE *areafile; + char inputline[INPUTLINESIZE]; + char *stringptr; + int areaelements; #endif /* not TRILIBRARY */ - struct triedge triangleloop; - struct triedge triangleleft; - struct triedge checktri; - struct triedge checkleft; - struct triedge checkneighbor; - struct edge shelleloop; - triangle *vertexarray; - triangle *prevlink; - triangle nexttri; - point tdest, tapex; - point checkdest, checkapex; - point shorg; - point killpoint; - REAL area; - int corner[3]; - int end[2]; - int killpointindex; - int incorners; - int segmentmarkers; - int boundmarker; - int aroundpoint; - long hullsize; - int notfound; - int elementnumber, segmentnumber; - int i, j; - triangle ptr; /* Temporary variable used by sym(). */ + struct triedge triangleloop; + struct triedge triangleleft; + struct triedge checktri; + struct triedge checkleft; + struct triedge checkneighbor; + struct edge shelleloop; + triangle *vertexarray; + triangle *prevlink; + triangle nexttri; + point tdest, tapex; + point checkdest, checkapex; + point shorg; + point killpoint; + REAL area; + int corner[3]; + int end[2]; + int killpointindex; + int incorners; + int segmentmarkers; + int boundmarker; + int aroundpoint; + long hullsize; + int notfound; + int elementnumber, segmentnumber; + int i, j; + triangle ptr; /* Temporary variable used by sym(). */ #ifdef TRILIBRARY - inelements = elements; - incorners = corners; - if (incorners < 3) { - printf("Error: Triangles must have at least 3 points.\n"); - exit(1); - } - eextras = attribs; + inelements = elements; + incorners = corners; + if ( incorners < 3 ) { + printf( "Error: Triangles must have at least 3 points.\n" ); + exit( 1 ); + } + eextras = attribs; #else /* not TRILIBRARY */ - /* Read the triangles from an .ele file. */ - if (!quiet) { - printf("Opening %s.\n", elefilename); - } - elefile = fopen(elefilename, "r"); - if (elefile == (FILE *) NULL) { - printf(" Error: Cannot access file %s.\n", elefilename); - exit(1); - } - /* Read number of triangles, number of points per triangle, and */ - /* number of triangle attributes from .ele file. */ - stringptr = readline(inputline, elefile, elefilename); - inelements = (int) strtol (stringptr, &stringptr, 0); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - incorners = 3; - } else { - incorners = (int) strtol (stringptr, &stringptr, 0); - if (incorners < 3) { - printf("Error: Triangles in %s must have at least 3 points.\n", - elefilename); - exit(1); - } - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - eextras = 0; - } else { - eextras = (int) strtol (stringptr, &stringptr, 0); - } + /* Read the triangles from an .ele file. */ + if ( !quiet ) { + printf( "Opening %s.\n", elefilename ); + } + elefile = fopen( elefilename, "r" ); + if ( elefile == (FILE *) NULL ) { + printf( " Error: Cannot access file %s.\n", elefilename ); + exit( 1 ); + } + /* Read number of triangles, number of points per triangle, and */ + /* number of triangle attributes from .ele file. */ + stringptr = readline( inputline, elefile, elefilename ); + inelements = (int) strtol( stringptr, &stringptr, 0 ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + incorners = 3; + } + else { + incorners = (int) strtol( stringptr, &stringptr, 0 ); + if ( incorners < 3 ) { + printf( "Error: Triangles in %s must have at least 3 points.\n", + elefilename ); + exit( 1 ); + } + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + eextras = 0; + } + else { + eextras = (int) strtol( stringptr, &stringptr, 0 ); + } #endif /* not TRILIBRARY */ - initializetrisegpools(); + initializetrisegpools(); - /* Create the triangles. */ - for (elementnumber = 1; elementnumber <= inelements; elementnumber++) { - maketriangle(&triangleloop); - /* Mark the triangle as living. */ - triangleloop.tri[3] = (triangle) triangleloop.tri; - } + /* Create the triangles. */ + for ( elementnumber = 1; elementnumber <= inelements; elementnumber++ ) { + maketriangle( &triangleloop ); + /* Mark the triangle as living. */ + triangleloop.tri[3] = (triangle) triangleloop.tri; + } - if (poly) { + if ( poly ) { #ifdef TRILIBRARY - insegments = numberofsegments; - segmentmarkers = segmentmarkerlist != (int *) NULL; + insegments = numberofsegments; + segmentmarkers = segmentmarkerlist != (int *) NULL; #else /* not TRILIBRARY */ - /* Read number of segments and number of segment */ - /* boundary markers from .poly file. */ - stringptr = readline(inputline, polyfile, inpolyfilename); - insegments = (int) strtol (stringptr, &stringptr, 0); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - segmentmarkers = 0; - } else { - segmentmarkers = (int) strtol (stringptr, &stringptr, 0); - } + /* Read number of segments and number of segment */ + /* boundary markers from .poly file. */ + stringptr = readline( inputline, polyfile, inpolyfilename ); + insegments = (int) strtol( stringptr, &stringptr, 0 ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + segmentmarkers = 0; + } + else { + segmentmarkers = (int) strtol( stringptr, &stringptr, 0 ); + } #endif /* not TRILIBRARY */ - /* Create the shell edges. */ - for (segmentnumber = 1; segmentnumber <= insegments; segmentnumber++) { - makeshelle(&shelleloop); - /* Mark the shell edge as living. */ - shelleloop.sh[2] = (shelle) shelleloop.sh; - } - } + /* Create the shell edges. */ + for ( segmentnumber = 1; segmentnumber <= insegments; segmentnumber++ ) { + makeshelle( &shelleloop ); + /* Mark the shell edge as living. */ + shelleloop.sh[2] = (shelle) shelleloop.sh; + } + } #ifdef TRILIBRARY - pointindex = 0; - attribindex = 0; + pointindex = 0; + attribindex = 0; #else /* not TRILIBRARY */ - if (vararea) { - /* Open an .area file, check for consistency with the .ele file. */ - if (!quiet) { - printf("Opening %s.\n", areafilename); - } - areafile = fopen(areafilename, "r"); - if (areafile == (FILE *) NULL) { - printf(" Error: Cannot access file %s.\n", areafilename); - exit(1); - } - stringptr = readline(inputline, areafile, areafilename); - areaelements = (int) strtol (stringptr, &stringptr, 0); - if (areaelements != inelements) { - printf("Error: %s and %s disagree on number of triangles.\n", - elefilename, areafilename); - exit(1); - } - } + if ( vararea ) { + /* Open an .area file, check for consistency with the .ele file. */ + if ( !quiet ) { + printf( "Opening %s.\n", areafilename ); + } + areafile = fopen( areafilename, "r" ); + if ( areafile == (FILE *) NULL ) { + printf( " Error: Cannot access file %s.\n", areafilename ); + exit( 1 ); + } + stringptr = readline( inputline, areafile, areafilename ); + areaelements = (int) strtol( stringptr, &stringptr, 0 ); + if ( areaelements != inelements ) { + printf( "Error: %s and %s disagree on number of triangles.\n", + elefilename, areafilename ); + exit( 1 ); + } + } #endif /* not TRILIBRARY */ - if (!quiet) { - printf("Reconstructing mesh.\n"); - } - /* Allocate a temporary array that maps each point to some adjacent */ - /* triangle. I took care to allocate all the permanent memory for */ - /* triangles and shell edges first. */ - vertexarray = (triangle *) malloc(points.items * sizeof(triangle)); - if (vertexarray == (triangle *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - /* Each point is initially unrepresented. */ - for (i = 0; i < points.items; i++) { - vertexarray[i] = (triangle) dummytri; - } - - if (verbose) { - printf(" Assembling triangles.\n"); - } - /* Read the triangles from the .ele file, and link */ - /* together those that share an edge. */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - elementnumber = firstnumber; - while (triangleloop.tri != (triangle *) NULL) { + if ( !quiet ) { + printf( "Reconstructing mesh.\n" ); + } + /* Allocate a temporary array that maps each point to some adjacent */ + /* triangle. I took care to allocate all the permanent memory for */ + /* triangles and shell edges first. */ + vertexarray = (triangle *) malloc( points.items * sizeof( triangle ) ); + if ( vertexarray == (triangle *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + /* Each point is initially unrepresented. */ + for ( i = 0; i < points.items; i++ ) { + vertexarray[i] = (triangle) dummytri; + } + + if ( verbose ) { + printf( " Assembling triangles.\n" ); + } + /* Read the triangles from the .ele file, and link */ + /* together those that share an edge. */ + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + elementnumber = firstnumber; + while ( triangleloop.tri != (triangle *) NULL ) { #ifdef TRILIBRARY - /* Copy the triangle's three corners. */ - for (j = 0; j < 3; j++) { - corner[j] = trianglelist[pointindex++]; - if ((corner[j] < firstnumber) || (corner[j] >= firstnumber + inpoints)) { - printf("Error: Triangle %d has an invalid vertex index.\n", - elementnumber); - exit(1); - } - } + /* Copy the triangle's three corners. */ + for ( j = 0; j < 3; j++ ) { + corner[j] = trianglelist[pointindex++]; + if ( ( corner[j] < firstnumber ) || ( corner[j] >= firstnumber + inpoints ) ) { + printf( "Error: Triangle %d has an invalid vertex index.\n", + elementnumber ); + exit( 1 ); + } + } #else /* not TRILIBRARY */ - /* Read triangle number and the triangle's three corners. */ - stringptr = readline(inputline, elefile, elefilename); - for (j = 0; j < 3; j++) { - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Triangle %d is missing point %d in %s.\n", - elementnumber, j + 1, elefilename); - exit(1); - } else { - corner[j] = (int) strtol (stringptr, &stringptr, 0); - if ((corner[j] < firstnumber) || - (corner[j] >= firstnumber + inpoints)) { - printf("Error: Triangle %d has an invalid vertex index.\n", - elementnumber); - exit(1); - } - } - } + /* Read triangle number and the triangle's three corners. */ + stringptr = readline( inputline, elefile, elefilename ); + for ( j = 0; j < 3; j++ ) { + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Triangle %d is missing point %d in %s.\n", + elementnumber, j + 1, elefilename ); + exit( 1 ); + } + else { + corner[j] = (int) strtol( stringptr, &stringptr, 0 ); + if ( ( corner[j] < firstnumber ) || + ( corner[j] >= firstnumber + inpoints ) ) { + printf( "Error: Triangle %d has an invalid vertex index.\n", + elementnumber ); + exit( 1 ); + } + } + } #endif /* not TRILIBRARY */ - /* Find out about (and throw away) extra nodes. */ - for (j = 3; j < incorners; j++) { + /* Find out about (and throw away) extra nodes. */ + for ( j = 3; j < incorners; j++ ) { #ifdef TRILIBRARY - killpointindex = trianglelist[pointindex++]; + killpointindex = trianglelist[pointindex++]; #else /* not TRILIBRARY */ - stringptr = findfield(stringptr); - if (*stringptr != '\0') { - killpointindex = (int) strtol (stringptr, &stringptr, 0); + stringptr = findfield( stringptr ); + if ( *stringptr != '\0' ) { + killpointindex = (int) strtol( stringptr, &stringptr, 0 ); #endif /* not TRILIBRARY */ - if ((killpointindex >= firstnumber) && - (killpointindex < firstnumber + inpoints)) { - /* Delete the non-corner point if it's not already deleted. */ - killpoint = getpoint(killpointindex); - if (pointmark(killpoint) != DEADPOINT) { - pointdealloc(killpoint); - } - } + if ( ( killpointindex >= firstnumber ) && + ( killpointindex < firstnumber + inpoints ) ) { + /* Delete the non-corner point if it's not already deleted. */ + killpoint = getpoint( killpointindex ); + if ( pointmark( killpoint ) != DEADPOINT ) { + pointdealloc( killpoint ); + } + } #ifndef TRILIBRARY - } + } #endif /* not TRILIBRARY */ - } + } - /* Read the triangle's attributes. */ - for (j = 0; j < eextras; j++) { + /* Read the triangle's attributes. */ + for ( j = 0; j < eextras; j++ ) { #ifdef TRILIBRARY - setelemattribute(triangleloop, j, triangleattriblist[attribindex++]); + setelemattribute( triangleloop, j, triangleattriblist[attribindex++] ); #else /* not TRILIBRARY */ - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - setelemattribute(triangleloop, j, 0); - } else { - setelemattribute(triangleloop, j, - (REAL) strtod (stringptr, &stringptr)); - } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + setelemattribute( triangleloop, j, 0 ); + } + else { + setelemattribute( triangleloop, j, + (REAL) strtod( stringptr, &stringptr ) ); + } #endif /* not TRILIBRARY */ - } + } - if (vararea) { + if ( vararea ) { #ifdef TRILIBRARY - area = trianglearealist[elementnumber - firstnumber]; + area = trianglearealist[elementnumber - firstnumber]; #else /* not TRILIBRARY */ - /* Read an area constraint from the .area file. */ - stringptr = readline(inputline, areafile, areafilename); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - area = -1.0; /* No constraint on this triangle. */ - } else { - area = (REAL) strtod(stringptr, &stringptr); - } + /* Read an area constraint from the .area file. */ + stringptr = readline( inputline, areafile, areafilename ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + area = -1.0; /* No constraint on this triangle. */ + } + else { + area = (REAL) strtod( stringptr, &stringptr ); + } #endif /* not TRILIBRARY */ - setareabound(triangleloop, area); - } - - /* Set the triangle's vertices. */ - triangleloop.orient = 0; - setorg(triangleloop, getpoint(corner[0])); - setdest(triangleloop, getpoint(corner[1])); - setapex(triangleloop, getpoint(corner[2])); - /* Try linking the triangle to others that share these vertices. */ - for (triangleloop.orient = 0; triangleloop.orient < 3; - triangleloop.orient++) { - /* Take the number for the origin of triangleloop. */ - aroundpoint = corner[triangleloop.orient]; - /* Look for other triangles having this vertex. */ - nexttri = vertexarray[aroundpoint - firstnumber]; - /* Link the current triangle to the next one in the stack. */ - triangleloop.tri[6 + triangleloop.orient] = nexttri; - /* Push the current triangle onto the stack. */ - vertexarray[aroundpoint - firstnumber] = encode(triangleloop); - decode(nexttri, checktri); - if (checktri.tri != dummytri) { - dest(triangleloop, tdest); - apex(triangleloop, tapex); - /* Look for other triangles that share an edge. */ - do { - dest(checktri, checkdest); - apex(checktri, checkapex); - if (tapex == checkdest) { - /* The two triangles share an edge; bond them together. */ - lprev(triangleloop, triangleleft); - bond(triangleleft, checktri); - } - if (tdest == checkapex) { - /* The two triangles share an edge; bond them together. */ - lprev(checktri, checkleft); - bond(triangleloop, checkleft); - } - /* Find the next triangle in the stack. */ - nexttri = checktri.tri[6 + checktri.orient]; - decode(nexttri, checktri); - } while (checktri.tri != dummytri); - } - } - triangleloop.tri = triangletraverse(); - elementnumber++; - } + setareabound( triangleloop, area ); + } + + /* Set the triangle's vertices. */ + triangleloop.orient = 0; + setorg( triangleloop, getpoint( corner[0] ) ); + setdest( triangleloop, getpoint( corner[1] ) ); + setapex( triangleloop, getpoint( corner[2] ) ); + /* Try linking the triangle to others that share these vertices. */ + for ( triangleloop.orient = 0; triangleloop.orient < 3; + triangleloop.orient++ ) { + /* Take the number for the origin of triangleloop. */ + aroundpoint = corner[triangleloop.orient]; + /* Look for other triangles having this vertex. */ + nexttri = vertexarray[aroundpoint - firstnumber]; + /* Link the current triangle to the next one in the stack. */ + triangleloop.tri[6 + triangleloop.orient] = nexttri; + /* Push the current triangle onto the stack. */ + vertexarray[aroundpoint - firstnumber] = encode( triangleloop ); + decode( nexttri, checktri ); + if ( checktri.tri != dummytri ) { + dest( triangleloop, tdest ); + apex( triangleloop, tapex ); + /* Look for other triangles that share an edge. */ + do { + dest( checktri, checkdest ); + apex( checktri, checkapex ); + if ( tapex == checkdest ) { + /* The two triangles share an edge; bond them together. */ + lprev( triangleloop, triangleleft ); + bond( triangleleft, checktri ); + } + if ( tdest == checkapex ) { + /* The two triangles share an edge; bond them together. */ + lprev( checktri, checkleft ); + bond( triangleloop, checkleft ); + } + /* Find the next triangle in the stack. */ + nexttri = checktri.tri[6 + checktri.orient]; + decode( nexttri, checktri ); + } while ( checktri.tri != dummytri ); + } + } + triangleloop.tri = triangletraverse(); + elementnumber++; + } #ifdef TRILIBRARY - pointindex = 0; + pointindex = 0; #else /* not TRILIBRARY */ - fclose(elefile); - if (vararea) { - fclose(areafile); - } + fclose( elefile ); + if ( vararea ) { + fclose( areafile ); + } #endif /* not TRILIBRARY */ - hullsize = 0; /* Prepare to count the boundary edges. */ - if (poly) { - if (verbose) { - printf(" Marking segments in triangulation.\n"); - } - /* Read the segments from the .poly file, and link them */ - /* to their neighboring triangles. */ - boundmarker = 0; - traversalinit(&shelles); - shelleloop.sh = shelletraverse(); - segmentnumber = firstnumber; - while (shelleloop.sh != (shelle *) NULL) { + hullsize = 0; /* Prepare to count the boundary edges. */ + if ( poly ) { + if ( verbose ) { + printf( " Marking segments in triangulation.\n" ); + } + /* Read the segments from the .poly file, and link them */ + /* to their neighboring triangles. */ + boundmarker = 0; + traversalinit( &shelles ); + shelleloop.sh = shelletraverse(); + segmentnumber = firstnumber; + while ( shelleloop.sh != (shelle *) NULL ) { #ifdef TRILIBRARY - end[0] = segmentlist[pointindex++]; - end[1] = segmentlist[pointindex++]; - if (segmentmarkers) { - boundmarker = segmentmarkerlist[segmentnumber - firstnumber]; - } + end[0] = segmentlist[pointindex++]; + end[1] = segmentlist[pointindex++]; + if ( segmentmarkers ) { + boundmarker = segmentmarkerlist[segmentnumber - firstnumber]; + } #else /* not TRILIBRARY */ - /* Read the endpoints of each segment, and possibly a boundary marker. */ - stringptr = readline(inputline, polyfile, inpolyfilename); - /* Skip the first (segment number) field. */ - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Segment %d has no endpoints in %s.\n", segmentnumber, - polyfilename); - exit(1); - } else { - end[0] = (int) strtol (stringptr, &stringptr, 0); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Segment %d is missing its second endpoint in %s.\n", - segmentnumber, polyfilename); - exit(1); - } else { - end[1] = (int) strtol (stringptr, &stringptr, 0); - } - if (segmentmarkers) { - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - boundmarker = 0; - } else { - boundmarker = (int) strtol (stringptr, &stringptr, 0); - } - } + /* Read the endpoints of each segment, and possibly a boundary marker. */ + stringptr = readline( inputline, polyfile, inpolyfilename ); + /* Skip the first (segment number) field. */ + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Segment %d has no endpoints in %s.\n", segmentnumber, + polyfilename ); + exit( 1 ); + } + else { + end[0] = (int) strtol( stringptr, &stringptr, 0 ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Segment %d is missing its second endpoint in %s.\n", + segmentnumber, polyfilename ); + exit( 1 ); + } + else { + end[1] = (int) strtol( stringptr, &stringptr, 0 ); + } + if ( segmentmarkers ) { + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + boundmarker = 0; + } + else { + boundmarker = (int) strtol( stringptr, &stringptr, 0 ); + } + } #endif /* not TRILIBRARY */ - for (j = 0; j < 2; j++) { - if ((end[j] < firstnumber) || (end[j] >= firstnumber + inpoints)) { - printf("Error: Segment %d has an invalid vertex index.\n", - segmentnumber); - exit(1); - } - } - - /* set the shell edge's vertices. */ - shelleloop.shorient = 0; - setsorg(shelleloop, getpoint(end[0])); - setsdest(shelleloop, getpoint(end[1])); - setmark(shelleloop, boundmarker); - /* Try linking the shell edge to triangles that share these vertices. */ - for (shelleloop.shorient = 0; shelleloop.shorient < 2; - shelleloop.shorient++) { - /* Take the number for the destination of shelleloop. */ - aroundpoint = end[1 - shelleloop.shorient]; - /* Look for triangles having this vertex. */ - prevlink = &vertexarray[aroundpoint - firstnumber]; - nexttri = vertexarray[aroundpoint - firstnumber]; - decode(nexttri, checktri); - sorg(shelleloop, shorg); - notfound = 1; - /* Look for triangles having this edge. Note that I'm only */ - /* comparing each triangle's destination with the shell edge; */ - /* each triangle's apex is handled through a different vertex. */ - /* Because each triangle appears on three vertices' lists, each */ - /* occurrence of a triangle on a list can (and does) represent */ - /* an edge. In this way, most edges are represented twice, and */ - /* every triangle-segment bond is represented once. */ - while (notfound && (checktri.tri != dummytri)) { - dest(checktri, checkdest); - if (shorg == checkdest) { - /* We have a match. Remove this triangle from the list. */ - *prevlink = checktri.tri[6 + checktri.orient]; - /* Bond the shell edge to the triangle. */ - tsbond(checktri, shelleloop); - /* Check if this is a boundary edge. */ - sym(checktri, checkneighbor); - if (checkneighbor.tri == dummytri) { - /* The next line doesn't insert a shell edge (because there's */ - /* already one there), but it sets the boundary markers of */ - /* the existing shell edge and its vertices. */ - insertshelle(&checktri, 1); - hullsize++; - } - notfound = 0; - } - /* Find the next triangle in the stack. */ - prevlink = &checktri.tri[6 + checktri.orient]; - nexttri = checktri.tri[6 + checktri.orient]; - decode(nexttri, checktri); - } - } - shelleloop.sh = shelletraverse(); - segmentnumber++; - } - } - - /* Mark the remaining edges as not being attached to any shell edge. */ - /* Also, count the (yet uncounted) boundary edges. */ - for (i = 0; i < points.items; i++) { - /* Search the stack of triangles adjacent to a point. */ - nexttri = vertexarray[i]; - decode(nexttri, checktri); - while (checktri.tri != dummytri) { - /* Find the next triangle in the stack before this */ - /* information gets overwritten. */ - nexttri = checktri.tri[6 + checktri.orient]; - /* No adjacent shell edge. (This overwrites the stack info.) */ - tsdissolve(checktri); - sym(checktri, checkneighbor); - if (checkneighbor.tri == dummytri) { - insertshelle(&checktri, 1); - hullsize++; - } - decode(nexttri, checktri); - } - } - - free(vertexarray); - return hullsize; + for ( j = 0; j < 2; j++ ) { + if ( ( end[j] < firstnumber ) || ( end[j] >= firstnumber + inpoints ) ) { + printf( "Error: Segment %d has an invalid vertex index.\n", + segmentnumber ); + exit( 1 ); + } + } + + /* set the shell edge's vertices. */ + shelleloop.shorient = 0; + setsorg( shelleloop, getpoint( end[0] ) ); + setsdest( shelleloop, getpoint( end[1] ) ); + setmark( shelleloop, boundmarker ); + /* Try linking the shell edge to triangles that share these vertices. */ + for ( shelleloop.shorient = 0; shelleloop.shorient < 2; + shelleloop.shorient++ ) { + /* Take the number for the destination of shelleloop. */ + aroundpoint = end[1 - shelleloop.shorient]; + /* Look for triangles having this vertex. */ + prevlink = &vertexarray[aroundpoint - firstnumber]; + nexttri = vertexarray[aroundpoint - firstnumber]; + decode( nexttri, checktri ); + sorg( shelleloop, shorg ); + notfound = 1; + /* Look for triangles having this edge. Note that I'm only */ + /* comparing each triangle's destination with the shell edge; */ + /* each triangle's apex is handled through a different vertex. */ + /* Because each triangle appears on three vertices' lists, each */ + /* occurrence of a triangle on a list can (and does) represent */ + /* an edge. In this way, most edges are represented twice, and */ + /* every triangle-segment bond is represented once. */ + while ( notfound && ( checktri.tri != dummytri ) ) { + dest( checktri, checkdest ); + if ( shorg == checkdest ) { + /* We have a match. Remove this triangle from the list. */ + *prevlink = checktri.tri[6 + checktri.orient]; + /* Bond the shell edge to the triangle. */ + tsbond( checktri, shelleloop ); + /* Check if this is a boundary edge. */ + sym( checktri, checkneighbor ); + if ( checkneighbor.tri == dummytri ) { + /* The next line doesn't insert a shell edge (because there's */ + /* already one there), but it sets the boundary markers of */ + /* the existing shell edge and its vertices. */ + insertshelle( &checktri, 1 ); + hullsize++; + } + notfound = 0; + } + /* Find the next triangle in the stack. */ + prevlink = &checktri.tri[6 + checktri.orient]; + nexttri = checktri.tri[6 + checktri.orient]; + decode( nexttri, checktri ); + } + } + shelleloop.sh = shelletraverse(); + segmentnumber++; + } + } + + /* Mark the remaining edges as not being attached to any shell edge. */ + /* Also, count the (yet uncounted) boundary edges. */ + for ( i = 0; i < points.items; i++ ) { + /* Search the stack of triangles adjacent to a point. */ + nexttri = vertexarray[i]; + decode( nexttri, checktri ); + while ( checktri.tri != dummytri ) { + /* Find the next triangle in the stack before this */ + /* information gets overwritten. */ + nexttri = checktri.tri[6 + checktri.orient]; + /* No adjacent shell edge. (This overwrites the stack info.) */ + tsdissolve( checktri ); + sym( checktri, checkneighbor ); + if ( checkneighbor.tri == dummytri ) { + insertshelle( &checktri, 1 ); + hullsize++; + } + decode( nexttri, checktri ); + } + } + + free( vertexarray ); + return hullsize; } #endif /* not CDT_ONLY */ @@ -9175,74 +9270,77 @@ FILE *polyfile; /* */ /*****************************************************************************/ -enum finddirectionresult finddirection(searchtri, endpoint) +enum finddirectionresult finddirection( searchtri, endpoint ) struct triedge *searchtri; point endpoint; { - struct triedge checktri; - point startpoint; - point leftpoint, rightpoint; - REAL leftccw, rightccw; - int leftflag, rightflag; - triangle ptr; /* Temporary variable used by onext() and oprev(). */ - - org(*searchtri, startpoint); - dest(*searchtri, rightpoint); - apex(*searchtri, leftpoint); - /* Is `endpoint' to the left? */ - leftccw = counterclockwise(endpoint, startpoint, leftpoint); - leftflag = leftccw > 0.0; - /* Is `endpoint' to the right? */ - rightccw = counterclockwise(startpoint, endpoint, rightpoint); - rightflag = rightccw > 0.0; - if (leftflag && rightflag) { - /* `searchtri' faces directly away from `endpoint'. We could go */ - /* left or right. Ask whether it's a triangle or a boundary */ - /* on the left. */ - onext(*searchtri, checktri); - if (checktri.tri == dummytri) { - leftflag = 0; - } else { - rightflag = 0; - } - } - while (leftflag) { - /* Turn left until satisfied. */ - onextself(*searchtri); - if (searchtri->tri == dummytri) { - printf("Internal error in finddirection(): Unable to find a\n"); - printf(" triangle leading from (%.12g, %.12g) to", startpoint[0], - startpoint[1]); - printf(" (%.12g, %.12g).\n", endpoint[0], endpoint[1]); - internalerror(); - } - apex(*searchtri, leftpoint); - rightccw = leftccw; - leftccw = counterclockwise(endpoint, startpoint, leftpoint); - leftflag = leftccw > 0.0; - } - while (rightflag) { - /* Turn right until satisfied. */ - oprevself(*searchtri); - if (searchtri->tri == dummytri) { - printf("Internal error in finddirection(): Unable to find a\n"); - printf(" triangle leading from (%.12g, %.12g) to", startpoint[0], - startpoint[1]); - printf(" (%.12g, %.12g).\n", endpoint[0], endpoint[1]); - internalerror(); - } - dest(*searchtri, rightpoint); - leftccw = rightccw; - rightccw = counterclockwise(startpoint, endpoint, rightpoint); - rightflag = rightccw > 0.0; - } - if (leftccw == 0.0) { - return LEFTCOLLINEAR; - } else if (rightccw == 0.0) { - return RIGHTCOLLINEAR; - } else { - return WITHIN; - } + struct triedge checktri; + point startpoint; + point leftpoint, rightpoint; + REAL leftccw, rightccw; + int leftflag, rightflag; + triangle ptr; /* Temporary variable used by onext() and oprev(). */ + + org( *searchtri, startpoint ); + dest( *searchtri, rightpoint ); + apex( *searchtri, leftpoint ); + /* Is `endpoint' to the left? */ + leftccw = counterclockwise( endpoint, startpoint, leftpoint ); + leftflag = leftccw > 0.0; + /* Is `endpoint' to the right? */ + rightccw = counterclockwise( startpoint, endpoint, rightpoint ); + rightflag = rightccw > 0.0; + if ( leftflag && rightflag ) { + /* `searchtri' faces directly away from `endpoint'. We could go */ + /* left or right. Ask whether it's a triangle or a boundary */ + /* on the left. */ + onext( *searchtri, checktri ); + if ( checktri.tri == dummytri ) { + leftflag = 0; + } + else { + rightflag = 0; + } + } + while ( leftflag ) { + /* Turn left until satisfied. */ + onextself( *searchtri ); + if ( searchtri->tri == dummytri ) { + printf( "Internal error in finddirection(): Unable to find a\n" ); + printf( " triangle leading from (%.12g, %.12g) to", startpoint[0], + startpoint[1] ); + printf( " (%.12g, %.12g).\n", endpoint[0], endpoint[1] ); + internalerror(); + } + apex( *searchtri, leftpoint ); + rightccw = leftccw; + leftccw = counterclockwise( endpoint, startpoint, leftpoint ); + leftflag = leftccw > 0.0; + } + while ( rightflag ) { + /* Turn right until satisfied. */ + oprevself( *searchtri ); + if ( searchtri->tri == dummytri ) { + printf( "Internal error in finddirection(): Unable to find a\n" ); + printf( " triangle leading from (%.12g, %.12g) to", startpoint[0], + startpoint[1] ); + printf( " (%.12g, %.12g).\n", endpoint[0], endpoint[1] ); + internalerror(); + } + dest( *searchtri, rightpoint ); + leftccw = rightccw; + rightccw = counterclockwise( startpoint, endpoint, rightpoint ); + rightflag = rightccw > 0.0; + } + if ( leftccw == 0.0 ) { + return LEFTCOLLINEAR; + } + else if ( rightccw == 0.0 ) { + return RIGHTCOLLINEAR; + } + else { + return WITHIN; + } } /*****************************************************************************/ @@ -9262,78 +9360,79 @@ point endpoint; /* */ /*****************************************************************************/ -void segmentintersection(splittri, splitshelle, endpoint2) +void segmentintersection( splittri, splitshelle, endpoint2 ) struct triedge *splittri; struct edge *splitshelle; point endpoint2; { - point endpoint1; - point torg, tdest; - point leftpoint, rightpoint; - point newpoint; - enum insertsiteresult success; - enum finddirectionresult collinear; - REAL ex, ey; - REAL tx, ty; - REAL etx, ety; - REAL split, denom; - int i; - triangle ptr; /* Temporary variable used by onext(). */ - - /* Find the other three segment endpoints. */ - apex(*splittri, endpoint1); - org(*splittri, torg); - dest(*splittri, tdest); - /* Segment intersection formulae; see the Antonio reference. */ - tx = tdest[0] - torg[0]; - ty = tdest[1] - torg[1]; - ex = endpoint2[0] - endpoint1[0]; - ey = endpoint2[1] - endpoint1[1]; - etx = torg[0] - endpoint2[0]; - ety = torg[1] - endpoint2[1]; - denom = ty * ex - tx * ey; - if (denom == 0.0) { - printf("Internal error in segmentintersection():"); - printf(" Attempt to find intersection of parallel segments.\n"); - internalerror(); - } - split = (ey * etx - ex * ety) / denom; - /* Create the new point. */ - newpoint = (point) poolalloc(&points); - /* Interpolate its coordinate and attributes. */ - for (i = 0; i < 2 + nextras; i++) { - newpoint[i] = torg[i] + split * (tdest[i] - torg[i]); - } - setpointmark(newpoint, mark(*splitshelle)); - if (verbose > 1) { - printf( - " Splitting edge (%.12g, %.12g) (%.12g, %.12g) at (%.12g, %.12g).\n", - torg[0], torg[1], tdest[0], tdest[1], newpoint[0], newpoint[1]); - } - /* Insert the intersection point. This should always succeed. */ - success = insertsite(newpoint, splittri, splitshelle, 0, 0); - if (success != SUCCESSFULPOINT) { - printf("Internal error in segmentintersection():\n"); - printf(" Failure to split a segment.\n"); - internalerror(); - } - if (steinerleft > 0) { - steinerleft--; - } - /* Inserting the point may have caused edge flips. We wish to rediscover */ - /* the edge connecting endpoint1 to the new intersection point. */ - collinear = finddirection(splittri, endpoint1); - dest(*splittri, rightpoint); - apex(*splittri, leftpoint); - if ((leftpoint[0] == endpoint1[0]) && (leftpoint[1] == endpoint1[1])) { - onextself(*splittri); - } else if ((rightpoint[0] != endpoint1[0]) || - (rightpoint[1] != endpoint1[1])) { - printf("Internal error in segmentintersection():\n"); - printf(" Topological inconsistency after splitting a segment.\n"); - internalerror(); - } - /* `splittri' should have destination endpoint1. */ + point endpoint1; + point torg, tdest; + point leftpoint, rightpoint; + point newpoint; + enum insertsiteresult success; + enum finddirectionresult collinear; + REAL ex, ey; + REAL tx, ty; + REAL etx, ety; + REAL split, denom; + int i; + triangle ptr; /* Temporary variable used by onext(). */ + + /* Find the other three segment endpoints. */ + apex( *splittri, endpoint1 ); + org( *splittri, torg ); + dest( *splittri, tdest ); + /* Segment intersection formulae; see the Antonio reference. */ + tx = tdest[0] - torg[0]; + ty = tdest[1] - torg[1]; + ex = endpoint2[0] - endpoint1[0]; + ey = endpoint2[1] - endpoint1[1]; + etx = torg[0] - endpoint2[0]; + ety = torg[1] - endpoint2[1]; + denom = ty * ex - tx * ey; + if ( denom == 0.0 ) { + printf( "Internal error in segmentintersection():" ); + printf( " Attempt to find intersection of parallel segments.\n" ); + internalerror(); + } + split = ( ey * etx - ex * ety ) / denom; + /* Create the new point. */ + newpoint = (point) poolalloc( &points ); + /* Interpolate its coordinate and attributes. */ + for ( i = 0; i < 2 + nextras; i++ ) { + newpoint[i] = torg[i] + split * ( tdest[i] - torg[i] ); + } + setpointmark( newpoint, mark( *splitshelle ) ); + if ( verbose > 1 ) { + printf( + " Splitting edge (%.12g, %.12g) (%.12g, %.12g) at (%.12g, %.12g).\n", + torg[0], torg[1], tdest[0], tdest[1], newpoint[0], newpoint[1] ); + } + /* Insert the intersection point. This should always succeed. */ + success = insertsite( newpoint, splittri, splitshelle, 0, 0 ); + if ( success != SUCCESSFULPOINT ) { + printf( "Internal error in segmentintersection():\n" ); + printf( " Failure to split a segment.\n" ); + internalerror(); + } + if ( steinerleft > 0 ) { + steinerleft--; + } + /* Inserting the point may have caused edge flips. We wish to rediscover */ + /* the edge connecting endpoint1 to the new intersection point. */ + collinear = finddirection( splittri, endpoint1 ); + dest( *splittri, rightpoint ); + apex( *splittri, leftpoint ); + if ( ( leftpoint[0] == endpoint1[0] ) && ( leftpoint[1] == endpoint1[1] ) ) { + onextself( *splittri ); + } + else if ( ( rightpoint[0] != endpoint1[0] ) || + ( rightpoint[1] != endpoint1[1] ) ) { + printf( "Internal error in segmentintersection():\n" ); + printf( " Topological inconsistency after splitting a segment.\n" ); + internalerror(); + } + /* `splittri' should have destination endpoint1. */ } /*****************************************************************************/ @@ -9362,60 +9461,64 @@ point endpoint2; /* */ /*****************************************************************************/ -int scoutsegment(searchtri, endpoint2, newmark) +int scoutsegment( searchtri, endpoint2, newmark ) struct triedge *searchtri; point endpoint2; int newmark; { - struct triedge crosstri; - struct edge crossedge; - point leftpoint, rightpoint; - point endpoint1; - enum finddirectionresult collinear; - shelle sptr; /* Temporary variable used by tspivot(). */ - - collinear = finddirection(searchtri, endpoint2); - dest(*searchtri, rightpoint); - apex(*searchtri, leftpoint); - if (((leftpoint[0] == endpoint2[0]) && (leftpoint[1] == endpoint2[1])) || - ((rightpoint[0] == endpoint2[0]) && (rightpoint[1] == endpoint2[1]))) { - /* The segment is already an edge in the mesh. */ - if ((leftpoint[0] == endpoint2[0]) && (leftpoint[1] == endpoint2[1])) { - lprevself(*searchtri); - } - /* Insert a shell edge, if there isn't already one there. */ - insertshelle(searchtri, newmark); - return 1; - } else if (collinear == LEFTCOLLINEAR) { - /* We've collided with a point between the segment's endpoints. */ - /* Make the collinear point be the triangle's origin. */ - lprevself(*searchtri); - insertshelle(searchtri, newmark); - /* Insert the remainder of the segment. */ - return scoutsegment(searchtri, endpoint2, newmark); - } else if (collinear == RIGHTCOLLINEAR) { - /* We've collided with a point between the segment's endpoints. */ - insertshelle(searchtri, newmark); - /* Make the collinear point be the triangle's origin. */ - lnextself(*searchtri); - /* Insert the remainder of the segment. */ - return scoutsegment(searchtri, endpoint2, newmark); - } else { - lnext(*searchtri, crosstri); - tspivot(crosstri, crossedge); - /* Check for a crossing segment. */ - if (crossedge.sh == dummysh) { - return 0; - } else { - org(*searchtri, endpoint1); - /* Insert a point at the intersection. */ - segmentintersection(&crosstri, &crossedge, endpoint2); - triedgecopy(crosstri, *searchtri); - insertshelle(searchtri, newmark); - /* Insert the remainder of the segment. */ - return scoutsegment(searchtri, endpoint2, newmark); - } - } + struct triedge crosstri; + struct edge crossedge; + point leftpoint, rightpoint; + point endpoint1; + enum finddirectionresult collinear; + shelle sptr; /* Temporary variable used by tspivot(). */ + + collinear = finddirection( searchtri, endpoint2 ); + dest( *searchtri, rightpoint ); + apex( *searchtri, leftpoint ); + if ( ( ( leftpoint[0] == endpoint2[0] ) && ( leftpoint[1] == endpoint2[1] ) ) || + ( ( rightpoint[0] == endpoint2[0] ) && ( rightpoint[1] == endpoint2[1] ) ) ) { + /* The segment is already an edge in the mesh. */ + if ( ( leftpoint[0] == endpoint2[0] ) && ( leftpoint[1] == endpoint2[1] ) ) { + lprevself( *searchtri ); + } + /* Insert a shell edge, if there isn't already one there. */ + insertshelle( searchtri, newmark ); + return 1; + } + else if ( collinear == LEFTCOLLINEAR ) { + /* We've collided with a point between the segment's endpoints. */ + /* Make the collinear point be the triangle's origin. */ + lprevself( *searchtri ); + insertshelle( searchtri, newmark ); + /* Insert the remainder of the segment. */ + return scoutsegment( searchtri, endpoint2, newmark ); + } + else if ( collinear == RIGHTCOLLINEAR ) { + /* We've collided with a point between the segment's endpoints. */ + insertshelle( searchtri, newmark ); + /* Make the collinear point be the triangle's origin. */ + lnextself( *searchtri ); + /* Insert the remainder of the segment. */ + return scoutsegment( searchtri, endpoint2, newmark ); + } + else { + lnext( *searchtri, crosstri ); + tspivot( crosstri, crossedge ); + /* Check for a crossing segment. */ + if ( crossedge.sh == dummysh ) { + return 0; + } + else { + org( *searchtri, endpoint1 ); + /* Insert a point at the intersection. */ + segmentintersection( &crosstri, &crossedge, endpoint2 ); + triedgecopy( crosstri, *searchtri ); + insertshelle( searchtri, newmark ); + /* Insert the remainder of the segment. */ + return scoutsegment( searchtri, endpoint2, newmark ); + } + } } /*****************************************************************************/ @@ -9440,79 +9543,80 @@ int newmark; #ifndef REDUCED #ifndef CDT_ONLY -void conformingedge(endpoint1, endpoint2, newmark) +void conformingedge( endpoint1, endpoint2, newmark ) point endpoint1; point endpoint2; int newmark; { - struct triedge searchtri1, searchtri2; - struct edge brokenshelle; - point newpoint; - point midpoint1, midpoint2; - enum insertsiteresult success; - int result1, result2; - int i; - shelle sptr; /* Temporary variable used by tspivot(). */ - - if (verbose > 2) { - printf("Forcing segment into triangulation by recursive splitting:\n"); - printf(" (%.12g, %.12g) (%.12g, %.12g)\n", endpoint1[0], endpoint1[1], - endpoint2[0], endpoint2[1]); - } - /* Create a new point to insert in the middle of the segment. */ - newpoint = (point) poolalloc(&points); - /* Interpolate coordinates and attributes. */ - for (i = 0; i < 2 + nextras; i++) { - newpoint[i] = 0.5 * (endpoint1[i] + endpoint2[i]); - } - setpointmark(newpoint, newmark); - /* Find a boundary triangle to search from. */ - searchtri1.tri = (triangle *) NULL; - /* Attempt to insert the new point. */ - success = insertsite(newpoint, &searchtri1, (struct edge *) NULL, 0, 0); - if (success == DUPLICATEPOINT) { - if (verbose > 2) { - printf(" Segment intersects existing point (%.12g, %.12g).\n", - newpoint[0], newpoint[1]); - } - /* Use the point that's already there. */ - pointdealloc(newpoint); - org(searchtri1, newpoint); - } else { - if (success == VIOLATINGPOINT) { - if (verbose > 2) { - printf(" Two segments intersect at (%.12g, %.12g).\n", - newpoint[0], newpoint[1]); - } - /* By fluke, we've landed right on another segment. Split it. */ - tspivot(searchtri1, brokenshelle); - success = insertsite(newpoint, &searchtri1, &brokenshelle, 0, 0); - if (success != SUCCESSFULPOINT) { - printf("Internal error in conformingedge():\n"); - printf(" Failure to split a segment.\n"); - internalerror(); - } - } - /* The point has been inserted successfully. */ - if (steinerleft > 0) { - steinerleft--; - } - } - triedgecopy(searchtri1, searchtri2); - result1 = scoutsegment(&searchtri1, endpoint1, newmark); - result2 = scoutsegment(&searchtri2, endpoint2, newmark); - if (!result1) { - /* The origin of searchtri1 may have changed if a collision with an */ - /* intervening vertex on the segment occurred. */ - org(searchtri1, midpoint1); - conformingedge(midpoint1, endpoint1, newmark); - } - if (!result2) { - /* The origin of searchtri2 may have changed if a collision with an */ - /* intervening vertex on the segment occurred. */ - org(searchtri2, midpoint2); - conformingedge(midpoint2, endpoint2, newmark); - } + struct triedge searchtri1, searchtri2; + struct edge brokenshelle; + point newpoint; + point midpoint1, midpoint2; + enum insertsiteresult success; + int result1, result2; + int i; + shelle sptr; /* Temporary variable used by tspivot(). */ + + if ( verbose > 2 ) { + printf( "Forcing segment into triangulation by recursive splitting:\n" ); + printf( " (%.12g, %.12g) (%.12g, %.12g)\n", endpoint1[0], endpoint1[1], + endpoint2[0], endpoint2[1] ); + } + /* Create a new point to insert in the middle of the segment. */ + newpoint = (point) poolalloc( &points ); + /* Interpolate coordinates and attributes. */ + for ( i = 0; i < 2 + nextras; i++ ) { + newpoint[i] = 0.5 * ( endpoint1[i] + endpoint2[i] ); + } + setpointmark( newpoint, newmark ); + /* Find a boundary triangle to search from. */ + searchtri1.tri = (triangle *) NULL; + /* Attempt to insert the new point. */ + success = insertsite( newpoint, &searchtri1, (struct edge *) NULL, 0, 0 ); + if ( success == DUPLICATEPOINT ) { + if ( verbose > 2 ) { + printf( " Segment intersects existing point (%.12g, %.12g).\n", + newpoint[0], newpoint[1] ); + } + /* Use the point that's already there. */ + pointdealloc( newpoint ); + org( searchtri1, newpoint ); + } + else { + if ( success == VIOLATINGPOINT ) { + if ( verbose > 2 ) { + printf( " Two segments intersect at (%.12g, %.12g).\n", + newpoint[0], newpoint[1] ); + } + /* By fluke, we've landed right on another segment. Split it. */ + tspivot( searchtri1, brokenshelle ); + success = insertsite( newpoint, &searchtri1, &brokenshelle, 0, 0 ); + if ( success != SUCCESSFULPOINT ) { + printf( "Internal error in conformingedge():\n" ); + printf( " Failure to split a segment.\n" ); + internalerror(); + } + } + /* The point has been inserted successfully. */ + if ( steinerleft > 0 ) { + steinerleft--; + } + } + triedgecopy( searchtri1, searchtri2 ); + result1 = scoutsegment( &searchtri1, endpoint1, newmark ); + result2 = scoutsegment( &searchtri2, endpoint2, newmark ); + if ( !result1 ) { + /* The origin of searchtri1 may have changed if a collision with an */ + /* intervening vertex on the segment occurred. */ + org( searchtri1, midpoint1 ); + conformingedge( midpoint1, endpoint1, newmark ); + } + if ( !result2 ) { + /* The origin of searchtri2 may have changed if a collision with an */ + /* intervening vertex on the segment occurred. */ + org( searchtri2, midpoint2 ); + conformingedge( midpoint2, endpoint2, newmark ); + } } #endif /* not CDT_ONLY */ @@ -9556,61 +9660,62 @@ int newmark; /* */ /*****************************************************************************/ -void delaunayfixup(fixuptri, leftside) +void delaunayfixup( fixuptri, leftside ) struct triedge *fixuptri; int leftside; { - struct triedge neartri; - struct triedge fartri; - struct edge faredge; - point nearpoint, leftpoint, rightpoint, farpoint; - triangle ptr; /* Temporary variable used by sym(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - lnext(*fixuptri, neartri); - sym(neartri, fartri); - /* Check if the edge opposite the origin of fixuptri can be flipped. */ - if (fartri.tri == dummytri) { - return; - } - tspivot(neartri, faredge); - if (faredge.sh != dummysh) { - return; - } - /* Find all the relevant vertices. */ - apex(neartri, nearpoint); - org(neartri, leftpoint); - dest(neartri, rightpoint); - apex(fartri, farpoint); - /* Check whether the previous polygon vertex is a reflex vertex. */ - if (leftside) { - if (counterclockwise(nearpoint, leftpoint, farpoint) <= 0.0) { - /* leftpoint is a reflex vertex too. Nothing can */ - /* be done until a convex section is found. */ - return; - } - } else { - if (counterclockwise(farpoint, rightpoint, nearpoint) <= 0.0) { - /* rightpoint is a reflex vertex too. Nothing can */ - /* be done until a convex section is found. */ - return; - } - } - if (counterclockwise(rightpoint, leftpoint, farpoint) > 0.0) { - /* fartri is not an inverted triangle, and farpoint is not a reflex */ - /* vertex. As there are no reflex vertices, fixuptri isn't an */ - /* inverted triangle, either. Hence, test the edge between the */ - /* triangles to ensure it is locally Delaunay. */ - if (incircle(leftpoint, farpoint, rightpoint, nearpoint) <= 0.0) { - return; - } - /* Not locally Delaunay; go on to an edge flip. */ - } /* else fartri is inverted; remove it from the stack by flipping. */ - flip(&neartri); - lprevself(*fixuptri); /* Restore the origin of fixuptri after the flip. */ - /* Recursively process the two triangles that result from the flip. */ - delaunayfixup(fixuptri, leftside); - delaunayfixup(&fartri, leftside); + struct triedge neartri; + struct triedge fartri; + struct edge faredge; + point nearpoint, leftpoint, rightpoint, farpoint; + triangle ptr; /* Temporary variable used by sym(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + lnext( *fixuptri, neartri ); + sym( neartri, fartri ); + /* Check if the edge opposite the origin of fixuptri can be flipped. */ + if ( fartri.tri == dummytri ) { + return; + } + tspivot( neartri, faredge ); + if ( faredge.sh != dummysh ) { + return; + } + /* Find all the relevant vertices. */ + apex( neartri, nearpoint ); + org( neartri, leftpoint ); + dest( neartri, rightpoint ); + apex( fartri, farpoint ); + /* Check whether the previous polygon vertex is a reflex vertex. */ + if ( leftside ) { + if ( counterclockwise( nearpoint, leftpoint, farpoint ) <= 0.0 ) { + /* leftpoint is a reflex vertex too. Nothing can */ + /* be done until a convex section is found. */ + return; + } + } + else { + if ( counterclockwise( farpoint, rightpoint, nearpoint ) <= 0.0 ) { + /* rightpoint is a reflex vertex too. Nothing can */ + /* be done until a convex section is found. */ + return; + } + } + if ( counterclockwise( rightpoint, leftpoint, farpoint ) > 0.0 ) { + /* fartri is not an inverted triangle, and farpoint is not a reflex */ + /* vertex. As there are no reflex vertices, fixuptri isn't an */ + /* inverted triangle, either. Hence, test the edge between the */ + /* triangles to ensure it is locally Delaunay. */ + if ( incircle( leftpoint, farpoint, rightpoint, nearpoint ) <= 0.0 ) { + return; + } + /* Not locally Delaunay; go on to an edge flip. */ + } /* else fartri is inverted; remove it from the stack by flipping. */ + flip( &neartri ); + lprevself( *fixuptri ); /* Restore the origin of fixuptri after the flip. */ + /* Recursively process the two triangles that result from the flip. */ + delaunayfixup( fixuptri, leftside ); + delaunayfixup( &fartri, leftside ); } /*****************************************************************************/ @@ -9667,92 +9772,96 @@ int leftside; /* */ /*****************************************************************************/ -void constrainededge(starttri, endpoint2, newmark) +void constrainededge( starttri, endpoint2, newmark ) struct triedge *starttri; point endpoint2; int newmark; { - struct triedge fixuptri, fixuptri2; - struct edge fixupedge; - point endpoint1; - point farpoint; - REAL area; - int collision; - int done; - triangle ptr; /* Temporary variable used by sym() and oprev(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - org(*starttri, endpoint1); - lnext(*starttri, fixuptri); - flip(&fixuptri); - /* `collision' indicates whether we have found a point directly */ - /* between endpoint1 and endpoint2. */ - collision = 0; - done = 0; - do { - org(fixuptri, farpoint); - /* `farpoint' is the extreme point of the polygon we are "digging" */ - /* to get from endpoint1 to endpoint2. */ - if ((farpoint[0] == endpoint2[0]) && (farpoint[1] == endpoint2[1])) { - oprev(fixuptri, fixuptri2); - /* Enforce the Delaunay condition around endpoint2. */ - delaunayfixup(&fixuptri, 0); - delaunayfixup(&fixuptri2, 1); - done = 1; - } else { - /* Check whether farpoint is to the left or right of the segment */ - /* being inserted, to decide which edge of fixuptri to dig */ - /* through next. */ - area = counterclockwise(endpoint1, endpoint2, farpoint); - if (area == 0.0) { - /* We've collided with a point between endpoint1 and endpoint2. */ - collision = 1; - oprev(fixuptri, fixuptri2); - /* Enforce the Delaunay condition around farpoint. */ - delaunayfixup(&fixuptri, 0); - delaunayfixup(&fixuptri2, 1); - done = 1; - } else { - if (area > 0.0) { /* farpoint is to the left of the segment. */ - oprev(fixuptri, fixuptri2); - /* Enforce the Delaunay condition around farpoint, on the */ - /* left side of the segment only. */ - delaunayfixup(&fixuptri2, 1); - /* Flip the edge that crosses the segment. After the edge is */ - /* flipped, one of its endpoints is the fan vertex, and the */ - /* destination of fixuptri is the fan vertex. */ - lprevself(fixuptri); - } else { /* farpoint is to the right of the segment. */ - delaunayfixup(&fixuptri, 0); - /* Flip the edge that crosses the segment. After the edge is */ - /* flipped, one of its endpoints is the fan vertex, and the */ - /* destination of fixuptri is the fan vertex. */ - oprevself(fixuptri); - } - /* Check for two intersecting segments. */ - tspivot(fixuptri, fixupedge); - if (fixupedge.sh == dummysh) { - flip(&fixuptri); /* May create an inverted triangle on the left. */ - } else { - /* We've collided with a segment between endpoint1 and endpoint2. */ - collision = 1; - /* Insert a point at the intersection. */ - segmentintersection(&fixuptri, &fixupedge, endpoint2); - done = 1; - } - } - } - } while (!done); - /* Insert a shell edge to make the segment permanent. */ - insertshelle(&fixuptri, newmark); - /* If there was a collision with an interceding vertex, install another */ - /* segment connecting that vertex with endpoint2. */ - if (collision) { - /* Insert the remainder of the segment. */ - if (!scoutsegment(&fixuptri, endpoint2, newmark)) { - constrainededge(&fixuptri, endpoint2, newmark); - } - } + struct triedge fixuptri, fixuptri2; + struct edge fixupedge; + point endpoint1; + point farpoint; + REAL area; + int collision; + int done; + triangle ptr; /* Temporary variable used by sym() and oprev(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + org( *starttri, endpoint1 ); + lnext( *starttri, fixuptri ); + flip( &fixuptri ); + /* `collision' indicates whether we have found a point directly */ + /* between endpoint1 and endpoint2. */ + collision = 0; + done = 0; + do { + org( fixuptri, farpoint ); + /* `farpoint' is the extreme point of the polygon we are "digging" */ + /* to get from endpoint1 to endpoint2. */ + if ( ( farpoint[0] == endpoint2[0] ) && ( farpoint[1] == endpoint2[1] ) ) { + oprev( fixuptri, fixuptri2 ); + /* Enforce the Delaunay condition around endpoint2. */ + delaunayfixup( &fixuptri, 0 ); + delaunayfixup( &fixuptri2, 1 ); + done = 1; + } + else { + /* Check whether farpoint is to the left or right of the segment */ + /* being inserted, to decide which edge of fixuptri to dig */ + /* through next. */ + area = counterclockwise( endpoint1, endpoint2, farpoint ); + if ( area == 0.0 ) { + /* We've collided with a point between endpoint1 and endpoint2. */ + collision = 1; + oprev( fixuptri, fixuptri2 ); + /* Enforce the Delaunay condition around farpoint. */ + delaunayfixup( &fixuptri, 0 ); + delaunayfixup( &fixuptri2, 1 ); + done = 1; + } + else { + if ( area > 0.0 ) { /* farpoint is to the left of the segment. */ + oprev( fixuptri, fixuptri2 ); + /* Enforce the Delaunay condition around farpoint, on the */ + /* left side of the segment only. */ + delaunayfixup( &fixuptri2, 1 ); + /* Flip the edge that crosses the segment. After the edge is */ + /* flipped, one of its endpoints is the fan vertex, and the */ + /* destination of fixuptri is the fan vertex. */ + lprevself( fixuptri ); + } + else { /* farpoint is to the right of the segment. */ + delaunayfixup( &fixuptri, 0 ); + /* Flip the edge that crosses the segment. After the edge is */ + /* flipped, one of its endpoints is the fan vertex, and the */ + /* destination of fixuptri is the fan vertex. */ + oprevself( fixuptri ); + } + /* Check for two intersecting segments. */ + tspivot( fixuptri, fixupedge ); + if ( fixupedge.sh == dummysh ) { + flip( &fixuptri ); /* May create an inverted triangle on the left. */ + } + else { + /* We've collided with a segment between endpoint1 and endpoint2. */ + collision = 1; + /* Insert a point at the intersection. */ + segmentintersection( &fixuptri, &fixupedge, endpoint2 ); + done = 1; + } + } + } + } while ( !done ); + /* Insert a shell edge to make the segment permanent. */ + insertshelle( &fixuptri, newmark ); + /* If there was a collision with an interceding vertex, install another */ + /* segment connecting that vertex with endpoint2. */ + if ( collision ) { + /* Insert the remainder of the segment. */ + if ( !scoutsegment( &fixuptri, endpoint2, newmark ) ) { + constrainededge( &fixuptri, endpoint2, newmark ); + } + } } /*****************************************************************************/ @@ -9761,100 +9870,101 @@ int newmark; /* */ /*****************************************************************************/ -void insertsegment(endpoint1, endpoint2, newmark) +void insertsegment( endpoint1, endpoint2, newmark ) point endpoint1; point endpoint2; int newmark; { - struct triedge searchtri1, searchtri2; - triangle encodedtri; - point checkpoint; - triangle ptr; /* Temporary variable used by sym(). */ - - if (verbose > 1) { - printf(" Connecting (%.12g, %.12g) to (%.12g, %.12g).\n", - endpoint1[0], endpoint1[1], endpoint2[0], endpoint2[1]); - } - - /* Find a triangle whose origin is the segment's first endpoint. */ - checkpoint = (point) NULL; - encodedtri = point2tri(endpoint1); - if (encodedtri != (triangle) NULL) { - decode(encodedtri, searchtri1); - org(searchtri1, checkpoint); - } - if (checkpoint != endpoint1) { - /* Find a boundary triangle to search from. */ - searchtri1.tri = dummytri; - searchtri1.orient = 0; - symself(searchtri1); - /* Search for the segment's first endpoint by point location. */ - if (locate(endpoint1, &searchtri1) != ONVERTEX) { - printf( - "Internal error in insertsegment(): Unable to locate PSLG point\n"); - printf(" (%.12g, %.12g) in triangulation.\n", - endpoint1[0], endpoint1[1]); - internalerror(); - } - } - /* Remember this triangle to improve subsequent point location. */ - triedgecopy(searchtri1, recenttri); - /* Scout the beginnings of a path from the first endpoint */ - /* toward the second. */ - if (scoutsegment(&searchtri1, endpoint2, newmark)) { - /* The segment was easily inserted. */ - return; - } - /* The first endpoint may have changed if a collision with an intervening */ - /* vertex on the segment occurred. */ - org(searchtri1, endpoint1); - - /* Find a triangle whose origin is the segment's second endpoint. */ - checkpoint = (point) NULL; - encodedtri = point2tri(endpoint2); - if (encodedtri != (triangle) NULL) { - decode(encodedtri, searchtri2); - org(searchtri2, checkpoint); - } - if (checkpoint != endpoint2) { - /* Find a boundary triangle to search from. */ - searchtri2.tri = dummytri; - searchtri2.orient = 0; - symself(searchtri2); - /* Search for the segment's second endpoint by point location. */ - if (locate(endpoint2, &searchtri2) != ONVERTEX) { - printf( - "Internal error in insertsegment(): Unable to locate PSLG point\n"); - printf(" (%.12g, %.12g) in triangulation.\n", - endpoint2[0], endpoint2[1]); - internalerror(); - } - } - /* Remember this triangle to improve subsequent point location. */ - triedgecopy(searchtri2, recenttri); - /* Scout the beginnings of a path from the second endpoint */ - /* toward the first. */ - if (scoutsegment(&searchtri2, endpoint1, newmark)) { - /* The segment was easily inserted. */ - return; - } - /* The second endpoint may have changed if a collision with an intervening */ - /* vertex on the segment occurred. */ - org(searchtri2, endpoint2); + struct triedge searchtri1, searchtri2; + triangle encodedtri; + point checkpoint; + triangle ptr; /* Temporary variable used by sym(). */ + + if ( verbose > 1 ) { + printf( " Connecting (%.12g, %.12g) to (%.12g, %.12g).\n", + endpoint1[0], endpoint1[1], endpoint2[0], endpoint2[1] ); + } + + /* Find a triangle whose origin is the segment's first endpoint. */ + checkpoint = (point) NULL; + encodedtri = point2tri( endpoint1 ); + if ( encodedtri != (triangle) NULL ) { + decode( encodedtri, searchtri1 ); + org( searchtri1, checkpoint ); + } + if ( checkpoint != endpoint1 ) { + /* Find a boundary triangle to search from. */ + searchtri1.tri = dummytri; + searchtri1.orient = 0; + symself( searchtri1 ); + /* Search for the segment's first endpoint by point location. */ + if ( locate( endpoint1, &searchtri1 ) != ONVERTEX ) { + printf( + "Internal error in insertsegment(): Unable to locate PSLG point\n" ); + printf( " (%.12g, %.12g) in triangulation.\n", + endpoint1[0], endpoint1[1] ); + internalerror(); + } + } + /* Remember this triangle to improve subsequent point location. */ + triedgecopy( searchtri1, recenttri ); + /* Scout the beginnings of a path from the first endpoint */ + /* toward the second. */ + if ( scoutsegment( &searchtri1, endpoint2, newmark ) ) { + /* The segment was easily inserted. */ + return; + } + /* The first endpoint may have changed if a collision with an intervening */ + /* vertex on the segment occurred. */ + org( searchtri1, endpoint1 ); + + /* Find a triangle whose origin is the segment's second endpoint. */ + checkpoint = (point) NULL; + encodedtri = point2tri( endpoint2 ); + if ( encodedtri != (triangle) NULL ) { + decode( encodedtri, searchtri2 ); + org( searchtri2, checkpoint ); + } + if ( checkpoint != endpoint2 ) { + /* Find a boundary triangle to search from. */ + searchtri2.tri = dummytri; + searchtri2.orient = 0; + symself( searchtri2 ); + /* Search for the segment's second endpoint by point location. */ + if ( locate( endpoint2, &searchtri2 ) != ONVERTEX ) { + printf( + "Internal error in insertsegment(): Unable to locate PSLG point\n" ); + printf( " (%.12g, %.12g) in triangulation.\n", + endpoint2[0], endpoint2[1] ); + internalerror(); + } + } + /* Remember this triangle to improve subsequent point location. */ + triedgecopy( searchtri2, recenttri ); + /* Scout the beginnings of a path from the second endpoint */ + /* toward the first. */ + if ( scoutsegment( &searchtri2, endpoint1, newmark ) ) { + /* The segment was easily inserted. */ + return; + } + /* The second endpoint may have changed if a collision with an intervening */ + /* vertex on the segment occurred. */ + org( searchtri2, endpoint2 ); #ifndef REDUCED #ifndef CDT_ONLY - if (splitseg) { - /* Insert vertices to force the segment into the triangulation. */ - conformingedge(endpoint1, endpoint2, newmark); - } else { + if ( splitseg ) { + /* Insert vertices to force the segment into the triangulation. */ + conformingedge( endpoint1, endpoint2, newmark ); + } + else { #endif /* not CDT_ONLY */ #endif /* not REDUCED */ - /* Insert the segment directly into the triangulation. */ - constrainededge(&searchtri1, endpoint2, newmark); + /* Insert the segment directly into the triangulation. */ + constrainededge( &searchtri1, endpoint2, newmark ); #ifndef REDUCED #ifndef CDT_ONLY - } +} #endif /* not CDT_ONLY */ #endif /* not REDUCED */ } @@ -9865,31 +9975,30 @@ int newmark; /* */ /*****************************************************************************/ -void markhull() -{ - struct triedge hulltri; - struct triedge nexttri; - struct triedge starttri; - triangle ptr; /* Temporary variable used by sym() and oprev(). */ - - /* Find a triangle handle on the hull. */ - hulltri.tri = dummytri; - hulltri.orient = 0; - symself(hulltri); - /* Remember where we started so we know when to stop. */ - triedgecopy(hulltri, starttri); - /* Go once counterclockwise around the convex hull. */ - do { - /* Create a shell edge if there isn't already one here. */ - insertshelle(&hulltri, 1); - /* To find the next hull edge, go clockwise around the next vertex. */ - lnextself(hulltri); - oprev(hulltri, nexttri); - while (nexttri.tri != dummytri) { - triedgecopy(nexttri, hulltri); - oprev(hulltri, nexttri); - } - } while (!triedgeequal(hulltri, starttri)); +void markhull(){ + struct triedge hulltri; + struct triedge nexttri; + struct triedge starttri; + triangle ptr; /* Temporary variable used by sym() and oprev(). */ + + /* Find a triangle handle on the hull. */ + hulltri.tri = dummytri; + hulltri.orient = 0; + symself( hulltri ); + /* Remember where we started so we know when to stop. */ + triedgecopy( hulltri, starttri ); + /* Go once counterclockwise around the convex hull. */ + do { + /* Create a shell edge if there isn't already one here. */ + insertshelle( &hulltri, 1 ); + /* To find the next hull edge, go clockwise around the next vertex. */ + lnextself( hulltri ); + oprev( hulltri, nexttri ); + while ( nexttri.tri != dummytri ) { + triedgecopy( nexttri, hulltri ); + oprev( hulltri, nexttri ); + } + } while ( !triedgeequal( hulltri, starttri ) ); } /*****************************************************************************/ @@ -9904,134 +10013,142 @@ void markhull() #ifdef TRILIBRARY -int formskeleton(segmentlist, segmentmarkerlist, numberofsegments) +int formskeleton( segmentlist, segmentmarkerlist, numberofsegments ) int *segmentlist; int *segmentmarkerlist; int numberofsegments; #else /* not TRILIBRARY */ -int formskeleton(polyfile, polyfilename) -FILE *polyfile; +int formskeleton( polyfile, polyfilename ) +FILE * polyfile; char *polyfilename; #endif /* not TRILIBRARY */ { #ifdef TRILIBRARY - char polyfilename[6]; - int index; + char polyfilename[6]; + int index; #else /* not TRILIBRARY */ - char inputline[INPUTLINESIZE]; - char *stringptr; + char inputline[INPUTLINESIZE]; + char *stringptr; #endif /* not TRILIBRARY */ - point endpoint1, endpoint2; - int segments; - int segmentmarkers; - int end1, end2; - int boundmarker; - int i; - - if (poly) { - if (!quiet) { - printf("Inserting segments into Delaunay triangulation.\n"); - } + point endpoint1, endpoint2; + int segments; + int segmentmarkers; + int end1, end2; + int boundmarker; + int i; + + if ( poly ) { + if ( !quiet ) { + printf( "Inserting segments into Delaunay triangulation.\n" ); + } #ifdef TRILIBRARY - strcpy(polyfilename, "input"); - segments = numberofsegments; - segmentmarkers = segmentmarkerlist != (int *) NULL; - index = 0; + strcpy( polyfilename, "input" ); + segments = numberofsegments; + segmentmarkers = segmentmarkerlist != (int *) NULL; + index = 0; #else /* not TRILIBRARY */ - /* Read the segments from a .poly file. */ - /* Read number of segments and number of boundary markers. */ - stringptr = readline(inputline, polyfile, polyfilename); - segments = (int) strtol (stringptr, &stringptr, 0); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - segmentmarkers = 0; - } else { - segmentmarkers = (int) strtol (stringptr, &stringptr, 0); - } + /* Read the segments from a .poly file. */ + /* Read number of segments and number of boundary markers. */ + stringptr = readline( inputline, polyfile, polyfilename ); + segments = (int) strtol( stringptr, &stringptr, 0 ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + segmentmarkers = 0; + } + else { + segmentmarkers = (int) strtol( stringptr, &stringptr, 0 ); + } #endif /* not TRILIBRARY */ - /* If segments are to be inserted, compute a mapping */ - /* from points to triangles. */ - if (segments > 0) { - if (verbose) { - printf(" Inserting PSLG segments.\n"); - } - makepointmap(); - } - - boundmarker = 0; - /* Read and insert the segments. */ - for (i = 1; i <= segments; i++) { + /* If segments are to be inserted, compute a mapping */ + /* from points to triangles. */ + if ( segments > 0 ) { + if ( verbose ) { + printf( " Inserting PSLG segments.\n" ); + } + makepointmap(); + } + + boundmarker = 0; + /* Read and insert the segments. */ + for ( i = 1; i <= segments; i++ ) { #ifdef TRILIBRARY - end1 = segmentlist[index++]; - end2 = segmentlist[index++]; - if (segmentmarkers) { - boundmarker = segmentmarkerlist[i - 1]; - } + end1 = segmentlist[index++]; + end2 = segmentlist[index++]; + if ( segmentmarkers ) { + boundmarker = segmentmarkerlist[i - 1]; + } #else /* not TRILIBRARY */ - stringptr = readline(inputline, polyfile, inpolyfilename); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Segment %d has no endpoints in %s.\n", i, - polyfilename); - exit(1); - } else { - end1 = (int) strtol (stringptr, &stringptr, 0); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Segment %d is missing its second endpoint in %s.\n", i, - polyfilename); - exit(1); - } else { - end2 = (int) strtol (stringptr, &stringptr, 0); - } - if (segmentmarkers) { - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - boundmarker = 0; - } else { - boundmarker = (int) strtol (stringptr, &stringptr, 0); - } - } + stringptr = readline( inputline, polyfile, inpolyfilename ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Segment %d has no endpoints in %s.\n", i, + polyfilename ); + exit( 1 ); + } + else { + end1 = (int) strtol( stringptr, &stringptr, 0 ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Segment %d is missing its second endpoint in %s.\n", i, + polyfilename ); + exit( 1 ); + } + else { + end2 = (int) strtol( stringptr, &stringptr, 0 ); + } + if ( segmentmarkers ) { + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + boundmarker = 0; + } + else { + boundmarker = (int) strtol( stringptr, &stringptr, 0 ); + } + } #endif /* not TRILIBRARY */ - if ((end1 < firstnumber) || (end1 >= firstnumber + inpoints)) { - if (!quiet) { - printf("Warning: Invalid first endpoint of segment %d in %s.\n", i, - polyfilename); - } - } else if ((end2 < firstnumber) || (end2 >= firstnumber + inpoints)) { - if (!quiet) { - printf("Warning: Invalid second endpoint of segment %d in %s.\n", i, - polyfilename); - } - } else { - endpoint1 = getpoint(end1); - endpoint2 = getpoint(end2); - if ((endpoint1[0] == endpoint2[0]) && (endpoint1[1] == endpoint2[1])) { - if (!quiet) { - printf("Warning: Endpoints of segment %d are coincident in %s.\n", - i, polyfilename); - } - } else { - insertsegment(endpoint1, endpoint2, boundmarker); - } - } - } - } else { - segments = 0; - } - if (convex || !poly) { - /* Enclose the convex hull with shell edges. */ - if (verbose) { - printf(" Enclosing convex hull with segments.\n"); - } - markhull(); - } - return segments; + if ( ( end1 < firstnumber ) || ( end1 >= firstnumber + inpoints ) ) { + if ( !quiet ) { + printf( "Warning: Invalid first endpoint of segment %d in %s.\n", i, + polyfilename ); + } + } + else if ( ( end2 < firstnumber ) || ( end2 >= firstnumber + inpoints ) ) { + if ( !quiet ) { + printf( "Warning: Invalid second endpoint of segment %d in %s.\n", i, + polyfilename ); + } + } + else { + endpoint1 = getpoint( end1 ); + endpoint2 = getpoint( end2 ); + if ( ( endpoint1[0] == endpoint2[0] ) && ( endpoint1[1] == endpoint2[1] ) ) { + if ( !quiet ) { + printf( "Warning: Endpoints of segment %d are coincident in %s.\n", + i, polyfilename ); + } + } + else { + insertsegment( endpoint1, endpoint2, boundmarker ); + } + } + } + } + else { + segments = 0; + } + if ( convex || !poly ) { + /* Enclose the convex hull with shell edges. */ + if ( verbose ) { + printf( " Enclosing convex hull with segments.\n" ); + } + markhull(); + } + return segments; } /** **/ @@ -10050,60 +10167,60 @@ char *polyfilename; /* */ /*****************************************************************************/ -void infecthull() -{ - struct triedge hulltri; - struct triedge nexttri; - struct triedge starttri; - struct edge hulledge; - triangle **deadtri; - point horg, hdest; - triangle ptr; /* Temporary variable used by sym(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - if (verbose) { - printf(" Marking concavities (external triangles) for elimination.\n"); - } - /* Find a triangle handle on the hull. */ - hulltri.tri = dummytri; - hulltri.orient = 0; - symself(hulltri); - /* Remember where we started so we know when to stop. */ - triedgecopy(hulltri, starttri); - /* Go once counterclockwise around the convex hull. */ - do { - /* Ignore triangles that are already infected. */ - if (!infected(hulltri)) { - /* Is the triangle protected by a shell edge? */ - tspivot(hulltri, hulledge); - if (hulledge.sh == dummysh) { - /* The triangle is not protected; infect it. */ - infect(hulltri); - deadtri = (triangle **) poolalloc(&viri); - *deadtri = hulltri.tri; - } else { - /* The triangle is protected; set boundary markers if appropriate. */ - if (mark(hulledge) == 0) { - setmark(hulledge, 1); - org(hulltri, horg); - dest(hulltri, hdest); - if (pointmark(horg) == 0) { - setpointmark(horg, 1); - } - if (pointmark(hdest) == 0) { - setpointmark(hdest, 1); - } - } - } - } - /* To find the next hull edge, go clockwise around the next vertex. */ - lnextself(hulltri); - oprev(hulltri, nexttri); - while (nexttri.tri != dummytri) { - triedgecopy(nexttri, hulltri); - oprev(hulltri, nexttri); - } - } while (!triedgeequal(hulltri, starttri)); +void infecthull(){ + struct triedge hulltri; + struct triedge nexttri; + struct triedge starttri; + struct edge hulledge; + triangle **deadtri; + point horg, hdest; + triangle ptr; /* Temporary variable used by sym(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + if ( verbose ) { + printf( " Marking concavities (external triangles) for elimination.\n" ); + } + /* Find a triangle handle on the hull. */ + hulltri.tri = dummytri; + hulltri.orient = 0; + symself( hulltri ); + /* Remember where we started so we know when to stop. */ + triedgecopy( hulltri, starttri ); + /* Go once counterclockwise around the convex hull. */ + do { + /* Ignore triangles that are already infected. */ + if ( !infected( hulltri ) ) { + /* Is the triangle protected by a shell edge? */ + tspivot( hulltri, hulledge ); + if ( hulledge.sh == dummysh ) { + /* The triangle is not protected; infect it. */ + infect( hulltri ); + deadtri = (triangle **) poolalloc( &viri ); + *deadtri = hulltri.tri; + } + else { + /* The triangle is protected; set boundary markers if appropriate. */ + if ( mark( hulledge ) == 0 ) { + setmark( hulledge, 1 ); + org( hulltri, horg ); + dest( hulltri, hdest ); + if ( pointmark( horg ) == 0 ) { + setpointmark( horg, 1 ); + } + if ( pointmark( hdest ) == 0 ) { + setpointmark( hdest, 1 ); + } + } + } + } + /* To find the next hull edge, go clockwise around the next vertex. */ + lnextself( hulltri ); + oprev( hulltri, nexttri ); + while ( nexttri.tri != dummytri ) { + triedgecopy( nexttri, hulltri ); + oprev( hulltri, nexttri ); + } + } while ( !triedgeequal( hulltri, starttri ) ); } /*****************************************************************************/ @@ -10123,190 +10240,194 @@ void infecthull() /* */ /*****************************************************************************/ -void plague() -{ - struct triedge testtri; - struct triedge neighbor; - triangle **virusloop; - triangle **deadtri; - struct edge neighborshelle; - point testpoint; - point norg, ndest; - point deadorg, deaddest, deadapex; - int killorg; - triangle ptr; /* Temporary variable used by sym() and onext(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - if (verbose) { - printf(" Marking neighbors of marked triangles.\n"); - } - /* Loop through all the infected triangles, spreading the virus to */ - /* their neighbors, then to their neighbors' neighbors. */ - traversalinit(&viri); - virusloop = (triangle **) traverse(&viri); - while (virusloop != (triangle **) NULL) { - testtri.tri = *virusloop; - /* A triangle is marked as infected by messing with one of its shell */ - /* edges, setting it to an illegal value. Hence, we have to */ - /* temporarily uninfect this triangle so that we can examine its */ - /* adjacent shell edges. */ - uninfect(testtri); - if (verbose > 2) { - /* Assign the triangle an orientation for convenience in */ - /* checking its points. */ - testtri.orient = 0; - org(testtri, deadorg); - dest(testtri, deaddest); - apex(testtri, deadapex); - printf(" Checking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", - deadorg[0], deadorg[1], deaddest[0], deaddest[1], - deadapex[0], deadapex[1]); - } - /* Check each of the triangle's three neighbors. */ - for (testtri.orient = 0; testtri.orient < 3; testtri.orient++) { - /* Find the neighbor. */ - sym(testtri, neighbor); - /* Check for a shell between the triangle and its neighbor. */ - tspivot(testtri, neighborshelle); - /* Check if the neighbor is nonexistent or already infected. */ - if ((neighbor.tri == dummytri) || infected(neighbor)) { - if (neighborshelle.sh != dummysh) { - /* There is a shell edge separating the triangle from its */ - /* neighbor, but both triangles are dying, so the shell */ - /* edge dies too. */ - shelledealloc(neighborshelle.sh); - if (neighbor.tri != dummytri) { - /* Make sure the shell edge doesn't get deallocated again */ - /* later when the infected neighbor is visited. */ - uninfect(neighbor); - tsdissolve(neighbor); - infect(neighbor); - } - } - } else { /* The neighbor exists and is not infected. */ - if (neighborshelle.sh == dummysh) { - /* There is no shell edge protecting the neighbor, so */ - /* the neighbor becomes infected. */ - if (verbose > 2) { - org(neighbor, deadorg); - dest(neighbor, deaddest); - apex(neighbor, deadapex); - printf( - " Marking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", - deadorg[0], deadorg[1], deaddest[0], deaddest[1], - deadapex[0], deadapex[1]); - } - infect(neighbor); - /* Ensure that the neighbor's neighbors will be infected. */ - deadtri = (triangle **) poolalloc(&viri); - *deadtri = neighbor.tri; - } else { /* The neighbor is protected by a shell edge. */ - /* Remove this triangle from the shell edge. */ - stdissolve(neighborshelle); - /* The shell edge becomes a boundary. Set markers accordingly. */ - if (mark(neighborshelle) == 0) { - setmark(neighborshelle, 1); - } - org(neighbor, norg); - dest(neighbor, ndest); - if (pointmark(norg) == 0) { - setpointmark(norg, 1); - } - if (pointmark(ndest) == 0) { - setpointmark(ndest, 1); - } - } - } - } - /* Remark the triangle as infected, so it doesn't get added to the */ - /* virus pool again. */ - infect(testtri); - virusloop = (triangle **) traverse(&viri); - } - - if (verbose) { - printf(" Deleting marked triangles.\n"); - } - traversalinit(&viri); - virusloop = (triangle **) traverse(&viri); - while (virusloop != (triangle **) NULL) { - testtri.tri = *virusloop; - - /* Check each of the three corners of the triangle for elimination. */ - /* This is done by walking around each point, checking if it is */ - /* still connected to at least one live triangle. */ - for (testtri.orient = 0; testtri.orient < 3; testtri.orient++) { - org(testtri, testpoint); - /* Check if the point has already been tested. */ - if (testpoint != (point) NULL) { - killorg = 1; - /* Mark the corner of the triangle as having been tested. */ - setorg(testtri, NULL); - /* Walk counterclockwise about the point. */ - onext(testtri, neighbor); - /* Stop upon reaching a boundary or the starting triangle. */ - while ((neighbor.tri != dummytri) - && (!triedgeequal(neighbor, testtri))) { - if (infected(neighbor)) { - /* Mark the corner of this triangle as having been tested. */ - setorg(neighbor, NULL); - } else { - /* A live triangle. The point survives. */ - killorg = 0; - } - /* Walk counterclockwise about the point. */ - onextself(neighbor); - } - /* If we reached a boundary, we must walk clockwise as well. */ - if (neighbor.tri == dummytri) { - /* Walk clockwise about the point. */ - oprev(testtri, neighbor); - /* Stop upon reaching a boundary. */ - while (neighbor.tri != dummytri) { - if (infected(neighbor)) { - /* Mark the corner of this triangle as having been tested. */ - setorg(neighbor, NULL); - } else { - /* A live triangle. The point survives. */ - killorg = 0; - } - /* Walk clockwise about the point. */ - oprevself(neighbor); - } - } - if (killorg) { - if (verbose > 1) { - printf(" Deleting point (%.12g, %.12g)\n", - testpoint[0], testpoint[1]); - } - pointdealloc(testpoint); - } - } - } - - /* Record changes in the number of boundary edges, and disconnect */ - /* dead triangles from their neighbors. */ - for (testtri.orient = 0; testtri.orient < 3; testtri.orient++) { - sym(testtri, neighbor); - if (neighbor.tri == dummytri) { - /* There is no neighboring triangle on this edge, so this edge */ - /* is a boundary edge. This triangle is being deleted, so this */ - /* boundary edge is deleted. */ - hullsize--; - } else { - /* Disconnect the triangle from its neighbor. */ - dissolve(neighbor); - /* There is a neighboring triangle on this edge, so this edge */ - /* becomes a boundary edge when this triangle is deleted. */ - hullsize++; - } - } - /* Return the dead triangle to the pool of triangles. */ - triangledealloc(testtri.tri); - virusloop = (triangle **) traverse(&viri); - } - /* Empty the virus pool. */ - poolrestart(&viri); +void plague(){ + struct triedge testtri; + struct triedge neighbor; + triangle **virusloop; + triangle **deadtri; + struct edge neighborshelle; + point testpoint; + point norg, ndest; + point deadorg, deaddest, deadapex; + int killorg; + triangle ptr; /* Temporary variable used by sym() and onext(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + if ( verbose ) { + printf( " Marking neighbors of marked triangles.\n" ); + } + /* Loop through all the infected triangles, spreading the virus to */ + /* their neighbors, then to their neighbors' neighbors. */ + traversalinit( &viri ); + virusloop = (triangle **) traverse( &viri ); + while ( virusloop != (triangle **) NULL ) { + testtri.tri = *virusloop; + /* A triangle is marked as infected by messing with one of its shell */ + /* edges, setting it to an illegal value. Hence, we have to */ + /* temporarily uninfect this triangle so that we can examine its */ + /* adjacent shell edges. */ + uninfect( testtri ); + if ( verbose > 2 ) { + /* Assign the triangle an orientation for convenience in */ + /* checking its points. */ + testtri.orient = 0; + org( testtri, deadorg ); + dest( testtri, deaddest ); + apex( testtri, deadapex ); + printf( " Checking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", + deadorg[0], deadorg[1], deaddest[0], deaddest[1], + deadapex[0], deadapex[1] ); + } + /* Check each of the triangle's three neighbors. */ + for ( testtri.orient = 0; testtri.orient < 3; testtri.orient++ ) { + /* Find the neighbor. */ + sym( testtri, neighbor ); + /* Check for a shell between the triangle and its neighbor. */ + tspivot( testtri, neighborshelle ); + /* Check if the neighbor is nonexistent or already infected. */ + if ( ( neighbor.tri == dummytri ) || infected( neighbor ) ) { + if ( neighborshelle.sh != dummysh ) { + /* There is a shell edge separating the triangle from its */ + /* neighbor, but both triangles are dying, so the shell */ + /* edge dies too. */ + shelledealloc( neighborshelle.sh ); + if ( neighbor.tri != dummytri ) { + /* Make sure the shell edge doesn't get deallocated again */ + /* later when the infected neighbor is visited. */ + uninfect( neighbor ); + tsdissolve( neighbor ); + infect( neighbor ); + } + } + } + else { /* The neighbor exists and is not infected. */ + if ( neighborshelle.sh == dummysh ) { + /* There is no shell edge protecting the neighbor, so */ + /* the neighbor becomes infected. */ + if ( verbose > 2 ) { + org( neighbor, deadorg ); + dest( neighbor, deaddest ); + apex( neighbor, deadapex ); + printf( + " Marking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", + deadorg[0], deadorg[1], deaddest[0], deaddest[1], + deadapex[0], deadapex[1] ); + } + infect( neighbor ); + /* Ensure that the neighbor's neighbors will be infected. */ + deadtri = (triangle **) poolalloc( &viri ); + *deadtri = neighbor.tri; + } + else { /* The neighbor is protected by a shell edge. */ + /* Remove this triangle from the shell edge. */ + stdissolve( neighborshelle ); + /* The shell edge becomes a boundary. Set markers accordingly. */ + if ( mark( neighborshelle ) == 0 ) { + setmark( neighborshelle, 1 ); + } + org( neighbor, norg ); + dest( neighbor, ndest ); + if ( pointmark( norg ) == 0 ) { + setpointmark( norg, 1 ); + } + if ( pointmark( ndest ) == 0 ) { + setpointmark( ndest, 1 ); + } + } + } + } + /* Remark the triangle as infected, so it doesn't get added to the */ + /* virus pool again. */ + infect( testtri ); + virusloop = (triangle **) traverse( &viri ); + } + + if ( verbose ) { + printf( " Deleting marked triangles.\n" ); + } + traversalinit( &viri ); + virusloop = (triangle **) traverse( &viri ); + while ( virusloop != (triangle **) NULL ) { + testtri.tri = *virusloop; + + /* Check each of the three corners of the triangle for elimination. */ + /* This is done by walking around each point, checking if it is */ + /* still connected to at least one live triangle. */ + for ( testtri.orient = 0; testtri.orient < 3; testtri.orient++ ) { + org( testtri, testpoint ); + /* Check if the point has already been tested. */ + if ( testpoint != (point) NULL ) { + killorg = 1; + /* Mark the corner of the triangle as having been tested. */ + setorg( testtri, NULL ); + /* Walk counterclockwise about the point. */ + onext( testtri, neighbor ); + /* Stop upon reaching a boundary or the starting triangle. */ + while ( ( neighbor.tri != dummytri ) + && ( !triedgeequal( neighbor, testtri ) ) ) { + if ( infected( neighbor ) ) { + /* Mark the corner of this triangle as having been tested. */ + setorg( neighbor, NULL ); + } + else { + /* A live triangle. The point survives. */ + killorg = 0; + } + /* Walk counterclockwise about the point. */ + onextself( neighbor ); + } + /* If we reached a boundary, we must walk clockwise as well. */ + if ( neighbor.tri == dummytri ) { + /* Walk clockwise about the point. */ + oprev( testtri, neighbor ); + /* Stop upon reaching a boundary. */ + while ( neighbor.tri != dummytri ) { + if ( infected( neighbor ) ) { + /* Mark the corner of this triangle as having been tested. */ + setorg( neighbor, NULL ); + } + else { + /* A live triangle. The point survives. */ + killorg = 0; + } + /* Walk clockwise about the point. */ + oprevself( neighbor ); + } + } + if ( killorg ) { + if ( verbose > 1 ) { + printf( " Deleting point (%.12g, %.12g)\n", + testpoint[0], testpoint[1] ); + } + pointdealloc( testpoint ); + } + } + } + + /* Record changes in the number of boundary edges, and disconnect */ + /* dead triangles from their neighbors. */ + for ( testtri.orient = 0; testtri.orient < 3; testtri.orient++ ) { + sym( testtri, neighbor ); + if ( neighbor.tri == dummytri ) { + /* There is no neighboring triangle on this edge, so this edge */ + /* is a boundary edge. This triangle is being deleted, so this */ + /* boundary edge is deleted. */ + hullsize--; + } + else { + /* Disconnect the triangle from its neighbor. */ + dissolve( neighbor ); + /* There is a neighboring triangle on this edge, so this edge */ + /* becomes a boundary edge when this triangle is deleted. */ + hullsize++; + } + } + /* Return the dead triangle to the pool of triangles. */ + triangledealloc( testtri.tri ); + virusloop = (triangle **) traverse( &viri ); + } + /* Empty the virus pool. */ + poolrestart( &viri ); } /*****************************************************************************/ @@ -10324,97 +10445,97 @@ void plague() /* */ /*****************************************************************************/ -void regionplague(attribute, area) +void regionplague( attribute, area ) REAL attribute; REAL area; { - struct triedge testtri; - struct triedge neighbor; - triangle **virusloop; - triangle **regiontri; - struct edge neighborshelle; - point regionorg, regiondest, regionapex; - triangle ptr; /* Temporary variable used by sym() and onext(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - if (verbose > 1) { - printf(" Marking neighbors of marked triangles.\n"); - } - /* Loop through all the infected triangles, spreading the attribute */ - /* and/or area constraint to their neighbors, then to their neighbors' */ - /* neighbors. */ - traversalinit(&viri); - virusloop = (triangle **) traverse(&viri); - while (virusloop != (triangle **) NULL) { - testtri.tri = *virusloop; - /* A triangle is marked as infected by messing with one of its shell */ - /* edges, setting it to an illegal value. Hence, we have to */ - /* temporarily uninfect this triangle so that we can examine its */ - /* adjacent shell edges. */ - uninfect(testtri); - if (regionattrib) { - /* Set an attribute. */ - setelemattribute(testtri, eextras, attribute); - } - if (vararea) { - /* Set an area constraint. */ - setareabound(testtri, area); - } - if (verbose > 2) { - /* Assign the triangle an orientation for convenience in */ - /* checking its points. */ - testtri.orient = 0; - org(testtri, regionorg); - dest(testtri, regiondest); - apex(testtri, regionapex); - printf(" Checking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", - regionorg[0], regionorg[1], regiondest[0], regiondest[1], - regionapex[0], regionapex[1]); - } - /* Check each of the triangle's three neighbors. */ - for (testtri.orient = 0; testtri.orient < 3; testtri.orient++) { - /* Find the neighbor. */ - sym(testtri, neighbor); - /* Check for a shell between the triangle and its neighbor. */ - tspivot(testtri, neighborshelle); - /* Make sure the neighbor exists, is not already infected, and */ - /* isn't protected by a shell edge. */ - if ((neighbor.tri != dummytri) && !infected(neighbor) - && (neighborshelle.sh == dummysh)) { - if (verbose > 2) { - org(neighbor, regionorg); - dest(neighbor, regiondest); - apex(neighbor, regionapex); - printf(" Marking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", - regionorg[0], regionorg[1], regiondest[0], regiondest[1], - regionapex[0], regionapex[1]); - } - /* Infect the neighbor. */ - infect(neighbor); - /* Ensure that the neighbor's neighbors will be infected. */ - regiontri = (triangle **) poolalloc(&viri); - *regiontri = neighbor.tri; - } - } - /* Remark the triangle as infected, so it doesn't get added to the */ - /* virus pool again. */ - infect(testtri); - virusloop = (triangle **) traverse(&viri); - } - - /* Uninfect all triangles. */ - if (verbose > 1) { - printf(" Unmarking marked triangles.\n"); - } - traversalinit(&viri); - virusloop = (triangle **) traverse(&viri); - while (virusloop != (triangle **) NULL) { - testtri.tri = *virusloop; - uninfect(testtri); - virusloop = (triangle **) traverse(&viri); - } - /* Empty the virus pool. */ - poolrestart(&viri); + struct triedge testtri; + struct triedge neighbor; + triangle **virusloop; + triangle **regiontri; + struct edge neighborshelle; + point regionorg, regiondest, regionapex; + triangle ptr; /* Temporary variable used by sym() and onext(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + if ( verbose > 1 ) { + printf( " Marking neighbors of marked triangles.\n" ); + } + /* Loop through all the infected triangles, spreading the attribute */ + /* and/or area constraint to their neighbors, then to their neighbors' */ + /* neighbors. */ + traversalinit( &viri ); + virusloop = (triangle **) traverse( &viri ); + while ( virusloop != (triangle **) NULL ) { + testtri.tri = *virusloop; + /* A triangle is marked as infected by messing with one of its shell */ + /* edges, setting it to an illegal value. Hence, we have to */ + /* temporarily uninfect this triangle so that we can examine its */ + /* adjacent shell edges. */ + uninfect( testtri ); + if ( regionattrib ) { + /* Set an attribute. */ + setelemattribute( testtri, eextras, attribute ); + } + if ( vararea ) { + /* Set an area constraint. */ + setareabound( testtri, area ); + } + if ( verbose > 2 ) { + /* Assign the triangle an orientation for convenience in */ + /* checking its points. */ + testtri.orient = 0; + org( testtri, regionorg ); + dest( testtri, regiondest ); + apex( testtri, regionapex ); + printf( " Checking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", + regionorg[0], regionorg[1], regiondest[0], regiondest[1], + regionapex[0], regionapex[1] ); + } + /* Check each of the triangle's three neighbors. */ + for ( testtri.orient = 0; testtri.orient < 3; testtri.orient++ ) { + /* Find the neighbor. */ + sym( testtri, neighbor ); + /* Check for a shell between the triangle and its neighbor. */ + tspivot( testtri, neighborshelle ); + /* Make sure the neighbor exists, is not already infected, and */ + /* isn't protected by a shell edge. */ + if ( ( neighbor.tri != dummytri ) && !infected( neighbor ) + && ( neighborshelle.sh == dummysh ) ) { + if ( verbose > 2 ) { + org( neighbor, regionorg ); + dest( neighbor, regiondest ); + apex( neighbor, regionapex ); + printf( " Marking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", + regionorg[0], regionorg[1], regiondest[0], regiondest[1], + regionapex[0], regionapex[1] ); + } + /* Infect the neighbor. */ + infect( neighbor ); + /* Ensure that the neighbor's neighbors will be infected. */ + regiontri = (triangle **) poolalloc( &viri ); + *regiontri = neighbor.tri; + } + } + /* Remark the triangle as infected, so it doesn't get added to the */ + /* virus pool again. */ + infect( testtri ); + virusloop = (triangle **) traverse( &viri ); + } + + /* Uninfect all triangles. */ + if ( verbose > 1 ) { + printf( " Unmarking marked triangles.\n" ); + } + traversalinit( &viri ); + virusloop = (triangle **) traverse( &viri ); + while ( virusloop != (triangle **) NULL ) { + testtri.tri = *virusloop; + uninfect( testtri ); + virusloop = (triangle **) traverse( &viri ); + } + /* Empty the virus pool. */ + poolrestart( &viri ); } /*****************************************************************************/ @@ -10429,172 +10550,174 @@ REAL area; /* */ /*****************************************************************************/ -void carveholes(holelist, holes, regionlist, regions) -REAL *holelist; +void carveholes( holelist, holes, regionlist, regions ) +REAL * holelist; int holes; REAL *regionlist; int regions; { - struct triedge searchtri; - struct triedge triangleloop; - struct triedge *regiontris; - triangle **holetri; - triangle **regiontri; - point searchorg, searchdest; - enum locateresult intersect; - int i; - triangle ptr; /* Temporary variable used by sym(). */ - - if (!(quiet || (noholes && convex))) { - printf("Removing unwanted triangles.\n"); - if (verbose && (holes > 0)) { - printf(" Marking holes for elimination.\n"); - } - } - - if (regions > 0) { - /* Allocate storage for the triangles in which region points fall. */ - regiontris = (struct triedge *) malloc(regions * sizeof(struct triedge)); - if (regiontris == (struct triedge *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - - if (((holes > 0) && !noholes) || !convex || (regions > 0)) { - /* Initialize a pool of viri to be used for holes, concavities, */ - /* regional attributes, and/or regional area constraints. */ - poolinit(&viri, sizeof(triangle *), VIRUSPERBLOCK, POINTER, 0); - } - - if (!convex) { - /* Mark as infected any unprotected triangles on the boundary. */ - /* This is one way by which concavities are created. */ - infecthull(); - } - - if ((holes > 0) && !noholes) { - /* Infect each triangle in which a hole lies. */ - for (i = 0; i < 2 * holes; i += 2) { - /* Ignore holes that aren't within the bounds of the mesh. */ - if ((holelist[i] >= xmin) && (holelist[i] <= xmax) - && (holelist[i + 1] >= ymin) && (holelist[i + 1] <= ymax)) { - /* Start searching from some triangle on the outer boundary. */ - searchtri.tri = dummytri; - searchtri.orient = 0; - symself(searchtri); - /* Ensure that the hole is to the left of this boundary edge; */ - /* otherwise, locate() will falsely report that the hole */ - /* falls within the starting triangle. */ - org(searchtri, searchorg); - dest(searchtri, searchdest); - if (counterclockwise(searchorg, searchdest, &holelist[i]) > 0.0) { - /* Find a triangle that contains the hole. */ - intersect = locate(&holelist[i], &searchtri); - if ((intersect != OUTSIDE) && (!infected(searchtri))) { - /* Infect the triangle. This is done by marking the triangle */ - /* as infect and including the triangle in the virus pool. */ - infect(searchtri); - holetri = (triangle **) poolalloc(&viri); - *holetri = searchtri.tri; - } - } - } - } - } - - /* Now, we have to find all the regions BEFORE we carve the holes, because */ - /* locate() won't work when the triangulation is no longer convex. */ - /* (Incidentally, this is the reason why regional attributes and area */ - /* constraints can't be used when refining a preexisting mesh, which */ - /* might not be convex; they can only be used with a freshly */ - /* triangulated PSLG.) */ - if (regions > 0) { - /* Find the starting triangle for each region. */ - for (i = 0; i < regions; i++) { - regiontris[i].tri = dummytri; - /* Ignore region points that aren't within the bounds of the mesh. */ - if ((regionlist[4 * i] >= xmin) && (regionlist[4 * i] <= xmax) && - (regionlist[4 * i + 1] >= ymin) && (regionlist[4 * i + 1] <= ymax)) { - /* Start searching from some triangle on the outer boundary. */ - searchtri.tri = dummytri; - searchtri.orient = 0; - symself(searchtri); - /* Ensure that the region point is to the left of this boundary */ - /* edge; otherwise, locate() will falsely report that the */ - /* region point falls within the starting triangle. */ - org(searchtri, searchorg); - dest(searchtri, searchdest); - if (counterclockwise(searchorg, searchdest, ®ionlist[4 * i]) > - 0.0) { - /* Find a triangle that contains the region point. */ - intersect = locate(®ionlist[4 * i], &searchtri); - if ((intersect != OUTSIDE) && (!infected(searchtri))) { - /* Record the triangle for processing after the */ - /* holes have been carved. */ - triedgecopy(searchtri, regiontris[i]); - } - } - } - } - } - - if (viri.items > 0) { - /* Carve the holes and concavities. */ - plague(); - } - /* The virus pool should be empty now. */ - - if (regions > 0) { - if (!quiet) { - if (regionattrib) { - if (vararea) { - printf("Spreading regional attributes and area constraints.\n"); - } else { - printf("Spreading regional attributes.\n"); - } - } else { - printf("Spreading regional area constraints.\n"); - } - } - if (regionattrib && !refine) { - /* Assign every triangle a regional attribute of zero. */ - traversalinit(&triangles); - triangleloop.orient = 0; - triangleloop.tri = triangletraverse(); - while (triangleloop.tri != (triangle *) NULL) { - setelemattribute(triangleloop, eextras, 0.0); - triangleloop.tri = triangletraverse(); - } - } - for (i = 0; i < regions; i++) { - if (regiontris[i].tri != dummytri) { - /* Make sure the triangle under consideration still exists. */ - /* It may have been eaten by the virus. */ - if (regiontris[i].tri[3] != (triangle) NULL) { - /* Put one triangle in the virus pool. */ - infect(regiontris[i]); - regiontri = (triangle **) poolalloc(&viri); - *regiontri = regiontris[i].tri; - /* Apply one region's attribute and/or area constraint. */ - regionplague(regionlist[4 * i + 2], regionlist[4 * i + 3]); - /* The virus pool should be empty now. */ - } - } - } - if (regionattrib && !refine) { - /* Note the fact that each triangle has an additional attribute. */ - eextras++; - } - } - - /* Free up memory. */ - if (((holes > 0) && !noholes) || !convex || (regions > 0)) { - pooldeinit(&viri); - } - if (regions > 0) { - free(regiontris); - } + struct triedge searchtri; + struct triedge triangleloop; + struct triedge *regiontris; + triangle **holetri; + triangle **regiontri; + point searchorg, searchdest; + enum locateresult intersect; + int i; + triangle ptr; /* Temporary variable used by sym(). */ + + if ( !( quiet || ( noholes && convex ) ) ) { + printf( "Removing unwanted triangles.\n" ); + if ( verbose && ( holes > 0 ) ) { + printf( " Marking holes for elimination.\n" ); + } + } + + if ( regions > 0 ) { + /* Allocate storage for the triangles in which region points fall. */ + regiontris = (struct triedge *) malloc( regions * sizeof( struct triedge ) ); + if ( regiontris == (struct triedge *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + + if ( ( ( holes > 0 ) && !noholes ) || !convex || ( regions > 0 ) ) { + /* Initialize a pool of viri to be used for holes, concavities, */ + /* regional attributes, and/or regional area constraints. */ + poolinit( &viri, sizeof( triangle * ), VIRUSPERBLOCK, POINTER, 0 ); + } + + if ( !convex ) { + /* Mark as infected any unprotected triangles on the boundary. */ + /* This is one way by which concavities are created. */ + infecthull(); + } + + if ( ( holes > 0 ) && !noholes ) { + /* Infect each triangle in which a hole lies. */ + for ( i = 0; i < 2 * holes; i += 2 ) { + /* Ignore holes that aren't within the bounds of the mesh. */ + if ( ( holelist[i] >= xmin ) && ( holelist[i] <= xmax ) + && ( holelist[i + 1] >= ymin ) && ( holelist[i + 1] <= ymax ) ) { + /* Start searching from some triangle on the outer boundary. */ + searchtri.tri = dummytri; + searchtri.orient = 0; + symself( searchtri ); + /* Ensure that the hole is to the left of this boundary edge; */ + /* otherwise, locate() will falsely report that the hole */ + /* falls within the starting triangle. */ + org( searchtri, searchorg ); + dest( searchtri, searchdest ); + if ( counterclockwise( searchorg, searchdest, &holelist[i] ) > 0.0 ) { + /* Find a triangle that contains the hole. */ + intersect = locate( &holelist[i], &searchtri ); + if ( ( intersect != OUTSIDE ) && ( !infected( searchtri ) ) ) { + /* Infect the triangle. This is done by marking the triangle */ + /* as infect and including the triangle in the virus pool. */ + infect( searchtri ); + holetri = (triangle **) poolalloc( &viri ); + *holetri = searchtri.tri; + } + } + } + } + } + + /* Now, we have to find all the regions BEFORE we carve the holes, because */ + /* locate() won't work when the triangulation is no longer convex. */ + /* (Incidentally, this is the reason why regional attributes and area */ + /* constraints can't be used when refining a preexisting mesh, which */ + /* might not be convex; they can only be used with a freshly */ + /* triangulated PSLG.) */ + if ( regions > 0 ) { + /* Find the starting triangle for each region. */ + for ( i = 0; i < regions; i++ ) { + regiontris[i].tri = dummytri; + /* Ignore region points that aren't within the bounds of the mesh. */ + if ( ( regionlist[4 * i] >= xmin ) && ( regionlist[4 * i] <= xmax ) && + ( regionlist[4 * i + 1] >= ymin ) && ( regionlist[4 * i + 1] <= ymax ) ) { + /* Start searching from some triangle on the outer boundary. */ + searchtri.tri = dummytri; + searchtri.orient = 0; + symself( searchtri ); + /* Ensure that the region point is to the left of this boundary */ + /* edge; otherwise, locate() will falsely report that the */ + /* region point falls within the starting triangle. */ + org( searchtri, searchorg ); + dest( searchtri, searchdest ); + if ( counterclockwise( searchorg, searchdest, ®ionlist[4 * i] ) > + 0.0 ) { + /* Find a triangle that contains the region point. */ + intersect = locate( ®ionlist[4 * i], &searchtri ); + if ( ( intersect != OUTSIDE ) && ( !infected( searchtri ) ) ) { + /* Record the triangle for processing after the */ + /* holes have been carved. */ + triedgecopy( searchtri, regiontris[i] ); + } + } + } + } + } + + if ( viri.items > 0 ) { + /* Carve the holes and concavities. */ + plague(); + } + /* The virus pool should be empty now. */ + + if ( regions > 0 ) { + if ( !quiet ) { + if ( regionattrib ) { + if ( vararea ) { + printf( "Spreading regional attributes and area constraints.\n" ); + } + else { + printf( "Spreading regional attributes.\n" ); + } + } + else { + printf( "Spreading regional area constraints.\n" ); + } + } + if ( regionattrib && !refine ) { + /* Assign every triangle a regional attribute of zero. */ + traversalinit( &triangles ); + triangleloop.orient = 0; + triangleloop.tri = triangletraverse(); + while ( triangleloop.tri != (triangle *) NULL ) { + setelemattribute( triangleloop, eextras, 0.0 ); + triangleloop.tri = triangletraverse(); + } + } + for ( i = 0; i < regions; i++ ) { + if ( regiontris[i].tri != dummytri ) { + /* Make sure the triangle under consideration still exists. */ + /* It may have been eaten by the virus. */ + if ( regiontris[i].tri[3] != (triangle) NULL ) { + /* Put one triangle in the virus pool. */ + infect( regiontris[i] ); + regiontri = (triangle **) poolalloc( &viri ); + *regiontri = regiontris[i].tri; + /* Apply one region's attribute and/or area constraint. */ + regionplague( regionlist[4 * i + 2], regionlist[4 * i + 3] ); + /* The virus pool should be empty now. */ + } + } + } + if ( regionattrib && !refine ) { + /* Note the fact that each triangle has an additional attribute. */ + eextras++; + } + } + + /* Free up memory. */ + if ( ( ( holes > 0 ) && !noholes ) || !convex || ( regions > 0 ) ) { + pooldeinit( &viri ); + } + if ( regions > 0 ) { + free( regiontris ); + } } /** **/ @@ -10614,19 +10737,18 @@ int regions; #ifndef CDT_ONLY -void tallyencs() -{ - struct edge edgeloop; - int dummy; - - traversalinit(&shelles); - edgeloop.shorient = 0; - edgeloop.sh = shelletraverse(); - while (edgeloop.sh != (shelle *) NULL) { - /* If the segment is encroached, add it to the list. */ - dummy = checkedge4encroach(&edgeloop); - edgeloop.sh = shelletraverse(); - } +void tallyencs(){ + struct edge edgeloop; + int dummy; + + traversalinit( &shelles ); + edgeloop.shorient = 0; + edgeloop.sh = shelletraverse(); + while ( edgeloop.sh != (shelle *) NULL ) { + /* If the segment is encroached, add it to the list. */ + dummy = checkedge4encroach( &edgeloop ); + edgeloop.sh = shelletraverse(); + } } #endif /* not CDT_ONLY */ @@ -10639,14 +10761,13 @@ void tallyencs() #ifndef CDT_ONLY -void precisionerror() -{ - printf("Try increasing the area criterion and/or reducing the minimum\n"); - printf(" allowable angle so that tiny triangles are not created.\n"); +void precisionerror(){ + printf( "Try increasing the area criterion and/or reducing the minimum\n" ); + printf( " allowable angle so that tiny triangles are not created.\n" ); #ifdef SINGLE - printf("Alternatively, try recompiling me with double precision\n"); - printf(" arithmetic (by removing \"#define SINGLE\" from the\n"); - printf(" source file or \"-DSINGLE\" from the makefile).\n"); + printf( "Alternatively, try recompiling me with double precision\n" ); + printf( " arithmetic (by removing \"#define SINGLE\" from the\n" ); + printf( " source file or \"-DSINGLE\" from the makefile).\n" ); #endif /* SINGLE */ } @@ -10671,135 +10792,136 @@ void precisionerror() #ifndef CDT_ONLY -void repairencs(flaws) +void repairencs( flaws ) int flaws; { - struct triedge enctri; - struct triedge testtri; - struct edge *encloop; - struct edge testsh; - point eorg, edest; - point newpoint; - enum insertsiteresult success; - REAL segmentlength, nearestpoweroftwo; - REAL split; - int acuteorg, acutedest; - int dummy; - int i; - triangle ptr; /* Temporary variable used by stpivot(). */ - shelle sptr; /* Temporary variable used by snext(). */ - - while ((badsegments.items > 0) && (steinerleft != 0)) { - traversalinit(&badsegments); - encloop = badsegmenttraverse(); - while ((encloop != (struct edge *) NULL) && (steinerleft != 0)) { - /* To decide where to split a segment, we need to know if the */ - /* segment shares an endpoint with an adjacent segment. */ - /* The concern is that, if we simply split every encroached */ - /* segment in its center, two adjacent segments with a small */ - /* angle between them might lead to an infinite loop; each */ - /* point added to split one segment will encroach upon the */ - /* other segment, which must then be split with a point that */ - /* will encroach upon the first segment, and so on forever. */ - /* To avoid this, imagine a set of concentric circles, whose */ - /* radii are powers of two, about each segment endpoint. */ - /* These concentric circles determine where the segment is */ - /* split. (If both endpoints are shared with adjacent */ - /* segments, split the segment in the middle, and apply the */ - /* concentric shells for later splittings.) */ - - /* Is the origin shared with another segment? */ - stpivot(*encloop, enctri); - lnext(enctri, testtri); - tspivot(testtri, testsh); - acuteorg = testsh.sh != dummysh; - /* Is the destination shared with another segment? */ - lnextself(testtri); - tspivot(testtri, testsh); - acutedest = testsh.sh != dummysh; - /* Now, check the other side of the segment, if there's a triangle */ - /* there. */ - sym(enctri, testtri); - if (testtri.tri != dummytri) { - /* Is the destination shared with another segment? */ - lnextself(testtri); - tspivot(testtri, testsh); - acutedest = acutedest || (testsh.sh != dummysh); - /* Is the origin shared with another segment? */ - lnextself(testtri); - tspivot(testtri, testsh); - acuteorg = acuteorg || (testsh.sh != dummysh); - } - - sorg(*encloop, eorg); - sdest(*encloop, edest); - /* Use the concentric circles if exactly one endpoint is shared */ - /* with another adjacent segment. */ - if (acuteorg ^ acutedest) { - segmentlength = sqrt((edest[0] - eorg[0]) * (edest[0] - eorg[0]) - + (edest[1] - eorg[1]) * (edest[1] - eorg[1])); - /* Find the power of two nearest the segment's length. */ - nearestpoweroftwo = 1.0; - while (segmentlength > SQUAREROOTTWO * nearestpoweroftwo) { - nearestpoweroftwo *= 2.0; - } - while (segmentlength < (0.5 * SQUAREROOTTWO) * nearestpoweroftwo) { - nearestpoweroftwo *= 0.5; - } - /* Where do we split the segment? */ - split = 0.5 * nearestpoweroftwo / segmentlength; - if (acutedest) { - split = 1.0 - split; - } - } else { - /* If we're not worried about adjacent segments, split */ - /* this segment in the middle. */ - split = 0.5; - } - - /* Create the new point. */ - newpoint = (point) poolalloc(&points); - /* Interpolate its coordinate and attributes. */ - for (i = 0; i < 2 + nextras; i++) { - newpoint[i] = (1.0 - split) * eorg[i] + split * edest[i]; - } - setpointmark(newpoint, mark(*encloop)); - if (verbose > 1) { - printf( - " Splitting edge (%.12g, %.12g) (%.12g, %.12g) at (%.12g, %.12g).\n", - eorg[0], eorg[1], edest[0], edest[1], newpoint[0], newpoint[1]); - } - /* Check whether the new point lies on an endpoint. */ - if (((newpoint[0] == eorg[0]) && (newpoint[1] == eorg[1])) - || ((newpoint[0] == edest[0]) && (newpoint[1] == edest[1]))) { - printf("Error: Ran out of precision at (%.12g, %.12g).\n", - newpoint[0], newpoint[1]); - printf("I attempted to split a segment to a smaller size than can\n"); - printf(" be accommodated by the finite precision of floating point\n" - ); - printf(" arithmetic.\n"); - precisionerror(); - exit(1); - } - /* Insert the splitting point. This should always succeed. */ - success = insertsite(newpoint, &enctri, encloop, flaws, flaws); - if ((success != SUCCESSFULPOINT) && (success != ENCROACHINGPOINT)) { - printf("Internal error in repairencs():\n"); - printf(" Failure to split a segment.\n"); - internalerror(); - } - if (steinerleft > 0) { - steinerleft--; - } - /* Check the two new subsegments to see if they're encroached. */ - dummy = checkedge4encroach(encloop); - snextself(*encloop); - dummy = checkedge4encroach(encloop); - - badsegmentdealloc(encloop); - encloop = badsegmenttraverse(); - } - } + struct triedge enctri; + struct triedge testtri; + struct edge *encloop; + struct edge testsh; + point eorg, edest; + point newpoint; + enum insertsiteresult success; + REAL segmentlength, nearestpoweroftwo; + REAL split; + int acuteorg, acutedest; + int dummy; + int i; + triangle ptr; /* Temporary variable used by stpivot(). */ + shelle sptr; /* Temporary variable used by snext(). */ + + while ( ( badsegments.items > 0 ) && ( steinerleft != 0 ) ) { + traversalinit( &badsegments ); + encloop = badsegmenttraverse(); + while ( ( encloop != (struct edge *) NULL ) && ( steinerleft != 0 ) ) { + /* To decide where to split a segment, we need to know if the */ + /* segment shares an endpoint with an adjacent segment. */ + /* The concern is that, if we simply split every encroached */ + /* segment in its center, two adjacent segments with a small */ + /* angle between them might lead to an infinite loop; each */ + /* point added to split one segment will encroach upon the */ + /* other segment, which must then be split with a point that */ + /* will encroach upon the first segment, and so on forever. */ + /* To avoid this, imagine a set of concentric circles, whose */ + /* radii are powers of two, about each segment endpoint. */ + /* These concentric circles determine where the segment is */ + /* split. (If both endpoints are shared with adjacent */ + /* segments, split the segment in the middle, and apply the */ + /* concentric shells for later splittings.) */ + + /* Is the origin shared with another segment? */ + stpivot( *encloop, enctri ); + lnext( enctri, testtri ); + tspivot( testtri, testsh ); + acuteorg = testsh.sh != dummysh; + /* Is the destination shared with another segment? */ + lnextself( testtri ); + tspivot( testtri, testsh ); + acutedest = testsh.sh != dummysh; + /* Now, check the other side of the segment, if there's a triangle */ + /* there. */ + sym( enctri, testtri ); + if ( testtri.tri != dummytri ) { + /* Is the destination shared with another segment? */ + lnextself( testtri ); + tspivot( testtri, testsh ); + acutedest = acutedest || ( testsh.sh != dummysh ); + /* Is the origin shared with another segment? */ + lnextself( testtri ); + tspivot( testtri, testsh ); + acuteorg = acuteorg || ( testsh.sh != dummysh ); + } + + sorg( *encloop, eorg ); + sdest( *encloop, edest ); + /* Use the concentric circles if exactly one endpoint is shared */ + /* with another adjacent segment. */ + if ( acuteorg ^ acutedest ) { + segmentlength = sqrt( ( edest[0] - eorg[0] ) * ( edest[0] - eorg[0] ) + + ( edest[1] - eorg[1] ) * ( edest[1] - eorg[1] ) ); + /* Find the power of two nearest the segment's length. */ + nearestpoweroftwo = 1.0; + while ( segmentlength > SQUAREROOTTWO * nearestpoweroftwo ) { + nearestpoweroftwo *= 2.0; + } + while ( segmentlength < ( 0.5 * SQUAREROOTTWO ) * nearestpoweroftwo ) { + nearestpoweroftwo *= 0.5; + } + /* Where do we split the segment? */ + split = 0.5 * nearestpoweroftwo / segmentlength; + if ( acutedest ) { + split = 1.0 - split; + } + } + else { + /* If we're not worried about adjacent segments, split */ + /* this segment in the middle. */ + split = 0.5; + } + + /* Create the new point. */ + newpoint = (point) poolalloc( &points ); + /* Interpolate its coordinate and attributes. */ + for ( i = 0; i < 2 + nextras; i++ ) { + newpoint[i] = ( 1.0 - split ) * eorg[i] + split * edest[i]; + } + setpointmark( newpoint, mark( *encloop ) ); + if ( verbose > 1 ) { + printf( + " Splitting edge (%.12g, %.12g) (%.12g, %.12g) at (%.12g, %.12g).\n", + eorg[0], eorg[1], edest[0], edest[1], newpoint[0], newpoint[1] ); + } + /* Check whether the new point lies on an endpoint. */ + if ( ( ( newpoint[0] == eorg[0] ) && ( newpoint[1] == eorg[1] ) ) + || ( ( newpoint[0] == edest[0] ) && ( newpoint[1] == edest[1] ) ) ) { + printf( "Error: Ran out of precision at (%.12g, %.12g).\n", + newpoint[0], newpoint[1] ); + printf( "I attempted to split a segment to a smaller size than can\n" ); + printf( " be accommodated by the finite precision of floating point\n" + ); + printf( " arithmetic.\n" ); + precisionerror(); + exit( 1 ); + } + /* Insert the splitting point. This should always succeed. */ + success = insertsite( newpoint, &enctri, encloop, flaws, flaws ); + if ( ( success != SUCCESSFULPOINT ) && ( success != ENCROACHINGPOINT ) ) { + printf( "Internal error in repairencs():\n" ); + printf( " Failure to split a segment.\n" ); + internalerror(); + } + if ( steinerleft > 0 ) { + steinerleft--; + } + /* Check the two new subsegments to see if they're encroached. */ + dummy = checkedge4encroach( encloop ); + snextself( *encloop ); + dummy = checkedge4encroach( encloop ); + + badsegmentdealloc( encloop ); + encloop = badsegmenttraverse(); + } + } } #endif /* not CDT_ONLY */ @@ -10812,21 +10934,20 @@ int flaws; #ifndef CDT_ONLY -void tallyfaces() -{ - struct triedge triangleloop; - - if (verbose) { - printf(" Making a list of bad triangles.\n"); - } - traversalinit(&triangles); - triangleloop.orient = 0; - triangleloop.tri = triangletraverse(); - while (triangleloop.tri != (triangle *) NULL) { - /* If the triangle is bad, enqueue it. */ - testtriangle(&triangleloop); - triangleloop.tri = triangletraverse(); - } +void tallyfaces(){ + struct triedge triangleloop; + + if ( verbose ) { + printf( " Making a list of bad triangles.\n" ); + } + traversalinit( &triangles ); + triangleloop.orient = 0; + triangleloop.tri = triangletraverse(); + while ( triangleloop.tri != (triangle *) NULL ) { + /* If the triangle is bad, enqueue it. */ + testtriangle( &triangleloop ); + triangleloop.tri = triangletraverse(); + } } #endif /* not CDT_ONLY */ @@ -10845,8 +10966,8 @@ void tallyfaces() /* */ /*****************************************************************************/ -enum circumcenterresult findcircumcenter(torg, tdest, tapex, circumcenter, - xi, eta) +enum circumcenterresult findcircumcenter( torg, tdest, tapex, circumcenter, + xi, eta ) point torg; point tdest; point tapex; @@ -10854,53 +10975,56 @@ point circumcenter; REAL *xi; REAL *eta; { - REAL xdo, ydo, xao, yao, xad, yad; - REAL dodist, aodist, addist; - REAL denominator; - REAL dx, dy; - - circumcentercount++; - - /* Compute the circumcenter of the triangle. */ - xdo = tdest[0] - torg[0]; - ydo = tdest[1] - torg[1]; - xao = tapex[0] - torg[0]; - yao = tapex[1] - torg[1]; - dodist = xdo * xdo + ydo * ydo; - aodist = xao * xao + yao * yao; - if (noexact) { - denominator = (REAL)(0.5 / (xdo * yao - xao * ydo)); - } else { - /* Use the counterclockwise() routine to ensure a positive (and */ - /* reasonably accurate) result, avoiding any possibility of */ - /* division by zero. */ - denominator = (REAL)(0.5 / counterclockwise(tdest, tapex, torg)); - /* Don't count the above as an orientation test. */ - counterclockcount--; - } - circumcenter[0] = torg[0] - (ydo * aodist - yao * dodist) * denominator; - circumcenter[1] = torg[1] + (xdo * aodist - xao * dodist) * denominator; - - /* To interpolate point attributes for the new point inserted at */ - /* the circumcenter, define a coordinate system with a xi-axis, */ - /* directed from the triangle's origin to its destination, and */ - /* an eta-axis, directed from its origin to its apex. */ - /* Calculate the xi and eta coordinates of the circumcenter. */ - dx = circumcenter[0] - torg[0]; - dy = circumcenter[1] - torg[1]; - *xi = (REAL)((dx * yao - xao * dy) * (2.0 * denominator)); - *eta = (REAL)((xdo * dy - dx * ydo) * (2.0 * denominator)); - - xad = tapex[0] - tdest[0]; - yad = tapex[1] - tdest[1]; - addist = xad * xad + yad * yad; - if ((addist < dodist) && (addist < aodist)) { - return OPPOSITEORG; - } else if (dodist < aodist) { - return OPPOSITEAPEX; - } else { - return OPPOSITEDEST; - } + REAL xdo, ydo, xao, yao, xad, yad; + REAL dodist, aodist, addist; + REAL denominator; + REAL dx, dy; + + circumcentercount++; + + /* Compute the circumcenter of the triangle. */ + xdo = tdest[0] - torg[0]; + ydo = tdest[1] - torg[1]; + xao = tapex[0] - torg[0]; + yao = tapex[1] - torg[1]; + dodist = xdo * xdo + ydo * ydo; + aodist = xao * xao + yao * yao; + if ( noexact ) { + denominator = (REAL)( 0.5 / ( xdo * yao - xao * ydo ) ); + } + else { + /* Use the counterclockwise() routine to ensure a positive (and */ + /* reasonably accurate) result, avoiding any possibility of */ + /* division by zero. */ + denominator = (REAL)( 0.5 / counterclockwise( tdest, tapex, torg ) ); + /* Don't count the above as an orientation test. */ + counterclockcount--; + } + circumcenter[0] = torg[0] - ( ydo * aodist - yao * dodist ) * denominator; + circumcenter[1] = torg[1] + ( xdo * aodist - xao * dodist ) * denominator; + + /* To interpolate point attributes for the new point inserted at */ + /* the circumcenter, define a coordinate system with a xi-axis, */ + /* directed from the triangle's origin to its destination, and */ + /* an eta-axis, directed from its origin to its apex. */ + /* Calculate the xi and eta coordinates of the circumcenter. */ + dx = circumcenter[0] - torg[0]; + dy = circumcenter[1] - torg[1]; + *xi = (REAL)( ( dx * yao - xao * dy ) * ( 2.0 * denominator ) ); + *eta = (REAL)( ( xdo * dy - dx * ydo ) * ( 2.0 * denominator ) ); + + xad = tapex[0] - tdest[0]; + yad = tapex[1] - tdest[1]; + addist = xad * xad + yad * yad; + if ( ( addist < dodist ) && ( addist < aodist ) ) { + return OPPOSITEORG; + } + else if ( dodist < aodist ) { + return OPPOSITEAPEX; + } + else { + return OPPOSITEDEST; + } } /*****************************************************************************/ @@ -10913,101 +11037,106 @@ REAL *eta; #ifndef CDT_ONLY -void splittriangle(badtri) +void splittriangle( badtri ) struct badface *badtri; { - point borg, bdest, bapex; - point newpoint; - REAL xi, eta; - enum insertsiteresult success; - enum circumcenterresult shortedge; - int errorflag; - int i; - - org(badtri->badfacetri, borg); - dest(badtri->badfacetri, bdest); - apex(badtri->badfacetri, bapex); - /* Make sure that this triangle is still the same triangle it was */ - /* when it was tested and determined to be of bad quality. */ - /* Subsequent transformations may have made it a different triangle. */ - if ((borg == badtri->faceorg) && (bdest == badtri->facedest) && - (bapex == badtri->faceapex)) { - if (verbose > 1) { - printf(" Splitting this triangle at its circumcenter:\n"); - printf(" (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", borg[0], - borg[1], bdest[0], bdest[1], bapex[0], bapex[1]); - } - errorflag = 0; - /* Create a new point at the triangle's circumcenter. */ - newpoint = (point) poolalloc(&points); - shortedge = findcircumcenter(borg, bdest, bapex, newpoint, &xi, &eta); - /* Check whether the new point lies on a triangle vertex. */ - if (((newpoint[0] == borg[0]) && (newpoint[1] == borg[1])) - || ((newpoint[0] == bdest[0]) && (newpoint[1] == bdest[1])) - || ((newpoint[0] == bapex[0]) && (newpoint[1] == bapex[1]))) { - if (!quiet) { - printf("Warning: New point (%.12g, %.12g) falls on existing vertex.\n" - , newpoint[0], newpoint[1]); - errorflag = 1; - } - pointdealloc(newpoint); - } else { - for (i = 2; i < 2 + nextras; i++) { - /* Interpolate the point attributes at the circumcenter. */ - newpoint[i] = borg[i] + xi * (bdest[i] - borg[i]) - + eta * (bapex[i] - borg[i]); - } - /* The new point must be in the interior, and have a marker of zero. */ - setpointmark(newpoint, 0); - /* Ensure that the handle `badtri->badfacetri' represents the shortest */ - /* edge of the triangle. This ensures that the circumcenter must */ - /* fall to the left of this edge, so point location will work. */ - if (shortedge == OPPOSITEORG) { - lnextself(badtri->badfacetri); - } else if (shortedge == OPPOSITEDEST) { - lprevself(badtri->badfacetri); - } - /* Insert the circumcenter, searching from the edge of the triangle, */ - /* and maintain the Delaunay property of the triangulation. */ - success = insertsite(newpoint, &(badtri->badfacetri), - (struct edge *) NULL, 1, 1); - if (success == SUCCESSFULPOINT) { - if (steinerleft > 0) { - steinerleft--; - } - } else if (success == ENCROACHINGPOINT) { - /* If the newly inserted point encroaches upon a segment, delete it. */ - deletesite(&(badtri->badfacetri)); - } else if (success == VIOLATINGPOINT) { - /* Failed to insert the new point, but some segment was */ - /* marked as being encroached. */ - pointdealloc(newpoint); - } else { /* success == DUPLICATEPOINT */ - /* Failed to insert the new point because a vertex is already there. */ - if (!quiet) { - printf( - "Warning: New point (%.12g, %.12g) falls on existing vertex.\n" - , newpoint[0], newpoint[1]); - errorflag = 1; - } - pointdealloc(newpoint); - } - } - if (errorflag) { - if (verbose) { - printf(" The new point is at the circumcenter of triangle\n"); - printf(" (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", - borg[0], borg[1], bdest[0], bdest[1], bapex[0], bapex[1]); - } - printf("This probably means that I am trying to refine triangles\n"); - printf(" to a smaller size than can be accommodated by the finite\n"); - printf(" precision of floating point arithmetic. (You can be\n"); - printf(" sure of this if I fail to terminate.)\n"); - precisionerror(); - } - } - /* Return the bad triangle to the pool. */ - pooldealloc(&badtriangles, (VOID *) badtri); + point borg, bdest, bapex; + point newpoint; + REAL xi, eta; + enum insertsiteresult success; + enum circumcenterresult shortedge; + int errorflag; + int i; + + org( badtri->badfacetri, borg ); + dest( badtri->badfacetri, bdest ); + apex( badtri->badfacetri, bapex ); + /* Make sure that this triangle is still the same triangle it was */ + /* when it was tested and determined to be of bad quality. */ + /* Subsequent transformations may have made it a different triangle. */ + if ( ( borg == badtri->faceorg ) && ( bdest == badtri->facedest ) && + ( bapex == badtri->faceapex ) ) { + if ( verbose > 1 ) { + printf( " Splitting this triangle at its circumcenter:\n" ); + printf( " (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", borg[0], + borg[1], bdest[0], bdest[1], bapex[0], bapex[1] ); + } + errorflag = 0; + /* Create a new point at the triangle's circumcenter. */ + newpoint = (point) poolalloc( &points ); + shortedge = findcircumcenter( borg, bdest, bapex, newpoint, &xi, &eta ); + /* Check whether the new point lies on a triangle vertex. */ + if ( ( ( newpoint[0] == borg[0] ) && ( newpoint[1] == borg[1] ) ) + || ( ( newpoint[0] == bdest[0] ) && ( newpoint[1] == bdest[1] ) ) + || ( ( newpoint[0] == bapex[0] ) && ( newpoint[1] == bapex[1] ) ) ) { + if ( !quiet ) { + printf( "Warning: New point (%.12g, %.12g) falls on existing vertex.\n" + , newpoint[0], newpoint[1] ); + errorflag = 1; + } + pointdealloc( newpoint ); + } + else { + for ( i = 2; i < 2 + nextras; i++ ) { + /* Interpolate the point attributes at the circumcenter. */ + newpoint[i] = borg[i] + xi * ( bdest[i] - borg[i] ) + + eta * ( bapex[i] - borg[i] ); + } + /* The new point must be in the interior, and have a marker of zero. */ + setpointmark( newpoint, 0 ); + /* Ensure that the handle `badtri->badfacetri' represents the shortest */ + /* edge of the triangle. This ensures that the circumcenter must */ + /* fall to the left of this edge, so point location will work. */ + if ( shortedge == OPPOSITEORG ) { + lnextself( badtri->badfacetri ); + } + else if ( shortedge == OPPOSITEDEST ) { + lprevself( badtri->badfacetri ); + } + /* Insert the circumcenter, searching from the edge of the triangle, */ + /* and maintain the Delaunay property of the triangulation. */ + success = insertsite( newpoint, &( badtri->badfacetri ), + (struct edge *) NULL, 1, 1 ); + if ( success == SUCCESSFULPOINT ) { + if ( steinerleft > 0 ) { + steinerleft--; + } + } + else if ( success == ENCROACHINGPOINT ) { + /* If the newly inserted point encroaches upon a segment, delete it. */ + deletesite( &( badtri->badfacetri ) ); + } + else if ( success == VIOLATINGPOINT ) { + /* Failed to insert the new point, but some segment was */ + /* marked as being encroached. */ + pointdealloc( newpoint ); + } + else { /* success == DUPLICATEPOINT */ + /* Failed to insert the new point because a vertex is already there. */ + if ( !quiet ) { + printf( + "Warning: New point (%.12g, %.12g) falls on existing vertex.\n" + , newpoint[0], newpoint[1] ); + errorflag = 1; + } + pointdealloc( newpoint ); + } + } + if ( errorflag ) { + if ( verbose ) { + printf( " The new point is at the circumcenter of triangle\n" ); + printf( " (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", + borg[0], borg[1], bdest[0], bdest[1], bapex[0], bapex[1] ); + } + printf( "This probably means that I am trying to refine triangles\n" ); + printf( " to a smaller size than can be accommodated by the finite\n" ); + printf( " precision of floating point arithmetic. (You can be\n" ); + printf( " sure of this if I fail to terminate.)\n" ); + precisionerror(); + } + } + /* Return the bad triangle to the pool. */ + pooldealloc( &badtriangles, (VOID *) badtri ); } #endif /* not CDT_ONLY */ @@ -11021,81 +11150,81 @@ struct badface *badtri; #ifndef CDT_ONLY -void enforcequality() -{ - int i; - - if (!quiet) { - printf("Adding Steiner points to enforce quality.\n"); - } - /* Initialize the pool of encroached segments. */ - poolinit(&badsegments, sizeof(struct edge), BADSEGMENTPERBLOCK, POINTER, 0); - if (verbose) { - printf(" Looking for encroached segments.\n"); - } - /* Test all segments to see if they're encroached. */ - tallyencs(); - if (verbose && (badsegments.items > 0)) { - printf(" Splitting encroached segments.\n"); - } - /* Note that steinerleft == -1 if an unlimited number */ - /* of Steiner points is allowed. */ - while ((badsegments.items > 0) && (steinerleft != 0)) { - /* Fix the segments without noting newly encroached segments or */ - /* bad triangles. The reason we don't want to note newly */ - /* encroached segments is because some encroached segments are */ - /* likely to be noted multiple times, and would then be blindly */ - /* split multiple times. I should fix that some time. */ - repairencs(0); - /* Now, find all the segments that became encroached while adding */ - /* points to split encroached segments. */ - tallyencs(); - } - /* At this point, if we haven't run out of Steiner points, the */ - /* triangulation should be (conforming) Delaunay. */ - - /* Next, we worry about enforcing triangle quality. */ - if ((minangle > 0.0) || vararea || fixedarea) { - /* Initialize the pool of bad triangles. */ - poolinit(&badtriangles, sizeof(struct badface), BADTRIPERBLOCK, POINTER, - 0); - /* Initialize the queues of bad triangles. */ - for (i = 0; i < 64; i++) { - queuefront[i] = (struct badface *) NULL; - queuetail[i] = &queuefront[i]; - } - /* Test all triangles to see if they're bad. */ - tallyfaces(); - if (verbose) { - printf(" Splitting bad triangles.\n"); - } - while ((badtriangles.items > 0) && (steinerleft != 0)) { - /* Fix one bad triangle by inserting a point at its circumcenter. */ - splittriangle(dequeuebadtri()); - /* Fix any encroached segments that may have resulted. Record */ - /* any new bad triangles or encroached segments that result. */ - if (badsegments.items > 0) { - repairencs(1); - } - } - } - /* At this point, if we haven't run out of Steiner points, the */ - /* triangulation should be (conforming) Delaunay and have no */ - /* low-quality triangles. */ - - /* Might we have run out of Steiner points too soon? */ - if (!quiet && (badsegments.items > 0) && (steinerleft == 0)) { - printf("\nWarning: I ran out of Steiner points, but the mesh has\n"); - if (badsegments.items == 1) { - printf(" an encroached segment, and therefore might not be truly\n"); - } else { - printf(" %ld encroached segments, and therefore might not be truly\n", - badsegments.items); - } - printf(" Delaunay. If the Delaunay property is important to you,\n"); - printf(" try increasing the number of Steiner points (controlled by\n"); - printf(" the -S switch) slightly and try again.\n\n"); - } +void enforcequality(){ + int i; + + if ( !quiet ) { + printf( "Adding Steiner points to enforce quality.\n" ); + } + /* Initialize the pool of encroached segments. */ + poolinit( &badsegments, sizeof( struct edge ), BADSEGMENTPERBLOCK, POINTER, 0 ); + if ( verbose ) { + printf( " Looking for encroached segments.\n" ); + } + /* Test all segments to see if they're encroached. */ + tallyencs(); + if ( verbose && ( badsegments.items > 0 ) ) { + printf( " Splitting encroached segments.\n" ); + } + /* Note that steinerleft == -1 if an unlimited number */ + /* of Steiner points is allowed. */ + while ( ( badsegments.items > 0 ) && ( steinerleft != 0 ) ) { + /* Fix the segments without noting newly encroached segments or */ + /* bad triangles. The reason we don't want to note newly */ + /* encroached segments is because some encroached segments are */ + /* likely to be noted multiple times, and would then be blindly */ + /* split multiple times. I should fix that some time. */ + repairencs( 0 ); + /* Now, find all the segments that became encroached while adding */ + /* points to split encroached segments. */ + tallyencs(); + } + /* At this point, if we haven't run out of Steiner points, the */ + /* triangulation should be (conforming) Delaunay. */ + + /* Next, we worry about enforcing triangle quality. */ + if ( ( minangle > 0.0 ) || vararea || fixedarea ) { + /* Initialize the pool of bad triangles. */ + poolinit( &badtriangles, sizeof( struct badface ), BADTRIPERBLOCK, POINTER, + 0 ); + /* Initialize the queues of bad triangles. */ + for ( i = 0; i < 64; i++ ) { + queuefront[i] = (struct badface *) NULL; + queuetail[i] = &queuefront[i]; + } + /* Test all triangles to see if they're bad. */ + tallyfaces(); + if ( verbose ) { + printf( " Splitting bad triangles.\n" ); + } + while ( ( badtriangles.items > 0 ) && ( steinerleft != 0 ) ) { + /* Fix one bad triangle by inserting a point at its circumcenter. */ + splittriangle( dequeuebadtri() ); + /* Fix any encroached segments that may have resulted. Record */ + /* any new bad triangles or encroached segments that result. */ + if ( badsegments.items > 0 ) { + repairencs( 1 ); + } + } + } + /* At this point, if we haven't run out of Steiner points, the */ + /* triangulation should be (conforming) Delaunay and have no */ + /* low-quality triangles. */ + + /* Might we have run out of Steiner points too soon? */ + if ( !quiet && ( badsegments.items > 0 ) && ( steinerleft == 0 ) ) { + printf( "\nWarning: I ran out of Steiner points, but the mesh has\n" ); + if ( badsegments.items == 1 ) { + printf( " an encroached segment, and therefore might not be truly\n" ); + } + else { + printf( " %ld encroached segments, and therefore might not be truly\n", + badsegments.items ); + } + printf( " Delaunay. If the Delaunay property is important to you,\n" ); + printf( " try increasing the number of Steiner points (controlled by\n" ); + printf( " the -S switch) slightly and try again.\n\n" ); + } } #endif /* not CDT_ONLY */ @@ -11110,70 +11239,69 @@ void enforcequality() /* */ /*****************************************************************************/ -void highorder() -{ - struct triedge triangleloop, trisym; - struct edge checkmark; - point newpoint; - point torg, tdest; - int i; - triangle ptr; /* Temporary variable used by sym(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ - - if (!quiet) { - printf("Adding vertices for second-order triangles.\n"); - } - /* The following line ensures that dead items in the pool of nodes */ - /* cannot be allocated for the extra nodes associated with high */ - /* order elements. This ensures that the primary nodes (at the */ - /* corners of elements) will occur earlier in the output files, and */ - /* have lower indices, than the extra nodes. */ - points.deaditemstack = (VOID *) NULL; - - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - /* To loop over the set of edges, loop over all triangles, and look at */ - /* the three edges of each triangle. If there isn't another triangle */ - /* adjacent to the edge, operate on the edge. If there is another */ - /* adjacent triangle, operate on the edge only if the current triangle */ - /* has a smaller pointer than its neighbor. This way, each edge is */ - /* considered only once. */ - while (triangleloop.tri != (triangle *) NULL) { - for (triangleloop.orient = 0; triangleloop.orient < 3; - triangleloop.orient++) { - sym(triangleloop, trisym); - if ((triangleloop.tri < trisym.tri) || (trisym.tri == dummytri)) { - org(triangleloop, torg); - dest(triangleloop, tdest); - /* Create a new node in the middle of the edge. Interpolate */ - /* its attributes. */ - newpoint = (point) poolalloc(&points); - for (i = 0; i < 2 + nextras; i++) { - newpoint[i] = (REAL)(0.5 * (torg[i] + tdest[i])); - } - /* Set the new node's marker to zero or one, depending on */ - /* whether it lies on a boundary. */ - setpointmark(newpoint, trisym.tri == dummytri); - if (useshelles) { - tspivot(triangleloop, checkmark); - /* If this edge is a segment, transfer the marker to the new node. */ - if (checkmark.sh != dummysh) { - setpointmark(newpoint, mark(checkmark)); - } - } - if (verbose > 1) { - printf(" Creating (%.12g, %.12g).\n", newpoint[0], newpoint[1]); - } - /* Record the new node in the (one or two) adjacent elements. */ - triangleloop.tri[highorderindex + triangleloop.orient] = - (triangle) newpoint; - if (trisym.tri != dummytri) { - trisym.tri[highorderindex + trisym.orient] = (triangle) newpoint; - } - } - } - triangleloop.tri = triangletraverse(); - } +void highorder(){ + struct triedge triangleloop, trisym; + struct edge checkmark; + point newpoint; + point torg, tdest; + int i; + triangle ptr; /* Temporary variable used by sym(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ + + if ( !quiet ) { + printf( "Adding vertices for second-order triangles.\n" ); + } + /* The following line ensures that dead items in the pool of nodes */ + /* cannot be allocated for the extra nodes associated with high */ + /* order elements. This ensures that the primary nodes (at the */ + /* corners of elements) will occur earlier in the output files, and */ + /* have lower indices, than the extra nodes. */ + points.deaditemstack = (VOID *) NULL; + + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + /* To loop over the set of edges, loop over all triangles, and look at */ + /* the three edges of each triangle. If there isn't another triangle */ + /* adjacent to the edge, operate on the edge. If there is another */ + /* adjacent triangle, operate on the edge only if the current triangle */ + /* has a smaller pointer than its neighbor. This way, each edge is */ + /* considered only once. */ + while ( triangleloop.tri != (triangle *) NULL ) { + for ( triangleloop.orient = 0; triangleloop.orient < 3; + triangleloop.orient++ ) { + sym( triangleloop, trisym ); + if ( ( triangleloop.tri < trisym.tri ) || ( trisym.tri == dummytri ) ) { + org( triangleloop, torg ); + dest( triangleloop, tdest ); + /* Create a new node in the middle of the edge. Interpolate */ + /* its attributes. */ + newpoint = (point) poolalloc( &points ); + for ( i = 0; i < 2 + nextras; i++ ) { + newpoint[i] = (REAL)( 0.5 * ( torg[i] + tdest[i] ) ); + } + /* Set the new node's marker to zero or one, depending on */ + /* whether it lies on a boundary. */ + setpointmark( newpoint, trisym.tri == dummytri ); + if ( useshelles ) { + tspivot( triangleloop, checkmark ); + /* If this edge is a segment, transfer the marker to the new node. */ + if ( checkmark.sh != dummysh ) { + setpointmark( newpoint, mark( checkmark ) ); + } + } + if ( verbose > 1 ) { + printf( " Creating (%.12g, %.12g).\n", newpoint[0], newpoint[1] ); + } + /* Record the new node in the (one or two) adjacent elements. */ + triangleloop.tri[highorderindex + triangleloop.orient] = + (triangle) newpoint; + if ( trisym.tri != dummytri ) { + trisym.tri[highorderindex + trisym.orient] = (triangle) newpoint; + } + } + } + triangleloop.tri = triangletraverse(); + } } /********* File I/O routines begin here *********/ @@ -11191,30 +11319,30 @@ void highorder() #ifndef TRILIBRARY -char *readline(string, infile, infilename) +char *readline( string, infile, infilename ) char *string; FILE *infile; char *infilename; { - char *result; - - /* Search for something that looks like a number. */ - do { - result = fgets(string, INPUTLINESIZE, infile); - if (result == (char *) NULL) { - printf(" Error: Unexpected end of file in %s.\n", infilename); - exit(1); - } - /* Skip anything that doesn't look like a number, a comment, */ - /* or the end of a line. */ - while ((*result != '\0') && (*result != '#') - && (*result != '.') && (*result != '+') && (*result != '-') - && ((*result < '0') || (*result > '9'))) { - result++; - } - /* If it's a comment or end of line, read another line and try again. */ - } while ((*result == '#') || (*result == '\0')); - return result; + char *result; + + /* Search for something that looks like a number. */ + do { + result = fgets( string, INPUTLINESIZE, infile ); + if ( result == (char *) NULL ) { + printf( " Error: Unexpected end of file in %s.\n", infilename ); + exit( 1 ); + } + /* Skip anything that doesn't look like a number, a comment, */ + /* or the end of a line. */ + while ( ( *result != '\0' ) && ( *result != '#' ) + && ( *result != '.' ) && ( *result != '+' ) && ( *result != '-' ) + && ( ( *result < '0' ) || ( *result > '9' ) ) ) { + result++; + } + /* If it's a comment or end of line, read another line and try again. */ + } while ( ( *result == '#' ) || ( *result == '\0' ) ); + return result; } #endif /* not TRILIBRARY */ @@ -11230,29 +11358,29 @@ char *infilename; #ifndef TRILIBRARY -char *findfield(string) +char *findfield( string ) char *string; { - char *result; - - result = string; - /* Skip the current field. Stop upon reaching whitespace. */ - while ((*result != '\0') && (*result != '#') - && (*result != ' ') && (*result != '\t')) { - result++; - } - /* Now skip the whitespace and anything else that doesn't look like a */ - /* number, a comment, or the end of a line. */ - while ((*result != '\0') && (*result != '#') - && (*result != '.') && (*result != '+') && (*result != '-') - && ((*result < '0') || (*result > '9'))) { - result++; - } - /* Check for a comment (prefixed with `#'). */ - if (*result == '#') { - *result = '\0'; - } - return result; + char *result; + + result = string; + /* Skip the current field. Stop upon reaching whitespace. */ + while ( ( *result != '\0' ) && ( *result != '#' ) + && ( *result != ' ' ) && ( *result != '\t' ) ) { + result++; + } + /* Now skip the whitespace and anything else that doesn't look like a */ + /* number, a comment, or the end of a line. */ + while ( ( *result != '\0' ) && ( *result != '#' ) + && ( *result != '.' ) && ( *result != '+' ) && ( *result != '-' ) + && ( ( *result < '0' ) || ( *result > '9' ) ) ) { + result++; + } + /* Check for a comment (prefixed with `#'). */ + if ( *result == '#' ) { + *result = '\0'; + } + return result; } #endif /* not TRILIBRARY */ @@ -11266,179 +11394,191 @@ char *string; #ifndef TRILIBRARY -void readnodes(nodefilename, polyfilename, polyfile) +void readnodes( nodefilename, polyfilename, polyfile ) char *nodefilename; char *polyfilename; FILE **polyfile; { - FILE *infile; - point pointloop; - char inputline[INPUTLINESIZE]; - char *stringptr; - char *infilename; - REAL x, y; - int firstnode; - int nodemarkers; - int currentmarker; - int i, j; - - if (poly) { - /* Read the points from a .poly file. */ - if (!quiet) { - printf("Opening %s.\n", polyfilename); - } - *polyfile = fopen(polyfilename, "r"); - if (*polyfile == (FILE *) NULL) { - printf(" Error: Cannot access file %s.\n", polyfilename); - exit(1); - } - /* Read number of points, number of dimensions, number of point */ - /* attributes, and number of boundary markers. */ - stringptr = readline(inputline, *polyfile, polyfilename); - inpoints = (int) strtol (stringptr, &stringptr, 0); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - mesh_dim = 2; - } else { - mesh_dim = (int) strtol (stringptr, &stringptr, 0); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - nextras = 0; - } else { - nextras = (int) strtol (stringptr, &stringptr, 0); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - nodemarkers = 0; - } else { - nodemarkers = (int) strtol (stringptr, &stringptr, 0); - } - if (inpoints > 0) { - infile = *polyfile; - infilename = polyfilename; - readnodefile = 0; - } else { - /* If the .poly file claims there are zero points, that means that */ - /* the points should be read from a separate .node file. */ - readnodefile = 1; - infilename = innodefilename; - } - } else { - readnodefile = 1; - infilename = innodefilename; - *polyfile = (FILE *) NULL; - } - - if (readnodefile) { - /* Read the points from a .node file. */ - if (!quiet) { - printf("Opening %s.\n", innodefilename); - } - infile = fopen(innodefilename, "r"); - if (infile == (FILE *) NULL) { - printf(" Error: Cannot access file %s.\n", innodefilename); - exit(1); - } - /* Read number of points, number of dimensions, number of point */ - /* attributes, and number of boundary markers. */ - stringptr = readline(inputline, infile, innodefilename); - inpoints = (int) strtol (stringptr, &stringptr, 0); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - mesh_dim = 2; - } else { - mesh_dim = (int) strtol (stringptr, &stringptr, 0); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - nextras = 0; - } else { - nextras = (int) strtol (stringptr, &stringptr, 0); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - nodemarkers = 0; - } else { - nodemarkers = (int) strtol (stringptr, &stringptr, 0); - } - } - - if (inpoints < 3) { - printf("Error: Input must have at least three input points.\n"); - exit(1); - } - if (mesh_dim != 2) { - printf("Error: Triangle only works with two-dimensional meshes.\n"); - exit(1); - } - - initializepointpool(); - - /* Read the points. */ - for (i = 0; i < inpoints; i++) { - pointloop = (point) poolalloc(&points); - stringptr = readline(inputline, infile, infilename); - if (i == 0) { - firstnode = (int) strtol (stringptr, &stringptr, 0); - if ((firstnode == 0) || (firstnode == 1)) { - firstnumber = firstnode; - } - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Point %d has no x coordinate.\n", firstnumber + i); - exit(1); - } - x = (REAL) strtod(stringptr, &stringptr); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Point %d has no y coordinate.\n", firstnumber + i); - exit(1); - } - y = (REAL) strtod(stringptr, &stringptr); - pointloop[0] = x; - pointloop[1] = y; - /* Read the point attributes. */ - for (j = 2; j < 2 + nextras; j++) { - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - pointloop[j] = 0.0; - } else { - pointloop[j] = (REAL) strtod(stringptr, &stringptr); - } - } - if (nodemarkers) { - /* Read a point marker. */ - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - setpointmark(pointloop, 0); - } else { - currentmarker = (int) strtol (stringptr, &stringptr, 0); - setpointmark(pointloop, currentmarker); - } - } else { - /* If no markers are specified in the file, they default to zero. */ - setpointmark(pointloop, 0); - } - /* Determine the smallest and largest x and y coordinates. */ - if (i == 0) { - xmin = xmax = x; - ymin = ymax = y; - } else { - xmin = (x < xmin) ? x : xmin; - xmax = (x > xmax) ? x : xmax; - ymin = (y < ymin) ? y : ymin; - ymax = (y > ymax) ? y : ymax; - } - } - if (readnodefile) { - fclose(infile); - } - - /* Nonexistent x value used as a flag to mark circle events in sweepline */ - /* Delaunay algorithm. */ - xminextreme = 10 * xmin - 9 * xmax; + FILE *infile; + point pointloop; + char inputline[INPUTLINESIZE]; + char *stringptr; + char *infilename; + REAL x, y; + int firstnode; + int nodemarkers; + int currentmarker; + int i, j; + + if ( poly ) { + /* Read the points from a .poly file. */ + if ( !quiet ) { + printf( "Opening %s.\n", polyfilename ); + } + *polyfile = fopen( polyfilename, "r" ); + if ( *polyfile == (FILE *) NULL ) { + printf( " Error: Cannot access file %s.\n", polyfilename ); + exit( 1 ); + } + /* Read number of points, number of dimensions, number of point */ + /* attributes, and number of boundary markers. */ + stringptr = readline( inputline, *polyfile, polyfilename ); + inpoints = (int) strtol( stringptr, &stringptr, 0 ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + mesh_dim = 2; + } + else { + mesh_dim = (int) strtol( stringptr, &stringptr, 0 ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + nextras = 0; + } + else { + nextras = (int) strtol( stringptr, &stringptr, 0 ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + nodemarkers = 0; + } + else { + nodemarkers = (int) strtol( stringptr, &stringptr, 0 ); + } + if ( inpoints > 0 ) { + infile = *polyfile; + infilename = polyfilename; + readnodefile = 0; + } + else { + /* If the .poly file claims there are zero points, that means that */ + /* the points should be read from a separate .node file. */ + readnodefile = 1; + infilename = innodefilename; + } + } + else { + readnodefile = 1; + infilename = innodefilename; + *polyfile = (FILE *) NULL; + } + + if ( readnodefile ) { + /* Read the points from a .node file. */ + if ( !quiet ) { + printf( "Opening %s.\n", innodefilename ); + } + infile = fopen( innodefilename, "r" ); + if ( infile == (FILE *) NULL ) { + printf( " Error: Cannot access file %s.\n", innodefilename ); + exit( 1 ); + } + /* Read number of points, number of dimensions, number of point */ + /* attributes, and number of boundary markers. */ + stringptr = readline( inputline, infile, innodefilename ); + inpoints = (int) strtol( stringptr, &stringptr, 0 ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + mesh_dim = 2; + } + else { + mesh_dim = (int) strtol( stringptr, &stringptr, 0 ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + nextras = 0; + } + else { + nextras = (int) strtol( stringptr, &stringptr, 0 ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + nodemarkers = 0; + } + else { + nodemarkers = (int) strtol( stringptr, &stringptr, 0 ); + } + } + + if ( inpoints < 3 ) { + printf( "Error: Input must have at least three input points.\n" ); + exit( 1 ); + } + if ( mesh_dim != 2 ) { + printf( "Error: Triangle only works with two-dimensional meshes.\n" ); + exit( 1 ); + } + + initializepointpool(); + + /* Read the points. */ + for ( i = 0; i < inpoints; i++ ) { + pointloop = (point) poolalloc( &points ); + stringptr = readline( inputline, infile, infilename ); + if ( i == 0 ) { + firstnode = (int) strtol( stringptr, &stringptr, 0 ); + if ( ( firstnode == 0 ) || ( firstnode == 1 ) ) { + firstnumber = firstnode; + } + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Point %d has no x coordinate.\n", firstnumber + i ); + exit( 1 ); + } + x = (REAL) strtod( stringptr, &stringptr ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Point %d has no y coordinate.\n", firstnumber + i ); + exit( 1 ); + } + y = (REAL) strtod( stringptr, &stringptr ); + pointloop[0] = x; + pointloop[1] = y; + /* Read the point attributes. */ + for ( j = 2; j < 2 + nextras; j++ ) { + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + pointloop[j] = 0.0; + } + else { + pointloop[j] = (REAL) strtod( stringptr, &stringptr ); + } + } + if ( nodemarkers ) { + /* Read a point marker. */ + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + setpointmark( pointloop, 0 ); + } + else { + currentmarker = (int) strtol( stringptr, &stringptr, 0 ); + setpointmark( pointloop, currentmarker ); + } + } + else { + /* If no markers are specified in the file, they default to zero. */ + setpointmark( pointloop, 0 ); + } + /* Determine the smallest and largest x and y coordinates. */ + if ( i == 0 ) { + xmin = xmax = x; + ymin = ymax = y; + } + else { + xmin = ( x < xmin ) ? x : xmin; + xmax = ( x > xmax ) ? x : xmax; + ymin = ( y < ymin ) ? y : ymin; + ymax = ( y > ymax ) ? y : ymax; + } + } + if ( readnodefile ) { + fclose( infile ); + } + + /* Nonexistent x value used as a flag to mark circle events in sweepline */ + /* Delaunay algorithm. */ + xminextreme = 10 * xmin - 9 * xmax; } #endif /* not TRILIBRARY */ @@ -11451,67 +11591,69 @@ FILE **polyfile; #ifdef TRILIBRARY -void transfernodes(pointlist, pointattriblist, pointmarkerlist, numberofpoints, - numberofpointattribs) -REAL *pointlist; +void transfernodes( pointlist, pointattriblist, pointmarkerlist, numberofpoints, + numberofpointattribs ) +REAL * pointlist; REAL *pointattriblist; int *pointmarkerlist; int numberofpoints; int numberofpointattribs; { - point pointloop; - REAL x, y; - int i, j; - int coordindex; - int attribindex; - - inpoints = numberofpoints; - mesh_dim = 2; - nextras = numberofpointattribs; - readnodefile = 0; - if (inpoints < 3) { - printf("Error: Input must have at least three input points.\n"); - exit(1); - } - - initializepointpool(); - - /* Read the points. */ - coordindex = 0; - attribindex = 0; - for (i = 0; i < inpoints; i++) { - pointloop = (point) poolalloc(&points); - /* Read the point coordinates. */ - x = pointloop[0] = pointlist[coordindex++]; - y = pointloop[1] = pointlist[coordindex++]; - /* Read the point attributes. */ - for (j = 0; j < numberofpointattribs; j++) { - pointloop[2 + j] = pointattriblist[attribindex++]; - } - if (pointmarkerlist != (int *) NULL) { - /* Read a point marker. */ - setpointmark(pointloop, pointmarkerlist[i]); - } else { - /* If no markers are specified, they default to zero. */ - setpointmark(pointloop, 0); - } - x = pointloop[0]; - y = pointloop[1]; - /* Determine the smallest and largest x and y coordinates. */ - if (i == 0) { - xmin = xmax = x; - ymin = ymax = y; - } else { - xmin = (x < xmin) ? x : xmin; - xmax = (x > xmax) ? x : xmax; - ymin = (y < ymin) ? y : ymin; - ymax = (y > ymax) ? y : ymax; - } - } - - /* Nonexistent x value used as a flag to mark circle events in sweepline */ - /* Delaunay algorithm. */ - xminextreme = 10 * xmin - 9 * xmax; + point pointloop; + REAL x, y; + int i, j; + int coordindex; + int attribindex; + + inpoints = numberofpoints; + mesh_dim = 2; + nextras = numberofpointattribs; + readnodefile = 0; + if ( inpoints < 3 ) { + printf( "Error: Input must have at least three input points.\n" ); + exit( 1 ); + } + + initializepointpool(); + + /* Read the points. */ + coordindex = 0; + attribindex = 0; + for ( i = 0; i < inpoints; i++ ) { + pointloop = (point) poolalloc( &points ); + /* Read the point coordinates. */ + x = pointloop[0] = pointlist[coordindex++]; + y = pointloop[1] = pointlist[coordindex++]; + /* Read the point attributes. */ + for ( j = 0; j < numberofpointattribs; j++ ) { + pointloop[2 + j] = pointattriblist[attribindex++]; + } + if ( pointmarkerlist != (int *) NULL ) { + /* Read a point marker. */ + setpointmark( pointloop, pointmarkerlist[i] ); + } + else { + /* If no markers are specified, they default to zero. */ + setpointmark( pointloop, 0 ); + } + x = pointloop[0]; + y = pointloop[1]; + /* Determine the smallest and largest x and y coordinates. */ + if ( i == 0 ) { + xmin = xmax = x; + ymin = ymax = y; + } + else { + xmin = ( x < xmin ) ? x : xmin; + xmax = ( x > xmax ) ? x : xmax; + ymin = ( y < ymin ) ? y : ymin; + ymax = ( y > ymax ) ? y : ymax; + } + } + + /* Nonexistent x value used as a flag to mark circle events in sweepline */ + /* Delaunay algorithm. */ + xminextreme = 10 * xmin - 9 * xmax; } #endif /* TRILIBRARY */ @@ -11525,111 +11667,119 @@ int numberofpointattribs; #ifndef TRILIBRARY -void readholes(polyfile, polyfilename, hlist, holes, rlist, regions) -FILE *polyfile; +void readholes( polyfile, polyfilename, hlist, holes, rlist, regions ) +FILE * polyfile; char *polyfilename; REAL **hlist; int *holes; REAL **rlist; int *regions; { - REAL *holelist; - REAL *regionlist; - char inputline[INPUTLINESIZE]; - char *stringptr; - int index; - int i; - - /* Read the holes. */ - stringptr = readline(inputline, polyfile, polyfilename); - *holes = (int) strtol (stringptr, &stringptr, 0); - if (*holes > 0) { - holelist = (REAL *) malloc(2 * *holes * sizeof(REAL)); - *hlist = holelist; - if (holelist == (REAL *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - for (i = 0; i < 2 * *holes; i += 2) { - stringptr = readline(inputline, polyfile, polyfilename); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Hole %d has no x coordinate.\n", - firstnumber + (i >> 1)); - exit(1); - } else { - holelist[i] = (REAL) strtod(stringptr, &stringptr); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Hole %d has no y coordinate.\n", - firstnumber + (i >> 1)); - exit(1); - } else { - holelist[i + 1] = (REAL) strtod(stringptr, &stringptr); - } - } - } else { - *hlist = (REAL *) NULL; - } + REAL *holelist; + REAL *regionlist; + char inputline[INPUTLINESIZE]; + char *stringptr; + int index; + int i; + + /* Read the holes. */ + stringptr = readline( inputline, polyfile, polyfilename ); + *holes = (int) strtol( stringptr, &stringptr, 0 ); + if ( *holes > 0 ) { + holelist = (REAL *) malloc( 2 * *holes * sizeof( REAL ) ); + *hlist = holelist; + if ( holelist == (REAL *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + for ( i = 0; i < 2 * *holes; i += 2 ) { + stringptr = readline( inputline, polyfile, polyfilename ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Hole %d has no x coordinate.\n", + firstnumber + ( i >> 1 ) ); + exit( 1 ); + } + else { + holelist[i] = (REAL) strtod( stringptr, &stringptr ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Hole %d has no y coordinate.\n", + firstnumber + ( i >> 1 ) ); + exit( 1 ); + } + else { + holelist[i + 1] = (REAL) strtod( stringptr, &stringptr ); + } + } + } + else { + *hlist = (REAL *) NULL; + } #ifndef CDT_ONLY - if ((regionattrib || vararea) && !refine) { - /* Read the area constraints. */ - stringptr = readline(inputline, polyfile, polyfilename); - *regions = (int) strtol (stringptr, &stringptr, 0); - if (*regions > 0) { - regionlist = (REAL *) malloc(4 * *regions * sizeof(REAL)); - *rlist = regionlist; - if (regionlist == (REAL *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - index = 0; - for (i = 0; i < *regions; i++) { - stringptr = readline(inputline, polyfile, polyfilename); - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Region %d has no x coordinate.\n", - firstnumber + i); - exit(1); - } else { - regionlist[index++] = (REAL) strtod(stringptr, &stringptr); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf("Error: Region %d has no y coordinate.\n", - firstnumber + i); - exit(1); - } else { - regionlist[index++] = (REAL) strtod(stringptr, &stringptr); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - printf( - "Error: Region %d has no region attribute or area constraint.\n", - firstnumber + i); - exit(1); - } else { - regionlist[index++] = (REAL) strtod(stringptr, &stringptr); - } - stringptr = findfield(stringptr); - if (*stringptr == '\0') { - regionlist[index] = regionlist[index - 1]; - } else { - regionlist[index] = (REAL) strtod(stringptr, &stringptr); - } - index++; - } - } - } else { - /* Set `*regions' to zero to avoid an accidental free() later. */ - *regions = 0; - *rlist = (REAL *) NULL; - } + if ( ( regionattrib || vararea ) && !refine ) { + /* Read the area constraints. */ + stringptr = readline( inputline, polyfile, polyfilename ); + *regions = (int) strtol( stringptr, &stringptr, 0 ); + if ( *regions > 0 ) { + regionlist = (REAL *) malloc( 4 * *regions * sizeof( REAL ) ); + *rlist = regionlist; + if ( regionlist == (REAL *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + index = 0; + for ( i = 0; i < *regions; i++ ) { + stringptr = readline( inputline, polyfile, polyfilename ); + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Region %d has no x coordinate.\n", + firstnumber + i ); + exit( 1 ); + } + else { + regionlist[index++] = (REAL) strtod( stringptr, &stringptr ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( "Error: Region %d has no y coordinate.\n", + firstnumber + i ); + exit( 1 ); + } + else { + regionlist[index++] = (REAL) strtod( stringptr, &stringptr ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + printf( + "Error: Region %d has no region attribute or area constraint.\n", + firstnumber + i ); + exit( 1 ); + } + else { + regionlist[index++] = (REAL) strtod( stringptr, &stringptr ); + } + stringptr = findfield( stringptr ); + if ( *stringptr == '\0' ) { + regionlist[index] = regionlist[index - 1]; + } + else { + regionlist[index] = (REAL) strtod( stringptr, &stringptr ); + } + index++; + } + } + } + else { + /* Set `*regions' to zero to avoid an accidental free() later. */ + *regions = 0; + *rlist = (REAL *) NULL; + } #endif /* not CDT_ONLY */ - fclose(polyfile); + fclose( polyfile ); } #endif /* not TRILIBRARY */ @@ -11643,20 +11793,20 @@ int *regions; #ifndef TRILIBRARY -void finishfile(outfile, argc, argv) -FILE *outfile; +void finishfile( outfile, argc, argv ) +FILE * outfile; int argc; char **argv; { - int i; - - fprintf(outfile, "# Generated by"); - for (i = 0; i < argc; i++) { - fprintf(outfile, " "); - fputs(argv[i], outfile); - } - fprintf(outfile, "\n"); - fclose(outfile); + int i; + + fprintf( outfile, "# Generated by" ); + for ( i = 0; i < argc; i++ ) { + fprintf( outfile, " " ); + fputs( argv[i], outfile ); + } + fprintf( outfile, "\n" ); + fclose( outfile ); } #endif /* not TRILIBRARY */ @@ -11672,14 +11822,14 @@ char **argv; #ifdef TRILIBRARY -void writenodes(pointlist, pointattriblist, pointmarkerlist) -REAL **pointlist; +void writenodes( pointlist, pointattriblist, pointmarkerlist ) +REAL * *pointlist; REAL **pointattriblist; int **pointmarkerlist; #else /* not TRILIBRARY */ -void writenodes(nodefilename, argc, argv) +void writenodes( nodefilename, argc, argv ) char *nodefilename; int argc; char **argv; @@ -11688,105 +11838,106 @@ char **argv; { #ifdef TRILIBRARY - REAL *plist; - REAL *palist; - int *pmlist; - int coordindex; - int attribindex; + REAL *plist; + REAL *palist; + int *pmlist; + int coordindex; + int attribindex; #else /* not TRILIBRARY */ - FILE *outfile; + FILE *outfile; #endif /* not TRILIBRARY */ - point pointloop; - int pointnumber; - int i; + point pointloop; + int pointnumber; + int i; #ifdef TRILIBRARY - if (!quiet) { - printf("Writing points.\n"); - } - /* Allocate memory for output points if necessary. */ - if (*pointlist == (REAL *) NULL) { - *pointlist = (REAL *) malloc(points.items * 2 * sizeof(REAL)); - if (*pointlist == (REAL *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - /* Allocate memory for output point attributes if necessary. */ - if ((nextras > 0) && (*pointattriblist == (REAL *) NULL)) { - *pointattriblist = (REAL *) malloc(points.items * nextras * sizeof(REAL)); - if (*pointattriblist == (REAL *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - /* Allocate memory for output point markers if necessary. */ - if (!nobound && (*pointmarkerlist == (int *) NULL)) { - *pointmarkerlist = (int *) malloc(points.items * sizeof(int)); - if (*pointmarkerlist == (int *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - plist = *pointlist; - palist = *pointattriblist; - pmlist = *pointmarkerlist; - coordindex = 0; - attribindex = 0; + if ( !quiet ) { + printf( "Writing points.\n" ); + } + /* Allocate memory for output points if necessary. */ + if ( *pointlist == (REAL *) NULL ) { + *pointlist = (REAL *) malloc( points.items * 2 * sizeof( REAL ) ); + if ( *pointlist == (REAL *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + /* Allocate memory for output point attributes if necessary. */ + if ( ( nextras > 0 ) && ( *pointattriblist == (REAL *) NULL ) ) { + *pointattriblist = (REAL *) malloc( points.items * nextras * sizeof( REAL ) ); + if ( *pointattriblist == (REAL *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + /* Allocate memory for output point markers if necessary. */ + if ( !nobound && ( *pointmarkerlist == (int *) NULL ) ) { + *pointmarkerlist = (int *) malloc( points.items * sizeof( int ) ); + if ( *pointmarkerlist == (int *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + plist = *pointlist; + palist = *pointattriblist; + pmlist = *pointmarkerlist; + coordindex = 0; + attribindex = 0; #else /* not TRILIBRARY */ - if (!quiet) { - printf("Writing %s.\n", nodefilename); - } - outfile = fopen(nodefilename, "w"); - if (outfile == (FILE *) NULL) { - printf(" Error: Cannot create file %s.\n", nodefilename); - exit(1); - } - /* Number of points, number of dimensions, number of point attributes, */ - /* and number of boundary markers (zero or one). */ - fprintf(outfile, "%ld %d %d %d\n", points.items, mesh_dim, nextras, - 1 - nobound); + if ( !quiet ) { + printf( "Writing %s.\n", nodefilename ); + } + outfile = fopen( nodefilename, "w" ); + if ( outfile == (FILE *) NULL ) { + printf( " Error: Cannot create file %s.\n", nodefilename ); + exit( 1 ); + } + /* Number of points, number of dimensions, number of point attributes, */ + /* and number of boundary markers (zero or one). */ + fprintf( outfile, "%ld %d %d %d\n", points.items, mesh_dim, nextras, + 1 - nobound ); #endif /* not TRILIBRARY */ - traversalinit(&points); - pointloop = pointtraverse(); - pointnumber = firstnumber; - while (pointloop != (point) NULL) { + traversalinit( &points ); + pointloop = pointtraverse(); + pointnumber = firstnumber; + while ( pointloop != (point) NULL ) { #ifdef TRILIBRARY - /* X and y coordinates. */ - plist[coordindex++] = pointloop[0]; - plist[coordindex++] = pointloop[1]; - /* Point attributes. */ - for (i = 0; i < nextras; i++) { - palist[attribindex++] = pointloop[2 + i]; - } - if (!nobound) { - /* Copy the boundary marker. */ - pmlist[pointnumber - firstnumber] = pointmark(pointloop); - } + /* X and y coordinates. */ + plist[coordindex++] = pointloop[0]; + plist[coordindex++] = pointloop[1]; + /* Point attributes. */ + for ( i = 0; i < nextras; i++ ) { + palist[attribindex++] = pointloop[2 + i]; + } + if ( !nobound ) { + /* Copy the boundary marker. */ + pmlist[pointnumber - firstnumber] = pointmark( pointloop ); + } #else /* not TRILIBRARY */ - /* Point number, x and y coordinates. */ - fprintf(outfile, "%4d %.17g %.17g", pointnumber, pointloop[0], - pointloop[1]); - for (i = 0; i < nextras; i++) { - /* Write an attribute. */ - fprintf(outfile, " %.17g", pointloop[i + 2]); - } - if (nobound) { - fprintf(outfile, "\n"); - } else { - /* Write the boundary marker. */ - fprintf(outfile, " %d\n", pointmark(pointloop)); - } + /* Point number, x and y coordinates. */ + fprintf( outfile, "%4d %.17g %.17g", pointnumber, pointloop[0], + pointloop[1] ); + for ( i = 0; i < nextras; i++ ) { + /* Write an attribute. */ + fprintf( outfile, " %.17g", pointloop[i + 2] ); + } + if ( nobound ) { + fprintf( outfile, "\n" ); + } + else { + /* Write the boundary marker. */ + fprintf( outfile, " %d\n", pointmark( pointloop ) ); + } #endif /* not TRILIBRARY */ - setpointmark(pointloop, pointnumber); - pointloop = pointtraverse(); - pointnumber++; - } + setpointmark( pointloop, pointnumber ); + pointloop = pointtraverse(); + pointnumber++; + } #ifndef TRILIBRARY - finishfile(outfile, argc, argv); + finishfile( outfile, argc, argv ); #endif /* not TRILIBRARY */ } @@ -11800,19 +11951,18 @@ char **argv; /* */ /*****************************************************************************/ -void numbernodes() -{ - point pointloop; - int pointnumber; - - traversalinit(&points); - pointloop = pointtraverse(); - pointnumber = firstnumber; - while (pointloop != (point) NULL) { - setpointmark(pointloop, pointnumber); - pointloop = pointtraverse(); - pointnumber++; - } +void numbernodes(){ + point pointloop; + int pointnumber; + + traversalinit( &points ); + pointloop = pointtraverse(); + pointnumber = firstnumber; + while ( pointloop != (point) NULL ) { + setpointmark( pointloop, pointnumber ); + pointloop = pointtraverse(); + pointnumber++; + } } /*****************************************************************************/ @@ -11823,13 +11973,13 @@ void numbernodes() #ifdef TRILIBRARY -void writeelements(trianglelist, triangleattriblist) +void writeelements( trianglelist, triangleattriblist ) int **trianglelist; REAL **triangleattriblist; #else /* not TRILIBRARY */ -void writeelements(elefilename, argc, argv) +void writeelements( elefilename, argc, argv ) char *elefilename; int argc; char **argv; @@ -11838,113 +11988,114 @@ char **argv; { #ifdef TRILIBRARY - int *tlist; - REAL *talist; - int pointindex; - int attribindex; + int *tlist; + REAL *talist; + int pointindex; + int attribindex; #else /* not TRILIBRARY */ - FILE *outfile; + FILE *outfile; #endif /* not TRILIBRARY */ - struct triedge triangleloop; - point p1, p2, p3; - point mid1, mid2, mid3; - int elementnumber; - int i; + struct triedge triangleloop; + point p1, p2, p3; + point mid1, mid2, mid3; + int elementnumber; + int i; #ifdef TRILIBRARY - if (!quiet) { - printf("Writing triangles.\n"); - } - /* Allocate memory for output triangles if necessary. */ - if (*trianglelist == (int *) NULL) { - *trianglelist = (int *) malloc(triangles.items * - ((order + 1) * (order + 2) / 2) * sizeof(int)); - if (*trianglelist == (int *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - /* Allocate memory for output triangle attributes if necessary. */ - if ((eextras > 0) && (*triangleattriblist == (REAL *) NULL)) { - *triangleattriblist = (REAL *) malloc(triangles.items * eextras * - sizeof(REAL)); - if (*triangleattriblist == (REAL *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - tlist = *trianglelist; - talist = *triangleattriblist; - pointindex = 0; - attribindex = 0; + if ( !quiet ) { + printf( "Writing triangles.\n" ); + } + /* Allocate memory for output triangles if necessary. */ + if ( *trianglelist == (int *) NULL ) { + *trianglelist = (int *) malloc( triangles.items * + ( ( order + 1 ) * ( order + 2 ) / 2 ) * sizeof( int ) ); + if ( *trianglelist == (int *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + /* Allocate memory for output triangle attributes if necessary. */ + if ( ( eextras > 0 ) && ( *triangleattriblist == (REAL *) NULL ) ) { + *triangleattriblist = (REAL *) malloc( triangles.items * eextras * + sizeof( REAL ) ); + if ( *triangleattriblist == (REAL *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + tlist = *trianglelist; + talist = *triangleattriblist; + pointindex = 0; + attribindex = 0; #else /* not TRILIBRARY */ - if (!quiet) { - printf("Writing %s.\n", elefilename); - } - outfile = fopen(elefilename, "w"); - if (outfile == (FILE *) NULL) { - printf(" Error: Cannot create file %s.\n", elefilename); - exit(1); - } - /* Number of triangles, points per triangle, attributes per triangle. */ - fprintf(outfile, "%ld %d %d\n", triangles.items, - (order + 1) * (order + 2) / 2, eextras); + if ( !quiet ) { + printf( "Writing %s.\n", elefilename ); + } + outfile = fopen( elefilename, "w" ); + if ( outfile == (FILE *) NULL ) { + printf( " Error: Cannot create file %s.\n", elefilename ); + exit( 1 ); + } + /* Number of triangles, points per triangle, attributes per triangle. */ + fprintf( outfile, "%ld %d %d\n", triangles.items, + ( order + 1 ) * ( order + 2 ) / 2, eextras ); #endif /* not TRILIBRARY */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - triangleloop.orient = 0; - elementnumber = firstnumber; - while (triangleloop.tri != (triangle *) NULL) { - org(triangleloop, p1); - dest(triangleloop, p2); - apex(triangleloop, p3); - if (order == 1) { + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + triangleloop.orient = 0; + elementnumber = firstnumber; + while ( triangleloop.tri != (triangle *) NULL ) { + org( triangleloop, p1 ); + dest( triangleloop, p2 ); + apex( triangleloop, p3 ); + if ( order == 1 ) { #ifdef TRILIBRARY - tlist[pointindex++] = pointmark(p1); - tlist[pointindex++] = pointmark(p2); - tlist[pointindex++] = pointmark(p3); + tlist[pointindex++] = pointmark( p1 ); + tlist[pointindex++] = pointmark( p2 ); + tlist[pointindex++] = pointmark( p3 ); #else /* not TRILIBRARY */ - /* Triangle number, indices for three points. */ - fprintf(outfile, "%4d %4d %4d %4d", elementnumber, - pointmark(p1), pointmark(p2), pointmark(p3)); + /* Triangle number, indices for three points. */ + fprintf( outfile, "%4d %4d %4d %4d", elementnumber, + pointmark( p1 ), pointmark( p2 ), pointmark( p3 ) ); #endif /* not TRILIBRARY */ - } else { - mid1 = (point) triangleloop.tri[highorderindex + 1]; - mid2 = (point) triangleloop.tri[highorderindex + 2]; - mid3 = (point) triangleloop.tri[highorderindex]; + } + else { + mid1 = (point) triangleloop.tri[highorderindex + 1]; + mid2 = (point) triangleloop.tri[highorderindex + 2]; + mid3 = (point) triangleloop.tri[highorderindex]; #ifdef TRILIBRARY - tlist[pointindex++] = pointmark(p1); - tlist[pointindex++] = pointmark(p2); - tlist[pointindex++] = pointmark(p3); - tlist[pointindex++] = pointmark(mid1); - tlist[pointindex++] = pointmark(mid2); - tlist[pointindex++] = pointmark(mid3); + tlist[pointindex++] = pointmark( p1 ); + tlist[pointindex++] = pointmark( p2 ); + tlist[pointindex++] = pointmark( p3 ); + tlist[pointindex++] = pointmark( mid1 ); + tlist[pointindex++] = pointmark( mid2 ); + tlist[pointindex++] = pointmark( mid3 ); #else /* not TRILIBRARY */ - /* Triangle number, indices for six points. */ - fprintf(outfile, "%4d %4d %4d %4d %4d %4d %4d", elementnumber, - pointmark(p1), pointmark(p2), pointmark(p3), pointmark(mid1), - pointmark(mid2), pointmark(mid3)); + /* Triangle number, indices for six points. */ + fprintf( outfile, "%4d %4d %4d %4d %4d %4d %4d", elementnumber, + pointmark( p1 ), pointmark( p2 ), pointmark( p3 ), pointmark( mid1 ), + pointmark( mid2 ), pointmark( mid3 ) ); #endif /* not TRILIBRARY */ - } + } #ifdef TRILIBRARY - for (i = 0; i < eextras; i++) { - talist[attribindex++] = elemattribute(triangleloop, i); - } + for ( i = 0; i < eextras; i++ ) { + talist[attribindex++] = elemattribute( triangleloop, i ); + } #else /* not TRILIBRARY */ - for (i = 0; i < eextras; i++) { - fprintf(outfile, " %.17g", elemattribute(triangleloop, i)); - } - fprintf(outfile, "\n"); + for ( i = 0; i < eextras; i++ ) { + fprintf( outfile, " %.17g", elemattribute( triangleloop, i ) ); + } + fprintf( outfile, "\n" ); #endif /* not TRILIBRARY */ - triangleloop.tri = triangletraverse(); - elementnumber++; - } + triangleloop.tri = triangletraverse(); + elementnumber++; + } #ifndef TRILIBRARY - finishfile(outfile, argc, argv); + finishfile( outfile, argc, argv ); #endif /* not TRILIBRARY */ } @@ -11956,13 +12107,13 @@ char **argv; #ifdef TRILIBRARY -void writepoly(segmentlist, segmentmarkerlist) +void writepoly( segmentlist, segmentmarkerlist ) int **segmentlist; int **segmentmarkerlist; #else /* not TRILIBRARY */ -void writepoly(polyfilename, holelist, holes, regionlist, regions, argc, argv) +void writepoly( polyfilename, holelist, holes, regionlist, regions, argc, argv ) char *polyfilename; REAL *holelist; int holes; @@ -11975,109 +12126,110 @@ char **argv; { #ifdef TRILIBRARY - int *slist; - int *smlist; - int index; + int *slist; + int *smlist; + int index; #else /* not TRILIBRARY */ - FILE *outfile; - int i; + FILE *outfile; + int i; #endif /* not TRILIBRARY */ - struct edge shelleloop; - point endpoint1, endpoint2; - int shellenumber; + struct edge shelleloop; + point endpoint1, endpoint2; + int shellenumber; #ifdef TRILIBRARY - if (!quiet) { - printf("Writing segments.\n"); - } - /* Allocate memory for output segments if necessary. */ - if (*segmentlist == (int *) NULL) { - *segmentlist = (int *) malloc(shelles.items * 2 * sizeof(int)); - if (*segmentlist == (int *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - /* Allocate memory for output segment markers if necessary. */ - if (!nobound && (*segmentmarkerlist == (int *) NULL)) { - *segmentmarkerlist = (int *) malloc(shelles.items * sizeof(int)); - if (*segmentmarkerlist == (int *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - slist = *segmentlist; - smlist = *segmentmarkerlist; - index = 0; + if ( !quiet ) { + printf( "Writing segments.\n" ); + } + /* Allocate memory for output segments if necessary. */ + if ( *segmentlist == (int *) NULL ) { + *segmentlist = (int *) malloc( shelles.items * 2 * sizeof( int ) ); + if ( *segmentlist == (int *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + /* Allocate memory for output segment markers if necessary. */ + if ( !nobound && ( *segmentmarkerlist == (int *) NULL ) ) { + *segmentmarkerlist = (int *) malloc( shelles.items * sizeof( int ) ); + if ( *segmentmarkerlist == (int *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + slist = *segmentlist; + smlist = *segmentmarkerlist; + index = 0; #else /* not TRILIBRARY */ - if (!quiet) { - printf("Writing %s.\n", polyfilename); - } - outfile = fopen(polyfilename, "w"); - if (outfile == (FILE *) NULL) { - printf(" Error: Cannot create file %s.\n", polyfilename); - exit(1); - } - /* The zero indicates that the points are in a separate .node file. */ - /* Followed by number of dimensions, number of point attributes, */ - /* and number of boundary markers (zero or one). */ - fprintf(outfile, "%d %d %d %d\n", 0, mesh_dim, nextras, 1 - nobound); - /* Number of segments, number of boundary markers (zero or one). */ - fprintf(outfile, "%ld %d\n", shelles.items, 1 - nobound); + if ( !quiet ) { + printf( "Writing %s.\n", polyfilename ); + } + outfile = fopen( polyfilename, "w" ); + if ( outfile == (FILE *) NULL ) { + printf( " Error: Cannot create file %s.\n", polyfilename ); + exit( 1 ); + } + /* The zero indicates that the points are in a separate .node file. */ + /* Followed by number of dimensions, number of point attributes, */ + /* and number of boundary markers (zero or one). */ + fprintf( outfile, "%d %d %d %d\n", 0, mesh_dim, nextras, 1 - nobound ); + /* Number of segments, number of boundary markers (zero or one). */ + fprintf( outfile, "%ld %d\n", shelles.items, 1 - nobound ); #endif /* not TRILIBRARY */ - traversalinit(&shelles); - shelleloop.sh = shelletraverse(); - shelleloop.shorient = 0; - shellenumber = firstnumber; - while (shelleloop.sh != (shelle *) NULL) { - sorg(shelleloop, endpoint1); - sdest(shelleloop, endpoint2); + traversalinit( &shelles ); + shelleloop.sh = shelletraverse(); + shelleloop.shorient = 0; + shellenumber = firstnumber; + while ( shelleloop.sh != (shelle *) NULL ) { + sorg( shelleloop, endpoint1 ); + sdest( shelleloop, endpoint2 ); #ifdef TRILIBRARY - /* Copy indices of the segment's two endpoints. */ - slist[index++] = pointmark(endpoint1); - slist[index++] = pointmark(endpoint2); - if (!nobound) { - /* Copy the boundary marker. */ - smlist[shellenumber - firstnumber] = mark(shelleloop); - } + /* Copy indices of the segment's two endpoints. */ + slist[index++] = pointmark( endpoint1 ); + slist[index++] = pointmark( endpoint2 ); + if ( !nobound ) { + /* Copy the boundary marker. */ + smlist[shellenumber - firstnumber] = mark( shelleloop ); + } #else /* not TRILIBRARY */ - /* Segment number, indices of its two endpoints, and possibly a marker. */ - if (nobound) { - fprintf(outfile, "%4d %4d %4d\n", shellenumber, - pointmark(endpoint1), pointmark(endpoint2)); - } else { - fprintf(outfile, "%4d %4d %4d %4d\n", shellenumber, - pointmark(endpoint1), pointmark(endpoint2), mark(shelleloop)); - } + /* Segment number, indices of its two endpoints, and possibly a marker. */ + if ( nobound ) { + fprintf( outfile, "%4d %4d %4d\n", shellenumber, + pointmark( endpoint1 ), pointmark( endpoint2 ) ); + } + else { + fprintf( outfile, "%4d %4d %4d %4d\n", shellenumber, + pointmark( endpoint1 ), pointmark( endpoint2 ), mark( shelleloop ) ); + } #endif /* not TRILIBRARY */ - shelleloop.sh = shelletraverse(); - shellenumber++; - } + shelleloop.sh = shelletraverse(); + shellenumber++; + } #ifndef TRILIBRARY #ifndef CDT_ONLY - fprintf(outfile, "%d\n", holes); - if (holes > 0) { - for (i = 0; i < holes; i++) { - /* Hole number, x and y coordinates. */ - fprintf(outfile, "%4d %.17g %.17g\n", firstnumber + i, - holelist[2 * i], holelist[2 * i + 1]); - } - } - if (regions > 0) { - fprintf(outfile, "%d\n", regions); - for (i = 0; i < regions; i++) { - /* Region number, x and y coordinates, attribute, maximum area. */ - fprintf(outfile, "%4d %.17g %.17g %.17g %.17g\n", firstnumber + i, - regionlist[4 * i], regionlist[4 * i + 1], - regionlist[4 * i + 2], regionlist[4 * i + 3]); - } - } + fprintf( outfile, "%d\n", holes ); + if ( holes > 0 ) { + for ( i = 0; i < holes; i++ ) { + /* Hole number, x and y coordinates. */ + fprintf( outfile, "%4d %.17g %.17g\n", firstnumber + i, + holelist[2 * i], holelist[2 * i + 1] ); + } + } + if ( regions > 0 ) { + fprintf( outfile, "%d\n", regions ); + for ( i = 0; i < regions; i++ ) { + /* Region number, x and y coordinates, attribute, maximum area. */ + fprintf( outfile, "%4d %.17g %.17g %.17g %.17g\n", firstnumber + i, + regionlist[4 * i], regionlist[4 * i + 1], + regionlist[4 * i + 2], regionlist[4 * i + 3] ); + } + } #endif /* not CDT_ONLY */ - finishfile(outfile, argc, argv); + finishfile( outfile, argc, argv ); #endif /* not TRILIBRARY */ } @@ -12089,13 +12241,13 @@ char **argv; #ifdef TRILIBRARY -void writeedges(edgelist, edgemarkerlist) +void writeedges( edgelist, edgemarkerlist ) int **edgelist; int **edgemarkerlist; #else /* not TRILIBRARY */ -void writeedges(edgefilename, argc, argv) +void writeedges( edgefilename, argc, argv ) char *edgefilename; int argc; char **argv; @@ -12104,118 +12256,121 @@ char **argv; { #ifdef TRILIBRARY - int *elist; - int *emlist; - int index; + int *elist; + int *emlist; + int index; #else /* not TRILIBRARY */ - FILE *outfile; + FILE *outfile; #endif /* not TRILIBRARY */ - struct triedge triangleloop, trisym; - struct edge checkmark; - point p1, p2; - int edgenumber; - triangle ptr; /* Temporary variable used by sym(). */ - shelle sptr; /* Temporary variable used by tspivot(). */ + struct triedge triangleloop, trisym; + struct edge checkmark; + point p1, p2; + int edgenumber; + triangle ptr; /* Temporary variable used by sym(). */ + shelle sptr; /* Temporary variable used by tspivot(). */ #ifdef TRILIBRARY - if (!quiet) { - printf("Writing edges.\n"); - } - /* Allocate memory for edges if necessary. */ - if (*edgelist == (int *) NULL) { - *edgelist = (int *) malloc(edges * 2 * sizeof(int)); - if (*edgelist == (int *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - /* Allocate memory for edge markers if necessary. */ - if (!nobound && (*edgemarkerlist == (int *) NULL)) { - *edgemarkerlist = (int *) malloc(edges * sizeof(int)); - if (*edgemarkerlist == (int *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - elist = *edgelist; - emlist = *edgemarkerlist; - index = 0; + if ( !quiet ) { + printf( "Writing edges.\n" ); + } + /* Allocate memory for edges if necessary. */ + if ( *edgelist == (int *) NULL ) { + *edgelist = (int *) malloc( edges * 2 * sizeof( int ) ); + if ( *edgelist == (int *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + /* Allocate memory for edge markers if necessary. */ + if ( !nobound && ( *edgemarkerlist == (int *) NULL ) ) { + *edgemarkerlist = (int *) malloc( edges * sizeof( int ) ); + if ( *edgemarkerlist == (int *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + elist = *edgelist; + emlist = *edgemarkerlist; + index = 0; #else /* not TRILIBRARY */ - if (!quiet) { - printf("Writing %s.\n", edgefilename); - } - outfile = fopen(edgefilename, "w"); - if (outfile == (FILE *) NULL) { - printf(" Error: Cannot create file %s.\n", edgefilename); - exit(1); - } - /* Number of edges, number of boundary markers (zero or one). */ - fprintf(outfile, "%ld %d\n", edges, 1 - nobound); + if ( !quiet ) { + printf( "Writing %s.\n", edgefilename ); + } + outfile = fopen( edgefilename, "w" ); + if ( outfile == (FILE *) NULL ) { + printf( " Error: Cannot create file %s.\n", edgefilename ); + exit( 1 ); + } + /* Number of edges, number of boundary markers (zero or one). */ + fprintf( outfile, "%ld %d\n", edges, 1 - nobound ); #endif /* not TRILIBRARY */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - edgenumber = firstnumber; - /* To loop over the set of edges, loop over all triangles, and look at */ - /* the three edges of each triangle. If there isn't another triangle */ - /* adjacent to the edge, operate on the edge. If there is another */ - /* adjacent triangle, operate on the edge only if the current triangle */ - /* has a smaller pointer than its neighbor. This way, each edge is */ - /* considered only once. */ - while (triangleloop.tri != (triangle *) NULL) { - for (triangleloop.orient = 0; triangleloop.orient < 3; - triangleloop.orient++) { - sym(triangleloop, trisym); - if ((triangleloop.tri < trisym.tri) || (trisym.tri == dummytri)) { - org(triangleloop, p1); - dest(triangleloop, p2); + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + edgenumber = firstnumber; + /* To loop over the set of edges, loop over all triangles, and look at */ + /* the three edges of each triangle. If there isn't another triangle */ + /* adjacent to the edge, operate on the edge. If there is another */ + /* adjacent triangle, operate on the edge only if the current triangle */ + /* has a smaller pointer than its neighbor. This way, each edge is */ + /* considered only once. */ + while ( triangleloop.tri != (triangle *) NULL ) { + for ( triangleloop.orient = 0; triangleloop.orient < 3; + triangleloop.orient++ ) { + sym( triangleloop, trisym ); + if ( ( triangleloop.tri < trisym.tri ) || ( trisym.tri == dummytri ) ) { + org( triangleloop, p1 ); + dest( triangleloop, p2 ); #ifdef TRILIBRARY - elist[index++] = pointmark(p1); - elist[index++] = pointmark(p2); + elist[index++] = pointmark( p1 ); + elist[index++] = pointmark( p2 ); #endif /* TRILIBRARY */ - if (nobound) { + if ( nobound ) { #ifndef TRILIBRARY - /* Edge number, indices of two endpoints. */ - fprintf(outfile, "%4d %d %d\n", edgenumber, - pointmark(p1), pointmark(p2)); + /* Edge number, indices of two endpoints. */ + fprintf( outfile, "%4d %d %d\n", edgenumber, + pointmark( p1 ), pointmark( p2 ) ); #endif /* not TRILIBRARY */ - } else { - /* Edge number, indices of two endpoints, and a boundary marker. */ - /* If there's no shell edge, the boundary marker is zero. */ - if (useshelles) { - tspivot(triangleloop, checkmark); - if (checkmark.sh == dummysh) { + } + else { + /* Edge number, indices of two endpoints, and a boundary marker. */ + /* If there's no shell edge, the boundary marker is zero. */ + if ( useshelles ) { + tspivot( triangleloop, checkmark ); + if ( checkmark.sh == dummysh ) { #ifdef TRILIBRARY - emlist[edgenumber - firstnumber] = 0; + emlist[edgenumber - firstnumber] = 0; #else /* not TRILIBRARY */ - fprintf(outfile, "%4d %d %d %d\n", edgenumber, - pointmark(p1), pointmark(p2), 0); + fprintf( outfile, "%4d %d %d %d\n", edgenumber, + pointmark( p1 ), pointmark( p2 ), 0 ); #endif /* not TRILIBRARY */ - } else { + } + else { #ifdef TRILIBRARY - emlist[edgenumber - firstnumber] = mark(checkmark); + emlist[edgenumber - firstnumber] = mark( checkmark ); #else /* not TRILIBRARY */ - fprintf(outfile, "%4d %d %d %d\n", edgenumber, - pointmark(p1), pointmark(p2), mark(checkmark)); + fprintf( outfile, "%4d %d %d %d\n", edgenumber, + pointmark( p1 ), pointmark( p2 ), mark( checkmark ) ); #endif /* not TRILIBRARY */ - } - } else { + } + } + else { #ifdef TRILIBRARY - emlist[edgenumber - firstnumber] = trisym.tri == dummytri; + emlist[edgenumber - firstnumber] = trisym.tri == dummytri; #else /* not TRILIBRARY */ - fprintf(outfile, "%4d %d %d %d\n", edgenumber, - pointmark(p1), pointmark(p2), trisym.tri == dummytri); + fprintf( outfile, "%4d %d %d %d\n", edgenumber, + pointmark( p1 ), pointmark( p2 ), trisym.tri == dummytri ); #endif /* not TRILIBRARY */ - } - } - edgenumber++; - } - } - triangleloop.tri = triangletraverse(); - } + } + } + edgenumber++; + } + } + triangleloop.tri = triangletraverse(); + } #ifndef TRILIBRARY - finishfile(outfile, argc, argv); + finishfile( outfile, argc, argv ); #endif /* not TRILIBRARY */ } @@ -12237,9 +12392,9 @@ char **argv; #ifdef TRILIBRARY -void writevoronoi(vpointlist, vpointattriblist, vpointmarkerlist, vedgelist, - vedgemarkerlist, vnormlist) -REAL **vpointlist; +void writevoronoi( vpointlist, vpointattriblist, vpointmarkerlist, vedgelist, + vedgemarkerlist, vnormlist ) +REAL * *vpointlist; REAL **vpointattriblist; int **vpointmarkerlist; int **vedgelist; @@ -12248,7 +12403,7 @@ REAL **vnormlist; #else /* not TRILIBRARY */ -void writevoronoi(vnodefilename, vedgefilename, argc, argv) +void writevoronoi( vnodefilename, vedgefilename, argc, argv ) char *vnodefilename; char *vedgefilename; int argc; @@ -12258,204 +12413,205 @@ char **argv; { #ifdef TRILIBRARY - REAL *plist; - REAL *palist; - int *elist; - REAL *normlist; - int coordindex; - int attribindex; + REAL *plist; + REAL *palist; + int *elist; + REAL *normlist; + int coordindex; + int attribindex; #else /* not TRILIBRARY */ - FILE *outfile; + FILE *outfile; #endif /* not TRILIBRARY */ - struct triedge triangleloop, trisym; - point torg, tdest, tapex; - REAL circumcenter[2]; - REAL xi, eta; - int vnodenumber, vedgenumber; - int p1, p2; - int i; - triangle ptr; /* Temporary variable used by sym(). */ + struct triedge triangleloop, trisym; + point torg, tdest, tapex; + REAL circumcenter[2]; + REAL xi, eta; + int vnodenumber, vedgenumber; + int p1, p2; + int i; + triangle ptr; /* Temporary variable used by sym(). */ #ifdef TRILIBRARY - if (!quiet) { - printf("Writing Voronoi vertices.\n"); - } - /* Allocate memory for Voronoi vertices if necessary. */ - if (*vpointlist == (REAL *) NULL) { - *vpointlist = (REAL *) malloc(triangles.items * 2 * sizeof(REAL)); - if (*vpointlist == (REAL *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - /* Allocate memory for Voronoi vertex attributes if necessary. */ - if (*vpointattriblist == (REAL *) NULL) { - *vpointattriblist = (REAL *) malloc(triangles.items * nextras * - sizeof(REAL)); - if (*vpointattriblist == (REAL *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - *vpointmarkerlist = (int *) NULL; - plist = *vpointlist; - palist = *vpointattriblist; - coordindex = 0; - attribindex = 0; + if ( !quiet ) { + printf( "Writing Voronoi vertices.\n" ); + } + /* Allocate memory for Voronoi vertices if necessary. */ + if ( *vpointlist == (REAL *) NULL ) { + *vpointlist = (REAL *) malloc( triangles.items * 2 * sizeof( REAL ) ); + if ( *vpointlist == (REAL *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + /* Allocate memory for Voronoi vertex attributes if necessary. */ + if ( *vpointattriblist == (REAL *) NULL ) { + *vpointattriblist = (REAL *) malloc( triangles.items * nextras * + sizeof( REAL ) ); + if ( *vpointattriblist == (REAL *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + *vpointmarkerlist = (int *) NULL; + plist = *vpointlist; + palist = *vpointattriblist; + coordindex = 0; + attribindex = 0; #else /* not TRILIBRARY */ - if (!quiet) { - printf("Writing %s.\n", vnodefilename); - } - outfile = fopen(vnodefilename, "w"); - if (outfile == (FILE *) NULL) { - printf(" Error: Cannot create file %s.\n", vnodefilename); - exit(1); - } - /* Number of triangles, two dimensions, number of point attributes, */ - /* zero markers. */ - fprintf(outfile, "%ld %d %d %d\n", triangles.items, 2, nextras, 0); + if ( !quiet ) { + printf( "Writing %s.\n", vnodefilename ); + } + outfile = fopen( vnodefilename, "w" ); + if ( outfile == (FILE *) NULL ) { + printf( " Error: Cannot create file %s.\n", vnodefilename ); + exit( 1 ); + } + /* Number of triangles, two dimensions, number of point attributes, */ + /* zero markers. */ + fprintf( outfile, "%ld %d %d %d\n", triangles.items, 2, nextras, 0 ); #endif /* not TRILIBRARY */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - triangleloop.orient = 0; - vnodenumber = firstnumber; - while (triangleloop.tri != (triangle *) NULL) { - org(triangleloop, torg); - dest(triangleloop, tdest); - apex(triangleloop, tapex); - findcircumcenter(torg, tdest, tapex, circumcenter, &xi, &eta); + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + triangleloop.orient = 0; + vnodenumber = firstnumber; + while ( triangleloop.tri != (triangle *) NULL ) { + org( triangleloop, torg ); + dest( triangleloop, tdest ); + apex( triangleloop, tapex ); + findcircumcenter( torg, tdest, tapex, circumcenter, &xi, &eta ); #ifdef TRILIBRARY - /* X and y coordinates. */ - plist[coordindex++] = circumcenter[0]; - plist[coordindex++] = circumcenter[1]; - for (i = 2; i < 2 + nextras; i++) { - /* Interpolate the point attributes at the circumcenter. */ - palist[attribindex++] = torg[i] + xi * (tdest[i] - torg[i]) - + eta * (tapex[i] - torg[i]); - } + /* X and y coordinates. */ + plist[coordindex++] = circumcenter[0]; + plist[coordindex++] = circumcenter[1]; + for ( i = 2; i < 2 + nextras; i++ ) { + /* Interpolate the point attributes at the circumcenter. */ + palist[attribindex++] = torg[i] + xi * ( tdest[i] - torg[i] ) + + eta * ( tapex[i] - torg[i] ); + } #else /* not TRILIBRARY */ - /* Voronoi vertex number, x and y coordinates. */ - fprintf(outfile, "%4d %.17g %.17g", vnodenumber, circumcenter[0], - circumcenter[1]); - for (i = 2; i < 2 + nextras; i++) { - /* Interpolate the point attributes at the circumcenter. */ - fprintf(outfile, " %.17g", torg[i] + xi * (tdest[i] - torg[i]) - + eta * (tapex[i] - torg[i])); - } - fprintf(outfile, "\n"); + /* Voronoi vertex number, x and y coordinates. */ + fprintf( outfile, "%4d %.17g %.17g", vnodenumber, circumcenter[0], + circumcenter[1] ); + for ( i = 2; i < 2 + nextras; i++ ) { + /* Interpolate the point attributes at the circumcenter. */ + fprintf( outfile, " %.17g", torg[i] + xi * ( tdest[i] - torg[i] ) + + eta * ( tapex[i] - torg[i] ) ); + } + fprintf( outfile, "\n" ); #endif /* not TRILIBRARY */ - * (int *) (triangleloop.tri + 6) = vnodenumber; - triangleloop.tri = triangletraverse(); - vnodenumber++; - } + *(int *) ( triangleloop.tri + 6 ) = vnodenumber; + triangleloop.tri = triangletraverse(); + vnodenumber++; + } #ifndef TRILIBRARY - finishfile(outfile, argc, argv); + finishfile( outfile, argc, argv ); #endif /* not TRILIBRARY */ #ifdef TRILIBRARY - if (!quiet) { - printf("Writing Voronoi edges.\n"); - } - /* Allocate memory for output Voronoi edges if necessary. */ - if (*vedgelist == (int *) NULL) { - *vedgelist = (int *) malloc(edges * 2 * sizeof(int)); - if (*vedgelist == (int *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - *vedgemarkerlist = (int *) NULL; - /* Allocate memory for output Voronoi norms if necessary. */ - if (*vnormlist == (REAL *) NULL) { - *vnormlist = (REAL *) malloc(edges * 2 * sizeof(REAL)); - if (*vnormlist == (REAL *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - elist = *vedgelist; - normlist = *vnormlist; - coordindex = 0; + if ( !quiet ) { + printf( "Writing Voronoi edges.\n" ); + } + /* Allocate memory for output Voronoi edges if necessary. */ + if ( *vedgelist == (int *) NULL ) { + *vedgelist = (int *) malloc( edges * 2 * sizeof( int ) ); + if ( *vedgelist == (int *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + *vedgemarkerlist = (int *) NULL; + /* Allocate memory for output Voronoi norms if necessary. */ + if ( *vnormlist == (REAL *) NULL ) { + *vnormlist = (REAL *) malloc( edges * 2 * sizeof( REAL ) ); + if ( *vnormlist == (REAL *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + elist = *vedgelist; + normlist = *vnormlist; + coordindex = 0; #else /* not TRILIBRARY */ - if (!quiet) { - printf("Writing %s.\n", vedgefilename); - } - outfile = fopen(vedgefilename, "w"); - if (outfile == (FILE *) NULL) { - printf(" Error: Cannot create file %s.\n", vedgefilename); - exit(1); - } - /* Number of edges, zero boundary markers. */ - fprintf(outfile, "%ld %d\n", edges, 0); + if ( !quiet ) { + printf( "Writing %s.\n", vedgefilename ); + } + outfile = fopen( vedgefilename, "w" ); + if ( outfile == (FILE *) NULL ) { + printf( " Error: Cannot create file %s.\n", vedgefilename ); + exit( 1 ); + } + /* Number of edges, zero boundary markers. */ + fprintf( outfile, "%ld %d\n", edges, 0 ); #endif /* not TRILIBRARY */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - vedgenumber = firstnumber; - /* To loop over the set of edges, loop over all triangles, and look at */ - /* the three edges of each triangle. If there isn't another triangle */ - /* adjacent to the edge, operate on the edge. If there is another */ - /* adjacent triangle, operate on the edge only if the current triangle */ - /* has a smaller pointer than its neighbor. This way, each edge is */ - /* considered only once. */ - while (triangleloop.tri != (triangle *) NULL) { - for (triangleloop.orient = 0; triangleloop.orient < 3; - triangleloop.orient++) { - sym(triangleloop, trisym); - if ((triangleloop.tri < trisym.tri) || (trisym.tri == dummytri)) { - /* Find the number of this triangle (and Voronoi vertex). */ - p1 = * (int *) (triangleloop.tri + 6); - if (trisym.tri == dummytri) { - org(triangleloop, torg); - dest(triangleloop, tdest); + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + vedgenumber = firstnumber; + /* To loop over the set of edges, loop over all triangles, and look at */ + /* the three edges of each triangle. If there isn't another triangle */ + /* adjacent to the edge, operate on the edge. If there is another */ + /* adjacent triangle, operate on the edge only if the current triangle */ + /* has a smaller pointer than its neighbor. This way, each edge is */ + /* considered only once. */ + while ( triangleloop.tri != (triangle *) NULL ) { + for ( triangleloop.orient = 0; triangleloop.orient < 3; + triangleloop.orient++ ) { + sym( triangleloop, trisym ); + if ( ( triangleloop.tri < trisym.tri ) || ( trisym.tri == dummytri ) ) { + /* Find the number of this triangle (and Voronoi vertex). */ + p1 = *(int *) ( triangleloop.tri + 6 ); + if ( trisym.tri == dummytri ) { + org( triangleloop, torg ); + dest( triangleloop, tdest ); #ifdef TRILIBRARY - /* Copy an infinite ray. Index of one endpoint, and -1. */ - elist[coordindex] = p1; - normlist[coordindex++] = tdest[1] - torg[1]; - elist[coordindex] = -1; - normlist[coordindex++] = torg[0] - tdest[0]; + /* Copy an infinite ray. Index of one endpoint, and -1. */ + elist[coordindex] = p1; + normlist[coordindex++] = tdest[1] - torg[1]; + elist[coordindex] = -1; + normlist[coordindex++] = torg[0] - tdest[0]; #else /* not TRILIBRARY */ - /* Write an infinite ray. Edge number, index of one endpoint, -1, */ - /* and x and y coordinates of a vector representing the */ - /* direction of the ray. */ - fprintf(outfile, "%4d %d %d %.17g %.17g\n", vedgenumber, - p1, -1, tdest[1] - torg[1], torg[0] - tdest[0]); + /* Write an infinite ray. Edge number, index of one endpoint, -1, */ + /* and x and y coordinates of a vector representing the */ + /* direction of the ray. */ + fprintf( outfile, "%4d %d %d %.17g %.17g\n", vedgenumber, + p1, -1, tdest[1] - torg[1], torg[0] - tdest[0] ); #endif /* not TRILIBRARY */ - } else { - /* Find the number of the adjacent triangle (and Voronoi vertex). */ - p2 = * (int *) (trisym.tri + 6); - /* Finite edge. Write indices of two endpoints. */ + } + else { + /* Find the number of the adjacent triangle (and Voronoi vertex). */ + p2 = *(int *) ( trisym.tri + 6 ); + /* Finite edge. Write indices of two endpoints. */ #ifdef TRILIBRARY - elist[coordindex] = p1; - normlist[coordindex++] = 0.0; - elist[coordindex] = p2; - normlist[coordindex++] = 0.0; + elist[coordindex] = p1; + normlist[coordindex++] = 0.0; + elist[coordindex] = p2; + normlist[coordindex++] = 0.0; #else /* not TRILIBRARY */ - fprintf(outfile, "%4d %d %d\n", vedgenumber, p1, p2); + fprintf( outfile, "%4d %d %d\n", vedgenumber, p1, p2 ); #endif /* not TRILIBRARY */ - } - vedgenumber++; - } - } - triangleloop.tri = triangletraverse(); - } + } + vedgenumber++; + } + } + triangleloop.tri = triangletraverse(); + } #ifndef TRILIBRARY - finishfile(outfile, argc, argv); + finishfile( outfile, argc, argv ); #endif /* not TRILIBRARY */ } #ifdef TRILIBRARY -void writeneighbors(neighborlist) +void writeneighbors( neighborlist ) int **neighborlist; #else /* not TRILIBRARY */ -void writeneighbors(neighborfilename, argc, argv) +void writeneighbors( neighborfilename, argc, argv ) char *neighborfilename; int argc; char **argv; @@ -12464,83 +12620,83 @@ char **argv; { #ifdef TRILIBRARY - int *nlist; - int index; + int *nlist; + int index; #else /* not TRILIBRARY */ - FILE *outfile; + FILE *outfile; #endif /* not TRILIBRARY */ - struct triedge triangleloop, trisym; - int elementnumber; - int neighbor1, neighbor2, neighbor3; - triangle ptr; /* Temporary variable used by sym(). */ + struct triedge triangleloop, trisym; + int elementnumber; + int neighbor1, neighbor2, neighbor3; + triangle ptr; /* Temporary variable used by sym(). */ #ifdef TRILIBRARY - if (!quiet) { - printf("Writing neighbors.\n"); - } - /* Allocate memory for neighbors if necessary. */ - if (*neighborlist == (int *) NULL) { - *neighborlist = (int *) malloc(triangles.items * 3 * sizeof(int)); - if (*neighborlist == (int *) NULL) { - printf("Error: Out of memory.\n"); - exit(1); - } - } - nlist = *neighborlist; - index = 0; + if ( !quiet ) { + printf( "Writing neighbors.\n" ); + } + /* Allocate memory for neighbors if necessary. */ + if ( *neighborlist == (int *) NULL ) { + *neighborlist = (int *) malloc( triangles.items * 3 * sizeof( int ) ); + if ( *neighborlist == (int *) NULL ) { + printf( "Error: Out of memory.\n" ); + exit( 1 ); + } + } + nlist = *neighborlist; + index = 0; #else /* not TRILIBRARY */ - if (!quiet) { - printf("Writing %s.\n", neighborfilename); - } - outfile = fopen(neighborfilename, "w"); - if (outfile == (FILE *) NULL) { - printf(" Error: Cannot create file %s.\n", neighborfilename); - exit(1); - } - /* Number of triangles, three edges per triangle. */ - fprintf(outfile, "%ld %d\n", triangles.items, 3); + if ( !quiet ) { + printf( "Writing %s.\n", neighborfilename ); + } + outfile = fopen( neighborfilename, "w" ); + if ( outfile == (FILE *) NULL ) { + printf( " Error: Cannot create file %s.\n", neighborfilename ); + exit( 1 ); + } + /* Number of triangles, three edges per triangle. */ + fprintf( outfile, "%ld %d\n", triangles.items, 3 ); #endif /* not TRILIBRARY */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - triangleloop.orient = 0; - elementnumber = firstnumber; - while (triangleloop.tri != (triangle *) NULL) { - * (int *) (triangleloop.tri + 6) = elementnumber; - triangleloop.tri = triangletraverse(); - elementnumber++; - } - * (int *) (dummytri + 6) = -1; - - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - elementnumber = firstnumber; - while (triangleloop.tri != (triangle *) NULL) { - triangleloop.orient = 1; - sym(triangleloop, trisym); - neighbor1 = * (int *) (trisym.tri + 6); - triangleloop.orient = 2; - sym(triangleloop, trisym); - neighbor2 = * (int *) (trisym.tri + 6); - triangleloop.orient = 0; - sym(triangleloop, trisym); - neighbor3 = * (int *) (trisym.tri + 6); + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + triangleloop.orient = 0; + elementnumber = firstnumber; + while ( triangleloop.tri != (triangle *) NULL ) { + *(int *) ( triangleloop.tri + 6 ) = elementnumber; + triangleloop.tri = triangletraverse(); + elementnumber++; + } + *(int *) ( dummytri + 6 ) = -1; + + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + elementnumber = firstnumber; + while ( triangleloop.tri != (triangle *) NULL ) { + triangleloop.orient = 1; + sym( triangleloop, trisym ); + neighbor1 = *(int *) ( trisym.tri + 6 ); + triangleloop.orient = 2; + sym( triangleloop, trisym ); + neighbor2 = *(int *) ( trisym.tri + 6 ); + triangleloop.orient = 0; + sym( triangleloop, trisym ); + neighbor3 = *(int *) ( trisym.tri + 6 ); #ifdef TRILIBRARY - nlist[index++] = neighbor1; - nlist[index++] = neighbor2; - nlist[index++] = neighbor3; + nlist[index++] = neighbor1; + nlist[index++] = neighbor2; + nlist[index++] = neighbor3; #else /* not TRILIBRARY */ - /* Triangle number, neighboring triangle numbers. */ - fprintf(outfile, "%4d %d %d %d\n", elementnumber, - neighbor1, neighbor2, neighbor3); + /* Triangle number, neighboring triangle numbers. */ + fprintf( outfile, "%4d %d %d %d\n", elementnumber, + neighbor1, neighbor2, neighbor3 ); #endif /* not TRILIBRARY */ - triangleloop.tri = triangletraverse(); - elementnumber++; - } + triangleloop.tri = triangletraverse(); + elementnumber++; + } #ifndef TRILIBRARY - finishfile(outfile, argc, argv); + finishfile( outfile, argc, argv ); #endif /* TRILIBRARY */ } @@ -12555,52 +12711,52 @@ char **argv; #ifndef TRILIBRARY -void writeoff(offfilename, argc, argv) +void writeoff( offfilename, argc, argv ) char *offfilename; int argc; char **argv; { - FILE *outfile; - struct triedge triangleloop; - point pointloop; - point p1, p2, p3; - - if (!quiet) { - printf("Writing %s.\n", offfilename); - } - outfile = fopen(offfilename, "w"); - if (outfile == (FILE *) NULL) { - printf(" Error: Cannot create file %s.\n", offfilename); - exit(1); - } - /* Number of points, triangles, and edges. */ - fprintf(outfile, "OFF\n%ld %ld %ld\n", points.items, triangles.items, - edges); - - /* Write the points. */ - traversalinit(&points); - pointloop = pointtraverse(); - while (pointloop != (point) NULL) { - /* The "0.0" is here because the OFF format uses 3D coordinates. */ - fprintf(outfile, " %.17g %.17g %.17g\n", pointloop[0], - pointloop[1], 0.0); - pointloop = pointtraverse(); - } - - /* Write the triangles. */ - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - triangleloop.orient = 0; - while (triangleloop.tri != (triangle *) NULL) { - org(triangleloop, p1); - dest(triangleloop, p2); - apex(triangleloop, p3); - /* The "3" means a three-vertex polygon. */ - fprintf(outfile, " 3 %4d %4d %4d\n", pointmark(p1) - 1, - pointmark(p2) - 1, pointmark(p3) - 1); - triangleloop.tri = triangletraverse(); - } - finishfile(outfile, argc, argv); + FILE *outfile; + struct triedge triangleloop; + point pointloop; + point p1, p2, p3; + + if ( !quiet ) { + printf( "Writing %s.\n", offfilename ); + } + outfile = fopen( offfilename, "w" ); + if ( outfile == (FILE *) NULL ) { + printf( " Error: Cannot create file %s.\n", offfilename ); + exit( 1 ); + } + /* Number of points, triangles, and edges. */ + fprintf( outfile, "OFF\n%ld %ld %ld\n", points.items, triangles.items, + edges ); + + /* Write the points. */ + traversalinit( &points ); + pointloop = pointtraverse(); + while ( pointloop != (point) NULL ) { + /* The "0.0" is here because the OFF format uses 3D coordinates. */ + fprintf( outfile, " %.17g %.17g %.17g\n", pointloop[0], + pointloop[1], 0.0 ); + pointloop = pointtraverse(); + } + + /* Write the triangles. */ + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + triangleloop.orient = 0; + while ( triangleloop.tri != (triangle *) NULL ) { + org( triangleloop, p1 ); + dest( triangleloop, p2 ); + apex( triangleloop, p3 ); + /* The "3" means a three-vertex polygon. */ + fprintf( outfile, " 3 %4d %4d %4d\n", pointmark( p1 ) - 1, + pointmark( p2 ) - 1, pointmark( p3 ) - 1 ); + triangleloop.tri = triangletraverse(); + } + finishfile( outfile, argc, argv ); } #endif /* not TRILIBRARY */ @@ -12615,196 +12771,199 @@ char **argv; /* */ /*****************************************************************************/ -void quality_statistics() -{ - struct triedge triangleloop; - point p[3]; - REAL cossquaretable[8]; - REAL ratiotable[16]; - REAL dx[3], dy[3]; - REAL edgelength[3]; - REAL dotproduct; - REAL cossquare; - REAL triarea; - REAL shortest, longest; - REAL trilongest2; - REAL smallestarea, biggestarea; - REAL triminaltitude2; - REAL minaltitude; - REAL triaspect2; - REAL worstaspect; - REAL smallestangle, biggestangle; - REAL radconst, degconst; - int angletable[18]; - int aspecttable[16]; - int aspectindex; - int tendegree; - int acutebiggest; - int i, ii, j, k; - - printf("Mesh quality statistics:\n\n"); - radconst = (REAL)(PI / 18.0); - degconst = (REAL)(180.0 / PI); - for (i = 0; i < 8; i++) { - cossquaretable[i] = (REAL)(cos(radconst * (REAL) (i + 1))); - cossquaretable[i] = cossquaretable[i] * cossquaretable[i]; - } - for (i = 0; i < 18; i++) { - angletable[i] = 0; - } - - ratiotable[0] = 1.5; ratiotable[1] = 2.0; - ratiotable[2] = 2.5; ratiotable[3] = 3.0; - ratiotable[4] = 4.0; ratiotable[5] = 6.0; - ratiotable[6] = 10.0; ratiotable[7] = 15.0; - ratiotable[8] = 25.0; ratiotable[9] = 50.0; - ratiotable[10] = 100.0; ratiotable[11] = 300.0; - ratiotable[12] = 1000.0; ratiotable[13] = 10000.0; - ratiotable[14] = 100000.0; ratiotable[15] = 0.0; - for (i = 0; i < 16; i++) { - aspecttable[i] = 0; - } - - worstaspect = 0.0; - minaltitude = xmax - xmin + ymax - ymin; - minaltitude = minaltitude * minaltitude; - shortest = minaltitude; - longest = 0.0; - smallestarea = minaltitude; - biggestarea = 0.0; - worstaspect = 0.0; - smallestangle = 0.0; - biggestangle = 2.0; - acutebiggest = 1; - - traversalinit(&triangles); - triangleloop.tri = triangletraverse(); - triangleloop.orient = 0; - while (triangleloop.tri != (triangle *) NULL) { - org(triangleloop, p[0]); - dest(triangleloop, p[1]); - apex(triangleloop, p[2]); - trilongest2 = 0.0; - - for (i = 0; i < 3; i++) { - j = plus1mod3[i]; - k = minus1mod3[i]; - dx[i] = p[j][0] - p[k][0]; - dy[i] = p[j][1] - p[k][1]; - edgelength[i] = dx[i] * dx[i] + dy[i] * dy[i]; - if (edgelength[i] > trilongest2) { - trilongest2 = edgelength[i]; - } - if (edgelength[i] > longest) { - longest = edgelength[i]; - } - if (edgelength[i] < shortest) { - shortest = edgelength[i]; - } - } - - triarea = counterclockwise(p[0], p[1], p[2]); - if (triarea < smallestarea) { - smallestarea = triarea; - } - if (triarea > biggestarea) { - biggestarea = triarea; - } - triminaltitude2 = triarea * triarea / trilongest2; - if (triminaltitude2 < minaltitude) { - minaltitude = triminaltitude2; - } - triaspect2 = trilongest2 / triminaltitude2; - if (triaspect2 > worstaspect) { - worstaspect = triaspect2; - } - aspectindex = 0; - while ((triaspect2 > ratiotable[aspectindex] * ratiotable[aspectindex]) - && (aspectindex < 15)) { - aspectindex++; - } - aspecttable[aspectindex]++; - - for (i = 0; i < 3; i++) { - j = plus1mod3[i]; - k = minus1mod3[i]; - dotproduct = dx[j] * dx[k] + dy[j] * dy[k]; - cossquare = dotproduct * dotproduct / (edgelength[j] * edgelength[k]); - tendegree = 8; - for (ii = 7; ii >= 0; ii--) { - if (cossquare > cossquaretable[ii]) { - tendegree = ii; - } - } - if (dotproduct <= 0.0) { - angletable[tendegree]++; - if (cossquare > smallestangle) { - smallestangle = cossquare; - } - if (acutebiggest && (cossquare < biggestangle)) { - biggestangle = cossquare; - } - } else { - angletable[17 - tendegree]++; - if (acutebiggest || (cossquare > biggestangle)) { - biggestangle = cossquare; - acutebiggest = 0; - } - } - } - triangleloop.tri = triangletraverse(); - } - - shortest = (REAL)sqrt(shortest); - longest = (REAL)sqrt(longest); - minaltitude = (REAL)sqrt(minaltitude); - worstaspect = (REAL)sqrt(worstaspect); - smallestarea *= 2.0; - biggestarea *= 2.0; - if (smallestangle >= 1.0) { - smallestangle = 0.0; - } else { - smallestangle = (REAL)(degconst * acos(sqrt(smallestangle))); - } - if (biggestangle >= 1.0) { - biggestangle = 180.0; - } else { - if (acutebiggest) { - biggestangle = (REAL)(degconst * acos(sqrt(biggestangle))); - } else { - biggestangle = (REAL)(180.0 - degconst * acos(sqrt(biggestangle))); - } - } - - printf(" Smallest area: %16.5g | Largest area: %16.5g\n", - smallestarea, biggestarea); - printf(" Shortest edge: %16.5g | Longest edge: %16.5g\n", - shortest, longest); - printf(" Shortest altitude: %12.5g | Largest aspect ratio: %8.5g\n\n", - minaltitude, worstaspect); - printf(" Aspect ratio histogram:\n"); - printf(" 1.1547 - %-6.6g : %8d | %6.6g - %-6.6g : %8d\n", - ratiotable[0], aspecttable[0], ratiotable[7], ratiotable[8], - aspecttable[8]); - for (i = 1; i < 7; i++) { - printf(" %6.6g - %-6.6g : %8d | %6.6g - %-6.6g : %8d\n", - ratiotable[i - 1], ratiotable[i], aspecttable[i], - ratiotable[i + 7], ratiotable[i + 8], aspecttable[i + 8]); - } - printf(" %6.6g - %-6.6g : %8d | %6.6g - : %8d\n", - ratiotable[6], ratiotable[7], aspecttable[7], ratiotable[14], - aspecttable[15]); - printf( -" (Triangle aspect ratio is longest edge divided by shortest altitude)\n\n"); - printf(" Smallest angle: %15.5g | Largest angle: %15.5g\n\n", - smallestangle, biggestangle); - printf(" Angle histogram:\n"); - for (i = 0; i < 9; i++) { - printf(" %3d - %3d degrees: %8d | %3d - %3d degrees: %8d\n", - i * 10, i * 10 + 10, angletable[i], - i * 10 + 90, i * 10 + 100, angletable[i + 9]); - } - printf("\n"); +void quality_statistics(){ + struct triedge triangleloop; + point p[3]; + REAL cossquaretable[8]; + REAL ratiotable[16]; + REAL dx[3], dy[3]; + REAL edgelength[3]; + REAL dotproduct; + REAL cossquare; + REAL triarea; + REAL shortest, longest; + REAL trilongest2; + REAL smallestarea, biggestarea; + REAL triminaltitude2; + REAL minaltitude; + REAL triaspect2; + REAL worstaspect; + REAL smallestangle, biggestangle; + REAL radconst, degconst; + int angletable[18]; + int aspecttable[16]; + int aspectindex; + int tendegree; + int acutebiggest; + int i, ii, j, k; + + printf( "Mesh quality statistics:\n\n" ); + radconst = (REAL)( PI / 18.0 ); + degconst = (REAL)( 180.0 / PI ); + for ( i = 0; i < 8; i++ ) { + cossquaretable[i] = (REAL)( cos( radconst * (REAL) ( i + 1 ) ) ); + cossquaretable[i] = cossquaretable[i] * cossquaretable[i]; + } + for ( i = 0; i < 18; i++ ) { + angletable[i] = 0; + } + + ratiotable[0] = 1.5; ratiotable[1] = 2.0; + ratiotable[2] = 2.5; ratiotable[3] = 3.0; + ratiotable[4] = 4.0; ratiotable[5] = 6.0; + ratiotable[6] = 10.0; ratiotable[7] = 15.0; + ratiotable[8] = 25.0; ratiotable[9] = 50.0; + ratiotable[10] = 100.0; ratiotable[11] = 300.0; + ratiotable[12] = 1000.0; ratiotable[13] = 10000.0; + ratiotable[14] = 100000.0; ratiotable[15] = 0.0; + for ( i = 0; i < 16; i++ ) { + aspecttable[i] = 0; + } + + worstaspect = 0.0; + minaltitude = xmax - xmin + ymax - ymin; + minaltitude = minaltitude * minaltitude; + shortest = minaltitude; + longest = 0.0; + smallestarea = minaltitude; + biggestarea = 0.0; + worstaspect = 0.0; + smallestangle = 0.0; + biggestangle = 2.0; + acutebiggest = 1; + + traversalinit( &triangles ); + triangleloop.tri = triangletraverse(); + triangleloop.orient = 0; + while ( triangleloop.tri != (triangle *) NULL ) { + org( triangleloop, p[0] ); + dest( triangleloop, p[1] ); + apex( triangleloop, p[2] ); + trilongest2 = 0.0; + + for ( i = 0; i < 3; i++ ) { + j = plus1mod3[i]; + k = minus1mod3[i]; + dx[i] = p[j][0] - p[k][0]; + dy[i] = p[j][1] - p[k][1]; + edgelength[i] = dx[i] * dx[i] + dy[i] * dy[i]; + if ( edgelength[i] > trilongest2 ) { + trilongest2 = edgelength[i]; + } + if ( edgelength[i] > longest ) { + longest = edgelength[i]; + } + if ( edgelength[i] < shortest ) { + shortest = edgelength[i]; + } + } + + triarea = counterclockwise( p[0], p[1], p[2] ); + if ( triarea < smallestarea ) { + smallestarea = triarea; + } + if ( triarea > biggestarea ) { + biggestarea = triarea; + } + triminaltitude2 = triarea * triarea / trilongest2; + if ( triminaltitude2 < minaltitude ) { + minaltitude = triminaltitude2; + } + triaspect2 = trilongest2 / triminaltitude2; + if ( triaspect2 > worstaspect ) { + worstaspect = triaspect2; + } + aspectindex = 0; + while ( ( triaspect2 > ratiotable[aspectindex] * ratiotable[aspectindex] ) + && ( aspectindex < 15 ) ) { + aspectindex++; + } + aspecttable[aspectindex]++; + + for ( i = 0; i < 3; i++ ) { + j = plus1mod3[i]; + k = minus1mod3[i]; + dotproduct = dx[j] * dx[k] + dy[j] * dy[k]; + cossquare = dotproduct * dotproduct / ( edgelength[j] * edgelength[k] ); + tendegree = 8; + for ( ii = 7; ii >= 0; ii-- ) { + if ( cossquare > cossquaretable[ii] ) { + tendegree = ii; + } + } + if ( dotproduct <= 0.0 ) { + angletable[tendegree]++; + if ( cossquare > smallestangle ) { + smallestangle = cossquare; + } + if ( acutebiggest && ( cossquare < biggestangle ) ) { + biggestangle = cossquare; + } + } + else { + angletable[17 - tendegree]++; + if ( acutebiggest || ( cossquare > biggestangle ) ) { + biggestangle = cossquare; + acutebiggest = 0; + } + } + } + triangleloop.tri = triangletraverse(); + } + + shortest = (REAL)sqrt( shortest ); + longest = (REAL)sqrt( longest ); + minaltitude = (REAL)sqrt( minaltitude ); + worstaspect = (REAL)sqrt( worstaspect ); + smallestarea *= 2.0; + biggestarea *= 2.0; + if ( smallestangle >= 1.0 ) { + smallestangle = 0.0; + } + else { + smallestangle = (REAL)( degconst * acos( sqrt( smallestangle ) ) ); + } + if ( biggestangle >= 1.0 ) { + biggestangle = 180.0; + } + else { + if ( acutebiggest ) { + biggestangle = (REAL)( degconst * acos( sqrt( biggestangle ) ) ); + } + else { + biggestangle = (REAL)( 180.0 - degconst * acos( sqrt( biggestangle ) ) ); + } + } + + printf( " Smallest area: %16.5g | Largest area: %16.5g\n", + smallestarea, biggestarea ); + printf( " Shortest edge: %16.5g | Longest edge: %16.5g\n", + shortest, longest ); + printf( " Shortest altitude: %12.5g | Largest aspect ratio: %8.5g\n\n", + minaltitude, worstaspect ); + printf( " Aspect ratio histogram:\n" ); + printf( " 1.1547 - %-6.6g : %8d | %6.6g - %-6.6g : %8d\n", + ratiotable[0], aspecttable[0], ratiotable[7], ratiotable[8], + aspecttable[8] ); + for ( i = 1; i < 7; i++ ) { + printf( " %6.6g - %-6.6g : %8d | %6.6g - %-6.6g : %8d\n", + ratiotable[i - 1], ratiotable[i], aspecttable[i], + ratiotable[i + 7], ratiotable[i + 8], aspecttable[i + 8] ); + } + printf( " %6.6g - %-6.6g : %8d | %6.6g - : %8d\n", + ratiotable[6], ratiotable[7], aspecttable[7], ratiotable[14], + aspecttable[15] ); + printf( + " (Triangle aspect ratio is longest edge divided by shortest altitude)\n\n" ); + printf( " Smallest angle: %15.5g | Largest angle: %15.5g\n\n", + smallestangle, biggestangle ); + printf( " Angle histogram:\n" ); + for ( i = 0; i < 9; i++ ) { + printf( " %3d - %3d degrees: %8d | %3d - %3d degrees: %8d\n", + i * 10, i * 10 + 10, angletable[i], + i * 10 + 90, i * 10 + 100, angletable[i + 9] ); + } + printf( "\n" ); } /*****************************************************************************/ @@ -12813,78 +12972,78 @@ void quality_statistics() /* */ /*****************************************************************************/ -void statistics() -{ - printf("\nStatistics:\n\n"); - printf(" Input points: %d\n", inpoints); - if (refine) { - printf(" Input triangles: %d\n", inelements); - } - if (poly) { - printf(" Input segments: %d\n", insegments); - if (!refine) { - printf(" Input holes: %d\n", holes); - } - } - - printf("\n Mesh points: %ld\n", points.items); - printf(" Mesh triangles: %ld\n", triangles.items); - printf(" Mesh edges: %ld\n", edges); - if (poly || refine) { - printf(" Mesh boundary edges: %ld\n", hullsize); - printf(" Mesh segments: %ld\n\n", shelles.items); - } else { - printf(" Mesh convex hull edges: %ld\n\n", hullsize); - } - if (verbose) { - quality_statistics(); - printf("Memory allocation statistics:\n\n"); - printf(" Maximum number of points: %ld\n", points.maxitems); - printf(" Maximum number of triangles: %ld\n", triangles.maxitems); - if (shelles.maxitems > 0) { - printf(" Maximum number of segments: %ld\n", shelles.maxitems); - } - if (viri.maxitems > 0) { - printf(" Maximum number of viri: %ld\n", viri.maxitems); - } - if (badsegments.maxitems > 0) { - printf(" Maximum number of encroached segments: %ld\n", - badsegments.maxitems); - } - if (badtriangles.maxitems > 0) { - printf(" Maximum number of bad triangles: %ld\n", - badtriangles.maxitems); - } - if (splaynodes.maxitems > 0) { - printf(" Maximum number of splay tree nodes: %ld\n", - splaynodes.maxitems); - } - printf(" Approximate heap memory use (bytes): %ld\n\n", - points.maxitems * points.itembytes - + triangles.maxitems * triangles.itembytes - + shelles.maxitems * shelles.itembytes - + viri.maxitems * viri.itembytes - + badsegments.maxitems * badsegments.itembytes - + badtriangles.maxitems * badtriangles.itembytes - + splaynodes.maxitems * splaynodes.itembytes); - - printf("Algorithmic statistics:\n\n"); - printf(" Number of incircle tests: %ld\n", incirclecount); - printf(" Number of orientation tests: %ld\n", counterclockcount); - if (hyperbolacount > 0) { - printf(" Number of right-of-hyperbola tests: %ld\n", - hyperbolacount); - } - if (circumcentercount > 0) { - printf(" Number of circumcenter computations: %ld\n", - circumcentercount); - } - if (circletopcount > 0) { - printf(" Number of circle top computations: %ld\n", - circletopcount); - } - printf("\n"); - } +void statistics(){ + printf( "\nStatistics:\n\n" ); + printf( " Input points: %d\n", inpoints ); + if ( refine ) { + printf( " Input triangles: %d\n", inelements ); + } + if ( poly ) { + printf( " Input segments: %d\n", insegments ); + if ( !refine ) { + printf( " Input holes: %d\n", holes ); + } + } + + printf( "\n Mesh points: %ld\n", points.items ); + printf( " Mesh triangles: %ld\n", triangles.items ); + printf( " Mesh edges: %ld\n", edges ); + if ( poly || refine ) { + printf( " Mesh boundary edges: %ld\n", hullsize ); + printf( " Mesh segments: %ld\n\n", shelles.items ); + } + else { + printf( " Mesh convex hull edges: %ld\n\n", hullsize ); + } + if ( verbose ) { + quality_statistics(); + printf( "Memory allocation statistics:\n\n" ); + printf( " Maximum number of points: %ld\n", points.maxitems ); + printf( " Maximum number of triangles: %ld\n", triangles.maxitems ); + if ( shelles.maxitems > 0 ) { + printf( " Maximum number of segments: %ld\n", shelles.maxitems ); + } + if ( viri.maxitems > 0 ) { + printf( " Maximum number of viri: %ld\n", viri.maxitems ); + } + if ( badsegments.maxitems > 0 ) { + printf( " Maximum number of encroached segments: %ld\n", + badsegments.maxitems ); + } + if ( badtriangles.maxitems > 0 ) { + printf( " Maximum number of bad triangles: %ld\n", + badtriangles.maxitems ); + } + if ( splaynodes.maxitems > 0 ) { + printf( " Maximum number of splay tree nodes: %ld\n", + splaynodes.maxitems ); + } + printf( " Approximate heap memory use (bytes): %ld\n\n", + points.maxitems * points.itembytes + + triangles.maxitems * triangles.itembytes + + shelles.maxitems * shelles.itembytes + + viri.maxitems * viri.itembytes + + badsegments.maxitems * badsegments.itembytes + + badtriangles.maxitems * badtriangles.itembytes + + splaynodes.maxitems * splaynodes.itembytes ); + + printf( "Algorithmic statistics:\n\n" ); + printf( " Number of incircle tests: %ld\n", incirclecount ); + printf( " Number of orientation tests: %ld\n", counterclockcount ); + if ( hyperbolacount > 0 ) { + printf( " Number of right-of-hyperbola tests: %ld\n", + hyperbolacount ); + } + if ( circumcentercount > 0 ) { + printf( " Number of circumcenter computations: %ld\n", + circumcentercount ); + } + if ( circletopcount > 0 ) { + printf( " Number of circle top computations: %ld\n", + circletopcount ); + } + printf( "\n" ); + } } /*****************************************************************************/ @@ -12914,7 +13073,7 @@ void statistics() #ifdef TRILIBRARY -void triangulate(triswitches, in, out, vorout) +void triangulate( triswitches, in, out, vorout ) char *triswitches; struct triangulateio *in; struct triangulateio *out; @@ -12922,315 +13081,323 @@ struct triangulateio *vorout; #else /* not TRILIBRARY */ -int main(argc, argv) +int main( argc, argv ) int argc; char **argv; #endif /* not TRILIBRARY */ { - REAL *holearray; /* Array of holes. */ - REAL *regionarray; /* Array of regional attributes and area constraints. */ + REAL *holearray; /* Array of holes. */ + REAL *regionarray; /* Array of regional attributes and area constraints. */ #ifndef TRILIBRARY - FILE *polyfile; + FILE *polyfile; #endif /* not TRILIBRARY */ #ifndef NO_TIMER - /* Variables for timing the performance of Triangle. The types are */ - /* defined in sys/time.h. */ - struct timeval tv0, tv1, tv2, tv3, tv4, tv5, tv6; - struct timezone tz; + /* Variables for timing the performance of Triangle. The types are */ + /* defined in sys/time.h. */ + struct timeval tv0, tv1, tv2, tv3, tv4, tv5, tv6; + struct timezone tz; #endif /* NO_TIMER */ #ifndef NO_TIMER - gettimeofday(&tv0, &tz); + gettimeofday( &tv0, &tz ); #endif /* NO_TIMER */ - triangleinit(); + triangleinit(); #ifdef TRILIBRARY - parsecommandline(1, &triswitches); + parsecommandline( 1, &triswitches ); #else /* not TRILIBRARY */ - parsecommandline(argc, argv); + parsecommandline( argc, argv ); #endif /* not TRILIBRARY */ #ifdef TRILIBRARY - transfernodes(in->pointlist, in->pointattributelist, in->pointmarkerlist, - in->numberofpoints, in->numberofpointattributes); + transfernodes( in->pointlist, in->pointattributelist, in->pointmarkerlist, + in->numberofpoints, in->numberofpointattributes ); #else /* not TRILIBRARY */ - readnodes(innodefilename, inpolyfilename, &polyfile); + readnodes( innodefilename, inpolyfilename, &polyfile ); #endif /* not TRILIBRARY */ #ifndef NO_TIMER - if (!quiet) { - gettimeofday(&tv1, &tz); - } + if ( !quiet ) { + gettimeofday( &tv1, &tz ); + } #endif /* NO_TIMER */ #ifdef CDT_ONLY - hullsize = delaunay(); /* Triangulate the points. */ + hullsize = delaunay(); /* Triangulate the points. */ #else /* not CDT_ONLY */ - if (refine) { - /* Read and reconstruct a mesh. */ + if ( refine ) { + /* Read and reconstruct a mesh. */ #ifdef TRILIBRARY - hullsize = reconstruct(in->trianglelist, in->triangleattributelist, - in->trianglearealist, in->numberoftriangles, - in->numberofcorners, in->numberoftriangleattributes, - in->segmentlist, in->segmentmarkerlist, - in->numberofsegments); + hullsize = reconstruct( in->trianglelist, in->triangleattributelist, + in->trianglearealist, in->numberoftriangles, + in->numberofcorners, in->numberoftriangleattributes, + in->segmentlist, in->segmentmarkerlist, + in->numberofsegments ); #else /* not TRILIBRARY */ - hullsize = reconstruct(inelefilename, areafilename, inpolyfilename, - polyfile); + hullsize = reconstruct( inelefilename, areafilename, inpolyfilename, + polyfile ); #endif /* not TRILIBRARY */ - } else { - hullsize = delaunay(); /* Triangulate the points. */ - } + } + else { + hullsize = delaunay(); /* Triangulate the points. */ + } #endif /* not CDT_ONLY */ #ifndef NO_TIMER - if (!quiet) { - gettimeofday(&tv2, &tz); - if (refine) { - printf("Mesh reconstruction"); - } else { - printf("Delaunay"); - } - printf(" milliseconds: %ld\n", 1000l * (tv2.tv_sec - tv1.tv_sec) - + (tv2.tv_usec - tv1.tv_usec) / 1000l); - } + if ( !quiet ) { + gettimeofday( &tv2, &tz ); + if ( refine ) { + printf( "Mesh reconstruction" ); + } + else { + printf( "Delaunay" ); + } + printf( " milliseconds: %ld\n", 1000l * ( tv2.tv_sec - tv1.tv_sec ) + + ( tv2.tv_usec - tv1.tv_usec ) / 1000l ); + } #endif /* NO_TIMER */ - /* Ensure that no point can be mistaken for a triangular bounding */ - /* box point in insertsite(). */ - infpoint1 = (point) NULL; - infpoint2 = (point) NULL; - infpoint3 = (point) NULL; + /* Ensure that no point can be mistaken for a triangular bounding */ + /* box point in insertsite(). */ + infpoint1 = (point) NULL; + infpoint2 = (point) NULL; + infpoint3 = (point) NULL; - if (useshelles) { - checksegments = 1; /* Segments will be introduced next. */ - if (!refine) { - /* Insert PSLG segments and/or convex hull segments. */ + if ( useshelles ) { + checksegments = 1; /* Segments will be introduced next. */ + if ( !refine ) { + /* Insert PSLG segments and/or convex hull segments. */ #ifdef TRILIBRARY - insegments = formskeleton(in->segmentlist, in->segmentmarkerlist, - in->numberofsegments); + insegments = formskeleton( in->segmentlist, in->segmentmarkerlist, + in->numberofsegments ); #else /* not TRILIBRARY */ - insegments = formskeleton(polyfile, inpolyfilename); + insegments = formskeleton( polyfile, inpolyfilename ); #endif /* not TRILIBRARY */ - } - } + } + } #ifndef NO_TIMER - if (!quiet) { - gettimeofday(&tv3, &tz); - if (useshelles && !refine) { - printf("Segment milliseconds: %ld\n", - 1000l * (tv3.tv_sec - tv2.tv_sec) - + (tv3.tv_usec - tv2.tv_usec) / 1000l); - } - } + if ( !quiet ) { + gettimeofday( &tv3, &tz ); + if ( useshelles && !refine ) { + printf( "Segment milliseconds: %ld\n", + 1000l * ( tv3.tv_sec - tv2.tv_sec ) + + ( tv3.tv_usec - tv2.tv_usec ) / 1000l ); + } + } #endif /* NO_TIMER */ - if (poly) { + if ( poly ) { #ifdef TRILIBRARY - holearray = in->holelist; - holes = in->numberofholes; - regionarray = in->regionlist; - regions = in->numberofregions; + holearray = in->holelist; + holes = in->numberofholes; + regionarray = in->regionlist; + regions = in->numberofregions; #else /* not TRILIBRARY */ - readholes(polyfile, inpolyfilename, &holearray, &holes, - ®ionarray, ®ions); + readholes( polyfile, inpolyfilename, &holearray, &holes, + ®ionarray, ®ions ); #endif /* not TRILIBRARY */ - if (!refine) { - /* Carve out holes and concavities. */ - carveholes(holearray, holes, regionarray, regions); - } - } else { - /* Without a PSLG, there can be no holes or regional attributes */ - /* or area constraints. The following are set to zero to avoid */ - /* an accidental free() later. */ - holes = 0; - regions = 0; - } + if ( !refine ) { + /* Carve out holes and concavities. */ + carveholes( holearray, holes, regionarray, regions ); + } + } + else { + /* Without a PSLG, there can be no holes or regional attributes */ + /* or area constraints. The following are set to zero to avoid */ + /* an accidental free() later. */ + holes = 0; + regions = 0; + } #ifndef NO_TIMER - if (!quiet) { - gettimeofday(&tv4, &tz); - if (poly && !refine) { - printf("Hole milliseconds: %ld\n", 1000l * (tv4.tv_sec - tv3.tv_sec) - + (tv4.tv_usec - tv3.tv_usec) / 1000l); - } - } + if ( !quiet ) { + gettimeofday( &tv4, &tz ); + if ( poly && !refine ) { + printf( "Hole milliseconds: %ld\n", 1000l * ( tv4.tv_sec - tv3.tv_sec ) + + ( tv4.tv_usec - tv3.tv_usec ) / 1000l ); + } + } #endif /* NO_TIMER */ #ifndef CDT_ONLY - if (quality) { - enforcequality(); /* Enforce angle and area constraints. */ - } + if ( quality ) { + enforcequality(); /* Enforce angle and area constraints. */ + } #endif /* not CDT_ONLY */ #ifndef NO_TIMER - if (!quiet) { - gettimeofday(&tv5, &tz); + if ( !quiet ) { + gettimeofday( &tv5, &tz ); #ifndef CDT_ONLY - if (quality) { - printf("Quality milliseconds: %ld\n", - 1000l * (tv5.tv_sec - tv4.tv_sec) - + (tv5.tv_usec - tv4.tv_usec) / 1000l); - } + if ( quality ) { + printf( "Quality milliseconds: %ld\n", + 1000l * ( tv5.tv_sec - tv4.tv_sec ) + + ( tv5.tv_usec - tv4.tv_usec ) / 1000l ); + } #endif /* not CDT_ONLY */ - } + } #endif /* NO_TIMER */ - /* Compute the number of edges. */ - edges = (3l * triangles.items + hullsize) / 2l; + /* Compute the number of edges. */ + edges = ( 3l * triangles.items + hullsize ) / 2l; - if (order > 1) { - highorder(); /* Promote elements to higher polynomial order. */ - } - if (!quiet) { - printf("\n"); - } + if ( order > 1 ) { + highorder(); /* Promote elements to higher polynomial order. */ + } + if ( !quiet ) { + printf( "\n" ); + } #ifdef TRILIBRARY - out->numberofpoints = points.items; - out->numberofpointattributes = nextras; - out->numberoftriangles = triangles.items; - out->numberofcorners = (order + 1) * (order + 2) / 2; - out->numberoftriangleattributes = eextras; - out->numberofedges = edges; - if (useshelles) { - out->numberofsegments = shelles.items; - } else { - out->numberofsegments = hullsize; - } - if (vorout != (struct triangulateio *) NULL) { - vorout->numberofpoints = triangles.items; - vorout->numberofpointattributes = nextras; - vorout->numberofedges = edges; - } + out->numberofpoints = points.items; + out->numberofpointattributes = nextras; + out->numberoftriangles = triangles.items; + out->numberofcorners = ( order + 1 ) * ( order + 2 ) / 2; + out->numberoftriangleattributes = eextras; + out->numberofedges = edges; + if ( useshelles ) { + out->numberofsegments = shelles.items; + } + else { + out->numberofsegments = hullsize; + } + if ( vorout != (struct triangulateio *) NULL ) { + vorout->numberofpoints = triangles.items; + vorout->numberofpointattributes = nextras; + vorout->numberofedges = edges; + } #endif /* TRILIBRARY */ - /* If not using iteration numbers, don't write a .node file if one was */ - /* read, because the original one would be overwritten! */ - if (nonodewritten || (noiterationnum && readnodefile)) { - if (!quiet) { + /* If not using iteration numbers, don't write a .node file if one was */ + /* read, because the original one would be overwritten! */ + if ( nonodewritten || ( noiterationnum && readnodefile ) ) { + if ( !quiet ) { #ifdef TRILIBRARY - printf("NOT writing points.\n"); + printf( "NOT writing points.\n" ); #else /* not TRILIBRARY */ - printf("NOT writing a .node file.\n"); + printf( "NOT writing a .node file.\n" ); #endif /* not TRILIBRARY */ - } - numbernodes(); /* We must remember to number the points. */ - } else { + } + numbernodes(); /* We must remember to number the points. */ + } + else { #ifdef TRILIBRARY - writenodes(&out->pointlist, &out->pointattributelist, - &out->pointmarkerlist); + writenodes( &out->pointlist, &out->pointattributelist, + &out->pointmarkerlist ); #else /* not TRILIBRARY */ - writenodes(outnodefilename, argc, argv); /* Numbers the points too. */ + writenodes( outnodefilename, argc, argv ); /* Numbers the points too. */ #endif /* TRILIBRARY */ - } - if (noelewritten) { - if (!quiet) { + } + if ( noelewritten ) { + if ( !quiet ) { #ifdef TRILIBRARY - printf("NOT writing triangles.\n"); + printf( "NOT writing triangles.\n" ); #else /* not TRILIBRARY */ - printf("NOT writing an .ele file.\n"); + printf( "NOT writing an .ele file.\n" ); #endif /* not TRILIBRARY */ - } - } else { + } + } + else { #ifdef TRILIBRARY - writeelements(&out->trianglelist, &out->triangleattributelist); + writeelements( &out->trianglelist, &out->triangleattributelist ); #else /* not TRILIBRARY */ - writeelements(outelefilename, argc, argv); + writeelements( outelefilename, argc, argv ); #endif /* not TRILIBRARY */ - } - /* The -c switch (convex switch) causes a PSLG to be written */ - /* even if none was read. */ - if (poly || convex) { - /* If not using iteration numbers, don't overwrite the .poly file. */ - if (nopolywritten || noiterationnum) { - if (!quiet) { + } + /* The -c switch (convex switch) causes a PSLG to be written */ + /* even if none was read. */ + if ( poly || convex ) { + /* If not using iteration numbers, don't overwrite the .poly file. */ + if ( nopolywritten || noiterationnum ) { + if ( !quiet ) { #ifdef TRILIBRARY - printf("NOT writing segments.\n"); + printf( "NOT writing segments.\n" ); #else /* not TRILIBRARY */ - printf("NOT writing a .poly file.\n"); + printf( "NOT writing a .poly file.\n" ); #endif /* not TRILIBRARY */ - } - } else { + } + } + else { #ifdef TRILIBRARY - writepoly(&out->segmentlist, &out->segmentmarkerlist); - out->numberofholes = holes; - out->numberofregions = regions; - if (poly) { - out->holelist = in->holelist; - out->regionlist = in->regionlist; - } else { - out->holelist = (REAL *) NULL; - out->regionlist = (REAL *) NULL; - } + writepoly( &out->segmentlist, &out->segmentmarkerlist ); + out->numberofholes = holes; + out->numberofregions = regions; + if ( poly ) { + out->holelist = in->holelist; + out->regionlist = in->regionlist; + } + else { + out->holelist = (REAL *) NULL; + out->regionlist = (REAL *) NULL; + } #else /* not TRILIBRARY */ - writepoly(outpolyfilename, holearray, holes, regionarray, regions, - argc, argv); + writepoly( outpolyfilename, holearray, holes, regionarray, regions, + argc, argv ); #endif /* not TRILIBRARY */ - } - } + } + } #ifndef TRILIBRARY #ifndef CDT_ONLY - if (regions > 0) { - free(regionarray); - } + if ( regions > 0 ) { + free( regionarray ); + } #endif /* not CDT_ONLY */ - if (holes > 0) { - free(holearray); - } - if (geomview) { - writeoff(offfilename, argc, argv); - } + if ( holes > 0 ) { + free( holearray ); + } + if ( geomview ) { + writeoff( offfilename, argc, argv ); + } #endif /* not TRILIBRARY */ - if (edgesout) { + if ( edgesout ) { #ifdef TRILIBRARY - writeedges(&out->edgelist, &out->edgemarkerlist); + writeedges( &out->edgelist, &out->edgemarkerlist ); #else /* not TRILIBRARY */ - writeedges(edgefilename, argc, argv); + writeedges( edgefilename, argc, argv ); #endif /* not TRILIBRARY */ - } - if (voronoi) { + } + if ( voronoi ) { #ifdef TRILIBRARY - writevoronoi(&vorout->pointlist, &vorout->pointattributelist, - &vorout->pointmarkerlist, &vorout->edgelist, - &vorout->edgemarkerlist, &vorout->normlist); + writevoronoi( &vorout->pointlist, &vorout->pointattributelist, + &vorout->pointmarkerlist, &vorout->edgelist, + &vorout->edgemarkerlist, &vorout->normlist ); #else /* not TRILIBRARY */ - writevoronoi(vnodefilename, vedgefilename, argc, argv); + writevoronoi( vnodefilename, vedgefilename, argc, argv ); #endif /* not TRILIBRARY */ - } - if (neighbors) { + } + if ( neighbors ) { #ifdef TRILIBRARY - writeneighbors(&out->neighborlist); + writeneighbors( &out->neighborlist ); #else /* not TRILIBRARY */ - writeneighbors(neighborfilename, argc, argv); + writeneighbors( neighborfilename, argc, argv ); #endif /* not TRILIBRARY */ - } + } - if (!quiet) { + if ( !quiet ) { #ifndef NO_TIMER - gettimeofday(&tv6, &tz); - printf("\nOutput milliseconds: %ld\n", - 1000l * (tv6.tv_sec - tv5.tv_sec) - + (tv6.tv_usec - tv5.tv_usec) / 1000l); - printf("Total running milliseconds: %ld\n", - 1000l * (tv6.tv_sec - tv0.tv_sec) - + (tv6.tv_usec - tv0.tv_usec) / 1000l); + gettimeofday( &tv6, &tz ); + printf( "\nOutput milliseconds: %ld\n", + 1000l * ( tv6.tv_sec - tv5.tv_sec ) + + ( tv6.tv_usec - tv5.tv_usec ) / 1000l ); + printf( "Total running milliseconds: %ld\n", + 1000l * ( tv6.tv_sec - tv0.tv_sec ) + + ( tv6.tv_usec - tv0.tv_usec ) / 1000l ); #endif /* NO_TIMER */ - statistics(); - } + statistics(); + } #ifndef REDUCED - if (docheck) { - checkmesh(); - checkdelaunay(); - } + if ( docheck ) { + checkmesh(); + checkdelaunay(); + } #endif /* not REDUCED */ - triangledeinit(); + triangledeinit(); #ifndef TRILIBRARY - return 0; + return 0; #endif /* not TRILIBRARY */ } diff --git a/contrib/gtkgensurf/triangle.h b/contrib/gtkgensurf/triangle.h index e7d87d01..337da40c 100644 --- a/contrib/gtkgensurf/triangle.h +++ b/contrib/gtkgensurf/triangle.h @@ -250,38 +250,38 @@ extern "C" { #endif struct triangulateio { - REAL *pointlist; /* In / out */ - REAL *pointattributelist; /* In / out */ - int *pointmarkerlist; /* In / out */ - int numberofpoints; /* In / out */ - int numberofpointattributes; /* In / out */ + REAL *pointlist; /* In / out */ + REAL *pointattributelist; /* In / out */ + int *pointmarkerlist; /* In / out */ + int numberofpoints; /* In / out */ + int numberofpointattributes; /* In / out */ - int *trianglelist; /* In / out */ - REAL *triangleattributelist; /* In / out */ - REAL *trianglearealist; /* In only */ - int *neighborlist; /* Out only */ - int numberoftriangles; /* In / out */ - int numberofcorners; /* In / out */ - int numberoftriangleattributes; /* In / out */ + int *trianglelist; /* In / out */ + REAL *triangleattributelist; /* In / out */ + REAL *trianglearealist; /* In only */ + int *neighborlist; /* Out only */ + int numberoftriangles; /* In / out */ + int numberofcorners; /* In / out */ + int numberoftriangleattributes; /* In / out */ - int *segmentlist; /* In / out */ - int *segmentmarkerlist; /* In / out */ - int numberofsegments; /* In / out */ + int *segmentlist; /* In / out */ + int *segmentmarkerlist; /* In / out */ + int numberofsegments; /* In / out */ - REAL *holelist; /* In / pointer to array copied out */ - int numberofholes; /* In / copied out */ + REAL *holelist; /* In / pointer to array copied out */ + int numberofholes; /* In / copied out */ - REAL *regionlist; /* In / pointer to array copied out */ - int numberofregions; /* In / copied out */ + REAL *regionlist; /* In / pointer to array copied out */ + int numberofregions; /* In / copied out */ - int *edgelist; /* Out only */ - int *edgemarkerlist; /* Not used with Voronoi diagram; out only */ - REAL *normlist; /* Used only with Voronoi diagram; out only */ - int numberofedges; /* Out only */ + int *edgelist; /* Out only */ + int *edgemarkerlist; /* Not used with Voronoi diagram; out only */ + REAL *normlist; /* Used only with Voronoi diagram; out only */ + int numberofedges; /* Out only */ }; -void triangulate(char *, struct triangulateio *, struct triangulateio *, - struct triangulateio *); +void triangulate( char *, struct triangulateio *, struct triangulateio *, + struct triangulateio * ); #ifdef __cplusplus } diff --git a/contrib/gtkgensurf/view.cpp b/contrib/gtkgensurf/view.cpp index 9344a69e..06b175ad 100644 --- a/contrib/gtkgensurf/view.cpp +++ b/contrib/gtkgensurf/view.cpp @@ -1,21 +1,21 @@ /* -GenSurf plugin for GtkRadiant -Copyright (C) 2001 David Hyde, Loki software and qeradiant.com + GenSurf plugin for GtkRadiant + Copyright (C) 2001 David Hyde, Loki software and qeradiant.com -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 #include @@ -28,13 +28,13 @@ extern double backface; extern double dh, dv; extern double xmin,xmax,ymin,ymax,zmin,zmax; -double SF, SFG; // Graphics scale factors -double XLo, XHi, YLo, YHi, ZLo, ZHi; -double yaw,roll; -double elevation,azimuth; -int cxChar = 10, cyChar = 16; -int X0, Y0; -int X0G, Y0G; +double SF, SFG; // Graphics scale factors +double XLo, XHi, YLo, YHi, ZLo, ZHi; +double yaw,roll; +double elevation,azimuth; +int cxChar = 10, cyChar = 16; +int X0, Y0; +int X0G, Y0G; static RECT rcCoord; // where X= Y= is drawn static RECT rcGrid; // rectangle within rcLower that forms the border of the grid, plus @@ -42,1138 +42,1121 @@ static RECT rcGrid; // rectangle within rcLower that forms the border of the static RECT rcLower; // lower half of window, where plan view is drawn static RECT rcUpper; // upper half or entire window, where isometric projection is drawn -void vertex_selected (); -void texfont_init (); -void texfont_write (const char *text, float l, float t); +void vertex_selected(); +void texfont_init(); +void texfont_write( const char *text, float l, float t ); #define PEN_GRID { \ - g_GLTable.m_pfn_qglLineWidth (1); \ - g_GLTable.m_pfn_qglColor3f (0, 1, 0); \ - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); } + g_GLTable.m_pfn_qglLineWidth( 1 ); \ + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); \ + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); } #define PEN_RED { \ - g_GLTable.m_pfn_qglLineWidth (2); \ - g_GLTable.m_pfn_qglColor3f (1, 0, 0); \ - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); } + g_GLTable.m_pfn_qglLineWidth( 2 ); \ + g_GLTable.m_pfn_qglColor3f( 1, 0, 0 ); \ + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); } #define PEN_DASH { \ - g_GLTable.m_pfn_qglLineWidth (1); \ - g_GLTable.m_pfn_qglColor3f (0, 1, 0); \ - g_GLTable.m_pfn_qglLineStipple (1, 0xF0F0); \ - g_GLTable.m_pfn_qglEnable (GL_LINE_STIPPLE); } - -#define DRAW_QUAD(rc,r,g,b) { \ - g_GLTable.m_pfn_qglBegin (GL_QUADS); \ - g_GLTable.m_pfn_qglColor3f (0,1,0); \ - g_GLTable.m_pfn_qglVertex2f (rc.left-1, rc.bottom); \ - g_GLTable.m_pfn_qglVertex2f (rc.right, rc.bottom); \ - g_GLTable.m_pfn_qglVertex2f (rc.right, rc.top+1); \ - g_GLTable.m_pfn_qglVertex2f (rc.left-1, rc.top+1); \ - g_GLTable.m_pfn_qglColor3f (r,g,b); \ - g_GLTable.m_pfn_qglVertex2f (rc.left, rc.bottom+1); \ - g_GLTable.m_pfn_qglVertex2f (rc.right-1, rc.bottom+1); \ - g_GLTable.m_pfn_qglVertex2f (rc.right-1, rc.top); \ - g_GLTable.m_pfn_qglVertex2f (rc.left, rc.top); \ - g_GLTable.m_pfn_qglEnd (); } + g_GLTable.m_pfn_qglLineWidth( 1 ); \ + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); \ + g_GLTable.m_pfn_qglLineStipple( 1, 0xF0F0 ); \ + g_GLTable.m_pfn_qglEnable( GL_LINE_STIPPLE ); } + +#define DRAW_QUAD( rc,r,g,b ) { \ + g_GLTable.m_pfn_qglBegin( GL_QUADS ); \ + g_GLTable.m_pfn_qglColor3f( 0,1,0 ); \ + g_GLTable.m_pfn_qglVertex2f( rc.left - 1, rc.bottom ); \ + g_GLTable.m_pfn_qglVertex2f( rc.right, rc.bottom ); \ + g_GLTable.m_pfn_qglVertex2f( rc.right, rc.top + 1 ); \ + g_GLTable.m_pfn_qglVertex2f( rc.left - 1, rc.top + 1 ); \ + g_GLTable.m_pfn_qglColor3f( r,g,b ); \ + g_GLTable.m_pfn_qglVertex2f( rc.left, rc.bottom + 1 ); \ + g_GLTable.m_pfn_qglVertex2f( rc.right - 1, rc.bottom + 1 ); \ + g_GLTable.m_pfn_qglVertex2f( rc.right - 1, rc.top ); \ + g_GLTable.m_pfn_qglVertex2f( rc.left, rc.top ); \ + g_GLTable.m_pfn_qglEnd(); } #ifndef ISOMETRIC -double D=65536.; -double ct[3],st[3]; -double Hhi, Hlo, Vhi, Vlo; +double D = 65536.; +double ct[3],st[3]; +double Hhi, Hlo, Vhi, Vlo; #endif #define SUBDIVS 6 -void ShowPreview () -{ - if (Preview) - { - if (g_pWndPreview == NULL) - CreateViewWindow (); - gtk_widget_show (g_pWndPreview); +void ShowPreview(){ + if ( Preview ) { + if ( g_pWndPreview == NULL ) { + CreateViewWindow(); + } + gtk_widget_show( g_pWndPreview ); - UpdatePreview (true); - } - else - gtk_widget_hide (g_pWndPreview); + UpdatePreview( true ); + } + else{ + gtk_widget_hide( g_pWndPreview ); + } } -static void draw_preview () -{ - int width = g_pPreviewWidget->allocation.width, height = g_pPreviewWidget->allocation.height; - - g_GLTable.m_pfn_qglClearColor (0, 0, 0, 1); - g_GLTable.m_pfn_qglViewport (0, 0, width, height); - g_GLTable.m_pfn_qglMatrixMode (GL_PROJECTION); - g_GLTable.m_pfn_qglLoadIdentity (); - g_GLTable.m_pfn_qglOrtho (0, width, 0, height, -1, 1); - g_GLTable.m_pfn_qglClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - +static void draw_preview(){ + int width = g_pPreviewWidget->allocation.width, height = g_pPreviewWidget->allocation.height; + + g_GLTable.m_pfn_qglClearColor( 0, 0, 0, 1 ); + g_GLTable.m_pfn_qglViewport( 0, 0, width, height ); + g_GLTable.m_pfn_qglMatrixMode( GL_PROJECTION ); + g_GLTable.m_pfn_qglLoadIdentity(); + g_GLTable.m_pfn_qglOrtho( 0, width, 0, height, -1, 1 ); + g_GLTable.m_pfn_qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + // ^Fishman - Antializing for the preview window. - if (Antialiasing) - { - g_GLTable.m_pfn_qglEnable(GL_BLEND); - g_GLTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_GLTable.m_pfn_qglEnable(GL_LINE_SMOOTH); + if ( Antialiasing ) { + g_GLTable.m_pfn_qglEnable( GL_BLEND ); + g_GLTable.m_pfn_qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + g_GLTable.m_pfn_qglEnable( GL_LINE_SMOOTH ); } else { - g_GLTable.m_pfn_qglDisable(GL_BLEND); - g_GLTable.m_pfn_qglDisable(GL_LINE_SMOOTH); + g_GLTable.m_pfn_qglDisable( GL_BLEND ); + g_GLTable.m_pfn_qglDisable( GL_LINE_SMOOTH ); } - texfont_init (); - - if (!ValidSurface ()) - return; - - rcUpper.left = 0; - rcUpper.right = width; - rcUpper.bottom = 0; - rcUpper.top = height; - rcLower.left = 0; - rcLower.right = width; - rcLower.bottom = 0; - rcLower.top = height; - - if (VertexMode) - { - rcUpper.bottom = rcUpper.top/2; - DrawPreview (rcUpper); - g_GLTable.m_pfn_qglBegin (GL_LINES); - g_GLTable.m_pfn_qglVertex2f (rcUpper.left, rcUpper.bottom); - g_GLTable.m_pfn_qglVertex2f (rcUpper.right, rcUpper.bottom); - g_GLTable.m_pfn_qglEnd (); - rcLower.top = rcUpper.bottom-1; - DrawGrid (rcLower); - rcCoord.left = rcLower.left; - rcCoord.right = rcLower.right; - rcCoord.bottom = rcLower.bottom; - rcCoord.top = rcLower.top; - rcCoord.top = rcCoord.bottom+cyChar; - rcCoord.right = rcCoord.left + 15*cxChar; - rcGrid.left = X0G - 3; - rcGrid.bottom = Y0G - 3; - rcGrid.right = X0G + (int)(SFG*(Hur-Hll)) + 3; - rcGrid.top = Y0G + (int)(SFG*(Vur-Vll)) + 3; - } - else - DrawPreview (rcUpper); + texfont_init(); + + if ( !ValidSurface() ) { + return; + } + + rcUpper.left = 0; + rcUpper.right = width; + rcUpper.bottom = 0; + rcUpper.top = height; + rcLower.left = 0; + rcLower.right = width; + rcLower.bottom = 0; + rcLower.top = height; + + if ( VertexMode ) { + rcUpper.bottom = rcUpper.top / 2; + DrawPreview( rcUpper ); + g_GLTable.m_pfn_qglBegin( GL_LINES ); + g_GLTable.m_pfn_qglVertex2f( rcUpper.left, rcUpper.bottom ); + g_GLTable.m_pfn_qglVertex2f( rcUpper.right, rcUpper.bottom ); + g_GLTable.m_pfn_qglEnd(); + rcLower.top = rcUpper.bottom - 1; + DrawGrid( rcLower ); + rcCoord.left = rcLower.left; + rcCoord.right = rcLower.right; + rcCoord.bottom = rcLower.bottom; + rcCoord.top = rcLower.top; + rcCoord.top = rcCoord.bottom + cyChar; + rcCoord.right = rcCoord.left + 15 * cxChar; + rcGrid.left = X0G - 3; + rcGrid.bottom = Y0G - 3; + rcGrid.right = X0G + (int)( SFG * ( Hur - Hll ) ) + 3; + rcGrid.top = Y0G + (int)( SFG * ( Vur - Vll ) ) + 3; + } + else{ + DrawPreview( rcUpper ); + } } -static gint expose (GtkWidget *widget, GdkEventExpose *event, gpointer data) -{ - if (event->count > 0) - return TRUE; +static gint expose( GtkWidget *widget, GdkEventExpose *event, gpointer data ){ + if ( event->count > 0 ) { + return TRUE; + } - if (!g_UIGtkTable.m_pfn_glwidget_make_current (g_pPreviewWidget)) - { - g_FuncTable.m_pfnSysPrintf ("GtkGenSurf: glMakeCurrent failed\n"); - return TRUE; - } + if ( !g_UIGtkTable.m_pfn_glwidget_make_current( g_pPreviewWidget ) ) { + g_FuncTable.m_pfnSysPrintf( "GtkGenSurf: glMakeCurrent failed\n" ); + return TRUE; + } - draw_preview (); + draw_preview(); - g_UIGtkTable.m_pfn_glwidget_swap_buffers (g_pPreviewWidget); - g_GLTable.m_pfn_QE_CheckOpenGLForErrors (); + g_UIGtkTable.m_pfn_glwidget_swap_buffers( g_pPreviewWidget ); + g_GLTable.m_pfn_QE_CheckOpenGLForErrors(); - return TRUE; + return TRUE; } -static void button_press (GtkWidget *widget, GdkEventButton *event, gpointer data) -{ - POINT pt = { (long)event->x, widget->allocation.height - (long)event->y }; - bool Selected; - double x,y; - int i, j, k, ks; - int i0, i1, j0, j1; - - if ((!VertexMode) || (event->button != 1)) - return; - - if (!PtInRect (&rcGrid,pt)) - { - gdk_beep (); - return; - } - - x = Hll + (pt.x-X0G)/SFG; - y = Vur - (pt.y-Y0G)/SFG; - i = (int)(floor( (x-Hll)/dh - 0.5) + 1); - j = (int)(floor( (y-Vll)/dv - 0.5) + 1); - if (i < 0 || i > NH || j < 0 || j > NV) - { - gdk_beep (); - return; - } - - if(!CanEdit(i,j)) - { - gdk_beep (); - return; - } - - // Control key pressed - add this point, or remove it if already selected - if ((event->state & GDK_CONTROL_MASK) != 0) - { - Selected = FALSE; - if (NumVerticesSelected) - { - for (k=0; kstate & GDK_SHIFT_MASK) != 0) - { - if (NumVerticesSelected) - { - NumVerticesSelected = 1; - i0 = min(Vertex[0].i, i); - i1 = max(Vertex[0].i, i); - j0 = min(Vertex[0].j, j); - j1 = max(Vertex[0].j, j); - for(i=i0; i<=i1; i++) - { - for(j=j0; j<=j1; j++) - { - if(i==0 && j==0 ) continue; - if(i==NH && j==0 ) continue; - if(i==0 && j==NV) continue; - if(i==NH && j==NV) continue; - if(i != Vertex[0].i || j != Vertex[0].j) - { - Vertex[NumVerticesSelected].i = i; - Vertex[NumVerticesSelected].j = j; - NumVerticesSelected++; - } - } - } - } - else - { - Vertex[0].i = i; - Vertex[0].j = j; - NumVerticesSelected = 1; - } - } - else - { - Vertex[0].i = i; - Vertex[0].j = j; - NumVerticesSelected = 1; - } - - vertex_selected (); +static void button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){ + POINT pt = { (long)event->x, widget->allocation.height - (long)event->y }; + bool Selected; + double x,y; + int i, j, k, ks; + int i0, i1, j0, j1; + + if ( ( !VertexMode ) || ( event->button != 1 ) ) { + return; + } + + if ( !PtInRect( &rcGrid,pt ) ) { + gdk_beep(); + return; + } + + x = Hll + ( pt.x - X0G ) / SFG; + y = Vur - ( pt.y - Y0G ) / SFG; + i = (int)( floor( ( x - Hll ) / dh - 0.5 ) + 1 ); + j = (int)( floor( ( y - Vll ) / dv - 0.5 ) + 1 ); + if ( i < 0 || i > NH || j < 0 || j > NV ) { + gdk_beep(); + return; + } + + if ( !CanEdit( i,j ) ) { + gdk_beep(); + return; + } + + // Control key pressed - add this point, or remove it if already selected + if ( ( event->state & GDK_CONTROL_MASK ) != 0 ) { + Selected = FALSE; + if ( NumVerticesSelected ) { + for ( k = 0; k < NumVerticesSelected && !Selected; k++ ) + { + if ( Vertex[k].i == i && Vertex[k].j == j ) { + Selected = TRUE; + ks = k; + } + } + } + + // Already selected - unselect it. + if ( Selected ) { + if ( ks < NumVerticesSelected ) { + for ( k = ks; k < NumVerticesSelected - 1; k++ ) + { + Vertex[k].i = Vertex[k + 1].i; + Vertex[k].j = Vertex[k + 1].j; + } + NumVerticesSelected--; + } + } + else + { + Vertex[NumVerticesSelected].i = i; + Vertex[NumVerticesSelected].j = j; + NumVerticesSelected++; + } + } + else if ( ( event->state & GDK_SHIFT_MASK ) != 0 ) { + if ( NumVerticesSelected ) { + NumVerticesSelected = 1; + i0 = min( Vertex[0].i, i ); + i1 = max( Vertex[0].i, i ); + j0 = min( Vertex[0].j, j ); + j1 = max( Vertex[0].j, j ); + for ( i = i0; i <= i1; i++ ) + { + for ( j = j0; j <= j1; j++ ) + { + if ( i == 0 && j == 0 ) { + continue; + } + if ( i == NH && j == 0 ) { + continue; + } + if ( i == 0 && j == NV ) { + continue; + } + if ( i == NH && j == NV ) { + continue; + } + if ( i != Vertex[0].i || j != Vertex[0].j ) { + Vertex[NumVerticesSelected].i = i; + Vertex[NumVerticesSelected].j = j; + NumVerticesSelected++; + } + } + } + } + else + { + Vertex[0].i = i; + Vertex[0].j = j; + NumVerticesSelected = 1; + } + } + else + { + Vertex[0].i = i; + Vertex[0].j = j; + NumVerticesSelected = 1; + } + + vertex_selected(); } -static void motion (GtkWidget *widget, GdkEventMotion *event, gpointer data) -{ - POINT pt = { (long)event->x, widget->allocation.height - (long)event->y }; - - if (!VertexMode) - return; - - if (!g_UIGtkTable.m_pfn_glwidget_make_current (g_pPreviewWidget)) - { - g_FuncTable.m_pfnSysPrintf ("GtkGenSurf: glMakeCurrent failed\n"); - return; - } - - g_GLTable.m_pfn_qglEnable (GL_SCISSOR_TEST); - g_GLTable.m_pfn_qglScissor (rcCoord.left, rcCoord.bottom, rcCoord.right-rcCoord.left, - rcCoord.top-rcCoord.bottom); - g_GLTable.m_pfn_qglClear (GL_COLOR_BUFFER_BIT); - - if (PtInRect(&rcGrid,pt)) - { - GdkCursor *cursor = gdk_cursor_new (GDK_CROSS); - gdk_window_set_cursor (g_pWndPreview->window, cursor); - gdk_cursor_unref (cursor); - - char Text[32]; - int x, y; - - x = (int)(Hll + (pt.x-X0G)/SFG); - y = (int)(Vur - (pt.y-Y0G)/SFG); - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - sprintf(Text," x=%d, z=%d ",(int)(floor(x-0.5)+1.) ,(int)(floor(y-0.5)+1.) ); - break; - case PLANE_YZ0: - case PLANE_YZ1: - sprintf(Text," y=%d, z=%d ",(int)(floor(x-0.5)+1.) ,(int)(floor(y-0.5)+1.) ); - break; - default: - sprintf(Text," x=%d, y=%d ",(int)(floor(x-0.5)+1.) ,(int)(floor(y-0.5)+1.) ); - } - - texfont_write (Text, rcCoord.left, rcCoord.top); - } - else - { - gdk_window_set_cursor (g_pWndPreview->window, NULL); - } - - g_UIGtkTable.m_pfn_glwidget_swap_buffers (g_pPreviewWidget); - g_GLTable.m_pfn_QE_CheckOpenGLForErrors (); - g_GLTable.m_pfn_qglDisable (GL_SCISSOR_TEST); +static void motion( GtkWidget *widget, GdkEventMotion *event, gpointer data ){ + POINT pt = { (long)event->x, widget->allocation.height - (long)event->y }; + + if ( !VertexMode ) { + return; + } + + if ( !g_UIGtkTable.m_pfn_glwidget_make_current( g_pPreviewWidget ) ) { + g_FuncTable.m_pfnSysPrintf( "GtkGenSurf: glMakeCurrent failed\n" ); + return; + } + + g_GLTable.m_pfn_qglEnable( GL_SCISSOR_TEST ); + g_GLTable.m_pfn_qglScissor( rcCoord.left, rcCoord.bottom, rcCoord.right - rcCoord.left, + rcCoord.top - rcCoord.bottom ); + g_GLTable.m_pfn_qglClear( GL_COLOR_BUFFER_BIT ); + + if ( PtInRect( &rcGrid,pt ) ) { + GdkCursor *cursor = gdk_cursor_new( GDK_CROSS ); + gdk_window_set_cursor( g_pWndPreview->window, cursor ); + gdk_cursor_unref( cursor ); + + char Text[32]; + int x, y; + + x = (int)( Hll + ( pt.x - X0G ) / SFG ); + y = (int)( Vur - ( pt.y - Y0G ) / SFG ); + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + sprintf( Text," x=%d, z=%d ",(int)( floor( x - 0.5 ) + 1. ),(int)( floor( y - 0.5 ) + 1. ) ); + break; + case PLANE_YZ0: + case PLANE_YZ1: + sprintf( Text," y=%d, z=%d ",(int)( floor( x - 0.5 ) + 1. ),(int)( floor( y - 0.5 ) + 1. ) ); + break; + default: + sprintf( Text," x=%d, y=%d ",(int)( floor( x - 0.5 ) + 1. ),(int)( floor( y - 0.5 ) + 1. ) ); + } + + texfont_write( Text, rcCoord.left, rcCoord.top ); + } + else + { + gdk_window_set_cursor( g_pWndPreview->window, NULL ); + } + + g_UIGtkTable.m_pfn_glwidget_swap_buffers( g_pPreviewWidget ); + g_GLTable.m_pfn_QE_CheckOpenGLForErrors(); + g_GLTable.m_pfn_qglDisable( GL_SCISSOR_TEST ); } -static gint preview_close (GtkWidget *widget, gpointer data) -{ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "main_preview")), FALSE); - return TRUE; +static gint preview_close( GtkWidget *widget, gpointer data ){ + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( g_object_get_data( G_OBJECT( g_pWnd ), "main_preview" ) ), FALSE ); + return TRUE; } -static void preview_focusout (GtkSpinButton *spin, GdkEventFocus *event, double *data) -{ - *data = DegreesToRadians ((double)(gtk_spin_button_get_value_as_int (spin) % 360)); - UpdatePreview (false); +static void preview_focusout( GtkSpinButton *spin, GdkEventFocus *event, double *data ){ + *data = DegreesToRadians( (double)( gtk_spin_button_get_value_as_int( spin ) % 360 ) ); + UpdatePreview( false ); } -static gint doublevariable_spinfocusout(GtkWidget* widget, GdkEventFocus* event, gpointer data) -{ - preview_focusout(GTK_SPIN_BUTTON(widget), event, reinterpret_cast(data)); - return FALSE; +static gint doublevariable_spinfocusout( GtkWidget* widget, GdkEventFocus* event, gpointer data ){ + preview_focusout( GTK_SPIN_BUTTON( widget ), event, reinterpret_cast( data ) ); + return FALSE; } -static void preview_spin (GtkAdjustment *adj, double *data) -{ - *data = DegreesToRadians (adj->value); - UpdatePreview (false); +static void preview_spin( GtkAdjustment *adj, double *data ){ + *data = DegreesToRadians( adj->value ); + UpdatePreview( false ); } -void CreateViewWindow () -{ - GtkWidget *dlg, *vbox, *hbox, *label, *spin, *frame; - GtkObject *adj; +void CreateViewWindow(){ + GtkWidget *dlg, *vbox, *hbox, *label, *spin, *frame; + GtkObject *adj; #ifndef ISOMETRIC - elevation = PI/6.; - azimuth = PI/6.; + elevation = PI / 6.; + azimuth = PI / 6.; #endif - g_pWndPreview = dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), "GtkGenSurf Preview"); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", GTK_SIGNAL_FUNC (preview_close), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (g_pWnd)); - gtk_window_set_default_size (GTK_WINDOW (dlg), 300, 400); + g_pWndPreview = dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( dlg ), "GtkGenSurf Preview" ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", GTK_SIGNAL_FUNC( preview_close ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + gtk_window_set_transient_for( GTK_WINDOW( dlg ), GTK_WINDOW( g_pWnd ) ); + gtk_window_set_default_size( GTK_WINDOW( dlg ), 300, 400 ); - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (dlg), vbox); + vbox = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox ); + gtk_container_add( GTK_CONTAINER( dlg ), vbox ); #ifndef ISOMETRIC - hbox = gtk_hbox_new (TRUE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 3); - - label = gtk_label_new ("Elevation"); - gtk_widget_show (label); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); - - adj = gtk_adjustment_new (30, -90, 90, 1, 10, 10); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (preview_spin), &elevation); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_box_pack_start (GTK_BOX (hbox), spin, FALSE, TRUE, 0); - g_signal_connect (G_OBJECT (spin), "focus_out_event", G_CALLBACK (doublevariable_spinfocusout), &elevation); - - adj = gtk_adjustment_new (30, 0, 359, 1, 10, 10); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (preview_spin), &azimuth); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0); - gtk_widget_show (spin); - gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spin), TRUE); - gtk_box_pack_end (GTK_BOX (hbox), spin, FALSE, TRUE, 0); - - label = gtk_label_new ("Azimuth"); - gtk_widget_show (label); - gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); - gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, TRUE, 0); - g_signal_connect (G_OBJECT (spin), "focus_out_event", G_CALLBACK (doublevariable_spinfocusout), &azimuth); + hbox = gtk_hbox_new( TRUE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, TRUE, 0 ); + gtk_container_set_border_width( GTK_CONTAINER( hbox ), 3 ); + + label = gtk_label_new( "Elevation" ); + gtk_widget_show( label ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + gtk_box_pack_start( GTK_BOX( hbox ), label, FALSE, TRUE, 0 ); + + adj = gtk_adjustment_new( 30, -90, 90, 1, 10, 10 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( preview_spin ), &elevation ); + spin = gtk_spin_button_new( GTK_ADJUSTMENT( adj ), 1, 0 ); + gtk_widget_show( spin ); + gtk_box_pack_start( GTK_BOX( hbox ), spin, FALSE, TRUE, 0 ); + g_signal_connect( G_OBJECT( spin ), "focus_out_event", G_CALLBACK( doublevariable_spinfocusout ), &elevation ); + + adj = gtk_adjustment_new( 30, 0, 359, 1, 10, 10 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( preview_spin ), &azimuth ); + spin = gtk_spin_button_new( GTK_ADJUSTMENT( adj ), 1, 0 ); + gtk_widget_show( spin ); + gtk_spin_button_set_wrap( GTK_SPIN_BUTTON( spin ), TRUE ); + gtk_box_pack_end( GTK_BOX( hbox ), spin, FALSE, TRUE, 0 ); + + label = gtk_label_new( "Azimuth" ); + gtk_widget_show( label ); + gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); + gtk_box_pack_end( GTK_BOX( hbox ), label, FALSE, TRUE, 0 ); + g_signal_connect( G_OBJECT( spin ), "focus_out_event", G_CALLBACK( doublevariable_spinfocusout ), &azimuth ); #endif - frame = gtk_frame_new (NULL); - gtk_widget_show (frame); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); + frame = gtk_frame_new( NULL ); + gtk_widget_show( frame ); + gtk_frame_set_shadow_type( GTK_FRAME( frame ), GTK_SHADOW_IN ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, TRUE, TRUE, 0 ); - g_pPreviewWidget = g_UIGtkTable.m_pfn_glwidget_new (FALSE, NULL); + g_pPreviewWidget = g_UIGtkTable.m_pfn_glwidget_new( FALSE, NULL ); - gtk_widget_set_events (g_pPreviewWidget, GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK|GDK_POINTER_MOTION_MASK); - gtk_signal_connect (GTK_OBJECT (g_pPreviewWidget), "expose_event", GTK_SIGNAL_FUNC (expose), NULL); - gtk_signal_connect (GTK_OBJECT (g_pPreviewWidget), "motion_notify_event", GTK_SIGNAL_FUNC (motion), NULL); - gtk_signal_connect (GTK_OBJECT (g_pPreviewWidget), "button_press_event", - GTK_SIGNAL_FUNC (button_press), NULL); + gtk_widget_set_events( g_pPreviewWidget, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK ); + gtk_signal_connect( GTK_OBJECT( g_pPreviewWidget ), "expose_event", GTK_SIGNAL_FUNC( expose ), NULL ); + gtk_signal_connect( GTK_OBJECT( g_pPreviewWidget ), "motion_notify_event", GTK_SIGNAL_FUNC( motion ), NULL ); + gtk_signal_connect( GTK_OBJECT( g_pPreviewWidget ), "button_press_event", + GTK_SIGNAL_FUNC( button_press ), NULL ); - gtk_widget_show (g_pPreviewWidget); - gtk_container_add (GTK_CONTAINER (frame), g_pPreviewWidget); + gtk_widget_show( g_pPreviewWidget ); + gtk_container_add( GTK_CONTAINER( frame ), g_pPreviewWidget ); - if (Preview) - gtk_widget_show (g_pWndPreview); + if ( Preview ) { + gtk_widget_show( g_pWndPreview ); + } - UpdatePreview (true); + UpdatePreview( true ); } //============================================================= /* DrawPreview */ -void DrawPreview (RECT rc) -{ +void DrawPreview( RECT rc ){ #define COSXA 0.8660254037844 #define SINXA 0.5 #define COSYA 0.8660254037844 #define SINYA 0.5 - double L; - double x,y; - int i, j; - POINT pt[8]; - XYZ v[8]; - char axis[3][2] = {"X","Y","Z"}; + double L; + double x,y; + int i, j; + POINT pt[8]; + XYZ v[8]; + char axis[3][2] = {"X","Y","Z"}; #ifndef ISOMETRIC - evaluate(); + evaluate(); #endif - XLo = xmin; - XHi = xmax; - YLo = ymin; - YHi = ymax; - ZLo = zmin; - ZHi = zmax; - switch (Plane) - { - case PLANE_XY1: - ZHi = backface; - break; - case PLANE_XZ0: - YLo = backface; - break; - case PLANE_XZ1: - YHi = backface; - break; - case PLANE_YZ0: - XLo = backface; - break; - case PLANE_YZ1: - XHi = backface; - break; - default: - ZLo = backface; - } - - - - GetScaleFactor(rc); + XLo = xmin; + XHi = xmax; + YLo = ymin; + YHi = ymax; + ZLo = zmin; + ZHi = zmax; + switch ( Plane ) + { + case PLANE_XY1: + ZHi = backface; + break; + case PLANE_XZ0: + YLo = backface; + break; + case PLANE_XZ1: + YHi = backface; + break; + case PLANE_YZ0: + XLo = backface; + break; + case PLANE_YZ1: + XHi = backface; + break; + default: + ZLo = backface; + } + + + + GetScaleFactor( rc ); //PEN_GRID - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - - if (Decimate > 0 && (Game != QUAKE3 || UsePatches==0) ) - { - XYZ *vv; - - vv = (XYZ *) malloc(gNumNodes * sizeof(XYZ)); - for(i=0; i 0 && ( Game != QUAKE3 || UsePatches == 0 ) ) { + XYZ *vv; + + vv = (XYZ *) malloc( gNumNodes * sizeof( XYZ ) ); + for ( i = 0; i < gNumNodes; i++ ) + { + for ( j = 0; j < 3; j++ ) + vv[i].p[j] = (double)( gNode[i].p[j] ); + project( &vv[i] ); + } + + for ( i = 0; i < gNumTris; i++ ) + { + for ( j = 0; j < 3; j++ ) + Scale( rc,vv[gTri[i].v[j]],&pt[j] ); + + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglVertex2f( pt[1].x, pt[1].y ); + g_GLTable.m_pfn_qglVertex2f( pt[2].x, pt[2].y ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglEnd(); + } + free( vv ); + } + else if ( Game == QUAKE3 && UsePatches != 0 ) { + int axis, ii, jj, k; + float u, v; + XYZ uv[3][3]; + XYZ Ctrl[3],out; + + switch ( Plane ) + { + case PLANE_XY0: + case PLANE_XY1: + k = 2; + break; + case PLANE_XZ0: + case PLANE_XZ1: + k = 1; + break; + default: + k = 0; + } + for ( i = 0; i < NH; i += 2 ) + { + for ( j = 0; j < NV; j += 2 ) + { + VectorCopy( xyz[i ][j ].p,uv[0][0].p ); + VectorCopy( xyz[i + 1][j ].p,uv[1][0].p ); + VectorCopy( xyz[i + 2][j ].p,uv[2][0].p ); + VectorCopy( xyz[i ][j + 1].p,uv[0][1].p ); + VectorCopy( xyz[i + 1][j + 1].p,uv[1][1].p ); + VectorCopy( xyz[i + 2][j + 1].p,uv[2][1].p ); + VectorCopy( xyz[i ][j + 2].p,uv[0][2].p ); + VectorCopy( xyz[i + 1][j + 2].p,uv[1][2].p ); + VectorCopy( xyz[i + 2][j + 2].p,uv[2][2].p ); + uv[1][0].p[k] = ( 4 * xyz[i + 1][j ].p[k] - xyz[i ][j ].p[k] - xyz[i + 2][j ].p[k] ) / 2; + uv[0][1].p[k] = ( 4 * xyz[i ][j + 1].p[k] - xyz[i ][j ].p[k] - xyz[i ][j + 2].p[k] ) / 2; + uv[2][1].p[k] = ( 4 * xyz[i + 2][j + 1].p[k] - xyz[i + 2][j ].p[k] - xyz[i + 2][j + 2].p[k] ) / 2; + uv[1][2].p[k] = ( 4 * xyz[i + 1][j + 2].p[k] - xyz[i ][j + 2].p[k] - xyz[i + 2][j + 2].p[k] ) / 2; + uv[1][1].p[k] = ( 16 * xyz[i + 1][j + 1].p[k] - + xyz[i ][j ].p[k] - 2 * xyz[i + 1][j ].p[k] - xyz[i + 2][j ].p[k] - + 2 * xyz[i ][j + 1].p[k] - 2 * xyz[i + 2][j + 1].p[k] - + xyz[i ][j + 2].p[k] - 2 * xyz[i + 1][j + 2].p[k] - xyz[i + 2][j + 2].p[k] ) / 4; + + for ( ii = 0; ii <= SUBDIVS; ii++ ) + { + if ( ii == 0 || ii == SUBDIVS / 2 || ii == SUBDIVS ) { + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); + // PEN_GRID + } + else + { + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglLineStipple( 1, 0xF0F0 ); + g_GLTable.m_pfn_qglEnable( GL_LINE_STIPPLE ); + // PEN_DASH + } + + u = (float)( ii ) / (float)( SUBDIVS ); + for ( jj = 0; jj < 3; jj++ ) + { + for ( axis = 0; axis < 3; axis++ ) { - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - // PEN_GRID + float a, b, c; + float qA, qB, qC; + a = (float)uv[0][jj].p[axis]; + b = (float)uv[1][jj].p[axis]; + c = (float)uv[2][jj].p[axis]; + qA = a - 2 * b + c; + qB = 2 * b - 2 * a; + qC = a; + Ctrl[jj].p[axis] = qA * u * u + qB * u + qC; } - else + } + VectorCopy( Ctrl[0].p,out.p ); + project( &out ); + Scale( rc,out,&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + for ( jj = 1; jj <= SUBDIVS; jj++ ) + { + v = (float)( jj ) / (float)( SUBDIVS ); + for ( axis = 0 ; axis < 3 ; axis++ ) { - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglLineStipple (1, 0xF0F0); - g_GLTable.m_pfn_qglEnable (GL_LINE_STIPPLE); - // PEN_DASH + float a, b, c; + float qA, qB, qC; + a = (float)Ctrl[0].p[axis]; + b = (float)Ctrl[1].p[axis]; + c = (float)Ctrl[2].p[axis]; + qA = a - 2 * b + c; + qB = 2 * b - 2 * a; + qC = a; + out.p[axis] = qA * v * v + qB * v + qC; } - - u = (float)(ii)/(float)(SUBDIVS); - for(jj=0; jj<3; jj++) - { - for(axis=0; axis<3; axis++) - { - float a, b, c; - float qA, qB, qC; - a = (float)uv[0][jj].p[axis]; - b = (float)uv[1][jj].p[axis]; - c = (float)uv[2][jj].p[axis]; - qA = a - 2 * b + c; - qB = 2 * b - 2 * a; - qC = a; - Ctrl[jj].p[axis] = qA * u * u + qB * u + qC; - } - } - VectorCopy(Ctrl[0].p,out.p); - project(&out); - Scale(rc,out,&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(jj=1; jj<=SUBDIVS; jj++) - { - v = (float)(jj)/(float)(SUBDIVS); - for (axis = 0 ; axis < 3 ; axis++) - { - float a, b, c; - float qA, qB, qC; - a = (float)Ctrl[0].p[axis]; - b = (float)Ctrl[1].p[axis]; - c = (float)Ctrl[2].p[axis]; - qA = a - 2 * b + c; - qB = 2 * b - 2 * a; - qC = a; - out.p[axis] = qA * v * v + qB * v + qC; - } - project(&out); - Scale(rc,out,&pt[0]); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - } - for(jj=0; jj<=SUBDIVS; jj++) - { - if(jj==0 || jj==SUBDIVS/2 || jj==SUBDIVS) + project( &out ); + Scale( rc,out,&pt[0] ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + } + g_GLTable.m_pfn_qglEnd(); + } + for ( jj = 0; jj <= SUBDIVS; jj++ ) + { + if ( jj == 0 || jj == SUBDIVS / 2 || jj == SUBDIVS ) { + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); + // PEN_GRID + } + else + { + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglLineStipple( 1, 0xF0F0 ); + g_GLTable.m_pfn_qglEnable( GL_LINE_STIPPLE ); + // PEN_DASH + } + + v = (float)( jj ) / (float)( SUBDIVS ); + for ( ii = 0; ii < 3; ii++ ) + { + for ( axis = 0; axis < 3; axis++ ) { - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - // PEN_GRID + float a, b, c; + float qA, qB, qC; + a = (float)uv[ii][0].p[axis]; + b = (float)uv[ii][1].p[axis]; + c = (float)uv[ii][2].p[axis]; + qA = a - 2 * b + c; + qB = 2 * b - 2 * a; + qC = a; + Ctrl[ii].p[axis] = qA * v * v + qB * v + qC; } - else + } + VectorCopy( Ctrl[0].p,out.p ); + project( &out ); + Scale( rc,out,&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + for ( ii = 1; ii <= SUBDIVS; ii++ ) + { + u = (float)( ii ) / (float)( SUBDIVS ); + for ( axis = 0 ; axis < 3 ; axis++ ) { - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglLineStipple (1, 0xF0F0); - g_GLTable.m_pfn_qglEnable (GL_LINE_STIPPLE); - // PEN_DASH + float a, b, c; + float qA, qB, qC; + a = (float)Ctrl[0].p[axis]; + b = (float)Ctrl[1].p[axis]; + c = (float)Ctrl[2].p[axis]; + qA = a - 2 * b + c; + qB = 2 * b - 2 * a; + qC = a; + out.p[axis] = qA * u * u + qB * u + qC; } + project( &out ); + Scale( rc,out,&pt[0] ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + } + g_GLTable.m_pfn_qglEnd(); + } + } + } + } + else + { + for ( i = 0; i <= NH; i++ ) + { + Scale( rc,xyz[i][0],&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + for ( j = 1; j <= NV; j++ ) + { + Scale( rc,xyz[i][j],&pt[0] ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + } + g_GLTable.m_pfn_qglEnd(); + } + for ( j = 0; j <= NV; j++ ) + { + Scale( rc,xyz[0][j],&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + for ( i = 1; i <= NH; i++ ) + { + Scale( rc,xyz[i][j],&pt[0] ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + } + g_GLTable.m_pfn_qglEnd(); + } + } - v = (float)(jj)/(float)(SUBDIVS); - for(ii=0; ii<3; ii++) - { - for(axis=0; axis<3; axis++) - { - float a, b, c; - float qA, qB, qC; - a = (float)uv[ii][0].p[axis]; - b = (float)uv[ii][1].p[axis]; - c = (float)uv[ii][2].p[axis]; - qA = a - 2 * b + c; - qB = 2 * b - 2 * a; - qC = a; - Ctrl[ii].p[axis] = qA * v * v + qB * v + qC; - } - } - VectorCopy(Ctrl[0].p,out.p); - project(&out); - Scale(rc,out,&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(ii=1; ii<=SUBDIVS; ii++) - { - u = (float)(ii)/(float)(SUBDIVS); - for (axis = 0 ; axis < 3 ; axis++) - { - float a, b, c; - float qA, qB, qC; - a = (float)Ctrl[0].p[axis]; - b = (float)Ctrl[1].p[axis]; - c = (float)Ctrl[2].p[axis]; - qA = a - 2 * b + c; - qB = 2 * b - 2 * a; - qC = a; - out.p[axis] = qA * u * u + qB * u + qC; - } - project(&out); - Scale(rc,out,&pt[0]); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - } - } - } - } - else - { - for(i=0; i<=NH; i++) - { - Scale(rc,xyz[i][0],&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(j=1; j<=NV; j++) - { - Scale(rc,xyz[i][j],&pt[0]); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - } - for(j=0; j<=NV; j++) - { - Scale(rc,xyz[0][j],&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(i=1; i<=NH; i++) - { - Scale(rc,xyz[i][j],&pt[0]); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - } - } - - if(Game!=QUAKE3 || UsePatches==0) - { - // Draw lines from corners to base, and lines around base - for(i=0; i<=NH; i+=NH) - { - for(j=0; j<=NV; j+=NV) - { - VectorCopy(xyz[i][j].p, v[0].p); - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - v[0].p[1] = backface; - break; - case PLANE_YZ0: - case PLANE_YZ1: - v[0].p[0] = backface; - break; - default: - v[0].p[2] = backface; - } - Scale(rc,xyz[i][j],&pt[0]); + if ( Game != QUAKE3 || UsePatches == 0 ) { + // Draw lines from corners to base, and lines around base + for ( i = 0; i <= NH; i += NH ) + { + for ( j = 0; j <= NV; j += NV ) + { + VectorCopy( xyz[i][j].p, v[0].p ); + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + v[0].p[1] = backface; + break; + case PLANE_YZ0: + case PLANE_YZ1: + v[0].p[0] = backface; + break; + default: + v[0].p[2] = backface; + } + Scale( rc,xyz[i][j],&pt[0] ); #ifndef ISOMETRIC - project(&v[0]); + project( &v[0] ); #endif - Scale(rc,v[0],&pt[1]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[1].x, pt[1].y); - g_GLTable.m_pfn_qglEnd (); - } - } - VectorCopy(xyz[ 0][ 0].p, v[0].p); - VectorCopy(xyz[NH][ 0].p, v[1].p); - VectorCopy(xyz[NH][NV].p, v[2].p); - VectorCopy(xyz[ 0][NV].p, v[3].p); - switch(Plane) - { - case PLANE_XZ0: - case PLANE_XZ1: - v[0].p[1] = backface;; - v[1].p[1] = v[0].p[1]; - v[2].p[1] = v[0].p[1]; - v[3].p[1] = v[0].p[1]; - break; - case PLANE_YZ0: - case PLANE_YZ1: - v[0].p[0] = backface; - v[1].p[0] = v[0].p[0]; - v[2].p[0] = v[0].p[0]; - v[3].p[0] = v[0].p[0]; - break; - default: - v[0].p[2] = backface; - v[1].p[2] = v[0].p[2]; - v[2].p[2] = v[0].p[2]; - v[3].p[2] = v[0].p[2]; - } + Scale( rc,v[0],&pt[1] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglVertex2f( pt[1].x, pt[1].y ); + g_GLTable.m_pfn_qglEnd(); + } + } + VectorCopy( xyz[ 0][ 0].p, v[0].p ); + VectorCopy( xyz[NH][ 0].p, v[1].p ); + VectorCopy( xyz[NH][NV].p, v[2].p ); + VectorCopy( xyz[ 0][NV].p, v[3].p ); + switch ( Plane ) + { + case PLANE_XZ0: + case PLANE_XZ1: + v[0].p[1] = backface;; + v[1].p[1] = v[0].p[1]; + v[2].p[1] = v[0].p[1]; + v[3].p[1] = v[0].p[1]; + break; + case PLANE_YZ0: + case PLANE_YZ1: + v[0].p[0] = backface; + v[1].p[0] = v[0].p[0]; + v[2].p[0] = v[0].p[0]; + v[3].p[0] = v[0].p[0]; + break; + default: + v[0].p[2] = backface; + v[1].p[2] = v[0].p[2]; + v[2].p[2] = v[0].p[2]; + v[3].p[2] = v[0].p[2]; + } #ifndef ISOMETRIC - project(&v[3]); + project( &v[3] ); #endif - Scale(rc,v[3],&pt[0]); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - for(i=0; i<3; i++) - { + Scale( rc,v[3],&pt[0] ); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + for ( i = 0; i < 3; i++ ) + { #ifndef ISOMETRIC - project(&v[i]); + project( &v[i] ); #endif - Scale(rc,v[i],&pt[1]); - g_GLTable.m_pfn_qglVertex2f (pt[1].x, pt[1].y); - } - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - g_GLTable.m_pfn_qglEnd (); - } + Scale( rc,v[i],&pt[1] ); + g_GLTable.m_pfn_qglVertex2f( pt[1].x, pt[1].y ); + } + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglEnd(); + } - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); #ifdef ISOMETRIC - // Draw small depiction of coordinate axes - pt[0].x = rc.right - cxChar - cxChar/2 - cyChar; - pt[0].y = rc.bottom - cyChar/2 - cxChar/2; - pt[1].x = pt[0].x + (int)(cyChar*COSXA); - pt[1].y = pt[0].y - (int)(cyChar*SINXA); - MoveToEx(hdc,pt[0].x,pt[0].y,NULL); - LineTo(hdc,pt[1].x,pt[1].y); - SetTextAlign(hdc,TA_LEFT | TA_TOP); - TextOut(hdc,pt[1].x,pt[1].y-cyChar/2,"X",1); - pt[1].x = pt[0].x - (int)(cyChar*COSYA); - pt[1].y = pt[0].y - (int)(cyChar*SINYA); - MoveToEx(hdc,pt[0].x,pt[0].y,NULL); - LineTo(hdc,pt[1].x,pt[1].y); - SetTextAlign(hdc,TA_RIGHT | TA_TOP); - TextOut(hdc,pt[1].x,pt[1].y-cyChar/2,"Y",1); - pt[1].x = pt[0].x; - pt[1].y = pt[0].y - cyChar; - MoveToEx(hdc,pt[0].x,pt[0].y,NULL); - LineTo(hdc,pt[1].x,pt[1].y); - SetTextAlign(hdc,TA_CENTER | TA_BOTTOM); - TextOut(hdc,pt[1].x,pt[1].y,"Z",1); + // Draw small depiction of coordinate axes + pt[0].x = rc.right - cxChar - cxChar / 2 - cyChar; + pt[0].y = rc.bottom - cyChar / 2 - cxChar / 2; + pt[1].x = pt[0].x + (int)( cyChar * COSXA ); + pt[1].y = pt[0].y - (int)( cyChar * SINXA ); + MoveToEx( hdc,pt[0].x,pt[0].y,NULL ); + LineTo( hdc,pt[1].x,pt[1].y ); + SetTextAlign( hdc,TA_LEFT | TA_TOP ); + TextOut( hdc,pt[1].x,pt[1].y - cyChar / 2,"X",1 ); + pt[1].x = pt[0].x - (int)( cyChar * COSYA ); + pt[1].y = pt[0].y - (int)( cyChar * SINYA ); + MoveToEx( hdc,pt[0].x,pt[0].y,NULL ); + LineTo( hdc,pt[1].x,pt[1].y ); + SetTextAlign( hdc,TA_RIGHT | TA_TOP ); + TextOut( hdc,pt[1].x,pt[1].y - cyChar / 2,"Y",1 ); + pt[1].x = pt[0].x; + pt[1].y = pt[0].y - cyChar; + MoveToEx( hdc,pt[0].x,pt[0].y,NULL ); + LineTo( hdc,pt[1].x,pt[1].y ); + SetTextAlign( hdc,TA_CENTER | TA_BOTTOM ); + TextOut( hdc,pt[1].x,pt[1].y,"Z",1 ); #else - L = 2*(double)cyChar/SF; - v[0].p[0] = 0.; - v[0].p[1] = 0.; - v[0].p[2] = 0.; - v[1].p[0] = L; - v[1].p[1] = 0.; - v[1].p[2] = 0.; - v[2].p[0] = 0.; - v[2].p[1] = L; - v[2].p[2] = 0.; - v[3].p[0] = 0.; - v[3].p[1] = 0.; - v[3].p[2] = L; - for(i=0; i<=3; i++) - { - project(&v[i]); - Scale(rc,v[i],&pt[i]); - } - for(i=1; i<=3; i++) - { - pt[i].x += -pt[0].x + rc.right - 2*cyChar; - pt[i].y += -pt[0].y + rc.bottom + 2*cyChar; - } - pt[0].x = rc.right - 2*cyChar; - pt[0].y = rc.bottom + 2*cyChar; - - for(i=1; i<=3; i++) - { - g_GLTable.m_pfn_qglBegin (GL_LINES); - g_GLTable.m_pfn_qglVertex2f (pt[0].x, pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[i].x, pt[i].y); - g_GLTable.m_pfn_qglEnd (); - texfont_write (axis[i-1], pt[i].x-cxChar/2,pt[i].y+cyChar/2); - } + L = 2 * (double)cyChar / SF; + v[0].p[0] = 0.; + v[0].p[1] = 0.; + v[0].p[2] = 0.; + v[1].p[0] = L; + v[1].p[1] = 0.; + v[1].p[2] = 0.; + v[2].p[0] = 0.; + v[2].p[1] = L; + v[2].p[2] = 0.; + v[3].p[0] = 0.; + v[3].p[1] = 0.; + v[3].p[2] = L; + for ( i = 0; i <= 3; i++ ) + { + project( &v[i] ); + Scale( rc,v[i],&pt[i] ); + } + for ( i = 1; i <= 3; i++ ) + { + pt[i].x += -pt[0].x + rc.right - 2 * cyChar; + pt[i].y += -pt[0].y + rc.bottom + 2 * cyChar; + } + pt[0].x = rc.right - 2 * cyChar; + pt[0].y = rc.bottom + 2 * cyChar; + + for ( i = 1; i <= 3; i++ ) + { + g_GLTable.m_pfn_qglBegin( GL_LINES ); + g_GLTable.m_pfn_qglVertex2f( pt[0].x, pt[0].y ); + g_GLTable.m_pfn_qglVertex2f( pt[i].x, pt[i].y ); + g_GLTable.m_pfn_qglEnd(); + texfont_write( axis[i - 1], pt[i].x - cxChar / 2,pt[i].y + cyChar / 2 ); + } #endif - // Draw player model's bounding box in red to give a sense of scale - // PEN_RED - g_GLTable.m_pfn_qglLineWidth (2); - g_GLTable.m_pfn_qglColor3f (1, 0, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - - switch(Plane) - { - case PLANE_XY1: - v[0].p[0] = xyz[NH/2][NV/2].p[0] + PlayerBox[Game].x[0]; - v[0].p[1] = xyz[NH/2][NV/2].p[1] + PlayerBox[Game].y[0]; - v[0].p[2] = zmin - PlayerBox[Game].z[0] - 32; - break; - case PLANE_XZ0: - v[0].p[0] = (xmax+xmin)/2 + PlayerBox[Game].x[0]; - v[0].p[1] = ymax+64; - v[0].p[2] = zmin; - break; - case PLANE_XZ1: - v[0].p[0] = (xmax+xmin)/2 + PlayerBox[Game].x[0]; - v[0].p[1] = ymin-64; - v[0].p[2] = zmin; - break; - case PLANE_YZ0: - v[0].p[0] = xmax+64; - v[0].p[1] = (ymax+ymin)/2 + PlayerBox[Game].y[0]; - v[0].p[2] = zmin; - break; - case PLANE_YZ1: - v[0].p[0] = xmin-64; - v[0].p[1] = (ymax+ymin)/2 + PlayerBox[Game].y[0]; - v[0].p[2] = zmin; - break; - default: - // Put player on a node. For patches, put on an even numbered node. - if(Game==QUAKE3 && UsePatches!=0) - { - if(NH > 2) - x = Hll + dh * (int)(NH/2 + 1); - else - x = Hll + dh * (int)(NH/2); - if(NV > 2) - y = Vll + dv * (int)(NV/2 + 1); - else - y = Vll + dv * (int)(NV/2); - } - else - { - if(NH > 1) - x = Hll + dh * (int)(NH/2); - else - x = Hll + dh/2; - if(NV > 1) - y = Vll + dv * (int)(NV/2); - else - y = Vll + dv/2; - } + // Draw player model's bounding box in red to give a sense of scale + // PEN_RED + g_GLTable.m_pfn_qglLineWidth( 2 ); + g_GLTable.m_pfn_qglColor3f( 1, 0, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); + + switch ( Plane ) + { + case PLANE_XY1: + v[0].p[0] = xyz[NH / 2][NV / 2].p[0] + PlayerBox[Game].x[0]; + v[0].p[1] = xyz[NH / 2][NV / 2].p[1] + PlayerBox[Game].y[0]; + v[0].p[2] = zmin - PlayerBox[Game].z[0] - 32; + break; + case PLANE_XZ0: + v[0].p[0] = ( xmax + xmin ) / 2 + PlayerBox[Game].x[0]; + v[0].p[1] = ymax + 64; + v[0].p[2] = zmin; + break; + case PLANE_XZ1: + v[0].p[0] = ( xmax + xmin ) / 2 + PlayerBox[Game].x[0]; + v[0].p[1] = ymin - 64; + v[0].p[2] = zmin; + break; + case PLANE_YZ0: + v[0].p[0] = xmax + 64; + v[0].p[1] = ( ymax + ymin ) / 2 + PlayerBox[Game].y[0]; + v[0].p[2] = zmin; + break; + case PLANE_YZ1: + v[0].p[0] = xmin - 64; + v[0].p[1] = ( ymax + ymin ) / 2 + PlayerBox[Game].y[0]; + v[0].p[2] = zmin; + break; + default: + // Put player on a node. For patches, put on an even numbered node. + if ( Game == QUAKE3 && UsePatches != 0 ) { + if ( NH > 2 ) { + x = Hll + dh * (int)( NH / 2 + 1 ); + } + else{ + x = Hll + dh * (int)( NH / 2 ); + } + if ( NV > 2 ) { + y = Vll + dv * (int)( NV / 2 + 1 ); + } + else{ + y = Vll + dv * (int)( NV / 2 ); + } + } + else + { + if ( NH > 1 ) { + x = Hll + dh * (int)( NH / 2 ); + } + else{ + x = Hll + dh / 2; + } + if ( NV > 1 ) { + y = Vll + dv * (int)( NV / 2 ); + } + else{ + y = Vll + dv / 2; + } + } // x = (Hll+Hur)/2.; // y = (Vll+Vur)/2.; - v[0].p[0] = x + PlayerBox[Game].x[0]; - v[0].p[1] = y + PlayerBox[Game].y[0]; - v[0].p[2] = PlayerStartZ(x,y) + PlayerBox[Game].z[0] + 8; // add 8 cuz I'm a pessimist - } - v[1].p[0] = v[0].p[0] + PlayerBox[Game].x[1] - PlayerBox[Game].x[0]; - v[1].p[1] = v[0].p[1]; - v[1].p[2] = v[0].p[2]; - v[2].p[0] = v[1].p[0]; - v[2].p[1] = v[1].p[1] + PlayerBox[Game].y[1] - PlayerBox[Game].y[0]; - v[2].p[2] = v[0].p[2]; - v[3].p[0] = v[0].p[0]; - v[3].p[1] = v[2].p[1]; - v[3].p[2] = v[0].p[2]; - VectorCopy(v[0].p,v[4].p); - VectorCopy(v[1].p,v[5].p); - VectorCopy(v[2].p,v[6].p); - VectorCopy(v[3].p,v[7].p); - v[4].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; - v[5].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; - v[6].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; - v[7].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; - for(i=0; i<=7; i++) - { + v[0].p[0] = x + PlayerBox[Game].x[0]; + v[0].p[1] = y + PlayerBox[Game].y[0]; + v[0].p[2] = PlayerStartZ( x,y ) + PlayerBox[Game].z[0] + 8; // add 8 cuz I'm a pessimist + } + v[1].p[0] = v[0].p[0] + PlayerBox[Game].x[1] - PlayerBox[Game].x[0]; + v[1].p[1] = v[0].p[1]; + v[1].p[2] = v[0].p[2]; + v[2].p[0] = v[1].p[0]; + v[2].p[1] = v[1].p[1] + PlayerBox[Game].y[1] - PlayerBox[Game].y[0]; + v[2].p[2] = v[0].p[2]; + v[3].p[0] = v[0].p[0]; + v[3].p[1] = v[2].p[1]; + v[3].p[2] = v[0].p[2]; + VectorCopy( v[0].p,v[4].p ); + VectorCopy( v[1].p,v[5].p ); + VectorCopy( v[2].p,v[6].p ); + VectorCopy( v[3].p,v[7].p ); + v[4].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; + v[5].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; + v[6].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; + v[7].p[2] += PlayerBox[Game].z[1] - PlayerBox[Game].z[0]; + for ( i = 0; i <= 7; i++ ) + { #ifndef ISOMETRIC - project(&v[i]); + project( &v[i] ); #endif - Scale(rc,v[i],&pt[i]); - } - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[3].x, pt[3].y); - for(i=0; i<=3; i++) - g_GLTable.m_pfn_qglVertex2f (pt[i].x, pt[i].y); - g_GLTable.m_pfn_qglEnd (); - g_GLTable.m_pfn_qglBegin (GL_LINE_STRIP); - g_GLTable.m_pfn_qglVertex2f (pt[7].x, pt[7].y); - for(i=4; i<=7; i++) - g_GLTable.m_pfn_qglVertex2f (pt[i].x, pt[i].y); - g_GLTable.m_pfn_qglEnd (); - g_GLTable.m_pfn_qglBegin (GL_LINES); - for(i=0; i<=3; i++) - { - g_GLTable.m_pfn_qglVertex2f (pt[i].x,pt[i].y); - g_GLTable.m_pfn_qglVertex2f (pt[i+4].x,pt[i+4].y); - } - g_GLTable.m_pfn_qglEnd (); - - g_GLTable.m_pfn_qglLineWidth (1); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); + Scale( rc,v[i],&pt[i] ); + } + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[3].x, pt[3].y ); + for ( i = 0; i <= 3; i++ ) + g_GLTable.m_pfn_qglVertex2f( pt[i].x, pt[i].y ); + g_GLTable.m_pfn_qglEnd(); + g_GLTable.m_pfn_qglBegin( GL_LINE_STRIP ); + g_GLTable.m_pfn_qglVertex2f( pt[7].x, pt[7].y ); + for ( i = 4; i <= 7; i++ ) + g_GLTable.m_pfn_qglVertex2f( pt[i].x, pt[i].y ); + g_GLTable.m_pfn_qglEnd(); + g_GLTable.m_pfn_qglBegin( GL_LINES ); + for ( i = 0; i <= 3; i++ ) + { + g_GLTable.m_pfn_qglVertex2f( pt[i].x,pt[i].y ); + g_GLTable.m_pfn_qglVertex2f( pt[i + 4].x,pt[i + 4].y ); + } + g_GLTable.m_pfn_qglEnd(); + + g_GLTable.m_pfn_qglLineWidth( 1 ); + g_GLTable.m_pfn_qglColor3f( 0, 1, 0 ); + g_GLTable.m_pfn_qglDisable( GL_LINE_STIPPLE ); } //============================================================= -void DrawGrid(RECT rc) -{ - int i, j, k; - double h,w,x,y; - POINT pt[2]; - RECT rcBox; - - w = (double)(rc.right-rc.left+1) - cxChar; - h = (double)(rc.top-rc.bottom+1) - cxChar - cyChar; - - SFG = w/(Hur-Hll); - SFG = min(SFG, h/(Vur-Vll)); - - // Center drawing - X0G = (int)(rc.left + rc.right - (int)(SFG*(Hur-Hll)))/2; - Y0G = (int)(rc.top + rc.bottom + cyChar - (int)(SFG*(Vur-Vll)))/2; - - g_GLTable.m_pfn_qglLineWidth (2); - g_GLTable.m_pfn_qglColor3f (0, 1, 0); - g_GLTable.m_pfn_qglDisable (GL_LINE_STIPPLE); - - pt[0].y = Y0G; - pt[1].y = Y0G + (int)(SFG*(Vur-Vll)); - g_GLTable.m_pfn_qglBegin (GL_LINES); - for(i=0; i<=NH; i++) - { - x = Hll + i * dh; - pt[0].x = X0G + (int)(SFG*(x-Hll)); - g_GLTable.m_pfn_qglVertex2f(pt[0].x, pt[0].y); - g_GLTable.m_pfn_qglVertex2f(pt[0].x, pt[1].y); - } - g_GLTable.m_pfn_qglEnd (); - pt[0].x = X0G; - pt[1].x = X0G + (int)(SFG*(Hur-Hll)); - g_GLTable.m_pfn_qglBegin (GL_LINES); - for(i=0; i<=NV; i++) - { - y = Vll + i * dv; - pt[0].y = Y0G + (int)(SFG*(Vur-y)); - g_GLTable.m_pfn_qglVertex2f (pt[0].x,pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[1].x,pt[0].y); - } - g_GLTable.m_pfn_qglEnd (); - - g_GLTable.m_pfn_qglLineWidth (1); - - // Draw axes - pt[0].x = rc.right - cyChar - cxChar - cyChar/2; - pt[0].y = rc.bottom + cyChar/2; - pt[1].x = pt[0].x + cyChar; - pt[1].y = pt[0].y; - g_GLTable.m_pfn_qglBegin (GL_LINES); - g_GLTable.m_pfn_qglVertex2f (pt[0].x,pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[1].x,pt[1].y); - g_GLTable.m_pfn_qglEnd (); - switch(Plane) - { - case PLANE_YZ0: - case PLANE_YZ1: - texfont_write ("Y", pt[1].x, pt[1].y+cyChar/2); - break; - default: - texfont_write ("X", pt[1].x, pt[1].y+cyChar/2); - } - pt[1].x = pt[0].x; - pt[1].y = pt[0].y + cyChar; - g_GLTable.m_pfn_qglBegin (GL_LINES); - g_GLTable.m_pfn_qglVertex2f (pt[0].x,pt[0].y); - g_GLTable.m_pfn_qglVertex2f (pt[1].x,pt[1].y); - g_GLTable.m_pfn_qglEnd (); - switch(Plane) - { - case PLANE_XY0: - case PLANE_XY1: - texfont_write ("Y", pt[1].x-cyChar/2, pt[1].y+cyChar); - break; - default: - texfont_write ("Z", pt[1].x-cyChar/2, pt[1].y+cyChar); - } - - // Denote fixed points with a 5x5 red rectangle - for(i=0; i<=NH; i++) - { - for(j=0; j<=NV; j++) - { - if(xyz[i][j].fixed) - { - x = Hll + i*dh; - y = Vll + j*dv; - rcBox.left = X0G + (int)(SFG*(x-Hll)) - 2; - rcBox.top = Y0G + (int)(SFG*(Vur-y)) + 2; - rcBox.right = rcBox.left + 5; - rcBox.bottom = rcBox.top - 5; - - DRAW_QUAD (rcBox, 1,0,0); - } - } - } - - // Denote currently selected point with a 5x5 green rectangle - if (NumVerticesSelected) - { - for(k=0; kp[2]; // yaw - xa = ct[0]*x - st[0]*z; - za = st[0]*x + ct[0]*z; + xa = ct[0] * x - st[0] * z; + za = st[0] * x + ct[0] * z; // roll - x = ct[1]*xa + st[1]*y; - ya = ct[1]*y - st[1]*xa; + x = ct[1] * xa + st[1] * y; + ya = ct[1] * y - st[1] * xa; // azimuth - z = ct[2]*za - st[2]*ya; - y = ct[2]*ya + st[2]*za; + z = ct[2] * za - st[2] * ya; + y = ct[2] * ya + st[2] * za; // horizontal and vertical projections: // v->pp[0] = D*x/z; @@ -1207,28 +1190,29 @@ void project(XYZ *v) // v->projected_v = -v->projected_v * persp/(v->projected_z-persp); } /*=======================================================================*/ -void evaluate() -{ +void evaluate(){ int i, j; XYZ v[4]; - - if(elevation > PI) elevation -= 2.*PI; - roll = elevation * sin(azimuth); - yaw = 1.5*PI + elevation*cos(azimuth); + + if ( elevation > PI ) { + elevation -= 2. * PI; + } + roll = elevation * sin( azimuth ); + yaw = 1.5 * PI + elevation*cos( azimuth ); // Find angles from midpoint to viewpoint: - st[0] = sin(yaw); - st[1] = sin(roll); - st[2] = sin(azimuth); - ct[0] = cos(yaw); - ct[1] = cos(roll); - ct[2] = cos(azimuth); - - for(i=0; i<=NH; i++) + st[0] = sin( yaw ); + st[1] = sin( roll ); + st[2] = sin( azimuth ); + ct[0] = cos( yaw ); + ct[1] = cos( roll ); + ct[2] = cos( azimuth ); + + for ( i = 0; i <= NH; i++ ) { - for(j=0; j<=NV; j++) + for ( j = 0; j <= NV; j++ ) { - project(&xyz[i][j]); + project( &xyz[i][j] ); } } @@ -1236,23 +1220,23 @@ void evaluate() Hlo = Hhi; Vhi = xyz[0][0].pp[1]; Vlo = Vhi; - for(i=0; i<=NH; i++) + for ( i = 0; i <= NH; i++ ) { - for(j=0; j<=NV; j++) + for ( j = 0; j <= NV; j++ ) { - Hlo = min(Hlo,xyz[i][j].pp[0]); - Hhi = max(Hhi,xyz[i][j].pp[0]); - Vlo = min(Vlo,xyz[i][j].pp[1]); - Vhi = max(Vhi,xyz[i][j].pp[1]); + Hlo = min( Hlo,xyz[i][j].pp[0] ); + Hhi = max( Hhi,xyz[i][j].pp[0] ); + Vlo = min( Vlo,xyz[i][j].pp[1] ); + Vhi = max( Vhi,xyz[i][j].pp[1] ); } } // Include backface in min-max - VectorCopy(xyz[ 0][ 0].p,v[0].p); - VectorCopy(xyz[NH][ 0].p,v[1].p); - VectorCopy(xyz[NH][NV].p,v[2].p); - VectorCopy(xyz[ 0][NV].p,v[3].p); - switch(Plane) + VectorCopy( xyz[ 0][ 0].p,v[0].p ); + VectorCopy( xyz[NH][ 0].p,v[1].p ); + VectorCopy( xyz[NH][NV].p,v[2].p ); + VectorCopy( xyz[ 0][NV].p,v[3].p ); + switch ( Plane ) { case PLANE_XZ0: case PLANE_XZ1: @@ -1274,13 +1258,13 @@ void evaluate() v[2].p[2] = v[0].p[2]; v[3].p[2] = v[0].p[2]; } - for(i=0; i<=3; i++) + for ( i = 0; i <= 3; i++ ) { - project(&v[i]); - Hlo = min(Hlo,v[i].pp[0]); - Hhi = max(Hhi,v[i].pp[0]); - Vlo = min(Vlo,v[i].pp[1]); - Vhi = max(Vhi,v[i].pp[1]); + project( &v[i] ); + Hlo = min( Hlo,v[i].pp[0] ); + Hhi = max( Hhi,v[i].pp[0] ); + Vlo = min( Vlo,v[i].pp[1] ); + Vhi = max( Vhi,v[i].pp[1] ); } } diff --git a/contrib/hydratoolz/plugin.cpp b/contrib/hydratoolz/plugin.cpp index 93cd2769..bda4df22 100644 --- a/contrib/hydratoolz/plugin.cpp +++ b/contrib/hydratoolz/plugin.cpp @@ -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-2007 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" @@ -51,7 +51,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Nothing... -*/ + */ // ============================================================================= // Globals @@ -65,57 +65,56 @@ _QEREntityTable g_EntityTable; // Ripped from cmdlib.cpp /* -==================== -Extract file parts -==================== -*/ -void HYDRA_ExtractFilePath (const char *path, char *dest) -{ - const char *src; + ==================== + Extract file parts + ==================== + */ +void HYDRA_ExtractFilePath( const char *path, char *dest ){ + 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) -{ - const char *src; +void HYDRA_ExtractFileName( const char *path, char *dest ){ + 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 ) -{ - while ( *src ) - { - if ( *src == '\\' ) - *dst = '/'; - else - *dst = *src; - dst++; src++; - } - *dst = 0; +void HYDRA_ConvertDOSToUnixName( char *dst, const char *src ){ + while ( *src ) + { + if ( *src == '\\' ) { + *dst = '/'; + } + else{ + *dst = *src; + } + dst++; src++; + } + *dst = 0; } // End of rip from cmdlib.cpp @@ -126,203 +125,205 @@ void HYDRA_ConvertDOSToUnixName( char *dst, const char *src ) // get the wad name from the shader name (or an actual wadname) and add to a list of wad names making // sure we don't add duplicates. -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; - } - - 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 ) ); +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; + } + + 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; - - do - { - p2 = strchr(p1,';'); - if (p2) - *p2 = 0; // swap the ; with a null terminator - - if (strchr(p1,'/') || strchr(p1,'\\')) - { - HYDRA_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. - } - } - - if (!*wads) - Sys_Printf("HydraToolz: No \"wad\" keypair wound in worldspawn\n"); - - - nb = g_FuncTable.m_pfnAllocateActiveBrushHandles(); - for( i = 0; i < nb; i++ ) +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; + + do + { + p2 = strchr( p1,';' ); + if ( p2 ) { + *p2 = 0; // swap the ; with a null terminator + + } + if ( strchr( p1,'/' ) || strchr( p1,'\\' ) ) { + HYDRA_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. + } + } + + if ( !*wads ) { + Sys_Printf( "HydraToolz: No \"wad\" keypair wound in worldspawn\n" ); + } + + + 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 ); + } + } + } + g_FuncTable.m_pfnReleaseActiveBrushHandles(); + + nb = g_FuncTable.m_pfnAllocateSelectedBrushHandles(); + 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); - } - } - } - 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(); + + 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 ) { - 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(); - - 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); - } - 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); - } - } - - 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); - - } - - Sys_Printf("HydraToolz: Finished rebuilding wad keypair!\n"); + // 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 ); + } + 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 ); + } + } + + 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 ); + + } + + Sys_Printf( "HydraToolz: Finished rebuilding wad keypair!\n" ); } @@ -336,34 +337,31 @@ const char *PLUGIN_NAME = "HydraToolz"; const char *PLUGIN_COMMANDS = "About...;Create/Update WAD keypair"; const char *PLUGIN_ABOUT = "HydraToolz v1.0 for GTKRadiant\n\n" - "By Hydra!"; + "By Hydra!"; -extern "C" void* WINAPI QERPlug_GetFuncTable () -{ - return &g_FuncTable; +extern "C" void* WINAPI QERPlug_GetFuncTable(){ + return &g_FuncTable; } -const char* QERPlug_Init (void* hApp, void *pWidget) -{ - return "HydraToolz for GTKRadiant"; // do we need this ? hmmm +const char* QERPlug_Init( void* hApp, void *pWidget ){ + return "HydraToolz for GTKRadiant"; // do we need this ? hmmm } -const char* QERPlug_GetName() -{ - return (char*)PLUGIN_NAME; +const char* QERPlug_GetName(){ + return (char*)PLUGIN_NAME; } -const char* QERPlug_GetCommandList() -{ - return PLUGIN_COMMANDS; +const char* QERPlug_GetCommandList(){ + return PLUGIN_COMMANDS; } -extern "C" void QERPlug_Dispatch(const char* p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) -{ - if(!strcmp(p, "Create/Update WAD keypair")) +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); + } + else if ( !strcmp( p, "About..." ) ) { + g_FuncTable.m_pfnMessageBox( NULL, PLUGIN_ABOUT, "About", MB_OK, NULL ); + } } // ============================================================================= @@ -375,43 +373,39 @@ 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 ) { +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; + 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; +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; } -const char* CSynapseClientHydraToolz::GetInfo() -{ - return "HydraToolz plugin built " __DATE__ " " RADIANT_VERSION; +const char* CSynapseClientHydraToolz::GetInfo(){ + return "HydraToolz plugin built " __DATE__ " " RADIANT_VERSION; } diff --git a/contrib/hydratoolz/plugin.h b/contrib/hydratoolz/plugin.h index 42b3c20c..a6379e91 100644 --- a/contrib/hydratoolz/plugin.h +++ b/contrib/hydratoolz/plugin.h @@ -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-2007 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 + */ #ifndef _PLUGIN_H_ #define _PLUGIN_H_ @@ -40,12 +40,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA class CSynapseClientHydraToolz : public CSynapseClient { public: - // CSynapseClient API - bool RequestAPI(APIDescriptor_t *pAPI); - const char* GetInfo(); +// CSynapseClient API +bool RequestAPI( APIDescriptor_t *pAPI ); +const char* GetInfo(); - CSynapseClientHydraToolz() { } - virtual ~CSynapseClientHydraToolz() { } +CSynapseClientHydraToolz() { } +virtual ~CSynapseClientHydraToolz() { } }; #endif // _PLUGIN_H_ diff --git a/contrib/prtview/AboutDialog.cpp b/contrib/prtview/AboutDialog.cpp index 1bf0b99e..5f394363 100644 --- a/contrib/prtview/AboutDialog.cpp +++ b/contrib/prtview/AboutDialog.cpp @@ -1,21 +1,21 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ // AboutDialog.cpp : implementation file // @@ -31,78 +31,75 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ///////////////////////////////////////////////////////////////////////////// // CAboutDialog dialog -static void dialog_button_callback (GtkWidget *widget, gpointer data) -{ - GtkWidget *parent; - int *loop, *ret; +static void dialog_button_callback( GtkWidget *widget, gpointer data ){ + GtkWidget *parent; + int *loop, *ret; - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - ret = (int*)g_object_get_data (G_OBJECT (parent), "ret"); + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" ); - *loop = 0; - *ret = (int)data; + *loop = 0; + *ret = (int)data; } -static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data) -{ - int *loop; +static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){ + int *loop; - gtk_widget_hide (widget); - loop = (int*)g_object_get_data (G_OBJECT (widget), "loop"); - *loop = 0; + gtk_widget_hide( widget ); + loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" ); + *loop = 0; - return TRUE; + return TRUE; } -void DoAboutDlg () -{ - GtkWidget *dlg, *hbox, *vbox, *button, *label; - int loop = 1, ret = IDCANCEL; - - dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), "About Portal Viewer"); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_widget_show (hbox); - gtk_container_add (GTK_CONTAINER (dlg), hbox); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 10); - - label = gtk_label_new ("Version 1.000\n\n" - "Gtk port by Leonardo Zide\nleo@lokigames.com\n\n" - "Written by Geoffrey DeWan\ngdewan@prairienet.org\n\n" - "Built against GtkRadiant " RADIANT_VERSION "\n" - __DATE__ - ); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - - vbox = gtk_vbox_new (FALSE, 0); - gtk_widget_show (vbox); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("OK"); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_set_usize (button, 60, -2); - - gtk_grab_add (dlg); - gtk_widget_show (dlg); - - while (loop) - gtk_main_iteration (); - - gtk_grab_remove (dlg); - gtk_widget_destroy (dlg); +void DoAboutDlg(){ + GtkWidget *dlg, *hbox, *vbox, *button, *label; + int loop = 1, ret = IDCANCEL; + + dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( dlg ), "About Portal Viewer" ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); + g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); + + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_widget_show( hbox ); + gtk_container_add( GTK_CONTAINER( dlg ), hbox ); + gtk_container_set_border_width( GTK_CONTAINER( hbox ), 10 ); + + label = gtk_label_new( "Version 1.000\n\n" + "Gtk port by Leonardo Zide\nleo@lokigames.com\n\n" + "Written by Geoffrey DeWan\ngdewan@prairienet.org\n\n" + "Built against GtkRadiant " RADIANT_VERSION "\n" + __DATE__ + ); + gtk_widget_show( label ); + gtk_box_pack_start( GTK_BOX( hbox ), label, TRUE, TRUE, 0 ); + gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_LEFT ); + + vbox = gtk_vbox_new( FALSE, 0 ); + gtk_widget_show( vbox ); + gtk_box_pack_start( GTK_BOX( hbox ), vbox, FALSE, FALSE, 0 ); + + button = gtk_button_new_with_label( "OK" ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_set_usize( button, 60, -2 ); + + gtk_grab_add( dlg ); + gtk_widget_show( dlg ); + + while ( loop ) + gtk_main_iteration(); + + gtk_grab_remove( dlg ); + gtk_widget_destroy( dlg ); } ///////////////////////////////////////////////////////////////////////////// diff --git a/contrib/prtview/ConfigDialog.cpp b/contrib/prtview/ConfigDialog.cpp index ad00ed5a..5093c216 100644 --- a/contrib/prtview/ConfigDialog.cpp +++ b/contrib/prtview/ConfigDialog.cpp @@ -1,21 +1,21 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ // ConfigDialog.cpp : implementation file // @@ -33,509 +33,497 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ///////////////////////////////////////////////////////////////////////////// // CConfigDialog dialog -static void dialog_button_callback (GtkWidget *widget, gpointer data) -{ - GtkWidget *parent; - int *loop, *ret; +static void dialog_button_callback( GtkWidget *widget, gpointer data ){ + GtkWidget *parent; + int *loop, *ret; - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - ret = (int*)g_object_get_data (G_OBJECT (parent), "ret"); + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" ); - *loop = 0; - *ret = (int)data; + *loop = 0; + *ret = (int)data; } -static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data) -{ - int *loop; +static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){ + int *loop; - gtk_widget_hide (widget); - loop = (int*)g_object_get_data (G_OBJECT (widget), "loop"); - *loop = 0; + gtk_widget_hide( widget ); + loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" ); + *loop = 0; - return TRUE; + return TRUE; } // ============================================================================= // Color selection dialog -static int DoColor (COLORREF *c) -{ - GtkWidget* dlg; - double clr[3]; - int loop = 1, ret = IDCANCEL; - - clr[0] = ((double)GetRValue (*c)) / 255.0; - clr[1] = ((double)GetGValue (*c)) / 255.0; - clr[2] = ((double)GetBValue (*c)) / 255.0; - - dlg = gtk_color_selection_dialog_new ("Choose Color"); - gtk_color_selection_set_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dlg)->colorsel), clr); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->ok_button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->cancel_button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - gtk_widget_show(dlg); - gtk_grab_add(dlg); - - while (loop) - gtk_main_iteration (); - - gtk_color_selection_get_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dlg)->colorsel), clr); - - gtk_grab_remove (dlg); - gtk_widget_destroy (dlg); - - if (ret == IDOK) - { - *c = RGB (clr[0]*255, clr[1]*255, clr[2]*255); - } - - return ret; +static int DoColor( COLORREF *c ){ + GtkWidget* dlg; + double clr[3]; + int loop = 1, ret = IDCANCEL; + + clr[0] = ( (double)GetRValue( *c ) ) / 255.0; + clr[1] = ( (double)GetGValue( *c ) ) / 255.0; + clr[2] = ( (double)GetBValue( *c ) ) / 255.0; + + dlg = gtk_color_selection_dialog_new( "Choose Color" ); + gtk_color_selection_set_color( GTK_COLOR_SELECTION( GTK_COLOR_SELECTION_DIALOG( dlg )->colorsel ), clr ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + gtk_signal_connect( GTK_OBJECT( GTK_COLOR_SELECTION_DIALOG( dlg )->ok_button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_signal_connect( GTK_OBJECT( GTK_COLOR_SELECTION_DIALOG( dlg )->cancel_button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); + g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); + + gtk_widget_show( dlg ); + gtk_grab_add( dlg ); + + while ( loop ) + gtk_main_iteration(); + + gtk_color_selection_get_color( GTK_COLOR_SELECTION( GTK_COLOR_SELECTION_DIALOG( dlg )->colorsel ), clr ); + + gtk_grab_remove( dlg ); + gtk_widget_destroy( dlg ); + + if ( ret == IDOK ) { + *c = RGB( clr[0] * 255, clr[1] * 255, clr[2] * 255 ); + } + + return ret; } -static void Set2DText (GtkWidget* label) -{ - char s[40]; +static void Set2DText( GtkWidget* label ){ + char s[40]; - sprintf(s, "Line Width = %6.3f", portals.width_2d * 0.5f); + sprintf( s, "Line Width = %6.3f", portals.width_2d * 0.5f ); - gtk_label_set_text (GTK_LABEL (label), s); + gtk_label_set_text( GTK_LABEL( label ), s ); } -static void Set3DText (GtkWidget* label) -{ - char s[40]; +static void Set3DText( GtkWidget* label ){ + char s[40]; - sprintf(s, "Line Width = %6.3f", portals.width_3d * 0.5f); + sprintf( s, "Line Width = %6.3f", portals.width_3d * 0.5f ); - gtk_label_set_text (GTK_LABEL (label), s); + gtk_label_set_text( GTK_LABEL( label ), s ); } -static void Set3DTransText (GtkWidget* label) -{ - char s[40]; +static void Set3DTransText( GtkWidget* label ){ + char s[40]; - sprintf(s, "Polygon transparency = %d%%", (int)portals.trans_3d); + sprintf( s, "Polygon transparency = %d%%", (int)portals.trans_3d ); - gtk_label_set_text (GTK_LABEL (label), s); + gtk_label_set_text( GTK_LABEL( label ), s ); } -static void SetClipText (GtkWidget* label) -{ - char s[40]; +static void SetClipText( GtkWidget* label ){ + char s[40]; - sprintf(s, "Cubic clip range = %d", (int)portals.clip_range * 64); + sprintf( s, "Cubic clip range = %d", (int)portals.clip_range * 64 ); - gtk_label_set_text (GTK_LABEL (label), s); + gtk_label_set_text( GTK_LABEL( label ), s ); } -static void OnScroll2d (GtkAdjustment *adj, gpointer data) -{ - portals.width_2d = adj->value; - Set2DText (GTK_WIDGET (data)); +static void OnScroll2d( GtkAdjustment *adj, gpointer data ){ + portals.width_2d = adj->value; + Set2DText( GTK_WIDGET( data ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D ); + } } -static void OnScroll3d (GtkAdjustment *adj, gpointer data) -{ - portals.width_3d = adj->value; - Set3DText (GTK_WIDGET (data)); +static void OnScroll3d( GtkAdjustment *adj, gpointer data ){ + portals.width_3d = adj->value; + Set3DText( GTK_WIDGET( data ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnScrollTrans (GtkAdjustment *adj, gpointer data) -{ - portals.trans_3d = adj->value; - Set3DTransText (GTK_WIDGET (data)); +static void OnScrollTrans( GtkAdjustment *adj, gpointer data ){ + portals.trans_3d = adj->value; + Set3DTransText( GTK_WIDGET( data ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnScrollClip (GtkAdjustment *adj, gpointer data) -{ - portals.clip_range = adj->value; - SetClipText (GTK_WIDGET (data)); +static void OnScrollClip( GtkAdjustment *adj, gpointer data ){ + portals.clip_range = adj->value; + SetClipText( GTK_WIDGET( data ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnAntiAlias2d (GtkWidget *widget, gpointer data) -{ - portals.aa_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? true : false; +static void OnAntiAlias2d( GtkWidget *widget, gpointer data ){ + portals.aa_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ) ? true : false; - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D ); + } } -static void OnConfig2d (GtkWidget *widget, gpointer data) -{ - portals.show_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? true : false; +static void OnConfig2d( GtkWidget *widget, gpointer data ){ + portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ) ? true : false; - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D ); + } } -static void OnColor2d (GtkWidget *widget, gpointer data) -{ - if (DoColor (&portals.color_2d) == IDOK) - { - portals.FixColors(); +static void OnColor2d( GtkWidget *widget, gpointer data ){ + if ( DoColor( &portals.color_2d ) == IDOK ) { + portals.FixColors(); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D); - } + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D ); + } + } } -static void OnConfig3d (GtkWidget *widget, gpointer data) -{ - portals.show_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? true : false; +static void OnConfig3d( GtkWidget *widget, gpointer data ){ + portals.show_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ) ? true : false; - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnAntiAlias3d (GtkWidget *widget, gpointer data) -{ - portals.aa_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? true : false; +static void OnAntiAlias3d( GtkWidget *widget, gpointer data ){ + portals.aa_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ) ? true : false; - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnColor3d (GtkWidget *widget, gpointer data) -{ - if (DoColor (&portals.color_3d) == IDOK) - { - portals.FixColors(); +static void OnColor3d( GtkWidget *widget, gpointer data ){ + if ( DoColor( &portals.color_3d ) == IDOK ) { + portals.FixColors(); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); - } + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } + } } -static void OnColorFog (GtkWidget *widget, gpointer data) -{ - if (DoColor (&portals.color_fog) == IDOK) - { - portals.FixColors(); +static void OnColorFog( GtkWidget *widget, gpointer data ){ + if ( DoColor( &portals.color_fog ) == IDOK ) { + portals.FixColors(); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); - } + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } + } } -static void OnFog (GtkWidget *widget, gpointer data) -{ - portals.fog = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? true : false; +static void OnFog( GtkWidget *widget, gpointer data ){ + portals.fog = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ) ? true : false; - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnSelchangeZbuffer (GtkWidget *widget, gpointer data) -{ - portals.zbuffer = GPOINTER_TO_INT (data); +static void OnSelchangeZbuffer( GtkWidget *widget, gpointer data ){ + portals.zbuffer = GPOINTER_TO_INT( data ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnPoly (GtkWidget *widget, gpointer data) -{ - portals.polygons = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnPoly( GtkWidget *widget, gpointer data ){ + portals.polygons = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnLines (GtkWidget *widget, gpointer data) -{ - portals.lines = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnLines( GtkWidget *widget, gpointer data ){ + portals.lines = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnClip (GtkWidget *widget, gpointer data) -{ - portals.clip = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? true : false; +static void OnClip( GtkWidget *widget, gpointer data ){ + portals.clip = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ) ? true : false; - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -void DoConfigDialog () -{ - GtkWidget *dlg, *hbox, *vbox, *vbox2, *button, *table, *frame; - GtkWidget *lw3slider, *lw3label, *lw2slider, *lw2label, *zlist, *menu, *item; - GtkWidget *aa2check, *aa3check, *depthcheck, *linescheck, *polyscheck; - GtkWidget *transslider, *translabel, *clipslider, *cliplabel; - GtkWidget *show2check, *show3check, *portalcheck; - int loop = 1, ret = IDCANCEL; - GtkObject *adj; - - dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), _("Portal Viewer Configuration")); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (dlg), vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - frame = gtk_frame_new (_("3D View")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); - - vbox2 = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox2); - gtk_container_add (GTK_CONTAINER (frame), vbox2); - gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); - - adj = gtk_adjustment_new (portals.width_3d, 2, 40, 1, 1, 1); - lw3slider = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (lw3slider); - gtk_box_pack_start (GTK_BOX (hbox), lw3slider, TRUE, TRUE, 0); - gtk_scale_set_draw_value (GTK_SCALE (lw3slider), FALSE); - - lw3label = gtk_label_new (""); - gtk_widget_show (lw3label); - gtk_box_pack_start (GTK_BOX (hbox), lw3label, FALSE, TRUE, 0); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScroll3d), lw3label); - - table = gtk_table_new (2, 4, FALSE); - gtk_widget_show (table); - gtk_box_pack_start (GTK_BOX (vbox2), table, TRUE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - button = gtk_button_new_with_label (_("Color")); - gtk_widget_show (button); - gtk_table_attach (GTK_TABLE (table), button, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColor3d), NULL); - - button = gtk_button_new_with_label (_("Depth Color")); - gtk_widget_show (button); - gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColorFog), NULL); - - aa3check = gtk_check_button_new_with_label ("Anti-Alias (May not work on some video cards)"); - gtk_widget_show (aa3check); - gtk_table_attach (GTK_TABLE (table), aa3check, 1, 4, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (aa3check), "toggled", GTK_SIGNAL_FUNC (OnAntiAlias3d), NULL); - - depthcheck = gtk_check_button_new_with_label (_("Depth Cue")); - gtk_widget_show (depthcheck); - gtk_table_attach (GTK_TABLE (table), depthcheck, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (depthcheck), "toggled", GTK_SIGNAL_FUNC (OnFog), NULL); - - linescheck = gtk_check_button_new_with_label (_("Lines")); - gtk_widget_show (linescheck); - gtk_table_attach (GTK_TABLE (table), linescheck, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (linescheck), "toggled", GTK_SIGNAL_FUNC (OnLines), NULL); - - polyscheck = gtk_check_button_new_with_label (_("Polygons")); - gtk_widget_show (polyscheck); - gtk_table_attach (GTK_TABLE (table), polyscheck, 3, 4, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (polyscheck), "toggled", GTK_SIGNAL_FUNC (OnPoly), NULL); - - zlist = gtk_option_menu_new (); - gtk_widget_show (zlist); - gtk_box_pack_start (GTK_BOX (vbox2), zlist, TRUE, FALSE, 0); - - menu = gtk_menu_new (); - gtk_widget_show (menu); - gtk_option_menu_set_menu (GTK_OPTION_MENU (zlist), menu); - - item = gtk_menu_item_new_with_label (_("Z-Buffer Test and Write (recommended for solid or no polygons)")); - gtk_widget_show (item); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (0)); - gtk_menu_append (GTK_MENU (menu), item); - - item = gtk_menu_item_new_with_label (_("Z-Buffer Test Only (recommended for transparent polygons)")); - gtk_widget_show (item); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (1)); - gtk_menu_append (GTK_MENU (menu), item); - - item = gtk_menu_item_new_with_label (_("Z-Buffer Off")); - gtk_widget_show (item); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (2)); - gtk_menu_append (GTK_MENU (menu), item); - - table = gtk_table_new (2, 2, FALSE); - gtk_widget_show (table); - gtk_box_pack_start (GTK_BOX (vbox2), table, TRUE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - adj = gtk_adjustment_new (portals.trans_3d, 0, 100, 1, 1, 1); - transslider = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (transslider); - gtk_table_attach (GTK_TABLE (table), transslider, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_scale_set_draw_value (GTK_SCALE (transslider), FALSE); - - translabel = gtk_label_new (""); - gtk_widget_show (translabel); - gtk_table_attach (GTK_TABLE (table), translabel, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_misc_set_alignment (GTK_MISC (translabel), 0.0, 0.0); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScrollTrans), translabel); - - adj = gtk_adjustment_new (portals.clip_range, 1, 128, 1, 1, 1); - clipslider = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (clipslider); - gtk_table_attach (GTK_TABLE (table), clipslider, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_scale_set_draw_value (GTK_SCALE (clipslider), FALSE); - - cliplabel = gtk_label_new (""); - gtk_widget_show (cliplabel); - gtk_table_attach (GTK_TABLE (table), cliplabel, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_misc_set_alignment (GTK_MISC (cliplabel), 0.0, 0.0); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScrollClip), cliplabel); - - hbox = gtk_hbox_new (TRUE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0); - - show3check = gtk_check_button_new_with_label (_("Show")); - gtk_widget_show (show3check); - gtk_box_pack_start (GTK_BOX (hbox), show3check, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (show3check), "toggled", GTK_SIGNAL_FUNC (OnConfig3d), NULL); - - portalcheck = gtk_check_button_new_with_label (_("Portal cubic clipper")); - gtk_widget_show (portalcheck); - gtk_box_pack_start (GTK_BOX (hbox), portalcheck, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (portalcheck), "toggled", GTK_SIGNAL_FUNC (OnClip), NULL); - - frame = gtk_frame_new (_("2D View")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); - - vbox2 = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox2); - gtk_container_add (GTK_CONTAINER (frame), vbox2); - gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0); - - adj = gtk_adjustment_new (portals.width_2d, 2, 40, 1, 1, 1); - lw2slider = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (lw2slider); - gtk_box_pack_start (GTK_BOX (hbox), lw2slider, TRUE, TRUE, 0); - gtk_scale_set_draw_value (GTK_SCALE (lw2slider), FALSE); - - lw2label = gtk_label_new (""); - gtk_widget_show (lw2label); - gtk_box_pack_start (GTK_BOX (hbox), lw2label, FALSE, TRUE, 0); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScroll2d), lw2label); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0); - - button = gtk_button_new_with_label (_("Color")); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColor2d), NULL); - gtk_widget_set_usize (button, 60, -2); - - aa2check = gtk_check_button_new_with_label (_("Anti-Alias (May not work on some video cards)")); - gtk_widget_show (aa2check); - gtk_box_pack_start (GTK_BOX (hbox), aa2check, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (aa2check), "toggled", GTK_SIGNAL_FUNC (OnAntiAlias2d), NULL); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0); - - show2check = gtk_check_button_new_with_label (_("Show")); - gtk_widget_show (show2check); - gtk_box_pack_start (GTK_BOX (hbox), show2check, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (show2check), "toggled", GTK_SIGNAL_FUNC (OnConfig2d), NULL); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - button = gtk_button_new_with_label (_("OK")); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_set_usize (button, 60, -2); - - // initialize dialog - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show2check), portals.show_2d); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aa2check), portals.aa_2d); - Set2DText (lw2label); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show3check), portals.show_3d); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (depthcheck), portals.fog); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (polyscheck), portals.polygons); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linescheck), portals.lines); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aa3check), portals.aa_3d); - gtk_option_menu_set_history (GTK_OPTION_MENU (zlist), portals.zbuffer); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (portalcheck), portals.clip); - - Set3DText (lw3label); - Set3DTransText (translabel); - SetClipText (cliplabel); - - gtk_grab_add (dlg); - gtk_widget_show (dlg); - - while (loop) - gtk_main_iteration (); - - gtk_grab_remove (dlg); - gtk_widget_destroy (dlg); +void DoConfigDialog(){ + GtkWidget *dlg, *hbox, *vbox, *vbox2, *button, *table, *frame; + GtkWidget *lw3slider, *lw3label, *lw2slider, *lw2label, *zlist, *menu, *item; + GtkWidget *aa2check, *aa3check, *depthcheck, *linescheck, *polyscheck; + GtkWidget *transslider, *translabel, *clipslider, *cliplabel; + GtkWidget *show2check, *show3check, *portalcheck; + int loop = 1, ret = IDCANCEL; + GtkObject *adj; + + dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( dlg ), _( "Portal Viewer Configuration" ) ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); + g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); + + vbox = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox ); + gtk_container_add( GTK_CONTAINER( dlg ), vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + frame = gtk_frame_new( _( "3D View" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, TRUE, TRUE, 0 ); + + vbox2 = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox2 ); + gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, TRUE, 0 ); + + adj = gtk_adjustment_new( portals.width_3d, 2, 40, 1, 1, 1 ); + lw3slider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( lw3slider ); + gtk_box_pack_start( GTK_BOX( hbox ), lw3slider, TRUE, TRUE, 0 ); + gtk_scale_set_draw_value( GTK_SCALE( lw3slider ), FALSE ); + + lw3label = gtk_label_new( "" ); + gtk_widget_show( lw3label ); + gtk_box_pack_start( GTK_BOX( hbox ), lw3label, FALSE, TRUE, 0 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScroll3d ), lw3label ); + + table = gtk_table_new( 2, 4, FALSE ); + gtk_widget_show( table ); + gtk_box_pack_start( GTK_BOX( vbox2 ), table, TRUE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + button = gtk_button_new_with_label( _( "Color" ) ); + gtk_widget_show( button ); + gtk_table_attach( GTK_TABLE( table ), button, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColor3d ), NULL ); + + button = gtk_button_new_with_label( _( "Depth Color" ) ); + gtk_widget_show( button ); + gtk_table_attach( GTK_TABLE( table ), button, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColorFog ), NULL ); + + aa3check = gtk_check_button_new_with_label( "Anti-Alias (May not work on some video cards)" ); + gtk_widget_show( aa3check ); + gtk_table_attach( GTK_TABLE( table ), aa3check, 1, 4, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( aa3check ), "toggled", GTK_SIGNAL_FUNC( OnAntiAlias3d ), NULL ); + + depthcheck = gtk_check_button_new_with_label( _( "Depth Cue" ) ); + gtk_widget_show( depthcheck ); + gtk_table_attach( GTK_TABLE( table ), depthcheck, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( depthcheck ), "toggled", GTK_SIGNAL_FUNC( OnFog ), NULL ); + + linescheck = gtk_check_button_new_with_label( _( "Lines" ) ); + gtk_widget_show( linescheck ); + gtk_table_attach( GTK_TABLE( table ), linescheck, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( linescheck ), "toggled", GTK_SIGNAL_FUNC( OnLines ), NULL ); + + polyscheck = gtk_check_button_new_with_label( _( "Polygons" ) ); + gtk_widget_show( polyscheck ); + gtk_table_attach( GTK_TABLE( table ), polyscheck, 3, 4, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( polyscheck ), "toggled", GTK_SIGNAL_FUNC( OnPoly ), NULL ); + + zlist = gtk_option_menu_new(); + gtk_widget_show( zlist ); + gtk_box_pack_start( GTK_BOX( vbox2 ), zlist, TRUE, FALSE, 0 ); + + menu = gtk_menu_new(); + gtk_widget_show( menu ); + gtk_option_menu_set_menu( GTK_OPTION_MENU( zlist ), menu ); + + item = gtk_menu_item_new_with_label( _( "Z-Buffer Test and Write (recommended for solid or no polygons)" ) ); + gtk_widget_show( item ); + gtk_signal_connect( GTK_OBJECT( item ), "activate", + GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 0 ) ); + gtk_menu_append( GTK_MENU( menu ), item ); + + item = gtk_menu_item_new_with_label( _( "Z-Buffer Test Only (recommended for transparent polygons)" ) ); + gtk_widget_show( item ); + gtk_signal_connect( GTK_OBJECT( item ), "activate", + GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 1 ) ); + gtk_menu_append( GTK_MENU( menu ), item ); + + item = gtk_menu_item_new_with_label( _( "Z-Buffer Off" ) ); + gtk_widget_show( item ); + gtk_signal_connect( GTK_OBJECT( item ), "activate", + GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 2 ) ); + gtk_menu_append( GTK_MENU( menu ), item ); + + table = gtk_table_new( 2, 2, FALSE ); + gtk_widget_show( table ); + gtk_box_pack_start( GTK_BOX( vbox2 ), table, TRUE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + adj = gtk_adjustment_new( portals.trans_3d, 0, 100, 1, 1, 1 ); + transslider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( transslider ); + gtk_table_attach( GTK_TABLE( table ), transslider, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_scale_set_draw_value( GTK_SCALE( transslider ), FALSE ); + + translabel = gtk_label_new( "" ); + gtk_widget_show( translabel ); + gtk_table_attach( GTK_TABLE( table ), translabel, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( translabel ), 0.0, 0.0 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScrollTrans ), translabel ); + + adj = gtk_adjustment_new( portals.clip_range, 1, 128, 1, 1, 1 ); + clipslider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( clipslider ); + gtk_table_attach( GTK_TABLE( table ), clipslider, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_scale_set_draw_value( GTK_SCALE( clipslider ), FALSE ); + + cliplabel = gtk_label_new( "" ); + gtk_widget_show( cliplabel ); + gtk_table_attach( GTK_TABLE( table ), cliplabel, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( cliplabel ), 0.0, 0.0 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScrollClip ), cliplabel ); + + hbox = gtk_hbox_new( TRUE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 ); + + show3check = gtk_check_button_new_with_label( _( "Show" ) ); + gtk_widget_show( show3check ); + gtk_box_pack_start( GTK_BOX( hbox ), show3check, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( show3check ), "toggled", GTK_SIGNAL_FUNC( OnConfig3d ), NULL ); + + portalcheck = gtk_check_button_new_with_label( _( "Portal cubic clipper" ) ); + gtk_widget_show( portalcheck ); + gtk_box_pack_start( GTK_BOX( hbox ), portalcheck, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( portalcheck ), "toggled", GTK_SIGNAL_FUNC( OnClip ), NULL ); + + frame = gtk_frame_new( _( "2D View" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, TRUE, TRUE, 0 ); + + vbox2 = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox2 ); + gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 ); + + adj = gtk_adjustment_new( portals.width_2d, 2, 40, 1, 1, 1 ); + lw2slider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( lw2slider ); + gtk_box_pack_start( GTK_BOX( hbox ), lw2slider, TRUE, TRUE, 0 ); + gtk_scale_set_draw_value( GTK_SCALE( lw2slider ), FALSE ); + + lw2label = gtk_label_new( "" ); + gtk_widget_show( lw2label ); + gtk_box_pack_start( GTK_BOX( hbox ), lw2label, FALSE, TRUE, 0 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScroll2d ), lw2label ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 ); + + button = gtk_button_new_with_label( _( "Color" ) ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColor2d ), NULL ); + gtk_widget_set_usize( button, 60, -2 ); + + aa2check = gtk_check_button_new_with_label( _( "Anti-Alias (May not work on some video cards)" ) ); + gtk_widget_show( aa2check ); + gtk_box_pack_start( GTK_BOX( hbox ), aa2check, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( aa2check ), "toggled", GTK_SIGNAL_FUNC( OnAntiAlias2d ), NULL ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 ); + + show2check = gtk_check_button_new_with_label( _( "Show" ) ); + gtk_widget_show( show2check ); + gtk_box_pack_start( GTK_BOX( hbox ), show2check, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( show2check ), "toggled", GTK_SIGNAL_FUNC( OnConfig2d ), NULL ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + + button = gtk_button_new_with_label( _( "OK" ) ); + gtk_widget_show( button ); + gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_set_usize( button, 60, -2 ); + + // initialize dialog + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( show2check ), portals.show_2d ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( aa2check ), portals.aa_2d ); + Set2DText( lw2label ); + + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( show3check ), portals.show_3d ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( depthcheck ), portals.fog ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( polyscheck ), portals.polygons ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( linescheck ), portals.lines ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( aa3check ), portals.aa_3d ); + gtk_option_menu_set_history( GTK_OPTION_MENU( zlist ), portals.zbuffer ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( portalcheck ), portals.clip ); + + Set3DText( lw3label ); + Set3DTransText( translabel ); + SetClipText( cliplabel ); + + gtk_grab_add( dlg ); + gtk_widget_show( dlg ); + + while ( loop ) + gtk_main_iteration(); + + gtk_grab_remove( dlg ); + gtk_widget_destroy( dlg ); } diff --git a/contrib/prtview/LoadPortalFileDialog.cpp b/contrib/prtview/LoadPortalFileDialog.cpp index 8d6b5318..bd0439e3 100644 --- a/contrib/prtview/LoadPortalFileDialog.cpp +++ b/contrib/prtview/LoadPortalFileDialog.cpp @@ -1,21 +1,21 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ // LoadPortalFileDialog.cpp : implementation file // @@ -28,170 +28,163 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //static char THIS_FILE[] = __FILE__; #endif -static void dialog_button_callback (GtkWidget *widget, gpointer data) -{ - GtkWidget *parent; - int *loop, *ret; +static void dialog_button_callback( GtkWidget *widget, gpointer data ){ + GtkWidget *parent; + int *loop, *ret; - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - ret = (int*)g_object_get_data (G_OBJECT (parent), "ret"); + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" ); - *loop = 0; - *ret = (int)data; + *loop = 0; + *ret = (int)data; } -static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data) -{ - int *loop; +static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){ + int *loop; - gtk_widget_hide (widget); - loop = (int*)g_object_get_data (G_OBJECT (widget), "loop"); - *loop = 0; + gtk_widget_hide( widget ); + loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" ); + *loop = 0; - return TRUE; + return TRUE; } -static void file_sel_callback (GtkWidget *widget, gpointer data) -{ - GtkWidget *parent; - int *loop; - char **filename; - - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - filename = (char**)g_object_get_data (G_OBJECT (parent), "filename"); - - *loop = 0; - if ((int)data == IDOK) - *filename = g_strdup (gtk_file_selection_get_filename (GTK_FILE_SELECTION (parent))); +static void file_sel_callback( GtkWidget *widget, gpointer data ){ + GtkWidget *parent; + int *loop; + char **filename; + + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + filename = (char**)g_object_get_data( G_OBJECT( parent ), "filename" ); + + *loop = 0; + if ( (int)data == IDOK ) { + *filename = g_strdup( gtk_file_selection_get_filename( GTK_FILE_SELECTION( parent ) ) ); + } } -static void change_clicked (GtkWidget *widget, gpointer data) -{ - GtkWidget* file_sel; - char* filename = NULL; - int loop = 1; - - file_sel = gtk_file_selection_new ("Locate portal (.prt) file"); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->ok_button), "clicked", - GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDOK)); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->cancel_button), "clicked", - GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_signal_connect (GTK_OBJECT (file_sel), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (file_sel)); - - g_object_set_data (G_OBJECT (file_sel), "loop", &loop); - g_object_set_data (G_OBJECT (file_sel), "filename", &filename); - gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_sel), portals.fn); - - gtk_grab_add (file_sel); - gtk_widget_show (file_sel); - - while (loop) - gtk_main_iteration (); - - gtk_grab_remove (file_sel); - gtk_widget_destroy (file_sel); - - if (filename != NULL) - { - strcpy (portals.fn, filename); - gtk_entry_set_text (GTK_ENTRY (data), filename); - g_free (filename); - } +static void change_clicked( GtkWidget *widget, gpointer data ){ + GtkWidget* file_sel; + char* filename = NULL; + int loop = 1; + + file_sel = gtk_file_selection_new( "Locate portal (.prt) file" ); + gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( file_sel )->ok_button ), "clicked", + GTK_SIGNAL_FUNC( file_sel_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( file_sel )->cancel_button ), "clicked", + GTK_SIGNAL_FUNC( file_sel_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_signal_connect( GTK_OBJECT( file_sel ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION( file_sel ) ); + + g_object_set_data( G_OBJECT( file_sel ), "loop", &loop ); + g_object_set_data( G_OBJECT( file_sel ), "filename", &filename ); + gtk_file_selection_set_filename( GTK_FILE_SELECTION( file_sel ), portals.fn ); + + gtk_grab_add( file_sel ); + gtk_widget_show( file_sel ); + + while ( loop ) + gtk_main_iteration(); + + gtk_grab_remove( file_sel ); + gtk_widget_destroy( file_sel ); + + if ( filename != NULL ) { + strcpy( portals.fn, filename ); + gtk_entry_set_text( GTK_ENTRY( data ), filename ); + g_free( filename ); + } } -int DoLoadPortalFileDialog () -{ - GtkWidget *dlg, *vbox, *hbox, *button, *entry, *check2d, *check3d; - int loop = 1, ret = IDCANCEL; - - dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), "Load .prt"); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (dlg), vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_entry_set_editable (GTK_ENTRY (entry), FALSE); - gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - check3d = gtk_check_button_new_with_label ("Show 3D"); - gtk_widget_show (check3d); - gtk_box_pack_start (GTK_BOX (hbox), check3d, FALSE, FALSE, 0); - - check2d = gtk_check_button_new_with_label ("Show 2D"); - gtk_widget_show (check2d); - gtk_box_pack_start (GTK_BOX (hbox), check2d, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("Change"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (change_clicked), entry); - gtk_widget_set_usize (button, 60, -2); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("Cancel"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_set_usize (button, 60, -2); - - button = gtk_button_new_with_label ("OK"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_set_usize (button, 60, -2); - - char *fn = g_FuncTable.m_pfnGetMapName(); - strcpy (portals.fn, fn); - fn = strrchr (portals.fn, '.'); - if (fn != NULL) - { - *fn = '\0'; - strcat (portals.fn, ".prt"); - } - - gtk_entry_set_text (GTK_ENTRY (entry), portals.fn); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check2d), portals.show_2d); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check3d), portals.show_3d); - - gtk_grab_add (dlg); - gtk_widget_show (dlg); - - while (loop) - gtk_main_iteration (); - - if (ret == IDOK) - { - portals.Purge(); - - portals.show_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check3d)) ? true : false; - portals.show_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check2d)) ? true : false; - } - - gtk_grab_remove (dlg); - gtk_widget_destroy (dlg); - - return ret; +int DoLoadPortalFileDialog(){ + GtkWidget *dlg, *vbox, *hbox, *button, *entry, *check2d, *check3d; + int loop = 1, ret = IDCANCEL; + + dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( dlg ), "Load .prt" ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); + g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); + + vbox = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox ); + gtk_container_add( GTK_CONTAINER( dlg ), vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_entry_set_editable( GTK_ENTRY( entry ), FALSE ); + gtk_box_pack_start( GTK_BOX( vbox ), entry, FALSE, FALSE, 0 ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + + check3d = gtk_check_button_new_with_label( "Show 3D" ); + gtk_widget_show( check3d ); + gtk_box_pack_start( GTK_BOX( hbox ), check3d, FALSE, FALSE, 0 ); + + check2d = gtk_check_button_new_with_label( "Show 2D" ); + gtk_widget_show( check2d ); + gtk_box_pack_start( GTK_BOX( hbox ), check2d, FALSE, FALSE, 0 ); + + button = gtk_button_new_with_label( "Change" ); + gtk_widget_show( button ); + gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( change_clicked ), entry ); + gtk_widget_set_usize( button, 60, -2 ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + + button = gtk_button_new_with_label( "Cancel" ); + gtk_widget_show( button ); + gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_set_usize( button, 60, -2 ); + + button = gtk_button_new_with_label( "OK" ); + gtk_widget_show( button ); + gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_set_usize( button, 60, -2 ); + + char *fn = g_FuncTable.m_pfnGetMapName(); + strcpy( portals.fn, fn ); + fn = strrchr( portals.fn, '.' ); + if ( fn != NULL ) { + *fn = '\0'; + strcat( portals.fn, ".prt" ); + } + + gtk_entry_set_text( GTK_ENTRY( entry ), portals.fn ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check2d ), portals.show_2d ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check3d ), portals.show_3d ); + + gtk_grab_add( dlg ); + gtk_widget_show( dlg ); + + while ( loop ) + gtk_main_iteration(); + + if ( ret == IDOK ) { + portals.Purge(); + + portals.show_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check3d ) ) ? true : false; + portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2d ) ) ? true : false; + } + + gtk_grab_remove( dlg ); + gtk_widget_destroy( dlg ); + + return ret; } diff --git a/contrib/prtview/LoadPortalFileDialog.h b/contrib/prtview/LoadPortalFileDialog.h index 433d5708..9bee126b 100644 --- a/contrib/prtview/LoadPortalFileDialog.h +++ b/contrib/prtview/LoadPortalFileDialog.h @@ -1,23 +1,23 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ -#if !defined(AFX_LOADPORTALFILEDIALOG_H__6BEDE392_1FDC_11D4_BFF7_204C4F4F5020__INCLUDED_) +#if !defined( AFX_LOADPORTALFILEDIALOG_H__6BEDE392_1FDC_11D4_BFF7_204C4F4F5020__INCLUDED_ ) #define AFX_LOADPORTALFILEDIALOG_H__6BEDE392_1FDC_11D4_BFF7_204C4F4F5020__INCLUDED_ #if _MSC_VER >= 1000 diff --git a/contrib/prtview/gtkdlgs.cpp b/contrib/prtview/gtkdlgs.cpp index 2de52c06..05a5cfd3 100644 --- a/contrib/prtview/gtkdlgs.cpp +++ b/contrib/prtview/gtkdlgs.cpp @@ -1,21 +1,21 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ // // PrtView dialogs done with GTK+ @@ -27,706 +27,688 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // ============================================================================= // Static functions -static void dialog_button_callback (GtkWidget *widget, gpointer data) -{ - GtkWidget *parent; - int *loop, *ret; +static void dialog_button_callback( GtkWidget *widget, gpointer data ){ + GtkWidget *parent; + int *loop, *ret; - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - ret = (int*)g_object_get_data (G_OBJECT (parent), "ret"); + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" ); - *loop = 0; - *ret = (int)data; + *loop = 0; + *ret = (int)data; } -static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data) -{ - int *loop; +static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){ + int *loop; - gtk_widget_hide (widget); - loop = (int*)g_object_get_data (G_OBJECT (widget), "loop"); - *loop = 0; + gtk_widget_hide( widget ); + loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" ); + *loop = 0; - return TRUE; + return TRUE; } -static void file_sel_callback (GtkWidget *widget, gpointer data) -{ - GtkWidget *parent; - int *loop; - char **filename; +static void file_sel_callback( GtkWidget *widget, gpointer data ){ + GtkWidget *parent; + int *loop; + char **filename; - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - filename = (char**)g_object_get_data (G_OBJECT (parent), "filename"); + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + filename = (char**)g_object_get_data( G_OBJECT( parent ), "filename" ); - *loop = 0; - if ((int)data == IDOK) - *filename = g_strdup (gtk_file_selection_get_filename (GTK_FILE_SELECTION (parent))); + *loop = 0; + if ( (int)data == IDOK ) { + *filename = g_strdup( gtk_file_selection_get_filename( GTK_FILE_SELECTION( parent ) ) ); + } } -static void change_clicked (GtkWidget *widget, gpointer data) -{ - GtkWidget* file_sel; - char* filename = NULL; - int loop = 1; - - file_sel = gtk_file_selection_new ("Locate portal (.prt) file"); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->ok_button), "clicked", - GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDOK)); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->cancel_button), "clicked", - GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_signal_connect (GTK_OBJECT (file_sel), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (file_sel)); - - g_object_set_data (G_OBJECT (file_sel), "loop", &loop); - g_object_set_data (G_OBJECT (file_sel), "filename", &filename); - gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_sel), portals.fn); - - gtk_grab_add (file_sel); - gtk_widget_show (file_sel); - - while (loop) - gtk_main_iteration (); - - gtk_grab_remove (file_sel); - gtk_widget_destroy (file_sel); - - if (filename != NULL) - { - strcpy (portals.fn, filename); - gtk_entry_set_text (GTK_ENTRY (data), filename); - g_free (filename); - } +static void change_clicked( GtkWidget *widget, gpointer data ){ + GtkWidget* file_sel; + char* filename = NULL; + int loop = 1; + + file_sel = gtk_file_selection_new( "Locate portal (.prt) file" ); + gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( file_sel )->ok_button ), "clicked", + GTK_SIGNAL_FUNC( file_sel_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_signal_connect( GTK_OBJECT( GTK_FILE_SELECTION( file_sel )->cancel_button ), "clicked", + GTK_SIGNAL_FUNC( file_sel_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_signal_connect( GTK_OBJECT( file_sel ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION( file_sel ) ); + + g_object_set_data( G_OBJECT( file_sel ), "loop", &loop ); + g_object_set_data( G_OBJECT( file_sel ), "filename", &filename ); + gtk_file_selection_set_filename( GTK_FILE_SELECTION( file_sel ), portals.fn ); + + gtk_grab_add( file_sel ); + gtk_widget_show( file_sel ); + + while ( loop ) + gtk_main_iteration(); + + gtk_grab_remove( file_sel ); + gtk_widget_destroy( file_sel ); + + if ( filename != NULL ) { + strcpy( portals.fn, filename ); + gtk_entry_set_text( GTK_ENTRY( data ), filename ); + g_free( filename ); + } } // ============================================================================= // LoadPortalFile dialog -int DoLoadPortalFileDialog () -{ - GtkWidget *dlg, *vbox, *hbox, *button, *entry, *check2d, *check3d; - int loop = 1, ret = IDCANCEL; - - dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), "Load .prt"); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (dlg), vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_entry_set_editable (GTK_ENTRY (entry), FALSE); - gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - check3d = gtk_check_button_new_with_label ("Show 3D"); - gtk_widget_show (check3d); - gtk_box_pack_start (GTK_BOX (hbox), check3d, FALSE, FALSE, 0); - - check2d = gtk_check_button_new_with_label ("Show 2D"); - gtk_widget_show (check2d); - gtk_box_pack_start (GTK_BOX (hbox), check2d, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("Change"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (change_clicked), entry); - gtk_widget_set_usize (button, 60, -2); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("Cancel"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_set_usize (button, 60, -2); - - button = gtk_button_new_with_label ("OK"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_set_usize (button, 60, -2); - - char *fn = g_IBSPTable.m_pfnGetMapName(); - strcpy (portals.fn, fn); - fn = strrchr (portals.fn, '.'); - if (fn != NULL) - { - *fn = '\0'; - strcat (portals.fn, ".prt"); - } - - gtk_entry_set_text (GTK_ENTRY (entry), portals.fn); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check2d), portals.show_2d); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check3d), portals.show_3d); - - gtk_grab_add (dlg); - gtk_widget_show (dlg); - - while (loop) - gtk_main_iteration (); - - if (ret == IDOK) - { - portals.Purge(); - - portals.show_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check3d)); - portals.show_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check2d)); - } - - gtk_grab_remove (dlg); - gtk_widget_destroy (dlg); - - return ret; +int DoLoadPortalFileDialog(){ + GtkWidget *dlg, *vbox, *hbox, *button, *entry, *check2d, *check3d; + int loop = 1, ret = IDCANCEL; + + dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( dlg ), "Load .prt" ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); + g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); + + vbox = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox ); + gtk_container_add( GTK_CONTAINER( dlg ), vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + entry = gtk_entry_new(); + gtk_widget_show( entry ); + gtk_entry_set_editable( GTK_ENTRY( entry ), FALSE ); + gtk_box_pack_start( GTK_BOX( vbox ), entry, FALSE, FALSE, 0 ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + + check3d = gtk_check_button_new_with_label( "Show 3D" ); + gtk_widget_show( check3d ); + gtk_box_pack_start( GTK_BOX( hbox ), check3d, FALSE, FALSE, 0 ); + + check2d = gtk_check_button_new_with_label( "Show 2D" ); + gtk_widget_show( check2d ); + gtk_box_pack_start( GTK_BOX( hbox ), check2d, FALSE, FALSE, 0 ); + + button = gtk_button_new_with_label( "Change" ); + gtk_widget_show( button ); + gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( change_clicked ), entry ); + gtk_widget_set_usize( button, 60, -2 ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + + button = gtk_button_new_with_label( "Cancel" ); + gtk_widget_show( button ); + gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + gtk_widget_set_usize( button, 60, -2 ); + + button = gtk_button_new_with_label( "OK" ); + gtk_widget_show( button ); + gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_set_usize( button, 60, -2 ); + + char *fn = g_IBSPTable.m_pfnGetMapName(); + strcpy( portals.fn, fn ); + fn = strrchr( portals.fn, '.' ); + if ( fn != NULL ) { + *fn = '\0'; + strcat( portals.fn, ".prt" ); + } + + gtk_entry_set_text( GTK_ENTRY( entry ), portals.fn ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check2d ), portals.show_2d ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check3d ), portals.show_3d ); + + gtk_grab_add( dlg ); + gtk_widget_show( dlg ); + + while ( loop ) + gtk_main_iteration(); + + if ( ret == IDOK ) { + portals.Purge(); + + portals.show_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check3d ) ); + portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2d ) ); + } + + gtk_grab_remove( dlg ); + gtk_widget_destroy( dlg ); + + return ret; } // ============================================================================= // About dialog -void DoAboutDlg () -{ - GtkWidget *dlg, *hbox, *vbox, *button, *label; - int loop = 1, ret = IDCANCEL; - - dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), "About Portal Viewer"); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_widget_show (hbox); - gtk_container_add (GTK_CONTAINER (dlg), hbox); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 10); - - label = gtk_label_new ("Version 1.000\n\n" - "Gtk port by Leonardo Zide\nleo@lokigames.com\n\n" - "Written by Geoffrey DeWan\ngdewan@prairienet.org"); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - - vbox = gtk_vbox_new (FALSE, 0); - gtk_widget_show (vbox); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("OK"); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_set_usize (button, 60, -2); - - gtk_grab_add (dlg); - gtk_widget_show (dlg); - - while (loop) - gtk_main_iteration (); - - gtk_grab_remove (dlg); - gtk_widget_destroy (dlg); +void DoAboutDlg(){ + GtkWidget *dlg, *hbox, *vbox, *button, *label; + int loop = 1, ret = IDCANCEL; + + dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( dlg ), "About Portal Viewer" ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); + g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); + + hbox = gtk_hbox_new( FALSE, 10 ); + gtk_widget_show( hbox ); + gtk_container_add( GTK_CONTAINER( dlg ), hbox ); + gtk_container_set_border_width( GTK_CONTAINER( hbox ), 10 ); + + label = gtk_label_new( "Version 1.000\n\n" + "Gtk port by Leonardo Zide\nleo@lokigames.com\n\n" + "Written by Geoffrey DeWan\ngdewan@prairienet.org" ); + gtk_widget_show( label ); + gtk_box_pack_start( GTK_BOX( hbox ), label, TRUE, TRUE, 0 ); + gtk_label_set_justify( GTK_LABEL( label ), GTK_JUSTIFY_LEFT ); + + vbox = gtk_vbox_new( FALSE, 0 ); + gtk_widget_show( vbox ); + gtk_box_pack_start( GTK_BOX( hbox ), vbox, FALSE, FALSE, 0 ); + + button = gtk_button_new_with_label( "OK" ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( vbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_set_usize( button, 60, -2 ); + + gtk_grab_add( dlg ); + gtk_widget_show( dlg ); + + while ( loop ) + gtk_main_iteration(); + + gtk_grab_remove( dlg ); + gtk_widget_destroy( dlg ); } // ============================================================================= // Config dialog -static int DoColor (COLORREF *c) -{ - GtkWidget* dlg; - double clr[3]; - int loop = 1, ret = IDCANCEL; - - clr[0] = ((double)GetRValue (*c)) / 255.0; - clr[1] = ((double)GetGValue (*c)) / 255.0; - clr[2] = ((double)GetBValue (*c)) / 255.0; - - dlg = gtk_color_selection_dialog_new ("Choose Color"); - gtk_color_selection_set_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dlg)->colorsel), clr); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->ok_button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->cancel_button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - gtk_widget_show(dlg); - gtk_grab_add(dlg); - - while (loop) - gtk_main_iteration (); - - gtk_color_selection_get_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dlg)->colorsel), clr); - - gtk_grab_remove (dlg); - gtk_widget_destroy (dlg); - - if (ret == IDOK) - { - *c = RGB (clr[0]*255, clr[1]*255, clr[2]*255); - } - - return ret; +static int DoColor( COLORREF *c ){ + GtkWidget* dlg; + double clr[3]; + int loop = 1, ret = IDCANCEL; + + clr[0] = ( (double)GetRValue( *c ) ) / 255.0; + clr[1] = ( (double)GetGValue( *c ) ) / 255.0; + clr[2] = ( (double)GetBValue( *c ) ) / 255.0; + + dlg = gtk_color_selection_dialog_new( "Choose Color" ); + gtk_color_selection_set_color( GTK_COLOR_SELECTION( GTK_COLOR_SELECTION_DIALOG( dlg )->colorsel ), clr ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + gtk_signal_connect( GTK_OBJECT( GTK_COLOR_SELECTION_DIALOG( dlg )->ok_button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_signal_connect( GTK_OBJECT( GTK_COLOR_SELECTION_DIALOG( dlg )->cancel_button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); + g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); + g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); + + gtk_widget_show( dlg ); + gtk_grab_add( dlg ); + + while ( loop ) + gtk_main_iteration(); + + gtk_color_selection_get_color( GTK_COLOR_SELECTION( GTK_COLOR_SELECTION_DIALOG( dlg )->colorsel ), clr ); + + gtk_grab_remove( dlg ); + gtk_widget_destroy( dlg ); + + if ( ret == IDOK ) { + *c = RGB( clr[0] * 255, clr[1] * 255, clr[2] * 255 ); + } + + return ret; } -static void Set2DText (GtkWidget* label) -{ - char s[40]; +static void Set2DText( GtkWidget* label ){ + char s[40]; - sprintf(s, "Line Width = %6.3f", portals.width_2d * 0.5f); + sprintf( s, "Line Width = %6.3f", portals.width_2d * 0.5f ); - gtk_label_set_text (GTK_LABEL (label), s); + gtk_label_set_text( GTK_LABEL( label ), s ); } -static void Set3DText (GtkWidget* label) -{ - char s[40]; +static void Set3DText( GtkWidget* label ){ + char s[40]; - sprintf(s, "Line Width = %6.3f", portals.width_3d * 0.5f); + sprintf( s, "Line Width = %6.3f", portals.width_3d * 0.5f ); - gtk_label_set_text (GTK_LABEL (label), s); + gtk_label_set_text( GTK_LABEL( label ), s ); } -static void Set3DTransText (GtkWidget* label) -{ - char s[40]; +static void Set3DTransText( GtkWidget* label ){ + char s[40]; - sprintf(s, "Polygon transparency = %d%%", (int)portals.trans_3d); + sprintf( s, "Polygon transparency = %d%%", (int)portals.trans_3d ); - gtk_label_set_text (GTK_LABEL (label), s); + gtk_label_set_text( GTK_LABEL( label ), s ); } -static void SetClipText (GtkWidget* label) -{ - char s[40]; +static void SetClipText( GtkWidget* label ){ + char s[40]; - sprintf(s, "Cubic clip range = %d", (int)portals.clip_range * 64); + sprintf( s, "Cubic clip range = %d", (int)portals.clip_range * 64 ); - gtk_label_set_text (GTK_LABEL (label), s); + gtk_label_set_text( GTK_LABEL( label ), s ); } -static void OnScroll2d (GtkAdjustment *adj, gpointer data) -{ - portals.width_2d = adj->value; - Set2DText (GTK_WIDGET (data)); +static void OnScroll2d( GtkAdjustment *adj, gpointer data ){ + portals.width_2d = adj->value; + Set2DText( GTK_WIDGET( data ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D ); + } } -static void OnScroll3d (GtkAdjustment *adj, gpointer data) -{ - portals.width_3d = adj->value; - Set3DText (GTK_WIDGET (data)); +static void OnScroll3d( GtkAdjustment *adj, gpointer data ){ + portals.width_3d = adj->value; + Set3DText( GTK_WIDGET( data ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnScrollTrans (GtkAdjustment *adj, gpointer data) -{ - portals.trans_3d = adj->value; - Set3DTransText (GTK_WIDGET (data)); +static void OnScrollTrans( GtkAdjustment *adj, gpointer data ){ + portals.trans_3d = adj->value; + Set3DTransText( GTK_WIDGET( data ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnScrollClip (GtkAdjustment *adj, gpointer data) -{ - portals.clip_range = adj->value; - SetClipText (GTK_WIDGET (data)); +static void OnScrollClip( GtkAdjustment *adj, gpointer data ){ + portals.clip_range = adj->value; + SetClipText( GTK_WIDGET( data ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnAntiAlias2d (GtkWidget *widget, gpointer data) -{ - portals.aa_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnAntiAlias2d( GtkWidget *widget, gpointer data ){ + portals.aa_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D ); + } } -static void OnConfig2d (GtkWidget *widget, gpointer data) -{ - portals.show_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnConfig2d( GtkWidget *widget, gpointer data ){ + portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D ); + } } -static void OnColor2d (GtkWidget *widget, gpointer data) -{ - if (DoColor (&portals.color_2d) == IDOK) - { - portals.FixColors(); +static void OnColor2d( GtkWidget *widget, gpointer data ){ + if ( DoColor( &portals.color_2d ) == IDOK ) { + portals.FixColors(); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D); - } + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_2D ); + } + } } -static void OnConfig3d (GtkWidget *widget, gpointer data) -{ - portals.show_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnConfig3d( GtkWidget *widget, gpointer data ){ + portals.show_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnAntiAlias3d (GtkWidget *widget, gpointer data) -{ - portals.aa_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnAntiAlias3d( GtkWidget *widget, gpointer data ){ + portals.aa_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnColor3d (GtkWidget *widget, gpointer data) -{ - if (DoColor (&portals.color_3d) == IDOK) - { - portals.FixColors(); +static void OnColor3d( GtkWidget *widget, gpointer data ){ + if ( DoColor( &portals.color_3d ) == IDOK ) { + portals.FixColors(); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); - } + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } + } } -static void OnColorFog (GtkWidget *widget, gpointer data) -{ - if (DoColor (&portals.color_fog) == IDOK) - { - portals.FixColors(); +static void OnColorFog( GtkWidget *widget, gpointer data ){ + if ( DoColor( &portals.color_fog ) == IDOK ) { + portals.FixColors(); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); - } + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } + } } -static void OnFog (GtkWidget *widget, gpointer data) -{ - portals.fog = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnFog( GtkWidget *widget, gpointer data ){ + portals.fog = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnSelchangeZbuffer (GtkWidget *widget, gpointer data) -{ - portals.zbuffer = GPOINTER_TO_INT (data); +static void OnSelchangeZbuffer( GtkWidget *widget, gpointer data ){ + portals.zbuffer = GPOINTER_TO_INT( data ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnPoly (GtkWidget *widget, gpointer data) -{ - portals.polygons = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnPoly( GtkWidget *widget, gpointer data ){ + portals.polygons = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnLines (GtkWidget *widget, gpointer data) -{ - portals.lines = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnLines( GtkWidget *widget, gpointer data ){ + portals.lines = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -static void OnClip (GtkWidget *widget, gpointer data) -{ - portals.clip = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); +static void OnClip( GtkWidget *widget, gpointer data ){ + portals.clip = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget ) ); - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D); + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_3D ); + } } -void DoConfigDialog () -{ - GtkWidget *dlg, *hbox, *vbox, *vbox2, *button, *table, *frame; - GtkWidget *lw3slider, *lw3label, *lw2slider, *lw2label, *zlist, *menu, *item; - GtkWidget *aa2check, *aa3check, *depthcheck, *linescheck, *polyscheck; - GtkWidget *transslider, *translabel, *clipslider, *cliplabel; - GtkWidget *show2check, *show3check, *portalcheck; - int loop = 1, ret = IDCANCEL; - GtkObject *adj; - - dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), _("Portal Viewer Configuration")); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (dlg), vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - frame = gtk_frame_new (_("3D View")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); - - vbox2 = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox2); - gtk_container_add (GTK_CONTAINER (frame), vbox2); - gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); - - adj = gtk_adjustment_new (portals.width_3d, 2, 40, 1, 1, 1); - lw3slider = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (lw3slider); - gtk_box_pack_start (GTK_BOX (hbox), lw3slider, TRUE, TRUE, 0); - gtk_scale_set_draw_value (GTK_SCALE (lw3slider), FALSE); - - lw3label = gtk_label_new (""); - gtk_widget_show (lw3label); - gtk_box_pack_start (GTK_BOX (hbox), lw3label, FALSE, TRUE, 0); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScroll3d), lw3label); - - table = gtk_table_new (2, 4, FALSE); - gtk_widget_show (table); - gtk_box_pack_start (GTK_BOX (vbox2), table, TRUE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - button = gtk_button_new_with_label (_("Color")); - gtk_widget_show (button); - gtk_table_attach (GTK_TABLE (table), button, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColor3d), NULL); - - button = gtk_button_new_with_label (_("Depth Color")); - gtk_widget_show (button); - gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColorFog), NULL); - - aa3check = gtk_check_button_new_with_label (_("Anti-Alias (May not work on some video cards)")); - gtk_widget_show (aa3check); - gtk_table_attach (GTK_TABLE (table), aa3check, 1, 4, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (aa3check), "toggled", GTK_SIGNAL_FUNC (OnAntiAlias3d), NULL); - - depthcheck = gtk_check_button_new_with_label (_("Depth Cue")); - gtk_widget_show (depthcheck); - gtk_table_attach (GTK_TABLE (table), depthcheck, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (depthcheck), "toggled", GTK_SIGNAL_FUNC (OnFog), NULL); - - linescheck = gtk_check_button_new_with_label (_("Lines")); - gtk_widget_show (linescheck); - gtk_table_attach (GTK_TABLE (table), linescheck, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (linescheck), "toggled", GTK_SIGNAL_FUNC (OnLines), NULL); - - polyscheck = gtk_check_button_new_with_label (_("Polygons")); - gtk_widget_show (polyscheck); - gtk_table_attach (GTK_TABLE (table), polyscheck, 3, 4, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_signal_connect (GTK_OBJECT (polyscheck), "toggled", GTK_SIGNAL_FUNC (OnPoly), NULL); - - zlist = gtk_option_menu_new (); - gtk_widget_show (zlist); - gtk_box_pack_start (GTK_BOX (vbox2), zlist, TRUE, FALSE, 0); - - menu = gtk_menu_new (); - gtk_widget_show (menu); - gtk_option_menu_set_menu (GTK_OPTION_MENU (zlist), menu); - - item = gtk_menu_item_new_with_label (_("Z-Buffer Test and Write (recommended for solid or no polygons)")); - gtk_widget_show (item); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (0)); - gtk_menu_append (GTK_MENU (menu), item); - - item = gtk_menu_item_new_with_label (_("Z-Buffer Test Only (recommended for transparent polygons)")); - gtk_widget_show (item); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (1)); - gtk_menu_append (GTK_MENU (menu), item); - - item = gtk_menu_item_new_with_label (_("Z-Buffer Off")); - gtk_widget_show (item); - gtk_signal_connect (GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (2)); - gtk_menu_append (GTK_MENU (menu), item); - - table = gtk_table_new (2, 2, FALSE); - gtk_widget_show (table); - gtk_box_pack_start (GTK_BOX (vbox2), table, TRUE, TRUE, 0); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - - adj = gtk_adjustment_new (portals.trans_3d, 0, 100, 1, 1, 1); - transslider = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (transslider); - gtk_table_attach (GTK_TABLE (table), transslider, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_scale_set_draw_value (GTK_SCALE (transslider), FALSE); - - translabel = gtk_label_new (""); - gtk_widget_show (translabel); - gtk_table_attach (GTK_TABLE (table), translabel, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_misc_set_alignment (GTK_MISC (translabel), 0.0, 0.0); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScrollTrans), translabel); - - adj = gtk_adjustment_new (portals.clip_range, 1, 128, 1, 1, 1); - clipslider = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (clipslider); - gtk_table_attach (GTK_TABLE (table), clipslider, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_scale_set_draw_value (GTK_SCALE (clipslider), FALSE); - - cliplabel = gtk_label_new (""); - gtk_widget_show (cliplabel); - gtk_table_attach (GTK_TABLE (table), cliplabel, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_misc_set_alignment (GTK_MISC (cliplabel), 0.0, 0.0); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScrollClip), cliplabel); - - hbox = gtk_hbox_new (TRUE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0); - - show3check = gtk_check_button_new_with_label (_("Show")); - gtk_widget_show (show3check); - gtk_box_pack_start (GTK_BOX (hbox), show3check, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (show3check), "toggled", GTK_SIGNAL_FUNC (OnConfig3d), NULL); - - portalcheck = gtk_check_button_new_with_label (_("Portal cubic clipper")); - gtk_widget_show (portalcheck); - gtk_box_pack_start (GTK_BOX (hbox), portalcheck, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (portalcheck), "toggled", GTK_SIGNAL_FUNC (OnClip), NULL); - - frame = gtk_frame_new (_("2D View")); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); - - vbox2 = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox2); - gtk_container_add (GTK_CONTAINER (frame), vbox2); - gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0); - - adj = gtk_adjustment_new (portals.width_2d, 2, 40, 1, 1, 1); - lw2slider = gtk_hscale_new (GTK_ADJUSTMENT (adj)); - gtk_widget_show (lw2slider); - gtk_box_pack_start (GTK_BOX (hbox), lw2slider, TRUE, TRUE, 0); - gtk_scale_set_draw_value (GTK_SCALE (lw2slider), FALSE); - - lw2label = gtk_label_new (""); - gtk_widget_show (lw2label); - gtk_box_pack_start (GTK_BOX (hbox), lw2label, FALSE, TRUE, 0); - gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScroll2d), lw2label); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0); - - button = gtk_button_new_with_label ("Color"); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColor2d), NULL); - gtk_widget_set_usize (button, 60, -2); - - aa2check = gtk_check_button_new_with_label ("Anti-Alias (May not work on some video cards)"); - gtk_widget_show (aa2check); - gtk_box_pack_start (GTK_BOX (hbox), aa2check, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (aa2check), "toggled", GTK_SIGNAL_FUNC (OnAntiAlias2d), NULL); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0); - - show2check = gtk_check_button_new_with_label ("Show"); - gtk_widget_show (show2check); - gtk_box_pack_start (GTK_BOX (hbox), show2check, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (show2check), "toggled", GTK_SIGNAL_FUNC (OnConfig2d), NULL); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("OK"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_set_usize (button, 60, -2); - - // initialize dialog - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show2check), portals.show_2d); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aa2check), portals.aa_2d); - Set2DText (lw2label); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show3check), portals.show_3d); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (depthcheck), portals.fog); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (polyscheck), portals.polygons); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linescheck), portals.lines); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aa3check), portals.aa_3d); - gtk_option_menu_set_history (GTK_OPTION_MENU (zlist), portals.zbuffer); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (portalcheck), portals.clip); - - Set3DText (lw3label); - Set3DTransText (translabel); - SetClipText (cliplabel); - - gtk_grab_add (dlg); - gtk_widget_show (dlg); - - while (loop) - gtk_main_iteration (); - - gtk_grab_remove (dlg); - gtk_widget_destroy (dlg); +void DoConfigDialog(){ + GtkWidget *dlg, *hbox, *vbox, *vbox2, *button, *table, *frame; + GtkWidget *lw3slider, *lw3label, *lw2slider, *lw2label, *zlist, *menu, *item; + GtkWidget *aa2check, *aa3check, *depthcheck, *linescheck, *polyscheck; + GtkWidget *transslider, *translabel, *clipslider, *cliplabel; + GtkWidget *show2check, *show3check, *portalcheck; + int loop = 1, ret = IDCANCEL; + GtkObject *adj; + + dlg = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_title( GTK_WINDOW( dlg ), _( "Portal Viewer Configuration" ) ); + gtk_signal_connect( GTK_OBJECT( dlg ), "delete_event", + GTK_SIGNAL_FUNC( dialog_delete_callback ), NULL ); + gtk_signal_connect( GTK_OBJECT( dlg ), "destroy", + GTK_SIGNAL_FUNC( gtk_widget_destroy ), NULL ); + g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); + g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); + + vbox = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox ); + gtk_container_add( GTK_CONTAINER( dlg ), vbox ); + gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); + + frame = gtk_frame_new( _( "3D View" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, TRUE, TRUE, 0 ); + + vbox2 = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox2 ); + gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, TRUE, 0 ); + + adj = gtk_adjustment_new( portals.width_3d, 2, 40, 1, 1, 1 ); + lw3slider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( lw3slider ); + gtk_box_pack_start( GTK_BOX( hbox ), lw3slider, TRUE, TRUE, 0 ); + gtk_scale_set_draw_value( GTK_SCALE( lw3slider ), FALSE ); + + lw3label = gtk_label_new( "" ); + gtk_widget_show( lw3label ); + gtk_box_pack_start( GTK_BOX( hbox ), lw3label, FALSE, TRUE, 0 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScroll3d ), lw3label ); + + table = gtk_table_new( 2, 4, FALSE ); + gtk_widget_show( table ); + gtk_box_pack_start( GTK_BOX( vbox2 ), table, TRUE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + button = gtk_button_new_with_label( _( "Color" ) ); + gtk_widget_show( button ); + gtk_table_attach( GTK_TABLE( table ), button, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColor3d ), NULL ); + + button = gtk_button_new_with_label( _( "Depth Color" ) ); + gtk_widget_show( button ); + gtk_table_attach( GTK_TABLE( table ), button, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColorFog ), NULL ); + + aa3check = gtk_check_button_new_with_label( _( "Anti-Alias (May not work on some video cards)" ) ); + gtk_widget_show( aa3check ); + gtk_table_attach( GTK_TABLE( table ), aa3check, 1, 4, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( aa3check ), "toggled", GTK_SIGNAL_FUNC( OnAntiAlias3d ), NULL ); + + depthcheck = gtk_check_button_new_with_label( _( "Depth Cue" ) ); + gtk_widget_show( depthcheck ); + gtk_table_attach( GTK_TABLE( table ), depthcheck, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( depthcheck ), "toggled", GTK_SIGNAL_FUNC( OnFog ), NULL ); + + linescheck = gtk_check_button_new_with_label( _( "Lines" ) ); + gtk_widget_show( linescheck ); + gtk_table_attach( GTK_TABLE( table ), linescheck, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( linescheck ), "toggled", GTK_SIGNAL_FUNC( OnLines ), NULL ); + + polyscheck = gtk_check_button_new_with_label( _( "Polygons" ) ); + gtk_widget_show( polyscheck ); + gtk_table_attach( GTK_TABLE( table ), polyscheck, 3, 4, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_signal_connect( GTK_OBJECT( polyscheck ), "toggled", GTK_SIGNAL_FUNC( OnPoly ), NULL ); + + zlist = gtk_option_menu_new(); + gtk_widget_show( zlist ); + gtk_box_pack_start( GTK_BOX( vbox2 ), zlist, TRUE, FALSE, 0 ); + + menu = gtk_menu_new(); + gtk_widget_show( menu ); + gtk_option_menu_set_menu( GTK_OPTION_MENU( zlist ), menu ); + + item = gtk_menu_item_new_with_label( _( "Z-Buffer Test and Write (recommended for solid or no polygons)" ) ); + gtk_widget_show( item ); + gtk_signal_connect( GTK_OBJECT( item ), "activate", + GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 0 ) ); + gtk_menu_append( GTK_MENU( menu ), item ); + + item = gtk_menu_item_new_with_label( _( "Z-Buffer Test Only (recommended for transparent polygons)" ) ); + gtk_widget_show( item ); + gtk_signal_connect( GTK_OBJECT( item ), "activate", + GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 1 ) ); + gtk_menu_append( GTK_MENU( menu ), item ); + + item = gtk_menu_item_new_with_label( _( "Z-Buffer Off" ) ); + gtk_widget_show( item ); + gtk_signal_connect( GTK_OBJECT( item ), "activate", + GTK_SIGNAL_FUNC( OnSelchangeZbuffer ), GINT_TO_POINTER( 2 ) ); + gtk_menu_append( GTK_MENU( menu ), item ); + + table = gtk_table_new( 2, 2, FALSE ); + gtk_widget_show( table ); + gtk_box_pack_start( GTK_BOX( vbox2 ), table, TRUE, TRUE, 0 ); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + + adj = gtk_adjustment_new( portals.trans_3d, 0, 100, 1, 1, 1 ); + transslider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( transslider ); + gtk_table_attach( GTK_TABLE( table ), transslider, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_scale_set_draw_value( GTK_SCALE( transslider ), FALSE ); + + translabel = gtk_label_new( "" ); + gtk_widget_show( translabel ); + gtk_table_attach( GTK_TABLE( table ), translabel, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( translabel ), 0.0, 0.0 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScrollTrans ), translabel ); + + adj = gtk_adjustment_new( portals.clip_range, 1, 128, 1, 1, 1 ); + clipslider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( clipslider ); + gtk_table_attach( GTK_TABLE( table ), clipslider, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_scale_set_draw_value( GTK_SCALE( clipslider ), FALSE ); + + cliplabel = gtk_label_new( "" ); + gtk_widget_show( cliplabel ); + gtk_table_attach( GTK_TABLE( table ), cliplabel, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_misc_set_alignment( GTK_MISC( cliplabel ), 0.0, 0.0 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScrollClip ), cliplabel ); + + hbox = gtk_hbox_new( TRUE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 ); + + show3check = gtk_check_button_new_with_label( _( "Show" ) ); + gtk_widget_show( show3check ); + gtk_box_pack_start( GTK_BOX( hbox ), show3check, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( show3check ), "toggled", GTK_SIGNAL_FUNC( OnConfig3d ), NULL ); + + portalcheck = gtk_check_button_new_with_label( _( "Portal cubic clipper" ) ); + gtk_widget_show( portalcheck ); + gtk_box_pack_start( GTK_BOX( hbox ), portalcheck, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( portalcheck ), "toggled", GTK_SIGNAL_FUNC( OnClip ), NULL ); + + frame = gtk_frame_new( _( "2D View" ) ); + gtk_widget_show( frame ); + gtk_box_pack_start( GTK_BOX( vbox ), frame, TRUE, TRUE, 0 ); + + vbox2 = gtk_vbox_new( FALSE, 5 ); + gtk_widget_show( vbox2 ); + gtk_container_add( GTK_CONTAINER( frame ), vbox2 ); + gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 ); + + adj = gtk_adjustment_new( portals.width_2d, 2, 40, 1, 1, 1 ); + lw2slider = gtk_hscale_new( GTK_ADJUSTMENT( adj ) ); + gtk_widget_show( lw2slider ); + gtk_box_pack_start( GTK_BOX( hbox ), lw2slider, TRUE, TRUE, 0 ); + gtk_scale_set_draw_value( GTK_SCALE( lw2slider ), FALSE ); + + lw2label = gtk_label_new( "" ); + gtk_widget_show( lw2label ); + gtk_box_pack_start( GTK_BOX( hbox ), lw2label, FALSE, TRUE, 0 ); + gtk_signal_connect( adj, "value_changed", GTK_SIGNAL_FUNC( OnScroll2d ), lw2label ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 ); + + button = gtk_button_new_with_label( "Color" ); + gtk_widget_show( button ); + gtk_box_pack_start( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", GTK_SIGNAL_FUNC( OnColor2d ), NULL ); + gtk_widget_set_usize( button, 60, -2 ); + + aa2check = gtk_check_button_new_with_label( "Anti-Alias (May not work on some video cards)" ); + gtk_widget_show( aa2check ); + gtk_box_pack_start( GTK_BOX( hbox ), aa2check, TRUE, TRUE, 0 ); + gtk_signal_connect( GTK_OBJECT( aa2check ), "toggled", GTK_SIGNAL_FUNC( OnAntiAlias2d ), NULL ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox2 ), hbox, TRUE, FALSE, 0 ); + + show2check = gtk_check_button_new_with_label( "Show" ); + gtk_widget_show( show2check ); + gtk_box_pack_start( GTK_BOX( hbox ), show2check, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( show2check ), "toggled", GTK_SIGNAL_FUNC( OnConfig2d ), NULL ); + + hbox = gtk_hbox_new( FALSE, 5 ); + gtk_widget_show( hbox ); + gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + + button = gtk_button_new_with_label( "OK" ); + gtk_widget_show( button ); + gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); + gtk_signal_connect( GTK_OBJECT( button ), "clicked", + GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); + gtk_widget_set_usize( button, 60, -2 ); + + // initialize dialog + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( show2check ), portals.show_2d ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( aa2check ), portals.aa_2d ); + Set2DText( lw2label ); + + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( show3check ), portals.show_3d ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( depthcheck ), portals.fog ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( polyscheck ), portals.polygons ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( linescheck ), portals.lines ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( aa3check ), portals.aa_3d ); + gtk_option_menu_set_history( GTK_OPTION_MENU( zlist ), portals.zbuffer ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( portalcheck ), portals.clip ); + + Set3DText( lw3label ); + Set3DTransText( translabel ); + SetClipText( cliplabel ); + + gtk_grab_add( dlg ); + gtk_widget_show( dlg ); + + while ( loop ) + gtk_main_iteration(); + + gtk_grab_remove( dlg ); + gtk_widget_destroy( dlg ); } diff --git a/contrib/prtview/gtkdlgs.h b/contrib/prtview/gtkdlgs.h index 37ca5031..6677bdeb 100644 --- a/contrib/prtview/gtkdlgs.h +++ b/contrib/prtview/gtkdlgs.h @@ -1,27 +1,27 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ #ifndef _GTKDLGS_H_ #define _GTKDLGS_H_ -int DoLoadPortalFileDialog (); -void DoAboutDlg (); -void DoConfigDialog (); +int DoLoadPortalFileDialog(); +void DoAboutDlg(); +void DoConfigDialog(); #endif // _GTKDLGS_H_ diff --git a/contrib/prtview/portals.cpp b/contrib/prtview/portals.cpp index 0c57d214..288a6c2c 100644 --- a/contrib/prtview/portals.cpp +++ b/contrib/prtview/portals.cpp @@ -1,21 +1,21 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com - -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. - -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 -*/ + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + + 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. + + 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" #include @@ -30,70 +30,68 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA CPortals portals; CPortalsRender render; -int compare( const void *arg1, const void *arg2 ) -{ +int compare( const void *arg1, const void *arg2 ){ - if(portals.portal[*((int *)arg1)].dist > portals.portal[*((int *)arg2)].dist) + if ( portals.portal[*( (int *)arg1 )].dist > portals.portal[*( (int *)arg2 )].dist ) { return -1; - else if(portals.portal[*((int *)arg1)].dist < portals.portal[*((int *)arg2)].dist) + } + else if ( portals.portal[*( (int *)arg1 )].dist < portals.portal[*( (int *)arg2 )].dist ) { return 1; + } return 0; } -CBspPortal::CBspPortal() -{ - memset(this, 0, sizeof(CBspPortal)); +CBspPortal::CBspPortal(){ + memset( this, 0, sizeof( CBspPortal ) ); } -CBspPortal::~CBspPortal() -{ +CBspPortal::~CBspPortal(){ delete[] point; delete[] inner_point; } -qboolean CBspPortal::Build(char *def) -{ +qboolean CBspPortal::Build( char *def ){ char *c = def; unsigned int n; int dummy1, dummy2; int res_cnt, i; - if(portals.hint_flags) - { - res_cnt = sscanf(def, "%u %d %d %d", &point_count, &dummy1, &dummy2, (int *)&hint); + if ( portals.hint_flags ) { + res_cnt = sscanf( def, "%u %d %d %d", &point_count, &dummy1, &dummy2, (int *)&hint ); } else { - sscanf(def, "%u", &point_count); + sscanf( def, "%u", &point_count ); hint = FALSE; } - if(point_count < 3 || (portals.hint_flags && res_cnt < 4)) + if ( point_count < 3 || ( portals.hint_flags && res_cnt < 4 ) ) { return FALSE; + } point = new CBspPoint[point_count]; inner_point = new CBspPoint[point_count]; - for(n = 0; n < point_count; n++) + for ( n = 0; n < point_count; n++ ) { - for(; *c != 0 && *c != '('; c++); + for (; *c != 0 && *c != '('; c++ ) ; - if(*c == 0) + if ( *c == 0 ) { return FALSE; + } c++; - sscanf(c, "%f %f %f", point[n].p, point[n].p+1, point[n].p+2); + sscanf( c, "%f %f %f", point[n].p, point[n].p + 1, point[n].p + 2 ); center.p[0] += point[n].p[0]; center.p[1] += point[n].p[1]; center.p[2] += point[n].p[2]; - if(n == 0) - { - for(i = 0; i < 3; i++) + if ( n == 0 ) { + for ( i = 0; i < 3; i++ ) { min[i] = point[n].p[i]; max[i] = point[n].p[i]; @@ -101,12 +99,14 @@ qboolean CBspPortal::Build(char *def) } else { - for(i = 0; i < 3; i++) + for ( i = 0; i < 3; i++ ) { - if(min[i] > point[n].p[i]) + if ( min[i] > point[n].p[i] ) { min[i] = point[n].p[i]; - if(max[i] < point[n].p[i]) + } + if ( max[i] < point[n].p[i] ) { max[i] = point[n].p[i]; + } } } } @@ -115,33 +115,30 @@ qboolean CBspPortal::Build(char *def) center.p[1] /= (float)point_count; center.p[2] /= (float)point_count; - for(n = 0; n < point_count; n++) + for ( n = 0; n < point_count; n++ ) { - inner_point[n].p[0] = (0.01f * center.p[0]) + (0.99f * point[n].p[0]); - inner_point[n].p[1] = (0.01f * center.p[1]) + (0.99f * point[n].p[1]); - inner_point[n].p[2] = (0.01f * center.p[2]) + (0.99f * point[n].p[2]); + inner_point[n].p[0] = ( 0.01f * center.p[0] ) + ( 0.99f * point[n].p[0] ); + inner_point[n].p[1] = ( 0.01f * center.p[1] ) + ( 0.99f * point[n].p[1] ); + inner_point[n].p[2] = ( 0.01f * center.p[2] ) + ( 0.99f * point[n].p[2] ); } - fp_color_random[0] = (float)(rand() & 0xff) / 255.0f; - fp_color_random[1] = (float)(rand() & 0xff) / 255.0f; - fp_color_random[2] = (float)(rand() & 0xff) / 255.0f; + fp_color_random[0] = (float)( rand() & 0xff ) / 255.0f; + fp_color_random[1] = (float)( rand() & 0xff ) / 255.0f; + fp_color_random[2] = (float)( rand() & 0xff ) / 255.0f; fp_color_random[3] = 1.0f; return TRUE; } -CPortals::CPortals() -{ - memset(this, 0, sizeof(CPortals)); +CPortals::CPortals(){ + memset( this, 0, sizeof( CPortals ) ); } -CPortals::~CPortals() -{ +CPortals::~CPortals(){ Purge(); } -void CPortals::Purge() -{ +void CPortals::Purge(){ delete[] portal; delete[] portal_sort; portal = NULL; @@ -149,107 +146,99 @@ void CPortals::Purge() portal_count = 0; /* - delete[] node; - node = NULL; - node_count = 0; - */ + delete[] node; + node = NULL; + node_count = 0; + */ } -void CPortals::Load() -{ - char buf[LINE_BUF+1]; +void CPortals::Load(){ + char buf[LINE_BUF + 1]; + + memset( buf, 0, LINE_BUF + 1 ); - memset(buf, 0, LINE_BUF + 1); - Purge(); - Sys_Printf(MSG_PREFIX "Loading portal file %s.\n", fn); + Sys_Printf( MSG_PREFIX "Loading portal file %s.\n", fn ); FILE *in; - in = fopen(fn, "rt"); + in = fopen( fn, "rt" ); - if(in == NULL) - { - Sys_Printf(" ERROR - could not open file.\n"); + if ( in == NULL ) { + Sys_Printf( " ERROR - could not open file.\n" ); return; } - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } - if(strncmp("PRT1", buf, 4) != 0) - { - fclose(in); + if ( strncmp( "PRT1", buf, 4 ) != 0 ) { + fclose( in ); - Sys_Printf(" ERROR - File header indicates wrong file type (should be \"PRT1\").\n"); + Sys_Printf( " ERROR - File header indicates wrong file type (should be \"PRT1\").\n" ); return; } - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } - sscanf(buf, "%u", &node_count); + sscanf( buf, "%u", &node_count ); /* - if(node_count > 0xFFFF) - { - fclose(in); + if(node_count > 0xFFFF) + { + fclose(in); - node_count = 0; + node_count = 0; - Sys_Printf(" ERROR - Extreme number of nodes, aborting.\n"); + Sys_Printf(" ERROR - Extreme number of nodes, aborting.\n"); - return; - } - */ + return; + } + */ - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); node_count = 0; - Sys_Printf(" ERROR - File ended prematurely.\n"); + Sys_Printf( " ERROR - File ended prematurely.\n" ); return; } - sscanf(buf, "%u", &portal_count); + sscanf( buf, "%u", &portal_count ); - if(portal_count > 0xFFFF) - { - fclose(in); + if ( portal_count > 0xFFFF ) { + fclose( in ); portal_count = 0; node_count = 0; - Sys_Printf(" ERROR - Extreme number of portals, aborting.\n"); + Sys_Printf( " ERROR - Extreme number of portals, aborting.\n" ); return; } - if(portal_count < 0) - { - fclose(in); + if ( portal_count < 0 ) { + fclose( in ); portal_count = 0; node_count = 0; - Sys_Printf(" ERROR - number of portals equals 0, aborting.\n"); + Sys_Printf( " ERROR - number of portals equals 0, aborting.\n" ); return; } @@ -264,23 +253,20 @@ void CPortals::Load() hint_flags = FALSE; - for(n = 0; n < portal_count; ) + for ( n = 0; n < portal_count; ) { - if(!fgets(buf, LINE_BUF, in)) - { - fclose(in); + if ( !fgets( buf, LINE_BUF, in ) ) { + fclose( in ); Purge(); - Sys_Printf(" ERROR - Could not find information for portal number %d of %d.\n", n + 1, portal_count); + Sys_Printf( " ERROR - Could not find information for portal number %d of %d.\n", n + 1, portal_count ); return; } - if(!portal[n].Build(buf)) - { - if(first && sscanf(buf, "%d %d", &test_vals_1, &test_vals_2) == 1) // skip additional counts of later data, not needed - { + if ( !portal[n].Build( buf ) ) { + if ( first && sscanf( buf, "%d %d", &test_vals_1, &test_vals_2 ) == 1 ) { // skip additional counts of later data, not needed // We can count on hint flags being in the file hint_flags = TRUE; continue; @@ -288,11 +274,11 @@ void CPortals::Load() first = FALSE; - fclose(in); + fclose( in ); Purge(); - Sys_Printf(" ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, portal_count); + Sys_Printf( " ERROR - Information for portal number %d of %d is not formatted correctly.\n", n + 1, portal_count ); return; } @@ -300,87 +286,82 @@ void CPortals::Load() n++; } - fclose(in); + fclose( in ); - Sys_Printf(" %u portals read in.\n", node_count, portal_count); + Sys_Printf( " %u portals read in.\n", node_count, portal_count ); } -void CPortals::FixColors() -{ - fp_color_2d[0] = (float)GetRValue(color_2d) / 255.0f; - fp_color_2d[1] = (float)GetGValue(color_2d) / 255.0f; - fp_color_2d[2] = (float)GetBValue(color_2d) / 255.0f; +void CPortals::FixColors(){ + fp_color_2d[0] = (float)GetRValue( color_2d ) / 255.0f; + fp_color_2d[1] = (float)GetGValue( color_2d ) / 255.0f; + fp_color_2d[2] = (float)GetBValue( color_2d ) / 255.0f; fp_color_2d[3] = 1.0f; - fp_color_3d[0] = (float)GetRValue(color_3d) / 255.0f; - fp_color_3d[1] = (float)GetGValue(color_3d) / 255.0f; - fp_color_3d[2] = (float)GetBValue(color_3d) / 255.0f; + fp_color_3d[0] = (float)GetRValue( color_3d ) / 255.0f; + fp_color_3d[1] = (float)GetGValue( color_3d ) / 255.0f; + fp_color_3d[2] = (float)GetBValue( color_3d ) / 255.0f; fp_color_3d[3] = 1.0f; - fp_color_fog[0] = 0.0f;//(float)GetRValue(color_fog) / 255.0f; - fp_color_fog[1] = 0.0f;//(float)GetGValue(color_fog) / 255.0f; - fp_color_fog[2] = 0.0f;//(float)GetBValue(color_fog) / 255.0f; + fp_color_fog[0] = 0.0f; //(float)GetRValue(color_fog) / 255.0f; + fp_color_fog[1] = 0.0f; //(float)GetGValue(color_fog) / 255.0f; + fp_color_fog[2] = 0.0f; //(float)GetBValue(color_fog) / 255.0f; fp_color_fog[3] = 1.0f; } -CPortalsRender::CPortalsRender() -{ +CPortalsRender::CPortalsRender(){ refCount = 1; } -CPortalsRender::~CPortalsRender() -{ +CPortalsRender::~CPortalsRender(){ } -void CPortalsRender::Register() -{ +void CPortalsRender::Register(){ g_QglTable.m_pfnHookGL2DWindow( this ); g_QglTable.m_pfnHookGL3DWindow( this ); } -void CPortalsRender::Draw2D( VIEWTYPE vt ) -{ - if(!portals.show_2d || portals.portal_count < 1) +void CPortalsRender::Draw2D( VIEWTYPE vt ){ + if ( !portals.show_2d || portals.portal_count < 1 ) { return; + } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); - if(portals.aa_2d) - { - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglEnable(GL_LINE_SMOOTH); + if ( portals.aa_2d ) { + g_QglTable.m_pfn_qglEnable( GL_BLEND ); + g_QglTable.m_pfn_qglEnable( GL_LINE_SMOOTH ); } else { - g_QglTable.m_pfn_qglDisable(GL_BLEND); - g_QglTable.m_pfn_qglEnable(GL_LINE_SMOOTH); + g_QglTable.m_pfn_qglDisable( GL_BLEND ); + g_QglTable.m_pfn_qglEnable( GL_LINE_SMOOTH ); } - switch(vt) + switch ( vt ) { case XY: break; case XZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); break; case YZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); - g_QglTable.m_pfn_qglRotatef(270.0f, 0.0f, 0.0f, 1.0f); + g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f ); + g_QglTable.m_pfn_qglRotatef( 270.0f, 0.0f, 0.0f, 1.0f ); break; } - g_QglTable.m_pfn_qglLineWidth(portals.width_2d * 0.5f); + g_QglTable.m_pfn_qglLineWidth( portals.width_2d * 0.5f ); - g_QglTable.m_pfn_qglColor4fv(portals.fp_color_2d); + g_QglTable.m_pfn_qglColor4fv( portals.fp_color_2d ); unsigned int n, p; - for(n = 0; n < portals.portal_count; n++) + for ( n = 0; n < portals.portal_count; n++ ) { - g_QglTable.m_pfn_qglBegin(GL_LINE_LOOP); + g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP ); - for(p = 0; p < portals.portal[n].point_count; p++) - g_QglTable.m_pfn_qglVertex3fv(portals.portal[n].point[p].p); + for ( p = 0; p < portals.portal[n].point_count; p++ ) + g_QglTable.m_pfn_qglVertex3fv( portals.portal[n].point[p].p ); g_QglTable.m_pfn_qglEnd(); } @@ -395,13 +376,12 @@ void CPortalsRender::Draw2D( VIEWTYPE vt ) * Output: out - the resulting 4x1 vector. */ static void transform_point( GLdouble out[4], const GLdouble m[16], - const GLdouble in[4] ) -{ -#define M(row,col) m[col*4+row] - out[0] = M(0,0) * in[0] + M(0,1) * in[1] + M(0,2) * in[2] + M(0,3) * in[3]; - out[1] = M(1,0) * in[0] + M(1,1) * in[1] + M(1,2) * in[2] + M(1,3) * in[3]; - out[2] = M(2,0) * in[0] + M(2,1) * in[1] + M(2,2) * in[2] + M(2,3) * in[3]; - out[3] = M(3,0) * in[0] + M(3,1) * in[1] + M(3,2) * in[2] + M(3,3) * in[3]; + const GLdouble in[4] ){ +#define M( row,col ) m[col * 4 + row] + out[0] = M( 0,0 ) * in[0] + M( 0,1 ) * in[1] + M( 0,2 ) * in[2] + M( 0,3 ) * in[3]; + out[1] = M( 1,0 ) * in[0] + M( 1,1 ) * in[1] + M( 1,2 ) * in[2] + M( 1,3 ) * in[3]; + out[2] = M( 2,0 ) * in[0] + M( 2,1 ) * in[1] + M( 2,2 ) * in[2] + M( 2,3 ) * in[3]; + out[3] = M( 3,0 ) * in[0] + M( 3,1 ) * in[1] + M( 3,2 ) * in[2] + M( 3,3 ) * in[3]; #undef M } @@ -413,29 +393,28 @@ static void transform_point( GLdouble out[4], const GLdouble m[16], * Input: a, b - matrices to multiply * Output: product - product of a and b */ -static void matmul( GLdouble *product, const GLdouble *a, const GLdouble *b ) -{ - /* This matmul was contributed by Thomas Malik */ - GLdouble temp[16]; - GLint i; - -#define A(row,col) a[(col<<2)+row] -#define B(row,col) b[(col<<2)+row] -#define T(row,col) temp[(col<<2)+row] - - /* i-te Zeile */ - for (i = 0; i < 4; i++) - { - T(i, 0) = A(i, 0) * B(0, 0) + A(i, 1) * B(1, 0) + A(i, 2) * B(2, 0) + A(i, 3) * B(3, 0); - T(i, 1) = A(i, 0) * B(0, 1) + A(i, 1) * B(1, 1) + A(i, 2) * B(2, 1) + A(i, 3) * B(3, 1); - T(i, 2) = A(i, 0) * B(0, 2) + A(i, 1) * B(1, 2) + A(i, 2) * B(2, 2) + A(i, 3) * B(3, 2); - T(i, 3) = A(i, 0) * B(0, 3) + A(i, 1) * B(1, 3) + A(i, 2) * B(2, 3) + A(i, 3) * B(3, 3); - } +static void matmul( GLdouble *product, const GLdouble *a, const GLdouble *b ){ + /* This matmul was contributed by Thomas Malik */ + GLdouble temp[16]; + GLint i; + +#define A( row,col ) a[( col << 2 ) + row] +#define B( row,col ) b[( col << 2 ) + row] +#define T( row,col ) temp[( col << 2 ) + row] + + /* i-te Zeile */ + for ( i = 0; i < 4; i++ ) + { + T( i, 0 ) = A( i, 0 ) * B( 0, 0 ) + A( i, 1 ) * B( 1, 0 ) + A( i, 2 ) * B( 2, 0 ) + A( i, 3 ) * B( 3, 0 ); + T( i, 1 ) = A( i, 0 ) * B( 0, 1 ) + A( i, 1 ) * B( 1, 1 ) + A( i, 2 ) * B( 2, 1 ) + A( i, 3 ) * B( 3, 1 ); + T( i, 2 ) = A( i, 0 ) * B( 0, 2 ) + A( i, 1 ) * B( 1, 2 ) + A( i, 2 ) * B( 2, 2 ) + A( i, 3 ) * B( 3, 2 ); + T( i, 3 ) = A( i, 0 ) * B( 0, 3 ) + A( i, 1 ) * B( 1, 3 ) + A( i, 2 ) * B( 2, 3 ) + A( i, 3 ) * B( 3, 3 ); + } #undef A #undef B #undef T - memcpy ( product, temp, 16*sizeof(GLdouble) ); + memcpy( product, temp, 16 * sizeof( GLdouble ) ); } @@ -445,241 +424,275 @@ static void matmul( GLdouble *product, const GLdouble *a, const GLdouble *b ) * Code contributed by Jacques Leroy jle@star.be * Return GL_TRUE for success, GL_FALSE for failure (singular matrix) */ -static GLboolean invert_matrix( const GLdouble *m, GLdouble *out ) -{ +static GLboolean invert_matrix( const GLdouble *m, GLdouble *out ){ /* NB. OpenGL Matrices are COLUMN major. */ -#define SWAP_ROWS(a, b) { GLdouble *_tmp = a; (a)=(b); (b)=_tmp; } -#define MAT(m,r,c) (m)[(c)*4+(r)] - - GLdouble wtmp[4][8]; - GLdouble m0, m1, m2, m3, s; - GLdouble *r0, *r1, *r2, *r3; - - r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3]; - - r0[0] = MAT(m,0,0), r0[1] = MAT(m,0,1), - r0[2] = MAT(m,0,2), r0[3] = MAT(m,0,3), - r0[4] = 1.0, r0[5] = r0[6] = r0[7] = 0.0, - - r1[0] = MAT(m,1,0), r1[1] = MAT(m,1,1), - r1[2] = MAT(m,1,2), r1[3] = MAT(m,1,3), - r1[5] = 1.0, r1[4] = r1[6] = r1[7] = 0.0, - - r2[0] = MAT(m,2,0), r2[1] = MAT(m,2,1), - r2[2] = MAT(m,2,2), r2[3] = MAT(m,2,3), - r2[6] = 1.0, r2[4] = r2[5] = r2[7] = 0.0, - - r3[0] = MAT(m,3,0), r3[1] = MAT(m,3,1), - r3[2] = MAT(m,3,2), r3[3] = MAT(m,3,3), - r3[7] = 1.0, r3[4] = r3[5] = r3[6] = 0.0; - - /* choose pivot - or die */ - if (fabs(r3[0])>fabs(r2[0])) SWAP_ROWS(r3, r2); - if (fabs(r2[0])>fabs(r1[0])) SWAP_ROWS(r2, r1); - if (fabs(r1[0])>fabs(r0[0])) SWAP_ROWS(r1, r0); - if (0.0 == r0[0]) return GL_FALSE; - - /* eliminate first variable */ - m1 = r1[0]/r0[0]; m2 = r2[0]/r0[0]; m3 = r3[0]/r0[0]; - s = r0[1]; r1[1] -= m1 * s; r2[1] -= m2 * s; r3[1] -= m3 * s; - s = r0[2]; r1[2] -= m1 * s; r2[2] -= m2 * s; r3[2] -= m3 * s; - s = r0[3]; r1[3] -= m1 * s; r2[3] -= m2 * s; r3[3] -= m3 * s; - s = r0[4]; - if (s != 0.0) { r1[4] -= m1 * s; r2[4] -= m2 * s; r3[4] -= m3 * s; } - s = r0[5]; - if (s != 0.0) { r1[5] -= m1 * s; r2[5] -= m2 * s; r3[5] -= m3 * s; } - s = r0[6]; - if (s != 0.0) { r1[6] -= m1 * s; r2[6] -= m2 * s; r3[6] -= m3 * s; } - s = r0[7]; - if (s != 0.0) { r1[7] -= m1 * s; r2[7] -= m2 * s; r3[7] -= m3 * s; } - - /* choose pivot - or die */ - if (fabs(r3[1])>fabs(r2[1])) SWAP_ROWS(r3, r2); - if (fabs(r2[1])>fabs(r1[1])) SWAP_ROWS(r2, r1); - if (0.0 == r1[1]) return GL_FALSE; - - /* eliminate second variable */ - m2 = r2[1]/r1[1]; m3 = r3[1]/r1[1]; - r2[2] -= m2 * r1[2]; r3[2] -= m3 * r1[2]; - r2[3] -= m2 * r1[3]; r3[3] -= m3 * r1[3]; - s = r1[4]; if (0.0 != s) { r2[4] -= m2 * s; r3[4] -= m3 * s; } - s = r1[5]; if (0.0 != s) { r2[5] -= m2 * s; r3[5] -= m3 * s; } - s = r1[6]; if (0.0 != s) { r2[6] -= m2 * s; r3[6] -= m3 * s; } - s = r1[7]; if (0.0 != s) { r2[7] -= m2 * s; r3[7] -= m3 * s; } - - /* choose pivot - or die */ - if (fabs(r3[2])>fabs(r2[2])) SWAP_ROWS(r3, r2); - if (0.0 == r2[2]) return GL_FALSE; - - /* eliminate third variable */ - m3 = r3[2]/r2[2]; - r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4], - r3[5] -= m3 * r2[5], r3[6] -= m3 * r2[6], - r3[7] -= m3 * r2[7]; - - /* last check */ - if (0.0 == r3[3]) return GL_FALSE; - - s = 1.0/r3[3]; /* now back substitute row 3 */ - r3[4] *= s; r3[5] *= s; r3[6] *= s; r3[7] *= s; - - m2 = r2[3]; /* now back substitute row 2 */ - s = 1.0/r2[2]; - r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2), - r2[6] = s * (r2[6] - r3[6] * m2), r2[7] = s * (r2[7] - r3[7] * m2); - m1 = r1[3]; - r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1, - r1[6] -= r3[6] * m1, r1[7] -= r3[7] * m1; - m0 = r0[3]; - r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0, - r0[6] -= r3[6] * m0, r0[7] -= r3[7] * m0; - - m1 = r1[2]; /* now back substitute row 1 */ - s = 1.0/r1[1]; - r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1), - r1[6] = s * (r1[6] - r2[6] * m1), r1[7] = s * (r1[7] - r2[7] * m1); - m0 = r0[2]; - r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0, - r0[6] -= r2[6] * m0, r0[7] -= r2[7] * m0; - - m0 = r0[1]; /* now back substitute row 0 */ - s = 1.0/r0[0]; - r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0), - r0[6] = s * (r0[6] - r1[6] * m0), r0[7] = s * (r0[7] - r1[7] * m0); - - MAT(out,0,0) = r0[4]; MAT(out,0,1) = r0[5], - MAT(out,0,2) = r0[6]; MAT(out,0,3) = r0[7], - MAT(out,1,0) = r1[4]; MAT(out,1,1) = r1[5], - MAT(out,1,2) = r1[6]; MAT(out,1,3) = r1[7], - MAT(out,2,0) = r2[4]; MAT(out,2,1) = r2[5], - MAT(out,2,2) = r2[6]; MAT(out,2,3) = r2[7], - MAT(out,3,0) = r3[4]; MAT(out,3,1) = r3[5], - MAT(out,3,2) = r3[6]; MAT(out,3,3) = r3[7]; - - return GL_TRUE; +#define SWAP_ROWS( a, b ) { GLdouble *_tmp = a; ( a ) = ( b ); ( b ) = _tmp; } +#define MAT( m,r,c ) ( m )[( c ) * 4 + ( r )] + + GLdouble wtmp[4][8]; + GLdouble m0, m1, m2, m3, s; + GLdouble *r0, *r1, *r2, *r3; + + r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3]; + + r0[0] = MAT( m,0,0 ), r0[1] = MAT( m,0,1 ), + r0[2] = MAT( m,0,2 ), r0[3] = MAT( m,0,3 ), + r0[4] = 1.0, r0[5] = r0[6] = r0[7] = 0.0, + + r1[0] = MAT( m,1,0 ), r1[1] = MAT( m,1,1 ), + r1[2] = MAT( m,1,2 ), r1[3] = MAT( m,1,3 ), + r1[5] = 1.0, r1[4] = r1[6] = r1[7] = 0.0, + + r2[0] = MAT( m,2,0 ), r2[1] = MAT( m,2,1 ), + r2[2] = MAT( m,2,2 ), r2[3] = MAT( m,2,3 ), + r2[6] = 1.0, r2[4] = r2[5] = r2[7] = 0.0, + + r3[0] = MAT( m,3,0 ), r3[1] = MAT( m,3,1 ), + r3[2] = MAT( m,3,2 ), r3[3] = MAT( m,3,3 ), + r3[7] = 1.0, r3[4] = r3[5] = r3[6] = 0.0; + + /* choose pivot - or die */ + if ( fabs( r3[0] ) > fabs( r2[0] ) ) { + SWAP_ROWS( r3, r2 ); + } + if ( fabs( r2[0] ) > fabs( r1[0] ) ) { + SWAP_ROWS( r2, r1 ); + } + if ( fabs( r1[0] ) > fabs( r0[0] ) ) { + SWAP_ROWS( r1, r0 ); + } + if ( 0.0 == r0[0] ) { + return GL_FALSE; + } + + /* eliminate first variable */ + m1 = r1[0] / r0[0]; m2 = r2[0] / r0[0]; m3 = r3[0] / r0[0]; + s = r0[1]; r1[1] -= m1 * s; r2[1] -= m2 * s; r3[1] -= m3 * s; + s = r0[2]; r1[2] -= m1 * s; r2[2] -= m2 * s; r3[2] -= m3 * s; + s = r0[3]; r1[3] -= m1 * s; r2[3] -= m2 * s; r3[3] -= m3 * s; + s = r0[4]; + if ( s != 0.0 ) { + r1[4] -= m1 * s; r2[4] -= m2 * s; r3[4] -= m3 * s; + } + s = r0[5]; + if ( s != 0.0 ) { + r1[5] -= m1 * s; r2[5] -= m2 * s; r3[5] -= m3 * s; + } + s = r0[6]; + if ( s != 0.0 ) { + r1[6] -= m1 * s; r2[6] -= m2 * s; r3[6] -= m3 * s; + } + s = r0[7]; + if ( s != 0.0 ) { + r1[7] -= m1 * s; r2[7] -= m2 * s; r3[7] -= m3 * s; + } + + /* choose pivot - or die */ + if ( fabs( r3[1] ) > fabs( r2[1] ) ) { + SWAP_ROWS( r3, r2 ); + } + if ( fabs( r2[1] ) > fabs( r1[1] ) ) { + SWAP_ROWS( r2, r1 ); + } + if ( 0.0 == r1[1] ) { + return GL_FALSE; + } + + /* eliminate second variable */ + m2 = r2[1] / r1[1]; m3 = r3[1] / r1[1]; + r2[2] -= m2 * r1[2]; r3[2] -= m3 * r1[2]; + r2[3] -= m2 * r1[3]; r3[3] -= m3 * r1[3]; + s = r1[4]; if ( 0.0 != s ) { + r2[4] -= m2 * s; r3[4] -= m3 * s; + } + s = r1[5]; if ( 0.0 != s ) { + r2[5] -= m2 * s; r3[5] -= m3 * s; + } + s = r1[6]; if ( 0.0 != s ) { + r2[6] -= m2 * s; r3[6] -= m3 * s; + } + s = r1[7]; if ( 0.0 != s ) { + r2[7] -= m2 * s; r3[7] -= m3 * s; + } + + /* choose pivot - or die */ + if ( fabs( r3[2] ) > fabs( r2[2] ) ) { + SWAP_ROWS( r3, r2 ); + } + if ( 0.0 == r2[2] ) { + return GL_FALSE; + } + + /* eliminate third variable */ + m3 = r3[2] / r2[2]; + r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4], + r3[5] -= m3 * r2[5], r3[6] -= m3 * r2[6], + r3[7] -= m3 * r2[7]; + + /* last check */ + if ( 0.0 == r3[3] ) { + return GL_FALSE; + } + + s = 1.0 / r3[3]; /* now back substitute row 3 */ + r3[4] *= s; r3[5] *= s; r3[6] *= s; r3[7] *= s; + + m2 = r2[3]; /* now back substitute row 2 */ + s = 1.0 / r2[2]; + r2[4] = s * ( r2[4] - r3[4] * m2 ), r2[5] = s * ( r2[5] - r3[5] * m2 ), + r2[6] = s * ( r2[6] - r3[6] * m2 ), r2[7] = s * ( r2[7] - r3[7] * m2 ); + m1 = r1[3]; + r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1, + r1[6] -= r3[6] * m1, r1[7] -= r3[7] * m1; + m0 = r0[3]; + r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0, + r0[6] -= r3[6] * m0, r0[7] -= r3[7] * m0; + + m1 = r1[2]; /* now back substitute row 1 */ + s = 1.0 / r1[1]; + r1[4] = s * ( r1[4] - r2[4] * m1 ), r1[5] = s * ( r1[5] - r2[5] * m1 ), + r1[6] = s * ( r1[6] - r2[6] * m1 ), r1[7] = s * ( r1[7] - r2[7] * m1 ); + m0 = r0[2]; + r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0, + r0[6] -= r2[6] * m0, r0[7] -= r2[7] * m0; + + m0 = r0[1]; /* now back substitute row 0 */ + s = 1.0 / r0[0]; + r0[4] = s * ( r0[4] - r1[4] * m0 ), r0[5] = s * ( r0[5] - r1[5] * m0 ), + r0[6] = s * ( r0[6] - r1[6] * m0 ), r0[7] = s * ( r0[7] - r1[7] * m0 ); + + MAT( out,0,0 ) = r0[4]; MAT( out,0,1 ) = r0[5], + MAT( out,0,2 ) = r0[6]; MAT( out,0,3 ) = r0[7], + MAT( out,1,0 ) = r1[4]; MAT( out,1,1 ) = r1[5], + MAT( out,1,2 ) = r1[6]; MAT( out,1,3 ) = r1[7], + MAT( out,2,0 ) = r2[4]; MAT( out,2,1 ) = r2[5], + MAT( out,2,2 ) = r2[6]; MAT( out,2,3 ) = r2[7], + MAT( out,3,0 ) = r3[4]; MAT( out,3,1 ) = r3[5], + MAT( out,3,2 ) = r3[6]; MAT( out,3,3 ) = r3[7]; + + return GL_TRUE; #undef MAT #undef SWAP_ROWS } -GLint UnProject(GLdouble winx,GLdouble winy,GLdouble winz, - const GLdouble model[16],const GLdouble proj[16], - const GLint viewport[4], - GLdouble *objx,GLdouble *objy,GLdouble *objz) -{ - /* matrice de transformation */ - GLdouble m[16], A[16]; - GLdouble in[4],out[4]; - - /* transformation coordonnees normalisees entre -1 et 1 */ - in[0]=(winx-viewport[0])*2/viewport[2] - 1.0; - in[1]=(winy-viewport[1])*2/viewport[3] - 1.0; - in[2]=2*winz - 1.0; - in[3]=1.0; - - /* calcul transformation inverse */ - matmul(A,proj,model); - invert_matrix(A,m); - - /* d'ou les coordonnees objets */ - transform_point(out,m,in); - if (out[3]==0.0) - return GL_FALSE; - *objx=out[0]/out[3]; - *objy=out[1]/out[3]; - *objz=out[2]/out[3]; - return GL_TRUE; +GLint UnProject( GLdouble winx,GLdouble winy,GLdouble winz, + const GLdouble model[16],const GLdouble proj[16], + const GLint viewport[4], + GLdouble *objx,GLdouble *objy,GLdouble *objz ){ + /* matrice de transformation */ + GLdouble m[16], A[16]; + GLdouble in[4],out[4]; + + /* transformation coordonnees normalisees entre -1 et 1 */ + in[0] = ( winx - viewport[0] ) * 2 / viewport[2] - 1.0; + in[1] = ( winy - viewport[1] ) * 2 / viewport[3] - 1.0; + in[2] = 2 * winz - 1.0; + in[3] = 1.0; + + /* calcul transformation inverse */ + matmul( A,proj,model ); + invert_matrix( A,m ); + + /* d'ou les coordonnees objets */ + transform_point( out,m,in ); + if ( out[3] == 0.0 ) { + return GL_FALSE; + } + *objx = out[0] / out[3]; + *objy = out[1] / out[3]; + *objz = out[2] / out[3]; + return GL_TRUE; } -void CPortalsRender::Draw3D() -{ - if(!portals.show_3d || portals.portal_count < 1) +void CPortalsRender::Draw3D(){ + if ( !portals.show_3d || portals.portal_count < 1 ) { return; + } - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS ); double cam[3]; double proj_m[16]; double model_m[16]; float min_check[3]; float max_check[3]; - float trans = (100.0f - portals.trans_3d) / 100.0f; + float trans = ( 100.0f - portals.trans_3d ) / 100.0f; int view[4]; - g_QglTable.m_pfn_qglGetDoublev(GL_PROJECTION_MATRIX, proj_m); - g_QglTable.m_pfn_qglGetDoublev(GL_MODELVIEW_MATRIX, model_m); - g_QglTable.m_pfn_qglGetIntegerv(GL_VIEWPORT, view); + g_QglTable.m_pfn_qglGetDoublev( GL_PROJECTION_MATRIX, proj_m ); + g_QglTable.m_pfn_qglGetDoublev( GL_MODELVIEW_MATRIX, model_m ); + g_QglTable.m_pfn_qglGetIntegerv( GL_VIEWPORT, view ); - UnProject(0.5 * (double)view[2], 0.5 * (double)view[3], 0.0, model_m, proj_m, view, cam, cam+1, cam+2); + UnProject( 0.5 * (double)view[2], 0.5 * (double)view[3], 0.0, model_m, proj_m, view, cam, cam + 1, cam + 2 ); - min_check[0] = (float)cam[0] + (portals.clip_range * 64.0f); - min_check[1] = (float)cam[1] + (portals.clip_range * 64.0f); - min_check[2] = (float)cam[2] + (portals.clip_range * 64.0f); - max_check[0] = (float)cam[0] - (portals.clip_range * 64.0f); - max_check[1] = (float)cam[1] - (portals.clip_range * 64.0f); - max_check[2] = (float)cam[2] - (portals.clip_range * 64.0f); + min_check[0] = (float)cam[0] + ( portals.clip_range * 64.0f ); + min_check[1] = (float)cam[1] + ( portals.clip_range * 64.0f ); + min_check[2] = (float)cam[2] + ( portals.clip_range * 64.0f ); + max_check[0] = (float)cam[0] - ( portals.clip_range * 64.0f ); + max_check[1] = (float)cam[1] - ( portals.clip_range * 64.0f ); + max_check[2] = (float)cam[2] - ( portals.clip_range * 64.0f ); - g_QglTable.m_pfn_qglHint(GL_FOG_HINT, GL_NICEST); - - g_QglTable.m_pfn_qglDisable(GL_CULL_FACE); + g_QglTable.m_pfn_qglHint( GL_FOG_HINT, GL_NICEST ); - g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH); - g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH); + g_QglTable.m_pfn_qglDisable( GL_CULL_FACE ); - g_QglTable.m_pfn_qglPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + g_QglTable.m_pfn_qglDisable( GL_LINE_SMOOTH ); + g_QglTable.m_pfn_qglDisable( GL_POLYGON_SMOOTH ); - g_QglTable.m_pfn_qglShadeModel(GL_SMOOTH); + g_QglTable.m_pfn_qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_QglTable.m_pfn_qglEnable(GL_POLYGON_SMOOTH); + g_QglTable.m_pfn_qglShadeModel( GL_SMOOTH ); - if(portals.aa_3d) - g_QglTable.m_pfn_qglEnable(GL_LINE_SMOOTH); - else - g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH); + g_QglTable.m_pfn_qglEnable( GL_BLEND ); + g_QglTable.m_pfn_qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + g_QglTable.m_pfn_qglEnable( GL_POLYGON_SMOOTH ); - if(portals.fog) - { - g_QglTable.m_pfn_qglEnable(GL_FOG); + if ( portals.aa_3d ) { + g_QglTable.m_pfn_qglEnable( GL_LINE_SMOOTH ); + } + else{ + g_QglTable.m_pfn_qglDisable( GL_LINE_SMOOTH ); + } + + if ( portals.fog ) { + g_QglTable.m_pfn_qglEnable( GL_FOG ); - g_QglTable.m_pfn_qglFogi(GL_FOG_MODE, GL_EXP); - g_QglTable.m_pfn_qglFogf(GL_FOG_DENSITY, 0.001f); - g_QglTable.m_pfn_qglFogf(GL_FOG_START, 10.0f); - g_QglTable.m_pfn_qglFogf(GL_FOG_END, 10000.0f); - g_QglTable.m_pfn_qglFogi(GL_FOG_INDEX, 0); - g_QglTable.m_pfn_qglFogfv(GL_FOG_COLOR, portals.fp_color_fog); + g_QglTable.m_pfn_qglFogi( GL_FOG_MODE, GL_EXP ); + g_QglTable.m_pfn_qglFogf( GL_FOG_DENSITY, 0.001f ); + g_QglTable.m_pfn_qglFogf( GL_FOG_START, 10.0f ); + g_QglTable.m_pfn_qglFogf( GL_FOG_END, 10000.0f ); + g_QglTable.m_pfn_qglFogi( GL_FOG_INDEX, 0 ); + g_QglTable.m_pfn_qglFogfv( GL_FOG_COLOR, portals.fp_color_fog ); } else { - g_QglTable.m_pfn_qglDisable(GL_FOG); + g_QglTable.m_pfn_qglDisable( GL_FOG ); } - switch(portals.zbuffer) + switch ( portals.zbuffer ) { case 1: - g_QglTable.m_pfn_qglEnable(GL_DEPTH_TEST); - g_QglTable.m_pfn_qglDepthMask(GL_FALSE); + g_QglTable.m_pfn_qglEnable( GL_DEPTH_TEST ); + g_QglTable.m_pfn_qglDepthMask( GL_FALSE ); break; case 2: - g_QglTable.m_pfn_qglDisable(GL_DEPTH_TEST); + g_QglTable.m_pfn_qglDisable( GL_DEPTH_TEST ); break; default: - g_QglTable.m_pfn_qglEnable(GL_DEPTH_TEST); - g_QglTable.m_pfn_qglDepthMask(GL_TRUE); + g_QglTable.m_pfn_qglEnable( GL_DEPTH_TEST ); + g_QglTable.m_pfn_qglDepthMask( GL_TRUE ); } - g_QglTable.m_pfn_qglLineWidth(portals.width_3d * 0.5f); + g_QglTable.m_pfn_qglLineWidth( portals.width_3d * 0.5f ); unsigned int n, p; - if(portals.polygons) - { - if(portals.zbuffer != 0) - { + if ( portals.polygons ) { + if ( portals.zbuffer != 0 ) { float d; - for(n = 0; n < portals.portal_count; n++) + for ( n = 0; n < portals.portal_count; n++ ) { d = (float)cam[0] - portals.portal[n].center.p[0]; portals.portal[n].dist = d * d; @@ -693,105 +706,122 @@ void CPortalsRender::Draw3D() portals.portal_sort[n] = n; } - qsort(portals.portal_sort, portals.portal_count, 4, compare); - - for(n = 0; n < portals.portal_count; n++) + qsort( portals.portal_sort, portals.portal_count, 4, compare ); + + for ( n = 0; n < portals.portal_count; n++ ) { - if(portals.polygons == 2 && !portals.portal[portals.portal_sort[n]].hint) + if ( portals.polygons == 2 && !portals.portal[portals.portal_sort[n]].hint ) { continue; - - if(portals.clip) - { - if(min_check[0] < portals.portal[portals.portal_sort[n]].min[0]) + } + + if ( portals.clip ) { + if ( min_check[0] < portals.portal[portals.portal_sort[n]].min[0] ) { continue; - else if(min_check[1] < portals.portal[portals.portal_sort[n]].min[1]) + } + else if ( min_check[1] < portals.portal[portals.portal_sort[n]].min[1] ) { continue; - else if(min_check[2] < portals.portal[portals.portal_sort[n]].min[2]) + } + else if ( min_check[2] < portals.portal[portals.portal_sort[n]].min[2] ) { continue; - else if(max_check[0] > portals.portal[portals.portal_sort[n]].max[0]) + } + else if ( max_check[0] > portals.portal[portals.portal_sort[n]].max[0] ) { continue; - else if(max_check[1] > portals.portal[portals.portal_sort[n]].max[1]) + } + else if ( max_check[1] > portals.portal[portals.portal_sort[n]].max[1] ) { continue; - else if(max_check[2] > portals.portal[portals.portal_sort[n]].max[2]) + } + else if ( max_check[2] > portals.portal[portals.portal_sort[n]].max[2] ) { continue; + } } - g_QglTable.m_pfn_qglColor4f(portals.portal[portals.portal_sort[n]].fp_color_random[0], portals.portal[portals.portal_sort[n]].fp_color_random[1], - portals.portal[portals.portal_sort[n]].fp_color_random[2], trans); + g_QglTable.m_pfn_qglColor4f( portals.portal[portals.portal_sort[n]].fp_color_random[0], portals.portal[portals.portal_sort[n]].fp_color_random[1], + portals.portal[portals.portal_sort[n]].fp_color_random[2], trans ); - g_QglTable.m_pfn_qglBegin(GL_POLYGON); + g_QglTable.m_pfn_qglBegin( GL_POLYGON ); - for(p = 0; p < portals.portal[portals.portal_sort[n]].point_count; p++) - g_QglTable.m_pfn_qglVertex3fv(portals.portal[portals.portal_sort[n]].point[p].p); + for ( p = 0; p < portals.portal[portals.portal_sort[n]].point_count; p++ ) + g_QglTable.m_pfn_qglVertex3fv( portals.portal[portals.portal_sort[n]].point[p].p ); g_QglTable.m_pfn_qglEnd(); } } else { - for(n = 0; n < portals.portal_count; n++) + for ( n = 0; n < portals.portal_count; n++ ) { - if(portals.polygons == 2 && !portals.portal[n].hint) + if ( portals.polygons == 2 && !portals.portal[n].hint ) { continue; + } - if(portals.clip) - { - if(min_check[0] < portals.portal[n].min[0]) + if ( portals.clip ) { + if ( min_check[0] < portals.portal[n].min[0] ) { continue; - else if(min_check[1] < portals.portal[n].min[1]) + } + else if ( min_check[1] < portals.portal[n].min[1] ) { continue; - else if(min_check[2] < portals.portal[n].min[2]) + } + else if ( min_check[2] < portals.portal[n].min[2] ) { continue; - else if(max_check[0] > portals.portal[n].max[0]) + } + else if ( max_check[0] > portals.portal[n].max[0] ) { continue; - else if(max_check[1] > portals.portal[n].max[1]) + } + else if ( max_check[1] > portals.portal[n].max[1] ) { continue; - else if(max_check[2] > portals.portal[n].max[2]) + } + else if ( max_check[2] > portals.portal[n].max[2] ) { continue; + } } - g_QglTable.m_pfn_qglColor4f(portals.portal[n].fp_color_random[0], portals.portal[n].fp_color_random[1], - portals.portal[n].fp_color_random[2], trans); + g_QglTable.m_pfn_qglColor4f( portals.portal[n].fp_color_random[0], portals.portal[n].fp_color_random[1], + portals.portal[n].fp_color_random[2], trans ); - g_QglTable.m_pfn_qglBegin(GL_POLYGON); + g_QglTable.m_pfn_qglBegin( GL_POLYGON ); - for(p = 0; p < portals.portal[n].point_count; p++) - g_QglTable.m_pfn_qglVertex3fv(portals.portal[n].point[p].p); + for ( p = 0; p < portals.portal[n].point_count; p++ ) + g_QglTable.m_pfn_qglVertex3fv( portals.portal[n].point[p].p ); g_QglTable.m_pfn_qglEnd(); } } } - if(portals.lines) - { - g_QglTable.m_pfn_qglColor4fv(portals.fp_color_3d); + if ( portals.lines ) { + g_QglTable.m_pfn_qglColor4fv( portals.fp_color_3d ); - for(n = 0; n < portals.portal_count; n++) + for ( n = 0; n < portals.portal_count; n++ ) { - if(portals.lines == 2 && !portals.portal[n].hint) + if ( portals.lines == 2 && !portals.portal[n].hint ) { continue; + } - if(portals.clip) - { - if(min_check[0] < portals.portal[n].min[0]) + if ( portals.clip ) { + if ( min_check[0] < portals.portal[n].min[0] ) { continue; - else if(min_check[1] < portals.portal[n].min[1]) + } + else if ( min_check[1] < portals.portal[n].min[1] ) { continue; - else if(min_check[2] < portals.portal[n].min[2]) + } + else if ( min_check[2] < portals.portal[n].min[2] ) { continue; - else if(max_check[0] > portals.portal[n].max[0]) + } + else if ( max_check[0] > portals.portal[n].max[0] ) { continue; - else if(max_check[1] > portals.portal[n].max[1]) + } + else if ( max_check[1] > portals.portal[n].max[1] ) { continue; - else if(max_check[2] > portals.portal[n].max[2]) + } + else if ( max_check[2] > portals.portal[n].max[2] ) { continue; + } } - g_QglTable.m_pfn_qglBegin(GL_LINE_LOOP); + g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP ); - for(p = 0; p < portals.portal[n].point_count; p++) - g_QglTable.m_pfn_qglVertex3fv(portals.portal[n].inner_point[p].p); + for ( p = 0; p < portals.portal[n].point_count; p++ ) + g_QglTable.m_pfn_qglVertex3fv( portals.portal[n].inner_point[p].p ); g_QglTable.m_pfn_qglEnd(); } @@ -799,4 +829,3 @@ void CPortalsRender::Draw3D() g_QglTable.m_pfn_qglPopAttrib(); } - diff --git a/contrib/prtview/portals.h b/contrib/prtview/portals.h index 13c7b89f..8f89bdff 100644 --- a/contrib/prtview/portals.h +++ b/contrib/prtview/portals.h @@ -1,120 +1,124 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ #ifndef _PORTALS_H_ #define _PORTALS_H_ class CBspPoint { public: - float p[3]; +float p[3]; }; class CBspPortal { public: - CBspPortal(); - ~CBspPortal(); +CBspPortal(); +~CBspPortal(); protected: public: - CBspPoint center; - unsigned point_count; - CBspPoint *point; - CBspPoint *inner_point; - float fp_color_random[4]; - float min[3]; - float max[3]; - float dist; - qboolean hint; - - qboolean Build(char *def); +CBspPoint center; +unsigned point_count; +CBspPoint *point; +CBspPoint *inner_point; +float fp_color_random[4]; +float min[3]; +float max[3]; +float dist; +qboolean hint; + +qboolean Build( char *def ); }; class CPortals { public: - CPortals(); - ~CPortals(); +CPortals(); +~CPortals(); protected: public: - void Load(); // use filename in fn - void Purge(); - - void FixColors(); - - char fn[_MAX_PATH]; - - int zbuffer; - int polygons; - int lines; - qboolean show_3d; - qboolean aa_3d; - qboolean fog; - COLORREF color_3d; - float width_3d; // in 8'ths - float fp_color_3d[4]; - COLORREF color_fog; - float fp_color_fog[4]; - float trans_3d; - float clip_range; - qboolean clip; - - qboolean show_2d; - qboolean aa_2d; - COLORREF color_2d; - float width_2d; // in 8'ths - float fp_color_2d[4]; - - CBspPortal *portal; - int *portal_sort; - qboolean hint_flags; +void Load(); // use filename in fn +void Purge(); + +void FixColors(); + +char fn[_MAX_PATH]; + +int zbuffer; +int polygons; +int lines; +qboolean show_3d; +qboolean aa_3d; +qboolean fog; +COLORREF color_3d; +float width_3d; // in 8'ths +float fp_color_3d[4]; +COLORREF color_fog; +float fp_color_fog[4]; +float trans_3d; +float clip_range; +qboolean clip; + +qboolean show_2d; +qboolean aa_2d; +COLORREF color_2d; +float width_2d; // in 8'ths +float fp_color_2d[4]; + +CBspPortal *portal; +int *portal_sort; +qboolean hint_flags; // CBspNode *node; - unsigned int node_count; - unsigned int portal_count; +unsigned int node_count; +unsigned int portal_count; }; class CPortalsRender : public IGL2DWindow, public IGL3DWindow { public: - CPortalsRender(); - virtual ~CPortalsRender(); +CPortalsRender(); +virtual ~CPortalsRender(); protected: - int refCount; +int refCount; #ifdef _WIN32 - CRITICAL_SECTION protect; +CRITICAL_SECTION protect; #endif public: - // IGL2DWindow IGL3DWindow interface - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } - void Draw2D( VIEWTYPE vt ); - void Draw3D(); - void Register(); +// IGL2DWindow IGL3DWindow interface +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} +void Draw2D( VIEWTYPE vt ); +void Draw3D(); +void Register(); }; // void Sys_Printf (char *text, ...); diff --git a/contrib/prtview/prtview.cpp b/contrib/prtview/prtview.cpp index 42aa0463..65ffd14d 100644 --- a/contrib/prtview/prtview.cpp +++ b/contrib/prtview/prtview.cpp @@ -1,21 +1,21 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ // PrtView.cpp : Defines the initialization routines for the DLL. // @@ -55,98 +55,106 @@ static char INIfn[NAME_MAX]; #define CLIP_RANGE "ClipRange" #define CLIP "Clip" -void InitInstance () -{ +void InitInstance(){ #ifdef _WIN32 - char fn[_MAX_PATH]; - char fn_drive[_MAX_DRIVE]; - char fn_dir[_MAX_DIR]; - char fn_name[_MAX_FNAME]; - char fn_ext[_MAX_EXT]; + char fn[_MAX_PATH]; + char fn_drive[_MAX_DRIVE]; + char fn_dir[_MAX_DIR]; + char fn_name[_MAX_FNAME]; + char fn_ext[_MAX_EXT]; - GetModuleFileName(GetModuleHandle("PrtView.dll"), fn, _MAX_PATH); + GetModuleFileName( GetModuleHandle( "PrtView.dll" ), fn, _MAX_PATH ); - _splitpath(fn, fn_drive, fn_dir, fn_name, fn_ext); + _splitpath( fn, fn_drive, fn_dir, fn_name, fn_ext ); - strcpy(INIfn, fn_drive); - strcat(INIfn, fn_dir); - strcat(INIfn, fn_name); - strcat(INIfn, ".ini"); + strcpy( INIfn, fn_drive ); + strcat( INIfn, fn_dir ); + strcat( INIfn, fn_name ); + strcat( INIfn, ".ini" ); #else // if def __linux__ - strcpy (INIfn, g_get_home_dir ()); - strcat (INIfn, "/.radiant/"); - strcat (INIfn, RADIANT_VERSION); - strcat (INIfn, "/prtview.ini"); + strcpy( INIfn, g_get_home_dir() ); + strcat( INIfn, "/.radiant/" ); + strcat( INIfn, RADIANT_VERSION ); + strcat( INIfn, "/prtview.ini" ); #endif - portals.show_2d = INIGetInt(RENDER_2D, FALSE) ? true : false; - portals.aa_2d = INIGetInt(AA_2D, FALSE) ? true : false; - portals.width_2d = (float)INIGetInt(WIDTH_2D, 10); - portals.color_2d = (COLORREF)INIGetInt(COLOR_2D, RGB(0, 0, 255)) & 0xFFFFFF; - - if (portals.width_2d > 40.0f) - portals.width_2d = 40.0f; - else if (portals.width_2d < 2.0f) - portals.width_2d = 2.0f; - - portals.show_3d = INIGetInt(RENDER_3D, TRUE) ? true : false; - - portals.zbuffer = INIGetInt(ZBUFFER, 1); - portals.fog = INIGetInt(FOG, FALSE) ? true : false; - portals.polygons = INIGetInt(POLYGON, TRUE); - portals.lines = INIGetInt(LINE, TRUE); - portals.aa_3d = INIGetInt(AA_3D, FALSE) ? true : false; - portals.width_3d = (float)INIGetInt(WIDTH_3D, 4); - portals.color_3d = (COLORREF)INIGetInt(COLOR_3D, RGB(255, 255, 0)) & 0xFFFFFF; - portals.color_fog = (COLORREF)INIGetInt(COLOR_FOG, RGB(127, 127, 127)) & 0xFFFFFF; - portals.trans_3d = (float)INIGetInt(TRANS_3D, 50); - portals.clip = INIGetInt(CLIP, FALSE) ? true : false; - portals.clip_range = (float)INIGetInt(CLIP_RANGE, 16); - - if (portals.clip_range < 1) - portals.clip_range = 1; - else if (portals.clip_range > 128) - portals.clip_range = 128; - - if (portals.zbuffer < 0) - portals.zbuffer = 0; - else if (portals.zbuffer > 2) - portals.zbuffer = 0; - - if (portals.width_3d > 40.0f) - portals.width_3d = 40.0f; - else if (portals.width_3d < 2.0f) - portals.width_3d = 2.0f; - - if (portals.trans_3d > 100.0f) - portals.trans_3d = 100.0f; - else if (portals.trans_3d < 0.0f) - portals.trans_3d = 0.0f; - - SaveConfig(); - - portals.FixColors(); + portals.show_2d = INIGetInt( RENDER_2D, FALSE ) ? true : false; + portals.aa_2d = INIGetInt( AA_2D, FALSE ) ? true : false; + portals.width_2d = (float)INIGetInt( WIDTH_2D, 10 ); + portals.color_2d = (COLORREF)INIGetInt( COLOR_2D, RGB( 0, 0, 255 ) ) & 0xFFFFFF; + + if ( portals.width_2d > 40.0f ) { + portals.width_2d = 40.0f; + } + else if ( portals.width_2d < 2.0f ) { + portals.width_2d = 2.0f; + } + + portals.show_3d = INIGetInt( RENDER_3D, TRUE ) ? true : false; + + portals.zbuffer = INIGetInt( ZBUFFER, 1 ); + portals.fog = INIGetInt( FOG, FALSE ) ? true : false; + portals.polygons = INIGetInt( POLYGON, TRUE ); + portals.lines = INIGetInt( LINE, TRUE ); + portals.aa_3d = INIGetInt( AA_3D, FALSE ) ? true : false; + portals.width_3d = (float)INIGetInt( WIDTH_3D, 4 ); + portals.color_3d = (COLORREF)INIGetInt( COLOR_3D, RGB( 255, 255, 0 ) ) & 0xFFFFFF; + portals.color_fog = (COLORREF)INIGetInt( COLOR_FOG, RGB( 127, 127, 127 ) ) & 0xFFFFFF; + portals.trans_3d = (float)INIGetInt( TRANS_3D, 50 ); + portals.clip = INIGetInt( CLIP, FALSE ) ? true : false; + portals.clip_range = (float)INIGetInt( CLIP_RANGE, 16 ); + + if ( portals.clip_range < 1 ) { + portals.clip_range = 1; + } + else if ( portals.clip_range > 128 ) { + portals.clip_range = 128; + } + + if ( portals.zbuffer < 0 ) { + portals.zbuffer = 0; + } + else if ( portals.zbuffer > 2 ) { + portals.zbuffer = 0; + } + + if ( portals.width_3d > 40.0f ) { + portals.width_3d = 40.0f; + } + else if ( portals.width_3d < 2.0f ) { + portals.width_3d = 2.0f; + } + + if ( portals.trans_3d > 100.0f ) { + portals.trans_3d = 100.0f; + } + else if ( portals.trans_3d < 0.0f ) { + portals.trans_3d = 0.0f; + } + + SaveConfig(); + + portals.FixColors(); } -void SaveConfig () -{ - INISetInt(RENDER_2D, portals.show_2d, "Draw in 2D windows"); - INISetInt(WIDTH_2D, (int)portals.width_2d, "Width of lines in 2D windows (in units of 1/2)"); - INISetInt(COLOR_2D, (int)portals.color_2d, "Color of lines in 2D windows"); - INISetInt(AA_2D, portals.aa_2d, "Draw lines in 2D window anti-aliased"); - - INISetInt(ZBUFFER, portals.zbuffer, "ZBuffer level in 3D window"); - INISetInt(FOG, portals.fog, "Use depth cueing in 3D window"); - INISetInt(POLYGON, portals.polygons, "Render using polygons polygons in 3D window"); - INISetInt(LINE, portals.polygons, "Render using lines in 3D window"); - INISetInt(RENDER_3D, portals.show_3d, "Draw in 3D windows"); - INISetInt(WIDTH_3D, (int)portals.width_3d, "Width of lines in 3D window (in units of 1/2)"); - INISetInt(COLOR_3D, (int)portals.color_3d, "Color of lines/polygons in 3D window"); - INISetInt(COLOR_FOG, (int)portals.color_fog, "Color of distant lines/polygons in 3D window"); - INISetInt(AA_3D, portals.aa_3d, "Draw lines in 3D window anti-aliased"); - INISetInt(TRANS_3D, (int)portals.trans_3d, "Transparency in 3d view (0 = solid, 100 = invisible)"); - INISetInt(CLIP, portals.clip, "Cubic clipper active for portal viewer"); - INISetInt(CLIP_RANGE, (int)portals.clip_range, "Portal viewer cubic clip distance (in units of 64)"); +void SaveConfig(){ + INISetInt( RENDER_2D, portals.show_2d, "Draw in 2D windows" ); + INISetInt( WIDTH_2D, (int)portals.width_2d, "Width of lines in 2D windows (in units of 1/2)" ); + INISetInt( COLOR_2D, (int)portals.color_2d, "Color of lines in 2D windows" ); + INISetInt( AA_2D, portals.aa_2d, "Draw lines in 2D window anti-aliased" ); + + INISetInt( ZBUFFER, portals.zbuffer, "ZBuffer level in 3D window" ); + INISetInt( FOG, portals.fog, "Use depth cueing in 3D window" ); + INISetInt( POLYGON, portals.polygons, "Render using polygons polygons in 3D window" ); + INISetInt( LINE, portals.polygons, "Render using lines in 3D window" ); + INISetInt( RENDER_3D, portals.show_3d, "Draw in 3D windows" ); + INISetInt( WIDTH_3D, (int)portals.width_3d, "Width of lines in 3D window (in units of 1/2)" ); + INISetInt( COLOR_3D, (int)portals.color_3d, "Color of lines/polygons in 3D window" ); + INISetInt( COLOR_FOG, (int)portals.color_fog, "Color of distant lines/polygons in 3D window" ); + INISetInt( AA_3D, portals.aa_3d, "Draw lines in 3D window anti-aliased" ); + INISetInt( TRANS_3D, (int)portals.trans_3d, "Transparency in 3d view (0 = solid, 100 = invisible)" ); + INISetInt( CLIP, portals.clip, "Cubic clipper active for portal viewer" ); + INISetInt( CLIP_RANGE, (int)portals.clip_range, "Portal viewer cubic clip distance (in units of 64)" ); } // Radiant function table @@ -156,187 +164,183 @@ _QERQglTable g_QglTable; #define CONFIG_SECTION "Configuration" -#if defined(__linux__) || defined(__APPLE__) - -static bool read_var (const char *filename, const char *section, const char *key, char *value) -{ - char line[1024], *ptr; - FILE *rc; - - rc = fopen (filename, "rt"); - - if (rc == NULL) - return false; - - while (fgets (line, 1024, rc) != 0) - { - // First we find the section - if (line[0] != '[') - continue; - - ptr = strchr (line, ']'); - *ptr = '\0'; - - if (strcmp (&line[1], section) == 0) - { - while (fgets (line, 1024, rc) != 0) - { - ptr = strchr (line, '='); - - if (ptr == NULL) - { - // reached the end of the section - fclose (rc); - return false; - } - *ptr = '\0'; - - if (strcmp (line, key) == 0) - { - strcpy (value, ptr+1); - fclose (rc); - - while (value[strlen (value)-1] == 10 || - value[strlen (value)-1] == 13 || - value[strlen (value)-1] == 32) - value[strlen (value)-1] = 0; - return true; - } - } - } - } - - fclose (rc); - return false; +#if defined( __linux__ ) || defined( __APPLE__ ) + +static bool read_var( const char *filename, const char *section, const char *key, char *value ){ + char line[1024], *ptr; + FILE *rc; + + rc = fopen( filename, "rt" ); + + if ( rc == NULL ) { + return false; + } + + while ( fgets( line, 1024, rc ) != 0 ) + { + // First we find the section + if ( line[0] != '[' ) { + continue; + } + + ptr = strchr( line, ']' ); + *ptr = '\0'; + + if ( strcmp( &line[1], section ) == 0 ) { + while ( fgets( line, 1024, rc ) != 0 ) + { + ptr = strchr( line, '=' ); + + if ( ptr == NULL ) { + // reached the end of the section + fclose( rc ); + return false; + } + *ptr = '\0'; + + if ( strcmp( line, key ) == 0 ) { + strcpy( value, ptr + 1 ); + fclose( rc ); + + while ( value[strlen( value ) - 1] == 10 || + value[strlen( value ) - 1] == 13 || + value[strlen( value ) - 1] == 32 ) + value[strlen( value ) - 1] = 0; + return true; + } + } + } + } + + fclose( rc ); + return false; } -static bool save_var (const char *filename, const char *section, const char *key, const char *value) -{ - char line[1024], *ptr; - FILE *old_rc = NULL, *rc; - bool found; - - rc = fopen (filename, "rb"); - - if (rc != NULL) - { - guint32 len; - void *buf; - - char *tmpname = g_strdup_printf ("%s.tmp", filename); - old_rc = fopen (tmpname, "w+b"); - g_free (tmpname); - - fseek (rc, 0, SEEK_END); - len = ftell (rc); - rewind (rc); - buf = g_malloc (len); - fread (buf, len, 1, rc); - fwrite (buf, len, 1, old_rc); - g_free (buf); - fclose (rc); - rewind (old_rc); - } - - rc = fopen (filename, "wb"); - - if (rc == NULL) - return false; - - // First we need to find the section - found = false; - if (old_rc != NULL) - while (fgets (line, 1024, old_rc) != NULL) - { - fputs (line, rc); - - if (line[0] == '[') - { - ptr = strchr (line, ']'); - *ptr = '\0'; - - if (strcmp (&line[1], section) == 0) - { - found = true; - break; - } - } - } - - if (!found) - { - fputs ("\n", rc); - fprintf (rc, "[%s]\n", section); - } - - fprintf (rc, "%s=%s\n", key, value); - - if (old_rc != NULL) - { - while (fgets (line, 1024, old_rc) != NULL) - { - ptr = strchr (line, '='); - - if (ptr != NULL) - { - *ptr = '\0'; - - if (strcmp (line, key) == 0) - break; - - *ptr = '='; - fputs (line, rc); - } - else - { - fputs (line, rc); - break; - } - } - - while (fgets (line, 1024, old_rc) != NULL) - fputs (line, rc); - - fclose (old_rc); - - char *tmpname = g_strdup_printf ("%s.tmp", filename); - remove (tmpname); - g_free (tmpname); - } - - fclose (rc); - - return true; +static bool save_var( const char *filename, const char *section, const char *key, const char *value ){ + char line[1024], *ptr; + FILE *old_rc = NULL, *rc; + bool found; + + rc = fopen( filename, "rb" ); + + if ( rc != NULL ) { + guint32 len; + void *buf; + + char *tmpname = g_strdup_printf( "%s.tmp", filename ); + old_rc = fopen( tmpname, "w+b" ); + g_free( tmpname ); + + fseek( rc, 0, SEEK_END ); + len = ftell( rc ); + rewind( rc ); + buf = g_malloc( len ); + fread( buf, len, 1, rc ); + fwrite( buf, len, 1, old_rc ); + g_free( buf ); + fclose( rc ); + rewind( old_rc ); + } + + rc = fopen( filename, "wb" ); + + if ( rc == NULL ) { + return false; + } + + // First we need to find the section + found = false; + if ( old_rc != NULL ) { + while ( fgets( line, 1024, old_rc ) != NULL ) + { + fputs( line, rc ); + + if ( line[0] == '[' ) { + ptr = strchr( line, ']' ); + *ptr = '\0'; + + if ( strcmp( &line[1], section ) == 0 ) { + found = true; + break; + } + } + } + } + + if ( !found ) { + fputs( "\n", rc ); + fprintf( rc, "[%s]\n", section ); + } + + fprintf( rc, "%s=%s\n", key, value ); + + if ( old_rc != NULL ) { + while ( fgets( line, 1024, old_rc ) != NULL ) + { + ptr = strchr( line, '=' ); + + if ( ptr != NULL ) { + *ptr = '\0'; + + if ( strcmp( line, key ) == 0 ) { + break; + } + + *ptr = '='; + fputs( line, rc ); + } + else + { + fputs( line, rc ); + break; + } + } + + while ( fgets( line, 1024, old_rc ) != NULL ) + fputs( line, rc ); + + fclose( old_rc ); + + char *tmpname = g_strdup_printf( "%s.tmp", filename ); + remove( tmpname ); + g_free( tmpname ); + } + + fclose( rc ); + + return true; } #endif -int INIGetInt(const char *key, int def) -{ -#if defined(__linux__) || defined(__APPLE__) - char value[1024]; +int INIGetInt( const char *key, int def ){ +#if defined( __linux__ ) || defined( __APPLE__ ) + char value[1024]; - if (read_var (INIfn, CONFIG_SECTION, key, value)) - return atoi (value); - else - return def; + if ( read_var( INIfn, CONFIG_SECTION, key, value ) ) { + return atoi( value ); + } + else{ + return def; + } #else - return GetPrivateProfileInt(CONFIG_SECTION, key, def, INIfn); + return GetPrivateProfileInt( CONFIG_SECTION, key, def, INIfn ); #endif } -void INISetInt(const char *key, int val, const char *comment /* = NULL */) -{ - char s[1000]; - - if(comment) - sprintf(s, "%d ; %s", val, comment); - else - sprintf(s, "%d", val); -#if defined(__linux__) || defined(__APPLE__) - save_var (INIfn, CONFIG_SECTION, key, s); +void INISetInt( const char *key, int val, const char *comment /* = NULL */ ){ + char s[1000]; + + if ( comment ) { + sprintf( s, "%d ; %s", val, comment ); + } + else{ + sprintf( s, "%d", val ); + } +#if defined( __linux__ ) || defined( __APPLE__ ) + save_var( INIfn, CONFIG_SECTION, key, s ); #else - WritePrivateProfileString(CONFIG_SECTION, key, s, INIfn); + WritePrivateProfileString( CONFIG_SECTION, key, s, INIfn ); #endif } @@ -355,125 +359,120 @@ static const char *PLUGIN_COMMANDS = Q3R_CMD_RELEASE ";" Q3R_CMD_LOAD; -extern "C" LPVOID WINAPI QERPlug_GetFuncTable() -{ - return &g_FuncTable; +extern "C" LPVOID WINAPI QERPlug_GetFuncTable(){ + return &g_FuncTable; } //extern "C" LPCSTR WINAPI QERPlug_Init (HMODULE hApp, GtkWidget* hwndMain) -extern "C" const char* QERPlug_Init (void *hApp, void* pMainWidget) -{ - // Setup defaults & load config - InitInstance(); +extern "C" const char* QERPlug_Init( void *hApp, void* pMainWidget ){ + // Setup defaults & load config + InitInstance(); - return "Portal Viewer for Q3Radiant"; + return "Portal Viewer for Q3Radiant"; } -extern "C" const char* QERPlug_GetName() -{ - return (char*)PLUGIN_NAME; +extern "C" const char* QERPlug_GetName(){ + return (char*)PLUGIN_NAME; } -extern "C" const char* QERPlug_GetCommandList() -{ - return (char*)PLUGIN_COMMANDS; +extern "C" const char* QERPlug_GetCommandList(){ + return (char*)PLUGIN_COMMANDS; } /* -void Sys_Printf (char *text, ...) -{ - va_list argptr; - char buf[32768]; + void Sys_Printf (char *text, ...) + { + va_list argptr; + char buf[32768]; - va_start (argptr,text); - vsprintf (buf, text, argptr); - va_end (argptr); + va_start (argptr,text); + vsprintf (buf, text, argptr); + va_end (argptr); - g_FuncTable.m_pfnSysMsg (buf); -} -*/ + g_FuncTable.m_pfnSysMsg (buf); + } + */ bool interfaces_started = false; -static void CheckInterfaces() -{ - if (interfaces_started) - return; +static void CheckInterfaces(){ + if ( interfaces_started ) { + return; + } - render.Register(); + render.Register(); - interfaces_started = true; + interfaces_started = true; } -extern "C" void QERPlug_Dispatch(const char* p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) -{ - Sys_Printf (MSG_PREFIX "Command \"%s\"\n",p); - - if (!strcmp(p,Q3R_CMD_ABOUT)) - { - DoAboutDlg (); - } - else if (!strcmp(p,Q3R_CMD_LOAD)) - { - CheckInterfaces(); - - if (interfaces_started) - { - if (DoLoadPortalFileDialog () == IDOK) - { - portals.Load(); - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_ALL); - } - else - { - Sys_Printf(MSG_PREFIX "Portal file load aborted.\n", portals.fn); - } - } - } - else if (!strcmp(p,Q3R_CMD_RELEASE)) - { - portals.Purge(); - - if (interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_ALL); - - Sys_Printf(MSG_PREFIX "Portals unloaded.\n"); - } - else if (!strcmp(p,Q3R_CMD_SHOW_2D)) - { - portals.show_2d = !portals.show_2d; - - if(interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_ALL); - SaveConfig(); - - if(portals.show_2d) - Sys_Printf(MSG_PREFIX "Portals will be rendered in 2D view.\n"); - else - Sys_Printf(MSG_PREFIX "Portals will NOT be rendered in 2D view.\n"); - } - else if (!strcmp(p,Q3R_CMD_SHOW_3D)) - { - portals.show_3d = !portals.show_3d; - SaveConfig(); - - if (interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_ALL); - - if (portals.show_3d) - Sys_Printf(MSG_PREFIX "Portals will be rendered in 3D view.\n"); - else - Sys_Printf(MSG_PREFIX "Portals will NOT be rendered in 3D view.\n"); - } - else if (!strcmp(p,Q3R_CMD_OPTIONS)) - { - DoConfigDialog (); - SaveConfig(); - - if (interfaces_started) - g_FuncTable.m_pfnSysUpdateWindows(UPDATE_ALL); - } +extern "C" void QERPlug_Dispatch( const char* p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ){ + Sys_Printf( MSG_PREFIX "Command \"%s\"\n",p ); + + if ( !strcmp( p,Q3R_CMD_ABOUT ) ) { + DoAboutDlg(); + } + else if ( !strcmp( p,Q3R_CMD_LOAD ) ) { + CheckInterfaces(); + + if ( interfaces_started ) { + if ( DoLoadPortalFileDialog() == IDOK ) { + portals.Load(); + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_ALL ); + } + else + { + Sys_Printf( MSG_PREFIX "Portal file load aborted.\n", portals.fn ); + } + } + } + else if ( !strcmp( p,Q3R_CMD_RELEASE ) ) { + portals.Purge(); + + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_ALL ); + } + + Sys_Printf( MSG_PREFIX "Portals unloaded.\n" ); + } + else if ( !strcmp( p,Q3R_CMD_SHOW_2D ) ) { + portals.show_2d = !portals.show_2d; + + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_ALL ); + } + SaveConfig(); + + if ( portals.show_2d ) { + Sys_Printf( MSG_PREFIX "Portals will be rendered in 2D view.\n" ); + } + else{ + Sys_Printf( MSG_PREFIX "Portals will NOT be rendered in 2D view.\n" ); + } + } + else if ( !strcmp( p,Q3R_CMD_SHOW_3D ) ) { + portals.show_3d = !portals.show_3d; + SaveConfig(); + + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_ALL ); + } + + if ( portals.show_3d ) { + Sys_Printf( MSG_PREFIX "Portals will be rendered in 3D view.\n" ); + } + else{ + Sys_Printf( MSG_PREFIX "Portals will NOT be rendered in 3D view.\n" ); + } + } + else if ( !strcmp( p,Q3R_CMD_OPTIONS ) ) { + DoConfigDialog(); + SaveConfig(); + + if ( interfaces_started ) { + g_FuncTable.m_pfnSysUpdateWindows( UPDATE_ALL ); + } + } } @@ -484,12 +483,12 @@ extern "C" void QERPlug_Dispatch(const char* p, vec3_t vMin, vec3_t vMax, bool b class CSynapseClientPrtView : public CSynapseClient { public: - // CSynapseClient API - bool RequestAPI(APIDescriptor_t *pAPI); - const char* GetInfo(); +// CSynapseClient API +bool RequestAPI( APIDescriptor_t *pAPI ); +const char* GetInfo(); - CSynapseClientPrtView() { } - virtual ~CSynapseClientPrtView() { } +CSynapseClientPrtView() { } +virtual ~CSynapseClientPrtView() { } }; @@ -499,50 +498,45 @@ CSynapseClientPrtView g_SynapseClient; #if __GNUC__ >= 4 #pragma GCC visibility push(default) #endif -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) { +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()); + 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, PRTVIEW_MINOR, sizeof(_QERPluginTable)); + g_SynapseClient.AddAPI( PLUGIN_MAJOR, PRTVIEW_MINOR, sizeof( _QERPluginTable ) ); - g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable); - g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(g_QglTable), SYN_REQUIRE, &g_QglTable); + g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( g_FuncTable ), SYN_REQUIRE, &g_FuncTable ); + g_SynapseClient.AddAPI( QGL_MAJOR, NULL, sizeof( g_QglTable ), SYN_REQUIRE, &g_QglTable ); - return &g_SynapseClient; + return &g_SynapseClient; } -bool CSynapseClientPrtView::RequestAPI(APIDescriptor_t *pAPI) -{ - if( !strcmp(pAPI->major_name, PLUGIN_MAJOR) ) - { - if( !strcmp(pAPI->minor_name, PRTVIEW_MINOR) ) - { - _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; +bool CSynapseClientPrtView::RequestAPI( APIDescriptor_t *pAPI ){ + if ( !strcmp( pAPI->major_name, PLUGIN_MAJOR ) ) { + if ( !strcmp( pAPI->minor_name, PRTVIEW_MINOR ) ) { + _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; } #include "version.h" -const char* CSynapseClientPrtView::GetInfo() -{ - return "PrtView module built " __DATE__ " " RADIANT_VERSION; +const char* CSynapseClientPrtView::GetInfo(){ + return "PrtView module built " __DATE__ " " RADIANT_VERSION; } diff --git a/contrib/prtview/prtview.h b/contrib/prtview/prtview.h index 468df3fc..f1c53d6f 100644 --- a/contrib/prtview/prtview.h +++ b/contrib/prtview/prtview.h @@ -1,29 +1,29 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ // PrtView.h : main header file for the PRTVIEW DLL // -#if !defined(AFX_PRTVIEW_H__234356A6_1D66_11D4_BFEB_204C4F4F5020__INCLUDED_) +#if !defined( AFX_PRTVIEW_H__234356A6_1D66_11D4_BFEB_204C4F4F5020__INCLUDED_ ) #define AFX_PRTVIEW_H__234356A6_1D66_11D4_BFEB_204C4F4F5020__INCLUDED_ -void InitInstance (); -void SaveConfig (); +void InitInstance(); +void SaveConfig(); #endif // !defined(AFX_PRTVIEW_H__234356A6_1D66_11D4_BFEB_204C4F4F5020__INCLUDED_) diff --git a/contrib/prtview/resource.h b/contrib/prtview/resource.h index 5fdce405..0d5e65bc 100644 --- a/contrib/prtview/resource.h +++ b/contrib/prtview/resource.h @@ -31,7 +31,7 @@ #define IDC_CLIP 1023 // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 133 diff --git a/contrib/prtview/stdafx.cpp b/contrib/prtview/stdafx.cpp index 06ae853b..75b472a0 100644 --- a/contrib/prtview/stdafx.cpp +++ b/contrib/prtview/stdafx.cpp @@ -1,25 +1,24 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ // stdafx.cpp : source file that includes just the standard includes // PrtView.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" - diff --git a/contrib/prtview/stdafx.h b/contrib/prtview/stdafx.h index 2fddbdc9..5a0ceb2b 100644 --- a/contrib/prtview/stdafx.h +++ b/contrib/prtview/stdafx.h @@ -1,28 +1,28 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -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 + */ #ifndef __PRTVIEW_AFX_H__ #define __PRTVIEW_AFX_H__ #include -#if defined(__linux__) || defined(__APPLE__) +#if defined( __linux__ ) || defined( __APPLE__ ) #include // Necessary for proper boolean type declaration @@ -32,12 +32,12 @@ typedef guint32 COLORREF; typedef void* LPVOID; typedef char* LPCSTR; typedef void* HMODULE; -typedef int BOOL; +typedef int BOOL; -#define RGB(r, g, b) ((guint32)(((guint8) (r) | ((guint16) (g) << 8))|(((guint32) (guint8) (b)) << 16))) -#define GetRValue(rgb) ((guint8)(rgb)) -#define GetGValue(rgb) ((guint8)(((guint16)(rgb)) >> 8)) -#define GetBValue(rgb) ((guint8)((rgb)>>16)) +#define RGB( r, g, b ) ( (guint32)( ( (guint8) ( r ) | ( (guint16) ( g ) << 8 ) ) | ( ( (guint32) (guint8) ( b ) ) << 16 ) ) ) +#define GetRValue( rgb ) ( (guint8)( rgb ) ) +#define GetGValue( rgb ) ( (guint8)( ( (guint16)( rgb ) ) >> 8 ) ) +#define GetBValue( rgb ) ( (guint8)( ( rgb ) >> 16 ) ) #define _MAX_PATH PATH_MAX @@ -60,17 +60,17 @@ typedef int BOOL; #include "gtkdlgs.h" #include "prtview.h" #include "portals.h" -#include "resource.h" // main symbols +#include "resource.h" // main symbols #define MSG_PREFIX "Portal Viewer plugin: " #define PRTVIEW_MINOR "prtview" -#define UPDATE_2D (W_XY | W_XZ | W_YZ) -#define UPDATE_3D (W_CAMERA) -#define UPDATE_ALL (UPDATE_2D | UPDATE_3D) +#define UPDATE_2D ( W_XY | W_XZ | W_YZ ) +#define UPDATE_3D ( W_CAMERA ) +#define UPDATE_ALL ( UPDATE_2D | UPDATE_3D ) -int INIGetInt(const char *key, int def); -void INISetInt(const char *key, int val, const char *comment = NULL); +int INIGetInt( const char *key, int def ); +void INISetInt( const char *key, int val, const char *comment = NULL ); extern bool interfaces_started; diff --git a/contrib/ufoai/plugin.cpp b/contrib/ufoai/plugin.cpp index 5a2b8a5f..7248bf60 100644 --- a/contrib/ufoai/plugin.cpp +++ b/contrib/ufoai/plugin.cpp @@ -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-2007 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 "ufoai_filters.h" @@ -45,7 +45,7 @@ void *g_pMainWidget; //backwards for some reason static const char *PLUGIN_COMMANDS = CMD_ABOUT ";" CMD_SEP; -static const char *PLUGIN_ABOUT = _("UFO: Alien Invasion plugin " PLUGIN_VERSION "\nby Martin Gerhardy"); +static const char *PLUGIN_ABOUT = _( "UFO: Alien Invasion plugin " PLUGIN_VERSION "\nby Martin Gerhardy" ); #define NUM_TOOLBAR_BUTTONS FILTER_MAX typedef struct toolbar_button_info_s @@ -53,7 +53,7 @@ typedef struct toolbar_button_info_s const char *image; const char *text; const char *tip; - void (*func)(); + void ( *func )(); IToolbarButton::EType type; } toolbar_button_info_t; @@ -61,85 +61,85 @@ static const toolbar_button_info_t toolbar_buttons[NUM_TOOLBAR_BUTTONS] = { { "ufoai_actorclip.bmp", - _("Filter actorclip"), - _("Actorclip"), + _( "Filter actorclip" ), + _( "Actorclip" ), DoActorClipFiltering, IToolbarButton::eToggleButton }, { "ufoai_weaponclip.bmp", - _("Filter weaponclip"), - _("Weaponclip"), + _( "Filter weaponclip" ), + _( "Weaponclip" ), DoWeaponClipFiltering, IToolbarButton::eToggleButton }, { "ufoai_nodraw.bmp", - _("Filter nodraw"), - _("NoDraw"), + _( "Filter nodraw" ), + _( "NoDraw" ), DoNoDrawFiltering, IToolbarButton::eToggleButton }, { "ufoai_stepon.bmp", - _("Filter stepon"), - _("Stepon"), + _( "Filter stepon" ), + _( "Stepon" ), DoSteponFiltering, IToolbarButton::eToggleButton }, { "ufoai_level1.bmp", - _("Filter level1"), - _("Level 1"), + _( "Filter level1" ), + _( "Level 1" ), DoLevel1Filtering, IToolbarButton::eToggleButton }, { "ufoai_level2.bmp", - _("Filter level2"), - _("Level 2"), + _( "Filter level2" ), + _( "Level 2" ), DoLevel2Filtering, IToolbarButton::eToggleButton }, { "ufoai_level3.bmp", - _("Filter level3"), - _("Level 3"), + _( "Filter level3" ), + _( "Level 3" ), DoLevel3Filtering, IToolbarButton::eToggleButton }, { "ufoai_level4.bmp", - _("Filter level4"), - _("Level 4"), + _( "Filter level4" ), + _( "Level 4" ), DoLevel4Filtering, IToolbarButton::eToggleButton }, { "ufoai_level5.bmp", - _("Filter level5"), - _("Level 5"), + _( "Filter level5" ), + _( "Level 5" ), DoLevel5Filtering, IToolbarButton::eToggleButton }, { "ufoai_level6.bmp", - _("Filter level6"), - _("Level 6"), + _( "Filter level6" ), + _( "Level 6" ), DoLevel6Filtering, IToolbarButton::eToggleButton }, { "ufoai_level7.bmp", - _("Filter level7"), - _("Level 7"), + _( "Filter level7" ), + _( "Level 7" ), DoLevel7Filtering, IToolbarButton::eToggleButton }, { "ufoai_level8.bmp", - _("Filter level8"), - _("Level 8"), + _( "Filter level8" ), + _( "Level 8" ), DoLevel8Filtering, IToolbarButton::eToggleButton }, @@ -148,45 +148,37 @@ static const toolbar_button_info_t toolbar_buttons[NUM_TOOLBAR_BUTTONS] = class UFOAIButton : public IToolbarButton { public: - const toolbar_button_info_s *bi; - virtual const char* getImage() const - { - return bi->image; - } - virtual const char* getText() const - { - return bi->text; - } - virtual const char* getTooltip() const - { - return bi->tip; - } - virtual void activate() const - { - bi->func(); - return ; - } - virtual EType getType() const - { - return bi->type; - } +const toolbar_button_info_s *bi; +virtual const char* getImage() const { + return bi->image; +} +virtual const char* getText() const { + return bi->text; +} +virtual const char* getTooltip() const { + return bi->tip; +} +virtual void activate() const { + bi->func(); + return ; +} +virtual EType getType() const { + return bi->type; +} }; UFOAIButton g_ufoaibuttons[NUM_TOOLBAR_BUTTONS]; -unsigned int ToolbarButtonCount (void) -{ +unsigned int ToolbarButtonCount( void ){ return NUM_TOOLBAR_BUTTONS; } -const IToolbarButton* GetToolbarButton (unsigned int index) -{ +const IToolbarButton* GetToolbarButton( unsigned int index ){ g_ufoaibuttons[index].bi = &toolbar_buttons[index]; return &g_ufoaibuttons[index]; } -extern "C" const char* QERPlug_Init (void *hApp, void* pMainWidget) -{ +extern "C" const char* QERPlug_Init( void *hApp, void* pMainWidget ){ g_pMainWidget = pMainWidget; UFOAIFilterInit(); @@ -194,22 +186,20 @@ extern "C" const char* QERPlug_Init (void *hApp, void* pMainWidget) return PLUGIN_NAME; } -extern "C" const char* QERPlug_GetName (void) -{ +extern "C" const char* QERPlug_GetName( void ){ return (char *) PLUGIN_NAME; } -extern "C" const char* QERPlug_GetCommandList (void) -{ +extern "C" const char* QERPlug_GetCommandList( void ){ return (char *) PLUGIN_COMMANDS; } -extern "C" void QERPlug_Dispatch (const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) -{ - if (!strcmp(p, CMD_ABOUT)) { - g_FuncTable.m_pfnMessageBox(NULL, PLUGIN_ABOUT, _("About"), MB_OK, NULL); - } else { - Sys_Printf("Message: %s\n", p); +extern "C" void QERPlug_Dispatch( const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ){ + if ( !strcmp( p, CMD_ABOUT ) ) { + g_FuncTable.m_pfnMessageBox( NULL, PLUGIN_ABOUT, _( "About" ), MB_OK, NULL ); + } + else { + Sys_Printf( "Message: %s\n", p ); } } @@ -222,64 +212,60 @@ CSynapseClientUFOAI g_SynapseClient; #if __GNUC__ >= 4 #pragma GCC visibility push(default) #endif -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces (const char *version, CSynapseServer *pServer) -{ +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); + 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()); + Set_Syn_Printf( g_pSynapseServer->Get_Syn_Printf() ); - g_SynapseClient.AddAPI(TOOLBAR_MAJOR, UFOAI_MINOR, sizeof(_QERPlugToolbarTable)); - g_SynapseClient.AddAPI(PLUGIN_MAJOR, UFOAI_MINOR, sizeof(_QERPluginTable)); + g_SynapseClient.AddAPI( TOOLBAR_MAJOR, UFOAI_MINOR, sizeof( _QERPlugToolbarTable ) ); + g_SynapseClient.AddAPI( PLUGIN_MAJOR, UFOAI_MINOR, sizeof( _QERPluginTable ) ); - g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable); - g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(g_QglTable), SYN_REQUIRE, &g_QglTable); - g_SynapseClient.AddAPI(VFS_MAJOR, "*", sizeof(g_FileSystemTable), SYN_REQUIRE, &g_FileSystemTable); + g_SynapseClient.AddAPI( RADIANT_MAJOR, NULL, sizeof( g_FuncTable ), SYN_REQUIRE, &g_FuncTable ); + g_SynapseClient.AddAPI( QGL_MAJOR, NULL, sizeof( g_QglTable ), SYN_REQUIRE, &g_QglTable ); + g_SynapseClient.AddAPI( VFS_MAJOR, "*", sizeof( g_FileSystemTable ), SYN_REQUIRE, &g_FileSystemTable ); // get worldspawn - g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(g_EntityTable), SYN_REQUIRE, &g_EntityTable); + g_SynapseClient.AddAPI( ENTITY_MAJOR, NULL, sizeof( g_EntityTable ), SYN_REQUIRE, &g_EntityTable ); // selected brushes - g_SynapseClient.AddAPI(DATA_MAJOR, NULL, sizeof(g_DataTable), SYN_REQUIRE, &g_DataTable); + g_SynapseClient.AddAPI( DATA_MAJOR, NULL, sizeof( g_DataTable ), SYN_REQUIRE, &g_DataTable ); return &g_SynapseClient; } -bool CSynapseClientUFOAI::RequestAPI (APIDescriptor_t *pAPI) -{ - if (!strcmp(pAPI->major_name, PLUGIN_MAJOR)) { - _QERPluginTable* pTable= static_cast<_QERPluginTable*>(pAPI->mpTable); +bool CSynapseClientUFOAI::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; - } else if (!strcmp(pAPI->major_name, TOOLBAR_MAJOR)) { - _QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable); + } + else if ( !strcmp( pAPI->major_name, TOOLBAR_MAJOR ) ) { + _QERPlugToolbarTable* pTable = static_cast<_QERPlugToolbarTable*>( pAPI->mpTable ); pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; pTable->m_pfnGetToolbarButton = &GetToolbarButton; return true; } - Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo()); + Syn_Printf( "ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo() ); return false; } #include "version.h" -const char* CSynapseClientUFOAI::GetInfo() -{ +const char* CSynapseClientUFOAI::GetInfo(){ return PLUGIN_NAME " plugin built " __DATE__ " " RADIANT_VERSION; } -const char* CSynapseClientUFOAI::GetName() -{ +const char* CSynapseClientUFOAI::GetName(){ return PLUGIN_NAME; } - diff --git a/contrib/ufoai/plugin.h b/contrib/ufoai/plugin.h index 62f260d6..68096758 100644 --- a/contrib/ufoai/plugin.h +++ b/contrib/ufoai/plugin.h @@ -1,31 +1,31 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ #ifndef _PLUGIN_H_ #define _PLUGIN_H_ /*! -\todo need general notice about lib purpose etc. -and the external dependencies (such as GLib, STL, mathlib etc.) -*/ + \todo need general notice about lib purpose etc. + and the external dependencies (such as GLib, STL, mathlib etc.) + */ #include // for CPtrArray for idata.h @@ -54,13 +54,13 @@ extern CSynapseServer* g_pSynapseServer; class CSynapseClientUFOAI : public CSynapseClient { public: - // CSynapseClient API - bool RequestAPI(APIDescriptor_t *pAPI); - const char* GetInfo(); - const char* GetName(); +// CSynapseClient API +bool RequestAPI( APIDescriptor_t *pAPI ); +const char* GetInfo(); +const char* GetName(); - CSynapseClientUFOAI() { } - virtual ~CSynapseClientUFOAI() { } +CSynapseClientUFOAI() { } +virtual ~CSynapseClientUFOAI() { } }; #define UFOAI_MINOR "ufo:ai" diff --git a/contrib/ufoai/ufoai_filters.cpp b/contrib/ufoai/ufoai_filters.cpp index cd68f246..7be6623f 100644 --- a/contrib/ufoai/ufoai_filters.cpp +++ b/contrib/ufoai/ufoai_filters.cpp @@ -8,38 +8,37 @@ static bfilter_t* filters[FILTER_MAX]; -void UFOAIFilterInit (void) -{ +void UFOAIFilterInit( void ){ // texture name filters - filters[FILTER_ACTORCLIP] = FilterAdd(1, 0, "actorclip", 0); - filters[FILTER_WEAPONCLIP] = FilterAdd(1, 0, "weaponclip", 0); - filters[FILTER_NODRAW] = FilterAdd(1, 0, "nodraw", 0); - filters[FILTER_STEPON] = FilterAdd(1, 0, "stepon", 0); + filters[FILTER_ACTORCLIP] = FilterAdd( 1, 0, "actorclip", 0 ); + filters[FILTER_WEAPONCLIP] = FilterAdd( 1, 0, "weaponclip", 0 ); + filters[FILTER_NODRAW] = FilterAdd( 1, 0, "nodraw", 0 ); + filters[FILTER_STEPON] = FilterAdd( 1, 0, "stepon", 0 ); // content flag filters - filters[FILTER_LEVEL1] = FilterAdd(7, UFOAI_CONTENTS_LEVEL_1, "level1", 0); - filters[FILTER_LEVEL2] = FilterAdd(7, UFOAI_CONTENTS_LEVEL_2, "level2", 0); - filters[FILTER_LEVEL3] = FilterAdd(7, UFOAI_CONTENTS_LEVEL_3, "level3", 0); - filters[FILTER_LEVEL4] = FilterAdd(7, UFOAI_CONTENTS_LEVEL_4, "level4", 0); - filters[FILTER_LEVEL5] = FilterAdd(7, UFOAI_CONTENTS_LEVEL_5, "level5", 0); - filters[FILTER_LEVEL6] = FilterAdd(7, UFOAI_CONTENTS_LEVEL_6, "level6", 0); - filters[FILTER_LEVEL7] = FilterAdd(7, UFOAI_CONTENTS_LEVEL_7, "level7", 0); - filters[FILTER_LEVEL8] = FilterAdd(7, UFOAI_CONTENTS_LEVEL_8, "level8", 0); - - Sys_Printf("UFO:AI Filters initialized\n"); + filters[FILTER_LEVEL1] = FilterAdd( 7, UFOAI_CONTENTS_LEVEL_1, "level1", 0 ); + filters[FILTER_LEVEL2] = FilterAdd( 7, UFOAI_CONTENTS_LEVEL_2, "level2", 0 ); + filters[FILTER_LEVEL3] = FilterAdd( 7, UFOAI_CONTENTS_LEVEL_3, "level3", 0 ); + filters[FILTER_LEVEL4] = FilterAdd( 7, UFOAI_CONTENTS_LEVEL_4, "level4", 0 ); + filters[FILTER_LEVEL5] = FilterAdd( 7, UFOAI_CONTENTS_LEVEL_5, "level5", 0 ); + filters[FILTER_LEVEL6] = FilterAdd( 7, UFOAI_CONTENTS_LEVEL_6, "level6", 0 ); + filters[FILTER_LEVEL7] = FilterAdd( 7, UFOAI_CONTENTS_LEVEL_7, "level7", 0 ); + filters[FILTER_LEVEL8] = FilterAdd( 7, UFOAI_CONTENTS_LEVEL_8, "level8", 0 ); + + Sys_Printf( "UFO:AI Filters initialized\n" ); } -void PerformFiltering (int type) -{ - if (!filters[type]) { - Sys_Printf("filters are not yet initialized\n"); +void PerformFiltering( int type ){ + if ( !filters[type] ) { + Sys_Printf( "filters are not yet initialized\n" ); return; } - if (filters[type]->active) { + if ( filters[type]->active ) { filters[type]->active = false; //Sys_Printf("filter %i deactivated (mask %i 0x%x)\n", type, filters[type]->mask, filters[type]->mask); - } else { + } + else { filters[type]->active = true; //Sys_Printf("filter %i activated (mask %i 0x%x)\n", type, filters[type]->mask, filters[type]->mask); } @@ -47,62 +46,50 @@ void PerformFiltering (int type) FiltersActivate(); } -void DoSteponFiltering(void) -{ - PerformFiltering(FILTER_STEPON); +void DoSteponFiltering( void ){ + PerformFiltering( FILTER_STEPON ); } -void DoWeaponClipFiltering(void) -{ - PerformFiltering(FILTER_WEAPONCLIP); +void DoWeaponClipFiltering( void ){ + PerformFiltering( FILTER_WEAPONCLIP ); } -void DoActorClipFiltering(void) -{ - PerformFiltering(FILTER_ACTORCLIP); +void DoActorClipFiltering( void ){ + PerformFiltering( FILTER_ACTORCLIP ); } -void DoNoDrawFiltering(void) -{ - PerformFiltering(FILTER_NODRAW); +void DoNoDrawFiltering( void ){ + PerformFiltering( FILTER_NODRAW ); } -void DoLevel1Filtering(void) -{ - PerformFiltering(FILTER_LEVEL1); +void DoLevel1Filtering( void ){ + PerformFiltering( FILTER_LEVEL1 ); } -void DoLevel2Filtering(void) -{ - PerformFiltering(FILTER_LEVEL2); +void DoLevel2Filtering( void ){ + PerformFiltering( FILTER_LEVEL2 ); } -void DoLevel3Filtering(void) -{ - PerformFiltering(FILTER_LEVEL3); +void DoLevel3Filtering( void ){ + PerformFiltering( FILTER_LEVEL3 ); } -void DoLevel4Filtering(void) -{ - PerformFiltering(FILTER_LEVEL4); +void DoLevel4Filtering( void ){ + PerformFiltering( FILTER_LEVEL4 ); } -void DoLevel5Filtering(void) -{ - PerformFiltering(FILTER_LEVEL5); +void DoLevel5Filtering( void ){ + PerformFiltering( FILTER_LEVEL5 ); } -void DoLevel6Filtering(void) -{ - PerformFiltering(FILTER_LEVEL6); +void DoLevel6Filtering( void ){ + PerformFiltering( FILTER_LEVEL6 ); } -void DoLevel7Filtering(void) -{ - PerformFiltering(FILTER_LEVEL7); +void DoLevel7Filtering( void ){ + PerformFiltering( FILTER_LEVEL7 ); } -void DoLevel8Filtering(void) -{ - PerformFiltering(FILTER_LEVEL8); +void DoLevel8Filtering( void ){ + PerformFiltering( FILTER_LEVEL8 ); } diff --git a/contrib/ufoai/ufoai_filters.h b/contrib/ufoai/ufoai_filters.h index c9e87237..ddab2d2a 100644 --- a/contrib/ufoai/ufoai_filters.h +++ b/contrib/ufoai/ufoai_filters.h @@ -32,18 +32,18 @@ enum FILTERS { #define UFOAI_SURF_NODRAW 0x00000080 -void DoSteponFiltering(void); -void DoWeaponClipFiltering(void); -void DoActorClipFiltering(void); -void DoNoDrawFiltering(void); -void DoLevel1Filtering(void); -void DoLevel2Filtering(void); -void DoLevel3Filtering(void); -void DoLevel4Filtering(void); -void DoLevel5Filtering(void); -void DoLevel6Filtering(void); -void DoLevel7Filtering(void); -void DoLevel8Filtering(void); +void DoSteponFiltering( void ); +void DoWeaponClipFiltering( void ); +void DoActorClipFiltering( void ); +void DoNoDrawFiltering( void ); +void DoLevel1Filtering( void ); +void DoLevel2Filtering( void ); +void DoLevel3Filtering( void ); +void DoLevel4Filtering( void ); +void DoLevel5Filtering( void ); +void DoLevel6Filtering( void ); +void DoLevel7Filtering( void ); +void DoLevel8Filtering( void ); // add the ufoai filters -void UFOAIFilterInit(void); +void UFOAIFilterInit( void ); diff --git a/docs/manual/quake3/Compile_Manual/cfgq3.c b/docs/manual/quake3/Compile_Manual/cfgq3.c index 47e43c80..8c3579ce 100644 --- a/docs/manual/quake3/Compile_Manual/cfgq3.c +++ b/docs/manual/quake3/Compile_Manual/cfgq3.c @@ -3,76 +3,76 @@ // Quake3 //=========================================================================== -#define PRESENCE_NONE 1 -#define PRESENCE_NORMAL 2 -#define PRESENCE_CROUCH 4 +#define PRESENCE_NONE 1 +#define PRESENCE_NORMAL 2 +#define PRESENCE_CROUCH 4 // more bounding boxes can be added if required // always minimize the number of bounding boxes listed here to reduce AAS file size // for instance if players cannot crouch then it's good to remove the bbox definition for it //bounding box when running/walking -bbox //30x30x56 +bbox //30x30x56 { - presencetype PRESENCE_NORMAL - flags 0x0000 - mins {-15, -15, -24} - maxs {15, 15, 32} + presencetype PRESENCE_NORMAL + flags 0x0000 + mins {-15, -15, -24} + maxs {15, 15, 32} } // bounding box when crouched -bbox //30x30x40 +bbox //30x30x40 { - presencetype PRESENCE_CROUCH - flags 0x0001 - mins {-15, -15, -24} - maxs {15, 15, 16} + presencetype PRESENCE_CROUCH + flags 0x0001 + mins {-15, -15, -24} + maxs {15, 15, 16} } // do not forget settings as they might not be defaulted correctly when this cfg is used settings { // physics settings - phys_gravitydirection {0, 0, -1} // direction of gravity - phys_friction 6 // friction - phys_stopspeed 100 // stop speed - phys_gravity 800 // gravity - phys_waterfriction 1 // friction in water - phys_watergravity 400 // gravity in water - phys_maxvelocity 320 // maximum run speed - phys_maxwalkvelocity 320 // maximum walk speed (set for running) - phys_maxcrouchvelocity 100 // maximum crouch speed - phys_maxswimvelocity 150 // maximum swim speed - phys_walkaccelerate 100 // acceleration for walking - phys_airaccelerate 0 // acceleration flying through the air - phys_swimaccelerate 0 // acceleration for swimming - phys_maxstep 18 // maximum step height - phys_maxsteepness 0.7 // maximum floor steepness a player can walk on - phys_maxwaterjump 19 // maximum height for an out of water jump - phys_maxbarrier 33 // maximum barrier a player can jump onto - phys_jumpvel 270 // jump velocity - phys_falldelta5 40 // falling delta for 5 damage ( see PM_CrashLand in game/bg_pmove.c ) - phys_falldelta10 60 // falling delta for 5 damage ( see PM_CrashLand in game/bg_pmove.c ) + phys_gravitydirection {0, 0, -1} // direction of gravity + phys_friction 6 // friction + phys_stopspeed 100 // stop speed + phys_gravity 800 // gravity + phys_waterfriction 1 // friction in water + phys_watergravity 400 // gravity in water + phys_maxvelocity 320 // maximum run speed + phys_maxwalkvelocity 320 // maximum walk speed (set for running) + phys_maxcrouchvelocity 100 // maximum crouch speed + phys_maxswimvelocity 150 // maximum swim speed + phys_walkaccelerate 100 // acceleration for walking + phys_airaccelerate 0 // acceleration flying through the air + phys_swimaccelerate 0 // acceleration for swimming + phys_maxstep 18 // maximum step height + phys_maxsteepness 0.7 // maximum floor steepness a player can walk on + phys_maxwaterjump 19 // maximum height for an out of water jump + phys_maxbarrier 33 // maximum barrier a player can jump onto + phys_jumpvel 270 // jump velocity + phys_falldelta5 40 // falling delta for 5 damage ( see PM_CrashLand in game/bg_pmove.c ) + phys_falldelta10 60 // falling delta for 5 damage ( see PM_CrashLand in game/bg_pmove.c ) // reachability settings // the following are all additional travel times added // for certain reachabilities in 1/100th of a second - rs_waterjump 400 - rs_teleport 50 - rs_barrierjump 100 - rs_startcrouch 300 - rs_startgrapple 500 - rs_startwalkoffledge 70 - rs_startjump 300 - rs_rocketjump 500 - rs_bfgjump 500 - rs_jumppad 250 - rs_aircontrolledjumppad 300 - rs_funcbob 300 - rs_startelevator 50 - rs_falldamage5 300 // avoid getting 5 damage - rs_falldamage10 500 // avoid getting 10 damage + rs_waterjump 400 + rs_teleport 50 + rs_barrierjump 100 + rs_startcrouch 300 + rs_startgrapple 500 + rs_startwalkoffledge 70 + rs_startjump 300 + rs_rocketjump 500 + rs_bfgjump 500 + rs_jumppad 250 + rs_aircontrolledjumppad 300 + rs_funcbob 300 + rs_startelevator 50 + rs_falldamage5 300 // avoid getting 5 damage + rs_falldamage10 500 // avoid getting 10 damage // if != 0 then this is the maximum fall height a reachability can be created for - rs_maxfallheight 0 + rs_maxfallheight 0 // maximum height a bot may fall down when jumping to some location - rs_maxjumpfallheight 450 + rs_maxjumpfallheight 450 } diff --git a/include/gtkr_list.h b/include/gtkr_list.h index 760f09f7..767c7f8e 100644 --- a/include/gtkr_list.h +++ b/include/gtkr_list.h @@ -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-2007 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 #include "stl_check.h" diff --git a/include/gtkr_vector.h b/include/gtkr_vector.h index a070cf46..c7394cac 100644 --- a/include/gtkr_vector.h +++ b/include/gtkr_vector.h @@ -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-2007 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 #include "stl_check.h" diff --git a/include/ibrush.h b/include/ibrush.h index e191ac26..c2e159c6 100644 --- a/include/ibrush.h +++ b/include/ibrush.h @@ -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-2007 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 + */ #ifndef _IBRUSH_H_ #define _IBRUSH_H_ @@ -28,31 +28,31 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define BRUSH_MAJOR "brush" // {c1c3f567-2541-4aa3-9d5b-031fbe2a013b} -static const GUID QERBrushTable_GUID = +static const GUID QERBrushTable_GUID = { 0xc1c3f567, 0x2541, 0x4aa3, { 0x9d, 0x5b, 0x03, 0x1f, 0xbe, 0x2a, 0x01, 0x3b } }; -typedef void (* PFN_BRUSHADDTOLIST) (brush_t *b, brush_t *lst); -typedef void (* PFN_BRUSHBUILD) (brush_t *b, bool bSnap, bool bMarkMap, bool bConvert, bool bFilterTest); -typedef brush_t* (* PFN_BRUSHCREATE) (vec3_t mins, vec3_t maxs, texdef_t *texdef); -typedef void (* PFN_BRUSHFREE) (brush_t *b, bool bRemoveNode); -typedef void (* PFN_BRUSHROTATE) (brush_t *b, vec3_t vAngle, vec3_t vOrigin, bool bBuild); -typedef brush_t* (* PFN_BRUSHALLOC) (); -typedef int (* PFN_BPMESSAGEBOX) (int); -typedef face_t* (* PFN_FACEALLOC) (void); -typedef eclass_t* (* PFN_HASMODEL) (brush_t *b); +typedef void ( *PFN_BRUSHADDTOLIST )( brush_t *b, brush_t *lst ); +typedef void ( *PFN_BRUSHBUILD )( brush_t *b, bool bSnap, bool bMarkMap, bool bConvert, bool bFilterTest ); +typedef brush_t* ( *PFN_BRUSHCREATE )( vec3_t mins, vec3_t maxs, texdef_t *texdef ); +typedef void ( *PFN_BRUSHFREE )( brush_t *b, bool bRemoveNode ); +typedef void ( *PFN_BRUSHROTATE )( brush_t *b, vec3_t vAngle, vec3_t vOrigin, bool bBuild ); +typedef brush_t* ( *PFN_BRUSHALLOC )(); +typedef int ( *PFN_BPMESSAGEBOX )( int ); +typedef face_t* ( *PFN_FACEALLOC )( void ); +typedef eclass_t* ( *PFN_HASMODEL )( brush_t *b ); struct _QERBrushTable { - int m_nSize; - PFN_BRUSHADDTOLIST m_pfnBrush_AddToList; - PFN_BRUSHBUILD m_pfnBrush_Build; - PFN_BRUSHCREATE m_pfnBrush_Create; - PFN_BRUSHFREE m_pfnBrush_Free; - PFN_BRUSHROTATE m_pfnBrush_Rotate; - PFN_BRUSHALLOC m_pfnBrushAlloc; - PFN_BPMESSAGEBOX m_pfnBP_MessageBox; - PFN_FACEALLOC m_pfnFace_Alloc; - PFN_HASMODEL m_pfnHasModel; + int m_nSize; + PFN_BRUSHADDTOLIST m_pfnBrush_AddToList; + PFN_BRUSHBUILD m_pfnBrush_Build; + PFN_BRUSHCREATE m_pfnBrush_Create; + PFN_BRUSHFREE m_pfnBrush_Free; + PFN_BRUSHROTATE m_pfnBrush_Rotate; + PFN_BRUSHALLOC m_pfnBrushAlloc; + PFN_BPMESSAGEBOX m_pfnBP_MessageBox; + PFN_FACEALLOC m_pfnFace_Alloc; + PFN_HASMODEL m_pfnHasModel; }; #ifdef USE_BRUSHTABLE_DEFINE diff --git a/include/ibspfrontend.h b/include/ibspfrontend.h index 973f0633..39ded7c7 100644 --- a/include/ibspfrontend.h +++ b/include/ibspfrontend.h @@ -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-2007 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 + */ //----------------------------------------------------------------------------- // @@ -35,43 +35,43 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // define a GUID for this interface so plugins can access and reference it // {8ED6A480-BA5E-11d3-A3E3-0004AC96D4C3} -static const GUID QERPlugBSPFrontendTable_GUID = +static const GUID QERPlugBSPFrontendTable_GUID = { 0x8ed6a480, 0xba5e, 0x11d3, { 0xa3, 0xe3, 0x0, 0x4, 0xac, 0x96, 0xd4, 0xc3 } }; // ask the plugin about the items to show up in the BSP menu -typedef char * (WINAPI* PFN_GETBSPMENU) (); +typedef char * ( WINAPI * PFN_GETBSPMENU )(); // dispatch a BSP menu command -typedef void (WINAPI* PFN_DISPATCHBSPCOMMAND) (char *); +typedef void ( WINAPI * PFN_DISPATCHBSPCOMMAND )( char * ); // this one gets called after a monitoring loop ends // 0: all good // 1: timed out / Radiant didn't get the connection // 2: got a connection, compilation ended with an error -typedef void (WINAPI* PFN_ENDLISTEN) (int status); +typedef void ( WINAPI * PFN_ENDLISTEN )( int status ); struct _QERPlugBSPFrontendTable { int m_nSize; - PFN_GETBSPMENU m_pfnGetBSPMenu; - PFN_DISPATCHBSPCOMMAND m_pfnDispatchBSPCommand; - PFN_ENDLISTEN m_pfnEndListen; + PFN_GETBSPMENU m_pfnGetBSPMenu; + PFN_DISPATCHBSPCOMMAND m_pfnDispatchBSPCommand; + PFN_ENDLISTEN m_pfnEndListen; }; // interface provided by Radiant to the plugin // {A2CCF366-BA60-11d3-A3E3-0004AC96D4C3} -static const GUID QERAppBSPFrontendTable_GUID = +static const GUID QERAppBSPFrontendTable_GUID = { 0xa2ccf366, 0xba60, 0x11d3, { 0xa3, 0xe3, 0x0, 0x4, 0xac, 0x96, 0xd4, 0xc3 } }; -typedef char * (WINAPI* PFN_GETMAPNAME) (); -typedef void (WINAPI* PFN_LISTEN) (); -typedef void (WINAPI* PFN_SLEEP) (); +typedef char * ( WINAPI * PFN_GETMAPNAME )(); +typedef void ( WINAPI * PFN_LISTEN )(); +typedef void ( WINAPI * PFN_SLEEP )(); struct _QERAppBSPFrontendTable { int m_nSize; - PFN_GETMAPNAME m_pfnGetMapName; - PFN_LISTEN m_pfnListen; - PFN_SLEEP m_pfnSleep; - //++timo TODO: needs a hook to reset the debug window (in regular mode it's done at startup of the BSP operation) + PFN_GETMAPNAME m_pfnGetMapName; + PFN_LISTEN m_pfnListen; + PFN_SLEEP m_pfnSleep; + //++timo TODO: needs a hook to reset the debug window (in regular mode it's done at startup of the BSP operation) }; #endif diff --git a/include/icamera.h b/include/icamera.h index 07425ec4..45c40d7c 100644 --- a/include/icamera.h +++ b/include/icamera.h @@ -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-2007 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 + */ //----------------------------------------------------------------------------- // @@ -30,16 +30,16 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define CAMERA_MAJOR "camera" -typedef void (* PFN_GETCAMERA) ( vec3_t origin, vec3_t angles ); -typedef void (* PFN_SETCAMERA) ( vec3_t origin, vec3_t angles ); -typedef void (* PFN_GETCAMWINDOWEXTENTS) ( int *x, int *y, int *width, int *height ); +typedef void ( *PFN_GETCAMERA )( vec3_t origin, vec3_t angles ); +typedef void ( *PFN_SETCAMERA )( vec3_t origin, vec3_t angles ); +typedef void ( *PFN_GETCAMWINDOWEXTENTS )( int *x, int *y, int *width, int *height ); struct _QERCameraTable { int m_nSize; - PFN_GETCAMERA m_pfnGetCamera; - PFN_SETCAMERA m_pfnSetCamera; - PFN_GETCAMWINDOWEXTENTS m_pfnGetCamWindowExtents; + PFN_GETCAMERA m_pfnGetCamera; + PFN_SETCAMERA m_pfnSetCamera; + PFN_GETCAMWINDOWEXTENTS m_pfnGetCamWindowExtents; }; #endif diff --git a/include/idata.h b/include/idata.h index fe453366..2aeef34f 100644 --- a/include/idata.h +++ b/include/idata.h @@ -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-2007 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 + */ //----------------------------------------------------------------------------- // @@ -35,23 +35,23 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // FIXME: remove // define a GUID for this interface so plugins can access and reference it // {608A9870-BCE7-11d4-A454-0004AC96D4C3} -static const GUID QERAppDataTable_GUID = +static const GUID QERAppDataTable_GUID = { 0x608a9870, 0xbce7, 0x11d4, { 0xa4, 0x54, 0x0, 0x4, 0xac, 0x96, 0xd4, 0xc3 } }; // pointers to active_brushes, selected_brushes and filtered_brushes -typedef brush_t* (WINAPI* PFN_ACTIVEBRUSHES) (); -typedef brush_t* (WINAPI* PFN_SELECTEDBRUSHES) (); -typedef brush_t* (WINAPI* PFN_FILTEREDBRUSHES) (); -typedef CPtrArray* (WINAPI* PFN_LSTSKINCACHE) (); +typedef brush_t* ( WINAPI * PFN_ACTIVEBRUSHES )(); +typedef brush_t* ( WINAPI * PFN_SELECTEDBRUSHES )(); +typedef brush_t* ( WINAPI * PFN_FILTEREDBRUSHES )(); +typedef CPtrArray* ( WINAPI * PFN_LSTSKINCACHE )(); struct _QERAppDataTable { - int m_nSize; - PFN_ACTIVEBRUSHES m_pfnActiveBrushes; - PFN_SELECTEDBRUSHES m_pfnSelectedBrushes; - PFN_FILTEREDBRUSHES m_pfnFilteredBrushes; - PFN_LSTSKINCACHE m_pfnLstSkinCache; + int m_nSize; + PFN_ACTIVEBRUSHES m_pfnActiveBrushes; + PFN_SELECTEDBRUSHES m_pfnSelectedBrushes; + PFN_FILTEREDBRUSHES m_pfnFilteredBrushes; + PFN_LSTSKINCACHE m_pfnLstSkinCache; }; #endif diff --git a/include/idatastream.h b/include/idatastream.h index 1ca7b7b7..cd9e08f8 100644 --- a/include/idatastream.h +++ b/include/idatastream.h @@ -1,71 +1,71 @@ /* -Copyright (c) 2001, Loki software, inc. -modifications (c) 2001, Id software, inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -Neither the name of Loki software nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + Copyright (c) 2001, Loki software, inc. + modifications (c) 2001, Id software, inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + Neither the name of Loki software nor the names of its contributors may be used + to endorse or promote products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #ifndef _ISTREAM_H_ #define _ISTREAM_H_ /*! -API for data streams + API for data streams -Based on an initial implementation by Loki software -modified to be abstracted and shared across modules + Based on an initial implementation by Loki software + modified to be abstracted and shared across modules -NOTE: why IDataStream and not IStream? because IStream is defined in windows IDL headers -*/ + NOTE: why IDataStream and not IStream? because IStream is defined in windows IDL headers + */ class IDataStream { public: - IDataStream(); - virtual ~IDataStream(); +IDataStream(); +virtual ~IDataStream(); - virtual void IncRef () = 0; ///< Increment the number of references to this object - virtual void DecRef () = 0; ///< Decrement the reference count +virtual void IncRef() = 0; ///< Increment the number of references to this object +virtual void DecRef() = 0; ///< Decrement the reference count - virtual unsigned long GetPosition() const = 0; - virtual unsigned long Seek(long lOff, int nFrom) = 0; - virtual void SetLength(unsigned long nNewLen) = 0; - virtual unsigned long GetLength() const = 0; +virtual unsigned long GetPosition() const = 0; +virtual unsigned long Seek( long lOff, int nFrom ) = 0; +virtual void SetLength( unsigned long nNewLen ) = 0; +virtual unsigned long GetLength() const = 0; - virtual char* ReadString(char* pBuf, unsigned long nMax)=0; - virtual unsigned long Read(void* pBuf, unsigned long nCount)=0; - virtual unsigned long Write(const void* pBuf, unsigned long nCount)=0; - virtual int GetChar()=0; - virtual int PutChar(int c)=0; +virtual char* ReadString( char* pBuf, unsigned long nMax ) = 0; +virtual unsigned long Read( void* pBuf, unsigned long nCount ) = 0; +virtual unsigned long Write( const void* pBuf, unsigned long nCount ) = 0; +virtual int GetChar() = 0; +virtual int PutChar( int c ) = 0; - virtual void printf(const char*, ...) = 0; ///< completely matches the usual printf behaviour +virtual void printf( const char*, ... ) = 0; ///< completely matches the usual printf behaviour - virtual void Abort()=0; - virtual void Flush()=0; - virtual void Close()=0; +virtual void Abort() = 0; +virtual void Flush() = 0; +virtual void Close() = 0; }; #endif // _ISTREAM_H_ diff --git a/include/ieclass.h b/include/ieclass.h index cb32647c..b06875ed 100644 --- a/include/ieclass.h +++ b/include/ieclass.h @@ -1,43 +1,43 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /*! \file ieclass.h \brief entity files loader API this describes the APIs involved when loading entity description files (initially, .def and .fgd) -*/ + */ #ifndef _IECLASS_H_ #define _IECLASS_H_ #define ECLASS_MAJOR "eclass" -typedef void (* PFN_ECLASS_SCANFILE) (char *filename); -typedef const char* (* PFN_ECLASS_GETEXTENSION) (); +typedef void ( *PFN_ECLASS_SCANFILE )( char *filename ); +typedef const char* ( *PFN_ECLASS_GETEXTENSION )(); struct _EClassTable { - int m_nSize; - PFN_ECLASS_SCANFILE m_pfnScanFile; - PFN_ECLASS_GETEXTENSION m_pfnGetExtension; + int m_nSize; + PFN_ECLASS_SCANFILE m_pfnScanFile; + PFN_ECLASS_GETEXTENSION m_pfnGetExtension; }; #ifdef USE_ECLASSTABLE_DEFINE @@ -50,22 +50,22 @@ struct _EClassTable #define ECLASSMANAGER_MAJOR "eclassmanager" -typedef void (* PFN_ECLASS_INSERTALPHABETIZED) (eclass_t *e); -typedef eclass_t** (* PFN_GET_ECLASS_E) (); -typedef void (* PFN_SET_ECLASS_FOUND) (qboolean); -typedef qboolean (* PFN_GET_PARSING_SINGLE) (); -typedef eclass_t* (* PFN_ECLASS_CREATE) (const char *name, float col1, float col2, float col3, const vec3_t *mins, const vec3_t *maxs, const char *comments); -typedef eclass_t* (* PFN_ECLASS_FORNAME) (const char* name, qboolean has_brushes); +typedef void ( *PFN_ECLASS_INSERTALPHABETIZED )( eclass_t *e ); +typedef eclass_t** ( *PFN_GET_ECLASS_E )(); +typedef void ( *PFN_SET_ECLASS_FOUND )( qboolean ); +typedef qboolean ( *PFN_GET_PARSING_SINGLE )(); +typedef eclass_t* ( *PFN_ECLASS_CREATE )( const char *name, float col1, float col2, float col3, const vec3_t *mins, const vec3_t *maxs, const char *comments ); +typedef eclass_t* ( *PFN_ECLASS_FORNAME )( const char* name, qboolean has_brushes ); struct _EClassManagerTable { - int m_nSize; - PFN_ECLASS_INSERTALPHABETIZED m_pfnEclass_InsertAlphabetized; - PFN_GET_ECLASS_E m_pfnGet_Eclass_E; - PFN_SET_ECLASS_FOUND m_pfnSet_Eclass_Found; - PFN_GET_PARSING_SINGLE m_pfnGet_Parsing_Single; - PFN_ECLASS_CREATE m_pfnEClass_Create; - PFN_ECLASS_FORNAME m_pfnEclass_ForName; + int m_nSize; + PFN_ECLASS_INSERTALPHABETIZED m_pfnEclass_InsertAlphabetized; + PFN_GET_ECLASS_E m_pfnGet_Eclass_E; + PFN_SET_ECLASS_FOUND m_pfnSet_Eclass_Found; + PFN_GET_PARSING_SINGLE m_pfnGet_Parsing_Single; + PFN_ECLASS_CREATE m_pfnEClass_Create; + PFN_ECLASS_FORNAME m_pfnEclass_ForName; }; #ifdef USE_ECLASSMANAGER_DEFINE @@ -81,4 +81,3 @@ struct _EClassManagerTable #endif #endif - diff --git a/include/ientity.h b/include/ientity.h index 015cf1ec..4060bc83 100644 --- a/include/ientity.h +++ b/include/ientity.h @@ -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-2007 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 + */ #ifndef _IENTITY_H_ #define _IENTITY_H_ @@ -29,63 +29,63 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // FIXME TTimo this prolly needs to merge with iepairs.h? /*! -SPoG -generic "entity" module... -at first, there will only be one implementation for all entities, -perhaps later there will be one for each entity type? -it would probably make more sense to have a single implementation, -a generic one that is very flexible and can adapt the visualisation of -itself depending on an xml config specified in the entity definitions file -*/ + SPoG + generic "entity" module... + at first, there will only be one implementation for all entities, + perhaps later there will be one for each entity type? + it would probably make more sense to have a single implementation, + a generic one that is very flexible and can adapt the visualisation of + itself depending on an xml config specified in the entity definitions file + */ #define ENTITY_MAJOR "entity" // {A1C9F9FD-75D5-4e4d-9D65-235D6D3F254C} -static const GUID QEREntityTable_GUID = +static const GUID QEREntityTable_GUID = { 0xa1c9f9fd, 0x75d5, 0x4e4d, { 0x9d, 0x65, 0x23, 0x5d, 0x6d, 0x3f, 0x25, 0x4c } }; -typedef entity_t* (* PFN_ENTITYALLOC) (); -typedef void (* PFN_ENTITYFREE) (entity_t *e); -typedef entity_t* (* PFN_ENTITYCREATE) (eclass_t *c); -typedef entity_t* (* PFN_ENTITYCLONE) (entity_t *e); -typedef void (* PFN_ENTITYSETKEYVALUE) (entity_t *ent, const char *key, const char *value); -typedef void (* PFN_ENTITYDELETEKEY) (entity_t *ent, const char *key); -typedef const char* (* PFN_ENTITYVALUEFORKEY) (entity_t *ent, const char *key); -typedef float (* PFN_ENTITYFLOATFORKEY) (entity_t *ent, const char *key); -typedef int (* PFN_ENTITYINTFORKEY) (entity_t *ent, const char *key); -typedef void (* PFN_ENTITYVECTORFORKEY) (entity_t *ent, const char *key, vec3_t vec); -typedef void (* PFN_ENTITYADDTOLIST) (entity_t *e, entity_t *lst); -typedef void (* PFN_ENTITYREMOVEFROMLIST) (entity_t *e); -typedef void (* PFN_ENTITYLINKBRUSH) (entity_t *e, brush_t *b); -typedef void (* PFN_ENTITYUNLINKBRUSH) (brush_t *b); -typedef void (* PFN_ENTITYDRAWLIGHT) (entity_t* e, int nGLState, int pref, int nViewType); -typedef int (* PFN_ENTITYMEMORYSIZE) (entity_t *e); -typedef void (* PFN_ENTITYUPDATEMODEL) (entity_t *e); -typedef epair_t* (* PFN_ALLOCATEEPAIR) (const char *key, const char *value); -typedef epair_t** (* PFN_GETENTITYKEYVALLIST) (entity_t *e); -typedef void (* PFN_SETENTITYKEYVALLIST) (entity_t *e, epair_t* ep); +typedef entity_t* ( *PFN_ENTITYALLOC )(); +typedef void ( *PFN_ENTITYFREE )( entity_t *e ); +typedef entity_t* ( *PFN_ENTITYCREATE )( eclass_t *c ); +typedef entity_t* ( *PFN_ENTITYCLONE )( entity_t *e ); +typedef void ( *PFN_ENTITYSETKEYVALUE )( entity_t *ent, const char *key, const char *value ); +typedef void ( *PFN_ENTITYDELETEKEY )( entity_t *ent, const char *key ); +typedef const char* ( *PFN_ENTITYVALUEFORKEY )( entity_t *ent, const char *key ); +typedef float ( *PFN_ENTITYFLOATFORKEY )( entity_t *ent, const char *key ); +typedef int ( *PFN_ENTITYINTFORKEY )( entity_t *ent, const char *key ); +typedef void ( *PFN_ENTITYVECTORFORKEY )( entity_t *ent, const char *key, vec3_t vec ); +typedef void ( *PFN_ENTITYADDTOLIST )( entity_t *e, entity_t *lst ); +typedef void ( *PFN_ENTITYREMOVEFROMLIST )( entity_t *e ); +typedef void ( *PFN_ENTITYLINKBRUSH )( entity_t *e, brush_t *b ); +typedef void ( *PFN_ENTITYUNLINKBRUSH )( brush_t *b ); +typedef void ( *PFN_ENTITYDRAWLIGHT )( entity_t* e, int nGLState, int pref, int nViewType ); +typedef int ( *PFN_ENTITYMEMORYSIZE )( entity_t *e ); +typedef void ( *PFN_ENTITYUPDATEMODEL )( entity_t *e ); +typedef epair_t* ( *PFN_ALLOCATEEPAIR )( const char *key, const char *value ); +typedef epair_t** ( *PFN_GETENTITYKEYVALLIST )( entity_t *e ); +typedef void ( *PFN_SETENTITYKEYVALLIST )( entity_t *e, epair_t* ep ); struct _QEREntityTable { - int m_nSize; - PFN_ENTITYALLOC m_pfnEntity_Alloc; - PFN_ENTITYFREE m_pfnEntity_Free; - PFN_ENTITYCREATE m_pfnEntity_Create; - PFN_ENTITYCLONE m_pfnEntity_Clone; - PFN_ENTITYSETKEYVALUE m_pfnSetKeyValue; - PFN_ENTITYDELETEKEY m_pfnDeleteKey; - PFN_ENTITYVALUEFORKEY m_pfnValueForKey; - PFN_ENTITYFLOATFORKEY m_pfnFloatForKey; - PFN_ENTITYINTFORKEY m_pfnIntForKey; - PFN_ENTITYVECTORFORKEY m_pfnGetVectorForKey; - PFN_ENTITYADDTOLIST m_pfnEntity_AddToList; - PFN_ENTITYREMOVEFROMLIST m_pfnEntity_RemoveFromList; - PFN_ENTITYLINKBRUSH m_pfnEntity_LinkBrush; - PFN_ENTITYUNLINKBRUSH m_pfnEntity_UnlinkBrush; - PFN_ENTITYDRAWLIGHT m_pfnDrawLight; - PFN_ENTITYMEMORYSIZE m_pfnEntity_MemorySize; - PFN_ALLOCATEEPAIR m_pfnAllocateEpair; - PFN_GETENTITYKEYVALLIST m_pfnGetEntityKeyValList; - PFN_SETENTITYKEYVALLIST m_pfnSetEntityKeyValList; + int m_nSize; + PFN_ENTITYALLOC m_pfnEntity_Alloc; + PFN_ENTITYFREE m_pfnEntity_Free; + PFN_ENTITYCREATE m_pfnEntity_Create; + PFN_ENTITYCLONE m_pfnEntity_Clone; + PFN_ENTITYSETKEYVALUE m_pfnSetKeyValue; + PFN_ENTITYDELETEKEY m_pfnDeleteKey; + PFN_ENTITYVALUEFORKEY m_pfnValueForKey; + PFN_ENTITYFLOATFORKEY m_pfnFloatForKey; + PFN_ENTITYINTFORKEY m_pfnIntForKey; + PFN_ENTITYVECTORFORKEY m_pfnGetVectorForKey; + PFN_ENTITYADDTOLIST m_pfnEntity_AddToList; + PFN_ENTITYREMOVEFROMLIST m_pfnEntity_RemoveFromList; + PFN_ENTITYLINKBRUSH m_pfnEntity_LinkBrush; + PFN_ENTITYUNLINKBRUSH m_pfnEntity_UnlinkBrush; + PFN_ENTITYDRAWLIGHT m_pfnDrawLight; + PFN_ENTITYMEMORYSIZE m_pfnEntity_MemorySize; + PFN_ALLOCATEEPAIR m_pfnAllocateEpair; + PFN_GETENTITYKEYVALLIST m_pfnGetEntityKeyValList; + PFN_SETENTITYKEYVALLIST m_pfnSetEntityKeyValList; }; #ifdef USE_ENTITYTABLE_DEFINE @@ -113,4 +113,3 @@ struct _QEREntityTable #endif #endif - diff --git a/include/ifilesystem.h b/include/ifilesystem.h index 4242b701..3ccb3ad3 100644 --- a/include/ifilesystem.h +++ b/include/ifilesystem.h @@ -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-2007 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 + */ #ifndef _IFILESYSTEM_H_ #define _IFILESYSTEM_H_ @@ -41,80 +41,80 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // return the file system supported by the plugin, for example: "quake1" or "quake3" //typedef const char* (WINAPI* PFN_VFSGETFORMAT) (); // add all files from a directory to the vfs -typedef void (* PFN_VFSINITDIRECTORY) (const char *path); +typedef void ( *PFN_VFSINITDIRECTORY )( const char *path ); // free all resources used by the plugin -typedef void (* PFN_VFSSHUTDOWN) (); +typedef void ( *PFN_VFSSHUTDOWN )(); // free memory allocated by VFS for this pointer -typedef void (* PFN_VFSFREEFILE) (void *p); +typedef void ( *PFN_VFSFREEFILE )( void *p ); // return a GSList with all the directories under basedir -typedef GSList* (* PFN_VFSGETDIRLIST) (const char *basedir); +typedef GSList* ( *PFN_VFSGETDIRLIST )( const char *basedir ); // return a GSList with all the files under basedir (extension can be NULL) -typedef GSList* (* PFN_VFSGETFILELIST) (const char *basedir, const char *extension); +typedef GSList* ( *PFN_VFSGETFILELIST )( const char *basedir, const char *extension ); // free a dirlist or filelist returned from one of the above functions -typedef void (* PFN_VFSCLEARFILEDIRLIST) (GSList **lst); +typedef void ( *PFN_VFSCLEARFILEDIRLIST )( GSList **lst ); #define VFS_SEARCH_PAK 0x1 #define VFS_SEARCH_DIR 0x2 /*! -\brief return the number of files with the exact name described in filename -there can be several hits for a given file, or this can be used to check for existence -\param flags is optional and can be used with VFS_SEARCH_* bits, if flag is 0, everything is searched, else only the specified bits -paks are searched first, then search directories -*/ -typedef int (* PFN_VFSGETFILECOUNT) (const char *filename, int flags); + \brief return the number of files with the exact name described in filename + there can be several hits for a given file, or this can be used to check for existence + \param flags is optional and can be used with VFS_SEARCH_* bits, if flag is 0, everything is searched, else only the specified bits + paks are searched first, then search directories + */ +typedef int ( *PFN_VFSGETFILECOUNT )( const char *filename, int flags ); /*! -\brief load file, allocate buffer -\return -1 if fails or the size of the buffer allocated -\param index is used to load the i-th file in the search directories (see vfsGetFileCount) -this will scan in the search directories first, then it will search in the pak files -WARNING: the allocated buffer must be freed with a g_free call -NOTE TTimo: the g_free release is utter horror -*/ -typedef int (* PFN_VFSLOADFILE) (const char *filename, void **buffer, int index); + \brief load file, allocate buffer + \return -1 if fails or the size of the buffer allocated + \param index is used to load the i-th file in the search directories (see vfsGetFileCount) + this will scan in the search directories first, then it will search in the pak files + WARNING: the allocated buffer must be freed with a g_free call + NOTE TTimo: the g_free release is utter horror + */ +typedef int ( *PFN_VFSLOADFILE )( const char *filename, void **buffer, int index ); // load a file from it's full path into the buffer, returns the file size or -1 // the allocated buffer must be freed with a g_free call -typedef int (* PFN_VFSLOADFULLPATHFILE) (const char *filename, void **buffer); +typedef int ( *PFN_VFSLOADFULLPATHFILE )( const char *filename, void **buffer ); // takes an absolute file path, returns a shortened relative file path if the absolute path matches a valid basedir or NULL if an error occured -typedef char* (* PFN_VFSEXTRACTRELATIVEPATH) (const char *in); +typedef char* ( *PFN_VFSEXTRACTRELATIVEPATH )( const char *in ); /*! -\return the full path (in a static buff) to a file given it's relative path (NULL if not found) -\param index if several files are matching (as returned in a call to vfsGetFileCount), get the index-th file -\param flag 0 or a combination of VFS_SEARCH_PAK or VFS_SEARCH_DIR -HYDRA: - this now searches VFS/PAK files in addition to the filesystem - if FLAG is 0 then ONLY dirs are searched. - PAK's are searched before DIRs to mimic engine behaviour - index is ignored when searching PAK files. - when searching VFS, files are searched case insensitive. + \return the full path (in a static buff) to a file given it's relative path (NULL if not found) + \param index if several files are matching (as returned in a call to vfsGetFileCount), get the index-th file + \param flag 0 or a combination of VFS_SEARCH_PAK or VFS_SEARCH_DIR + HYDRA: + this now searches VFS/PAK files in addition to the filesystem + if FLAG is 0 then ONLY dirs are searched. + PAK's are searched before DIRs to mimic engine behaviour + index is ignored when searching PAK files. + when searching VFS, files are searched case insensitive. -WARNING: if you use index from vfsGetFileCount, it works only with a vfsGetFileCount for the search directories only (not the pak files) -FIXME TTimo our VFS names are case insensitive. + WARNING: if you use index from vfsGetFileCount, it works only with a vfsGetFileCount for the search directories only (not the pak files) + FIXME TTimo our VFS names are case insensitive. this function is not able to build the full path from case-insensitive name -*/ -typedef char* (* PFN_VFSGETFULLPATH) (const char *in, int index, int flag); + */ +typedef char* ( *PFN_VFSGETFULLPATH )( const char *in, int index, int flag ); /*! -these return a static char*, doesn't need to be freed or anything -get the base path to use when raising file dialogs -we manually add "maps/" or "sounds/" or "mapobjects/models/" etc. -FIXME: I'm not sure this is used / relevant anymore -*/ -typedef const char* (* PFN_VFSBASEPROMPTPATH) (); + these return a static char*, doesn't need to be freed or anything + get the base path to use when raising file dialogs + we manually add "maps/" or "sounds/" or "mapobjects/models/" etc. + FIXME: I'm not sure this is used / relevant anymore + */ +typedef const char* ( *PFN_VFSBASEPROMPTPATH )(); // VFS API struct _QERFileSystemTable { - int m_nSize; - PFN_VFSINITDIRECTORY m_pfnInitDirectory; - PFN_VFSSHUTDOWN m_pfnShutdown; - PFN_VFSFREEFILE m_pfnFreeFile; - PFN_VFSGETDIRLIST m_pfnGetDirList; - PFN_VFSGETFILELIST m_pfnGetFileList; - PFN_VFSCLEARFILEDIRLIST m_pfnClearFileDirList; - PFN_VFSGETFILECOUNT m_pfnGetFileCount; - PFN_VFSLOADFILE m_pfnLoadFile; - PFN_VFSLOADFULLPATHFILE m_pfnLoadFullPathFile; - PFN_VFSEXTRACTRELATIVEPATH m_pfnExtractRelativePath; - PFN_VFSGETFULLPATH m_pfnGetFullPath; - PFN_VFSBASEPROMPTPATH m_pfnBasePromptPath; + int m_nSize; + PFN_VFSINITDIRECTORY m_pfnInitDirectory; + PFN_VFSSHUTDOWN m_pfnShutdown; + PFN_VFSFREEFILE m_pfnFreeFile; + PFN_VFSGETDIRLIST m_pfnGetDirList; + PFN_VFSGETFILELIST m_pfnGetFileList; + PFN_VFSCLEARFILEDIRLIST m_pfnClearFileDirList; + PFN_VFSGETFILECOUNT m_pfnGetFileCount; + PFN_VFSLOADFILE m_pfnLoadFile; + PFN_VFSLOADFULLPATHFILE m_pfnLoadFullPathFile; + PFN_VFSEXTRACTRELATIVEPATH m_pfnExtractRelativePath; + PFN_VFSGETFULLPATH m_pfnGetFullPath; + PFN_VFSBASEPROMPTPATH m_pfnBasePromptPath; }; #ifdef USE_VFSTABLE_DEFINE diff --git a/include/ifilters.h b/include/ifilters.h index 587dc9ed..ce886a20 100644 --- a/include/ifilters.h +++ b/include/ifilters.h @@ -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-2007 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 + */ // @@ -30,16 +30,16 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define FILTER_MAJOR "filter" // adds a new filter -typedef bfilter_t* (* PFN_QERPLUG_FILTERADD) (int type, int bmask, const char *str, int exclude); +typedef bfilter_t* ( *PFN_QERPLUG_FILTERADD )( int type, int bmask, const char *str, int exclude ); // performs the filtering -typedef void (* PFN_QERPLUG_FILTERACTIVATE) (void); +typedef void ( *PFN_QERPLUG_FILTERACTIVATE )( void ); struct _QERPlugFilterTable { - int m_nSize; - PFN_QERPLUG_FILTERADD m_pfnFilterAdd; - PFN_QERPLUG_FILTERACTIVATE m_pfnFiltersActivate; + int m_nSize; + PFN_QERPLUG_FILTERADD m_pfnFilterAdd; + PFN_QERPLUG_FILTERACTIVATE m_pfnFiltersActivate; }; #endif // _IFILTER_H_ diff --git a/include/igl.h b/include/igl.h index e657241f..db857ec5 100644 --- a/include/igl.h +++ b/include/igl.h @@ -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-2007 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 + */ //----------------------------------------------------------------------------- // @@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #ifndef __IGL_H__ #define __IGL_H__ -#if defined (__linux__) || defined (__APPLE__) +#if defined ( __linux__ ) || defined ( __APPLE__ ) #include #endif @@ -38,231 +38,231 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA class IGL2DWindow { public: - virtual ~IGL2DWindow() { } - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - virtual void Draw2D( VIEWTYPE vt ) = 0; +virtual ~IGL2DWindow() { } +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +virtual void Draw2D( VIEWTYPE vt ) = 0; }; // 3D window class IGL3DWindow { public: - virtual ~IGL3DWindow() { } - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - virtual void Draw3D() = 0; +virtual ~IGL3DWindow() { } +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +virtual void Draw3D() = 0; }; #define QGL_MAJOR "qgl" #include -typedef void (APIENTRY* PFN_QGLALPHAFUNC) (GLenum func, GLclampf ref); -typedef void (APIENTRY* PFN_QGLBEGIN) (GLenum); -typedef void (APIENTRY* PFN_QGLBINDTEXTURE) (GLenum target, GLuint texture); -typedef void (APIENTRY* PFN_QGLBLENDFUNC) (GLenum sfactor, GLenum dfactor); -typedef void (APIENTRY* PFN_QGLCALLLIST) (GLuint list); -typedef void (APIENTRY* PFN_QGLCALLLISTS) (GLsizei n, GLenum type, const GLvoid *lists); -typedef void (APIENTRY* PFN_QGLCLEAR) (GLbitfield mask); -typedef void (APIENTRY* PFN_QGLCLEARCOLOR) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRY* PFN_QGLCLEARDEPTH) (GLclampd depth); -typedef void (APIENTRY* PFN_QGLCOLOR3F) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRY* PFN_QGLCOLOR3FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLCOLOR4F) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (APIENTRY* PFN_QGLCOLOR4FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLCOLOR4UBV) (const GLubyte *v); -typedef void (APIENTRY* PFN_QGLCOLORPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY* PFN_QGLCULLFACE) (GLenum mode); -typedef void (APIENTRY* PFN_QGLDELETELISTS) (GLuint list, GLsizei range); -typedef void (APIENTRY* PFN_QGLDELETETEXTURES) (GLsizei n, const GLuint *textures); -typedef void (APIENTRY* PFN_QGLDEPTHFUNC) (GLenum func); -typedef void (APIENTRY* PFN_QGLDEPTHMASK) (GLboolean flag); -typedef void (APIENTRY* PFN_QGLDISABLE) (GLenum cap); -typedef void (APIENTRY* PFN_QGLDISABLECLIENTSTATE) (GLenum array); -typedef void (APIENTRY* PFN_QGLDRAWELEMENTS) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRY* PFN_QGLENABLE) (GLenum cap); -typedef void (APIENTRY* PFN_QGLENABLECLIENTSTATE) (GLenum array); -typedef void (APIENTRY* PFN_QGLEND) (); -typedef void (APIENTRY* PFN_QGLENDLIST) (); -typedef void (APIENTRY* PFN_QGLFOGF) (GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLFOGFV) (GLenum pname, const GLfloat *params); -typedef void (APIENTRY* PFN_QGLFOGFI) (GLenum pname, GLint param); -typedef GLuint (APIENTRY* PFN_QGLGENLISTS) (GLsizei range); -typedef void (APIENTRY *PFN_QGLGENTEXTURES) (GLsizei n, GLuint *textures); -typedef void (APIENTRY* PFN_QGLGETDOUBLEV) (GLenum pname, GLdouble *params); -typedef void (APIENTRY* PFN_QGLHINT) (GLenum target, GLenum mode); -typedef void (APIENTRY* PFN_QGLGETINTEGERV) (GLenum pname, GLint *params); -typedef void (APIENTRY* PFN_QGLLIGHTFV) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRY* PFN_QGLLINEWIDTH) (GLfloat size); -typedef void (APIENTRY* PFN_QGLLINESTIPPLE) (GLint factor, GLushort pattern); -typedef void (APIENTRY* PFN_QGLLINEWIDTH) (GLfloat size); -typedef void (APIENTRY* PFN_QGLLISTBASE) (GLuint base); -typedef void (APIENTRY* PFN_QGLLOADIDENTITY) (); -typedef void (APIENTRY* PFN_QGLMATERIALF) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLMATERIALFV) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRY* PFN_QGLMATRIXMODE) (GLenum mode); -typedef void (APIENTRY* PFN_QGLMULTMATRIXF) (const GLfloat *m); -typedef void (APIENTRY* PFN_QGLNEWLIST) (GLuint list, GLenum mode); -typedef void (APIENTRY* PFN_QGLNORMAL3F) (GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRY* PFN_QGLNORMAL3FV) (const GLfloat *n); -typedef void (APIENTRY* PFN_QGLNORMALPOINTER) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY* PFN_QGLORTHO) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRY* PFN_QGLPOINTSIZE) (GLfloat size); -typedef void (APIENTRY* PFN_QGLPOLYGONMODE) (GLenum face, GLenum mode); -typedef void (APIENTRY* PFN_QGLPOPATTRIB) (); -typedef void (APIENTRY* PFN_QGLPOPMATRIX) (); -typedef void (APIENTRY* PFN_QGLPUSHATTRIB) (GLbitfield mask); -typedef void (APIENTRY* PFN_QGLPUSHMATRIX) (); -typedef void (APIENTRY* PFN_QGLRASTERPOS3FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLROTATED) (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRY* PFN_QGLROTATEF) (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLSCALEF) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLSCISSOR) (GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRY* PFN_QGLSCALEF) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLSHADEMODEL) (GLenum mode); -typedef void (APIENTRY* PFN_QGLTEXCOORD2F) (GLfloat s, GLfloat t); -typedef void (APIENTRY* PFN_QGLTEXCOORD2FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLTEXCOORDPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY* PFN_QGLTEXENVF) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLTEXGENF) (GLenum coord, GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLTEXIMAGE1D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY* PFN_QGLTEXIMAGE2D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY* PFN_QGLTEXPARAMETERF) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLTEXPARAMETERFV) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRY* PFN_QGLTEXPARAMETERI) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRY* PFN_QGLTEXPARAMETERIV) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRY* PFN_QGLTEXSUBIMAGE1D) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY* PFN_QGLTEXSUBIMAGE2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY* PFN_QGLTRANSLATED) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRY* PFN_QGLTRANSLATEF) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLVERTEX2F) (GLfloat x, GLfloat y); -typedef void (APIENTRY* PFN_QGLVERTEX3F) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLVERTEX3FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLVERTEXPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY* PFN_QGLVIEWPORT) (GLint x, GLint y, GLsizei width, GLsizei height); +typedef void ( APIENTRY * PFN_QGLALPHAFUNC )( GLenum func, GLclampf ref ); +typedef void ( APIENTRY * PFN_QGLBEGIN )( GLenum ); +typedef void ( APIENTRY * PFN_QGLBINDTEXTURE )( GLenum target, GLuint texture ); +typedef void ( APIENTRY * PFN_QGLBLENDFUNC )( GLenum sfactor, GLenum dfactor ); +typedef void ( APIENTRY * PFN_QGLCALLLIST )( GLuint list ); +typedef void ( APIENTRY * PFN_QGLCALLLISTS )( GLsizei n, GLenum type, const GLvoid *lists ); +typedef void ( APIENTRY * PFN_QGLCLEAR )( GLbitfield mask ); +typedef void ( APIENTRY * PFN_QGLCLEARCOLOR )( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); +typedef void ( APIENTRY * PFN_QGLCLEARDEPTH )( GLclampd depth ); +typedef void ( APIENTRY * PFN_QGLCOLOR3F )( GLfloat red, GLfloat green, GLfloat blue ); +typedef void ( APIENTRY * PFN_QGLCOLOR3FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLCOLOR4F )( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); +typedef void ( APIENTRY * PFN_QGLCOLOR4FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLCOLOR4UBV )( const GLubyte *v ); +typedef void ( APIENTRY * PFN_QGLCOLORPOINTER )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +typedef void ( APIENTRY * PFN_QGLCULLFACE )( GLenum mode ); +typedef void ( APIENTRY * PFN_QGLDELETELISTS )( GLuint list, GLsizei range ); +typedef void ( APIENTRY * PFN_QGLDELETETEXTURES )( GLsizei n, const GLuint *textures ); +typedef void ( APIENTRY * PFN_QGLDEPTHFUNC )( GLenum func ); +typedef void ( APIENTRY * PFN_QGLDEPTHMASK )( GLboolean flag ); +typedef void ( APIENTRY * PFN_QGLDISABLE )( GLenum cap ); +typedef void ( APIENTRY * PFN_QGLDISABLECLIENTSTATE )( GLenum array ); +typedef void ( APIENTRY * PFN_QGLDRAWELEMENTS )( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ); +typedef void ( APIENTRY * PFN_QGLENABLE )( GLenum cap ); +typedef void ( APIENTRY * PFN_QGLENABLECLIENTSTATE )( GLenum array ); +typedef void ( APIENTRY * PFN_QGLEND )(); +typedef void ( APIENTRY * PFN_QGLENDLIST )(); +typedef void ( APIENTRY * PFN_QGLFOGF )( GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLFOGFV )( GLenum pname, const GLfloat *params ); +typedef void ( APIENTRY * PFN_QGLFOGFI )( GLenum pname, GLint param ); +typedef GLuint ( APIENTRY * PFN_QGLGENLISTS )( GLsizei range ); +typedef void ( APIENTRY * PFN_QGLGENTEXTURES )( GLsizei n, GLuint *textures ); +typedef void ( APIENTRY * PFN_QGLGETDOUBLEV )( GLenum pname, GLdouble *params ); +typedef void ( APIENTRY * PFN_QGLHINT )( GLenum target, GLenum mode ); +typedef void ( APIENTRY * PFN_QGLGETINTEGERV )( GLenum pname, GLint *params ); +typedef void ( APIENTRY * PFN_QGLLIGHTFV )( GLenum light, GLenum pname, const GLfloat *params ); +typedef void ( APIENTRY * PFN_QGLLINEWIDTH )( GLfloat size ); +typedef void ( APIENTRY * PFN_QGLLINESTIPPLE )( GLint factor, GLushort pattern ); +typedef void ( APIENTRY * PFN_QGLLINEWIDTH )( GLfloat size ); +typedef void ( APIENTRY * PFN_QGLLISTBASE )( GLuint base ); +typedef void ( APIENTRY * PFN_QGLLOADIDENTITY )(); +typedef void ( APIENTRY * PFN_QGLMATERIALF )( GLenum face, GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLMATERIALFV )( GLenum face, GLenum pname, const GLfloat *params ); +typedef void ( APIENTRY * PFN_QGLMATRIXMODE )( GLenum mode ); +typedef void ( APIENTRY * PFN_QGLMULTMATRIXF )( const GLfloat *m ); +typedef void ( APIENTRY * PFN_QGLNEWLIST )( GLuint list, GLenum mode ); +typedef void ( APIENTRY * PFN_QGLNORMAL3F )( GLfloat nx, GLfloat ny, GLfloat nz ); +typedef void ( APIENTRY * PFN_QGLNORMAL3FV )( const GLfloat *n ); +typedef void ( APIENTRY * PFN_QGLNORMALPOINTER )( GLenum type, GLsizei stride, const GLvoid *pointer ); +typedef void ( APIENTRY * PFN_QGLORTHO )( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar ); +typedef void ( APIENTRY * PFN_QGLPOINTSIZE )( GLfloat size ); +typedef void ( APIENTRY * PFN_QGLPOLYGONMODE )( GLenum face, GLenum mode ); +typedef void ( APIENTRY * PFN_QGLPOPATTRIB )(); +typedef void ( APIENTRY * PFN_QGLPOPMATRIX )(); +typedef void ( APIENTRY * PFN_QGLPUSHATTRIB )( GLbitfield mask ); +typedef void ( APIENTRY * PFN_QGLPUSHMATRIX )(); +typedef void ( APIENTRY * PFN_QGLRASTERPOS3FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLROTATED )( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ); +typedef void ( APIENTRY * PFN_QGLROTATEF )( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLSCALEF )( GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLSCISSOR )( GLint x, GLint y, GLsizei width, GLsizei height ); +typedef void ( APIENTRY * PFN_QGLSCALEF )( GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLSHADEMODEL )( GLenum mode ); +typedef void ( APIENTRY * PFN_QGLTEXCOORD2F )( GLfloat s, GLfloat t ); +typedef void ( APIENTRY * PFN_QGLTEXCOORD2FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLTEXCOORDPOINTER )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +typedef void ( APIENTRY * PFN_QGLTEXENVF )( GLenum target, GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLTEXGENF )( GLenum coord, GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLTEXIMAGE1D )( GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); +typedef void ( APIENTRY * PFN_QGLTEXIMAGE2D )( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); +typedef void ( APIENTRY * PFN_QGLTEXPARAMETERF )( GLenum target, GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLTEXPARAMETERFV )( GLenum target, GLenum pname, const GLfloat *params ); +typedef void ( APIENTRY * PFN_QGLTEXPARAMETERI )( GLenum target, GLenum pname, GLint param ); +typedef void ( APIENTRY * PFN_QGLTEXPARAMETERIV )( GLenum target, GLenum pname, const GLint *params ); +typedef void ( APIENTRY * PFN_QGLTEXSUBIMAGE1D )( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels ); +typedef void ( APIENTRY * PFN_QGLTEXSUBIMAGE2D )( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); +typedef void ( APIENTRY * PFN_QGLTRANSLATED )( GLdouble x, GLdouble y, GLdouble z ); +typedef void ( APIENTRY * PFN_QGLTRANSLATEF )( GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLVERTEX2F )( GLfloat x, GLfloat y ); +typedef void ( APIENTRY * PFN_QGLVERTEX3F )( GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLVERTEX3FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLVERTEXPOINTER )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +typedef void ( APIENTRY * PFN_QGLVIEWPORT )( GLint x, GLint y, GLsizei width, GLsizei height ); -typedef void (WINAPI* PFN_QE_CHECKOPENGLFORERRORS) (); +typedef void ( WINAPI * PFN_QE_CHECKOPENGLFORERRORS )(); // glu stuff // TTimo: NOTE: relying on glu might not be such a good idea. On many systems, the GLU lib is outdated, misversioned etc. -typedef void (APIENTRY * PFN_QGLUPERSPECTIVE) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRY * PFN_QGLULOOKAT) (GLdouble eyex, GLdouble eyey, GLdouble eyez, - GLdouble centerx, GLdouble centery, GLdouble centerz, - GLdouble upx, GLdouble upy, GLdouble upz); +typedef void ( APIENTRY * PFN_QGLUPERSPECTIVE )( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ); +typedef void ( APIENTRY * PFN_QGLULOOKAT )( GLdouble eyex, GLdouble eyey, GLdouble eyez, + GLdouble centerx, GLdouble centery, GLdouble centerz, + GLdouble upx, GLdouble upy, GLdouble upz ); //++timo gluErrorString is defined but not exposed in the IGL interface // plugins drawing inside the GL windows //++timo TODO: add hooking into other windows (Z and .. texture??) //+timo NOTE: this could be moved to the messaging system instead of having a dedicated interface <- yet I don't know how -typedef void (WINAPI* PFN_QERAPP_HOOKGL2DWINDOW) (IGL2DWindow *); -typedef void (WINAPI* PFN_QERAPP_UNHOOKGL2DWINDOW) (IGL2DWindow *); -typedef void (WINAPI* PFN_QERAPP_HOOKGL3DWINDOW) (IGL3DWindow *); -typedef void (WINAPI* PFN_QERAPP_UNHOOKGL3DWINDOW) (IGL3DWindow *); +typedef void ( WINAPI * PFN_QERAPP_HOOKGL2DWINDOW )( IGL2DWindow * ); +typedef void ( WINAPI * PFN_QERAPP_UNHOOKGL2DWINDOW )( IGL2DWindow * ); +typedef void ( WINAPI * PFN_QERAPP_HOOKGL3DWINDOW )( IGL3DWindow * ); +typedef void ( WINAPI * PFN_QERAPP_UNHOOKGL3DWINDOW )( IGL3DWindow * ); struct _QERQglTable { - //++timo do we really wanna play with versions ? - // float m_fVersion; - int m_nSize; - PFN_QGLALPHAFUNC m_pfn_qglAlphaFunc; - PFN_QGLBEGIN m_pfn_qglBegin; - PFN_QGLBINDTEXTURE m_pfn_qglBindTexture; - PFN_QGLBLENDFUNC m_pfn_qglBlendFunc; - PFN_QGLCALLLIST m_pfn_qglCallList; - PFN_QGLCLEAR m_pfn_qglClear; - PFN_QGLCLEARCOLOR m_pfn_qglClearColor; - PFN_QGLCALLLISTS m_pfn_qglCallLists; - PFN_QGLCLEARDEPTH m_pfn_qglClearDepth; - PFN_QGLCOLOR3F m_pfn_qglColor3f; - PFN_QGLCOLOR3FV m_pfn_qglColor3fv; - PFN_QGLCOLOR4F m_pfn_qglColor4f; - PFN_QGLCOLOR4FV m_pfn_qglColor4fv; - PFN_QGLCOLOR4UBV m_pfn_qglColor4ubv; // ydnar - PFN_QGLCOLORPOINTER m_pfn_qglColorPointer; - PFN_QGLCULLFACE m_pfn_qglCullFace; - PFN_QGLDELETELISTS m_pfn_qglDeleteLists; - PFN_QGLDELETETEXTURES m_pfn_qglDeleteTextures; - PFN_QGLDEPTHFUNC m_pfn_qglDepthFunc; - PFN_QGLDEPTHMASK m_pfn_qglDepthMask; - PFN_QGLDISABLE m_pfn_qglDisable; - PFN_QGLDISABLECLIENTSTATE m_pfn_qglDisableClientState; - PFN_QGLDRAWELEMENTS m_pfn_qglDrawElements; - PFN_QGLENABLE m_pfn_qglEnable; - PFN_QGLENABLECLIENTSTATE m_pfn_qglEnableClientState; - PFN_QGLEND m_pfn_qglEnd; - PFN_QGLENDLIST m_pfn_qglEndList; - PFN_QGLFOGF m_pfn_qglFogf; - PFN_QGLFOGFV m_pfn_qglFogfv; - PFN_QGLFOGFI m_pfn_qglFogi; - PFN_QGLGENLISTS m_pfn_qglGenLists; - PFN_QGLGENTEXTURES m_pfn_qglGenTextures; - PFN_QGLGETDOUBLEV m_pfn_qglGetDoublev; - PFN_QGLGETINTEGERV m_pfn_qglGetIntegerv; - PFN_QGLHINT m_pfn_qglHint; - PFN_QGLLIGHTFV m_pfn_qglLightfv; - PFN_QGLLINESTIPPLE m_pfn_qglLineStipple; - PFN_QGLLINEWIDTH m_pfn_qglLineWidth; - PFN_QGLLISTBASE m_pfn_qglListBase; - PFN_QGLLOADIDENTITY m_pfn_qglLoadIdentity; - PFN_QGLMATERIALF m_pfn_qglMaterialf; - PFN_QGLMATERIALFV m_pfn_qglMaterialfv; - PFN_QGLMATRIXMODE m_pfn_qglMatrixMode; - PFN_QGLMULTMATRIXF m_pfn_qglMultMatrixf; - PFN_QGLNEWLIST m_pfn_qglNewList; - PFN_QGLNORMAL3F m_pfn_qglNormal3f; - PFN_QGLNORMAL3FV m_pfn_qglNormal3fv; - PFN_QGLNORMALPOINTER m_pfn_qglNormalPointer; - PFN_QGLORTHO m_pfn_qglOrtho; - PFN_QGLPOINTSIZE m_pfn_qglPointSize; - PFN_QGLPOLYGONMODE m_pfn_qglPolygonMode; - PFN_QGLPOPATTRIB m_pfn_qglPopAttrib; - PFN_QGLPOPMATRIX m_pfn_qglPopMatrix; - PFN_QGLPUSHATTRIB m_pfn_qglPushAttrib; - PFN_QGLPUSHMATRIX m_pfn_qglPushMatrix; - PFN_QGLRASTERPOS3FV m_pfn_qglRasterPos3fv; - PFN_QGLROTATED m_pfn_qglRotated; - PFN_QGLROTATEF m_pfn_qglRotatef; - PFN_QGLSCALEF m_pfn_qglScalef; - PFN_QGLSCISSOR m_pfn_qglScissor; - PFN_QGLSHADEMODEL m_pfn_qglShadeModel; - PFN_QGLTEXCOORD2F m_pfn_qglTexCoord2f; - PFN_QGLTEXCOORD2FV m_pfn_qglTexCoord2fv; - PFN_QGLTEXCOORDPOINTER m_pfn_qglTexCoordPointer; - PFN_QGLTEXENVF m_pfn_qglTexEnvf; - PFN_QGLTEXGENF m_pfn_qglTexGenf; - PFN_QGLTEXIMAGE1D m_pfn_qglTexImage1D; - PFN_QGLTEXIMAGE2D m_pfn_qglTexImage2D; - PFN_QGLTEXPARAMETERF m_pfn_qglTexParameterf; - PFN_QGLTEXPARAMETERFV m_pfn_qglTexParameterfv; - PFN_QGLTEXPARAMETERI m_pfn_qglTexParameteri; - PFN_QGLTEXPARAMETERIV m_pfn_qglTexParameteriv; - PFN_QGLTEXSUBIMAGE1D m_pfn_qglTexSubImage1D; - PFN_QGLTEXSUBIMAGE2D m_pfn_qglTexSubImage2D; - PFN_QGLTRANSLATED m_pfn_qglTranslated; - PFN_QGLTRANSLATEF m_pfn_qglTranslatef; - PFN_QGLVERTEX2F m_pfn_qglVertex2f; - PFN_QGLVERTEX3F m_pfn_qglVertex3f; - PFN_QGLVERTEX3FV m_pfn_qglVertex3fv; - PFN_QGLVERTEXPOINTER m_pfn_qglVertexPointer; - PFN_QGLVIEWPORT m_pfn_qglViewport; + //++timo do we really wanna play with versions ? + // float m_fVersion; + int m_nSize; + PFN_QGLALPHAFUNC m_pfn_qglAlphaFunc; + PFN_QGLBEGIN m_pfn_qglBegin; + PFN_QGLBINDTEXTURE m_pfn_qglBindTexture; + PFN_QGLBLENDFUNC m_pfn_qglBlendFunc; + PFN_QGLCALLLIST m_pfn_qglCallList; + PFN_QGLCLEAR m_pfn_qglClear; + PFN_QGLCLEARCOLOR m_pfn_qglClearColor; + PFN_QGLCALLLISTS m_pfn_qglCallLists; + PFN_QGLCLEARDEPTH m_pfn_qglClearDepth; + PFN_QGLCOLOR3F m_pfn_qglColor3f; + PFN_QGLCOLOR3FV m_pfn_qglColor3fv; + PFN_QGLCOLOR4F m_pfn_qglColor4f; + PFN_QGLCOLOR4FV m_pfn_qglColor4fv; + PFN_QGLCOLOR4UBV m_pfn_qglColor4ubv; // ydnar + PFN_QGLCOLORPOINTER m_pfn_qglColorPointer; + PFN_QGLCULLFACE m_pfn_qglCullFace; + PFN_QGLDELETELISTS m_pfn_qglDeleteLists; + PFN_QGLDELETETEXTURES m_pfn_qglDeleteTextures; + PFN_QGLDEPTHFUNC m_pfn_qglDepthFunc; + PFN_QGLDEPTHMASK m_pfn_qglDepthMask; + PFN_QGLDISABLE m_pfn_qglDisable; + PFN_QGLDISABLECLIENTSTATE m_pfn_qglDisableClientState; + PFN_QGLDRAWELEMENTS m_pfn_qglDrawElements; + PFN_QGLENABLE m_pfn_qglEnable; + PFN_QGLENABLECLIENTSTATE m_pfn_qglEnableClientState; + PFN_QGLEND m_pfn_qglEnd; + PFN_QGLENDLIST m_pfn_qglEndList; + PFN_QGLFOGF m_pfn_qglFogf; + PFN_QGLFOGFV m_pfn_qglFogfv; + PFN_QGLFOGFI m_pfn_qglFogi; + PFN_QGLGENLISTS m_pfn_qglGenLists; + PFN_QGLGENTEXTURES m_pfn_qglGenTextures; + PFN_QGLGETDOUBLEV m_pfn_qglGetDoublev; + PFN_QGLGETINTEGERV m_pfn_qglGetIntegerv; + PFN_QGLHINT m_pfn_qglHint; + PFN_QGLLIGHTFV m_pfn_qglLightfv; + PFN_QGLLINESTIPPLE m_pfn_qglLineStipple; + PFN_QGLLINEWIDTH m_pfn_qglLineWidth; + PFN_QGLLISTBASE m_pfn_qglListBase; + PFN_QGLLOADIDENTITY m_pfn_qglLoadIdentity; + PFN_QGLMATERIALF m_pfn_qglMaterialf; + PFN_QGLMATERIALFV m_pfn_qglMaterialfv; + PFN_QGLMATRIXMODE m_pfn_qglMatrixMode; + PFN_QGLMULTMATRIXF m_pfn_qglMultMatrixf; + PFN_QGLNEWLIST m_pfn_qglNewList; + PFN_QGLNORMAL3F m_pfn_qglNormal3f; + PFN_QGLNORMAL3FV m_pfn_qglNormal3fv; + PFN_QGLNORMALPOINTER m_pfn_qglNormalPointer; + PFN_QGLORTHO m_pfn_qglOrtho; + PFN_QGLPOINTSIZE m_pfn_qglPointSize; + PFN_QGLPOLYGONMODE m_pfn_qglPolygonMode; + PFN_QGLPOPATTRIB m_pfn_qglPopAttrib; + PFN_QGLPOPMATRIX m_pfn_qglPopMatrix; + PFN_QGLPUSHATTRIB m_pfn_qglPushAttrib; + PFN_QGLPUSHMATRIX m_pfn_qglPushMatrix; + PFN_QGLRASTERPOS3FV m_pfn_qglRasterPos3fv; + PFN_QGLROTATED m_pfn_qglRotated; + PFN_QGLROTATEF m_pfn_qglRotatef; + PFN_QGLSCALEF m_pfn_qglScalef; + PFN_QGLSCISSOR m_pfn_qglScissor; + PFN_QGLSHADEMODEL m_pfn_qglShadeModel; + PFN_QGLTEXCOORD2F m_pfn_qglTexCoord2f; + PFN_QGLTEXCOORD2FV m_pfn_qglTexCoord2fv; + PFN_QGLTEXCOORDPOINTER m_pfn_qglTexCoordPointer; + PFN_QGLTEXENVF m_pfn_qglTexEnvf; + PFN_QGLTEXGENF m_pfn_qglTexGenf; + PFN_QGLTEXIMAGE1D m_pfn_qglTexImage1D; + PFN_QGLTEXIMAGE2D m_pfn_qglTexImage2D; + PFN_QGLTEXPARAMETERF m_pfn_qglTexParameterf; + PFN_QGLTEXPARAMETERFV m_pfn_qglTexParameterfv; + PFN_QGLTEXPARAMETERI m_pfn_qglTexParameteri; + PFN_QGLTEXPARAMETERIV m_pfn_qglTexParameteriv; + PFN_QGLTEXSUBIMAGE1D m_pfn_qglTexSubImage1D; + PFN_QGLTEXSUBIMAGE2D m_pfn_qglTexSubImage2D; + PFN_QGLTRANSLATED m_pfn_qglTranslated; + PFN_QGLTRANSLATEF m_pfn_qglTranslatef; + PFN_QGLVERTEX2F m_pfn_qglVertex2f; + PFN_QGLVERTEX3F m_pfn_qglVertex3f; + PFN_QGLVERTEX3FV m_pfn_qglVertex3fv; + PFN_QGLVERTEXPOINTER m_pfn_qglVertexPointer; + PFN_QGLVIEWPORT m_pfn_qglViewport; - PFN_QE_CHECKOPENGLFORERRORS m_pfn_QE_CheckOpenGLForErrors; + PFN_QE_CHECKOPENGLFORERRORS m_pfn_QE_CheckOpenGLForErrors; - // glu stuff - PFN_QGLUPERSPECTIVE m_pfn_qgluPerspective; - PFN_QGLULOOKAT m_pfn_qgluLookAt; + // glu stuff + PFN_QGLUPERSPECTIVE m_pfn_qgluPerspective; + PFN_QGLULOOKAT m_pfn_qgluLookAt; - // plugin entities drawing inside Radiant windows - PFN_QERAPP_HOOKGL2DWINDOW m_pfnHookGL2DWindow; - PFN_QERAPP_UNHOOKGL2DWINDOW m_pfnUnHookGL2DWindow; - PFN_QERAPP_HOOKGL3DWINDOW m_pfnHookGL3DWindow; - PFN_QERAPP_UNHOOKGL3DWINDOW m_pfnUnHookGL3DWindow; + // plugin entities drawing inside Radiant windows + PFN_QERAPP_HOOKGL2DWINDOW m_pfnHookGL2DWindow; + PFN_QERAPP_UNHOOKGL2DWINDOW m_pfnUnHookGL2DWindow; + PFN_QERAPP_HOOKGL3DWINDOW m_pfnHookGL3DWindow; + PFN_QERAPP_UNHOOKGL3DWINDOW m_pfnUnHookGL3DWindow; }; #endif diff --git a/include/iimage.h b/include/iimage.h index 6335082b..7283f2a7 100644 --- a/include/iimage.h +++ b/include/iimage.h @@ -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-2007 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 + */ // // Plugin interface for loading image files @@ -29,12 +29,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define IMAGE_MAJOR "image" // Load an image file -typedef void (* PFN_QERPLUG_LOADIMAGE) (const char *name, unsigned char **pic, int *width, int *height); +typedef void ( *PFN_QERPLUG_LOADIMAGE )( const char *name, unsigned char **pic, int *width, int *height ); struct _QERPlugImageTable { - int m_nSize; - PFN_QERPLUG_LOADIMAGE m_pfnLoadImage; + int m_nSize; + PFN_QERPLUG_LOADIMAGE m_pfnLoadImage; }; #endif // _IIMAGE_H_ diff --git a/include/imap.h b/include/imap.h index cddbadf7..2406dde1 100644 --- a/include/imap.h +++ b/include/imap.h @@ -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-2007 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 + */ //---------------------------------------------------------------------------- // @@ -36,43 +36,43 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define MAP_MAJOR "map" /*! -define a GUID for this interface so everyone can acces and reference it -{75076973-3414-49c9-be5b-2378ec5601af} -*/ + define a GUID for this interface so everyone can acces and reference it + {75076973-3414-49c9-be5b-2378ec5601af} + */ static const GUID QERPlugMapTable_GUID = { 0x75076973, 0x3414, 0x49c9, { 0xbe, 0x5b, 0x23, 0x78, 0xec, 0x56, 0x01, 0xaf } }; /*! -read from a stream into a list of entities -\param in the input stream. For regular map file parsing it's possible to copy the content in a text buffer -and use the old school parser -\param ents the list of entities read from the stream. They are not linked to the world, and their brushes -are not either. -*/ -typedef void (* PFN_MAP_READ) (IDataStream *in, CPtrArray *ents); ///< read from a stream into a list of entities -typedef void (* PFN_MAP_WRITE) (CPtrArray *ents, IDataStream *out); ///< save a list of entities into a stream + read from a stream into a list of entities + \param in the input stream. For regular map file parsing it's possible to copy the content in a text buffer + and use the old school parser + \param ents the list of entities read from the stream. They are not linked to the world, and their brushes + are not either. + */ +typedef void ( *PFN_MAP_READ )( IDataStream *in, CPtrArray *ents ); ///< read from a stream into a list of entities +typedef void ( *PFN_MAP_WRITE )( CPtrArray *ents, IDataStream *out ); ///< save a list of entities into a stream struct _QERPlugMapTable { - int m_nSize; - PFN_MAP_READ m_pfnMap_Read; - PFN_MAP_WRITE m_pfnMap_Write; + int m_nSize; + PFN_MAP_READ m_pfnMap_Read; + PFN_MAP_WRITE m_pfnMap_Write; }; /*! -this set of macros will define the functions to map on a given table - it should be used in the headers (see modules source, plugin.h) -we don't want those defines in the part where WE implement the Map_LoadFile - so we're using a define to disable .. should find a standard define name - (for instance QCOM_CLIENT / QCOM_SERVER ?) - or the name should be specific to any interface .. it's not a client/server thing here anyway -*/ + this set of macros will define the functions to map on a given table + it should be used in the headers (see modules source, plugin.h) + we don't want those defines in the part where WE implement the Map_LoadFile + so we're using a define to disable .. should find a standard define name + (for instance QCOM_CLIENT / QCOM_SERVER ?) + or the name should be specific to any interface .. it's not a client/server thing here anyway + */ #ifdef USE_MAPTABLE_DEFINE #ifndef __MAPTABLENAME -/*! -TTimo NOTE: this is the default table name we map to - if you are using a different table name, just define __MAPTABLENAME before you include the imap.h header -*/ +/*! + TTimo NOTE: this is the default table name we map to + if you are using a different table name, just define __MAPTABLENAME before you include the imap.h header + */ #define __MAPTABLENAME g_MapTable #endif #define Map_Read __MAPTABLENAME.m_pfnMap_Read diff --git a/include/imodel.h b/include/imodel.h index 3dead05e..65d88678 100644 --- a/include/imodel.h +++ b/include/imodel.h @@ -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-2007 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 + */ #ifndef _IMODEL_H_ #define _IMODEL_H_ @@ -25,17 +25,17 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define MODEL_MAJOR "model" /*! -loads model from model file name specified, -fills model struct with pointers to model interfaces + loads model from model file name specified, + fills model struct with pointers to model interfaces -name is a relative path, we'll use VFS to extract a basepath to add to get the absolute path. -*/ -typedef void (* PFN_LOADMODEL) (entity_interfaces_t *model, const char *name); + name is a relative path, we'll use VFS to extract a basepath to add to get the absolute path. + */ +typedef void ( *PFN_LOADMODEL )( entity_interfaces_t *model, const char *name ); struct _QERPlugModelTable { - int m_nSize; - PFN_LOADMODEL m_pfnLoadModel; + int m_nSize; + PFN_LOADMODEL m_pfnLoadModel; }; @@ -53,15 +53,15 @@ typedef struct entity_s entity_t; #define DRAW_GL_BLEND 0x1000 // predefined state combinations -#define DRAW_GL_WIRE 0x0000 -#define DRAW_GL_FLAT 0x0001 -#define DRAW_GL_SOLID 0x0011 -#define DRAW_GL_TEXTURED 0x0111 +#define DRAW_GL_WIRE 0x0000 +#define DRAW_GL_FLAT 0x0001 +#define DRAW_GL_SOLID 0x0011 +#define DRAW_GL_TEXTURED 0x0111 // mode -#define DRAW_WIRE 0 -#define DRAW_SOLID 1 -#define DRAW_TEXTURED 2 +#define DRAW_WIRE 0 +#define DRAW_SOLID 1 +#define DRAW_TEXTURED 2 // render flags #define DRAW_RF_NONE 0x0000 @@ -73,34 +73,34 @@ typedef struct entity_s entity_t; class IRender { public: - virtual ~IRender() { } - virtual void IncRef() = 0; // increments the reference counter for this object - virtual void DecRef() = 0; // decrements the reference counter for this object, deletes the object if reference count is zero - virtual void Draw(int state, int rflags) const = 0; // render the object - state = the opengl state - virtual const aabb_t *GetAABB() const = 0; +virtual ~IRender() { } +virtual void IncRef() = 0; // increments the reference counter for this object +virtual void DecRef() = 0; // decrements the reference counter for this object, deletes the object if reference count is zero +virtual void Draw( int state, int rflags ) const = 0; // render the object - state = the opengl state +virtual const aabb_t *GetAABB() const = 0; }; class ISelect { public: - virtual ~ISelect() { } - virtual void IncRef() = 0; // increments the reference counter for this object - virtual void DecRef() = 0; // decrements the reference counter for this object, deletes the object if reference count is zero - virtual bool TestRay(const ray_t *ray, vec_t *dist) const = 0; // test ray intersection, return bool true if intersects, and store distance to closest point of intersection - //virtual bool TestBox(const aabb_t *aabb) const = 0; // test aabb intersection, return bool true if touching or intersecting +virtual ~ISelect() { } +virtual void IncRef() = 0; // increments the reference counter for this object +virtual void DecRef() = 0; // decrements the reference counter for this object, deletes the object if reference count is zero +virtual bool TestRay( const ray_t *ray, vec_t *dist ) const = 0; // test ray intersection, return bool true if intersects, and store distance to closest point of intersection +//virtual bool TestBox(const aabb_t *aabb) const = 0; // test aabb intersection, return bool true if touching or intersecting }; class IEdit { public: - virtual ~IEdit() { } - virtual void IncRef() = 0; // increments the reference counter for this object - virtual void DecRef() = 0; // decrements the reference counter for this object, deletes the object if reference count is zero - virtual void Translate(const vec3_t translation) = 0; - virtual void Rotate(const vec3_t pivot, const vec3_t rotation) = 0; - virtual const vec_t *GetTranslation() const = 0; - virtual const vec_t *GetRotation() const = 0; - virtual void OnKeyValueChanged(entity_t *e, const char *key, const char* value) = 0; +virtual ~IEdit() { } +virtual void IncRef() = 0; // increments the reference counter for this object +virtual void DecRef() = 0; // decrements the reference counter for this object, deletes the object if reference count is zero +virtual void Translate( const vec3_t translation ) = 0; +virtual void Rotate( const vec3_t pivot, const vec3_t rotation ) = 0; +virtual const vec_t *GetTranslation() const = 0; +virtual const vec_t *GetRotation() const = 0; +virtual void OnKeyValueChanged( entity_t *e, const char *key, const char* value ) = 0; }; #endif /* _IMODEL_H_ */ diff --git a/include/ipatch.h b/include/ipatch.h index 300a0a75..175c12db 100644 --- a/include/ipatch.h +++ b/include/ipatch.h @@ -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-2007 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 + */ #ifndef _IPATCH_H_ #define _IPATCH_H_ @@ -28,19 +28,19 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define PATCH_MAJOR "patch" // {4715565b-ab3a-49fa-841f-ee965b6d88a5} -static const GUID QERPatchTable_GUID = +static const GUID QERPatchTable_GUID = { 0x4715565b, 0xab3a, 0x49fa, { 0x84, 0x1f, 0xee, 0x96, 0x5b, 0x6d, 0x88, 0xa5 } }; -typedef patchMesh_t* (* PFN_PATCHALLOC) (); -typedef patchMesh_t* (* PFN_MAKENEWPATCH) (); -typedef brush_t* (* PFN_ADDBRUSHFORPATCH) (patchMesh_t *pm, bool bLinkToWorld ); +typedef patchMesh_t* ( *PFN_PATCHALLOC )(); +typedef patchMesh_t* ( *PFN_MAKENEWPATCH )(); +typedef brush_t* ( *PFN_ADDBRUSHFORPATCH )( patchMesh_t *pm, bool bLinkToWorld ); struct _QERPatchTable { - int m_nSize; - PFN_PATCHALLOC m_pfnPatch_Alloc; - PFN_MAKENEWPATCH m_pfnMakeNewPatch; - PFN_ADDBRUSHFORPATCH m_pfnAddBrushForPatch; + int m_nSize; + PFN_PATCHALLOC m_pfnPatch_Alloc; + PFN_MAKENEWPATCH m_pfnMakeNewPatch; + PFN_ADDBRUSHFORPATCH m_pfnAddBrushForPatch; }; #ifdef USE_PATCHTABLE_DEFINE diff --git a/include/iplugin.h b/include/iplugin.h index 3f21bfef..c0fd2225 100644 --- a/include/iplugin.h +++ b/include/iplugin.h @@ -1,41 +1,41 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ #ifndef _IPLUGIN_H_ #define _IPLUGIN_H_ #define PLUGIN_MAJOR "plugin" -typedef const char* (* PFN_QERPLUG_INIT) (void* hApp, void* pMainWidget); -typedef const char* (* PFN_QERPLUG_GETNAME) (); -typedef const char* (* PFN_QERPLUG_GETCOMMANDLIST) (); -typedef void (* PFN_QERPLUG_DISPATCH) (const char* p, float* vMin, float* vMax, bool bSingleBrush); +typedef const char* ( *PFN_QERPLUG_INIT )( void* hApp, void* pMainWidget ); +typedef const char* ( *PFN_QERPLUG_GETNAME )(); +typedef const char* ( *PFN_QERPLUG_GETCOMMANDLIST )(); +typedef void ( *PFN_QERPLUG_DISPATCH )( const char* p, float* vMin, float* vMax, bool bSingleBrush ); struct _QERPluginTable { - int m_nSize; - PFN_QERPLUG_INIT m_pfnQERPlug_Init; - PFN_QERPLUG_GETNAME m_pfnQERPlug_GetName; - PFN_QERPLUG_GETCOMMANDLIST m_pfnQERPlug_GetCommandList; - PFN_QERPLUG_DISPATCH m_pfnQERPlug_Dispatch; + int m_nSize; + PFN_QERPLUG_INIT m_pfnQERPlug_Init; + PFN_QERPLUG_GETNAME m_pfnQERPlug_GetName; + PFN_QERPLUG_GETCOMMANDLIST m_pfnQERPlug_GetCommandList; + PFN_QERPLUG_DISPATCH m_pfnQERPlug_Dispatch; }; #endif diff --git a/include/irefcount.h b/include/irefcount.h index e49e80d7..d0a8a81e 100644 --- a/include/irefcount.h +++ b/include/irefcount.h @@ -1,62 +1,66 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ #ifndef __IREFCOUNT_H__ #define __IREFCOUNT_H__ /*! -\class IRefCounted -\brief reference counted objects - -general hints: how to use ref count properly - we consider ref counting as an extension of new and delete operators - the main issue is 'when to incref' 'when to decref' - in most cases connected to function calls - the general thinking about that: + \class IRefCounted + \brief reference counted objects + + general hints: how to use ref count properly + we consider ref counting as an extension of new and delete operators + the main issue is 'when to incref' 'when to decref' + in most cases connected to function calls + the general thinking about that: - if you get a pointer to a refcounted object through a call to a function, assume that this object has been 'reserved' for you already (i.e. allocated if you think this the new/delete way). so if you keep the object, you don't need to incref it, and if you don't keep it you need to decref it. - if you are called in a function and a refcounted object passed as parameter, then you should assume that this is an optional object given to you FYI, which you don't need to decref if you don't keep / need to incref if you keep - - refcount is initialized to 1 in constructor. that serves for static objects and memory allocator - when you allocate in memory a ref counted object, it's default ref count will be 1, you should never delete it but just call DecRef on it - -define an interface and an implementation macro to make things easier -NOTE: we may have to provide a static library to go with that - in case we would move irecount.h out of here into libs/ - -\todo functionality needed: -mostly enable/disable some features with compile time flags (independently from each other as much as possible) -- log the destructor calls with != 0 ref count -- log all incref/decref (with module info, and maybe even file/line number etc.?) -*/ + + refcount is initialized to 1 in constructor. that serves for static objects and memory allocator + when you allocate in memory a ref counted object, it's default ref count will be 1, you should never delete it but just call DecRef on it + + define an interface and an implementation macro to make things easier + NOTE: we may have to provide a static library to go with that + in case we would move irecount.h out of here into libs/ + + \todo functionality needed: + mostly enable/disable some features with compile time flags (independently from each other as much as possible) + - log the destructor calls with != 0 ref count + - log all incref/decref (with module info, and maybe even file/line number etc.?) + */ class IRefCounted { - int refCount; +int refCount; public: - IRefCounted() { refCount = 1; } - virtual ~IRefCounted() { } - void IncRef() { refCount++; } - void DecRef() { refCount--; if (refCount <= 0) delete this; } +IRefCounted() { refCount = 1; } +virtual ~IRefCounted() { } +void IncRef() { refCount++; } +void DecRef() { + refCount--; if ( refCount <= 0 ) { + delete this; + } +} }; - + #endif // __ISYNAPSE_H__ diff --git a/include/iscriplib.h b/include/iscriplib.h index 30b9bd8a..c958a42a 100644 --- a/include/iscriplib.h +++ b/include/iscriplib.h @@ -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-2007 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 + */ //----------------------------------------------------------------------------- // @@ -29,43 +29,43 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define __ISCRIPLIB_H_ /*! \file iscriplib.h - \brief function tables for Radiant core's text parsing functions - two token based parsers cohexist in Radiant - the primary one (GetToken UnGetToken etc.) is used on the .map parsing etc. - COM_Parse is another parser, used on .def parse for instance - - NOTE: I hope we can totally get rid of this part when we have XML support -*/ + \brief function tables for Radiant core's text parsing functions + two token based parsers cohexist in Radiant + the primary one (GetToken UnGetToken etc.) is used on the .map parsing etc. + COM_Parse is another parser, used on .def parse for instance + + NOTE: I hope we can totally get rid of this part when we have XML support + */ #define SCRIPLIB_MAJOR "scriptlib" -typedef qboolean (* PFN_GETTOKEN) (qboolean crossline); -typedef void (* PFN_UNGETTOKEN) (); +typedef qboolean ( *PFN_GETTOKEN )( qboolean crossline ); +typedef void ( *PFN_UNGETTOKEN )(); // only used to retrieve &token -typedef char* (* PFN_TOKEN) (); -typedef void (* PFN_STARTTOKENPARSING) (char *); +typedef char* ( *PFN_TOKEN )(); +typedef void ( *PFN_STARTTOKENPARSING )( char * ); // script line -typedef int (* PFN_SCRIPTLINE) (); -typedef qboolean (* PFN_TOKENAVAILABLE) (); +typedef int ( *PFN_SCRIPTLINE )(); +typedef qboolean ( *PFN_TOKENAVAILABLE )(); // COM_Parse -typedef char* (* PFN_COM_PARSE) (char *data); -typedef char* (* PFN_GET_COM_TOKEN) (); +typedef char* ( *PFN_COM_PARSE )( char *data ); +typedef char* ( *PFN_GET_COM_TOKEN )(); // Hydra: added support for GetTokenExtra() -typedef qboolean (* PFN_GETTOKENEXTRA) (qboolean crossline,char *delimiters,qboolean keepdelimiter); +typedef qboolean ( *PFN_GETTOKENEXTRA )( qboolean crossline,char *delimiters,qboolean keepdelimiter ); struct _QERScripLibTable { float m_fVersion; int m_nSize; - PFN_GETTOKEN m_pfnGetToken; - PFN_GETTOKENEXTRA m_pfnGetTokenExtra; // Hydra: added support for GetTokenExtra() - PFN_UNGETTOKEN m_pfnUnGetToken; - PFN_TOKEN m_pfnToken; - PFN_STARTTOKENPARSING m_pfnStartTokenParsing; - PFN_SCRIPTLINE m_pfnScriptLine; - PFN_TOKENAVAILABLE m_pfnTokenAvailable; - PFN_COM_PARSE m_pfnCOM_Parse; - PFN_GET_COM_TOKEN m_pfnGet_COM_Token; + PFN_GETTOKEN m_pfnGetToken; + PFN_GETTOKENEXTRA m_pfnGetTokenExtra; // Hydra: added support for GetTokenExtra() + PFN_UNGETTOKEN m_pfnUnGetToken; + PFN_TOKEN m_pfnToken; + PFN_STARTTOKENPARSING m_pfnStartTokenParsing; + PFN_SCRIPTLINE m_pfnScriptLine; + PFN_TOKENAVAILABLE m_pfnTokenAvailable; + PFN_COM_PARSE m_pfnCOM_Parse; + PFN_GET_COM_TOKEN m_pfnGet_COM_Token; }; #ifdef USE_SCRIPLIBTABLE_DEFINE diff --git a/include/iselectedface.h b/include/iselectedface.h index 61bc70d4..66616ed4 100644 --- a/include/iselectedface.h +++ b/include/iselectedface.h @@ -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-2007 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 + */ //----------------------------------------------------------------------------- // @@ -38,41 +38,41 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA //++timo TODO: this interface needs some cleanup with the new texture / shaders interface // number of selected textures -typedef int (WINAPI* PFN_GETSELECTEDFACECOUNT) (); +typedef int ( WINAPI * PFN_GETSELECTEDFACECOUNT )(); // retrieve the corresponding brush_t* (we need it when we need to explicitely rebuild stuff) -typedef brush_t* (WINAPI* PFN_GETFACEBRUSH) (int iface); +typedef brush_t* ( WINAPI * PFN_GETFACEBRUSH )( int iface ); // retrieve a given face_t* -typedef face_t* (WINAPI* PFN_GETFACE) (int iface); +typedef face_t* ( WINAPI * PFN_GETFACE )( int iface ); // winding_t is assumed to have MAX_POINTS_ON_WINDING allocated and waiting -typedef int (WINAPI* PFN_GETFACEINFO) (int iface, _QERFaceData*, winding_t* ); +typedef int ( WINAPI * PFN_GETFACEINFO )( int iface, _QERFaceData*, winding_t* ); // tell editor to update the selected face data -typedef int (WINAPI* PFN_SETFACEINFO) (int iface, _QERFaceData*); +typedef int ( WINAPI * PFN_SETFACEINFO )( int iface, _QERFaceData* ); // retrieve the texture number to bind to -typedef int (WINAPI* PFN_GETTEXTURENUMBER) (int iface); +typedef int ( WINAPI * PFN_GETTEXTURENUMBER )( int iface ); // retrieving some texture information -typedef void (WINAPI* PFN_GETTEXTURESIZE) (int iface, int Size[2] ); +typedef void ( WINAPI * PFN_GETTEXTURESIZE )( int iface, int Size[2] ); // straight func pointer to Select_SetTexture // last parameter must be casted to an IPluginTexdef -typedef void (WINAPI* PFN_SELECT_SETTEXTURE) (texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef, bool bFitScale, void* pPlugTexdef); +typedef void ( WINAPI * PFN_SELECT_SETTEXTURE )( texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef, bool bFitScale, void* pPlugTexdef ); // NOTE: some things in there are not really related to the selected face // having some stuff moved into a textures-dedicated part ? struct _QERSelectedFaceTable { int m_nSize; - PFN_GETSELECTEDFACECOUNT m_pfnGetSelectedFaceCount; - PFN_GETFACEBRUSH m_pfnGetFaceBrush; - PFN_GETFACE m_pfnGetFace; - PFN_GETFACEINFO m_pfnGetFaceInfo; - PFN_SETFACEINFO m_pfnSetFaceInfo; - PFN_GETTEXTURENUMBER m_pfnGetTextureNumber; - PFN_GETTEXTURESIZE m_pfnGetTextureSize; - PFN_SELECT_SETTEXTURE m_pfnSelect_SetTexture; + PFN_GETSELECTEDFACECOUNT m_pfnGetSelectedFaceCount; + PFN_GETFACEBRUSH m_pfnGetFaceBrush; + PFN_GETFACE m_pfnGetFace; + PFN_GETFACEINFO m_pfnGetFaceInfo; + PFN_SETFACEINFO m_pfnSetFaceInfo; + PFN_GETTEXTURENUMBER m_pfnGetTextureNumber; + PFN_GETTEXTURESIZE m_pfnGetTextureSize; + PFN_SELECT_SETTEXTURE m_pfnSelect_SetTexture; }; #ifdef USE_SELECTEDFACETABLE_DEFINE #ifndef __SELECTEDFACETABLENAME - #define __SELECTEDFACETABLENAME g_SelectedFaceTable + #define __SELECTEDFACETABLENAME g_SelectedFaceTable #endif #define GetSelectedFaceCount __SELECTEDFACETABLENAME.m_pfnGetSelectedFaceCount diff --git a/include/ishaders.h b/include/ishaders.h index b04d8679..5ade5956 100644 --- a/include/ishaders.h +++ b/include/ishaders.h @@ -1,30 +1,30 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ //----------------------------------------------------------------------------- // // // DESCRIPTION: // a set of functions to manipulate textures in Radiant -// +// #ifndef __ISHADERS_H_ #define __ISHADERS_H_ @@ -32,7 +32,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define SHADERS_MAJOR "shaders" // define a GUID for this interface so plugins can access and reference it // {D42F798A-DF57-11d3-A3EE-0004AC96D4C3} -static const GUID QERShadersTable_GUID = +static const GUID QERShadersTable_GUID = { 0xd42f798a, 0xdf57, 0x11d3, { 0xa3, 0xee, 0x0, 0x4, 0xac, 0x96, 0xd4, 0xc3 } }; // NOTES ABOUT SYNTAX: @@ -43,55 +43,55 @@ static const GUID QERShadersTable_GUID = // see the note to move all the shader language out of Radiant below) /*! -\todo FIXME TTimo -fix the reference count strategy -- define the policy. It seems the initial policy of doing an inc ref when you create the shader is not good -(it doesn't work, and it's not being used right) -so, when you request an IShader and store it, incref it yourself -as a debugging safe check: push the created increfed objects into a list, and scan them at next idle loop -to make sure they have been decref'ed ? (sounds easy, may not be that much). -*/ + \todo FIXME TTimo + fix the reference count strategy + - define the policy. It seems the initial policy of doing an inc ref when you create the shader is not good + (it doesn't work, and it's not being used right) + so, when you request an IShader and store it, incref it yourself + as a debugging safe check: push the created increfed objects into a list, and scan them at next idle loop + to make sure they have been decref'ed ? (sounds easy, may not be that much). + */ class IShader { public: - virtual ~IShader() { } - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - // get/set the qtexture_t* Radiant uses to represent this shader object - virtual qtexture_t* getTexture() const = 0; - virtual void setTexture(qtexture_t *pTex) = 0; - // get shader name - virtual const char* getName() const = 0; - // is this shader in use? - // NOTE: this flag can mean this shader has been in use at least once since the last rescan of in-use stuff - // (rescan of in-use happens in several cases, user command or during a texture directory load) - // NOTE: this is used to draw the green outline in the texture window - // NOTE: when does Radiant set the InUse flag? Whenever Select_SetTexture is called (well that doesn't necessarily means the texture actually gets in use, but that's close enough) - virtual bool IsInUse() const = 0; - virtual void SetInUse(bool) = 0; - // is this shader displayed in the texture browser? - // NOTE: if IsInUse() == true, the shader will always be displayed in the texture window and this flag ingored - virtual bool IsDisplayed() const = 0; - virtual void SetDisplayed(bool) = 0; - // get the editor flags (QER_NOCARVE QER_TRANS) - virtual int getFlags() = 0; - // get the transparency value - virtual float getTrans() = 0; - // test if it's a true shader, or a default shader created to wrap around a texture - virtual bool IsDefault() = 0; - // test if it's a plain color shader, i.e. a shader we use on plain color stuff (like info_playerstart) - virtual bool IsColor() = 0; - // get the related color then! - virtual void getColor(vec3_t v) = 0; - // get the alphaFunc - virtual void getAlphaFunc(int *func, float *ref) = 0; - // get the cull type - virtual int getCull() = 0; - // get shader file name (ie the file where this one is defined) - virtual const char* getShaderFileName() const = 0; +virtual ~IShader() { } +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +// get/set the qtexture_t* Radiant uses to represent this shader object +virtual qtexture_t* getTexture() const = 0; +virtual void setTexture( qtexture_t *pTex ) = 0; +// get shader name +virtual const char* getName() const = 0; +// is this shader in use? +// NOTE: this flag can mean this shader has been in use at least once since the last rescan of in-use stuff +// (rescan of in-use happens in several cases, user command or during a texture directory load) +// NOTE: this is used to draw the green outline in the texture window +// NOTE: when does Radiant set the InUse flag? Whenever Select_SetTexture is called (well that doesn't necessarily means the texture actually gets in use, but that's close enough) +virtual bool IsInUse() const = 0; +virtual void SetInUse( bool ) = 0; +// is this shader displayed in the texture browser? +// NOTE: if IsInUse() == true, the shader will always be displayed in the texture window and this flag ingored +virtual bool IsDisplayed() const = 0; +virtual void SetDisplayed( bool ) = 0; +// get the editor flags (QER_NOCARVE QER_TRANS) +virtual int getFlags() = 0; +// get the transparency value +virtual float getTrans() = 0; +// test if it's a true shader, or a default shader created to wrap around a texture +virtual bool IsDefault() = 0; +// test if it's a plain color shader, i.e. a shader we use on plain color stuff (like info_playerstart) +virtual bool IsColor() = 0; +// get the related color then! +virtual void getColor( vec3_t v ) = 0; +// get the alphaFunc +virtual void getAlphaFunc( int *func, float *ref ) = 0; +// get the cull type +virtual int getCull() = 0; +// get shader file name (ie the file where this one is defined) +virtual const char* getShaderFileName() const = 0; }; // NOTE: how to move all the shader language out of Radiant in a plugin? @@ -104,29 +104,29 @@ public: // free all shaders // free the shaders, will not free the qtexture_t* -typedef void (WINAPI* PFN_FREESHADERS) (); +typedef void ( WINAPI * PFN_FREESHADERS )(); // reload all the shaders // this will free everything (shaders and their textures), then reload all in use stuff -typedef void (WINAPI* PFN_RELOADSHADERS) (); +typedef void ( WINAPI * PFN_RELOADSHADERS )(); // load all shaders in a given directory // this will scan the list of in-memory shaders, and load the related qtexture_t if needed -typedef int (WINAPI* PFN_LOADSHADERSFROMDIR)(const char* path); +typedef int ( WINAPI * PFN_LOADSHADERSFROMDIR )( const char* path ); // load a shader file (ie a set of shaders) // after LoadShaderFile shaders will be in memory, next step is to load the qtexture_t Radiant uses to represent them // if a shader with the same name exists, new one will not be loaded - don't use this to refresh the shaders! -typedef void (WINAPI* PFN_LOADSHADERFILE) (const char* filename); +typedef void ( WINAPI * PFN_LOADSHADERFILE )( const char* filename ); // tell if a given shader exists in our shader table -// NOTE: this doesn't tell wether it's corresponding qtexture is loaded -typedef int (WINAPI* PFN_HASSHADER) (const char* name); +// NOTE: this doesn't tell wether it's corresponding qtexture is loaded +typedef int ( WINAPI * PFN_HASSHADER )( const char* name ); // return the shader for a given name // if the qtexture is not already in memory, will try loading it // if the qtexture could not be found, will use default // will return NULL on shader not found -typedef IShader* (WINAPI* PFN_TRYSHADERFORNAME) (const char* name); +typedef IShader* ( WINAPI * PFN_TRYSHADERFORNAME )( const char* name ); // return the shader for a given name // if the qtexture is not already in memory, will try loading it // will create a default shader if not found (will use a default texture) -typedef IShader* (WINAPI* PFN_SHADERFORNAME) (const char* name); +typedef IShader* ( WINAPI * PFN_SHADERFORNAME )( const char* name ); // query / load a texture // will not try loading a shader, will look for the actual image file .. // returns NULL on file not found @@ -134,77 +134,77 @@ typedef IShader* (WINAPI* PFN_SHADERFORNAME) (const char* name); // paths must be relative, ie. textures/me/myfile // if a 3-letters filename extension (such as .jpg or .tga) is provided, it will get loaded first // if not found or no extension, will try loading after adding .tga and .jpg (in this order) -typedef qtexture_t* (WINAPI* PFN_TRYTEXTUREFORNAME) (const char* filename); +typedef qtexture_t* ( WINAPI * PFN_TRYTEXTUREFORNAME )( const char* filename ); // query / load a texture // will not try loading a shader, will look for the actual image file .. // on file not found will use the "texture not found" -typedef qtexture_t* (WINAPI* PFN_TEXTUREFORNAME) (const char* filename); +typedef qtexture_t* ( WINAPI * PFN_TEXTUREFORNAME )( const char* filename ); // get the number of active shaders // these are the shaders currently loaded, that have an associated qtexture_t* -typedef int (WINAPI* PFN_GETACTIVESHADERCOUNT) (); +typedef int ( WINAPI * PFN_GETACTIVESHADERCOUNT )(); // for stuff that needs to be represented by a plain texture // the shader will get a "color" name, use GetColor to get the actual color -typedef IShader* (WINAPI* PFN_COLORSHADERFORNAME) (const char* name); +typedef IShader* ( WINAPI * PFN_COLORSHADERFORNAME )( const char* name ); // reload a shaderfile - update shaders and their display properties/qtexture_t if needed // will not reload the texture files // will switch to "show in use" atfer use // filename must be reletive path of the shader, ex. scripts/gothic_wall.shader -typedef void (WINAPI* PFN_RELOADSHADERFILE)(const char* filename); +typedef void ( WINAPI * PFN_RELOADSHADERFILE )( const char* filename ); // retrieve a shader if exists, without loading the textures for it etc. // use this function if you want special info on a shader -typedef IShader* (WINAPI* PFN_SHADERFORNAMENOLOAD) (const char* name); +typedef IShader* ( WINAPI * PFN_SHADERFORNAMENOLOAD )( const char* name ); // force the "in use" flag on all active shaders -typedef void (WINAPI* PFN_ACTIVESHADERSSETINUSE) (bool b); +typedef void ( WINAPI * PFN_ACTIVESHADERSSETINUSE )( bool b ); // sort the shaders in alphabetical order, we use the order in the texture inspector -typedef void (WINAPI* PFN_SORTACTIVESHADERS) (); +typedef void ( WINAPI * PFN_SORTACTIVESHADERS )(); // check if there exists an active shader with the given texture name (loaded or not, doesn't matter) // (used to detect the textures we need to create a default shader for .. while scanning a directory) -typedef IShader* (WINAPI* PFN_ACTIVESHADERFORTEXTURENAME) (char *); +typedef IShader* ( WINAPI * PFN_ACTIVESHADERFORTEXTURENAME )( char * ); // create a shader to wrap around a texture name, we use this when loading a texture directory and some textures // are not present as shaders -typedef IShader* (WINAPI* PFN_CREATESHADERFORTEXTURENAME) (const char* name); +typedef IShader* ( WINAPI * PFN_CREATESHADERFORTEXTURENAME )( const char* name ); // switch the IsDisplayed flag on all the active shaders -typedef void (WINAPI* PFN_ACTIVESHADERSSETDISPLAYED) (bool b); +typedef void ( WINAPI * PFN_ACTIVESHADERSSETDISPLAYED )( bool b ); // retrieve an active shader based on index -typedef IShader* (WINAPI* PFN_ACTIVESHADERFORINDEX) (int i); +typedef IShader* ( WINAPI * PFN_ACTIVESHADERFORINDEX )( int i ); // will cleanup a texture name and force it to the right format // the debug version is painfully slow, but will detect more problems // the idea being to avoid loading the same file several time because of uppercase/lowercase etc. -typedef const char* (WINAPI* PFN_CLEANTEXTURENAME) (const char* name, bool bAddTexture); +typedef const char* ( WINAPI * PFN_CLEANTEXTURENAME )( const char* name, bool bAddTexture ); struct _QERShadersTable { - int m_nSize; - PFN_FREESHADERS m_pfnFreeShaders; - PFN_RELOADSHADERS m_pfnReloadShaders; - PFN_LOADSHADERSFROMDIR m_pfnLoadShadersFromDir; - PFN_LOADSHADERFILE m_pfnLoadShaderFile; - PFN_RELOADSHADERFILE m_pfnReloadShaderFile; - PFN_HASSHADER m_pfnHasShader; - PFN_TRYSHADERFORNAME m_pfnTry_Shader_ForName; - PFN_SHADERFORNAME m_pfnShader_ForName; - PFN_TRYTEXTUREFORNAME m_pfnTry_Texture_ForName; - PFN_TEXTUREFORNAME m_pfnTexture_ForName; - PFN_GETACTIVESHADERCOUNT m_pfnGetActiveShaderCount; - PFN_COLORSHADERFORNAME m_pfnColorShader_ForName; - PFN_SHADERFORNAMENOLOAD m_pfnShader_ForName_NoLoad; - PFN_ACTIVESHADERSSETINUSE m_pfnActiveShaders_SetInUse; - PFN_SORTACTIVESHADERS m_pfnSortActiveShaders; - PFN_ACTIVESHADERFORTEXTURENAME m_pfnActiveShader_ForTextureName; - PFN_CREATESHADERFORTEXTURENAME m_pfnCreateShader_ForTextureName; - PFN_ACTIVESHADERSSETDISPLAYED m_pfnActiveShaders_SetDisplayed; - PFN_ACTIVESHADERFORINDEX m_pfnActiveShader_ForIndex; - PFN_CLEANTEXTURENAME m_pfnCleanTextureName; + int m_nSize; + PFN_FREESHADERS m_pfnFreeShaders; + PFN_RELOADSHADERS m_pfnReloadShaders; + PFN_LOADSHADERSFROMDIR m_pfnLoadShadersFromDir; + PFN_LOADSHADERFILE m_pfnLoadShaderFile; + PFN_RELOADSHADERFILE m_pfnReloadShaderFile; + PFN_HASSHADER m_pfnHasShader; + PFN_TRYSHADERFORNAME m_pfnTry_Shader_ForName; + PFN_SHADERFORNAME m_pfnShader_ForName; + PFN_TRYTEXTUREFORNAME m_pfnTry_Texture_ForName; + PFN_TEXTUREFORNAME m_pfnTexture_ForName; + PFN_GETACTIVESHADERCOUNT m_pfnGetActiveShaderCount; + PFN_COLORSHADERFORNAME m_pfnColorShader_ForName; + PFN_SHADERFORNAMENOLOAD m_pfnShader_ForName_NoLoad; + PFN_ACTIVESHADERSSETINUSE m_pfnActiveShaders_SetInUse; + PFN_SORTACTIVESHADERS m_pfnSortActiveShaders; + PFN_ACTIVESHADERFORTEXTURENAME m_pfnActiveShader_ForTextureName; + PFN_CREATESHADERFORTEXTURENAME m_pfnCreateShader_ForTextureName; + PFN_ACTIVESHADERSSETDISPLAYED m_pfnActiveShaders_SetDisplayed; + PFN_ACTIVESHADERFORINDEX m_pfnActiveShader_ForIndex; + PFN_CLEANTEXTURENAME m_pfnCleanTextureName; }; /*! -\todo FIXME fix the QERApp_ prototyping on shaders module -make it homogeneous with other modules, should be straight calls -*/ + \todo FIXME fix the QERApp_ prototyping on shaders module + make it homogeneous with other modules, should be straight calls + */ #ifdef USE_SHADERSTABLE_DEFINE #ifndef __SHADERSTABLENAME - #define __SHADERSTABLENAME g_ShadersTable + #define __SHADERSTABLENAME g_ShadersTable #endif #define QERApp_Shader_ForName __SHADERSTABLENAME.m_pfnShader_ForName #define QERApp_Texture_ForName2 __SHADERSTABLENAME.m_pfnTexture_ForName @@ -232,53 +232,53 @@ make it homogeneous with other modules, should be straight calls #define APPSHADERS_MAJOR "appshaders" // FIXME: remove -static const GUID QERAppShadersTable_GUID = +static const GUID QERAppShadersTable_GUID = { 0xec3008a8, 0xbd0b, 0x11d4, { 0x82, 0x51, 0x20, 0x4c, 0x4f, 0x4f, 0x50, 0x20 } }; // g_qeglobals.d_qtextures is used internally by the editor for actual camera drawing -typedef qtexture_t** (WINAPI* PFN_QTEXTURES)(); +typedef qtexture_t** ( WINAPI * PFN_QTEXTURES )(); // g_qeglobals.d_qtexmap is a map for fast access -typedef GHashTable* (WINAPI* PFN_QTEXMAP)(); +typedef GHashTable* ( WINAPI * PFN_QTEXMAP )(); // d_texturewin //++timo NOTE: this same function is also in isurface.h table, we would eventually have to merge some stuff -typedef texturewin_t* (* PFN_QEGLOBALSTEXTUREWIN)(); +typedef texturewin_t* ( *PFN_QEGLOBALSTEXTUREWIN )(); // Texture_SetTexture //++timo NOTE: this one may have to be reorganized too .. putting it here is a bit clumsy // NOTE: the C++ function used internally has a lot of default values -typedef void (WINAPI* PFN_TEXTURESETTEXTURE)(texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef); +typedef void ( WINAPI * PFN_TEXTURESETTEXTURE )( texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef ); // Texture_ShowInuse -typedef void (WINAPI* PFN_TEXTURESHOWINUSE)(); +typedef void ( WINAPI * PFN_TEXTURESHOWINUSE )(); // BuildShaderList -typedef void (* PFN_BUILDSHADERLIST)(); +typedef void ( *PFN_BUILDSHADERLIST )(); // PreloadShaders -typedef void (* PFN_PRELOADSHADERS)(); +typedef void ( *PFN_PRELOADSHADERS )(); // a table that Radiant makes available to the shader module in return struct _QERAppShadersTable { - int m_nSize; - PFN_QTEXTURES m_pfnQTextures; - PFN_QTEXMAP m_pfnQTexmap; - PFN_QEGLOBALSTEXTUREWIN m_pfnQeglobalsTexturewin; - PFN_TEXTURESETTEXTURE m_pfnTexture_SetTexture; - PFN_TEXTURESHOWINUSE m_pfnTexture_ShowInuse; - PFN_BUILDSHADERLIST m_pfnBuildShaderList; - PFN_PRELOADSHADERS m_pfnPreloadShaders; + int m_nSize; + PFN_QTEXTURES m_pfnQTextures; + PFN_QTEXMAP m_pfnQTexmap; + PFN_QEGLOBALSTEXTUREWIN m_pfnQeglobalsTexturewin; + PFN_TEXTURESETTEXTURE m_pfnTexture_SetTexture; + PFN_TEXTURESHOWINUSE m_pfnTexture_ShowInuse; + PFN_BUILDSHADERLIST m_pfnBuildShaderList; + PFN_PRELOADSHADERS m_pfnPreloadShaders; }; #ifdef USE_APPSHADERSTABLE_DEFINE #ifndef __APPSHADERTABLENAME - #define __APPSHADERTABLENAME g_AppShadersTable + #define __APPSHADERTABLENAME g_AppShadersTable #endif #define Texture_ShowInuse __APPSHADERTABLENAME.m_pfnTexture_ShowInuse #endif /*! -NOTE TTimo: there is an important distinction between SHADER_NOT_FOUND and SHADER_NOTEX: -SHADER_NOT_FOUND means we didn't find the raw texture or the shader for this -SHADER_NOTEX means we recognize this as a shader script, but we are missing the texture to represent it -this was in the initial design of the shader code since early GtkRadiant alpha, and got sort of foxed in 1.2 and put back in -*/ + NOTE TTimo: there is an important distinction between SHADER_NOT_FOUND and SHADER_NOTEX: + SHADER_NOT_FOUND means we didn't find the raw texture or the shader for this + SHADER_NOTEX means we recognize this as a shader script, but we are missing the texture to represent it + this was in the initial design of the shader code since early GtkRadiant alpha, and got sort of foxed in 1.2 and put back in + */ #define SHADER_NOT_FOUND "textures/radiant/notex" #define SHADER_NOTEX "textures/radiant/shadernotex" ///< Q3 tech specific diff --git a/include/ishadersmanager.h b/include/ishadersmanager.h index 06ac9d32..a8095c9a 100644 --- a/include/ishadersmanager.h +++ b/include/ishadersmanager.h @@ -1,102 +1,102 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ #ifndef _ISHADERSMANAGER_H_ #define _ISHADERSMANAGER_H_ class IShadersManager { - public: - IShadersManager (); - virtual ~IShadersManager (); - - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - - // free all shaders - // free the shaders, will not free the qtexture_t* - virtual void FreeShaders () = 0; - - // reload all the shaders - // this will free everything (shaders and their textures), then reload all in use stuff - virtual void ReloadShaders () = 0; - - // load all shaders in a given directory - // this will scan the list of in-memory shaders, and load the related qtexture_t if needed - virtual void LoadShadersFromDir (const char* path) = 0; - - // load a shader file (ie a set of shaders) - // after LoadShaderFile shaders will be in memory, next step is to load the qtexture_t Radiant uses - // to represent them if a shader with the same name exists, new one will not be loaded - // don't use this to refresh the shaders! - virtual void LoadShaderFile (const char* filename) = 0; - - // tell if a given shader exists in our shader table - // NOTE: this doesn't tell wether it's corresponding qtexture is loaded - virtual int HasShader (const char* name) = 0; - - // return the shader for a given name - // if the qtexture is not already in memory, will try loading it - // if the qtexture could not be found, will use default - // will return NULL on shader not found - virtual IShader* Try_Shader_ForName (const char* name) = 0; - - // return the shader for a given name - // if the qtexture is not already in memory, will try loading it - // will create a default shader if not found (will use a default texture) - virtual IShader* Shader_ForName (const char* name) = 0; - - // query / load a texture - // will not try loading a shader, will look for the actual image file .. - // returns NULL on file not found - // NOTE: strategy for file lookup: - // paths must be relative, ie. textures/me/myfile - // if a 3-letters filename extension (such as .jpg or .tga) is provided, it will get loaded first - // if not found or no extension, will try loading after adding .tga and .jpg (in this order) - virtual qtexture_t* Try_Texture_ForName (const char* filename) = 0; - - // query / load a texture - // will not try loading a shader, will look for the actual image file .. - // on file not found will use the "texture not found" - virtual qtexture_t* Texture_ForName (const char* filename) = 0; - - // get the number of active shaders - // these are the shaders currently loaded, that have an associated qtexture_t* - virtual int GetActiveShaderCount () = 0; - - // for stuff that needs to be represented by a plain texture - // the shader will get a "color" name, use GetColor to get the actual color - virtual IShader* ColorShader_ForName (const char* name) = 0; - - // reload a shaderfile - update shaders and their display properties/qtexture_t if needed - // will not reload the texture files - // will switch to "show in use" atfer use - // filename must be reletive path of the shader, ex. scripts/gothic_wall.shader - virtual void ReloadShaderFile (const char* filename) = 0; - - // retrieve a shader if exists, without loading the textures for it etc. - // use this function if you want special info on a shader - virtual IShader* Shader_ForName_NoLoad (const char* name) = 0; +public: +IShadersManager (); +virtual ~IShadersManager (); + +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; + +// free all shaders +// free the shaders, will not free the qtexture_t* +virtual void FreeShaders() = 0; + +// reload all the shaders +// this will free everything (shaders and their textures), then reload all in use stuff +virtual void ReloadShaders() = 0; + +// load all shaders in a given directory +// this will scan the list of in-memory shaders, and load the related qtexture_t if needed +virtual void LoadShadersFromDir( const char* path ) = 0; + +// load a shader file (ie a set of shaders) +// after LoadShaderFile shaders will be in memory, next step is to load the qtexture_t Radiant uses +// to represent them if a shader with the same name exists, new one will not be loaded +// don't use this to refresh the shaders! +virtual void LoadShaderFile( const char* filename ) = 0; + +// tell if a given shader exists in our shader table +// NOTE: this doesn't tell wether it's corresponding qtexture is loaded +virtual int HasShader( const char* name ) = 0; + +// return the shader for a given name +// if the qtexture is not already in memory, will try loading it +// if the qtexture could not be found, will use default +// will return NULL on shader not found +virtual IShader* Try_Shader_ForName( const char* name ) = 0; + +// return the shader for a given name +// if the qtexture is not already in memory, will try loading it +// will create a default shader if not found (will use a default texture) +virtual IShader* Shader_ForName( const char* name ) = 0; + +// query / load a texture +// will not try loading a shader, will look for the actual image file .. +// returns NULL on file not found +// NOTE: strategy for file lookup: +// paths must be relative, ie. textures/me/myfile +// if a 3-letters filename extension (such as .jpg or .tga) is provided, it will get loaded first +// if not found or no extension, will try loading after adding .tga and .jpg (in this order) +virtual qtexture_t* Try_Texture_ForName( const char* filename ) = 0; + +// query / load a texture +// will not try loading a shader, will look for the actual image file .. +// on file not found will use the "texture not found" +virtual qtexture_t* Texture_ForName( const char* filename ) = 0; + +// get the number of active shaders +// these are the shaders currently loaded, that have an associated qtexture_t* +virtual int GetActiveShaderCount() = 0; + +// for stuff that needs to be represented by a plain texture +// the shader will get a "color" name, use GetColor to get the actual color +virtual IShader* ColorShader_ForName( const char* name ) = 0; + +// reload a shaderfile - update shaders and their display properties/qtexture_t if needed +// will not reload the texture files +// will switch to "show in use" atfer use +// filename must be reletive path of the shader, ex. scripts/gothic_wall.shader +virtual void ReloadShaderFile( const char* filename ) = 0; + +// retrieve a shader if exists, without loading the textures for it etc. +// use this function if you want special info on a shader +virtual IShader* Shader_ForName_NoLoad( const char* name ) = 0; }; #endif // _ISHADERSMANAGER_H_ diff --git a/include/isurfaceplugin.h b/include/isurfaceplugin.h index c31b5791..14f819a9 100644 --- a/include/isurfaceplugin.h +++ b/include/isurfaceplugin.h @@ -1,28 +1,28 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ //----------------------------------------------------------------------------- // // DESCRIPTION: -// +// // #ifndef __ISURFACEPLUGIN_H_ @@ -39,16 +39,16 @@ typedef struct _GtkWindow GtkWindow; // members of IPluginTexdef often access the qtexture_t or face_t they are connected to // Write texdef needs a function pointer, because Radiant either writes into a FILE or a CMemFile -typedef void (* PFN_QERAPP_MAPPRINTF) ( char *text, ... ); +typedef void ( *PFN_QERAPP_MAPPRINTF )( char *text, ... ); class IPluginTexdef { public: - virtual ~IPluginTexdef() { } - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; +virtual ~IPluginTexdef() { } +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; }; @@ -57,29 +57,29 @@ public: class texdef_to_face_t { public: - texdef_to_face_t* next; - brush_t *brush; // Brush faces belong to (for Undo) - face_t *face; // Face of Texdef - texdef_t texdef; // Working texdef - texdef_t orig_texdef; // Original, for baselining changes - brushprimit_texdef_t orig_bp_texdef; // Original, for undo +texdef_to_face_t* next; +brush_t *brush; // Brush faces belong to (for Undo) +face_t *face; // Face of Texdef +texdef_t texdef; // Working texdef +texdef_t orig_texdef; // Original, for baselining changes +brushprimit_texdef_t orig_bp_texdef; // Original, for undo }; -typedef void (* PFN_QERPLUG_DOSURFACE) (); -typedef void (* PFN_QERPLUG_TOGGLESURFACE) (); -typedef void (* PFN_QERPLUG_UPDATESURFACEDIALOG) (); -typedef void (* PFN_QERPLUG_SURFACEDLGFITALL) (); -typedef GtkWidget* (* PFN_GET_SI_MODULE_WIDGET) (); +typedef void ( *PFN_QERPLUG_DOSURFACE )(); +typedef void ( *PFN_QERPLUG_TOGGLESURFACE )(); +typedef void ( *PFN_QERPLUG_UPDATESURFACEDIALOG )(); +typedef void ( *PFN_QERPLUG_SURFACEDLGFITALL )(); +typedef GtkWidget* ( *PFN_GET_SI_MODULE_WIDGET )(); struct _QERPlugSurfaceTable { int m_nSize; - PFN_QERPLUG_TOGGLESURFACE m_pfnToggleSurface; - PFN_QERPLUG_DOSURFACE m_pfnDoSurface; - PFN_QERPLUG_UPDATESURFACEDIALOG m_pfnUpdateSurfaceDialog; - PFN_QERPLUG_SURFACEDLGFITALL m_pfnSurfaceDlgFitAll; - PFN_GET_SI_MODULE_WIDGET m_pfnGet_SI_Module_Widget; + PFN_QERPLUG_TOGGLESURFACE m_pfnToggleSurface; + PFN_QERPLUG_DOSURFACE m_pfnDoSurface; + PFN_QERPLUG_UPDATESURFACEDIALOG m_pfnUpdateSurfaceDialog; + PFN_QERPLUG_SURFACEDLGFITALL m_pfnSurfaceDlgFitAll; + PFN_GET_SI_MODULE_WIDGET m_pfnGet_SI_Module_Widget; }; // this one is used by the plugin to access some Radiant stuff @@ -87,74 +87,74 @@ struct _QERPlugSurfaceTable #define APPSURFACEDIALOG_MAJOR "appsurfdialog" // {42BAE4C0-9787-11d3-8EF3-0000E8E8657B} -static const GUID QERAppSurfaceTable_GUID = +static const GUID QERAppSurfaceTable_GUID = { 0x42bae4c0, 0x9787, 0x11d3, { 0x8e, 0xf3, 0x0, 0x0, 0xe8, 0xe8, 0x65, 0x7b } }; -typedef bool (* PFN_PATCHESSELECTED) (); +typedef bool ( *PFN_PATCHESSELECTED )(); // retrieve g_qeglobals.texturewin_t //++timo FIXME: this should move in a dedicated table for all g_qeglobals stuff -typedef texturewin_t* (* PFN_QEGLOBALSTEXTUREWIN) (); +typedef texturewin_t* ( *PFN_QEGLOBALSTEXTUREWIN )(); // look for the first selected patch mesh //++timo FIXME: this is a convenient func since there's no way to scan patches ( yet ) -typedef patchMesh_t* (* PFN_GETSELECTEDPATCH) (); +typedef patchMesh_t* ( *PFN_GETSELECTEDPATCH )(); //++timo FIXME: this one in particular is a hack -typedef void (* PFN_GETTWOSELECTEDPATCH) (patchMesh_t **p1, patchMesh_t **p2); +typedef void ( *PFN_GETTWOSELECTEDPATCH )( patchMesh_t **p1, patchMesh_t **p2 ); // leo FIXME: hacks uglier than the ones above -typedef void (* PFN_TEXMATTOFAKETEXCOORDS) (vec_t texMat[2][3], float shift[2], float *rot, float scale[2]); -typedef void (* PFN_CONVERTTEXMATWITHQTEXTURE) (brushprimit_texdef_t *texMat1, qtexture_t *qtex1, brushprimit_texdef_t *texMat2, qtexture_t *qtex2); -typedef void (* PFN_FAKETEXCOORDSTOTEXMAT) (float shift[2], float rot, float scale[2], vec_t texMat[2][3]); -typedef void (* PFN_PATCH_RESETTEXTURING) (float fx, float fy); -typedef void (* PFN_PATCH_FITTEXTURING) (); -typedef void (* PFN_PATCH_NATURALIZESELECTED) (bool bCap); -typedef const char* (* PFN_PATCH_GETTEXTURENAME) (); -typedef qboolean (* PFN_QE_SINGLEBRUSH) (bool bQuiet); -typedef qboolean (* PFN_ISBRUSHPRIMITMODE) (); -typedef void (* PFN_SELECT_FITTEXTURE)(int nHeight, int nWidth); -typedef void (*PFN_COMPUTEAXISBASE)(vec3_t normal,vec3_t texS,vec3_t texT ); -typedef void (*PFN_BPMATMUL)(vec_t A[2][3], vec_t B[2][3], vec_t C[2][3]); -typedef void (*PFN_EMITBRUSHPRIMITTEXCOORDS)(face_t * f, winding_t * w); -typedef texdef_t* (*PFN_QEGLOBALSSAVEDINFO_SIINC) (); -typedef float (* PFN_QEGLOBALSGETGRIDSIZE) (); -typedef void (* PFN_FACELIST_FITTEXTURE) (texdef_to_face_t* texdef_face_list, int nHeight, int nWidth); -typedef GtkWindow* (* PFN_GETMAINWINDOW)(); -typedef void (* PFN_SETWINPOS_FROM_PREFS) (GtkWidget *win); -typedef int (* PFN_GETSELECTEDFACECOUNT_BRUSH) (); -typedef void (* PFN_GETSELFACESTEXDEF) (texdef_to_face_t *); -typedef void (* PFN_SETTEXDEF_FACELIST) (texdef_to_face_t* texdef_face_list, bool b_SetUndoPoint, bool bFit_to_Scale); -typedef void (* PFN_SETACTIVEINRADIANT) (); +typedef void ( *PFN_TEXMATTOFAKETEXCOORDS )( vec_t texMat[2][3], float shift[2], float *rot, float scale[2] ); +typedef void ( *PFN_CONVERTTEXMATWITHQTEXTURE )( brushprimit_texdef_t *texMat1, qtexture_t *qtex1, brushprimit_texdef_t *texMat2, qtexture_t *qtex2 ); +typedef void ( *PFN_FAKETEXCOORDSTOTEXMAT )( float shift[2], float rot, float scale[2], vec_t texMat[2][3] ); +typedef void ( *PFN_PATCH_RESETTEXTURING )( float fx, float fy ); +typedef void ( *PFN_PATCH_FITTEXTURING )(); +typedef void ( *PFN_PATCH_NATURALIZESELECTED )( bool bCap ); +typedef const char* ( *PFN_PATCH_GETTEXTURENAME )(); +typedef qboolean ( *PFN_QE_SINGLEBRUSH )( bool bQuiet ); +typedef qboolean ( *PFN_ISBRUSHPRIMITMODE )(); +typedef void ( *PFN_SELECT_FITTEXTURE )( int nHeight, int nWidth ); +typedef void ( *PFN_COMPUTEAXISBASE )( vec3_t normal,vec3_t texS,vec3_t texT ); +typedef void ( *PFN_BPMATMUL )( vec_t A[2][3], vec_t B[2][3], vec_t C[2][3] ); +typedef void ( *PFN_EMITBRUSHPRIMITTEXCOORDS )( face_t * f, winding_t * w ); +typedef texdef_t* ( *PFN_QEGLOBALSSAVEDINFO_SIINC )(); +typedef float ( *PFN_QEGLOBALSGETGRIDSIZE )(); +typedef void ( *PFN_FACELIST_FITTEXTURE )( texdef_to_face_t* texdef_face_list, int nHeight, int nWidth ); +typedef GtkWindow* ( *PFN_GETMAINWINDOW )(); +typedef void ( *PFN_SETWINPOS_FROM_PREFS )( GtkWidget *win ); +typedef int ( *PFN_GETSELECTEDFACECOUNT_BRUSH )(); +typedef void ( *PFN_GETSELFACESTEXDEF )( texdef_to_face_t * ); +typedef void ( *PFN_SETTEXDEF_FACELIST )( texdef_to_face_t* texdef_face_list, bool b_SetUndoPoint, bool bFit_to_Scale ); +typedef void ( *PFN_SETACTIVEINRADIANT )(); struct _QERAppSurfaceTable { - int m_nSize; - PFN_PATCHESSELECTED m_pfnOnlyPatchesSelected; - PFN_PATCHESSELECTED m_pfnAnyPatchesSelected; - PFN_GETSELECTEDPATCH m_pfnGetSelectedPatch; - PFN_GETTWOSELECTEDPATCH m_pfnGetTwoSelectedPatch; - PFN_TEXMATTOFAKETEXCOORDS m_pfnTexMatToFakeTexCoords; - PFN_CONVERTTEXMATWITHQTEXTURE m_pfnConvertTexMatWithQTexture; - PFN_FAKETEXCOORDSTOTEXMAT m_pfnFakeTexCoordsToTexMat; - PFN_PATCH_RESETTEXTURING m_pfnPatch_ResetTexturing; - PFN_PATCH_FITTEXTURING m_pfnPatch_FitTexturing; - PFN_PATCH_NATURALIZESELECTED m_pfnPatch_NaturalizeSelected; - PFN_PATCH_GETTEXTURENAME m_pfnPatch_GetTextureName; - PFN_QE_SINGLEBRUSH m_pfnQE_SingleBrush; - PFN_ISBRUSHPRIMITMODE m_pfnIsBrushPrimitMode; - PFN_COMPUTEAXISBASE m_pfnComputeAxisBase; - PFN_BPMATMUL m_pfnBPMatMul; - PFN_EMITBRUSHPRIMITTEXCOORDS m_pfnEmitBrushPrimitTextureCoordinates; - PFN_QEGLOBALSTEXTUREWIN m_pfnQeglobalsTexturewin; - PFN_SELECT_FITTEXTURE m_pfnSelect_FitTexture; - PFN_QEGLOBALSSAVEDINFO_SIINC m_pfnQERApp_QeglobalsSavedinfo_SIInc; - PFN_QEGLOBALSGETGRIDSIZE m_pfnQeglobalsGetGridSize; - PFN_FACELIST_FITTEXTURE m_pfnFaceList_FitTexture; - PFN_GETMAINWINDOW m_pfnGetMainWindow; - PFN_SETWINPOS_FROM_PREFS m_pfnSetWinPos_From_Prefs; - PFN_GETSELECTEDFACECOUNT_BRUSH m_pfnGetSelectedFaceCountfromBrushes; - PFN_GETSELFACESTEXDEF m_pfnGetSelFacesTexdef; - PFN_SETTEXDEF_FACELIST m_pfnSetTexdef_FaceList; + int m_nSize; + PFN_PATCHESSELECTED m_pfnOnlyPatchesSelected; + PFN_PATCHESSELECTED m_pfnAnyPatchesSelected; + PFN_GETSELECTEDPATCH m_pfnGetSelectedPatch; + PFN_GETTWOSELECTEDPATCH m_pfnGetTwoSelectedPatch; + PFN_TEXMATTOFAKETEXCOORDS m_pfnTexMatToFakeTexCoords; + PFN_CONVERTTEXMATWITHQTEXTURE m_pfnConvertTexMatWithQTexture; + PFN_FAKETEXCOORDSTOTEXMAT m_pfnFakeTexCoordsToTexMat; + PFN_PATCH_RESETTEXTURING m_pfnPatch_ResetTexturing; + PFN_PATCH_FITTEXTURING m_pfnPatch_FitTexturing; + PFN_PATCH_NATURALIZESELECTED m_pfnPatch_NaturalizeSelected; + PFN_PATCH_GETTEXTURENAME m_pfnPatch_GetTextureName; + PFN_QE_SINGLEBRUSH m_pfnQE_SingleBrush; + PFN_ISBRUSHPRIMITMODE m_pfnIsBrushPrimitMode; + PFN_COMPUTEAXISBASE m_pfnComputeAxisBase; + PFN_BPMATMUL m_pfnBPMatMul; + PFN_EMITBRUSHPRIMITTEXCOORDS m_pfnEmitBrushPrimitTextureCoordinates; + PFN_QEGLOBALSTEXTUREWIN m_pfnQeglobalsTexturewin; + PFN_SELECT_FITTEXTURE m_pfnSelect_FitTexture; + PFN_QEGLOBALSSAVEDINFO_SIINC m_pfnQERApp_QeglobalsSavedinfo_SIInc; + PFN_QEGLOBALSGETGRIDSIZE m_pfnQeglobalsGetGridSize; + PFN_FACELIST_FITTEXTURE m_pfnFaceList_FitTexture; + PFN_GETMAINWINDOW m_pfnGetMainWindow; + PFN_SETWINPOS_FROM_PREFS m_pfnSetWinPos_From_Prefs; + PFN_GETSELECTEDFACECOUNT_BRUSH m_pfnGetSelectedFaceCountfromBrushes; + PFN_GETSELFACESTEXDEF m_pfnGetSelFacesTexdef; + PFN_SETTEXDEF_FACELIST m_pfnSetTexdef_FaceList; }; #endif diff --git a/include/itoolbar.h b/include/itoolbar.h index 75b7bfdb..40c0254a 100644 --- a/include/itoolbar.h +++ b/include/itoolbar.h @@ -1,62 +1,62 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ #ifndef __IPLUGTOOLBAR_H_ #define __IPLUGTOOLBAR_H_ /* -NOTE: this API requires Gtk -it's a good practice to avoid putting #include here -in some cases, the compiler will get confused because of 'list' identifiers between Gtk and STL headers -*/ + NOTE: this API requires Gtk + it's a good practice to avoid putting #include here + in some cases, the compiler will get confused because of 'list' identifiers between Gtk and STL headers + */ #define TOOLBAR_MAJOR "toolbar" class IToolbarButton { public: - enum EType - { - eSpace, - eButton, - eToggleButton, - eRadioButton, - }; - - virtual ~IToolbarButton() { } - virtual const char* getImage() const = 0; - virtual const char* getText() const = 0; - virtual const char* getTooltip() const = 0; - virtual EType getType() const = 0; - virtual void activate() const = 0; +enum EType +{ + eSpace, + eButton, + eToggleButton, + eRadioButton, +}; + +virtual ~IToolbarButton() { } +virtual const char* getImage() const = 0; +virtual const char* getText() const = 0; +virtual const char* getTooltip() const = 0; +virtual EType getType() const = 0; +virtual void activate() const = 0; }; -typedef unsigned int (* PFN_TOOLBARBUTTONCOUNT)(); -typedef const IToolbarButton* (* PFN_GETTOOLBARBUTTON)(unsigned int index); +typedef unsigned int ( *PFN_TOOLBARBUTTONCOUNT )(); +typedef const IToolbarButton* ( *PFN_GETTOOLBARBUTTON )( unsigned int index ); struct _QERPlugToolbarTable { - int m_nSize; - PFN_TOOLBARBUTTONCOUNT m_pfnToolbarButtonCount; - PFN_GETTOOLBARBUTTON m_pfnGetToolbarButton; + int m_nSize; + PFN_TOOLBARBUTTONCOUNT m_pfnToolbarButtonCount; + PFN_GETTOOLBARBUTTON m_pfnGetToolbarButton; }; #endif diff --git a/include/iui.h b/include/iui.h index 19e93d88..53c48a8f 100644 --- a/include/iui.h +++ b/include/iui.h @@ -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-2007 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 + */ //----------------------------------------------------------------------------- // @@ -34,30 +34,30 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA class IWindowListener { public: - virtual ~IWindowListener() { } - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - // since Radiant is MFC we don't use a WNDPROC, we wrap the MFC handlers - // the handler is called first, if returns false Radiant continues processing - //++timo maybe add more later ? OnKeyUp and OnKeyDown for instance - //++timo TODO: add handlers everywhere - // Gef: Changed 2nd & 3rd params to gdouble's for sub-integer grid sizes - virtual bool OnLButtonDown(guint32 nFlags, gdouble x, gdouble y) = 0; - virtual bool OnMButtonDown(guint32 nFlags, gdouble x, gdouble y) = 0; - virtual bool OnRButtonDown(guint32 nFlags, gdouble x, gdouble y) = 0; - virtual bool OnLButtonUp(guint32 nFlags, gdouble x, gdouble y) = 0; - virtual bool OnMButtonUp(guint32 nFlags, gdouble x, gdouble y) = 0; - virtual bool OnRButtonUp(guint32 nFlags, gdouble x, gdouble y) = 0; - virtual bool OnMouseMove(guint32 nFlags, gdouble x, gdouble y) = 0; - virtual bool OnKeyPressed(char *s) = 0; - - // paint message, the caller makes the GL context current, calls Paint, then swaps GL buffers - // return value might be false if something failed and closure is requested .. then the buffer swap will be cancelled - virtual bool Paint() = 0; - // window is closing (nothing you can do, just telling) - virtual void Close() = 0; +virtual ~IWindowListener() { } +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +// since Radiant is MFC we don't use a WNDPROC, we wrap the MFC handlers +// the handler is called first, if returns false Radiant continues processing +//++timo maybe add more later ? OnKeyUp and OnKeyDown for instance +//++timo TODO: add handlers everywhere +// Gef: Changed 2nd & 3rd params to gdouble's for sub-integer grid sizes +virtual bool OnLButtonDown( guint32 nFlags, gdouble x, gdouble y ) = 0; +virtual bool OnMButtonDown( guint32 nFlags, gdouble x, gdouble y ) = 0; +virtual bool OnRButtonDown( guint32 nFlags, gdouble x, gdouble y ) = 0; +virtual bool OnLButtonUp( guint32 nFlags, gdouble x, gdouble y ) = 0; +virtual bool OnMButtonUp( guint32 nFlags, gdouble x, gdouble y ) = 0; +virtual bool OnRButtonUp( guint32 nFlags, gdouble x, gdouble y ) = 0; +virtual bool OnMouseMove( guint32 nFlags, gdouble x, gdouble y ) = 0; +virtual bool OnKeyPressed( char *s ) = 0; + +// paint message, the caller makes the GL context current, calls Paint, then swaps GL buffers +// return value might be false if something failed and closure is requested .. then the buffer swap will be cancelled +virtual bool Paint() = 0; +// window is closing (nothing you can do, just telling) +virtual void Close() = 0; }; // IWindowListener with additional properties @@ -66,27 +66,27 @@ public: class IWindow { public: - virtual ~IWindow() {} - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - // misc data ------------------------------------------------ - // get pixel size - virtual int getHeight() = 0; - virtual int getWidth() = 0; - // initialisation stuff ------------------------------------- - // set pixel size and other parameters before showing it - virtual void setSizeParm(int width, int height) = 0; - // set the IWindowListener (implemented by the plugin using this window) - virtual void setListener(IWindowListener *) = 0; - // set the window name - virtual void setName(char *) = 0; - // will actually create the GL and the window based on the parameters - virtual bool Show() = 0; - // commands ------------------------------------------------- - // call this to ask for a Redraw - virtual void Redraw() = 0; +virtual ~IWindow() {} +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +// misc data ------------------------------------------------ +// get pixel size +virtual int getHeight() = 0; +virtual int getWidth() = 0; +// initialisation stuff ------------------------------------- +// set pixel size and other parameters before showing it +virtual void setSizeParm( int width, int height ) = 0; +// set the IWindowListener (implemented by the plugin using this window) +virtual void setListener( IWindowListener * ) = 0; +// set the window name +virtual void setName( char * ) = 0; +// will actually create the GL and the window based on the parameters +virtual bool Show() = 0; +// commands ------------------------------------------------- +// call this to ask for a Redraw +virtual void Redraw() = 0; }; // various Radiant messages -------- @@ -109,54 +109,54 @@ public: class IListener { public: - virtual ~IListener() {} - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - // message is one of the RADIANT_* consts - virtual void DispatchRadiantMsg( int Msg ) = 0; +virtual ~IListener() {} +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +// message is one of the RADIANT_* consts +virtual void DispatchRadiantMsg( int Msg ) = 0; }; // this one is provided by Radiant, it's a wrapper for some usefull functions class IXYWndWrapper { public: - virtual ~IXYWndWrapper() {} - virtual void SnapToGrid( int x1, int y1, vec3_t pt ) = 0; - virtual VIEWTYPE GetViewType( void ) = 0; +virtual ~IXYWndWrapper() {} +virtual void SnapToGrid( int x1, int y1, vec3_t pt ) = 0; +virtual VIEWTYPE GetViewType( void ) = 0; }; #define UI_MAJOR "ui" // create an IWindow with GL context -typedef IWindow* (WINAPI* PFN_QERAPP_CREATEGLWINDOW) (); +typedef IWindow* ( WINAPI * PFN_QERAPP_CREATEGLWINDOW )(); // will hook the given IWindowListener to the XY window and increment the ref count //++timo TODO: add hooking in the CAM view and Z view -typedef void (WINAPI* PFN_QERAPP_HOOKWINDOW) (IWindowListener *); +typedef void ( WINAPI * PFN_QERAPP_HOOKWINDOW )( IWindowListener * ); // will unhook the given IWindowListener -typedef void (WINAPI* PFN_QERAPP_UNHOOKWINDOW) (IWindowListener *); +typedef void ( WINAPI * PFN_QERAPP_UNHOOKWINDOW )( IWindowListener * ); // to retrieve the IXYWndWrapper -typedef IXYWndWrapper* (WINAPI* PFN_QERAPP_GETXYWNDWRAPPER) (); +typedef IXYWndWrapper* ( WINAPI * PFN_QERAPP_GETXYWNDWRAPPER )(); // will hook a given listener into Radiant listening for the given message and increment ref count // call several times to listen for several messages -typedef void (WINAPI* PFN_QERAPP_HOOKLISTENER) (IListener *, int Msg); +typedef void ( WINAPI * PFN_QERAPP_HOOKLISTENER )( IListener *, int Msg ); // will unhook the listener and return the number of messages the given listener was removed from -typedef int (WINAPI* PFN_QERAPP_UNHOOKLISTENER)(IListener *); +typedef int ( WINAPI * PFN_QERAPP_UNHOOKLISTENER )( IListener * ); // TODO: create GL widget, destroy it struct _QERUITable { - int m_nSize; - PFN_QERAPP_CREATEGLWINDOW m_pfnCreateGLWindow; - PFN_QERAPP_HOOKWINDOW m_pfnHookWindow; - PFN_QERAPP_UNHOOKWINDOW m_pfnUnHookWindow; - PFN_QERAPP_GETXYWNDWRAPPER m_pfnGetXYWndWrapper; - PFN_QERAPP_HOOKLISTENER m_pfnHookListener; - PFN_QERAPP_UNHOOKLISTENER m_pfnUnHookListener; + int m_nSize; + PFN_QERAPP_CREATEGLWINDOW m_pfnCreateGLWindow; + PFN_QERAPP_HOOKWINDOW m_pfnHookWindow; + PFN_QERAPP_UNHOOKWINDOW m_pfnUnHookWindow; + PFN_QERAPP_GETXYWNDWRAPPER m_pfnGetXYWndWrapper; + PFN_QERAPP_HOOKLISTENER m_pfnHookListener; + PFN_QERAPP_UNHOOKLISTENER m_pfnUnHookListener; }; #endif diff --git a/include/iui_gtk.h b/include/iui_gtk.h index 93973672..8817d5ba 100644 --- a/include/iui_gtk.h +++ b/include/iui_gtk.h @@ -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-2007 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 + */ //----------------------------------------------------------------------------- // @@ -32,27 +32,27 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define UIGTK_MAJOR "uigtk" // All OpenGL stuff is handled by GLWidget to ensure portability -typedef GtkWidget* (WINAPI* PFN_QERAPP_GETQEGLOBALSGLWIDGET) (); -typedef GtkWidget* (WINAPI* PFN_GLWIDGET_NEW) (gboolean zbufffer, GtkWidget* share); -typedef void (WINAPI* PFN_GLWIDGET_SWAPBUFFERS) (GtkWidget* widget); -typedef gboolean (WINAPI* PFN_GLWIDGET_MAKECURRENT) (GtkWidget* widget); -typedef void (WINAPI* PFN_GLWIDGET_DESTROYCONTEXT) (GtkWidget* widget); -typedef void (WINAPI* PFN_GLWIDGET_CREATECONTEXT) (GtkWidget* widget); +typedef GtkWidget* ( WINAPI * PFN_QERAPP_GETQEGLOBALSGLWIDGET )(); +typedef GtkWidget* ( WINAPI * PFN_GLWIDGET_NEW )( gboolean zbufffer, GtkWidget* share ); +typedef void ( WINAPI * PFN_GLWIDGET_SWAPBUFFERS )( GtkWidget* widget ); +typedef gboolean ( WINAPI * PFN_GLWIDGET_MAKECURRENT )( GtkWidget* widget ); +typedef void ( WINAPI * PFN_GLWIDGET_DESTROYCONTEXT )( GtkWidget* widget ); +typedef void ( WINAPI * PFN_GLWIDGET_CREATECONTEXT )( GtkWidget* widget ); #if 0 -typedef gpointer (WINAPI* PFN_GLWIDGET_GETCONTEXT) (GtkWidget* widget); +typedef gpointer ( WINAPI * PFN_GLWIDGET_GETCONTEXT )( GtkWidget* widget ); #endif struct _QERUIGtkTable { - int m_nSize; - PFN_QERAPP_GETQEGLOBALSGLWIDGET m_pfn_GetQeglobalsGLWidget; - PFN_GLWIDGET_NEW m_pfn_glwidget_new; - PFN_GLWIDGET_SWAPBUFFERS m_pfn_glwidget_swap_buffers; - PFN_GLWIDGET_MAKECURRENT m_pfn_glwidget_make_current; - PFN_GLWIDGET_DESTROYCONTEXT m_pfn_glwidget_destroy_context; - PFN_GLWIDGET_CREATECONTEXT m_pfn_glwidget_create_context; + int m_nSize; + PFN_QERAPP_GETQEGLOBALSGLWIDGET m_pfn_GetQeglobalsGLWidget; + PFN_GLWIDGET_NEW m_pfn_glwidget_new; + PFN_GLWIDGET_SWAPBUFFERS m_pfn_glwidget_swap_buffers; + PFN_GLWIDGET_MAKECURRENT m_pfn_glwidget_make_current; + PFN_GLWIDGET_DESTROYCONTEXT m_pfn_glwidget_destroy_context; + PFN_GLWIDGET_CREATECONTEXT m_pfn_glwidget_create_context; #if 0 - PFN_GLWIDGET_GETCONTEXT m_pfn_glwidget_get_context; + PFN_GLWIDGET_GETCONTEXT m_pfn_glwidget_get_context; #endif }; diff --git a/include/iundo.h b/include/iundo.h index 8772d2c8..04a24b9a 100644 --- a/include/iundo.h +++ b/include/iundo.h @@ -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-2007 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 + */ #ifndef _IUNDO_H_ #define _IUNDO_H_ @@ -25,48 +25,48 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define UNDO_MAJOR "undo" //start operation -typedef void (*PFN_UNDOSTART) (const char *operation); +typedef void ( *PFN_UNDOSTART )( const char *operation ); //end operation -typedef void (*PFN_UNDOEND) (void); +typedef void ( *PFN_UNDOEND )( void ); //add brush to the undo -typedef void (*PFN_UNDOADDBRUSH) (brush_t *pBrush); +typedef void ( *PFN_UNDOADDBRUSH )( brush_t *pBrush ); //end a brush after the operation is performed -typedef void (*PFN_UNDOENDBRUSH) (brush_t *pBrush); +typedef void ( *PFN_UNDOENDBRUSH )( brush_t *pBrush ); //add a list with brushes to the undo -typedef void (*PFN_UNDOADDBRUSHLIST) (brush_t *brushlist); +typedef void ( *PFN_UNDOADDBRUSHLIST )( brush_t *brushlist ); //end a list with brushes after the operation is performed -typedef void (*PFN_UNDOENDBRUSHLIST) (brush_t *brushlist); +typedef void ( *PFN_UNDOENDBRUSHLIST )( brush_t *brushlist ); //add entity to undo -typedef void (*PFN_UNDOADDENTITY) (entity_t *entity); +typedef void ( *PFN_UNDOADDENTITY )( entity_t *entity ); //end an entity after the operation is performed -typedef void (*PFN_UNDOENDENTITY) (entity_t *entity); +typedef void ( *PFN_UNDOENDENTITY )( entity_t *entity ); //undo last operation (bSilent == true -> will not print the "undone blah blah message") -typedef void (*PFN_UNDO) (unsigned char bSilent); +typedef void ( *PFN_UNDO )( unsigned char bSilent ); //redo last undone operation -typedef void (*PFN_REDO) (void); +typedef void ( *PFN_REDO )( void ); //get the undo Id of the next undo (0 if none available) -typedef int (*PFN_GETUNDOID) (void); +typedef int ( *PFN_GETUNDOID )( void ); //returns true if there is something to be undone available -typedef int (*PFN_UNDOAVAILABLE) (void); +typedef int ( *PFN_UNDOAVAILABLE )( void ); //returns true if there is something to redo available -typedef int (*PFN_REDOAVAILABLE) (void); +typedef int ( *PFN_REDOAVAILABLE )( void ); struct _QERUndoTable { - int m_nSize; - PFN_UNDOSTART m_pfnUndo_Start; - PFN_UNDOEND m_pfnUndo_End; - PFN_UNDOADDBRUSH m_pfnUndo_AddBrush; - PFN_UNDOENDBRUSH m_pfnUndo_EndBrush; - PFN_UNDOADDBRUSHLIST m_pfnUndo_AddBrushList; - PFN_UNDOENDBRUSHLIST m_pfnUndo_EndBrushList; - PFN_UNDOADDENTITY m_pfnUndo_AddEntity; - PFN_UNDOENDENTITY m_pfnUndo_EndEntity; - PFN_UNDO m_pfnUndo_Undo; - PFN_REDO m_pfnUndo_Redo; - PFN_GETUNDOID m_pfnUndo_GetUndoId; - PFN_UNDOAVAILABLE m_pfnUndo_UndoAvailable; - PFN_REDOAVAILABLE m_pfnUndo_RedoAvailable; + int m_nSize; + PFN_UNDOSTART m_pfnUndo_Start; + PFN_UNDOEND m_pfnUndo_End; + PFN_UNDOADDBRUSH m_pfnUndo_AddBrush; + PFN_UNDOENDBRUSH m_pfnUndo_EndBrush; + PFN_UNDOADDBRUSHLIST m_pfnUndo_AddBrushList; + PFN_UNDOENDBRUSHLIST m_pfnUndo_EndBrushList; + PFN_UNDOADDENTITY m_pfnUndo_AddEntity; + PFN_UNDOENDENTITY m_pfnUndo_EndEntity; + PFN_UNDO m_pfnUndo_Undo; + PFN_REDO m_pfnUndo_Redo; + PFN_GETUNDOID m_pfnUndo_GetUndoId; + PFN_UNDOAVAILABLE m_pfnUndo_UndoAvailable; + PFN_REDOAVAILABLE m_pfnUndo_RedoAvailable; }; #ifdef USE_UNDOTABLE_DEFINE @@ -84,4 +84,3 @@ struct _QERUndoTable #endif #endif // _IUNDO_H_ - diff --git a/include/misc_def.h b/include/misc_def.h index 526dd6c9..90576add 100644 --- a/include/misc_def.h +++ b/include/misc_def.h @@ -10,20 +10,20 @@ typedef void* LPVOID; typedef char* LPCSTR; typedef char* LPSTR; -#define IsEqualGUID(a,b) (memcmp(&a,&b,sizeof(a)) == 0) +#define IsEqualGUID( a,b ) ( memcmp( &a,&b,sizeof( a ) ) == 0 ) #ifndef GUID_DEFINED #define GUID_DEFINED typedef struct _GUID { - unsigned long Data1; - unsigned short Data2; - unsigned short Data3; - unsigned char Data4[8]; + unsigned long Data1; + unsigned short Data2; + unsigned short Data3; + unsigned char Data4[8]; } GUID; #endif - -#if defined(__cplusplus) + +#if defined( __cplusplus ) #ifndef _REFGUID_DEFINED #define _REFGUID_DEFINED #define REFGUID const GUID & @@ -61,6 +61,6 @@ typedef struct _GUID #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 -#define IDNO 7 +#define IDNO 7 #endif diff --git a/include/qerplugin.h b/include/qerplugin.h index 48f877c8..ee24c29c 100644 --- a/include/qerplugin.h +++ b/include/qerplugin.h @@ -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-2007 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 + */ // QERadiant PlugIns // @@ -27,9 +27,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define __QERPLUGIN_H__ /*! -\todo this header is intended to be turned into a header for the core editor functionality -some portability related code should be moved to synapse (such as the GUID stuff) -*/ + \todo this header is intended to be turned into a header for the core editor functionality + some portability related code should be moved to synapse (such as the GUID stuff) + */ #include #include @@ -81,61 +81,57 @@ some portability related code should be moved to synapse (such as the GUID stuff struct _QERTextureInfo { - char m_TextureExtension[QER_MAX_NAMELEN]; // the extension these textures have - qboolean m_bHiColor; // if textures are NOT high color, the default - // palette (as described inthe qe4 file will be used for gamma correction) - // if they are high color, gamma and shading are computed on the fly - // based on the rgba data - //--bool m_bIsShader; // will probably do q3 shaders this way when i merge - qboolean m_bWadStyle; // if this is true, the plugin will be presented with the texture path - // defined in the .qe4 file and is expected to preload all the textures - qboolean m_bHalfLife; // causes brushes to be saved/parsed without the surface contents/flags/value + char m_TextureExtension[QER_MAX_NAMELEN]; // the extension these textures have + qboolean m_bHiColor; // if textures are NOT high color, the default + // palette (as described inthe qe4 file will be used for gamma correction) + // if they are high color, gamma and shading are computed on the fly + // based on the rgba data + //--bool m_bIsShader; // will probably do q3 shaders this way when i merge + qboolean m_bWadStyle; // if this is true, the plugin will be presented with the texture path + // defined in the .qe4 file and is expected to preload all the textures + qboolean m_bHalfLife; // causes brushes to be saved/parsed without the surface contents/flags/value }; struct _QERTextureLoad // returned by a plugin { - _QERTextureLoad() - { - memset(reinterpret_cast(this), 0, sizeof(_QERTextureLoad)); - }; - - ~_QERTextureLoad() - { - delete []m_pRGBA; - delete []m_pName; - }; - - void makeSpace(int nSize) - { - m_pRGBA = new unsigned char[nSize+1]; - }; - - void setName(const char* p) - { - m_pName = new char[strlen(p)+1]; - strcpy(m_pName, p); - }; - - - unsigned char *m_pRGBA; // rgba data (alpha channel is supported and drawn appropriately) - int m_nWidth; // width - int m_nHeight; // height - int m_nContents; // default contents - int m_nFlags; // "" flags - int m_nValue; // "" value - char *m_pName; // name to be referenced in map, build tools, etc. + _QERTextureLoad(){ + memset( reinterpret_cast( this ), 0, sizeof( _QERTextureLoad ) ); + }; + + ~_QERTextureLoad(){ + delete []m_pRGBA; + delete []m_pName; + }; + + void makeSpace( int nSize ){ + m_pRGBA = new unsigned char[nSize + 1]; + }; + + void setName( const char* p ){ + m_pName = new char[strlen( p ) + 1]; + strcpy( m_pName, p ); + }; + + + unsigned char *m_pRGBA; // rgba data (alpha channel is supported and drawn appropriately) + int m_nWidth; // width + int m_nHeight; // height + int m_nContents; // default contents + int m_nFlags; // "" flags + int m_nValue; // "" value + char *m_pName; // name to be referenced in map, build tools, etc. }; struct _QERModelInfo { - char m_ModelExtension[QER_MAX_NAMELEN]; - bool m_bSkinned; - bool m_bMultipart; + char m_ModelExtension[QER_MAX_NAMELEN]; + bool m_bSkinned; + bool m_bMultipart; }; struct _QERModelLoad { - // vertex and skin data + // vertex and skin data }; @@ -145,29 +141,29 @@ struct _QERModelLoad // NOTE TTimo: hack to make old plugin tech and new plugin tech live together #ifndef _IPLUGIN_H_ // toolkit-independant interface, cast hwndMain to GtkWidget* -typedef const char* (WINAPI *PFN_QERPLUG_INIT)(void* hApp, void* hwndMain); -typedef const char* (WINAPI *PFN_QERPLUG_GETNAME)(); -typedef const char* (WINAPI *PFN_QERPLUG_GETCOMMANDLIST)(); -typedef void (WINAPI *PFN_QERPLUG_DISPATCH)(const char* p, vec3_t vMin, vec3_t vMax, bool bSingleBrush); +typedef const char* ( WINAPI * PFN_QERPLUG_INIT )( void* hApp, void* hwndMain ); +typedef const char* ( WINAPI * PFN_QERPLUG_GETNAME )(); +typedef const char* ( WINAPI * PFN_QERPLUG_GETCOMMANDLIST )(); +typedef void ( WINAPI * PFN_QERPLUG_DISPATCH )( const char* p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ); #endif #endif -typedef char* (WINAPI *PFN_QERPLUG_GETFUNCTABLE)(); +typedef char* ( WINAPI * PFN_QERPLUG_GETFUNCTABLE )(); // v1.5 // // Texture loading // returns a ptr to _QERTextureInfo -typedef void* (WINAPI *PFN_QERPLUG_GETTEXTUREINFO)(); +typedef void* ( WINAPI * PFN_QERPLUG_GETTEXTUREINFO )(); // // loads a texture by calling the texture load func in the editor (defined below) // transparency (for water, fog, lava, etc.. ) can be emulated in the editor // by passing in appropriate alpha data or by setting the appropriate surface flags // expected by q2 (which the editor will use.. ) -typedef void (WINAPI *PFN_QERPLUG_LOADTEXTURE)(const char* pFilename); +typedef void ( WINAPI * PFN_QERPLUG_LOADTEXTURE )( const char* pFilename ); // v1.6 -typedef void* (WINAPI *PFN_QERPLUG_GETSURFACEFLAGS)(); +typedef void* ( WINAPI * PFN_QERPLUG_GETSURFACEFLAGS )(); // v1.7 // if exists in plugin, gets called between INIT and GETCOMMANDLIST @@ -175,20 +171,20 @@ typedef void* (WINAPI *PFN_QERPLUG_GETSURFACEFLAGS)(); //++timo TODO: this has got to move into the table, and be requested by QERPlug_RequestInterface //++timo FIXME: the LPVOID parameter must be casted to an IEpair interface #define QERPLUG_REGISTERPLUGINENTITIES "QERPlug_RegisterPluginEntities" -typedef void (WINAPI * PFN_QERPLUG_REGISTERPLUGINENTITIES)( void* ); +typedef void ( WINAPI * PFN_QERPLUG_REGISTERPLUGINENTITIES )( void* ); // if exists in plugin, gets called between INIT and GETCOMMANDLIST // the plugin can Init all it needs for surface properties #define QERPLUG_INITSURFACEPROPERTIES "QERPlug_InitSurfaceProperties" -typedef void (WINAPI * PFN_QERPLUG_INITSURFACEPROPERTIES)(); +typedef void ( WINAPI * PFN_QERPLUG_INITSURFACEPROPERTIES )(); // if Radiant needs to use a particular set of commands, it can request the plugin to fill a func table // this is similar to PFN_QERAPP_REQUESTINTERFACE #define QERPLUG_REQUESTINTERFACE "QERPlug_RequestInterface" -typedef int (WINAPI * PFN_QERPLUG_REQUESTINTERFACE) (REFGUID refGUID, void* pInterface, const char *version_name); +typedef int ( WINAPI * PFN_QERPLUG_REQUESTINTERFACE )( REFGUID refGUID, void* pInterface, const char *version_name ); // Load an image file -typedef void (* PFN_QERAPP_LOADIMAGE) (const char *name, unsigned char **pic, int *width, int *height); +typedef void ( *PFN_QERAPP_LOADIMAGE )( const char *name, unsigned char **pic, int *width, int *height ); // TTimo FIXME: the logic for this is in synapse now @@ -204,14 +200,14 @@ typedef void (* PFN_QERAPP_LOADIMAGE) (const char *name, unsigned char **pic, in // NOTE: we might have a problem with the order in which the interfaces are filled in // there's some kind of dependency graph, the shader module expects to find the VFS ready etc. typedef struct moduleentry_s { - const GUID *interface_GUID; - const char* interface_name; - const char* version_name; + const GUID *interface_GUID; + const char* interface_name; + const char* version_name; } moduleentry_t; #define QERPLUG_LISTINTERFACES "QERPlug_ListInterfaces" #define MAX_QERPLUG_INTERFACES 10 -typedef int (WINAPI* PFN_QERPLUG_LISTINTERFACES) (moduleentry_t table[MAX_QERPLUG_INTERFACES]); +typedef int ( WINAPI * PFN_QERPLUG_LISTINTERFACES )( moduleentry_t table[MAX_QERPLUG_INTERFACES] ); // ======================================== // GTK+ helper functions @@ -220,8 +216,8 @@ typedef int (WINAPI* PFN_QERPLUG_LISTINTERFACES) (moduleentry_t table[MAX_QERPLU // simple Message Box, see above for the 'type' flags // toolkit-independent, cast parent ot a GtkWidget* -typedef gint (WINAPI* PFN_QERAPP_MESSAGEBOX) (void *parent, const char* text, - const char* caption, guint32 type, const char *URL); +typedef gint ( WINAPI * PFN_QERAPP_MESSAGEBOX )( void *parent, const char* text, + const char* caption, guint32 type, const char *URL ); // file and directory selection functions return NULL if the user hits cancel // or a gchar* string that must be g_free'd by the user @@ -229,37 +225,37 @@ typedef gint (WINAPI* PFN_QERAPP_MESSAGEBOX) (void *parent, const char* text, // - 'path' is used to set the initial directory (can be NULL) // - 'pattern': the first pattern is for the win32 mode, then comes the Gtk pattern list, see Radiant source for samples // TTimo 04/01/2001 toolkit-independant, cast parent to a GtkWidget* -typedef const gchar* (* PFN_QERAPP_FILEDIALOG) (void *parent, gboolean open, const char* title, - const char* path, const char* pattern, const char *baseSubDir); -typedef gchar* (WINAPI* PFN_QERAPP_DIRDIALOG) (void *parent, const char* title, - const char* path); +typedef const gchar* ( *PFN_QERAPP_FILEDIALOG )( void *parent, gboolean open, const char* title, + const char* path, const char* pattern, const char *baseSubDir ); +typedef gchar* ( WINAPI * PFN_QERAPP_DIRDIALOG )( void *parent, const char* title, + const char* path ); // return true if the user closed the dialog with 'Ok' // 'color' is used to set the initial value and store the selected value -typedef bool (WINAPI* PFN_QERAPP_COLORDIALOG) (void *parent, float *color, - const char* title); +typedef bool ( WINAPI * PFN_QERAPP_COLORDIALOG )( void *parent, float *color, + const char* title ); // load a .bmp file and store the results in 'gdkpixmap' and 'mask' // returns TRUE on success but even if it fails, it creates an empty pixmap // NOTE: 'filename' is relative to /plugins/bitmaps/ // TTimo 04/01/2001 toolkit-independant, cast gkpixmap to GdkPixmap and mask to GdkBitmap -typedef bool (WINAPI* PFN_QERAPP_LOADBITMAP) (const char* filename, void **gdkpixmap, void **mask); +typedef bool ( WINAPI * PFN_QERAPP_LOADBITMAP )( const char* filename, void **gdkpixmap, void **mask ); // ======================================== // read/write preferences file // use this function to get the directory where the preferences file are stored -typedef const char* (WINAPI* PFN_QERAPP_PROFILE_GETDIR) (); +typedef const char* ( WINAPI * PFN_QERAPP_PROFILE_GETDIR )(); // 'filename' is the absolute path -typedef bool (WINAPI* PFN_QERAPP_PROFILE_SAVEINT) (const char *filename, const char *section, - const char *key, int value); -typedef bool (WINAPI* PFN_QERAPP_PROFILE_SAVESTR) (const char *filename, const char *section, - const char *key, const char *value); -typedef int (WINAPI* PFN_QERAPP_PROFILE_LOADINT) (const char *filename, const char *section, - const char *key, int default_value); -typedef char* (WINAPI* PFN_QERAPP_PROFILE_LOADSTR) (const char *filename, const char *section, - const char *key, const char *default_value); +typedef bool ( WINAPI * PFN_QERAPP_PROFILE_SAVEINT )( const char *filename, const char *section, + const char *key, int value ); +typedef bool ( WINAPI * PFN_QERAPP_PROFILE_SAVESTR )( const char *filename, const char *section, + const char *key, const char *value ); +typedef int ( WINAPI * PFN_QERAPP_PROFILE_LOADINT )( const char *filename, const char *section, + const char *key, int default_value ); +typedef char* ( WINAPI * PFN_QERAPP_PROFILE_LOADSTR )( const char *filename, const char *section, + const char *key, const char *default_value ); //========================================= // editor functions @@ -295,7 +291,7 @@ typedef char* (WINAPI* PFN_QERAPP_PROFILE_LOADSTR) (const char *filename, const #define QERAPP_SETFACEDATA "QERApp_SetFaceData" #define QERAPP_DELETEFACE "QERApp_DeleteFace" #define QERAPP_TEXTUREBRUSH "QERApp_TextureBrush" -#define QERAPP_BUILDBRUSH "QERApp_BuildBrush" // PGM +#define QERAPP_BUILDBRUSH "QERApp_BuildBrush" // PGM #define QERAPP_SELECTEDBRUSHCOUNT "QERApp_SelectedBrushCount" #define QERAPP_ALLOCATESELECTEDBRUSHHANDLES "QERApp_AllocateSelectedBrushHandles" #define QERAPP_RELEASESELECTEDBRUSHHANDLES "QERApp_ReleaseSelectedBrushHandles" @@ -313,9 +309,9 @@ typedef char* (WINAPI* PFN_QERAPP_PROFILE_LOADSTR) (const char *filename, const // selection #define QERAPP_DELETESELECTION "QERApp_DeleteSelection" -#define QERAPP_SELECTBRUSH "QERApp_SelectBrush" // PGM -#define QERAPP_DESELECTBRUSH "QERApp_DeselectBrush" // PGM -#define QERAPP_DESELECTALLBRUSHES "QERApp_DeselectAllBrushes" // PGM +#define QERAPP_SELECTBRUSH "QERApp_SelectBrush" // PGM +#define QERAPP_DESELECTBRUSH "QERApp_DeselectBrush" // PGM +#define QERAPP_DESELECTALLBRUSHES "QERApp_DeselectAllBrushes" // PGM // data gathering #define QERAPP_GETPOINTS "QERApp_GetPoints" @@ -393,124 +389,124 @@ typedef char* (WINAPI* PFN_QERAPP_PROFILE_LOADSTR) (const char *filename, const struct _QERPointData { - int m_nCount; - vec3_t *m_pVectors; + int m_nCount; + vec3_t *m_pVectors; }; struct _QERFaceData { - char m_TextureName[QER_MAX_NAMELEN]; - int m_nContents; - int m_nFlags; - int m_nValue; - float m_fShift[2]; - float m_fRotate; - float m_fScale[2]; - vec3_t m_v1, m_v2, m_v3; - // brush primitive additions - qboolean m_bBPrimit; - brushprimit_texdef_t brushprimit_texdef; + char m_TextureName[QER_MAX_NAMELEN]; + int m_nContents; + int m_nFlags; + int m_nValue; + float m_fShift[2]; + float m_fRotate; + float m_fScale[2]; + vec3_t m_v1, m_v2, m_v3; + // brush primitive additions + qboolean m_bBPrimit; + brushprimit_texdef_t brushprimit_texdef; }; -typedef void (WINAPI * PFN_QERAPP_CREATEBRUSH)(vec3_t vMin, vec3_t vMax); - -typedef void* (WINAPI * PFN_QERAPP_CREATEBRUSHHANDLE)(); -typedef void (WINAPI * PFN_QERAPP_DELETEBRUSHHANDLE)(void* pv); -typedef void (WINAPI * PFN_QERAPP_COMMITBRUSHHANDLETOMAP)(void* pv); -typedef void (WINAPI * PFN_QERAPP_ADDFACE)(void* pv, vec3_t v1, vec3_t v2, vec3_t v3); - -typedef void (WINAPI * PFN_QERAPP_ADDFACEDATA)(void* pv, _QERFaceData *pData); -typedef int (WINAPI * PFN_QERAPP_GETFACECOUNT)(void* pv); -typedef _QERFaceData* (WINAPI * PFN_QERAPP_GETFACEDATA)(void* pv, int nFaceIndex); -typedef void (WINAPI * PFN_QERAPP_SETFACEDATA)(void* pv, int nFaceIndex, _QERFaceData *pData); -typedef void (WINAPI * PFN_QERAPP_DELETEFACE)(void* pv, int nFaceIndex); -typedef void (WINAPI * PFN_QERAPP_TEXTUREBRUSH)(void* pv, char* pName); -typedef void (WINAPI * PFN_QERAPP_BUILDBRUSH)(void* pv); // PGM -typedef void (WINAPI * PFN_QERAPP_SELECTBRUSH)(void* pv); // PGM -typedef void (WINAPI * PFN_QERAPP_DESELECTBRUSH)(void* pv); // PGM -typedef void (WINAPI * PFN_QERAPP_DESELECTALLBRUSHES)(); // PGM - -typedef void (WINAPI * PFN_QERAPP_DELETESELECTION)(); -typedef void (WINAPI * PFN_QERAPP_GETPOINTS)(int nMax, _QERPointData *pData, char* pMsg); - -typedef int (WINAPI * PFN_QERAPP_SELECTEDBRUSHCOUNT)(); -typedef int (WINAPI * PFN_QERAPP_ALLOCATESELECTEDBRUSHHANDLES)(); -typedef void (WINAPI * PFN_QERAPP_RELEASESELECTEDBRUSHHANDLES)(); -typedef void* (WINAPI * PFN_QERAPP_GETSELECTEDBRUSHHANDLE)(int nIndex); - -typedef int (WINAPI * PFN_QERAPP_ACTIVEBRUSHCOUNT)(); -typedef int (WINAPI * PFN_QERAPP_ALLOCATEACTIVEBRUSHHANDLES)(); -typedef void (WINAPI * PFN_QERAPP_RELEASEACTIVEBRUSHHANDLES)(); -typedef void* (WINAPI * PFN_QERAPP_GETACTIVEBRUSHHANDLE)(int nIndex); - -typedef int (WINAPI * PFN_QERAPP_TEXTURECOUNT)(); -typedef char* (WINAPI * PFN_QERAPP_GETTEXTURE)(int nIndex); -typedef char* (WINAPI * PFN_QERAPP_GETCURRENTTEXTURE)(); -typedef void (WINAPI * PFN_QERAPP_SETCURRENTTEXTURE)(char* pName); - -typedef void (WINAPI * PFN_QERAPP_REGISTERMAPLOAD)(void* vp); -typedef void (WINAPI * PFN_QERAPP_REGISTERMAPSAVE)(void* vp); - -typedef int (WINAPI * PFN_QERAPP_GETECLASSCOUNT)(); -typedef char* (WINAPI * PFN_QERAPP_GETECLASS)(int nIndex); - -typedef void (WINAPI * PFN_QERAPP_RESETPLUGINS)(); +typedef void ( WINAPI * PFN_QERAPP_CREATEBRUSH )( vec3_t vMin, vec3_t vMax ); + +typedef void* ( WINAPI * PFN_QERAPP_CREATEBRUSHHANDLE )(); +typedef void ( WINAPI * PFN_QERAPP_DELETEBRUSHHANDLE )( void* pv ); +typedef void ( WINAPI * PFN_QERAPP_COMMITBRUSHHANDLETOMAP )( void* pv ); +typedef void ( WINAPI * PFN_QERAPP_ADDFACE )( void* pv, vec3_t v1, vec3_t v2, vec3_t v3 ); + +typedef void ( WINAPI * PFN_QERAPP_ADDFACEDATA )( void* pv, _QERFaceData *pData ); +typedef int ( WINAPI * PFN_QERAPP_GETFACECOUNT )( void* pv ); +typedef _QERFaceData* ( WINAPI * PFN_QERAPP_GETFACEDATA )( void* pv, int nFaceIndex ); +typedef void ( WINAPI * PFN_QERAPP_SETFACEDATA )( void* pv, int nFaceIndex, _QERFaceData *pData ); +typedef void ( WINAPI * PFN_QERAPP_DELETEFACE )( void* pv, int nFaceIndex ); +typedef void ( WINAPI * PFN_QERAPP_TEXTUREBRUSH )( void* pv, char* pName ); +typedef void ( WINAPI * PFN_QERAPP_BUILDBRUSH )( void* pv ); // PGM +typedef void ( WINAPI * PFN_QERAPP_SELECTBRUSH )( void* pv ); // PGM +typedef void ( WINAPI * PFN_QERAPP_DESELECTBRUSH )( void* pv ); // PGM +typedef void ( WINAPI * PFN_QERAPP_DESELECTALLBRUSHES )(); // PGM + +typedef void ( WINAPI * PFN_QERAPP_DELETESELECTION )(); +typedef void ( WINAPI * PFN_QERAPP_GETPOINTS )( int nMax, _QERPointData *pData, char* pMsg ); + +typedef int ( WINAPI * PFN_QERAPP_SELECTEDBRUSHCOUNT )(); +typedef int ( WINAPI * PFN_QERAPP_ALLOCATESELECTEDBRUSHHANDLES )(); +typedef void ( WINAPI * PFN_QERAPP_RELEASESELECTEDBRUSHHANDLES )(); +typedef void* ( WINAPI * PFN_QERAPP_GETSELECTEDBRUSHHANDLE )( int nIndex ); + +typedef int ( WINAPI * PFN_QERAPP_ACTIVEBRUSHCOUNT )(); +typedef int ( WINAPI * PFN_QERAPP_ALLOCATEACTIVEBRUSHHANDLES )(); +typedef void ( WINAPI * PFN_QERAPP_RELEASEACTIVEBRUSHHANDLES )(); +typedef void* ( WINAPI * PFN_QERAPP_GETACTIVEBRUSHHANDLE )( int nIndex ); + +typedef int ( WINAPI * PFN_QERAPP_TEXTURECOUNT )(); +typedef char* ( WINAPI * PFN_QERAPP_GETTEXTURE )( int nIndex ); +typedef char* ( WINAPI * PFN_QERAPP_GETCURRENTTEXTURE )(); +typedef void ( WINAPI * PFN_QERAPP_SETCURRENTTEXTURE )( char* pName ); + +typedef void ( WINAPI * PFN_QERAPP_REGISTERMAPLOAD )( void* vp ); +typedef void ( WINAPI * PFN_QERAPP_REGISTERMAPSAVE )( void* vp ); + +typedef int ( WINAPI * PFN_QERAPP_GETECLASSCOUNT )(); +typedef char* ( WINAPI * PFN_QERAPP_GETECLASS )( int nIndex ); + +typedef void ( WINAPI * PFN_QERAPP_RESETPLUGINS )(); //--typedef int (WINAPI* PFN_QERAPP_GETENTITYCOUNT)(); /*! -\fn LoadTextureRGBA -\param pPixels is the raw RGBA pixel data (24bits, 8 bit depth) -\param nWidth image width -\param nHeight image height -this will work from the RGBA data and create a GL texture (accessed through a GL bind number) -it takes care of creating the mipmapping levels too -*/ -typedef qtexture_t* (* PFN_QERAPP_LOADTEXTURERGBA)(unsigned char* pPixels, int nWidth, int nHeight); + \fn LoadTextureRGBA + \param pPixels is the raw RGBA pixel data (24bits, 8 bit depth) + \param nWidth image width + \param nHeight image height + this will work from the RGBA data and create a GL texture (accessed through a GL bind number) + it takes care of creating the mipmapping levels too + */ +typedef qtexture_t* ( *PFN_QERAPP_LOADTEXTURERGBA )( unsigned char* pPixels, int nWidth, int nHeight ); //--typedef LPCSTR (WINAPI* PFN_QERAPP_GETENTITY)(int nIndex); // v1.70 -typedef int (WINAPI * PFN_QERAPP_GETENTITYCOUNT)(); -typedef void* (WINAPI * PFN_QERAPP_GETENTITYHANDLE)(int nIndex); +typedef int ( WINAPI * PFN_QERAPP_GETENTITYCOUNT )(); +typedef void* ( WINAPI * PFN_QERAPP_GETENTITYHANDLE )( int nIndex ); // FIXME: those two are fairly outdated, you get the epairs // but you don't have a clean epair read/write query // and you rely on the C structs directly, which might go away soon // ok now, stop using, it's bad for your karma (see iepairs.h instead) -typedef epair_t* (WINAPI * PFN_QERAPP_ALLOCATEEPAIR)( const char*, const char* ); -typedef int (WINAPI * PFN_QERAPP_ALLOCATEENTITYBRUSHHANDLES)(void* vp); -typedef void (WINAPI * PFN_QERAPP_RELEASEENTITYBRUSHHANDLES)(); -typedef void* (WINAPI * PFN_QERAPP_GETENTITYBRUSHHANDLE)(int nIndex); -typedef void* (WINAPI * PFN_QERAPP_CREATEENTITYHANDLE)(); -typedef void (WINAPI * PFN_QERAPP_COMMITBRUSHHANDLETOENTITY)( void* vpBrush, void* vpEntity); -typedef void (WINAPI * PFN_QERAPP_COMMITENTITYHANDLETOMAP)(void* vp); -typedef void (WINAPI * PFN_QERAPP_SETSCREENUPDATE)(int bScreenUpdate); +typedef epair_t* ( WINAPI * PFN_QERAPP_ALLOCATEEPAIR )( const char*, const char* ); +typedef int ( WINAPI * PFN_QERAPP_ALLOCATEENTITYBRUSHHANDLES )( void* vp ); +typedef void ( WINAPI * PFN_QERAPP_RELEASEENTITYBRUSHHANDLES )(); +typedef void* ( WINAPI * PFN_QERAPP_GETENTITYBRUSHHANDLE )( int nIndex ); +typedef void* ( WINAPI * PFN_QERAPP_CREATEENTITYHANDLE )(); +typedef void ( WINAPI * PFN_QERAPP_COMMITBRUSHHANDLETOENTITY )( void* vpBrush, void* vpEntity ); +typedef void ( WINAPI * PFN_QERAPP_COMMITENTITYHANDLETOMAP )( void* vp ); +typedef void ( WINAPI * PFN_QERAPP_SETSCREENUPDATE )( int bScreenUpdate ); // this one uses window flags defined in qertypes.h -typedef void (WINAPI * PFN_QERAPP_SYSUPDATEWINDOWS)(int bits); +typedef void ( WINAPI * PFN_QERAPP_SYSUPDATEWINDOWS )( int bits ); //++timo remove this one -typedef void (WINAPI * PFN_QERAPP_BUILDBRUSH2)(void* vp, int bConvert); +typedef void ( WINAPI * PFN_QERAPP_BUILDBRUSH2 )( void* vp, int bConvert ); // v1.80 -typedef void (WINAPI * PFN_QERAPP_GETDISPATCHPARAMS)(vec3_t vMin, vec3_t vMax, bool *bSingleBrush); +typedef void ( WINAPI * PFN_QERAPP_GETDISPATCHPARAMS )( vec3_t vMin, vec3_t vMax, bool *bSingleBrush ); -typedef int (WINAPI * PFN_QERAPP_REQUESTINTERFACE)( REFGUID, void* ); +typedef int ( WINAPI * PFN_QERAPP_REQUESTINTERFACE )( REFGUID, void* ); // use this one for errors, Radiant will stop after the "edit preferences" dialog -typedef void (WINAPI * PFN_QERAPP_ERROR)(const char* pMsg, ...); +typedef void ( WINAPI * PFN_QERAPP_ERROR )( const char* pMsg, ... ); // use to gain read access to the project epairs // FIXME: removed, accessed through QERPlug_RegisterPluginEntities with the IEpair interface // typedef void (WINAPI* PFN_QERAPP_GETPROJECTEPAIR)(epair_t **); // used to allocate and read a buffer //++timo NOTE: perhaps this would need moving to some kind of dedicated interface -typedef int (WINAPI * PFN_QERAPP_LOADFILE)(const char *pLocation, void ** buffer); -typedef char* (WINAPI * PFN_QERAPP_EXPANDRELETIVEPATH)(char *); -typedef void (WINAPI * PFN_QERAPP_QECONVERTDOSTOUNIXNAME)( char *dst, const char *src ); -typedef int (WINAPI * PFN_QERAPP_HASSHADER)(const char *); -typedef int (WINAPI * PFN_QERAPP_TEXTURELOADSKIN)(char *pName, int *pnWidth, int *pnHeight); +typedef int ( WINAPI * PFN_QERAPP_LOADFILE )( const char *pLocation, void ** buffer ); +typedef char* ( WINAPI * PFN_QERAPP_EXPANDRELETIVEPATH )( char * ); +typedef void ( WINAPI * PFN_QERAPP_QECONVERTDOSTOUNIXNAME )( char *dst, const char *src ); +typedef int ( WINAPI * PFN_QERAPP_HASSHADER )( const char * ); +typedef int ( WINAPI * PFN_QERAPP_TEXTURELOADSKIN )( char *pName, int *pnWidth, int *pnHeight ); // retrieves the path to the engine from the preferences dialog box -typedef const char* (WINAPI * PFN_QERAPP_GETGAMEPATH)(); +typedef const char* ( WINAPI * PFN_QERAPP_GETGAMEPATH )(); // retrieves full Radiant path -typedef const char* (WINAPI * PFN_QERAPP_GETQERPATH)(); +typedef const char* ( WINAPI * PFN_QERAPP_GETQERPATH )(); // retieves .game name of current active game -typedef const char* (WINAPI * PFN_QERAPP_GETGAMEFILE)(); +typedef const char* ( WINAPI * PFN_QERAPP_GETGAMEFILE )(); // patches in/out // NOTE: this is a bit different from the brushes in/out, no LPVOID handles this time @@ -518,13 +514,13 @@ typedef const char* (WINAPI * PFN_QERAPP_GETGAMEFILE)(); // if you call AllocateActivePatchHandles, you'll be playing with active patches // AllocateSelectedPatcheHandles for selected stuff // a call to CreatePatchHandle will move you to a seperate index table -typedef int (WINAPI * PFN_QERAPP_ALLOCATEACTIVEPATCHHANDLES) (); -typedef int (WINAPI * PFN_QERAPP_ALLOCATESELECTEDPATCHHANDLES) (); -typedef void (WINAPI * PFN_QERAPP_RELEASEPATCHHANDLES) (); -typedef patchMesh_t* (WINAPI * PFN_QERAPP_GETPATCHDATA) (int); -typedef patchMesh_t* (WINAPI * PFN_QERAPP_GETPATCHHANDLE) (int); -typedef void (WINAPI * PFN_QERAPP_DELETEPATCH) (int); -typedef int (WINAPI * PFN_QERAPP_CREATEPATCHHANDLE) (); +typedef int ( WINAPI * PFN_QERAPP_ALLOCATEACTIVEPATCHHANDLES )(); +typedef int ( WINAPI * PFN_QERAPP_ALLOCATESELECTEDPATCHHANDLES )(); +typedef void ( WINAPI * PFN_QERAPP_RELEASEPATCHHANDLES )(); +typedef patchMesh_t* ( WINAPI * PFN_QERAPP_GETPATCHDATA )( int ); +typedef patchMesh_t* ( WINAPI * PFN_QERAPP_GETPATCHHANDLE )( int ); +typedef void ( WINAPI * PFN_QERAPP_DELETEPATCH )( int ); +typedef int ( WINAPI * PFN_QERAPP_CREATEPATCHHANDLE )(); // when commiting, only a few patchMesh_t members are relevant: // int width, height; // in control points, not patches // int contents, flags, value, type; @@ -535,8 +531,8 @@ typedef int (WINAPI * PFN_QERAPP_CREATEPATCHHANDLE) (); // TODO: change current behaviour to an index = 0 to tell Radiant to allocate, other indexes to existing patches // patch is selected after a commit // you can add an optional texture / shader name .. if NULL will use the current texture -typedef void (WINAPI * PFN_QERAPP_COMMITPATCHHANDLETOMAP) (int, patchMesh_t* pMesh, char *texName); -typedef void (WINAPI * PFN_QERAPP_COMMITPATCHHANDLETOENTITY) (int, patchMesh_t* pMesh, char *texName, void* vpEntity); +typedef void ( WINAPI * PFN_QERAPP_COMMITPATCHHANDLETOMAP )( int, patchMesh_t* pMesh, char *texName ); +typedef void ( WINAPI * PFN_QERAPP_COMMITPATCHHANDLETOENTITY )( int, patchMesh_t* pMesh, char *texName, void* vpEntity ); // console output #define SYS_VRB 0 ///< verbose support (on/off) @@ -544,76 +540,76 @@ typedef void (WINAPI * PFN_QERAPP_COMMITPATCHHANDLETOENTITY) (int, patchMesh #define SYS_WRN 2 ///< warnings #define SYS_ERR 3 ///< error #define SYS_NOCON 4 ///< no console, only print to the file (useful whenever Sys_Printf and output IS the problem) -typedef void (WINAPI* PFN_QERAPP_SYSPRINTF) (const char *text, ...); -typedef void (WINAPI* PFN_QERAPP_SYSFPRINTF) (int flag, const char *text, ...); +typedef void ( WINAPI * PFN_QERAPP_SYSPRINTF )( const char *text, ... ); +typedef void ( WINAPI * PFN_QERAPP_SYSFPRINTF )( int flag, const char *text, ... ); -typedef void (WINAPI* PFN_QERAPP_SYSBEGINWAIT) (); -typedef void (WINAPI* PFN_QERAPP_SYSENDWAIT) (); +typedef void ( WINAPI * PFN_QERAPP_SYSBEGINWAIT )(); +typedef void ( WINAPI * PFN_QERAPP_SYSENDWAIT )(); -typedef void (* PFN_QERAPP_SYSBEEP) (); +typedef void ( *PFN_QERAPP_SYSBEEP )(); -typedef void (* PFN_QERAPP_SYSSTATUS) (const char *psz, int part ); +typedef void ( *PFN_QERAPP_SYSSTATUS )( const char *psz, int part ); // core map functionality -typedef void (* PFN_QERAPP_MAPNEW) (); -typedef void (* PFN_QERAPP_MAPFREE) (); -typedef void (* PFN_QERAPP_MAPBUILDBRUSHDATA) (); -typedef qboolean (* PFN_QERAPP_MAPISBRUSHFILTERED) (brush_t *); -typedef void (* PFN_QERAPP_MAPSTARTPOSITION) (); -typedef void (* PFN_QERAPP_MAPREGIONOFF) (); +typedef void ( *PFN_QERAPP_MAPNEW )(); +typedef void ( *PFN_QERAPP_MAPFREE )(); +typedef void ( *PFN_QERAPP_MAPBUILDBRUSHDATA )(); +typedef qboolean ( *PFN_QERAPP_MAPISBRUSHFILTERED )( brush_t * ); +typedef void ( *PFN_QERAPP_MAPSTARTPOSITION )(); +typedef void ( *PFN_QERAPP_MAPREGIONOFF )(); //typedef void (* PFN_QERAPP_SAVEASDIALOG) (bool bRegion); -typedef void (* PFN_QERAPP_SETBUILDWINDINGSNOTEXBUILD) (bool); -typedef void (* PFN_QERAPP_POINTFILECLEAR) (); +typedef void ( *PFN_QERAPP_SETBUILDWINDINGSNOTEXBUILD )( bool ); +typedef void ( *PFN_QERAPP_POINTFILECLEAR )(); -typedef void (* PFN_QERAPP_SYSSETTITLE) (const char *text); +typedef void ( *PFN_QERAPP_SYSSETTITLE )( const char *text ); -typedef void (* PFN_QERAPP_CSGMAKEHOLLOW) (); +typedef void ( *PFN_QERAPP_CSGMAKEHOLLOW )(); -typedef void (* PFN_QERAPP_REGIONSPAWNPOINT) (FILE *f); +typedef void ( *PFN_QERAPP_REGIONSPAWNPOINT )( FILE *f ); /*! -access to a portable GetTickCount -*/ -typedef unsigned long (* PFN_QERAPP_GETTICKCOUNT) (); + access to a portable GetTickCount + */ +typedef unsigned long ( *PFN_QERAPP_GETTICKCOUNT )(); class IModelCache { public: - virtual ~IModelCache() { } - virtual entity_interfaces_t *GetByID(const char *id, const char* version) = 0; - virtual void DeleteByID(const char *id, const char* version) = 0; - virtual void RefreshAll() = 0; +virtual ~IModelCache() { } +virtual entity_interfaces_t *GetByID( const char *id, const char* version ) = 0; +virtual void DeleteByID( const char *id, const char* version ) = 0; +virtual void RefreshAll() = 0; }; -typedef IModelCache* (* PFN_GETMODELCACHE)(); +typedef IModelCache* ( *PFN_GETMODELCACHE )(); class IFileTypeList { public: - virtual ~IFileTypeList() { } - virtual void addType(filetype_t type) = 0; +virtual ~IFileTypeList() { } +virtual void addType( filetype_t type ) = 0; }; class IFileTypeRegistry { public: - virtual ~IFileTypeRegistry() { } - virtual void addType(const char* key, filetype_t type) = 0; - virtual void getTypeList(const char* key, IFileTypeList* typelist) = 0; +virtual ~IFileTypeRegistry() { } +virtual void addType( const char* key, filetype_t type ) = 0; +virtual void getTypeList( const char* key, IFileTypeList* typelist ) = 0; private: }; -typedef IFileTypeRegistry* (* PFN_GETFILETYPEREGISTRY)(); +typedef IFileTypeRegistry* ( *PFN_GETFILETYPEREGISTRY )(); -typedef const char* (* PFN_QERAPP_READPROJECTKEY)(const char* key); +typedef const char* ( *PFN_QERAPP_READPROJECTKEY )( const char* key ); -typedef char* (* PFN_GETMAPFILENAME)(); +typedef char* ( *PFN_GETMAPFILENAME )(); -typedef bfilter_t* (* PFN_QERPLUG_FILTERADD)(int type, int bmask, const char *str, int exclude); +typedef bfilter_t* ( *PFN_QERPLUG_FILTERADD )( int type, int bmask, const char *str, int exclude ); -typedef void (* PFN_QERPLUG_FILTERACTIVATE) (void); +typedef void ( *PFN_QERPLUG_FILTERACTIVATE )( void ); - // FIXME: +// FIXME: // add map format extensions // add texture format handlers // add surface dialog handler @@ -623,140 +619,140 @@ typedef void (* PFN_QERPLUG_FILTERACTIVATE) (void); // Plugins need to declare one of these and implement the getfunctable as described above struct _QERFuncTable_1 { - int m_nSize; - PFN_QERAPP_CREATEBRUSH m_pfnCreateBrush; - PFN_QERAPP_CREATEBRUSHHANDLE m_pfnCreateBrushHandle; - PFN_QERAPP_DELETEBRUSHHANDLE m_pfnDeleteBrushHandle; - PFN_QERAPP_COMMITBRUSHHANDLETOMAP m_pfnCommitBrushHandle; - PFN_QERAPP_ADDFACE m_pfnAddFace; - PFN_QERAPP_ADDFACEDATA m_pfnAddFaceData; - PFN_QERAPP_GETFACEDATA m_pfnGetFaceData; - PFN_QERAPP_GETFACECOUNT m_pfnGetFaceCount; - PFN_QERAPP_SETFACEDATA m_pfnSetFaceData; - PFN_QERAPP_DELETEFACE m_pfnDeleteFace; - PFN_QERAPP_TEXTUREBRUSH m_pfnTextureBrush; - PFN_QERAPP_BUILDBRUSH m_pfnBuildBrush; // PGM - PFN_QERAPP_SELECTBRUSH m_pfnSelectBrush; // PGM - PFN_QERAPP_DESELECTBRUSH m_pfnDeselectBrush; // PGM - PFN_QERAPP_DESELECTALLBRUSHES m_pfnDeselectAllBrushes; // PGM - - PFN_QERAPP_DELETESELECTION m_pfnDeleteSelection; - PFN_QERAPP_GETPOINTS m_pfnGetPoints; - - PFN_QERAPP_SELECTEDBRUSHCOUNT m_pfnSelectedBrushCount; - PFN_QERAPP_ALLOCATESELECTEDBRUSHHANDLES m_pfnAllocateSelectedBrushHandles; - PFN_QERAPP_RELEASESELECTEDBRUSHHANDLES m_pfnReleaseSelectedBrushHandles; - PFN_QERAPP_GETSELECTEDBRUSHHANDLE m_pfnGetSelectedBrushHandle; - - PFN_QERAPP_ACTIVEBRUSHCOUNT m_pfnActiveBrushCount; - PFN_QERAPP_ALLOCATEACTIVEBRUSHHANDLES m_pfnAllocateActiveBrushHandles; - PFN_QERAPP_RELEASEACTIVEBRUSHHANDLES m_pfnReleaseActiveBrushHandles; - PFN_QERAPP_GETACTIVEBRUSHHANDLE m_pfnGetActiveBrushHandle; - - //++timo this would need to be removed and replaced by the IShaders interface - PFN_QERAPP_TEXTURECOUNT m_pfnTextureCount; - PFN_QERAPP_GETTEXTURE m_pfnGetTexture; - PFN_QERAPP_GETCURRENTTEXTURE m_pfnGetCurrentTexture; - PFN_QERAPP_SETCURRENTTEXTURE m_pfnSetCurrentTexture; - - PFN_QERAPP_GETECLASSCOUNT m_pfnGetEClassCount; - PFN_QERAPP_GETECLASS m_pfnGetEClass; - PFN_QERAPP_RESETPLUGINS m_pfnResetPlugins; - // v1.00 ends here - // v1.50 starts here - PFN_QERAPP_LOADTEXTURERGBA m_pfnLoadTextureRGBA; - // v1.50 ends here - // v1.70 starts here - PFN_QERAPP_GETENTITYCOUNT m_pfnGetEntityCount; - PFN_QERAPP_GETENTITYHANDLE m_pfnGetEntityHandle; - PFN_QERAPP_ALLOCATEENTITYBRUSHHANDLES m_pfnAllocateEntityBrushHandles; - PFN_QERAPP_RELEASEENTITYBRUSHHANDLES m_pfnReleaseEntityBrushHandles; - PFN_QERAPP_GETENTITYBRUSHHANDLE m_pfnGetEntityBrushHandle; - PFN_QERAPP_CREATEENTITYHANDLE m_pfnCreateEntityHandle; - PFN_QERAPP_COMMITBRUSHHANDLETOENTITY m_pfnCommitBrushHandleToEntity; - PFN_QERAPP_COMMITENTITYHANDLETOMAP m_pfnCommitEntityHandleToMap; - PFN_QERAPP_ALLOCATEEPAIR m_pfnAllocateEpair; - PFN_QERAPP_SETSCREENUPDATE m_pfnSetScreenUpdate; - PFN_QERAPP_BUILDBRUSH2 m_pfnBuildBrush2; - // v1.70 ends here - // v1.80 starts here - PFN_QERAPP_GETDISPATCHPARAMS m_pfnGetDispatchParams; - - // plugins can request additional interfaces - PFN_QERAPP_REQUESTINTERFACE m_pfnRequestInterface; - PFN_QERAPP_ERROR m_pfnError; - // loading a file into a buffer - PFN_QERAPP_LOADFILE m_pfnLoadFile; - PFN_QERAPP_EXPANDRELETIVEPATH m_pfnExpandReletivePath; - PFN_QERAPP_QECONVERTDOSTOUNIXNAME m_pfnQE_ConvertDOSToUnixName; - PFN_QERAPP_HASSHADER m_pfnHasShader; - PFN_QERAPP_TEXTURELOADSKIN m_pfnTexture_LoadSkin; - PFN_QERAPP_GETGAMEPATH m_pfnGetGamePath; - PFN_QERAPP_GETQERPATH m_pfnGetQERPath; - PFN_QERAPP_GETGAMEFILE m_pfnGetGameFile; - // patches in / out - PFN_QERAPP_ALLOCATEACTIVEPATCHHANDLES m_pfnAllocateActivePatchHandles; - PFN_QERAPP_ALLOCATESELECTEDPATCHHANDLES m_pfnAllocateSelectedPatchHandles; - PFN_QERAPP_RELEASEPATCHHANDLES m_pfnReleasePatchHandles; - PFN_QERAPP_GETPATCHDATA m_pfnGetPatchData; - PFN_QERAPP_GETPATCHHANDLE m_pfnGetPatchHandle; - PFN_QERAPP_DELETEPATCH m_pfnDeletePatch; - PFN_QERAPP_CREATEPATCHHANDLE m_pfnCreatePatchHandle; - PFN_QERAPP_COMMITPATCHHANDLETOMAP m_pfnCommitPatchHandleToMap; - PFN_QERAPP_COMMITPATCHHANDLETOENTITY m_pfnCommitPatchHandleToEntity; - - PFN_QERAPP_LOADIMAGE m_pfnLoadImage; - - // GTK+ functions - PFN_QERAPP_MESSAGEBOX m_pfnMessageBox; - PFN_QERAPP_FILEDIALOG m_pfnFileDialog; - PFN_QERAPP_DIRDIALOG m_pfnDirDialog; - PFN_QERAPP_COLORDIALOG m_pfnColorDialog; - PFN_QERAPP_LOADBITMAP m_pfnLoadBitmap; - - // Profile functions - PFN_QERAPP_PROFILE_GETDIR m_pfnProfileGetDirectory; - PFN_QERAPP_PROFILE_SAVEINT m_pfnProfileSaveInt; - PFN_QERAPP_PROFILE_SAVESTR m_pfnProfileSaveString; - PFN_QERAPP_PROFILE_LOADINT m_pfnProfileLoadInt; - PFN_QERAPP_PROFILE_LOADSTR m_pfnProfileLoadString; - - // Sys_ functions - PFN_QERAPP_SYSUPDATEWINDOWS m_pfnSysUpdateWindows; - PFN_QERAPP_SYSBEEP m_pfnSysBeep; - PFN_QERAPP_SYSPRINTF m_pfnSysPrintf; - PFN_QERAPP_SYSFPRINTF m_pfnSysFPrintf; - PFN_QERAPP_SYSBEGINWAIT m_pfnSysBeginWait; - PFN_QERAPP_SYSENDWAIT m_pfnSysEndWait; - PFN_QERAPP_SYSSETTITLE m_pfnSys_SetTitle; - PFN_QERAPP_SYSSTATUS m_pfnSys_Status; - - // some core functionality on the map - PFN_QERAPP_MAPNEW m_pfnMapNew; - PFN_QERAPP_MAPFREE m_pfnMapFree; - PFN_QERAPP_MAPBUILDBRUSHDATA m_pfnMapBuildBrushData; - PFN_QERAPP_MAPISBRUSHFILTERED m_pfnMap_IsBrushFiltered; - PFN_QERAPP_MAPSTARTPOSITION m_pfnMapStartPosition; - PFN_QERAPP_MAPREGIONOFF m_pfnMapRegionOff; - PFN_QERAPP_SETBUILDWINDINGSNOTEXBUILD m_pfnSetBuildWindingsNoTexBuild; + int m_nSize; + PFN_QERAPP_CREATEBRUSH m_pfnCreateBrush; + PFN_QERAPP_CREATEBRUSHHANDLE m_pfnCreateBrushHandle; + PFN_QERAPP_DELETEBRUSHHANDLE m_pfnDeleteBrushHandle; + PFN_QERAPP_COMMITBRUSHHANDLETOMAP m_pfnCommitBrushHandle; + PFN_QERAPP_ADDFACE m_pfnAddFace; + PFN_QERAPP_ADDFACEDATA m_pfnAddFaceData; + PFN_QERAPP_GETFACEDATA m_pfnGetFaceData; + PFN_QERAPP_GETFACECOUNT m_pfnGetFaceCount; + PFN_QERAPP_SETFACEDATA m_pfnSetFaceData; + PFN_QERAPP_DELETEFACE m_pfnDeleteFace; + PFN_QERAPP_TEXTUREBRUSH m_pfnTextureBrush; + PFN_QERAPP_BUILDBRUSH m_pfnBuildBrush; // PGM + PFN_QERAPP_SELECTBRUSH m_pfnSelectBrush; // PGM + PFN_QERAPP_DESELECTBRUSH m_pfnDeselectBrush; // PGM + PFN_QERAPP_DESELECTALLBRUSHES m_pfnDeselectAllBrushes; // PGM + + PFN_QERAPP_DELETESELECTION m_pfnDeleteSelection; + PFN_QERAPP_GETPOINTS m_pfnGetPoints; + + PFN_QERAPP_SELECTEDBRUSHCOUNT m_pfnSelectedBrushCount; + PFN_QERAPP_ALLOCATESELECTEDBRUSHHANDLES m_pfnAllocateSelectedBrushHandles; + PFN_QERAPP_RELEASESELECTEDBRUSHHANDLES m_pfnReleaseSelectedBrushHandles; + PFN_QERAPP_GETSELECTEDBRUSHHANDLE m_pfnGetSelectedBrushHandle; + + PFN_QERAPP_ACTIVEBRUSHCOUNT m_pfnActiveBrushCount; + PFN_QERAPP_ALLOCATEACTIVEBRUSHHANDLES m_pfnAllocateActiveBrushHandles; + PFN_QERAPP_RELEASEACTIVEBRUSHHANDLES m_pfnReleaseActiveBrushHandles; + PFN_QERAPP_GETACTIVEBRUSHHANDLE m_pfnGetActiveBrushHandle; + + //++timo this would need to be removed and replaced by the IShaders interface + PFN_QERAPP_TEXTURECOUNT m_pfnTextureCount; + PFN_QERAPP_GETTEXTURE m_pfnGetTexture; + PFN_QERAPP_GETCURRENTTEXTURE m_pfnGetCurrentTexture; + PFN_QERAPP_SETCURRENTTEXTURE m_pfnSetCurrentTexture; + + PFN_QERAPP_GETECLASSCOUNT m_pfnGetEClassCount; + PFN_QERAPP_GETECLASS m_pfnGetEClass; + PFN_QERAPP_RESETPLUGINS m_pfnResetPlugins; + // v1.00 ends here + // v1.50 starts here + PFN_QERAPP_LOADTEXTURERGBA m_pfnLoadTextureRGBA; + // v1.50 ends here + // v1.70 starts here + PFN_QERAPP_GETENTITYCOUNT m_pfnGetEntityCount; + PFN_QERAPP_GETENTITYHANDLE m_pfnGetEntityHandle; + PFN_QERAPP_ALLOCATEENTITYBRUSHHANDLES m_pfnAllocateEntityBrushHandles; + PFN_QERAPP_RELEASEENTITYBRUSHHANDLES m_pfnReleaseEntityBrushHandles; + PFN_QERAPP_GETENTITYBRUSHHANDLE m_pfnGetEntityBrushHandle; + PFN_QERAPP_CREATEENTITYHANDLE m_pfnCreateEntityHandle; + PFN_QERAPP_COMMITBRUSHHANDLETOENTITY m_pfnCommitBrushHandleToEntity; + PFN_QERAPP_COMMITENTITYHANDLETOMAP m_pfnCommitEntityHandleToMap; + PFN_QERAPP_ALLOCATEEPAIR m_pfnAllocateEpair; + PFN_QERAPP_SETSCREENUPDATE m_pfnSetScreenUpdate; + PFN_QERAPP_BUILDBRUSH2 m_pfnBuildBrush2; + // v1.70 ends here + // v1.80 starts here + PFN_QERAPP_GETDISPATCHPARAMS m_pfnGetDispatchParams; + + // plugins can request additional interfaces + PFN_QERAPP_REQUESTINTERFACE m_pfnRequestInterface; + PFN_QERAPP_ERROR m_pfnError; + // loading a file into a buffer + PFN_QERAPP_LOADFILE m_pfnLoadFile; + PFN_QERAPP_EXPANDRELETIVEPATH m_pfnExpandReletivePath; + PFN_QERAPP_QECONVERTDOSTOUNIXNAME m_pfnQE_ConvertDOSToUnixName; + PFN_QERAPP_HASSHADER m_pfnHasShader; + PFN_QERAPP_TEXTURELOADSKIN m_pfnTexture_LoadSkin; + PFN_QERAPP_GETGAMEPATH m_pfnGetGamePath; + PFN_QERAPP_GETQERPATH m_pfnGetQERPath; + PFN_QERAPP_GETGAMEFILE m_pfnGetGameFile; + // patches in / out + PFN_QERAPP_ALLOCATEACTIVEPATCHHANDLES m_pfnAllocateActivePatchHandles; + PFN_QERAPP_ALLOCATESELECTEDPATCHHANDLES m_pfnAllocateSelectedPatchHandles; + PFN_QERAPP_RELEASEPATCHHANDLES m_pfnReleasePatchHandles; + PFN_QERAPP_GETPATCHDATA m_pfnGetPatchData; + PFN_QERAPP_GETPATCHHANDLE m_pfnGetPatchHandle; + PFN_QERAPP_DELETEPATCH m_pfnDeletePatch; + PFN_QERAPP_CREATEPATCHHANDLE m_pfnCreatePatchHandle; + PFN_QERAPP_COMMITPATCHHANDLETOMAP m_pfnCommitPatchHandleToMap; + PFN_QERAPP_COMMITPATCHHANDLETOENTITY m_pfnCommitPatchHandleToEntity; + + PFN_QERAPP_LOADIMAGE m_pfnLoadImage; + + // GTK+ functions + PFN_QERAPP_MESSAGEBOX m_pfnMessageBox; + PFN_QERAPP_FILEDIALOG m_pfnFileDialog; + PFN_QERAPP_DIRDIALOG m_pfnDirDialog; + PFN_QERAPP_COLORDIALOG m_pfnColorDialog; + PFN_QERAPP_LOADBITMAP m_pfnLoadBitmap; + + // Profile functions + PFN_QERAPP_PROFILE_GETDIR m_pfnProfileGetDirectory; + PFN_QERAPP_PROFILE_SAVEINT m_pfnProfileSaveInt; + PFN_QERAPP_PROFILE_SAVESTR m_pfnProfileSaveString; + PFN_QERAPP_PROFILE_LOADINT m_pfnProfileLoadInt; + PFN_QERAPP_PROFILE_LOADSTR m_pfnProfileLoadString; + + // Sys_ functions + PFN_QERAPP_SYSUPDATEWINDOWS m_pfnSysUpdateWindows; + PFN_QERAPP_SYSBEEP m_pfnSysBeep; + PFN_QERAPP_SYSPRINTF m_pfnSysPrintf; + PFN_QERAPP_SYSFPRINTF m_pfnSysFPrintf; + PFN_QERAPP_SYSBEGINWAIT m_pfnSysBeginWait; + PFN_QERAPP_SYSENDWAIT m_pfnSysEndWait; + PFN_QERAPP_SYSSETTITLE m_pfnSys_SetTitle; + PFN_QERAPP_SYSSTATUS m_pfnSys_Status; + + // some core functionality on the map + PFN_QERAPP_MAPNEW m_pfnMapNew; + PFN_QERAPP_MAPFREE m_pfnMapFree; + PFN_QERAPP_MAPBUILDBRUSHDATA m_pfnMapBuildBrushData; + PFN_QERAPP_MAPISBRUSHFILTERED m_pfnMap_IsBrushFiltered; + PFN_QERAPP_MAPSTARTPOSITION m_pfnMapStartPosition; + PFN_QERAPP_MAPREGIONOFF m_pfnMapRegionOff; + PFN_QERAPP_SETBUILDWINDINGSNOTEXBUILD m_pfnSetBuildWindingsNoTexBuild; // PFN_QERAPP_SAVEASDIALOG m_pfnSaveAsDialog; - PFN_QERAPP_POINTFILECLEAR m_pfnPointFileClear; + PFN_QERAPP_POINTFILECLEAR m_pfnPointFileClear; - // FIXME TTimo prolly want to move that somewhere else - PFN_QERAPP_CSGMAKEHOLLOW m_pfnCSG_MakeHollow; + // FIXME TTimo prolly want to move that somewhere else + PFN_QERAPP_CSGMAKEHOLLOW m_pfnCSG_MakeHollow; - PFN_QERAPP_REGIONSPAWNPOINT m_pfnRegionSpawnPoint; - PFN_QERAPP_GETTICKCOUNT m_pfnQGetTickCount; - PFN_GETMODELCACHE m_pfnGetModelCache; - PFN_GETFILETYPEREGISTRY m_pfnGetFileTypeRegistry; + PFN_QERAPP_REGIONSPAWNPOINT m_pfnRegionSpawnPoint; + PFN_QERAPP_GETTICKCOUNT m_pfnQGetTickCount; + PFN_GETMODELCACHE m_pfnGetModelCache; + PFN_GETFILETYPEREGISTRY m_pfnGetFileTypeRegistry; - PFN_QERAPP_READPROJECTKEY m_pfnReadProjectKey; + PFN_QERAPP_READPROJECTKEY m_pfnReadProjectKey; - PFN_QERPLUG_FILTERACTIVATE m_pfnFiltersActivate; - PFN_QERPLUG_FILTERADD m_pfnFilterAdd; + PFN_QERPLUG_FILTERACTIVATE m_pfnFiltersActivate; + PFN_QERPLUG_FILTERADD m_pfnFilterAdd; - // digibob from the old _QERAppBSPFrontendTable table - PFN_GETMAPFILENAME m_pfnGetMapName; + // digibob from the old _QERAppBSPFrontendTable table + PFN_GETMAPFILENAME m_pfnGetMapName; }; // macros to access those faster in plugins diff --git a/include/qertypes.h b/include/qertypes.h index ea3c173b..50dec5f2 100644 --- a/include/qertypes.h +++ b/include/qertypes.h @@ -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-2007 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 + */ // qertypes.h // @@ -44,18 +44,18 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA typedef bool qboolean; -#define MAXPOINTS 16 +#define MAXPOINTS 16 // merged from qedefs.h ------ -#define MAX_EDGES 512 -#define MAX_POINTS 1024 +#define MAX_EDGES 512 +#define MAX_POINTS 1024 -#define COLOR_TEXTUREBACK 0 -#define COLOR_GRIDBACK 1 -#define COLOR_GRIDMINOR 2 -#define COLOR_GRIDMAJOR 3 -#define COLOR_CAMERABACK 4 +#define COLOR_TEXTUREBACK 0 +#define COLOR_GRIDBACK 1 +#define COLOR_GRIDMINOR 2 +#define COLOR_GRIDMAJOR 3 +#define COLOR_CAMERABACK 4 #define COLOR_ENTITY 5 #define COLOR_GRIDBLOCK 6 #define COLOR_GRIDTEXT 7 @@ -84,95 +84,84 @@ typedef vec_t vec3_t[3]; class texdef_t { private: - char *name; +char *name; public: - texdef_t() - { - name = new char[1]; - name[0] = '\0'; - shift[0] = 0.0f; - shift[1] = 0.0f; - rotate = 0.0f; - scale[0] = 1.0f; - scale[1] = 1.0f; - contents = 0; - flags = 0; - value = 0; - } - texdef_t(const texdef_t& other) - { - name = NULL; - SetName(other.name); - shift[0] = other.shift[0]; - shift[1] = other.shift[1]; - rotate = other.rotate; - scale[0] = other.scale[0]; - scale[1] = other.scale[1]; - contents = other.contents; - flags = other.flags; - value = other.value; - } - ~texdef_t() - { - if (name) - { - delete []name; - name = (char*)NULL; - } - } - - void SetName(const char *p) - { - if (name) - { - delete []name; - name = NULL; - } - if (p) - { - name = strcpy(new char[strlen(p)+1], p); - } - else - { - name = new char[1]; - name[0] = '\0'; - } - } - - const char * GetName() const - { - return name; - } - - // NOTE TTimo when loading prefs as binary, we load a bogus value in texdef.. - void DropName() - { - name = NULL; - SetName(NULL); - } - - texdef_t& operator =(const texdef_t& rhs) - { - if (&rhs != this) - { - SetName(rhs.name); - shift[0] = rhs.shift[0]; - shift[1] = rhs.shift[1]; - rotate = rhs.rotate; - scale[0] = rhs.scale[0]; - scale[1] = rhs.scale[1]; - contents = rhs.contents; - flags = rhs.flags; - value = rhs.value; - } - return *this; - } - float shift[2]; - float rotate; - float scale[2]; - int contents; - int flags; - int value; +texdef_t(){ + name = new char[1]; + name[0] = '\0'; + shift[0] = 0.0f; + shift[1] = 0.0f; + rotate = 0.0f; + scale[0] = 1.0f; + scale[1] = 1.0f; + contents = 0; + flags = 0; + value = 0; +} +texdef_t( const texdef_t& other ){ + name = NULL; + SetName( other.name ); + shift[0] = other.shift[0]; + shift[1] = other.shift[1]; + rotate = other.rotate; + scale[0] = other.scale[0]; + scale[1] = other.scale[1]; + contents = other.contents; + flags = other.flags; + value = other.value; +} +~texdef_t(){ + if ( name ) { + delete []name; + name = (char*)NULL; + } +} + +void SetName( const char *p ){ + if ( name ) { + delete []name; + name = NULL; + } + if ( p ) { + name = strcpy( new char[strlen( p ) + 1], p ); + } + else + { + name = new char[1]; + name[0] = '\0'; + } +} + +const char * GetName() const { + return name; +} + +// NOTE TTimo when loading prefs as binary, we load a bogus value in texdef.. +void DropName(){ + name = NULL; + SetName( NULL ); +} + +texdef_t& operator =( const texdef_t& rhs ){ + if ( &rhs != this ) { + SetName( rhs.name ); + shift[0] = rhs.shift[0]; + shift[1] = rhs.shift[1]; + rotate = rhs.rotate; + scale[0] = rhs.scale[0]; + scale[1] = rhs.scale[1]; + contents = rhs.contents; + flags = rhs.flags; + value = rhs.value; + } + return *this; +} +float shift[2]; +float rotate; +float scale[2]; +int contents; +int flags; +int value; }; #else @@ -182,49 +171,44 @@ public: class texdef_t { private: - char name[QPATH]; +char name[QPATH]; public: - texdef_t() { name[0] = '\0'; } - ~texdef_t() { } - - void SetName(const char *p) - { - strncpy(name, p, QPATH); - } - - const char * GetName() const - { - return name; - } - - // NOTE TTimo when loading prefs as binary, we load a bogus value in texdef.. - void DropName() - { - name[0] = '\0'; - } - - texdef_t& operator =(const texdef_t& rhs) - { - if (&rhs != this) - { - SetName(rhs.name); - shift[0] = rhs.shift[0]; - shift[1] = rhs.shift[1]; - rotate = rhs.rotate; - scale[0] = rhs.scale[0]; - scale[1] = rhs.scale[1]; - contents = rhs.contents; - flags = rhs.flags; - value = rhs.value; - } - return *this; - } - float shift[2]; - float rotate; - float scale[2]; - int contents; - int flags; - int value; +texdef_t() { name[0] = '\0'; } +~texdef_t() { } + +void SetName( const char *p ){ + strncpy( name, p, QPATH ); +} + +const char * GetName() const { + return name; +} + +// NOTE TTimo when loading prefs as binary, we load a bogus value in texdef.. +void DropName(){ + name[0] = '\0'; +} + +texdef_t& operator =( const texdef_t& rhs ){ + if ( &rhs != this ) { + SetName( rhs.name ); + shift[0] = rhs.shift[0]; + shift[1] = rhs.shift[1]; + rotate = rhs.rotate; + scale[0] = rhs.scale[0]; + scale[1] = rhs.scale[1]; + contents = rhs.contents; + flags = rhs.flags; + value = rhs.value; + } + return *this; +} +float shift[2]; +float rotate; +float scale[2]; +int contents; +int flags; +int value; }; #endif @@ -236,7 +220,7 @@ class IShader; // new brush primitive texdef typedef struct brushprimit_texdef_s { - vec_t coords[2][3]; + vec_t coords[2][3]; } brushprimit_texdef_t; // this structure is used in Radiant to reflect the state of the texture window @@ -244,24 +228,22 @@ typedef struct brushprimit_texdef_s class texturewin_t { public: - texturewin_t() - { - } - ~texturewin_t() - { - } - int width, height; - int originy; - // add brushprimit_texdef_t for brush primitive coordinates storage - brushprimit_texdef_t brushprimit_texdef; - int m_nTotalHeight; - // surface plugin, must be casted to a IPluginTexdef* - void* pTexdef; - texdef_t texdef; - // shader - // NOTE: never NULL, initialized in Texture_Init - // NOTE: the reference name of the shader is texdef.name (see QERApp_ReloadShaders for an example) - IShader *pShader; +texturewin_t(){ +} +~texturewin_t(){ +} +int width, height; +int originy; +// add brushprimit_texdef_t for brush primitive coordinates storage +brushprimit_texdef_t brushprimit_texdef; +int m_nTotalHeight; +// surface plugin, must be casted to a IPluginTexdef* +void* pTexdef; +texdef_t texdef; +// shader +// NOTE: never NULL, initialized in Texture_Init +// NOTE: the reference name of the shader is texdef.name (see QERApp_ReloadShaders for an example) +IShader *pShader; }; #define QER_TRANS 0x00000001 @@ -280,16 +262,16 @@ public: // shaders have reference couting, but qtexture_t don't (they're way too deep into Radiant) typedef struct qtexture_s { - struct qtexture_s *next; - // name of the texture file (the physical image file we are using) - // NOTE: used for lookup, must be unique .. vfs path of the texture, lowercase, NO FILE EXTENSION - // ex textures/gothic_wall/iron - // NOTE: the "textures/" prefix might seem unnecessary .. but it's better to stick to the vfs name - char name[64]; - int width, height; - GLuint texture_number; // gl bind number (the qtexture_t are usually loaded and binded by the shaders module) - vec3_t color; // for flat shade mode - qboolean inuse; // true = is present on the level (for the texture browser interface) + struct qtexture_s *next; + // name of the texture file (the physical image file we are using) + // NOTE: used for lookup, must be unique .. vfs path of the texture, lowercase, NO FILE EXTENSION + // ex textures/gothic_wall/iron + // NOTE: the "textures/" prefix might seem unnecessary .. but it's better to stick to the vfs name + char name[64]; + int width, height; + GLuint texture_number; // gl bind number (the qtexture_t are usually loaded and binded by the shaders module) + vec3_t color; // for flat shade mode + qboolean inuse; // true = is present on the level (for the texture browser interface) } qtexture_t; // NOTE: don't trust this definition! @@ -299,16 +281,16 @@ typedef struct qtexture_s #define MAX_POINTS_ON_WINDING 64 typedef struct { - int numpoints; - int maxpoints; - float points[8][5]; // variable sized + int numpoints; + int maxpoints; + float points[8][5]; // variable sized } winding_t; typedef struct { - vec3_t normal; - double dist; - int type; + vec3_t normal; + double dist; + int type; } plane_t; // pShader is a shortcut to the shader @@ -316,52 +298,52 @@ typedef struct // to initialize the pShader, use QERApp_Shader_ForName(texdef.name) typedef struct face_s { - struct face_s *next; - struct face_s *prev; - struct face_s *original; //used for vertex movement - vec3_t planepts[3]; - texdef_t texdef; - plane_t plane; + struct face_s *next; + struct face_s *prev; + struct face_s *original; //used for vertex movement + vec3_t planepts[3]; + texdef_t texdef; + plane_t plane; // Nurail: Face Undo - int undoId; - int redoId; + int undoId; + int redoId; - winding_t *face_winding; + winding_t *face_winding; - vec3_t d_color; - vec_t d_shade; - // calls through here have indirections (pure virtual) - // it would be good if the rendering loop would avoid scanning there (for the GL binding number for example) - IShader *pShader; + vec3_t d_color; + vec_t d_shade; + // calls through here have indirections (pure virtual) + // it would be good if the rendering loop would avoid scanning there (for the GL binding number for example) + IShader *pShader; //++timo FIXME: remove! - qtexture_t *d_texture; + qtexture_t *d_texture; // Timo new brush primit texdef - brushprimit_texdef_t brushprimit_texdef; + brushprimit_texdef_t brushprimit_texdef; // cast this one to an IPluginTexdef if you are using it // NOTE: casting can be done with a GETPLUGINTEXDEF defined in isurfaceplugin.h // TODO: if the __ISURFACEPLUGIN_H_ header is used, use a union { void *pData; IPluginTexdef *pPluginTexdef } kind of thing ? - void *pData; + void *pData; } face_t; typedef struct { - vec3_t xyz; - float sideST[2]; - float capST[2]; + vec3_t xyz; + float sideST[2]; + float capST[2]; } curveVertex_t; typedef struct { - curveVertex_t v[2]; + curveVertex_t v[2]; } sideVertex_t; -#define MIN_PATCH_WIDTH 3 -#define MIN_PATCH_HEIGHT 3 +#define MIN_PATCH_WIDTH 3 +#define MIN_PATCH_HEIGHT 3 -#define MAX_PATCH_WIDTH 16 -#define MAX_PATCH_HEIGHT 16 +#define MAX_PATCH_WIDTH 16 +#define MAX_PATCH_HEIGHT 16 // patch type info // type in lower 16 bits, flags in upper @@ -390,10 +372,10 @@ typedef struct { #define PATCH_STYLEMASK 0xffff0000 // typedef struct { - vec3_t xyz; - float st[2]; - float lightmap[2]; - vec3_t normal; + vec3_t xyz; + float st[2]; + float lightmap[2]; + vec3_t normal; } drawVert_t; // spog - used for patch LOD trees @@ -421,89 +403,89 @@ struct BTListList_t // used in brush primitive AND entities typedef struct epair_s { - struct epair_s *next; - char *key; - char *value; + struct epair_s *next; + char *key; + char *value; } epair_t; struct brush_s; typedef struct brush_s brush_t; typedef struct { - int width, height; // in control points, not patches - int contents, flags, value, type; - qtexture_t *d_texture; - IShader *pShader; - drawVert_t ctrl[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT]; - brush_t *pSymbiot; - qboolean bSelected; - qboolean bOverlay; - qboolean bDirty; - int nListID; - epair_t *epairs; - // cast this one to an IPluginTexdef if you are using it - // NOTE: casting can be done with a GETPLUGINTEXDEF defined in isurfaceplugin.h - // TODO: if the __ISURFACEPLUGIN_H_ header is used, use a union { void *pData; IPluginTexdef *pPluginTexdef } kind of thing ? - void *pData; - // spog - curve LOD binary trees and lists - BTNode_t *rowLOD[((MAX_PATCH_WIDTH-1)/2) * MAX_PATCH_HEIGHT]; // = ((MAX_PATCH_WIDTH-1)/2) * MAX_PATCH_HEIGHT - BTNode_t *colLOD[((MAX_PATCH_HEIGHT-1)/2) * MAX_PATCH_WIDTH]; // = ((MAX_PATCH_HEIGHT-1)/2) * MAX_PATCH_WIDTH - bool rowDirty[((MAX_PATCH_WIDTH-1)-1)/2]; - bool colDirty[((MAX_PATCH_HEIGHT-1)-1)/2]; - bool LODUpdated; - void *drawLists; // pointer to std::list + int width, height; // in control points, not patches + int contents, flags, value, type; + qtexture_t *d_texture; + IShader *pShader; + drawVert_t ctrl[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT]; + brush_t *pSymbiot; + qboolean bSelected; + qboolean bOverlay; + qboolean bDirty; + int nListID; + epair_t *epairs; + // cast this one to an IPluginTexdef if you are using it + // NOTE: casting can be done with a GETPLUGINTEXDEF defined in isurfaceplugin.h + // TODO: if the __ISURFACEPLUGIN_H_ header is used, use a union { void *pData; IPluginTexdef *pPluginTexdef } kind of thing ? + void *pData; + // spog - curve LOD binary trees and lists + BTNode_t *rowLOD[( ( MAX_PATCH_WIDTH - 1 ) / 2 ) * MAX_PATCH_HEIGHT]; // = ((MAX_PATCH_WIDTH-1)/2) * MAX_PATCH_HEIGHT + BTNode_t *colLOD[( ( MAX_PATCH_HEIGHT - 1 ) / 2 ) * MAX_PATCH_WIDTH]; // = ((MAX_PATCH_HEIGHT-1)/2) * MAX_PATCH_WIDTH + bool rowDirty[( ( MAX_PATCH_WIDTH - 1 ) - 1 ) / 2]; + bool colDirty[( ( MAX_PATCH_HEIGHT - 1 ) - 1 ) / 2]; + bool LODUpdated; + void *drawLists; // pointer to std::list } patchMesh_t; typedef struct brush_s { - struct brush_s *prev, *next; // links in active/selected - struct brush_s *oprev, *onext; // links in entity - struct entity_s *owner; - vec3_t mins, maxs; - face_t *brush_faces; - - qboolean bModelFailed; - // - // curve brush extensions - // all are derived from brush_faces - qboolean patchBrush; - qboolean hiddenBrush; - - //int nPatchID; - - patchMesh_t *pPatch; - struct entity_s *pUndoOwner; - - int undoId; //undo ID - int redoId; //redo ID - int ownerId; //entityId of the owner entity for undo - - // TTimo: this is not legal, we are not supposed to put UI toolkit dependant stuff in the interfaces - // NOTE: the grouping stuff never worked, there is embryonary code everywhere though - int numberId; - void* itemOwner; // GtkCTreeNode* ? - - // brush primitive only - epair_t *epairs; - - // brush filtered toggle - bool bFiltered; - bool bCamCulled; - bool bBrushDef; + struct brush_s *prev, *next; // links in active/selected + struct brush_s *oprev, *onext; // links in entity + struct entity_s *owner; + vec3_t mins, maxs; + face_t *brush_faces; + + qboolean bModelFailed; + // + // curve brush extensions + // all are derived from brush_faces + qboolean patchBrush; + qboolean hiddenBrush; + + //int nPatchID; + + patchMesh_t *pPatch; + struct entity_s *pUndoOwner; + + int undoId; //undo ID + int redoId; //redo ID + int ownerId; //entityId of the owner entity for undo + + // TTimo: this is not legal, we are not supposed to put UI toolkit dependant stuff in the interfaces + // NOTE: the grouping stuff never worked, there is embryonary code everywhere though + int numberId; + void* itemOwner; // GtkCTreeNode* ? + + // brush primitive only + epair_t *epairs; + + // brush filtered toggle + bool bFiltered; + bool bCamCulled; + bool bBrushDef; } brush_t; -#define MAX_FLAGS 16 +#define MAX_FLAGS 16 typedef struct vertmodel_t { - float v[3]; - float st[2]; - float normal[3]; + float v[3]; + float st[2]; + float normal[3]; } vertmodel; typedef struct triindex_t { - int indexes[3]; + int indexes[3]; } triindex; // TTimo: NOTE: we don't have dedicated stuff to copy/allocate/delete this structure like we do for entity_t and brush_t @@ -511,18 +493,18 @@ typedef struct triindex_t // TTimo 04/01/2001 removing the GString* for toolkit-independent interfaces .. cast it .. typedef struct entitymodel_t { - struct entitymodel_t *pNext; - int nTriCount; - //trimodel *pTriList; - //md3Triangle_t *pTriList; - triindex *pTriList; - vertmodel *pVertList; - int numVerts; - int nTextureBind; - void *strSkin; // toolkit-independent .. cast to a GString* - int nSkinWidth; - int nSkinHeight; - int nModelPosition; + struct entitymodel_t *pNext; + int nTriCount; + //trimodel *pTriList; + //md3Triangle_t *pTriList; + triindex *pTriList; + vertmodel *pVertList; + int numVerts; + int nTextureBind; + void *strSkin; // toolkit-independent .. cast to a GString* + int nSkinWidth; + int nSkinHeight; + int nModelPosition; } entitymodel; // eclass show flags @@ -533,51 +515,51 @@ typedef struct entitymodel_t #define ECLASS_MISCMODEL 0x00000008 #ifdef USEPLUGINENTITIES -#define ECLASS_PLUGINENTITY 0x00000010 +#define ECLASS_PLUGINENTITY 0x00000010 #endif // USEPLUGINENTITIES typedef struct eclass_s { struct eclass_s *next; - char *name; - qboolean fixedsize; - qboolean unknown; // wasn't found in source - vec3_t mins, maxs; - vec3_t color; - texdef_t texdef; - char *comments; - char flagnames[MAX_FLAGS][32]; - - entitymodel *model; - char *modelpath; - //++timo NOTE: I don't know what this is used for exactly. But don't trust it for the real skin paths on models (screws up with long/short path names) - //++hydra NOTE: this, hopefully, will be used to use specific shaders on the bounding boxes of the eclass instead of a color. - char *skinpath; - int nFrame; - unsigned int nShowFlags; - - void* hPlug; + char *name; + qboolean fixedsize; + qboolean unknown; // wasn't found in source + vec3_t mins, maxs; + vec3_t color; + texdef_t texdef; + char *comments; + char flagnames[MAX_FLAGS][32]; + + entitymodel *model; + char *modelpath; + //++timo NOTE: I don't know what this is used for exactly. But don't trust it for the real skin paths on models (screws up with long/short path names) + //++hydra NOTE: this, hopefully, will be used to use specific shaders on the bounding boxes of the eclass instead of a color. + char *skinpath; + int nFrame; + unsigned int nShowFlags; + + void* hPlug; } eclass_t; -extern eclass_t *eclass; +extern eclass_t *eclass; /* ** window bits */ -#define W_CAMERA 0x0001 -#define W_XY 0x0002 -#define W_XY_OVERLAY 0x0004 -#define W_Z 0x0008 -#define W_TEXTURE 0x0010 -#define W_Z_OVERLAY 0x0020 -#define W_CONSOLE 0x0040 -#define W_ENTITY 0x0080 +#define W_CAMERA 0x0001 +#define W_XY 0x0002 +#define W_XY_OVERLAY 0x0004 +#define W_Z 0x0008 +#define W_TEXTURE 0x0010 +#define W_Z_OVERLAY 0x0020 +#define W_CONSOLE 0x0040 +#define W_ENTITY 0x0080 #define W_CAMERA_IFON 0x0100 #define W_XZ 0x0200 //--| only used for patch vertex manip stuff #define W_YZ 0x0400 //--| #define W_GROUP 0x0800 #define W_MEDIA 0x1000 -#define W_ALL 0xFFFFFFFF +#define W_ALL 0xFFFFFFFF // used in some Drawing routines enum VIEWTYPE {YZ, XZ, XY}; @@ -587,83 +569,69 @@ const char g_AxisName[3] = { 'X', 'Y', 'Z' }; class string_t { public: - inline string_t() - { - copy(""); - } - inline string_t(const string_t& other) - { - copy(other.m_string); - } - inline string_t(const char* string) - { - copy(string); - } - inline ~string_t() - { - destroy(); - } - inline const string_t& operator=(const string_t& other) - { - destroy(); - copy(other.m_string); - return *this; - } - inline const string_t& operator=(const char* string) - { - destroy(); - copy(string); - return *this; - } - inline bool operator<(const string_t& other) const - { - return compare(other) < 0; - } - inline bool operator>(const string_t& other) const - { - return compare(other) > 0; - } - inline bool operator==(const string_t& other) const - { - return compare(other) == 0; - } - inline bool operator!=(const string_t& other) const - { - return compare(other) != 0; - } - inline const char* c_str() const - { - return m_string; - } +inline string_t(){ + copy( "" ); +} +inline string_t( const string_t& other ){ + copy( other.m_string ); +} +inline string_t( const char* string ){ + copy( string ); +} +inline ~string_t(){ + destroy(); +} +inline const string_t& operator=( const string_t& other ){ + destroy(); + copy( other.m_string ); + return *this; +} +inline const string_t& operator=( const char* string ){ + destroy(); + copy( string ); + return *this; +} +inline bool operator<( const string_t& other ) const { + return compare( other ) < 0; +} +inline bool operator>( const string_t& other ) const { + return compare( other ) > 0; +} +inline bool operator==( const string_t& other ) const { + return compare( other ) == 0; +} +inline bool operator!=( const string_t& other ) const { + return compare( other ) != 0; +} +inline const char* c_str() const { + return m_string; +} private: - inline void copy(const char* string) - { - m_string = new char[strlen(string)+1]; - strcpy(m_string, string); - } - inline void destroy() - { - delete[] m_string; - } - inline int compare(const string_t& other) const - { - return strcmp(m_string, other.m_string); - } - - char* m_string; +inline void copy( const char* string ){ + m_string = new char[strlen( string ) + 1]; + strcpy( m_string, string ); +} +inline void destroy(){ + delete[] m_string; +} +inline int compare( const string_t& other ) const { + return strcmp( m_string, other.m_string ); +} + +char* m_string; }; class filetype_t { public: - filetype_t() - : name(""), pattern("") - {} - filetype_t(const char* _name, const char* _pattern) - : name(_name), pattern(_pattern) - {} - const char* name; - const char* pattern; +filetype_t() + : name( "" ), pattern( "" ) +{} +filetype_t( const char* _name, const char* _pattern ) + : name( _name ), pattern( _pattern ) +{} +const char* name; +const char* pattern; }; @@ -688,34 +656,34 @@ class IEdit; // using constructors / destructors on C structs is bad practice struct entity_interfaces_t { - IRender *pRender; - ISelect *pSelect; - IEdit *pEdit; + IRender *pRender; + ISelect *pSelect; + IEdit *pEdit; }; // MODEL END typedef struct entity_s { - struct entity_s *prev, *next; - - /*! - \todo can use a brushes list, or the blind data below - for now, blind data should be interpreted as CPtrArray*, only use in the IMAP API - */ - brush_t brushes; // head/tail of list - void *pData; - - int undoId, redoId, entityId; // used for undo/redo - vec3_t origin; - eclass_t *eclass; - epair_t *epairs; - entity_interfaces_t model; + struct entity_s *prev, *next; + + /*! + \todo can use a brushes list, or the blind data below + for now, blind data should be interpreted as CPtrArray*, only use in the IMAP API + */ + brush_t brushes; // head/tail of list + void *pData; + + int undoId, redoId, entityId; // used for undo/redo + vec3_t origin; + eclass_t *eclass; + epair_t *epairs; + entity_interfaces_t model; #ifdef USEPLUGINENTITIES - IPluginEntity *pPlugEnt; + IPluginEntity *pPlugEnt; #endif // USEPLUGINENTITIES - // this is cam code addition? - vec3_t color; + // this is cam code addition? + vec3_t color; // Arnout: HACK-ish and change for 1.3 (in 1.3 we have a blind data pointer according to TTimo) float fLightEnvelope1[3]; @@ -724,39 +692,39 @@ typedef struct entity_s typedef struct { - int p1, p2; - face_t *f1, *f2; + int p1, p2; + face_t *f1, *f2; } pedge_t; // window system independent camera view code // NOTE TTimo taken from xy.h typedef struct { - int width, height; + int width, height; - qboolean timing; + qboolean timing; - vec3_t origin; // at center of window - float scale; + vec3_t origin; // at center of window + float scale; - float topclip, bottomclip; + float topclip, bottomclip; - qboolean d_dirty; + qboolean d_dirty; } xy_t; // spog - struct used for nodes in filters list struct bfilter_t //c++ style { - bfilter_t *next; - int attribute; // 1=brush->face->pShader->getName() - // 2=brush->pPatch->pShader->getFlags() - // 3=brush->owner->eclass->name - // 4=brush->owner->eclass->nShowFlags - // 5=brush->face->texdef.flags (q2) - // 6=brush->face->texdef.contents (q2) - int mask; - const char *string; - bool active; + bfilter_t *next; + int attribute; // 1=brush->face->pShader->getName() + // 2=brush->pPatch->pShader->getFlags() + // 3=brush->owner->eclass->name + // 4=brush->owner->eclass->nShowFlags + // 5=brush->face->texdef.flags (q2) + // 6=brush->face->texdef.contents (q2) + int mask; + const char *string; + bool active; }; // djbob: no longer any need to add only to end, versioning removed, it is no longer saved as binary @@ -764,147 +732,147 @@ struct bfilter_t //c++ style // preferences.cpp LoadPref / SavePref typedef struct { - int iTexMenu; // nearest, linear, etc - float fGamma; // gamma for textures - vec3_t colors[COLOR_LAST]; - int exclude; - int include; - texdef_t m_SIIncrement; // increments for the surface inspector - texdef_t m_PIIncrement; // increments for the patch inspector - vec3_t AxisColors[3]; // colors used for X, Y Z axis - // these are in the View > Show menu with Show coordinates - qboolean show_names; - qboolean show_coordinates; - qboolean show_angles; - qboolean show_outline; - qboolean show_axis; - qboolean bNoSelectedOutlines; - bfilter_t *filters; // FIXME spog - might be better in another location? - int iSelectedOutlinesStyle; + int iTexMenu; // nearest, linear, etc + float fGamma; // gamma for textures + vec3_t colors[COLOR_LAST]; + int exclude; + int include; + texdef_t m_SIIncrement; // increments for the surface inspector + texdef_t m_PIIncrement; // increments for the patch inspector + vec3_t AxisColors[3]; // colors used for X, Y Z axis + // these are in the View > Show menu with Show coordinates + qboolean show_names; + qboolean show_coordinates; + qboolean show_angles; + qboolean show_outline; + qboolean show_axis; + qboolean bNoSelectedOutlines; + bfilter_t *filters; // FIXME spog - might be better in another location? + int iSelectedOutlinesStyle; } SavedInfo_t; typedef enum { - sel_brush, - sel_brush_on, - sel_brush_off, - // sel_sticky_brush, - // sel_face, - sel_vertex, - sel_edge, - sel_singlevertex, - sel_curvepoint, - sel_area, - sel_areatall, - sel_facets_on, - sel_facets_off, + sel_brush, + sel_brush_on, + sel_brush_off, + // sel_sticky_brush, + // sel_face, + sel_vertex, + sel_edge, + sel_singlevertex, + sel_curvepoint, + sel_area, + sel_areatall, + sel_facets_on, + sel_facets_off, } select_t; // most of the QE globals are stored in this structure typedef struct { - qboolean d_showgrid; - float d_gridsize; - qboolean d_bSmallGrid; // we use this flag to hack our way into editing of <1 grids + qboolean d_showgrid; + float d_gridsize; + qboolean d_bSmallGrid; // we use this flag to hack our way into editing of <1 grids - int d_num_entities; + int d_num_entities; - entity_t *d_project_entity; + entity_t *d_project_entity; - // defines the boundaries of the current work area - // is used to guess brushes and drop points third coordinate when creating from 2D view - vec3_t d_work_min,d_work_max; - // not stored in registry, default is off - qboolean d_show_work; + // defines the boundaries of the current work area + // is used to guess brushes and drop points third coordinate when creating from 2D view + vec3_t d_work_min,d_work_max; + // not stored in registry, default is off + qboolean d_show_work; - vec3_t d_points[MAX_POINTS]; - int d_numpoints; - pedge_t d_edges[MAX_EDGES]; - int d_numedges; + vec3_t d_points[MAX_POINTS]; + int d_numpoints; + pedge_t d_edges[MAX_EDGES]; + int d_numedges; - int d_num_move_points; - float *d_move_points[4096]; + int d_num_move_points; + float *d_move_points[4096]; - qtexture_t *d_qtextures; - // used to speedup access, specially in QERApp_Try_Texture_ForName - // must always be kept up-to-date with d_qtextures* - //++timo FIXME at some point in the future it would even be better to remove d_qtextures and use this instead - GHashTable *d_qtexmap; + qtexture_t *d_qtextures; + // used to speedup access, specially in QERApp_Try_Texture_ForName + // must always be kept up-to-date with d_qtextures* + //++timo FIXME at some point in the future it would even be better to remove d_qtextures and use this instead + GHashTable *d_qtexmap; - texturewin_t d_texturewin; + texturewin_t d_texturewin; - int d_pointfile_display_list; + int d_pointfile_display_list; - xy_t d_xyOld; + xy_t d_xyOld; - SavedInfo_t d_savedinfo; + SavedInfo_t d_savedinfo; - int d_workcount; + int d_workcount; - // connect entities uses the last two brushes selected - int d_select_count; - brush_t *d_select_order[2]; - vec3_t d_select_translate; // for dragging w/o making new display lists - select_t d_select_mode; + // connect entities uses the last two brushes selected + int d_select_count; + brush_t *d_select_order[2]; + vec3_t d_select_translate; // for dragging w/o making new display lists + select_t d_select_mode; - int d_parsed_brushes; + int d_parsed_brushes; - qboolean show_blocks; - int blockSize; + qboolean show_blocks; + int blockSize; - // NOTE TTimo - // a lot of this data should be in a property bag and available to the other modules through an API - // this is generated from game configuration and the project settings, and should be still be part of it + // NOTE TTimo + // a lot of this data should be in a property bag and available to the other modules through an API + // this is generated from game configuration and the project settings, and should be still be part of it - // tells if we are internally using brush primitive (texture coordinates and map format) - // this is a shortcut for IntForKey( g_qeglobals.d_project_entity, "brush_primit" ) - // NOTE: must keep the two ones in sync - bool m_bBrushPrimitMode; + // tells if we are internally using brush primitive (texture coordinates and map format) + // this is a shortcut for IntForKey( g_qeglobals.d_project_entity, "brush_primit" ) + // NOTE: must keep the two ones in sync + bool m_bBrushPrimitMode; - /*! - win32: engine full path. - unix: user home full path + engine dir. - */ - Str m_strHomeGame; - /*! - cache for m_strHomeGame + mod subdirectory. - */ - Str m_strHomeMaps; + /*! + win32: engine full path. + unix: user home full path + engine dir. + */ + Str m_strHomeGame; + /*! + cache for m_strHomeGame + mod subdirectory. + */ + Str m_strHomeMaps; - // used while importing brush data from file or memory buffer - // tells if conversion between map format and internal preferences ( m_bBrushPrimitMode ) is needed - qboolean bNeedConvert; - qboolean bOldBrushes; - qboolean bPrimitBrushes; + // used while importing brush data from file or memory buffer + // tells if conversion between map format and internal preferences ( m_bBrushPrimitMode ) is needed + qboolean bNeedConvert; + qboolean bOldBrushes; + qboolean bPrimitBrushes; - vec3_t d_vAreaTL; - vec3_t d_vAreaBR; + vec3_t d_vAreaTL; + vec3_t d_vAreaBR; - // tells if we are using .INI files for prefs instead of registry - qboolean use_ini; - // even in .INI mode we use the registry for all void* prefs - char use_ini_registry[64]; - // disabled all INI / registry read write .. used when shutting down after registry cleanup - qboolean disable_ini; + // tells if we are using .INI files for prefs instead of registry + qboolean use_ini; + // even in .INI mode we use the registry for all void* prefs + char use_ini_registry[64]; + // disabled all INI / registry read write .. used when shutting down after registry cleanup + qboolean disable_ini; - // tells we are using a BSP frontend plugin - qboolean bBSPFrontendPlugin; + // tells we are using a BSP frontend plugin + qboolean bBSPFrontendPlugin; - // handle to the console log file - // we use low level I/O to get rid of buffering and have everything on file if we crash - int hLogFile; + // handle to the console log file + // we use low level I/O to get rid of buffering and have everything on file if we crash + int hLogFile; - qboolean bTextureCompressionSupported; // is texture compression supported by hardware? - GLint texture_components; + qboolean bTextureCompressionSupported; // is texture compression supported by hardware? + GLint texture_components; - // temporary values that should be initialised only once at run-time - // there are too many uneccessary calls to Sys_QGL_ExtensionSupported - // NOTE TTimo: those are unused atm (set right, but not used) - bool m_bOpenGLCompressionSupported; - bool m_bS3CompressionSupported; + // temporary values that should be initialised only once at run-time + // there are too many uneccessary calls to Sys_QGL_ExtensionSupported + // NOTE TTimo: those are unused atm (set right, but not used) + bool m_bOpenGLCompressionSupported; + bool m_bS3CompressionSupported; - // set to true after OpenGL has been initialized and extensions have been tested - bool m_bOpenGLReady; + // set to true after OpenGL has been initialized and extensions have been tested + bool m_bOpenGLReady; } QEGlobals_t; diff --git a/include/qsysprintf.h b/include/qsysprintf.h index a8d2874a..72f640c0 100644 --- a/include/qsysprintf.h +++ b/include/qsysprintf.h @@ -1,42 +1,42 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ #ifndef __QSYSPRINTF_H__ #define __QSYSPRINTF_H__ /*! -this header is provided in libs/ in an attempt to provide a common API -for all the diagnostic printing / fatal error situations + this header is provided in libs/ in an attempt to provide a common API + for all the diagnostic printing / fatal error situations -this is oriented at synapse server targets ONLY -synapse clients should not include this, as they are supposed to go -through the function tables to report print diagnostics -(or use Syn_Printf for situations where the func table may not be available) + this is oriented at synapse server targets ONLY + synapse clients should not include this, as they are supposed to go + through the function tables to report print diagnostics + (or use Syn_Printf for situations where the func table may not be available) -each server target implements that in it's own way. Radiant logs to -a file and sends to the console, q3map prints to stdout and to the -XML network stream, etc. -*/ + each server target implements that in it's own way. Radiant logs to + a file and sends to the console, q3map prints to stdout and to the + XML network stream, etc. + */ -#if defined(__cplusplus) +#if defined( __cplusplus ) extern "C" { #endif @@ -49,18 +49,18 @@ extern "C" #define SYS_NOCON 4 ///< no console, only print to the file (useful whenever Sys_Printf and output IS the problem) /*! -those are the real implementation -*/ -void Sys_Printf_VA (const char *text, va_list args); ///< matches PFN_SYN_PRINTF_VA prototype -void Sys_FPrintf_VA (int level, const char *text, va_list args); + those are the real implementation + */ +void Sys_Printf_VA( const char *text, va_list args ); ///< matches PFN_SYN_PRINTF_VA prototype +void Sys_FPrintf_VA( int level, const char *text, va_list args ); /*! -this is easy to call, wrappers around va_list version -*/ -void Sys_Printf (const char *text, ...); -void Sys_FPrintf (int flag, const char *text, ...); - -#if defined(__cplusplus) + this is easy to call, wrappers around va_list version + */ +void Sys_Printf( const char *text, ... ); +void Sys_FPrintf( int flag, const char *text, ... ); + +#if defined( __cplusplus ) }; #endif diff --git a/include/stl_check.h b/include/stl_check.h index b6def1db..89660091 100644 --- a/include/stl_check.h +++ b/include/stl_check.h @@ -1,28 +1,28 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /*! -This header is used to make sure the STL we are using is what we expect -this allows to catch some weird errors early at compile time -*/ + This header is used to make sure the STL we are using is what we expect + this allows to catch some weird errors early at compile time + */ #ifdef Q_NO_STLPORT @@ -35,21 +35,21 @@ using namespace std; #error "Can't find _STLPORT_VERSION, check you are compiling against STLPort" #endif -#if !defined(_STLP_DONT_USE_EXCEPTIONS) +#if !defined( _STLP_DONT_USE_EXCEPTIONS ) #error exc #endif -#if !defined(_STLP_NO_NAMESPACES) +#if !defined( _STLP_NO_NAMESPACES ) #error namespace #endif -#if !defined(_STLP_NO_IOSTREAMS) +#if !defined( _STLP_NO_IOSTREAMS ) #error io #endif // now check a few more things (paranoid) // if you use our custom STLPort distribution it should be alright though -#if !defined(_STLP_DONT_USE_EXCEPTIONS) || !defined(_STLP_NO_NAMESPACES) || !defined(_STLP_NO_IOSTREAMS) +#if !defined( _STLP_DONT_USE_EXCEPTIONS ) || !defined( _STLP_NO_NAMESPACES ) || !defined( _STLP_NO_IOSTREAMS ) #error "There is something broken in your STLPort config" #endif diff --git a/include/stream_version.h b/include/stream_version.h index 17ce6339..21a26fff 100644 --- a/include/stream_version.h +++ b/include/stream_version.h @@ -1,3 +1,2 @@ // version defines for q3map stream #define Q3MAP_STREAM_VERSION "1" - diff --git a/libs/cmdlib.h b/libs/cmdlib.h index 92d985ae..1dde0fc6 100644 --- a/libs/cmdlib.h +++ b/libs/cmdlib.h @@ -1,27 +1,27 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ // // start of shared cmdlib stuff -// +// #ifndef __CMDLIB__ #define __CMDLIB__ @@ -41,14 +41,14 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // some easy portability crap #ifdef _WIN32 #include - #define Q_mkdir(a,b) _mkdir(a) + #define Q_mkdir( a,b ) _mkdir( a ) #else #include - #define Q_mkdir(a,b) mkdir(a,b) + #define Q_mkdir( a,b ) mkdir( a,b ) #endif #ifdef __cplusplus - typedef bool qboolean; +typedef bool qboolean; #endif // NOTE TTimo: is this worth anything? @@ -56,42 +56,42 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define __BYTEBOOL__ #ifndef __cplusplus - typedef enum {false, true} boolean; +typedef enum {false, true} boolean; #else - typedef unsigned char boolean; +typedef unsigned char boolean; #endif typedef unsigned char byte; #endif // __BYTEBOOL__ -void DefaultExtension( char *path, char *extension ); -void DefaultPath( char *path, char *basepath ); -void StripFilename( char *path ); -void StripExtension( char *path ); -void ExtractFilePath( const char *path, char *dest ); -void ExtractFileName( const char *path, char *dest ); -void ExtractFileBase( const char *path, char *dest ); -void ExtractFileExtension( const char *path, char *dest ); +void DefaultExtension( char *path, char *extension ); +void DefaultPath( char *path, char *basepath ); +void StripFilename( char *path ); +void StripExtension( char *path ); +void ExtractFilePath( const char *path, char *dest ); +void ExtractFileName( const char *path, char *dest ); +void ExtractFileBase( const char *path, char *dest ); +void ExtractFileExtension( const char *path, char *dest ); /*! -\brief create all directories leading to a file path. if you pass a directory, terminate it with a '/' -*/ -void CreateDirectoryPath (const char *path); - -short BigShort (short l); -short LittleShort (short l); -int BigLong (int l); -int LittleLong (int l); -float BigFloat (float l); -float LittleFloat (float l); -void *qmalloc (size_t size); -void* qblockmalloc(size_t nSize); + \brief create all directories leading to a file path. if you pass a directory, terminate it with a '/' + */ +void CreateDirectoryPath( const char *path ); + +short BigShort( short l ); +short LittleShort( short l ); +int BigLong( int l ); +int LittleLong( int l ); +float BigFloat( float l ); +float LittleFloat( float l ); +void *qmalloc( size_t size ); +void* qblockmalloc( size_t nSize ); void ConvertDOSToUnixName( char *dst, const char *src ); #ifdef __cplusplus - char* StrDup(char* pStr); +char* StrDup( char* pStr ); #endif -char* StrDup(const char* pStr); +char* StrDup( const char* pStr ); // TTimo started adding portability code: // return true if spawning was successful, false otherwise @@ -106,6 +106,6 @@ char* StrDup(const char* pStr); // return values; // if the spawn was fine // TODO TTimo add functionality to track the process until it dies -bool Q_Exec(const char *cmd, char *cmdline, const char *execdir, bool bCreateConsole); +bool Q_Exec( const char *cmd, char *cmdline, const char *execdir, bool bCreateConsole ); #endif diff --git a/libs/cmdlib/cmdlib.cpp b/libs/cmdlib/cmdlib.cpp index 8e904fa7..b27919ff 100644 --- a/libs/cmdlib/cmdlib.cpp +++ b/libs/cmdlib/cmdlib.cpp @@ -1,34 +1,34 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ // // start of shared cmdlib stuff -// +// #include "cmdlib.h" #ifdef _WIN32 #include #endif -#if defined (__linux__) || defined (__APPLE__) +#if defined ( __linux__ ) || defined ( __APPLE__ ) #include #endif @@ -36,461 +36,435 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // NOTE: we don't use this crap .. with the total mess of mixing win32/unix paths we need to recognize both '/' and '\\' #define PATHSEPERATOR '/' -#if defined (__linux__) || defined (__APPLE__) -bool Q_Exec(const char *cmd, char *cmdline, const char *execdir, bool bCreateConsole) -{ - char fullcmd[2048]; - char *pCmd; +#if defined ( __linux__ ) || defined ( __APPLE__ ) +bool Q_Exec( const char *cmd, char *cmdline, const char *execdir, bool bCreateConsole ){ + char fullcmd[2048]; + char *pCmd; #ifdef _DEBUG - printf("Q_Exec damnit\n"); + printf( "Q_Exec damnit\n" ); #endif - switch (fork()) - { - case -1: - return true; - break; - case 0: - // always concat the command on linux - if (cmd) - { - strcpy(fullcmd, cmd); - } - else - fullcmd[0] = '\0'; - if (cmdline) - { - strcat(fullcmd, " "); - strcat(fullcmd, cmdline); - } - pCmd = fullcmd; - while (*pCmd == ' ') - pCmd++; + switch ( fork() ) + { + case -1: + return true; + break; + case 0: + // always concat the command on linux + if ( cmd ) { + strcpy( fullcmd, cmd ); + } + else{ + fullcmd[0] = '\0'; + } + if ( cmdline ) { + strcat( fullcmd, " " ); + strcat( fullcmd, cmdline ); + } + pCmd = fullcmd; + while ( *pCmd == ' ' ) + pCmd++; #ifdef _DEBUG - printf("Running system...\n"); - printf("Command: %s\n", pCmd); + printf( "Running system...\n" ); + printf( "Command: %s\n", pCmd ); #endif - system( pCmd ); + system( pCmd ); #ifdef _DEBUG - printf ("system() returned\n"); + printf( "system() returned\n" ); #endif - _exit (0); - break; - } - return true; + _exit( 0 ); + break; + } + return true; } #endif #ifdef _WIN32 // NOTE TTimo windows is VERY nitpicky about the syntax in CreateProcess -bool Q_Exec(const char *cmd, char *cmdline, const char *execdir, bool bCreateConsole) -{ - PROCESS_INFORMATION ProcessInformation; - STARTUPINFO startupinfo = {0}; - DWORD dwCreationFlags; - GetStartupInfo (&startupinfo); - if (bCreateConsole) - dwCreationFlags = CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS; - else - dwCreationFlags = DETACHED_PROCESS | NORMAL_PRIORITY_CLASS; - const char *pCmd; - char *pCmdline; - pCmd = cmd; - if (pCmd) - { - while (*pCmd == ' ') - pCmd++; - } - pCmdline = cmdline; - if (pCmdline) - { - while (*pCmdline == ' ') - pCmdline++; - } - if (CreateProcess( - pCmd, - pCmdline, - NULL, - NULL, - FALSE, - dwCreationFlags, - NULL, - execdir, - &startupinfo, - &ProcessInformation - )) - return true; - return false; +bool Q_Exec( const char *cmd, char *cmdline, const char *execdir, bool bCreateConsole ){ + PROCESS_INFORMATION ProcessInformation; + STARTUPINFO startupinfo = {0}; + DWORD dwCreationFlags; + GetStartupInfo( &startupinfo ); + if ( bCreateConsole ) { + dwCreationFlags = CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS; + } + else{ + dwCreationFlags = DETACHED_PROCESS | NORMAL_PRIORITY_CLASS; + } + const char *pCmd; + char *pCmdline; + pCmd = cmd; + if ( pCmd ) { + while ( *pCmd == ' ' ) + pCmd++; + } + pCmdline = cmdline; + if ( pCmdline ) { + while ( *pCmdline == ' ' ) + pCmdline++; + } + if ( CreateProcess( + pCmd, + pCmdline, + NULL, + NULL, + FALSE, + dwCreationFlags, + NULL, + execdir, + &startupinfo, + &ProcessInformation + ) ) { + return true; + } + return false; } #endif #define MEM_BLOCKSIZE 4096 -void* qblockmalloc(size_t nSize) -{ - void *b; - // round up to threshold - int nAllocSize = nSize % MEM_BLOCKSIZE; - if ( nAllocSize > 0) - { - nSize += MEM_BLOCKSIZE - nAllocSize; - } - b = malloc(nSize + 1); - memset (b, 0, nSize); - return b; +void* qblockmalloc( size_t nSize ){ + void *b; + // round up to threshold + int nAllocSize = nSize % MEM_BLOCKSIZE; + if ( nAllocSize > 0 ) { + nSize += MEM_BLOCKSIZE - nAllocSize; + } + b = malloc( nSize + 1 ); + memset( b, 0, nSize ); + return b; } //++timo NOTE: can be replaced by g_malloc0(nSize+1) when moving to glib memory handling -void* qmalloc (size_t nSize) -{ - void *b; - b = malloc(nSize + 1); - memset (b, 0, nSize); - return b; +void* qmalloc( size_t nSize ){ + void *b; + b = malloc( nSize + 1 ); + memset( b, 0, nSize ); + return b; } /* -================ -Q_filelength -================ -*/ -int Q_filelength (FILE *f) -{ - int pos; - int end; - - pos = ftell (f); - fseek (f, 0, SEEK_END); - end = ftell (f); - fseek (f, pos, SEEK_SET); - - return end; + ================ + Q_filelength + ================ + */ +int Q_filelength( FILE *f ){ + int pos; + int end; + + pos = ftell( f ); + fseek( f, 0, SEEK_END ); + end = ftell( f ); + fseek( f, pos, SEEK_SET ); + + return end; } -void DefaultExtension (char *path, char *extension) -{ - char *src; +void DefaultExtension( char *path, char *extension ){ + char *src; // // if path doesn't have a .EXT, append extension // (extension should include the .) // - src = path + strlen(path) - 1; + src = path + strlen( path ) - 1; - while (*src != PATHSEPERATOR && src != path) - { - if (*src == '.') - return; // it has an extension - src--; - } + while ( *src != PATHSEPERATOR && src != path ) + { + if ( *src == '.' ) { + return; // it has an extension + } + src--; + } - strcat (path, extension); + strcat( path, extension ); } -void DefaultPath (char *path, char *basepath) -{ - char temp[128]; +void DefaultPath( char *path, char *basepath ){ + char temp[128]; - if (path[0] == PATHSEPERATOR) - return; // absolute path location - strcpy (temp,path); - strcpy (path,basepath); - strcat (path,temp); + if ( path[0] == PATHSEPERATOR ) { + return; // absolute path location + } + strcpy( temp,path ); + strcpy( path,basepath ); + strcat( path,temp ); } -void StripFilename (char *path) -{ - int length; +void StripFilename( char *path ){ + int length; - length = strlen(path)-1; - while (length > 0 && path[length] != PATHSEPERATOR) - length--; - path[length] = 0; + length = strlen( path ) - 1; + while ( length > 0 && path[length] != PATHSEPERATOR ) + length--; + path[length] = 0; } -void StripExtension (char *path) -{ - int length; - - length = strlen(path)-1; - while (length > 0 && path[length] != '.') - { - length--; - if (path[length] == '/') - return; // no extension - } - if (length) - path[length] = 0; +void StripExtension( char *path ){ + int length; + + length = strlen( path ) - 1; + while ( length > 0 && path[length] != '.' ) + { + length--; + if ( path[length] == '/' ) { + return; // no extension + } + } + if ( length ) { + path[length] = 0; + } } /* -==================== -Extract file parts -==================== -*/ -void ExtractFilePath (const char *path, char *dest) -{ - const char *src; + ==================== + Extract file parts + ==================== + */ +void ExtractFilePath( const char *path, char *dest ){ + 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 ExtractFileName (const char *path, char *dest) -{ - const char *src; +void ExtractFileName( const char *path, char *dest ){ + 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; } -inline const char* path_get_filename_start(const char* path) -{ - { - const char* last_forward_slash = strrchr(path, '/'); - if(last_forward_slash != NULL) - return last_forward_slash + 1; - } - - { - const char* last_backward_slash = strrchr(path, '\\'); - if(last_backward_slash != NULL) - return last_backward_slash + 1; - } - - return path; +inline const char* path_get_filename_start( const char* path ){ + { + const char* last_forward_slash = strrchr( path, '/' ); + if ( last_forward_slash != NULL ) { + return last_forward_slash + 1; + } + } + + { + const char* last_backward_slash = strrchr( path, '\\' ); + if ( last_backward_slash != NULL ) { + return last_backward_slash + 1; + } + } + + return path; } -inline unsigned int filename_get_base_length(const char* filename) -{ - const char* last_period = strrchr(filename, '.'); - return (last_period != NULL) ? last_period - filename : strlen(filename); +inline unsigned int filename_get_base_length( const char* filename ){ + const char* last_period = strrchr( filename, '.' ); + return ( last_period != NULL ) ? last_period - filename : strlen( filename ); } -void ExtractFileBase (const char *path, char *dest) -{ - const char* filename = path_get_filename_start(path); - unsigned int length = filename_get_base_length(filename); - strncpy(dest, filename, length); - dest[length] = '\0'; +void ExtractFileBase( const char *path, char *dest ){ + const char* filename = path_get_filename_start( path ); + unsigned int length = filename_get_base_length( filename ); + strncpy( dest, filename, length ); + dest[length] = '\0'; } -void ExtractFileExtension (const char *path, char *dest) -{ - const char *src; +void ExtractFileExtension( const char *path, char *dest ){ + 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--; - if (src == path) - { - *dest = 0; // no extension - return; - } - - strcpy (dest,src); + while ( src != path && *( src - 1 ) != '.' ) + src--; + if ( src == path ) { + *dest = 0; // no extension + return; + } + + strcpy( dest,src ); } -void ConvertDOSToUnixName( char *dst, const char *src ) -{ - while ( *src ) - { - if ( *src == '\\' ) - *dst = '/'; - else - *dst = *src; - dst++; src++; - } - *dst = 0; +void ConvertDOSToUnixName( char *dst, const char *src ){ + while ( *src ) + { + if ( *src == '\\' ) { + *dst = '/'; + } + else{ + *dst = *src; + } + dst++; src++; + } + *dst = 0; } -char* StrDup(char* pStr) -{ - if (pStr) - { - return strcpy(new char[strlen(pStr)+1], pStr); - } - return NULL; +char* StrDup( char* pStr ){ + if ( pStr ) { + return strcpy( new char[strlen( pStr ) + 1], pStr ); + } + return NULL; } -char* StrDup(const char* pStr) -{ - if (pStr) - { - return strcpy(new char[strlen(pStr)+1], pStr); - } - return NULL; +char* StrDup( const char* pStr ){ + if ( pStr ) { + return strcpy( new char[strlen( pStr ) + 1], pStr ); + } + return NULL; } -void CreateDirectoryPath (const char *path) { - char base[PATH_MAX]; - char *src; - char back; - - ExtractFilePath(path, base); - - src = base+1; - while (1) { - while (*src != '\0' && *src != '/' && *src != '\\') { - src++; - } - if (*src == '\0') { - break; - } - back = *src; *src = '\0'; - Q_mkdir(base, 0755); - *src = back; src++; - } +void CreateDirectoryPath( const char *path ) { + char base[PATH_MAX]; + char *src; + char back; + + ExtractFilePath( path, base ); + + src = base + 1; + while ( 1 ) { + while ( *src != '\0' && *src != '/' && *src != '\\' ) { + src++; + } + if ( *src == '\0' ) { + break; + } + back = *src; *src = '\0'; + Q_mkdir( base, 0755 ); + *src = back; src++; + } } /* -============================================================================ + ============================================================================ BYTE ORDER FUNCTIONS -============================================================================ -*/ + ============================================================================ + */ #ifdef _SGI_SOURCE - #define __BIG_ENDIAN__ + #define __BIG_ENDIAN__ #endif #ifdef __BIG_ENDIAN__ -short LittleShort (short l) -{ - byte b1,b2; +short LittleShort( short l ){ + byte b1,b2; - b1 = l&255; - b2 = (l>>8)&255; + b1 = l & 255; + b2 = ( l >> 8 ) & 255; - return(b1<<8) + b2; + return ( b1 << 8 ) + b2; } -short BigShort (short l) -{ - return l; +short BigShort( short l ){ + return l; } -int LittleLong (int l) -{ - byte b1,b2,b3,b4; +int LittleLong( int l ){ + byte b1,b2,b3,b4; - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; + b1 = l & 255; + b2 = ( l >> 8 ) & 255; + b3 = ( l >> 16 ) & 255; + b4 = ( l >> 24 ) & 255; - return((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; + return ( (int)b1 << 24 ) + ( (int)b2 << 16 ) + ( (int)b3 << 8 ) + b4; } -int BigLong (int l) -{ - return l; +int BigLong( int l ){ + return l; } -float LittleFloat (float l) -{ - union - { - byte b[4]; float f; - } in, out; +float LittleFloat( float l ){ + union + { + byte b[4]; float f; + } in, out; - in.f = l; - out.b[0] = in.b[3]; - out.b[1] = in.b[2]; - out.b[2] = in.b[1]; - out.b[3] = in.b[0]; + in.f = l; + out.b[0] = in.b[3]; + out.b[1] = in.b[2]; + out.b[2] = in.b[1]; + out.b[3] = in.b[0]; - return out.f; + return out.f; } -float BigFloat (float l) -{ - return l; +float BigFloat( float l ){ + return l; } #else -short BigShort (short l) -{ - byte b1,b2; +short BigShort( short l ){ + byte b1,b2; - b1 = l&255; - b2 = (l>>8)&255; + b1 = l & 255; + b2 = ( l >> 8 ) & 255; - return(b1<<8) + b2; + return ( b1 << 8 ) + b2; } -short LittleShort (short l) -{ - return l; +short LittleShort( short l ){ + return l; } -int BigLong (int l) -{ - byte b1,b2,b3,b4; +int BigLong( int l ){ + byte b1,b2,b3,b4; - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; + b1 = l & 255; + b2 = ( l >> 8 ) & 255; + b3 = ( l >> 16 ) & 255; + b4 = ( l >> 24 ) & 255; - return((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; + return ( (int)b1 << 24 ) + ( (int)b2 << 16 ) + ( (int)b3 << 8 ) + b4; } -int LittleLong (int l) -{ - return l; +int LittleLong( int l ){ + return l; } -float BigFloat (float l) -{ - union - { - byte b[4]; float f; - } in, out; +float BigFloat( float l ){ + union + { + byte b[4]; float f; + } in, out; - in.f = l; - out.b[0] = in.b[3]; - out.b[1] = in.b[2]; - out.b[2] = in.b[1]; - out.b[3] = in.b[0]; + in.f = l; + out.b[0] = in.b[3]; + out.b[1] = in.b[2]; + out.b[2] = in.b[1]; + out.b[3] = in.b[0]; - return out.f; + return out.f; } -float LittleFloat (float l) -{ - return l; +float LittleFloat( float l ){ + return l; } #endif diff --git a/libs/ddslib.h b/libs/ddslib.h index 3f5f124c..4961f6ef 100644 --- a/libs/ddslib.h +++ b/libs/ddslib.h @@ -1,39 +1,39 @@ /* ----------------------------------------------------------------------------- -DDS Library + DDS Library -Based on code from Nvidia's DDS example: -http://www.nvidia.com/object/dxtc_decompression_code.html + Based on code from Nvidia's DDS example: + http://www.nvidia.com/object/dxtc_decompression_code.html -Copyright (c) 2003 Randy Reddig -All rights reserved. + Copyright (c) 2003 Randy Reddig + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -72,86 +72,86 @@ ddsPF_t; /* 16bpp stuff */ -#define DDS_LOW_5 0x001F; -#define DDS_MID_6 0x07E0; -#define DDS_HIGH_5 0xF800; -#define DDS_MID_555 0x03E0; -#define DDS_HI_555 0x7C00; +#define DDS_LOW_5 0x001F; +#define DDS_MID_6 0x07E0; +#define DDS_HIGH_5 0xF800; +#define DDS_MID_555 0x03E0; +#define DDS_HI_555 0x7C00; /* structures */ typedef struct ddsColorKey_s { - unsigned int colorSpaceLowValue; - unsigned int colorSpaceHighValue; -} + unsigned int colorSpaceLowValue; + unsigned int colorSpaceHighValue; +} ddsColorKey_t; typedef struct ddsCaps_s { - unsigned int caps1; - unsigned int caps2; - unsigned int caps3; - unsigned int caps4; -} + unsigned int caps1; + unsigned int caps2; + unsigned int caps3; + unsigned int caps4; +} ddsCaps_t; typedef struct ddsMultiSampleCaps_s { - unsigned short flipMSTypes; - unsigned short bltMSTypes; + unsigned short flipMSTypes; + unsigned short bltMSTypes; } ddsMultiSampleCaps_t; typedef struct ddsPixelFormat_s { - unsigned int size; - unsigned int flags; - unsigned int fourCC; + unsigned int size; + unsigned int flags; + unsigned int fourCC; union { - unsigned int rgbBitCount; - unsigned int yuvBitCount; - unsigned int zBufferBitDepth; - unsigned int alphaBitDepth; - unsigned int luminanceBitCount; - unsigned int bumpBitCount; - unsigned int privateFormatBitCount; + unsigned int rgbBitCount; + unsigned int yuvBitCount; + unsigned int zBufferBitDepth; + unsigned int alphaBitDepth; + unsigned int luminanceBitCount; + unsigned int bumpBitCount; + unsigned int privateFormatBitCount; }; union { - unsigned int rBitMask; - unsigned int yBitMask; - unsigned int stencilBitDepth; - unsigned int luminanceBitMask; - unsigned int bumpDuBitMask; - unsigned int operations; + unsigned int rBitMask; + unsigned int yBitMask; + unsigned int stencilBitDepth; + unsigned int luminanceBitMask; + unsigned int bumpDuBitMask; + unsigned int operations; }; union { - unsigned int gBitMask; - unsigned int uBitMask; - unsigned int zBitMask; - unsigned int bumpDvBitMask; - ddsMultiSampleCaps_t multiSampleCaps; + unsigned int gBitMask; + unsigned int uBitMask; + unsigned int zBitMask; + unsigned int bumpDvBitMask; + ddsMultiSampleCaps_t multiSampleCaps; }; union { - unsigned int bBitMask; - unsigned int vBitMask; - unsigned int stencilBitMask; - unsigned int bumpLuminanceBitMask; + unsigned int bBitMask; + unsigned int vBitMask; + unsigned int stencilBitMask; + unsigned int bumpLuminanceBitMask; }; union { - unsigned int rgbAlphaBitMask; - unsigned int yuvAlphaBitMask; - unsigned int luminanceAlphaBitMask; - unsigned int rgbZBitMask; - unsigned int yuvZBitMask; + unsigned int rgbAlphaBitMask; + unsigned int yuvAlphaBitMask; + unsigned int luminanceAlphaBitMask; + unsigned int rgbZBitMask; + unsigned int yuvZBitMask; }; } ddsPixelFormat_t; @@ -160,85 +160,85 @@ ddsPixelFormat_t; typedef struct ddsBuffer_s { /* magic: 'dds ' */ - char magic[ 4 ]; - + char magic[ 4 ]; + /* directdraw surface */ - unsigned int size; - unsigned int flags; - unsigned int height; - unsigned int width; + unsigned int size; + unsigned int flags; + unsigned int height; + unsigned int width; union { - int pitch; - unsigned int linearSize; + int pitch; + unsigned int linearSize; }; - unsigned int backBufferCount; + unsigned int backBufferCount; union { - unsigned int mipMapCount; - unsigned int refreshRate; - unsigned int srcVBHandle; + unsigned int mipMapCount; + unsigned int refreshRate; + unsigned int srcVBHandle; }; - unsigned int alphaBitDepth; - unsigned int reserved; - void *surface; + unsigned int alphaBitDepth; + unsigned int reserved; + void *surface; union { - ddsColorKey_t ckDestOverlay; - unsigned int emptyFaceColor; + ddsColorKey_t ckDestOverlay; + unsigned int emptyFaceColor; }; - ddsColorKey_t ckDestBlt; - ddsColorKey_t ckSrcOverlay; - ddsColorKey_t ckSrcBlt; + ddsColorKey_t ckDestBlt; + ddsColorKey_t ckSrcOverlay; + ddsColorKey_t ckSrcBlt; union { - ddsPixelFormat_t pixelFormat; - unsigned int fvf; + ddsPixelFormat_t pixelFormat; + unsigned int fvf; }; - ddsCaps_t ddsCaps; - unsigned int textureStage; - + ddsCaps_t ddsCaps; + unsigned int textureStage; + /* data (Varying size) */ - unsigned char data[ 4 ]; + unsigned char data[ 4 ]; } ddsBuffer_t; typedef struct ddsColorBlock_s { - unsigned short colors[ 2 ]; - unsigned char row[ 4 ]; + unsigned short colors[ 2 ]; + unsigned char row[ 4 ]; } ddsColorBlock_t; typedef struct ddsAlphaBlockExplicit_s { - unsigned short row[ 4 ]; + unsigned short row[ 4 ]; } ddsAlphaBlockExplicit_t; typedef struct ddsAlphaBlock3BitLinear_s { - unsigned char alpha0; - unsigned char alpha1; - unsigned char stuff[ 6 ]; + unsigned char alpha0; + unsigned char alpha1; + unsigned char stuff[ 6 ]; } ddsAlphaBlock3BitLinear_t; typedef struct ddsColor_s { - unsigned char r, g, b, a; + unsigned char r, g, b, a; } ddsColor_t; /* public functions */ -int DDSGetInfo( ddsBuffer_t *dds, int *width, int *height, ddsPF_t *pf ); -int DDSDecompress( ddsBuffer_t *dds, unsigned char *pixels ); +int DDSGetInfo( ddsBuffer_t *dds, int *width, int *height, ddsPF_t *pf ); +int DDSDecompress( ddsBuffer_t *dds, unsigned char *pixels ); diff --git a/libs/ddslib/ddslib.c b/libs/ddslib/ddslib.c index bea6fb36..43a1f913 100644 --- a/libs/ddslib/ddslib.c +++ b/libs/ddslib/ddslib.c @@ -1,39 +1,39 @@ /* ----------------------------------------------------------------------------- -DDS Library + DDS Library -Based on code from Nvidia's DDS example: -http://www.nvidia.com/object/dxtc_decompression_code.html + Based on code from Nvidia's DDS example: + http://www.nvidia.com/object/dxtc_decompression_code.html -Copyright (c) 2003 Randy Reddig -All rights reserved. + Copyright (c) 2003 Randy Reddig + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -50,147 +50,152 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* endian tomfoolery */ typedef union { - float f; - char c[ 4 ]; + float f; + char c[ 4 ]; } floatSwapUnion; #ifndef __BIG_ENDIAN__ #ifdef _SGI_SOURCE - #define __BIG_ENDIAN__ + #define __BIG_ENDIAN__ #endif #endif #ifdef __BIG_ENDIAN__ - int DDSBigLong( int src ) { return src; } - short DDSBigShort( short src ) { return src; } - float DDSBigFloat( float src ) { return src; } +int DDSBigLong( int src ) { return src; } +short DDSBigShort( short src ) { return src; } +float DDSBigFloat( float src ) { return src; } - int DDSLittleLong( int src ) - { - return ((src & 0xFF000000) >> 24) | - ((src & 0x00FF0000) >> 8) | - ((src & 0x0000FF00) << 8) | - ((src & 0x000000FF) << 24); - } +int DDSLittleLong( int src ){ + return ( ( src & 0xFF000000 ) >> 24 ) | + ( ( src & 0x00FF0000 ) >> 8 ) | + ( ( src & 0x0000FF00 ) << 8 ) | + ( ( src & 0x000000FF ) << 24 ); +} - short DDSLittleShort( short src ) - { - return ((src & 0xFF00) >> 8) | - ((src & 0x00FF) << 8); - } +short DDSLittleShort( short src ){ + return ( ( src & 0xFF00 ) >> 8 ) | + ( ( src & 0x00FF ) << 8 ); +} - float DDSLittleFloat( float src ) - { - floatSwapUnion in,out; - in.f = src; - out.c[ 0 ] = in.c[ 3 ]; - out.c[ 1 ] = in.c[ 2 ]; - out.c[ 2 ] = in.c[ 1 ]; - out.c[ 3 ] = in.c[ 0 ]; - return out.f; - } +float DDSLittleFloat( float src ){ + floatSwapUnion in,out; + in.f = src; + out.c[ 0 ] = in.c[ 3 ]; + out.c[ 1 ] = in.c[ 2 ]; + out.c[ 2 ] = in.c[ 1 ]; + out.c[ 3 ] = in.c[ 0 ]; + return out.f; +} #else /*__BIG_ENDIAN__*/ - int DDSLittleLong( int src ) { return src; } - short DDSLittleShort( short src ) { return src; } - float DDSLittleFloat( float src ) { return src; } - - int DDSBigLong( int src ) - { - return ((src & 0xFF000000) >> 24) | - ((src & 0x00FF0000) >> 8) | - ((src & 0x0000FF00) << 8) | - ((src & 0x000000FF) << 24); - } - - short DDSBigShort( short src ) - { - return ((src & 0xFF00) >> 8) | - ((src & 0x00FF) << 8); - } - - float DDSBigFloat( float src ) - { - floatSwapUnion in,out; - in.f = src; - out.c[ 0 ] = in.c[ 3 ]; - out.c[ 1 ] = in.c[ 2 ]; - out.c[ 2 ] = in.c[ 1 ]; - out.c[ 3 ] = in.c[ 0 ]; - return out.f; - } +int DDSLittleLong( int src ) { return src; } +short DDSLittleShort( short src ) { return src; } +float DDSLittleFloat( float src ) { return src; } + +int DDSBigLong( int src ){ + return ( ( src & 0xFF000000 ) >> 24 ) | + ( ( src & 0x00FF0000 ) >> 8 ) | + ( ( src & 0x0000FF00 ) << 8 ) | + ( ( src & 0x000000FF ) << 24 ); +} + +short DDSBigShort( short src ){ + return ( ( src & 0xFF00 ) >> 8 ) | + ( ( src & 0x00FF ) << 8 ); +} + +float DDSBigFloat( float src ){ + floatSwapUnion in,out; + in.f = src; + out.c[ 0 ] = in.c[ 3 ]; + out.c[ 1 ] = in.c[ 2 ]; + out.c[ 2 ] = in.c[ 1 ]; + out.c[ 3 ] = in.c[ 0 ]; + return out.f; +} #endif /*__BIG_ENDIAN__*/ /* -DDSDecodePixelFormat() -determines which pixel format the dds texture is in -*/ + DDSDecodePixelFormat() + determines which pixel format the dds texture is in + */ + +static void DDSDecodePixelFormat( ddsBuffer_t *dds, ddsPF_t *pf ){ + unsigned int fourCC; + -static void DDSDecodePixelFormat( ddsBuffer_t *dds, ddsPF_t *pf ) -{ - unsigned int fourCC; - - /* dummy check */ - if( dds == NULL || pf == NULL ) + if ( dds == NULL || pf == NULL ) { return; - + } + /* extract fourCC */ fourCC = dds->pixelFormat.fourCC; - + /* test it */ - if( fourCC == 0 ) + if ( fourCC == 0 ) { *pf = DDS_PF_ARGB8888; - else if( fourCC == *((unsigned int*) "DXT1") ) + } + else if ( fourCC == *( (unsigned int*) "DXT1" ) ) { *pf = DDS_PF_DXT1; - else if( fourCC == *((unsigned int*) "DXT2") ) + } + else if ( fourCC == *( (unsigned int*) "DXT2" ) ) { *pf = DDS_PF_DXT2; - else if( fourCC == *((unsigned int*) "DXT3") ) + } + else if ( fourCC == *( (unsigned int*) "DXT3" ) ) { *pf = DDS_PF_DXT3; - else if( fourCC == *((unsigned int*) "DXT4") ) + } + else if ( fourCC == *( (unsigned int*) "DXT4" ) ) { *pf = DDS_PF_DXT4; - else if( fourCC == *((unsigned int*) "DXT5") ) + } + else if ( fourCC == *( (unsigned int*) "DXT5" ) ) { *pf = DDS_PF_DXT5; - else + } + else{ *pf = DDS_PF_UNKNOWN; + } } /* -DDSGetInfo() -extracts relevant info from a dds texture, returns 0 on success -*/ + DDSGetInfo() + extracts relevant info from a dds texture, returns 0 on success + */ -int DDSGetInfo( ddsBuffer_t *dds, int *width, int *height, ddsPF_t *pf ) -{ +int DDSGetInfo( ddsBuffer_t *dds, int *width, int *height, ddsPF_t *pf ){ /* dummy test */ - if( dds == NULL ) + if ( dds == NULL ) { return -1; - + } + /* test dds header */ - if( *((int*) dds->magic) != *((int*) "DDS ") ) + if ( *( (int*) dds->magic ) != *( (int*) "DDS " ) ) { return -1; - if( DDSLittleLong( dds->size ) != 124 ) + } + if ( DDSLittleLong( dds->size ) != 124 ) { return -1; - + } + /* extract width and height */ - if( width != NULL ) + if ( width != NULL ) { *width = DDSLittleLong( dds->width ); - if( height != NULL ) + } + if ( height != NULL ) { *height = DDSLittleLong( dds->height ); - + } + /* get pixel format */ DDSDecodePixelFormat( dds, pf ); - + /* return ok */ return 0; } @@ -198,91 +203,89 @@ int DDSGetInfo( ddsBuffer_t *dds, int *width, int *height, ddsPF_t *pf ) /* -DDSGetColorBlockColors() -extracts colors from a dds color block -*/ + DDSGetColorBlockColors() + extracts colors from a dds color block + */ + +static void DDSGetColorBlockColors( ddsColorBlock_t *block, ddsColor_t colors[ 4 ] ){ + unsigned short word; -static void DDSGetColorBlockColors( ddsColorBlock_t *block, ddsColor_t colors[ 4 ] ) -{ - unsigned short word; - /* color 0 */ word = DDSLittleShort( block->colors[ 0 ] ); colors[ 0 ].a = 0xff; - + /* extract rgb bits */ colors[ 0 ].b = (unsigned char) word; colors[ 0 ].b <<= 3; - colors[ 0 ].b |= (colors[ 0 ].b >> 5); + colors[ 0 ].b |= ( colors[ 0 ].b >> 5 ); word >>= 5; colors[ 0 ].g = (unsigned char) word; colors[ 0 ].g <<= 2; - colors[ 0 ].g |= (colors[ 0 ].g >> 5); + colors[ 0 ].g |= ( colors[ 0 ].g >> 5 ); word >>= 6; colors[ 0 ].r = (unsigned char) word; colors[ 0 ].r <<= 3; - colors[ 0 ].r |= (colors[ 0 ].r >> 5); + colors[ 0 ].r |= ( colors[ 0 ].r >> 5 ); /* same for color 1 */ word = DDSLittleShort( block->colors[ 1 ] ); colors[ 1 ].a = 0xff; - + /* extract rgb bits */ colors[ 1 ].b = (unsigned char) word; colors[ 1 ].b <<= 3; - colors[ 1 ].b |= (colors[ 1 ].b >> 5); + colors[ 1 ].b |= ( colors[ 1 ].b >> 5 ); word >>= 5; colors[ 1 ].g = (unsigned char) word; colors[ 1 ].g <<= 2; - colors[ 1 ].g |= (colors[ 1 ].g >> 5); + colors[ 1 ].g |= ( colors[ 1 ].g >> 5 ); word >>= 6; colors[ 1 ].r = (unsigned char) word; colors[ 1 ].r <<= 3; - colors[ 1 ].r |= (colors[ 1 ].r >> 5); - + colors[ 1 ].r |= ( colors[ 1 ].r >> 5 ); + /* use this for all but the super-freak math method */ - if( block->colors[ 0 ] > block->colors[ 1 ] ) - { - /* four-color block: derive the other two colors. + if ( block->colors[ 0 ] > block->colors[ 1 ] ) { + /* four-color block: derive the other two colors. 00 = color 0, 01 = color 1, 10 = color 2, 11 = color 3 - these two bit codes correspond to the 2-bit fields + these two bit codes correspond to the 2-bit fields stored in the 64-bit block. */ - word = ((unsigned short) colors[ 0 ].r * 2 + (unsigned short) colors[ 1 ].r ) / 3; - /* no +1 for rounding */ - /* as bits have been shifted to 888 */ + word = ( (unsigned short) colors[ 0 ].r * 2 + (unsigned short) colors[ 1 ].r ) / 3; + /* no +1 for rounding */ + /* as bits have been shifted to 888 */ colors[ 2 ].r = (unsigned char) word; - word = ((unsigned short) colors[ 0 ].g * 2 + (unsigned short) colors[ 1 ].g) / 3; + word = ( (unsigned short) colors[ 0 ].g * 2 + (unsigned short) colors[ 1 ].g ) / 3; colors[ 2 ].g = (unsigned char) word; - word = ((unsigned short) colors[ 0 ].b * 2 + (unsigned short) colors[ 1 ].b) / 3; + word = ( (unsigned short) colors[ 0 ].b * 2 + (unsigned short) colors[ 1 ].b ) / 3; colors[ 2 ].b = (unsigned char) word; colors[ 2 ].a = 0xff; - word = ((unsigned short) colors[ 0 ].r + (unsigned short) colors[ 1 ].r * 2) / 3; + word = ( (unsigned short) colors[ 0 ].r + (unsigned short) colors[ 1 ].r * 2 ) / 3; colors[ 3 ].r = (unsigned char) word; - word = ((unsigned short) colors[ 0 ].g + (unsigned short) colors[ 1 ].g * 2) / 3; + word = ( (unsigned short) colors[ 0 ].g + (unsigned short) colors[ 1 ].g * 2 ) / 3; colors[ 3 ].g = (unsigned char) word; - word = ((unsigned short) colors[ 0 ].b + (unsigned short) colors[ 1 ].b * 2) / 3; + word = ( (unsigned short) colors[ 0 ].b + (unsigned short) colors[ 1 ].b * 2 ) / 3; colors[ 3 ].b = (unsigned char) word; colors[ 3 ].a = 0xff; } else { /* three-color block: derive the other color. - 00 = color 0, 01 = color 1, 10 = color 2, + 00 = color 0, 01 = color 1, 10 = color 2, 11 = transparent. - These two bit codes correspond to the 2-bit fields + These two bit codes correspond to the 2-bit fields stored in the 64-bit block */ - word = ((unsigned short) colors[ 0 ].r + (unsigned short) colors[ 1 ].r) / 2; + word = ( (unsigned short) colors[ 0 ].r + (unsigned short) colors[ 1 ].r ) / 2; colors[ 2 ].r = (unsigned char) word; - word = ((unsigned short) colors[ 0 ].g + (unsigned short) colors[ 1 ].g) / 2; + word = ( (unsigned short) colors[ 0 ].g + (unsigned short) colors[ 1 ].g ) / 2; colors[ 2 ].g = (unsigned char) word; - word = ((unsigned short) colors[ 0 ].b + (unsigned short) colors[ 1 ].b) / 2; + word = ( (unsigned short) colors[ 0 ].b + (unsigned short) colors[ 1 ].b ) / 2; colors[ 2 ].b = (unsigned char) word; colors[ 2 ].a = 0xff; - + /* random color to indicate alpha */ colors[ 3 ].r = 0x00; colors[ 3 ].g = 0xff; @@ -294,56 +297,55 @@ static void DDSGetColorBlockColors( ddsColorBlock_t *block, ddsColor_t colors[ 4 /* -DDSDecodeColorBlock() -decodes a dds color block -fixme: make endian-safe -*/ + DDSDecodeColorBlock() + decodes a dds color block + fixme: make endian-safe + */ + +static void DDSDecodeColorBlock( unsigned int *pixel, ddsColorBlock_t *block, int width, unsigned int colors[ 4 ] ){ + int r, n; + unsigned int bits; + unsigned int masks[] = { 3, 12, 3 << 4, 3 << 6 }; /* bit masks = 00000011, 00001100, 00110000, 11000000 */ + int shift[] = { 0, 2, 4, 6 }; + -static void DDSDecodeColorBlock( unsigned int *pixel, ddsColorBlock_t *block, int width, unsigned int colors[ 4 ] ) -{ - int r, n; - unsigned int bits; - unsigned int masks[] = { 3, 12, 3 << 4, 3 << 6 }; /* bit masks = 00000011, 00001100, 00110000, 11000000 */ - int shift[] = { 0, 2, 4, 6 }; - - /* r steps through lines in y */ - for( r = 0; r < 4; r++, pixel += (width - 4) ) /* no width * 4 as unsigned int ptr inc will * 4 */ + for ( r = 0; r < 4; r++, pixel += ( width - 4 ) ) /* no width * 4 as unsigned int ptr inc will * 4 */ { /* width * 4 bytes per pixel per line, each j dxtc row is 4 lines of pixels */ /* n steps through pixels */ - for( n = 0; n < 4; n++ ) + for ( n = 0; n < 4; n++ ) { bits = block->row[ r ] & masks[ n ]; bits >>= shift[ n ]; - switch( bits ) + switch ( bits ) { - case 0: - *pixel = colors[ 0 ]; - pixel++; - break; - - case 1: - *pixel = colors[ 1 ]; - pixel++; - break; - - case 2: - *pixel = colors[ 2 ]; - pixel++; - break; - - case 3: - *pixel = colors[ 3 ]; - pixel++; - break; - - default: - /* invalid */ - pixel++; - break; + case 0: + *pixel = colors[ 0 ]; + pixel++; + break; + + case 1: + *pixel = colors[ 1 ]; + pixel++; + break; + + case 2: + *pixel = colors[ 2 ]; + pixel++; + break; + + case 3: + *pixel = colors[ 3 ]; + pixel++; + break; + + default: + /* invalid */ + pixel++; + break; } } } @@ -352,37 +354,36 @@ static void DDSDecodeColorBlock( unsigned int *pixel, ddsColorBlock_t *block, in /* -DDSDecodeAlphaExplicit() -decodes a dds explicit alpha block -*/ - -static void DDSDecodeAlphaExplicit( unsigned int *pixel, ddsAlphaBlockExplicit_t *alphaBlock, int width, unsigned int alphaZero ) -{ - int row, pix; - unsigned short word; - ddsColor_t color; - - + DDSDecodeAlphaExplicit() + decodes a dds explicit alpha block + */ + +static void DDSDecodeAlphaExplicit( unsigned int *pixel, ddsAlphaBlockExplicit_t *alphaBlock, int width, unsigned int alphaZero ){ + int row, pix; + unsigned short word; + ddsColor_t color; + + /* clear color */ color.r = 0; color.g = 0; color.b = 0; - + /* walk rows */ - for( row = 0; row < 4; row++, pixel += (width - 4) ) + for ( row = 0; row < 4; row++, pixel += ( width - 4 ) ) { word = DDSLittleShort( alphaBlock->row[ row ] ); - + /* walk pixels */ - for( pix = 0; pix < 4; pix++ ) + for ( pix = 0; pix < 4; pix++ ) { /* zero the alpha bits of image pixel */ *pixel &= alphaZero; color.a = word & 0x000F; - color.a = color.a | (color.a << 4); - *pixel |= *((unsigned int*) &color); - word >>= 4; /* move next bits to lowest 4 */ - pixel++; /* move to next pixel in the row */ + color.a = color.a | ( color.a << 4 ); + *pixel |= *( (unsigned int*) &color ); + word >>= 4; /* move next bits to lowest 4 */ + pixel++; /* move to next pixel in the row */ } } @@ -391,92 +392,90 @@ static void DDSDecodeAlphaExplicit( unsigned int *pixel, ddsAlphaBlockExplicit_t /* -DDSDecodeAlpha3BitLinear() -decodes interpolated alpha block -*/ + DDSDecodeAlpha3BitLinear() + decodes interpolated alpha block + */ + +static void DDSDecodeAlpha3BitLinear( unsigned int *pixel, ddsAlphaBlock3BitLinear_t *alphaBlock, int width, unsigned int alphaZero ){ + + int row, pix; + unsigned int stuff; + unsigned char bits[ 4 ][ 4 ]; + unsigned short alphas[ 8 ]; + ddsColor_t aColors[ 4 ][ 4 ]; + -static void DDSDecodeAlpha3BitLinear( unsigned int *pixel, ddsAlphaBlock3BitLinear_t *alphaBlock, int width, unsigned int alphaZero ) -{ - - int row, pix; - unsigned int stuff; - unsigned char bits[ 4 ][ 4 ]; - unsigned short alphas[ 8 ]; - ddsColor_t aColors[ 4 ][ 4 ]; - - /* get initial alphas */ alphas[ 0 ] = alphaBlock->alpha0; alphas[ 1 ] = alphaBlock->alpha1; - + /* 8-alpha block */ - if( alphas[ 0 ] > alphas[ 1 ] ) - { + if ( alphas[ 0 ] > alphas[ 1 ] ) { /* 000 = alpha_0, 001 = alpha_1, others are interpolated */ - alphas[ 2 ] = ( 6 * alphas[ 0 ] + alphas[ 1 ]) / 7; /* bit code 010 */ - alphas[ 3 ] = ( 5 * alphas[ 0 ] + 2 * alphas[ 1 ]) / 7; /* bit code 011 */ - alphas[ 4 ] = ( 4 * alphas[ 0 ] + 3 * alphas[ 1 ]) / 7; /* bit code 100 */ - alphas[ 5 ] = ( 3 * alphas[ 0 ] + 4 * alphas[ 1 ]) / 7; /* bit code 101 */ - alphas[ 6 ] = ( 2 * alphas[ 0 ] + 5 * alphas[ 1 ]) / 7; /* bit code 110 */ - alphas[ 7 ] = ( alphas[ 0 ] + 6 * alphas[ 1 ]) / 7; /* bit code 111 */ + alphas[ 2 ] = ( 6 * alphas[ 0 ] + alphas[ 1 ] ) / 7; /* bit code 010 */ + alphas[ 3 ] = ( 5 * alphas[ 0 ] + 2 * alphas[ 1 ] ) / 7; /* bit code 011 */ + alphas[ 4 ] = ( 4 * alphas[ 0 ] + 3 * alphas[ 1 ] ) / 7; /* bit code 100 */ + alphas[ 5 ] = ( 3 * alphas[ 0 ] + 4 * alphas[ 1 ] ) / 7; /* bit code 101 */ + alphas[ 6 ] = ( 2 * alphas[ 0 ] + 5 * alphas[ 1 ] ) / 7; /* bit code 110 */ + alphas[ 7 ] = ( alphas[ 0 ] + 6 * alphas[ 1 ] ) / 7; /* bit code 111 */ } - + /* 6-alpha block */ else - { + { /* 000 = alpha_0, 001 = alpha_1, others are interpolated */ - alphas[ 2 ] = (4 * alphas[ 0 ] + alphas[ 1 ]) / 5; /* bit code 010 */ - alphas[ 3 ] = (3 * alphas[ 0 ] + 2 * alphas[ 1 ]) / 5; /* bit code 011 */ - alphas[ 4 ] = (2 * alphas[ 0 ] + 3 * alphas[ 1 ]) / 5; /* bit code 100 */ - alphas[ 5 ] = ( alphas[ 0 ] + 4 * alphas[ 1 ]) / 5; /* bit code 101 */ - alphas[ 6 ] = 0; /* bit code 110 */ - alphas[ 7 ] = 255; /* bit code 111 */ + alphas[ 2 ] = ( 4 * alphas[ 0 ] + alphas[ 1 ] ) / 5; /* bit code 010 */ + alphas[ 3 ] = ( 3 * alphas[ 0 ] + 2 * alphas[ 1 ] ) / 5; /* bit code 011 */ + alphas[ 4 ] = ( 2 * alphas[ 0 ] + 3 * alphas[ 1 ] ) / 5; /* bit code 100 */ + alphas[ 5 ] = ( alphas[ 0 ] + 4 * alphas[ 1 ] ) / 5; /* bit code 101 */ + alphas[ 6 ] = 0; /* bit code 110 */ + alphas[ 7 ] = 255; /* bit code 111 */ } - + /* decode 3-bit fields into array of 16 bytes with same value */ - + /* first two rows of 4 pixels each */ - stuff = *((unsigned int*) &(alphaBlock->stuff[ 0 ])); - - bits[ 0 ][ 0 ] = (unsigned char) (stuff & 0x00000007); + stuff = *( (unsigned int*) &( alphaBlock->stuff[ 0 ] ) ); + + bits[ 0 ][ 0 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 0 ][ 1 ] = (unsigned char) (stuff & 0x00000007); + bits[ 0 ][ 1 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 0 ][ 2 ] = (unsigned char) (stuff & 0x00000007); + bits[ 0 ][ 2 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 0 ][ 3 ] = (unsigned char) (stuff & 0x00000007); + bits[ 0 ][ 3 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 1 ][ 0 ] = (unsigned char) (stuff & 0x00000007); + bits[ 1 ][ 0 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 1 ][ 1 ] = (unsigned char) (stuff & 0x00000007); + bits[ 1 ][ 1 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 1 ][ 2 ] = (unsigned char) (stuff & 0x00000007); + bits[ 1 ][ 2 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 1 ][ 3 ] = (unsigned char) (stuff & 0x00000007); - + bits[ 1 ][ 3 ] = (unsigned char) ( stuff & 0x00000007 ); + /* last two rows */ - stuff = *((unsigned int*) &(alphaBlock->stuff[ 3 ])); /* last 3 bytes */ - - bits[ 2 ][ 0 ] = (unsigned char) (stuff & 0x00000007); + stuff = *( (unsigned int*) &( alphaBlock->stuff[ 3 ] ) ); /* last 3 bytes */ + + bits[ 2 ][ 0 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 2 ][ 1 ] = (unsigned char) (stuff & 0x00000007); + bits[ 2 ][ 1 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 2 ][ 2 ] = (unsigned char) (stuff & 0x00000007); + bits[ 2 ][ 2 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 2 ][ 3 ] = (unsigned char) (stuff & 0x00000007); + bits[ 2 ][ 3 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 3 ][ 0 ] = (unsigned char) (stuff & 0x00000007); + bits[ 3 ][ 0 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 3 ][ 1 ] = (unsigned char) (stuff & 0x00000007); + bits[ 3 ][ 1 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 3 ][ 2 ] = (unsigned char) (stuff & 0x00000007); + bits[ 3 ][ 2 ] = (unsigned char) ( stuff & 0x00000007 ); stuff >>= 3; - bits[ 3 ][ 3 ] = (unsigned char) (stuff & 0x00000007); - + bits[ 3 ][ 3 ] = (unsigned char) ( stuff & 0x00000007 ); + /* decode the codes into alpha values */ - for( row = 0; row < 4; row++ ) + for ( row = 0; row < 4; row++ ) { - for( pix=0; pix < 4; pix++ ) + for ( pix = 0; pix < 4; pix++ ) { aColors[ row ][ pix ].r = 0; aColors[ row ][ pix ].g = 0; @@ -484,17 +483,17 @@ static void DDSDecodeAlpha3BitLinear( unsigned int *pixel, ddsAlphaBlock3BitLine aColors[ row ][ pix ].a = (unsigned char) alphas[ bits[ row ][ pix ] ]; } } - + /* write out alpha values to the image bits */ - for( row = 0; row < 4; row++, pixel += width-4 ) + for ( row = 0; row < 4; row++, pixel += width - 4 ) { - for( pix = 0; pix < 4; pix++ ) + for ( pix = 0; pix < 4; pix++ ) { /* zero the alpha bits of image pixel */ *pixel &= alphaZero; - + /* or the bits into the prev. nulled alpha */ - *pixel |= *((unsigned int*) &(aColors[ row ][ pix ])); + *pixel |= *( (unsigned int*) &( aColors[ row ][ pix ] ) ); pixel++; } } @@ -503,37 +502,36 @@ static void DDSDecodeAlpha3BitLinear( unsigned int *pixel, ddsAlphaBlock3BitLine /* -DDSDecompressDXT1() -decompresses a dxt1 format texture -*/ + DDSDecompressDXT1() + decompresses a dxt1 format texture + */ + +static int DDSDecompressDXT1( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ){ + int x, y, xBlocks, yBlocks; + unsigned int *pixel; + ddsColorBlock_t *block; + ddsColor_t colors[ 4 ]; + -static int DDSDecompressDXT1( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ) -{ - int x, y, xBlocks, yBlocks; - unsigned int *pixel; - ddsColorBlock_t *block; - ddsColor_t colors[ 4 ]; - - /* setup */ xBlocks = width / 4; yBlocks = height / 4; - + /* walk y */ - for( y = 0; y < yBlocks; y++ ) + for ( y = 0; y < yBlocks; y++ ) { /* 8 bytes per block */ - block = (ddsColorBlock_t*) ((size_t) dds->data + y * xBlocks * 8); + block = (ddsColorBlock_t*) ( (size_t) dds->data + y * xBlocks * 8 ); /* walk x */ - for( x = 0; x < xBlocks; x++, block++ ) + for ( x = 0; x < xBlocks; x++, block++ ) { DDSGetColorBlockColors( block, colors ); - pixel = (unsigned int*) (pixels + x * 16 + (y * 4) * width * 4); + pixel = (unsigned int*) ( pixels + x * 16 + ( y * 4 ) * width * 4 ); DDSDecodeColorBlock( pixel, block, width, (unsigned int*) colors ); } } - + /* return ok */ return 0; } @@ -541,55 +539,54 @@ static int DDSDecompressDXT1( ddsBuffer_t *dds, int width, int height, unsigned /* -DDSDecompressDXT3() -decompresses a dxt3 format texture -*/ + DDSDecompressDXT3() + decompresses a dxt3 format texture + */ -static int DDSDecompressDXT3( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ) -{ - int x, y, xBlocks, yBlocks; - unsigned int *pixel, alphaZero; - ddsColorBlock_t *block; - ddsAlphaBlockExplicit_t *alphaBlock; - ddsColor_t colors[ 4 ]; +static int DDSDecompressDXT3( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ){ + int x, y, xBlocks, yBlocks; + unsigned int *pixel, alphaZero; + ddsColorBlock_t *block; + ddsAlphaBlockExplicit_t *alphaBlock; + ddsColor_t colors[ 4 ]; /* setup */ xBlocks = width / 4; yBlocks = height / 4; - + /* create zero alpha */ colors[ 0 ].a = 0; colors[ 0 ].r = 0xFF; colors[ 0 ].g = 0xFF; colors[ 0 ].b = 0xFF; - alphaZero = *((unsigned int*) &colors[ 0 ]); - + alphaZero = *( (unsigned int*) &colors[ 0 ] ); + /* walk y */ - for( y = 0; y < yBlocks; y++ ) + for ( y = 0; y < yBlocks; y++ ) { /* 8 bytes per block, 1 block for alpha, 1 block for color */ - block = (ddsColorBlock_t*) ((size_t) dds->data + y * xBlocks * 16); + block = (ddsColorBlock_t*) ( (size_t) dds->data + y * xBlocks * 16 ); /* walk x */ - for( x = 0; x < xBlocks; x++, block++ ) + for ( x = 0; x < xBlocks; x++, block++ ) { /* get alpha block */ alphaBlock = (ddsAlphaBlockExplicit_t*) block; - + /* get color block */ block++; DDSGetColorBlockColors( block, colors ); - + /* decode color block */ - pixel = (unsigned int*) (pixels + x * 16 + (y * 4) * width * 4); + pixel = (unsigned int*) ( pixels + x * 16 + ( y * 4 ) * width * 4 ); DDSDecodeColorBlock( pixel, block, width, (unsigned int*) colors ); - + /* overwrite alpha bits with alpha block */ DDSDecodeAlphaExplicit( pixel, alphaBlock, width, alphaZero ); } } - + /* return ok */ return 0; } @@ -597,55 +594,54 @@ static int DDSDecompressDXT3( ddsBuffer_t *dds, int width, int height, unsigned /* -DDSDecompressDXT5() -decompresses a dxt5 format texture -*/ + DDSDecompressDXT5() + decompresses a dxt5 format texture + */ -static int DDSDecompressDXT5( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ) -{ - int x, y, xBlocks, yBlocks; - unsigned int *pixel, alphaZero; - ddsColorBlock_t *block; - ddsAlphaBlock3BitLinear_t *alphaBlock; - ddsColor_t colors[ 4 ]; +static int DDSDecompressDXT5( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ){ + int x, y, xBlocks, yBlocks; + unsigned int *pixel, alphaZero; + ddsColorBlock_t *block; + ddsAlphaBlock3BitLinear_t *alphaBlock; + ddsColor_t colors[ 4 ]; /* setup */ xBlocks = width / 4; yBlocks = height / 4; - + /* create zero alpha */ colors[ 0 ].a = 0; colors[ 0 ].r = 0xFF; colors[ 0 ].g = 0xFF; colors[ 0 ].b = 0xFF; - alphaZero = *((unsigned int*) &colors[ 0 ]); - + alphaZero = *( (unsigned int*) &colors[ 0 ] ); + /* walk y */ - for( y = 0; y < yBlocks; y++ ) + for ( y = 0; y < yBlocks; y++ ) { /* 8 bytes per block, 1 block for alpha, 1 block for color */ - block = (ddsColorBlock_t*) ((size_t) dds->data + y * xBlocks * 16); + block = (ddsColorBlock_t*) ( (size_t) dds->data + y * xBlocks * 16 ); /* walk x */ - for( x = 0; x < xBlocks; x++, block++ ) + for ( x = 0; x < xBlocks; x++, block++ ) { /* get alpha block */ alphaBlock = (ddsAlphaBlock3BitLinear_t*) block; - + /* get color block */ block++; DDSGetColorBlockColors( block, colors ); - + /* decode color block */ - pixel = (unsigned int*) (pixels + x * 16 + (y * 4) * width * 4); + pixel = (unsigned int*) ( pixels + x * 16 + ( y * 4 ) * width * 4 ); DDSDecodeColorBlock( pixel, block, width, (unsigned int*) colors ); - + /* overwrite alpha bits with alpha block */ DDSDecodeAlpha3BitLinear( pixel, alphaBlock, width, alphaZero ); } } - + /* return ok */ return 0; } @@ -653,18 +649,17 @@ static int DDSDecompressDXT5( ddsBuffer_t *dds, int width, int height, unsigned /* -DDSDecompressDXT2() -decompresses a dxt2 format texture (fixme: un-premultiply alpha) -*/ + DDSDecompressDXT2() + decompresses a dxt2 format texture (fixme: un-premultiply alpha) + */ + +static int DDSDecompressDXT2( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ){ + int r; + -static int DDSDecompressDXT2( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ) -{ - int r; - - /* decompress dxt3 first */ r = DDSDecompressDXT3( dds, width, height, pixels ); - + /* return to sender */ return r; } @@ -672,18 +667,17 @@ static int DDSDecompressDXT2( ddsBuffer_t *dds, int width, int height, unsigned /* -DDSDecompressDXT4() -decompresses a dxt4 format texture (fixme: un-premultiply alpha) -*/ + DDSDecompressDXT4() + decompresses a dxt4 format texture (fixme: un-premultiply alpha) + */ + +static int DDSDecompressDXT4( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ){ + int r; + -static int DDSDecompressDXT4( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ) -{ - int r; - - /* decompress dxt5 first */ r = DDSDecompressDXT5( dds, width, height, pixels ); - + /* return to sender */ return r; } @@ -691,25 +685,24 @@ static int DDSDecompressDXT4( ddsBuffer_t *dds, int width, int height, unsigned /* -DDSDecompressARGB8888() -decompresses an argb 8888 format texture -*/ + DDSDecompressARGB8888() + decompresses an argb 8888 format texture + */ + +static int DDSDecompressARGB8888( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ){ + int x, y; + unsigned char *in, *out; + -static int DDSDecompressARGB8888( ddsBuffer_t *dds, int width, int height, unsigned char *pixels ) -{ - int x, y; - unsigned char *in, *out; - - /* setup */ in = dds->data; out = pixels; - + /* walk y */ - for( y = 0; y < height; y++ ) + for ( y = 0; y < height; y++ ) { /* walk x */ - for( x = 0; x < width; x++ ) + for ( x = 0; x < width; x++ ) { *out++ = *in++; *out++ = *in++; @@ -717,7 +710,7 @@ static int DDSDecompressARGB8888( ddsBuffer_t *dds, int width, int height, unsig *out++ = *in++; } } - + /* return ok */ return 0; } @@ -725,57 +718,56 @@ static int DDSDecompressARGB8888( ddsBuffer_t *dds, int width, int height, unsig /* -DDSDecompress() -decompresses a dds texture into an rgba image buffer, returns 0 on success -*/ + DDSDecompress() + decompresses a dds texture into an rgba image buffer, returns 0 on success + */ + +int DDSDecompress( ddsBuffer_t *dds, unsigned char *pixels ){ + int width, height, r; + ddsPF_t pf; + -int DDSDecompress( ddsBuffer_t *dds, unsigned char *pixels ) -{ - int width, height, r; - ddsPF_t pf; - - /* get dds info */ r = DDSGetInfo( dds, &width, &height, &pf ); - if( r ) + if ( r ) { return r; - + } + /* decompress */ - switch( pf ) + switch ( pf ) { - case DDS_PF_ARGB8888: - /* fixme: support other [a]rgb formats */ - r = DDSDecompressARGB8888( dds, width, height, pixels ); - break; - - case DDS_PF_DXT1: - r = DDSDecompressDXT1( dds, width, height, pixels ); - break; - - case DDS_PF_DXT2: - r = DDSDecompressDXT2( dds, width, height, pixels ); - break; - - case DDS_PF_DXT3: - r = DDSDecompressDXT3( dds, width, height, pixels ); - break; - - case DDS_PF_DXT4: - r = DDSDecompressDXT4( dds, width, height, pixels ); - break; - - case DDS_PF_DXT5: - r = DDSDecompressDXT5( dds, width, height, pixels ); - break; - - default: - case DDS_PF_UNKNOWN: - memset( pixels, 0xFF, width * height * 4 ); - r = -1; - break; + case DDS_PF_ARGB8888: + /* fixme: support other [a]rgb formats */ + r = DDSDecompressARGB8888( dds, width, height, pixels ); + break; + + case DDS_PF_DXT1: + r = DDSDecompressDXT1( dds, width, height, pixels ); + break; + + case DDS_PF_DXT2: + r = DDSDecompressDXT2( dds, width, height, pixels ); + break; + + case DDS_PF_DXT3: + r = DDSDecompressDXT3( dds, width, height, pixels ); + break; + + case DDS_PF_DXT4: + r = DDSDecompressDXT4( dds, width, height, pixels ); + break; + + case DDS_PF_DXT5: + r = DDSDecompressDXT5( dds, width, height, pixels ); + break; + + default: + case DDS_PF_UNKNOWN: + memset( pixels, 0xFF, width * height * 4 ); + r = -1; + break; } - + /* return to sender */ return r; } - diff --git a/libs/igl_to_qgl.h b/libs/igl_to_qgl.h index 633cf478..f5539ad1 100644 --- a/libs/igl_to_qgl.h +++ b/libs/igl_to_qgl.h @@ -1,28 +1,28 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 + */ /* -IGL tp QGL mapping header -Copyright (C) 2002 Splash Damage Ltd. -*/ + IGL tp QGL mapping header + Copyright (C) 2002 Splash Damage Ltd. + */ #ifndef _IGL_TO_QGL_H_ #define _IGL_TO_QGL_H_ @@ -39,768 +39,767 @@ enum VIEWTYPE {YZ, XZ, XY}; #define APIENTRY #endif -void ( APIENTRY * qglAccum )(GLenum op, GLfloat value); -void ( APIENTRY * qglAlphaFunc )(GLenum func, GLclampf ref); -GLboolean ( APIENTRY * qglAreTexturesResident )(GLsizei n, const GLuint *textures, GLboolean *residences); -void ( APIENTRY * qglArrayElement )(GLint i); -void ( APIENTRY * qglBegin )(GLenum mode); -void ( APIENTRY * qglBindTexture )(GLenum target, GLuint texture); -void ( APIENTRY * qglBitmap )(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); -void ( APIENTRY * qglBlendFunc )(GLenum sfactor, GLenum dfactor); -void ( APIENTRY * qglCallList )(GLuint list); -void ( APIENTRY * qglCallLists )(GLsizei n, GLenum type, const GLvoid *lists); -void ( APIENTRY * qglClear )(GLbitfield mask); -void ( APIENTRY * qglClearAccum )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void ( APIENTRY * qglClearColor )(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -void ( APIENTRY * qglClearDepth )(GLclampd depth); -void ( APIENTRY * qglClearIndex )(GLfloat c); -void ( APIENTRY * qglClearStencil )(GLint s); -void ( APIENTRY * qglClipPlane )(GLenum plane, const GLdouble *equation); -void ( APIENTRY * qglColor3b )(GLbyte red, GLbyte green, GLbyte blue); -void ( APIENTRY * qglColor3bv )(const GLbyte *v); -void ( APIENTRY * qglColor3d )(GLdouble red, GLdouble green, GLdouble blue); -void ( APIENTRY * qglColor3dv )(const GLdouble *v); -void ( APIENTRY * qglColor3f )(GLfloat red, GLfloat green, GLfloat blue); -void ( APIENTRY * qglColor3fv )(const GLfloat *v); -void ( APIENTRY * qglColor3i )(GLint red, GLint green, GLint blue); -void ( APIENTRY * qglColor3iv )(const GLint *v); -void ( APIENTRY * qglColor3s )(GLshort red, GLshort green, GLshort blue); -void ( APIENTRY * qglColor3sv )(const GLshort *v); -void ( APIENTRY * qglColor3ub )(GLubyte red, GLubyte green, GLubyte blue); -void ( APIENTRY * qglColor3ubv )(const GLubyte *v); -void ( APIENTRY * qglColor3ui )(GLuint red, GLuint green, GLuint blue); -void ( APIENTRY * qglColor3uiv )(const GLuint *v); -void ( APIENTRY * qglColor3us )(GLushort red, GLushort green, GLushort blue); -void ( APIENTRY * qglColor3usv )(const GLushort *v); -void ( APIENTRY * qglColor4b )(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void ( APIENTRY * qglColor4bv )(const GLbyte *v); -void ( APIENTRY * qglColor4d )(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void ( APIENTRY * qglColor4dv )(const GLdouble *v); -void ( APIENTRY * qglColor4f )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void ( APIENTRY * qglColor4fv )(const GLfloat *v); -void ( APIENTRY * qglColor4i )(GLint red, GLint green, GLint blue, GLint alpha); -void ( APIENTRY * qglColor4iv )(const GLint *v); -void ( APIENTRY * qglColor4s )(GLshort red, GLshort green, GLshort blue, GLshort alpha); -void ( APIENTRY * qglColor4sv )(const GLshort *v); -void ( APIENTRY * qglColor4ub )(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void ( APIENTRY * qglColor4ubv )(const GLubyte *v); -void ( APIENTRY * qglColor4ui )(GLuint red, GLuint green, GLuint blue, GLuint alpha); -void ( APIENTRY * qglColor4uiv )(const GLuint *v); -void ( APIENTRY * qglColor4us )(GLushort red, GLushort green, GLushort blue, GLushort alpha); -void ( APIENTRY * qglColor4usv )(const GLushort *v); -void ( APIENTRY * qglColorMask )(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void ( APIENTRY * qglColorMaterial )(GLenum face, GLenum mode); -void ( APIENTRY * qglColorPointer )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -void ( APIENTRY * qglCopyPixels )(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); -void ( APIENTRY * qglCopyTexImage1D )(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void ( APIENTRY * qglCopyTexImage2D )(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void ( APIENTRY * qglCopyTexSubImage1D )(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void ( APIENTRY * qglCopyTexSubImage2D )(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void ( APIENTRY * qglCullFace )(GLenum mode); -void ( APIENTRY * qglDeleteLists )(GLuint list, GLsizei range); -void ( APIENTRY * qglDeleteTextures )(GLsizei n, const GLuint *textures); -void ( APIENTRY * qglDepthFunc )(GLenum func); -void ( APIENTRY * qglDepthMask )(GLboolean flag); -void ( APIENTRY * qglDepthRange )(GLclampd zNear, GLclampd zFar); -void ( APIENTRY * qglDisable )(GLenum cap); -void ( APIENTRY * qglDisableClientState )(GLenum array); -void ( APIENTRY * qglDrawArrays )(GLenum mode, GLint first, GLsizei count); -void ( APIENTRY * qglDrawBuffer )(GLenum mode); -void ( APIENTRY * qglDrawElements )(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -void ( APIENTRY * qglDrawPixels )(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -void ( APIENTRY * qglEdgeFlag )(GLboolean flag); -void ( APIENTRY * qglEdgeFlagPointer )(GLsizei stride, const GLvoid *pointer); -void ( APIENTRY * qglEdgeFlagv )(const GLboolean *flag); -void ( APIENTRY * qglEnable )(GLenum cap); -void ( APIENTRY * qglEnableClientState )(GLenum array); -void ( APIENTRY * qglEnd )(void); -void ( APIENTRY * qglEndList )(void); -void ( APIENTRY * qglEvalCoord1d )(GLdouble u); -void ( APIENTRY * qglEvalCoord1dv )(const GLdouble *u); -void ( APIENTRY * qglEvalCoord1f )(GLfloat u); -void ( APIENTRY * qglEvalCoord1fv )(const GLfloat *u); -void ( APIENTRY * qglEvalCoord2d )(GLdouble u, GLdouble v); -void ( APIENTRY * qglEvalCoord2dv )(const GLdouble *u); -void ( APIENTRY * qglEvalCoord2f )(GLfloat u, GLfloat v); -void ( APIENTRY * qglEvalCoord2fv )(const GLfloat *u); -void ( APIENTRY * qglEvalMesh1 )(GLenum mode, GLint i1, GLint i2); -void ( APIENTRY * qglEvalMesh2 )(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void ( APIENTRY * qglEvalPoint1 )(GLint i); -void ( APIENTRY * qglEvalPoint2 )(GLint i, GLint j); -void ( APIENTRY * qglFeedbackBuffer )(GLsizei size, GLenum type, GLfloat *buffer); -void ( APIENTRY * qglFinish )(void); -void ( APIENTRY * qglFlush )(void); -void ( APIENTRY * qglFogf )(GLenum pname, GLfloat param); -void ( APIENTRY * qglFogfv )(GLenum pname, const GLfloat *params); -void ( APIENTRY * qglFogi )(GLenum pname, GLint param); -void ( APIENTRY * qglFogiv )(GLenum pname, const GLint *params); -void ( APIENTRY * qglFrontFace )(GLenum mode); -void ( APIENTRY * qglFrustum )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLuint ( APIENTRY * qglGenLists )(GLsizei range); -void ( APIENTRY * qglGenTextures )(GLsizei n, GLuint *textures); -void ( APIENTRY * qglGetBooleanv )(GLenum pname, GLboolean *params); -void ( APIENTRY * qglGetClipPlane )(GLenum plane, GLdouble *equation); -void ( APIENTRY * qglGetDoublev )(GLenum pname, GLdouble *params); -GLenum ( APIENTRY * qglGetError )(void); -void ( APIENTRY * qglGetFloatv )(GLenum pname, GLfloat *params); -void ( APIENTRY * qglGetIntegerv )(GLenum pname, GLint *params); -void ( APIENTRY * qglGetLightfv )(GLenum light, GLenum pname, GLfloat *params); -void ( APIENTRY * qglGetLightiv )(GLenum light, GLenum pname, GLint *params); -void ( APIENTRY * qglGetMapdv )(GLenum target, GLenum query, GLdouble *v); -void ( APIENTRY * qglGetMapfv )(GLenum target, GLenum query, GLfloat *v); -void ( APIENTRY * qglGetMapiv )(GLenum target, GLenum query, GLint *v); -void ( APIENTRY * qglGetMaterialfv )(GLenum face, GLenum pname, GLfloat *params); -void ( APIENTRY * qglGetMaterialiv )(GLenum face, GLenum pname, GLint *params); -void ( APIENTRY * qglGetPixelMapfv )(GLenum map, GLfloat *values); -void ( APIENTRY * qglGetPixelMapuiv )(GLenum map, GLuint *values); -void ( APIENTRY * qglGetPixelMapusv )(GLenum map, GLushort *values); -void ( APIENTRY * qglGetPointerv )(GLenum pname, GLvoid* *params); -void ( APIENTRY * qglGetPolygonStipple )(GLubyte *mask); +void ( APIENTRY * qglAccum )( GLenum op, GLfloat value ); +void ( APIENTRY * qglAlphaFunc )( GLenum func, GLclampf ref ); +GLboolean ( APIENTRY * qglAreTexturesResident )( GLsizei n, const GLuint *textures, GLboolean *residences ); +void ( APIENTRY * qglArrayElement )( GLint i ); +void ( APIENTRY * qglBegin )( GLenum mode ); +void ( APIENTRY * qglBindTexture )( GLenum target, GLuint texture ); +void ( APIENTRY * qglBitmap )( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap ); +void ( APIENTRY * qglBlendFunc )( GLenum sfactor, GLenum dfactor ); +void ( APIENTRY * qglCallList )( GLuint list ); +void ( APIENTRY * qglCallLists )( GLsizei n, GLenum type, const GLvoid *lists ); +void ( APIENTRY * qglClear )( GLbitfield mask ); +void ( APIENTRY * qglClearAccum )( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); +void ( APIENTRY * qglClearColor )( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); +void ( APIENTRY * qglClearDepth )( GLclampd depth ); +void ( APIENTRY * qglClearIndex )( GLfloat c ); +void ( APIENTRY * qglClearStencil )( GLint s ); +void ( APIENTRY * qglClipPlane )( GLenum plane, const GLdouble *equation ); +void ( APIENTRY * qglColor3b )( GLbyte red, GLbyte green, GLbyte blue ); +void ( APIENTRY * qglColor3bv )( const GLbyte *v ); +void ( APIENTRY * qglColor3d )( GLdouble red, GLdouble green, GLdouble blue ); +void ( APIENTRY * qglColor3dv )( const GLdouble *v ); +void ( APIENTRY * qglColor3f )( GLfloat red, GLfloat green, GLfloat blue ); +void ( APIENTRY * qglColor3fv )( const GLfloat *v ); +void ( APIENTRY * qglColor3i )( GLint red, GLint green, GLint blue ); +void ( APIENTRY * qglColor3iv )( const GLint *v ); +void ( APIENTRY * qglColor3s )( GLshort red, GLshort green, GLshort blue ); +void ( APIENTRY * qglColor3sv )( const GLshort *v ); +void ( APIENTRY * qglColor3ub )( GLubyte red, GLubyte green, GLubyte blue ); +void ( APIENTRY * qglColor3ubv )( const GLubyte *v ); +void ( APIENTRY * qglColor3ui )( GLuint red, GLuint green, GLuint blue ); +void ( APIENTRY * qglColor3uiv )( const GLuint *v ); +void ( APIENTRY * qglColor3us )( GLushort red, GLushort green, GLushort blue ); +void ( APIENTRY * qglColor3usv )( const GLushort *v ); +void ( APIENTRY * qglColor4b )( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha ); +void ( APIENTRY * qglColor4bv )( const GLbyte *v ); +void ( APIENTRY * qglColor4d )( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha ); +void ( APIENTRY * qglColor4dv )( const GLdouble *v ); +void ( APIENTRY * qglColor4f )( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); +void ( APIENTRY * qglColor4fv )( const GLfloat *v ); +void ( APIENTRY * qglColor4i )( GLint red, GLint green, GLint blue, GLint alpha ); +void ( APIENTRY * qglColor4iv )( const GLint *v ); +void ( APIENTRY * qglColor4s )( GLshort red, GLshort green, GLshort blue, GLshort alpha ); +void ( APIENTRY * qglColor4sv )( const GLshort *v ); +void ( APIENTRY * qglColor4ub )( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); +void ( APIENTRY * qglColor4ubv )( const GLubyte *v ); +void ( APIENTRY * qglColor4ui )( GLuint red, GLuint green, GLuint blue, GLuint alpha ); +void ( APIENTRY * qglColor4uiv )( const GLuint *v ); +void ( APIENTRY * qglColor4us )( GLushort red, GLushort green, GLushort blue, GLushort alpha ); +void ( APIENTRY * qglColor4usv )( const GLushort *v ); +void ( APIENTRY * qglColorMask )( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); +void ( APIENTRY * qglColorMaterial )( GLenum face, GLenum mode ); +void ( APIENTRY * qglColorPointer )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +void ( APIENTRY * qglCopyPixels )( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type ); +void ( APIENTRY * qglCopyTexImage1D )( GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border ); +void ( APIENTRY * qglCopyTexImage2D )( GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ); +void ( APIENTRY * qglCopyTexSubImage1D )( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width ); +void ( APIENTRY * qglCopyTexSubImage2D )( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ); +void ( APIENTRY * qglCullFace )( GLenum mode ); +void ( APIENTRY * qglDeleteLists )( GLuint list, GLsizei range ); +void ( APIENTRY * qglDeleteTextures )( GLsizei n, const GLuint *textures ); +void ( APIENTRY * qglDepthFunc )( GLenum func ); +void ( APIENTRY * qglDepthMask )( GLboolean flag ); +void ( APIENTRY * qglDepthRange )( GLclampd zNear, GLclampd zFar ); +void ( APIENTRY * qglDisable )( GLenum cap ); +void ( APIENTRY * qglDisableClientState )( GLenum array ); +void ( APIENTRY * qglDrawArrays )( GLenum mode, GLint first, GLsizei count ); +void ( APIENTRY * qglDrawBuffer )( GLenum mode ); +void ( APIENTRY * qglDrawElements )( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ); +void ( APIENTRY * qglDrawPixels )( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); +void ( APIENTRY * qglEdgeFlag )( GLboolean flag ); +void ( APIENTRY * qglEdgeFlagPointer )( GLsizei stride, const GLvoid *pointer ); +void ( APIENTRY * qglEdgeFlagv )( const GLboolean *flag ); +void ( APIENTRY * qglEnable )( GLenum cap ); +void ( APIENTRY * qglEnableClientState )( GLenum array ); +void ( APIENTRY * qglEnd )( void ); +void ( APIENTRY * qglEndList )( void ); +void ( APIENTRY * qglEvalCoord1d )( GLdouble u ); +void ( APIENTRY * qglEvalCoord1dv )( const GLdouble *u ); +void ( APIENTRY * qglEvalCoord1f )( GLfloat u ); +void ( APIENTRY * qglEvalCoord1fv )( const GLfloat *u ); +void ( APIENTRY * qglEvalCoord2d )( GLdouble u, GLdouble v ); +void ( APIENTRY * qglEvalCoord2dv )( const GLdouble *u ); +void ( APIENTRY * qglEvalCoord2f )( GLfloat u, GLfloat v ); +void ( APIENTRY * qglEvalCoord2fv )( const GLfloat *u ); +void ( APIENTRY * qglEvalMesh1 )( GLenum mode, GLint i1, GLint i2 ); +void ( APIENTRY * qglEvalMesh2 )( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); +void ( APIENTRY * qglEvalPoint1 )( GLint i ); +void ( APIENTRY * qglEvalPoint2 )( GLint i, GLint j ); +void ( APIENTRY * qglFeedbackBuffer )( GLsizei size, GLenum type, GLfloat *buffer ); +void ( APIENTRY * qglFinish )( void ); +void ( APIENTRY * qglFlush )( void ); +void ( APIENTRY * qglFogf )( GLenum pname, GLfloat param ); +void ( APIENTRY * qglFogfv )( GLenum pname, const GLfloat *params ); +void ( APIENTRY * qglFogi )( GLenum pname, GLint param ); +void ( APIENTRY * qglFogiv )( GLenum pname, const GLint *params ); +void ( APIENTRY * qglFrontFace )( GLenum mode ); +void ( APIENTRY * qglFrustum )( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar ); +GLuint ( APIENTRY * qglGenLists )( GLsizei range ); +void ( APIENTRY * qglGenTextures )( GLsizei n, GLuint *textures ); +void ( APIENTRY * qglGetBooleanv )( GLenum pname, GLboolean *params ); +void ( APIENTRY * qglGetClipPlane )( GLenum plane, GLdouble *equation ); +void ( APIENTRY * qglGetDoublev )( GLenum pname, GLdouble *params ); +GLenum ( APIENTRY * qglGetError )( void ); +void ( APIENTRY * qglGetFloatv )( GLenum pname, GLfloat *params ); +void ( APIENTRY * qglGetIntegerv )( GLenum pname, GLint *params ); +void ( APIENTRY * qglGetLightfv )( GLenum light, GLenum pname, GLfloat *params ); +void ( APIENTRY * qglGetLightiv )( GLenum light, GLenum pname, GLint *params ); +void ( APIENTRY * qglGetMapdv )( GLenum target, GLenum query, GLdouble *v ); +void ( APIENTRY * qglGetMapfv )( GLenum target, GLenum query, GLfloat *v ); +void ( APIENTRY * qglGetMapiv )( GLenum target, GLenum query, GLint *v ); +void ( APIENTRY * qglGetMaterialfv )( GLenum face, GLenum pname, GLfloat *params ); +void ( APIENTRY * qglGetMaterialiv )( GLenum face, GLenum pname, GLint *params ); +void ( APIENTRY * qglGetPixelMapfv )( GLenum map, GLfloat *values ); +void ( APIENTRY * qglGetPixelMapuiv )( GLenum map, GLuint *values ); +void ( APIENTRY * qglGetPixelMapusv )( GLenum map, GLushort *values ); +void ( APIENTRY * qglGetPointerv )( GLenum pname, GLvoid* *params ); +void ( APIENTRY * qglGetPolygonStipple )( GLubyte *mask ); const GLubyte * ( APIENTRY * qglGetString )(GLenum name); -void ( APIENTRY * qglGetTexEnvfv )(GLenum target, GLenum pname, GLfloat *params); -void ( APIENTRY * qglGetTexEnviv )(GLenum target, GLenum pname, GLint *params); -void ( APIENTRY * qglGetTexGendv )(GLenum coord, GLenum pname, GLdouble *params); -void ( APIENTRY * qglGetTexGenfv )(GLenum coord, GLenum pname, GLfloat *params); -void ( APIENTRY * qglGetTexGeniv )(GLenum coord, GLenum pname, GLint *params); -void ( APIENTRY * qglGetTexImage )(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -void ( APIENTRY * qglGetTexLevelParameterfv )(GLenum target, GLint level, GLenum pname, GLfloat *params); -void ( APIENTRY * qglGetTexLevelParameteriv )(GLenum target, GLint level, GLenum pname, GLint *params); -void ( APIENTRY * qglGetTexParameterfv )(GLenum target, GLenum pname, GLfloat *params); -void ( APIENTRY * qglGetTexParameteriv )(GLenum target, GLenum pname, GLint *params); -void ( APIENTRY * qglHint )(GLenum target, GLenum mode); -void ( APIENTRY * qglIndexMask )(GLuint mask); -void ( APIENTRY * qglIndexPointer )(GLenum type, GLsizei stride, const GLvoid *pointer); -void ( APIENTRY * qglIndexd )(GLdouble c); -void ( APIENTRY * qglIndexdv )(const GLdouble *c); -void ( APIENTRY * qglIndexf )(GLfloat c); -void ( APIENTRY * qglIndexfv )(const GLfloat *c); -void ( APIENTRY * qglIndexi )(GLint c); -void ( APIENTRY * qglIndexiv )(const GLint *c); -void ( APIENTRY * qglIndexs )(GLshort c); -void ( APIENTRY * qglIndexsv )(const GLshort *c); -void ( APIENTRY * qglIndexub )(GLubyte c); -void ( APIENTRY * qglIndexubv )(const GLubyte *c); -void ( APIENTRY * qglInitNames )(void); -void ( APIENTRY * qglInterleavedArrays )(GLenum format, GLsizei stride, const GLvoid *pointer); -GLboolean ( APIENTRY * qglIsEnabled )(GLenum cap); -GLboolean ( APIENTRY * qglIsList )(GLuint list); -GLboolean ( APIENTRY * qglIsTexture )(GLuint texture); -void ( APIENTRY * qglLightModelf )(GLenum pname, GLfloat param); -void ( APIENTRY * qglLightModelfv )(GLenum pname, const GLfloat *params); -void ( APIENTRY * qglLightModeli )(GLenum pname, GLint param); -void ( APIENTRY * qglLightModeliv )(GLenum pname, const GLint *params); -void ( APIENTRY * qglLightf )(GLenum light, GLenum pname, GLfloat param); -void ( APIENTRY * qglLightfv )(GLenum light, GLenum pname, const GLfloat *params); -void ( APIENTRY * qglLighti )(GLenum light, GLenum pname, GLint param); -void ( APIENTRY * qglLightiv )(GLenum light, GLenum pname, const GLint *params); -void ( APIENTRY * qglLineStipple )(GLint factor, GLushort pattern); -void ( APIENTRY * qglLineWidth )(GLfloat width); -void ( APIENTRY * qglListBase )(GLuint base); -void ( APIENTRY * qglLoadIdentity )(void); -void ( APIENTRY * qglLoadMatrixd )(const GLdouble *m); -void ( APIENTRY * qglLoadMatrixf )(const GLfloat *m); -void ( APIENTRY * qglLoadName )(GLuint name); -void ( APIENTRY * qglLogicOp )(GLenum opcode); -void ( APIENTRY * qglMap1d )(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -void ( APIENTRY * qglMap1f )(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -void ( APIENTRY * qglMap2d )(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -void ( APIENTRY * qglMap2f )(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -void ( APIENTRY * qglMapGrid1d )(GLint un, GLdouble u1, GLdouble u2); -void ( APIENTRY * qglMapGrid1f )(GLint un, GLfloat u1, GLfloat u2); -void ( APIENTRY * qglMapGrid2d )(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void ( APIENTRY * qglMapGrid2f )(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void ( APIENTRY * qglMaterialf )(GLenum face, GLenum pname, GLfloat param); -void ( APIENTRY * qglMaterialfv )(GLenum face, GLenum pname, const GLfloat *params); -void ( APIENTRY * qglMateriali )(GLenum face, GLenum pname, GLint param); -void ( APIENTRY * qglMaterialiv )(GLenum face, GLenum pname, const GLint *params); -void ( APIENTRY * qglMatrixMode )(GLenum mode); -void ( APIENTRY * qglMultMatrixd )(const GLdouble *m); -void ( APIENTRY * qglMultMatrixf )(const GLfloat *m); -void ( APIENTRY * qglNewList )(GLuint list, GLenum mode); -void ( APIENTRY * qglNormal3b )(GLbyte nx, GLbyte ny, GLbyte nz); -void ( APIENTRY * qglNormal3bv )(const GLbyte *v); -void ( APIENTRY * qglNormal3d )(GLdouble nx, GLdouble ny, GLdouble nz); -void ( APIENTRY * qglNormal3dv )(const GLdouble *v); -void ( APIENTRY * qglNormal3f )(GLfloat nx, GLfloat ny, GLfloat nz); -void ( APIENTRY * qglNormal3fv )(const GLfloat *v); -void ( APIENTRY * qglNormal3i )(GLint nx, GLint ny, GLint nz); -void ( APIENTRY * qglNormal3iv )(const GLint *v); -void ( APIENTRY * qglNormal3s )(GLshort nx, GLshort ny, GLshort nz); -void ( APIENTRY * qglNormal3sv )(const GLshort *v); -void ( APIENTRY * qglNormalPointer )(GLenum type, GLsizei stride, const GLvoid *pointer); -void ( APIENTRY * qglOrtho )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void ( APIENTRY * qglPassThrough )(GLfloat token); -void ( APIENTRY * qglPixelMapfv )(GLenum map, GLsizei mapsize, const GLfloat *values); -void ( APIENTRY * qglPixelMapuiv )(GLenum map, GLsizei mapsize, const GLuint *values); -void ( APIENTRY * qglPixelMapusv )(GLenum map, GLsizei mapsize, const GLushort *values); -void ( APIENTRY * qglPixelStoref )(GLenum pname, GLfloat param); -void ( APIENTRY * qglPixelStorei )(GLenum pname, GLint param); -void ( APIENTRY * qglPixelTransferf )(GLenum pname, GLfloat param); -void ( APIENTRY * qglPixelTransferi )(GLenum pname, GLint param); -void ( APIENTRY * qglPixelZoom )(GLfloat xfactor, GLfloat yfactor); -void ( APIENTRY * qglPointSize )(GLfloat size); -void ( APIENTRY * qglPolygonMode )(GLenum face, GLenum mode); -void ( APIENTRY * qglPolygonOffset )(GLfloat factor, GLfloat units); -void ( APIENTRY * qglPolygonStipple )(const GLubyte *mask); -void ( APIENTRY * qglPopAttrib )(void); -void ( APIENTRY * qglPopClientAttrib )(void); -void ( APIENTRY * qglPopMatrix )(void); -void ( APIENTRY * qglPopName )(void); -void ( APIENTRY * qglPrioritizeTextures )(GLsizei n, const GLuint *textures, const GLclampf *priorities); -void ( APIENTRY * qglPushAttrib )(GLbitfield mask); -void ( APIENTRY * qglPushClientAttrib )(GLbitfield mask); -void ( APIENTRY * qglPushMatrix )(void); -void ( APIENTRY * qglPushName )(GLuint name); -void ( APIENTRY * qglRasterPos2d )(GLdouble x, GLdouble y); -void ( APIENTRY * qglRasterPos2dv )(const GLdouble *v); -void ( APIENTRY * qglRasterPos2f )(GLfloat x, GLfloat y); -void ( APIENTRY * qglRasterPos2fv )(const GLfloat *v); -void ( APIENTRY * qglRasterPos2i )(GLint x, GLint y); -void ( APIENTRY * qglRasterPos2iv )(const GLint *v); -void ( APIENTRY * qglRasterPos2s )(GLshort x, GLshort y); -void ( APIENTRY * qglRasterPos2sv )(const GLshort *v); -void ( APIENTRY * qglRasterPos3d )(GLdouble x, GLdouble y, GLdouble z); -void ( APIENTRY * qglRasterPos3dv )(const GLdouble *v); -void ( APIENTRY * qglRasterPos3f )(GLfloat x, GLfloat y, GLfloat z); -void ( APIENTRY * qglRasterPos3fv )(const GLfloat *v); -void ( APIENTRY * qglRasterPos3i )(GLint x, GLint y, GLint z); -void ( APIENTRY * qglRasterPos3iv )(const GLint *v); -void ( APIENTRY * qglRasterPos3s )(GLshort x, GLshort y, GLshort z); -void ( APIENTRY * qglRasterPos3sv )(const GLshort *v); -void ( APIENTRY * qglRasterPos4d )(GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void ( APIENTRY * qglRasterPos4dv )(const GLdouble *v); -void ( APIENTRY * qglRasterPos4f )(GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void ( APIENTRY * qglRasterPos4fv )(const GLfloat *v); -void ( APIENTRY * qglRasterPos4i )(GLint x, GLint y, GLint z, GLint w); -void ( APIENTRY * qglRasterPos4iv )(const GLint *v); -void ( APIENTRY * qglRasterPos4s )(GLshort x, GLshort y, GLshort z, GLshort w); -void ( APIENTRY * qglRasterPos4sv )(const GLshort *v); -void ( APIENTRY * qglReadBuffer )(GLenum mode); -void ( APIENTRY * qglReadPixels )(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -void ( APIENTRY * qglRectd )(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void ( APIENTRY * qglRectdv )(const GLdouble *v1, const GLdouble *v2); -void ( APIENTRY * qglRectf )(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void ( APIENTRY * qglRectfv )(const GLfloat *v1, const GLfloat *v2); -void ( APIENTRY * qglRecti )(GLint x1, GLint y1, GLint x2, GLint y2); -void ( APIENTRY * qglRectiv )(const GLint *v1, const GLint *v2); -void ( APIENTRY * qglRects )(GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void ( APIENTRY * qglRectsv )(const GLshort *v1, const GLshort *v2); -GLint ( APIENTRY * qglRenderMode )(GLenum mode); -void ( APIENTRY * qglRotated )(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void ( APIENTRY * qglRotatef )(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void ( APIENTRY * qglScaled )(GLdouble x, GLdouble y, GLdouble z); -void ( APIENTRY * qglScalef )(GLfloat x, GLfloat y, GLfloat z); -void ( APIENTRY * qglScissor )(GLint x, GLint y, GLsizei width, GLsizei height); -void ( APIENTRY * qglSelectBuffer )(GLsizei size, GLuint *buffer); -void ( APIENTRY * qglShadeModel )(GLenum mode); -void ( APIENTRY * qglStencilFunc )(GLenum func, GLint ref, GLuint mask); -void ( APIENTRY * qglStencilMask )(GLuint mask); -void ( APIENTRY * qglStencilOp )(GLenum fail, GLenum zfail, GLenum zpass); -void ( APIENTRY * qglTexCoord1d )(GLdouble s); -void ( APIENTRY * qglTexCoord1dv )(const GLdouble *v); -void ( APIENTRY * qglTexCoord1f )(GLfloat s); -void ( APIENTRY * qglTexCoord1fv )(const GLfloat *v); -void ( APIENTRY * qglTexCoord1i )(GLint s); -void ( APIENTRY * qglTexCoord1iv )(const GLint *v); -void ( APIENTRY * qglTexCoord1s )(GLshort s); -void ( APIENTRY * qglTexCoord1sv )(const GLshort *v); -void ( APIENTRY * qglTexCoord2d )(GLdouble s, GLdouble t); -void ( APIENTRY * qglTexCoord2dv )(const GLdouble *v); -void ( APIENTRY * qglTexCoord2f )(GLfloat s, GLfloat t); -void ( APIENTRY * qglTexCoord2fv )(const GLfloat *v); -void ( APIENTRY * qglTexCoord2i )(GLint s, GLint t); -void ( APIENTRY * qglTexCoord2iv )(const GLint *v); -void ( APIENTRY * qglTexCoord2s )(GLshort s, GLshort t); -void ( APIENTRY * qglTexCoord2sv )(const GLshort *v); -void ( APIENTRY * qglTexCoord3d )(GLdouble s, GLdouble t, GLdouble r); -void ( APIENTRY * qglTexCoord3dv )(const GLdouble *v); -void ( APIENTRY * qglTexCoord3f )(GLfloat s, GLfloat t, GLfloat r); -void ( APIENTRY * qglTexCoord3fv )(const GLfloat *v); -void ( APIENTRY * qglTexCoord3i )(GLint s, GLint t, GLint r); -void ( APIENTRY * qglTexCoord3iv )(const GLint *v); -void ( APIENTRY * qglTexCoord3s )(GLshort s, GLshort t, GLshort r); -void ( APIENTRY * qglTexCoord3sv )(const GLshort *v); -void ( APIENTRY * qglTexCoord4d )(GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void ( APIENTRY * qglTexCoord4dv )(const GLdouble *v); -void ( APIENTRY * qglTexCoord4f )(GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void ( APIENTRY * qglTexCoord4fv )(const GLfloat *v); -void ( APIENTRY * qglTexCoord4i )(GLint s, GLint t, GLint r, GLint q); -void ( APIENTRY * qglTexCoord4iv )(const GLint *v); -void ( APIENTRY * qglTexCoord4s )(GLshort s, GLshort t, GLshort r, GLshort q); -void ( APIENTRY * qglTexCoord4sv )(const GLshort *v); -void ( APIENTRY * qglTexCoordPointer )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -void ( APIENTRY * qglTexEnvf )(GLenum target, GLenum pname, GLfloat param); -void ( APIENTRY * qglTexEnvfv )(GLenum target, GLenum pname, const GLfloat *params); -void ( APIENTRY * qglTexEnvi )(GLenum target, GLenum pname, GLint param); -void ( APIENTRY * qglTexEnviv )(GLenum target, GLenum pname, const GLint *params); -void ( APIENTRY * qglTexGend )(GLenum coord, GLenum pname, GLdouble param); -void ( APIENTRY * qglTexGendv )(GLenum coord, GLenum pname, const GLdouble *params); -void ( APIENTRY * qglTexGenf )(GLenum coord, GLenum pname, GLfloat param); -void ( APIENTRY * qglTexGenfv )(GLenum coord, GLenum pname, const GLfloat *params); -void ( APIENTRY * qglTexGeni )(GLenum coord, GLenum pname, GLint param); -void ( APIENTRY * qglTexGeniv )(GLenum coord, GLenum pname, const GLint *params); -void ( APIENTRY * qglTexImage1D )(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -void ( APIENTRY * qglTexImage2D )(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -void ( APIENTRY * qglTexParameterf )(GLenum target, GLenum pname, GLfloat param); -void ( APIENTRY * qglTexParameterfv )(GLenum target, GLenum pname, const GLfloat *params); -void ( APIENTRY * qglTexParameteri )(GLenum target, GLenum pname, GLint param); -void ( APIENTRY * qglTexParameteriv )(GLenum target, GLenum pname, const GLint *params); -void ( APIENTRY * qglTexSubImage1D )(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -void ( APIENTRY * qglTexSubImage2D )(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -void ( APIENTRY * qglTranslated )(GLdouble x, GLdouble y, GLdouble z); -void ( APIENTRY * qglTranslatef )(GLfloat x, GLfloat y, GLfloat z); -void ( APIENTRY * qglVertex2d )(GLdouble x, GLdouble y); -void ( APIENTRY * qglVertex2dv )(const GLdouble *v); -void ( APIENTRY * qglVertex2f )(GLfloat x, GLfloat y); -void ( APIENTRY * qglVertex2fv )(const GLfloat *v); -void ( APIENTRY * qglVertex2i )(GLint x, GLint y); -void ( APIENTRY * qglVertex2iv )(const GLint *v); -void ( APIENTRY * qglVertex2s )(GLshort x, GLshort y); -void ( APIENTRY * qglVertex2sv )(const GLshort *v); -void ( APIENTRY * qglVertex3d )(GLdouble x, GLdouble y, GLdouble z); -void ( APIENTRY * qglVertex3dv )(const GLdouble *v); -void ( APIENTRY * qglVertex3f )(GLfloat x, GLfloat y, GLfloat z); -void ( APIENTRY * qglVertex3fv )(const GLfloat *v); -void ( APIENTRY * qglVertex3i )(GLint x, GLint y, GLint z); -void ( APIENTRY * qglVertex3iv )(const GLint *v); -void ( APIENTRY * qglVertex3s )(GLshort x, GLshort y, GLshort z); -void ( APIENTRY * qglVertex3sv )(const GLshort *v); -void ( APIENTRY * qglVertex4d )(GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void ( APIENTRY * qglVertex4dv )(const GLdouble *v); -void ( APIENTRY * qglVertex4f )(GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void ( APIENTRY * qglVertex4fv )(const GLfloat *v); -void ( APIENTRY * qglVertex4i )(GLint x, GLint y, GLint z, GLint w); -void ( APIENTRY * qglVertex4iv )(const GLint *v); -void ( APIENTRY * qglVertex4s )(GLshort x, GLshort y, GLshort z, GLshort w); -void ( APIENTRY * qglVertex4sv )(const GLshort *v); -void ( APIENTRY * qglVertexPointer )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -void ( APIENTRY * qglViewport )(GLint x, GLint y, GLsizei width, GLsizei height); +void ( APIENTRY * qglGetTexEnvfv )( GLenum target, GLenum pname, GLfloat *params ); +void ( APIENTRY * qglGetTexEnviv )( GLenum target, GLenum pname, GLint *params ); +void ( APIENTRY * qglGetTexGendv )( GLenum coord, GLenum pname, GLdouble *params ); +void ( APIENTRY * qglGetTexGenfv )( GLenum coord, GLenum pname, GLfloat *params ); +void ( APIENTRY * qglGetTexGeniv )( GLenum coord, GLenum pname, GLint *params ); +void ( APIENTRY * qglGetTexImage )( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels ); +void ( APIENTRY * qglGetTexLevelParameterfv )( GLenum target, GLint level, GLenum pname, GLfloat *params ); +void ( APIENTRY * qglGetTexLevelParameteriv )( GLenum target, GLint level, GLenum pname, GLint *params ); +void ( APIENTRY * qglGetTexParameterfv )( GLenum target, GLenum pname, GLfloat *params ); +void ( APIENTRY * qglGetTexParameteriv )( GLenum target, GLenum pname, GLint *params ); +void ( APIENTRY * qglHint )( GLenum target, GLenum mode ); +void ( APIENTRY * qglIndexMask )( GLuint mask ); +void ( APIENTRY * qglIndexPointer )( GLenum type, GLsizei stride, const GLvoid *pointer ); +void ( APIENTRY * qglIndexd )( GLdouble c ); +void ( APIENTRY * qglIndexdv )( const GLdouble *c ); +void ( APIENTRY * qglIndexf )( GLfloat c ); +void ( APIENTRY * qglIndexfv )( const GLfloat *c ); +void ( APIENTRY * qglIndexi )( GLint c ); +void ( APIENTRY * qglIndexiv )( const GLint *c ); +void ( APIENTRY * qglIndexs )( GLshort c ); +void ( APIENTRY * qglIndexsv )( const GLshort *c ); +void ( APIENTRY * qglIndexub )( GLubyte c ); +void ( APIENTRY * qglIndexubv )( const GLubyte *c ); +void ( APIENTRY * qglInitNames )( void ); +void ( APIENTRY * qglInterleavedArrays )( GLenum format, GLsizei stride, const GLvoid *pointer ); +GLboolean ( APIENTRY * qglIsEnabled )( GLenum cap ); +GLboolean ( APIENTRY * qglIsList )( GLuint list ); +GLboolean ( APIENTRY * qglIsTexture )( GLuint texture ); +void ( APIENTRY * qglLightModelf )( GLenum pname, GLfloat param ); +void ( APIENTRY * qglLightModelfv )( GLenum pname, const GLfloat *params ); +void ( APIENTRY * qglLightModeli )( GLenum pname, GLint param ); +void ( APIENTRY * qglLightModeliv )( GLenum pname, const GLint *params ); +void ( APIENTRY * qglLightf )( GLenum light, GLenum pname, GLfloat param ); +void ( APIENTRY * qglLightfv )( GLenum light, GLenum pname, const GLfloat *params ); +void ( APIENTRY * qglLighti )( GLenum light, GLenum pname, GLint param ); +void ( APIENTRY * qglLightiv )( GLenum light, GLenum pname, const GLint *params ); +void ( APIENTRY * qglLineStipple )( GLint factor, GLushort pattern ); +void ( APIENTRY * qglLineWidth )( GLfloat width ); +void ( APIENTRY * qglListBase )( GLuint base ); +void ( APIENTRY * qglLoadIdentity )( void ); +void ( APIENTRY * qglLoadMatrixd )( const GLdouble *m ); +void ( APIENTRY * qglLoadMatrixf )( const GLfloat *m ); +void ( APIENTRY * qglLoadName )( GLuint name ); +void ( APIENTRY * qglLogicOp )( GLenum opcode ); +void ( APIENTRY * qglMap1d )( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points ); +void ( APIENTRY * qglMap1f )( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points ); +void ( APIENTRY * qglMap2d )( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points ); +void ( APIENTRY * qglMap2f )( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points ); +void ( APIENTRY * qglMapGrid1d )( GLint un, GLdouble u1, GLdouble u2 ); +void ( APIENTRY * qglMapGrid1f )( GLint un, GLfloat u1, GLfloat u2 ); +void ( APIENTRY * qglMapGrid2d )( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 ); +void ( APIENTRY * qglMapGrid2f )( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 ); +void ( APIENTRY * qglMaterialf )( GLenum face, GLenum pname, GLfloat param ); +void ( APIENTRY * qglMaterialfv )( GLenum face, GLenum pname, const GLfloat *params ); +void ( APIENTRY * qglMateriali )( GLenum face, GLenum pname, GLint param ); +void ( APIENTRY * qglMaterialiv )( GLenum face, GLenum pname, const GLint *params ); +void ( APIENTRY * qglMatrixMode )( GLenum mode ); +void ( APIENTRY * qglMultMatrixd )( const GLdouble *m ); +void ( APIENTRY * qglMultMatrixf )( const GLfloat *m ); +void ( APIENTRY * qglNewList )( GLuint list, GLenum mode ); +void ( APIENTRY * qglNormal3b )( GLbyte nx, GLbyte ny, GLbyte nz ); +void ( APIENTRY * qglNormal3bv )( const GLbyte *v ); +void ( APIENTRY * qglNormal3d )( GLdouble nx, GLdouble ny, GLdouble nz ); +void ( APIENTRY * qglNormal3dv )( const GLdouble *v ); +void ( APIENTRY * qglNormal3f )( GLfloat nx, GLfloat ny, GLfloat nz ); +void ( APIENTRY * qglNormal3fv )( const GLfloat *v ); +void ( APIENTRY * qglNormal3i )( GLint nx, GLint ny, GLint nz ); +void ( APIENTRY * qglNormal3iv )( const GLint *v ); +void ( APIENTRY * qglNormal3s )( GLshort nx, GLshort ny, GLshort nz ); +void ( APIENTRY * qglNormal3sv )( const GLshort *v ); +void ( APIENTRY * qglNormalPointer )( GLenum type, GLsizei stride, const GLvoid *pointer ); +void ( APIENTRY * qglOrtho )( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar ); +void ( APIENTRY * qglPassThrough )( GLfloat token ); +void ( APIENTRY * qglPixelMapfv )( GLenum map, GLsizei mapsize, const GLfloat *values ); +void ( APIENTRY * qglPixelMapuiv )( GLenum map, GLsizei mapsize, const GLuint *values ); +void ( APIENTRY * qglPixelMapusv )( GLenum map, GLsizei mapsize, const GLushort *values ); +void ( APIENTRY * qglPixelStoref )( GLenum pname, GLfloat param ); +void ( APIENTRY * qglPixelStorei )( GLenum pname, GLint param ); +void ( APIENTRY * qglPixelTransferf )( GLenum pname, GLfloat param ); +void ( APIENTRY * qglPixelTransferi )( GLenum pname, GLint param ); +void ( APIENTRY * qglPixelZoom )( GLfloat xfactor, GLfloat yfactor ); +void ( APIENTRY * qglPointSize )( GLfloat size ); +void ( APIENTRY * qglPolygonMode )( GLenum face, GLenum mode ); +void ( APIENTRY * qglPolygonOffset )( GLfloat factor, GLfloat units ); +void ( APIENTRY * qglPolygonStipple )( const GLubyte *mask ); +void ( APIENTRY * qglPopAttrib )( void ); +void ( APIENTRY * qglPopClientAttrib )( void ); +void ( APIENTRY * qglPopMatrix )( void ); +void ( APIENTRY * qglPopName )( void ); +void ( APIENTRY * qglPrioritizeTextures )( GLsizei n, const GLuint *textures, const GLclampf *priorities ); +void ( APIENTRY * qglPushAttrib )( GLbitfield mask ); +void ( APIENTRY * qglPushClientAttrib )( GLbitfield mask ); +void ( APIENTRY * qglPushMatrix )( void ); +void ( APIENTRY * qglPushName )( GLuint name ); +void ( APIENTRY * qglRasterPos2d )( GLdouble x, GLdouble y ); +void ( APIENTRY * qglRasterPos2dv )( const GLdouble *v ); +void ( APIENTRY * qglRasterPos2f )( GLfloat x, GLfloat y ); +void ( APIENTRY * qglRasterPos2fv )( const GLfloat *v ); +void ( APIENTRY * qglRasterPos2i )( GLint x, GLint y ); +void ( APIENTRY * qglRasterPos2iv )( const GLint *v ); +void ( APIENTRY * qglRasterPos2s )( GLshort x, GLshort y ); +void ( APIENTRY * qglRasterPos2sv )( const GLshort *v ); +void ( APIENTRY * qglRasterPos3d )( GLdouble x, GLdouble y, GLdouble z ); +void ( APIENTRY * qglRasterPos3dv )( const GLdouble *v ); +void ( APIENTRY * qglRasterPos3f )( GLfloat x, GLfloat y, GLfloat z ); +void ( APIENTRY * qglRasterPos3fv )( const GLfloat *v ); +void ( APIENTRY * qglRasterPos3i )( GLint x, GLint y, GLint z ); +void ( APIENTRY * qglRasterPos3iv )( const GLint *v ); +void ( APIENTRY * qglRasterPos3s )( GLshort x, GLshort y, GLshort z ); +void ( APIENTRY * qglRasterPos3sv )( const GLshort *v ); +void ( APIENTRY * qglRasterPos4d )( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +void ( APIENTRY * qglRasterPos4dv )( const GLdouble *v ); +void ( APIENTRY * qglRasterPos4f )( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +void ( APIENTRY * qglRasterPos4fv )( const GLfloat *v ); +void ( APIENTRY * qglRasterPos4i )( GLint x, GLint y, GLint z, GLint w ); +void ( APIENTRY * qglRasterPos4iv )( const GLint *v ); +void ( APIENTRY * qglRasterPos4s )( GLshort x, GLshort y, GLshort z, GLshort w ); +void ( APIENTRY * qglRasterPos4sv )( const GLshort *v ); +void ( APIENTRY * qglReadBuffer )( GLenum mode ); +void ( APIENTRY * qglReadPixels )( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ); +void ( APIENTRY * qglRectd )( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); +void ( APIENTRY * qglRectdv )( const GLdouble *v1, const GLdouble *v2 ); +void ( APIENTRY * qglRectf )( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); +void ( APIENTRY * qglRectfv )( const GLfloat *v1, const GLfloat *v2 ); +void ( APIENTRY * qglRecti )( GLint x1, GLint y1, GLint x2, GLint y2 ); +void ( APIENTRY * qglRectiv )( const GLint *v1, const GLint *v2 ); +void ( APIENTRY * qglRects )( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); +void ( APIENTRY * qglRectsv )( const GLshort *v1, const GLshort *v2 ); +GLint ( APIENTRY * qglRenderMode )( GLenum mode ); +void ( APIENTRY * qglRotated )( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ); +void ( APIENTRY * qglRotatef )( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ); +void ( APIENTRY * qglScaled )( GLdouble x, GLdouble y, GLdouble z ); +void ( APIENTRY * qglScalef )( GLfloat x, GLfloat y, GLfloat z ); +void ( APIENTRY * qglScissor )( GLint x, GLint y, GLsizei width, GLsizei height ); +void ( APIENTRY * qglSelectBuffer )( GLsizei size, GLuint *buffer ); +void ( APIENTRY * qglShadeModel )( GLenum mode ); +void ( APIENTRY * qglStencilFunc )( GLenum func, GLint ref, GLuint mask ); +void ( APIENTRY * qglStencilMask )( GLuint mask ); +void ( APIENTRY * qglStencilOp )( GLenum fail, GLenum zfail, GLenum zpass ); +void ( APIENTRY * qglTexCoord1d )( GLdouble s ); +void ( APIENTRY * qglTexCoord1dv )( const GLdouble *v ); +void ( APIENTRY * qglTexCoord1f )( GLfloat s ); +void ( APIENTRY * qglTexCoord1fv )( const GLfloat *v ); +void ( APIENTRY * qglTexCoord1i )( GLint s ); +void ( APIENTRY * qglTexCoord1iv )( const GLint *v ); +void ( APIENTRY * qglTexCoord1s )( GLshort s ); +void ( APIENTRY * qglTexCoord1sv )( const GLshort *v ); +void ( APIENTRY * qglTexCoord2d )( GLdouble s, GLdouble t ); +void ( APIENTRY * qglTexCoord2dv )( const GLdouble *v ); +void ( APIENTRY * qglTexCoord2f )( GLfloat s, GLfloat t ); +void ( APIENTRY * qglTexCoord2fv )( const GLfloat *v ); +void ( APIENTRY * qglTexCoord2i )( GLint s, GLint t ); +void ( APIENTRY * qglTexCoord2iv )( const GLint *v ); +void ( APIENTRY * qglTexCoord2s )( GLshort s, GLshort t ); +void ( APIENTRY * qglTexCoord2sv )( const GLshort *v ); +void ( APIENTRY * qglTexCoord3d )( GLdouble s, GLdouble t, GLdouble r ); +void ( APIENTRY * qglTexCoord3dv )( const GLdouble *v ); +void ( APIENTRY * qglTexCoord3f )( GLfloat s, GLfloat t, GLfloat r ); +void ( APIENTRY * qglTexCoord3fv )( const GLfloat *v ); +void ( APIENTRY * qglTexCoord3i )( GLint s, GLint t, GLint r ); +void ( APIENTRY * qglTexCoord3iv )( const GLint *v ); +void ( APIENTRY * qglTexCoord3s )( GLshort s, GLshort t, GLshort r ); +void ( APIENTRY * qglTexCoord3sv )( const GLshort *v ); +void ( APIENTRY * qglTexCoord4d )( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); +void ( APIENTRY * qglTexCoord4dv )( const GLdouble *v ); +void ( APIENTRY * qglTexCoord4f )( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); +void ( APIENTRY * qglTexCoord4fv )( const GLfloat *v ); +void ( APIENTRY * qglTexCoord4i )( GLint s, GLint t, GLint r, GLint q ); +void ( APIENTRY * qglTexCoord4iv )( const GLint *v ); +void ( APIENTRY * qglTexCoord4s )( GLshort s, GLshort t, GLshort r, GLshort q ); +void ( APIENTRY * qglTexCoord4sv )( const GLshort *v ); +void ( APIENTRY * qglTexCoordPointer )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +void ( APIENTRY * qglTexEnvf )( GLenum target, GLenum pname, GLfloat param ); +void ( APIENTRY * qglTexEnvfv )( GLenum target, GLenum pname, const GLfloat *params ); +void ( APIENTRY * qglTexEnvi )( GLenum target, GLenum pname, GLint param ); +void ( APIENTRY * qglTexEnviv )( GLenum target, GLenum pname, const GLint *params ); +void ( APIENTRY * qglTexGend )( GLenum coord, GLenum pname, GLdouble param ); +void ( APIENTRY * qglTexGendv )( GLenum coord, GLenum pname, const GLdouble *params ); +void ( APIENTRY * qglTexGenf )( GLenum coord, GLenum pname, GLfloat param ); +void ( APIENTRY * qglTexGenfv )( GLenum coord, GLenum pname, const GLfloat *params ); +void ( APIENTRY * qglTexGeni )( GLenum coord, GLenum pname, GLint param ); +void ( APIENTRY * qglTexGeniv )( GLenum coord, GLenum pname, const GLint *params ); +void ( APIENTRY * qglTexImage1D )( GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); +void ( APIENTRY * qglTexImage2D )( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); +void ( APIENTRY * qglTexParameterf )( GLenum target, GLenum pname, GLfloat param ); +void ( APIENTRY * qglTexParameterfv )( GLenum target, GLenum pname, const GLfloat *params ); +void ( APIENTRY * qglTexParameteri )( GLenum target, GLenum pname, GLint param ); +void ( APIENTRY * qglTexParameteriv )( GLenum target, GLenum pname, const GLint *params ); +void ( APIENTRY * qglTexSubImage1D )( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels ); +void ( APIENTRY * qglTexSubImage2D )( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); +void ( APIENTRY * qglTranslated )( GLdouble x, GLdouble y, GLdouble z ); +void ( APIENTRY * qglTranslatef )( GLfloat x, GLfloat y, GLfloat z ); +void ( APIENTRY * qglVertex2d )( GLdouble x, GLdouble y ); +void ( APIENTRY * qglVertex2dv )( const GLdouble *v ); +void ( APIENTRY * qglVertex2f )( GLfloat x, GLfloat y ); +void ( APIENTRY * qglVertex2fv )( const GLfloat *v ); +void ( APIENTRY * qglVertex2i )( GLint x, GLint y ); +void ( APIENTRY * qglVertex2iv )( const GLint *v ); +void ( APIENTRY * qglVertex2s )( GLshort x, GLshort y ); +void ( APIENTRY * qglVertex2sv )( const GLshort *v ); +void ( APIENTRY * qglVertex3d )( GLdouble x, GLdouble y, GLdouble z ); +void ( APIENTRY * qglVertex3dv )( const GLdouble *v ); +void ( APIENTRY * qglVertex3f )( GLfloat x, GLfloat y, GLfloat z ); +void ( APIENTRY * qglVertex3fv )( const GLfloat *v ); +void ( APIENTRY * qglVertex3i )( GLint x, GLint y, GLint z ); +void ( APIENTRY * qglVertex3iv )( const GLint *v ); +void ( APIENTRY * qglVertex3s )( GLshort x, GLshort y, GLshort z ); +void ( APIENTRY * qglVertex3sv )( const GLshort *v ); +void ( APIENTRY * qglVertex4d )( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +void ( APIENTRY * qglVertex4dv )( const GLdouble *v ); +void ( APIENTRY * qglVertex4f )( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +void ( APIENTRY * qglVertex4fv )( const GLfloat *v ); +void ( APIENTRY * qglVertex4i )( GLint x, GLint y, GLint z, GLint w ); +void ( APIENTRY * qglVertex4iv )( const GLint *v ); +void ( APIENTRY * qglVertex4s )( GLshort x, GLshort y, GLshort z, GLshort w ); +void ( APIENTRY * qglVertex4sv )( const GLshort *v ); +void ( APIENTRY * qglVertexPointer )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +void ( APIENTRY * qglViewport )( GLint x, GLint y, GLsizei width, GLsizei height ); -void ( APIENTRY * qglPointParameterfEXT)( GLenum param, GLfloat value ); -void ( APIENTRY * qglPointParameterfvEXT)( GLenum param, const GLfloat *value ); -void ( APIENTRY * qglColorTableEXT)( int, int, int, int, int, const void * ); +void ( APIENTRY * qglPointParameterfEXT )( GLenum param, GLfloat value ); +void ( APIENTRY * qglPointParameterfvEXT )( GLenum param, const GLfloat *value ); +void ( APIENTRY * qglColorTableEXT )( int, int, int, int, int, const void * ); -void ( APIENTRY * qglMTexCoord2fSGIS)( GLenum, GLfloat, GLfloat ); -void ( APIENTRY * qglSelectTextureSGIS)( GLenum ); +void ( APIENTRY * qglMTexCoord2fSGIS )( GLenum, GLfloat, GLfloat ); +void ( APIENTRY * qglSelectTextureSGIS )( GLenum ); -void ( APIENTRY * qglActiveTextureARB) (GLenum texture); -void ( APIENTRY * qglClientActiveTextureARB) (GLenum texture); -void ( APIENTRY * qglMultiTexCoord1dARB) (GLenum target, GLdouble s); -void ( APIENTRY * qglMultiTexCoord1dvARB) (GLenum target, const GLdouble *v); -void ( APIENTRY * qglMultiTexCoord1fARB) (GLenum target, GLfloat s); -void ( APIENTRY * qglMultiTexCoord1fvARB) (GLenum target, const GLfloat *v); -void ( APIENTRY * qglMultiTexCoord1iARB) (GLenum target, GLint s); -void ( APIENTRY * qglMultiTexCoord1ivARB) (GLenum target, const GLint *v); -void ( APIENTRY * qglMultiTexCoord1sARB) (GLenum target, GLshort s); -void ( APIENTRY * qglMultiTexCoord1svARB) (GLenum target, const GLshort *v); -void ( APIENTRY * qglMultiTexCoord2dARB) (GLenum target, GLdouble s); -void ( APIENTRY * qglMultiTexCoord2dvARB) (GLenum target, const GLdouble *v); -void ( APIENTRY * qglMultiTexCoord2fARB) (GLenum target, GLfloat s); -void ( APIENTRY * qglMultiTexCoord2fvARB) (GLenum target, const GLfloat *v); -void ( APIENTRY * qglMultiTexCoord2iARB) (GLenum target, GLint s); -void ( APIENTRY * qglMultiTexCoord2ivARB) (GLenum target, const GLint *v); -void ( APIENTRY * qglMultiTexCoord2sARB) (GLenum target, GLshort s); -void ( APIENTRY * qglMultiTexCoord2svARB) (GLenum target, const GLshort *v); -void ( APIENTRY * qglMultiTexCoord3dARB) (GLenum target, GLdouble s); -void ( APIENTRY * qglMultiTexCoord3dvARB) (GLenum target, const GLdouble *v); -void ( APIENTRY * qglMultiTexCoord3fARB) (GLenum target, GLfloat s); -void ( APIENTRY * qglMultiTexCoord3fvARB) (GLenum target, const GLfloat *v); -void ( APIENTRY * qglMultiTexCoord3iARB) (GLenum target, GLint s); -void ( APIENTRY * qglMultiTexCoord3ivARB) (GLenum target, const GLint *v); -void ( APIENTRY * qglMultiTexCoord3sARB) (GLenum target, GLshort s); -void ( APIENTRY * qglMultiTexCoord3svARB) (GLenum target, const GLshort *v); -void ( APIENTRY * qglMultiTexCoord4dARB) (GLenum target, GLdouble s); -void ( APIENTRY * qglMultiTexCoord4dvARB) (GLenum target, const GLdouble *v); -void ( APIENTRY * qglMultiTexCoord4fARB) (GLenum target, GLfloat s); -void ( APIENTRY * qglMultiTexCoord4fvARB) (GLenum target, const GLfloat *v); -void ( APIENTRY * qglMultiTexCoord4iARB) (GLenum target, GLint s); -void ( APIENTRY * qglMultiTexCoord4ivARB) (GLenum target, const GLint *v); -void ( APIENTRY * qglMultiTexCoord4sARB) (GLenum target, GLshort s); -void ( APIENTRY * qglMultiTexCoord4svARB) (GLenum target, const GLshort *v); +void ( APIENTRY * qglActiveTextureARB )( GLenum texture ); +void ( APIENTRY * qglClientActiveTextureARB )( GLenum texture ); +void ( APIENTRY * qglMultiTexCoord1dARB )( GLenum target, GLdouble s ); +void ( APIENTRY * qglMultiTexCoord1dvARB )( GLenum target, const GLdouble *v ); +void ( APIENTRY * qglMultiTexCoord1fARB )( GLenum target, GLfloat s ); +void ( APIENTRY * qglMultiTexCoord1fvARB )( GLenum target, const GLfloat *v ); +void ( APIENTRY * qglMultiTexCoord1iARB )( GLenum target, GLint s ); +void ( APIENTRY * qglMultiTexCoord1ivARB )( GLenum target, const GLint *v ); +void ( APIENTRY * qglMultiTexCoord1sARB )( GLenum target, GLshort s ); +void ( APIENTRY * qglMultiTexCoord1svARB )( GLenum target, const GLshort *v ); +void ( APIENTRY * qglMultiTexCoord2dARB )( GLenum target, GLdouble s ); +void ( APIENTRY * qglMultiTexCoord2dvARB )( GLenum target, const GLdouble *v ); +void ( APIENTRY * qglMultiTexCoord2fARB )( GLenum target, GLfloat s ); +void ( APIENTRY * qglMultiTexCoord2fvARB )( GLenum target, const GLfloat *v ); +void ( APIENTRY * qglMultiTexCoord2iARB )( GLenum target, GLint s ); +void ( APIENTRY * qglMultiTexCoord2ivARB )( GLenum target, const GLint *v ); +void ( APIENTRY * qglMultiTexCoord2sARB )( GLenum target, GLshort s ); +void ( APIENTRY * qglMultiTexCoord2svARB )( GLenum target, const GLshort *v ); +void ( APIENTRY * qglMultiTexCoord3dARB )( GLenum target, GLdouble s ); +void ( APIENTRY * qglMultiTexCoord3dvARB )( GLenum target, const GLdouble *v ); +void ( APIENTRY * qglMultiTexCoord3fARB )( GLenum target, GLfloat s ); +void ( APIENTRY * qglMultiTexCoord3fvARB )( GLenum target, const GLfloat *v ); +void ( APIENTRY * qglMultiTexCoord3iARB )( GLenum target, GLint s ); +void ( APIENTRY * qglMultiTexCoord3ivARB )( GLenum target, const GLint *v ); +void ( APIENTRY * qglMultiTexCoord3sARB )( GLenum target, GLshort s ); +void ( APIENTRY * qglMultiTexCoord3svARB )( GLenum target, const GLshort *v ); +void ( APIENTRY * qglMultiTexCoord4dARB )( GLenum target, GLdouble s ); +void ( APIENTRY * qglMultiTexCoord4dvARB )( GLenum target, const GLdouble *v ); +void ( APIENTRY * qglMultiTexCoord4fARB )( GLenum target, GLfloat s ); +void ( APIENTRY * qglMultiTexCoord4fvARB )( GLenum target, const GLfloat *v ); +void ( APIENTRY * qglMultiTexCoord4iARB )( GLenum target, GLint s ); +void ( APIENTRY * qglMultiTexCoord4ivARB )( GLenum target, const GLint *v ); +void ( APIENTRY * qglMultiTexCoord4sARB )( GLenum target, GLshort s ); +void ( APIENTRY * qglMultiTexCoord4svARB )( GLenum target, const GLshort *v ); -extern "C" void InitIglToQgl( _QERQglTable *g_QglTable ) -{ +extern "C" void InitIglToQgl( _QERQglTable *g_QglTable ){ /* - // initialze the qgl functions - qglAccum = NULL; - qglAlphaFunc = g_QglTable->m_pfn_qglAlphaFunc; - qglAreTexturesResident = NULL; - qglArrayElement = NULL; - qglBegin = g_QglTable->m_pfn_qglBegin; - qglBindTexture = g_QglTable->m_pfn_qglBindTexture; - qglBitmap = NULL; - qglBlendFunc = g_QglTable->m_pfn_qglBlendFunc; - qglCallList = g_QglTable->m_pfn_qglCallList; - qglCallLists = g_QglTable->m_pfn_qglCallLists; - qglClear = g_QglTable->m_pfn_qglClear; - qglClearAccum = NULL; - qglClearColor = g_QglTable->m_pfn_qglClearColor; - qglClearDepth = g_QglTable->m_pfn_qglClearDepth; - qglClearIndex = NULL; - qglClearStencil = NULL; - qglClipPlane = NULL; - qglColor3b = NULL; - qglColor3bv = NULL; - qglColor3d = NULL; - qglColor3dv = NULL; - qglColor3f = g_QglTable->m_pfn_qglColor3f; - qglColor3fv = g_QglTable->m_pfn_qglColor3fv; - qglColor3i = NULL; - qglColor3iv = NULL; - qglColor3s = NULL; - qglColor3sv = NULL; - qglColor3ub = NULL; - qglColor3ubv = NULL; - qglColor3ui = NULL; - qglColor3uiv = NULL; - qglColor3us = NULL; - qglColor3usv = NULL; - qglColor4b = NULL; - qglColor4bv = NULL; - qglColor4d = NULL; - qglColor4dv = NULL; - qglColor4f = g_QglTable->m_pfn_qglColor4f; - qglColor4fv = g_QglTable->m_pfn_qglColor4fv; - qglColor4i = NULL; - qglColor4iv = NULL; - qglColor4s = NULL; - qglColor4sv = NULL; - qglColor4ub = NULL; - qglColor4ubv = NULL; - qglColor4ui = NULL; - qglColor4uiv = NULL; - qglColor4us = NULL; - qglColor4usv = NULL; - qglColorMask = NULL; - qglColorMaterial = NULL; - qglColorPointer = NULL; - qglCopyPixels = NULL; - qglCopyTexImage1D = NULL; - qglCopyTexImage2D = NULL; - qglCopyTexSubImage1D = NULL; - qglCopyTexSubImage2D = NULL; - qglCullFace = g_QglTable->m_pfn_qglCullFace; - qglDeleteLists = g_QglTable->m_pfn_qglDeleteLists; - qglDeleteTextures = g_QglTable->m_pfn_qglDeleteTextures; - qglDepthFunc = g_QglTable->m_pfn_qglDepthFunc; - qglDepthMask = g_QglTable->m_pfn_qglDepthMask; - qglDepthRange = NULL; - qglDisable = g_QglTable->m_pfn_qglDisable; - qglDisableClientState = NULL; - qglDrawArrays = NULL; - qglDrawBuffer = NULL; - qglDrawElements = NULL; - qglDrawPixels = NULL; - qglEdgeFlag = NULL; - qglEdgeFlagPointer = NULL; - qglEdgeFlagv = NULL; - qglEnable = g_QglTable->m_pfn_qglEnable; - qglEnableClientState = NULL; - qglEnd = g_QglTable->m_pfn_qglEnd; - qglEndList = g_QglTable->m_pfn_qglEndList; - qglEvalCoord1d = NULL; - qglEvalCoord1dv = NULL; - qglEvalCoord1f = NULL; - qglEvalCoord1fv = NULL; - qglEvalCoord2d = NULL; - qglEvalCoord2dv = NULL; - qglEvalCoord2f= NULL; - qglEvalCoord2fv = NULL; - qglEvalMesh1 = NULL; - qglEvalMesh2 = NULL; - qglEvalPoint1 = NULL; - qglEvalPoint2 = NULL; - qglFeedbackBuffer = NULL; - qglFinish = NULL; - qglFlush = NULL; - qglFogf = g_QglTable->m_pfn_qglFogf; - qglFogfv = g_QglTable->m_pfn_qglFogfv; - qglFogi = g_QglTable->m_pfn_qglFogi; - qglFogiv = NULL; - qglFrontFace = NULL; - qglFrustum = NULL; - qglGenLists = g_QglTable->m_pfn_qglGenLists; - qglGenTextures = g_QglTable->m_pfn_qglGenTextures; - qglGetBooleanv = NULL; - qglGetClipPlane = NULL; - qglGetDoublev = NULL; - qglGetError = NULL; - qglGetFloatv = NULL; - qglGetIntegerv = NULL; - qglGetLightfv = NULL; - qglGetLightiv = NULL; - qglGetMapdv = NULL; - qglGetMapfv = NULL; - qglGetMapiv = NULL; - qglGetMaterialfv = NULL; - qglGetMaterialiv = NULL; - qglGetPixelMapfv = NULL; - qglGetPixelMapuiv = NULL; - qglGetPixelMapusv = NULL; - qglGetPointerv = NULL; - qglGetPolygonStipple = NULL; - qglGetString = NULL; - qglGetTexEnvfv = NULL; - qglGetTexEnviv = NULL; - qglGetTexGendv = NULL; - qglGetTexGenfv = NULL; - qglGetTexGeniv = NULL; - qglGetTexImage = NULL; - qglGetTexLevelParameterfv = NULL; - qglGetTexLevelParameteriv = NULL; - qglGetTexParameterfv = NULL; - qglGetTexParameteriv = NULL; - qglHint = g_QglTable->m_pfn_qglHint; - qglIndexMask = NULL; - qglIndexPointer = NULL; - qglIndexd = NULL; - qglIndexdv = NULL; - qglIndexf = NULL; - qglIndexfv = NULL; - qglIndexi = NULL; - qglIndexiv = NULL; - qglIndexs = NULL; - qglIndexsv = NULL; - qglIndexub = NULL; - qglIndexubv = NULL; - qglInitNames = NULL; - qglInterleavedArrays = NULL; - qglIsEnabled = NULL; - qglIsList = NULL; - qglIsTexture = NULL; - qglLightModelf = NULL; - qglLightModelfv = NULL; - qglLightModeli = NULL; - qglLightModeliv = NULL; - qglLightf = NULL; - qglLightfv = g_QglTable->m_pfn_qglLightfv; - qglLighti = NULL; - qglLightiv = NULL; - qglLineStipple = g_QglTable->m_pfn_qglLineStipple; - qglLineWidth = g_QglTable->m_pfn_qglLineWidth; - qglListBase = g_QglTable->m_pfn_qglListBase; - qglLoadIdentity = g_QglTable->m_pfn_qglLoadIdentity; - qglLoadMatrixd = NULL; - qglLoadMatrixf = NULL; - qglLoadName = NULL; - qglLogicOp = NULL; - qglMap1d = NULL; - qglMap1f = NULL; - qglMap2d = NULL; - qglMap2f = NULL; - qglMapGrid1d = NULL; - qglMapGrid1f = NULL; - qglMapGrid2d = NULL; - qglMapGrid2f = NULL; - qglMaterialf = g_QglTable->m_pfn_qglMaterialf; - qglMaterialfv = g_QglTable->m_pfn_qglMaterialfv; - qglMateriali = NULL; - qglMaterialiv = NULL; - qglMatrixMode = g_QglTable->m_pfn_qglMatrixMode; - qglMultMatrixd = NULL; - qglMultMatrixf = g_QglTable->m_pfn_qglMultMatrixf; - qglNewList = g_QglTable->m_pfn_qglNewList; - qglNormal3b = NULL; - qglNormal3bv = NULL; - qglNormal3d = NULL; - qglNormal3dv = NULL; - qglNormal3f = g_QglTable->m_pfn_qglNormal3f; - qglNormal3fv = g_QglTable->m_pfn_qglNormal3fv; - qglNormal3i = NULL; - qglNormal3iv = NULL; - qglNormal3s = NULL; - qglNormal3sv = NULL; - qglNormalPointer = NULL; - qglOrtho = g_QglTable->m_pfn_qglOrtho; - qglPassThrough = NULL; - qglPixelMapfv = NULL; - qglPixelMapuiv = NULL; - qglPixelMapusv = NULL; - qglPixelStoref = NULL; - qglPixelStorei = NULL; - qglPixelTransferf = NULL; - qglPixelTransferi = NULL; - qglPixelZoom = NULL; - qglPointSize = g_QglTable->m_pfn_qglPointSize; - qglPolygonMode = g_QglTable->m_pfn_qglPolygonMode; - qglPolygonOffset = NULL; - qglPolygonStipple = NULL; - qglPopAttrib = g_QglTable->m_pfn_qglPopAttrib; - qglPopClientAttrib = NULL; - qglPopMatrix = g_QglTable->m_pfn_qglPopMatrix; - qglPopName = NULL; - qglPrioritizeTextures = NULL; - qglPushAttrib = g_QglTable->m_pfn_qglPushAttrib; - qglPushClientAttrib = NULL; - qglPushMatrix = g_QglTable->m_pfn_qglPushMatrix; - qglPushName = NULL; - qglRasterPos2d = NULL; - qglRasterPos2dv = NULL; - qglRasterPos2f = NULL; - qglRasterPos2fv = NULL; - qglRasterPos2i = NULL; - qglRasterPos2iv = NULL; - qglRasterPos2s = NULL; - qglRasterPos2sv = NULL; - qglRasterPos3d = NULL; - qglRasterPos3dv = NULL; - qglRasterPos3f = NULL; - qglRasterPos3fv = g_QglTable->m_pfn_qglRasterPos3fv; - qglRasterPos3i = NULL; - qglRasterPos3iv = NULL; - qglRasterPos3s = NULL; - qglRasterPos3sv = NULL; - qglRasterPos4d = NULL; - qglRasterPos4dv = NULL; - qglRasterPos4f = NULL; - qglRasterPos4fv = NULL; - qglRasterPos4i = NULL; - qglRasterPos4iv = NULL; - qglRasterPos4s = NULL; - qglRasterPos4sv = NULL; - qglReadBuffer = NULL; - qglReadPixels = NULL; - qglRectd = NULL; - qglRectdv = NULL; - qglRectf = NULL; - qglRectfv = NULL; - qglRecti = NULL; - qglRectiv = NULL; - qglRects = NULL; - qglRectsv = NULL; - qglRenderMode = NULL; - qglRotated = g_QglTable->m_pfn_qglRotated; - qglRotatef = g_QglTable->m_pfn_qglRotatef; - qglScaled = NULL; - qglScalef = g_QglTable->m_pfn_qglScalef; - qglScissor = g_QglTable->m_pfn_qglScissor; - qglSelectBuffer = NULL; - qglShadeModel = g_QglTable->m_pfn_qglShadeModel; - qglStencilFunc = NULL; - qglStencilMask = NULL; - qglStencilOp = NULL; - qglTexCoord1d = NULL; - qglTexCoord1dv = NULL; - qglTexCoord1f = NULL; - qglTexCoord1fv = NULL; - qglTexCoord1i = NULL; - qglTexCoord1iv = NULL; - qglTexCoord1s = NULL; - qglTexCoord1sv = NULL; - qglTexCoord2d = NULL; - qglTexCoord2dv = NULL; - qglTexCoord2f = g_QglTable->m_pfn_qglTexCoord2f; - qglTexCoord2fv = g_QglTable->m_pfn_qglTexCoord2fv; - qglTexCoord2i = NULL; - qglTexCoord2iv = NULL; - qglTexCoord2s = NULL; - qglTexCoord2sv = NULL; - qglTexCoord3d = NULL; - qglTexCoord3dv = NULL; - qglTexCoord3f = NULL; - qglTexCoord3fv = NULL; - qglTexCoord3i = NULL; - qglTexCoord3iv = NULL; - qglTexCoord3s = NULL; - qglTexCoord3sv = NULL; - qglTexCoord4d = NULL; - qglTexCoord4dv = NULL; - qglTexCoord4f = NULL; - qglTexCoord4fv = NULL; - qglTexCoord4i = NULL; - qglTexCoord4iv = NULL; - qglTexCoord4s = NULL; - qglTexCoord4sv = NULL; - qglTexCoordPointer = NULL; - qglTexEnvf = g_QglTable->m_pfn_qglTexEnvf; - qglTexEnvfv = NULL; - qglTexEnvi = NULL; - qglTexEnviv = NULL; - qglTexGend = NULL; - qglTexGendv = NULL; - qglTexGenf = g_QglTable->m_pfn_qglTexGenf; - qglTexGenfv = NULL; - qglTexGeni = NULL; - qglTexGeniv = NULL; - qglTexImage1D = g_QglTable->m_pfn_qglTexImage1D; - qglTexImage2D = g_QglTable->m_pfn_qglTexImage2D; - qglTexParameterf = g_QglTable->m_pfn_qglTexParameterf; - qglTexParameterfv = g_QglTable->m_pfn_qglTexParameterfv; - qglTexParameteri = g_QglTable->m_pfn_qglTexParameteri; - qglTexParameteriv = g_QglTable->m_pfn_qglTexParameteriv; - qglTexSubImage1D = g_QglTable->m_pfn_qglTexSubImage1D; - qglTexSubImage2D = g_QglTable->m_pfn_qglTexSubImage2D; - qglTranslated = g_QglTable->m_pfn_qglTranslated; - qglTranslatef = g_QglTable->m_pfn_qglTranslatef; - qglVertex2d = NULL; - qglVertex2dv = NULL; - qglVertex2f = g_QglTable->m_pfn_qglVertex2f; - qglVertex2fv = NULL; - qglVertex2i = NULL; - qglVertex2iv = NULL; - qglVertex2s = NULL; - qglVertex2sv = NULL; - qglVertex3d = NULL; - qglVertex3dv = NULL; - qglVertex3f = g_QglTable->m_pfn_qglVertex3f; - qglVertex3fv = g_QglTable->m_pfn_qglVertex3fv; - qglVertex3i = NULL; - qglVertex3iv = NULL; - qglVertex3s = NULL; - qglVertex3sv = NULL; - qglVertex4d = NULL; - qglVertex4dv = NULL; - qglVertex4f = NULL; - qglVertex4fv = NULL; - qglVertex4i = NULL; - qglVertex4iv = NULL; - qglVertex4s = NULL; - qglVertex4sv = NULL; - qglVertexPointer = NULL; - qglViewport = g_QglTable->m_pfn_qglViewport; + // initialze the qgl functions + qglAccum = NULL; + qglAlphaFunc = g_QglTable->m_pfn_qglAlphaFunc; + qglAreTexturesResident = NULL; + qglArrayElement = NULL; + qglBegin = g_QglTable->m_pfn_qglBegin; + qglBindTexture = g_QglTable->m_pfn_qglBindTexture; + qglBitmap = NULL; + qglBlendFunc = g_QglTable->m_pfn_qglBlendFunc; + qglCallList = g_QglTable->m_pfn_qglCallList; + qglCallLists = g_QglTable->m_pfn_qglCallLists; + qglClear = g_QglTable->m_pfn_qglClear; + qglClearAccum = NULL; + qglClearColor = g_QglTable->m_pfn_qglClearColor; + qglClearDepth = g_QglTable->m_pfn_qglClearDepth; + qglClearIndex = NULL; + qglClearStencil = NULL; + qglClipPlane = NULL; + qglColor3b = NULL; + qglColor3bv = NULL; + qglColor3d = NULL; + qglColor3dv = NULL; + qglColor3f = g_QglTable->m_pfn_qglColor3f; + qglColor3fv = g_QglTable->m_pfn_qglColor3fv; + qglColor3i = NULL; + qglColor3iv = NULL; + qglColor3s = NULL; + qglColor3sv = NULL; + qglColor3ub = NULL; + qglColor3ubv = NULL; + qglColor3ui = NULL; + qglColor3uiv = NULL; + qglColor3us = NULL; + qglColor3usv = NULL; + qglColor4b = NULL; + qglColor4bv = NULL; + qglColor4d = NULL; + qglColor4dv = NULL; + qglColor4f = g_QglTable->m_pfn_qglColor4f; + qglColor4fv = g_QglTable->m_pfn_qglColor4fv; + qglColor4i = NULL; + qglColor4iv = NULL; + qglColor4s = NULL; + qglColor4sv = NULL; + qglColor4ub = NULL; + qglColor4ubv = NULL; + qglColor4ui = NULL; + qglColor4uiv = NULL; + qglColor4us = NULL; + qglColor4usv = NULL; + qglColorMask = NULL; + qglColorMaterial = NULL; + qglColorPointer = NULL; + qglCopyPixels = NULL; + qglCopyTexImage1D = NULL; + qglCopyTexImage2D = NULL; + qglCopyTexSubImage1D = NULL; + qglCopyTexSubImage2D = NULL; + qglCullFace = g_QglTable->m_pfn_qglCullFace; + qglDeleteLists = g_QglTable->m_pfn_qglDeleteLists; + qglDeleteTextures = g_QglTable->m_pfn_qglDeleteTextures; + qglDepthFunc = g_QglTable->m_pfn_qglDepthFunc; + qglDepthMask = g_QglTable->m_pfn_qglDepthMask; + qglDepthRange = NULL; + qglDisable = g_QglTable->m_pfn_qglDisable; + qglDisableClientState = NULL; + qglDrawArrays = NULL; + qglDrawBuffer = NULL; + qglDrawElements = NULL; + qglDrawPixels = NULL; + qglEdgeFlag = NULL; + qglEdgeFlagPointer = NULL; + qglEdgeFlagv = NULL; + qglEnable = g_QglTable->m_pfn_qglEnable; + qglEnableClientState = NULL; + qglEnd = g_QglTable->m_pfn_qglEnd; + qglEndList = g_QglTable->m_pfn_qglEndList; + qglEvalCoord1d = NULL; + qglEvalCoord1dv = NULL; + qglEvalCoord1f = NULL; + qglEvalCoord1fv = NULL; + qglEvalCoord2d = NULL; + qglEvalCoord2dv = NULL; + qglEvalCoord2f= NULL; + qglEvalCoord2fv = NULL; + qglEvalMesh1 = NULL; + qglEvalMesh2 = NULL; + qglEvalPoint1 = NULL; + qglEvalPoint2 = NULL; + qglFeedbackBuffer = NULL; + qglFinish = NULL; + qglFlush = NULL; + qglFogf = g_QglTable->m_pfn_qglFogf; + qglFogfv = g_QglTable->m_pfn_qglFogfv; + qglFogi = g_QglTable->m_pfn_qglFogi; + qglFogiv = NULL; + qglFrontFace = NULL; + qglFrustum = NULL; + qglGenLists = g_QglTable->m_pfn_qglGenLists; + qglGenTextures = g_QglTable->m_pfn_qglGenTextures; + qglGetBooleanv = NULL; + qglGetClipPlane = NULL; + qglGetDoublev = NULL; + qglGetError = NULL; + qglGetFloatv = NULL; + qglGetIntegerv = NULL; + qglGetLightfv = NULL; + qglGetLightiv = NULL; + qglGetMapdv = NULL; + qglGetMapfv = NULL; + qglGetMapiv = NULL; + qglGetMaterialfv = NULL; + qglGetMaterialiv = NULL; + qglGetPixelMapfv = NULL; + qglGetPixelMapuiv = NULL; + qglGetPixelMapusv = NULL; + qglGetPointerv = NULL; + qglGetPolygonStipple = NULL; + qglGetString = NULL; + qglGetTexEnvfv = NULL; + qglGetTexEnviv = NULL; + qglGetTexGendv = NULL; + qglGetTexGenfv = NULL; + qglGetTexGeniv = NULL; + qglGetTexImage = NULL; + qglGetTexLevelParameterfv = NULL; + qglGetTexLevelParameteriv = NULL; + qglGetTexParameterfv = NULL; + qglGetTexParameteriv = NULL; + qglHint = g_QglTable->m_pfn_qglHint; + qglIndexMask = NULL; + qglIndexPointer = NULL; + qglIndexd = NULL; + qglIndexdv = NULL; + qglIndexf = NULL; + qglIndexfv = NULL; + qglIndexi = NULL; + qglIndexiv = NULL; + qglIndexs = NULL; + qglIndexsv = NULL; + qglIndexub = NULL; + qglIndexubv = NULL; + qglInitNames = NULL; + qglInterleavedArrays = NULL; + qglIsEnabled = NULL; + qglIsList = NULL; + qglIsTexture = NULL; + qglLightModelf = NULL; + qglLightModelfv = NULL; + qglLightModeli = NULL; + qglLightModeliv = NULL; + qglLightf = NULL; + qglLightfv = g_QglTable->m_pfn_qglLightfv; + qglLighti = NULL; + qglLightiv = NULL; + qglLineStipple = g_QglTable->m_pfn_qglLineStipple; + qglLineWidth = g_QglTable->m_pfn_qglLineWidth; + qglListBase = g_QglTable->m_pfn_qglListBase; + qglLoadIdentity = g_QglTable->m_pfn_qglLoadIdentity; + qglLoadMatrixd = NULL; + qglLoadMatrixf = NULL; + qglLoadName = NULL; + qglLogicOp = NULL; + qglMap1d = NULL; + qglMap1f = NULL; + qglMap2d = NULL; + qglMap2f = NULL; + qglMapGrid1d = NULL; + qglMapGrid1f = NULL; + qglMapGrid2d = NULL; + qglMapGrid2f = NULL; + qglMaterialf = g_QglTable->m_pfn_qglMaterialf; + qglMaterialfv = g_QglTable->m_pfn_qglMaterialfv; + qglMateriali = NULL; + qglMaterialiv = NULL; + qglMatrixMode = g_QglTable->m_pfn_qglMatrixMode; + qglMultMatrixd = NULL; + qglMultMatrixf = g_QglTable->m_pfn_qglMultMatrixf; + qglNewList = g_QglTable->m_pfn_qglNewList; + qglNormal3b = NULL; + qglNormal3bv = NULL; + qglNormal3d = NULL; + qglNormal3dv = NULL; + qglNormal3f = g_QglTable->m_pfn_qglNormal3f; + qglNormal3fv = g_QglTable->m_pfn_qglNormal3fv; + qglNormal3i = NULL; + qglNormal3iv = NULL; + qglNormal3s = NULL; + qglNormal3sv = NULL; + qglNormalPointer = NULL; + qglOrtho = g_QglTable->m_pfn_qglOrtho; + qglPassThrough = NULL; + qglPixelMapfv = NULL; + qglPixelMapuiv = NULL; + qglPixelMapusv = NULL; + qglPixelStoref = NULL; + qglPixelStorei = NULL; + qglPixelTransferf = NULL; + qglPixelTransferi = NULL; + qglPixelZoom = NULL; + qglPointSize = g_QglTable->m_pfn_qglPointSize; + qglPolygonMode = g_QglTable->m_pfn_qglPolygonMode; + qglPolygonOffset = NULL; + qglPolygonStipple = NULL; + qglPopAttrib = g_QglTable->m_pfn_qglPopAttrib; + qglPopClientAttrib = NULL; + qglPopMatrix = g_QglTable->m_pfn_qglPopMatrix; + qglPopName = NULL; + qglPrioritizeTextures = NULL; + qglPushAttrib = g_QglTable->m_pfn_qglPushAttrib; + qglPushClientAttrib = NULL; + qglPushMatrix = g_QglTable->m_pfn_qglPushMatrix; + qglPushName = NULL; + qglRasterPos2d = NULL; + qglRasterPos2dv = NULL; + qglRasterPos2f = NULL; + qglRasterPos2fv = NULL; + qglRasterPos2i = NULL; + qglRasterPos2iv = NULL; + qglRasterPos2s = NULL; + qglRasterPos2sv = NULL; + qglRasterPos3d = NULL; + qglRasterPos3dv = NULL; + qglRasterPos3f = NULL; + qglRasterPos3fv = g_QglTable->m_pfn_qglRasterPos3fv; + qglRasterPos3i = NULL; + qglRasterPos3iv = NULL; + qglRasterPos3s = NULL; + qglRasterPos3sv = NULL; + qglRasterPos4d = NULL; + qglRasterPos4dv = NULL; + qglRasterPos4f = NULL; + qglRasterPos4fv = NULL; + qglRasterPos4i = NULL; + qglRasterPos4iv = NULL; + qglRasterPos4s = NULL; + qglRasterPos4sv = NULL; + qglReadBuffer = NULL; + qglReadPixels = NULL; + qglRectd = NULL; + qglRectdv = NULL; + qglRectf = NULL; + qglRectfv = NULL; + qglRecti = NULL; + qglRectiv = NULL; + qglRects = NULL; + qglRectsv = NULL; + qglRenderMode = NULL; + qglRotated = g_QglTable->m_pfn_qglRotated; + qglRotatef = g_QglTable->m_pfn_qglRotatef; + qglScaled = NULL; + qglScalef = g_QglTable->m_pfn_qglScalef; + qglScissor = g_QglTable->m_pfn_qglScissor; + qglSelectBuffer = NULL; + qglShadeModel = g_QglTable->m_pfn_qglShadeModel; + qglStencilFunc = NULL; + qglStencilMask = NULL; + qglStencilOp = NULL; + qglTexCoord1d = NULL; + qglTexCoord1dv = NULL; + qglTexCoord1f = NULL; + qglTexCoord1fv = NULL; + qglTexCoord1i = NULL; + qglTexCoord1iv = NULL; + qglTexCoord1s = NULL; + qglTexCoord1sv = NULL; + qglTexCoord2d = NULL; + qglTexCoord2dv = NULL; + qglTexCoord2f = g_QglTable->m_pfn_qglTexCoord2f; + qglTexCoord2fv = g_QglTable->m_pfn_qglTexCoord2fv; + qglTexCoord2i = NULL; + qglTexCoord2iv = NULL; + qglTexCoord2s = NULL; + qglTexCoord2sv = NULL; + qglTexCoord3d = NULL; + qglTexCoord3dv = NULL; + qglTexCoord3f = NULL; + qglTexCoord3fv = NULL; + qglTexCoord3i = NULL; + qglTexCoord3iv = NULL; + qglTexCoord3s = NULL; + qglTexCoord3sv = NULL; + qglTexCoord4d = NULL; + qglTexCoord4dv = NULL; + qglTexCoord4f = NULL; + qglTexCoord4fv = NULL; + qglTexCoord4i = NULL; + qglTexCoord4iv = NULL; + qglTexCoord4s = NULL; + qglTexCoord4sv = NULL; + qglTexCoordPointer = NULL; + qglTexEnvf = g_QglTable->m_pfn_qglTexEnvf; + qglTexEnvfv = NULL; + qglTexEnvi = NULL; + qglTexEnviv = NULL; + qglTexGend = NULL; + qglTexGendv = NULL; + qglTexGenf = g_QglTable->m_pfn_qglTexGenf; + qglTexGenfv = NULL; + qglTexGeni = NULL; + qglTexGeniv = NULL; + qglTexImage1D = g_QglTable->m_pfn_qglTexImage1D; + qglTexImage2D = g_QglTable->m_pfn_qglTexImage2D; + qglTexParameterf = g_QglTable->m_pfn_qglTexParameterf; + qglTexParameterfv = g_QglTable->m_pfn_qglTexParameterfv; + qglTexParameteri = g_QglTable->m_pfn_qglTexParameteri; + qglTexParameteriv = g_QglTable->m_pfn_qglTexParameteriv; + qglTexSubImage1D = g_QglTable->m_pfn_qglTexSubImage1D; + qglTexSubImage2D = g_QglTable->m_pfn_qglTexSubImage2D; + qglTranslated = g_QglTable->m_pfn_qglTranslated; + qglTranslatef = g_QglTable->m_pfn_qglTranslatef; + qglVertex2d = NULL; + qglVertex2dv = NULL; + qglVertex2f = g_QglTable->m_pfn_qglVertex2f; + qglVertex2fv = NULL; + qglVertex2i = NULL; + qglVertex2iv = NULL; + qglVertex2s = NULL; + qglVertex2sv = NULL; + qglVertex3d = NULL; + qglVertex3dv = NULL; + qglVertex3f = g_QglTable->m_pfn_qglVertex3f; + qglVertex3fv = g_QglTable->m_pfn_qglVertex3fv; + qglVertex3i = NULL; + qglVertex3iv = NULL; + qglVertex3s = NULL; + qglVertex3sv = NULL; + qglVertex4d = NULL; + qglVertex4dv = NULL; + qglVertex4f = NULL; + qglVertex4fv = NULL; + qglVertex4i = NULL; + qglVertex4iv = NULL; + qglVertex4s = NULL; + qglVertex4sv = NULL; + qglVertexPointer = NULL; + qglViewport = g_QglTable->m_pfn_qglViewport; - qglPointParameterfEXT = NULL; - qglPointParameterfvEXT = NULL; - qglColorTableEXT = NULL; + qglPointParameterfEXT = NULL; + qglPointParameterfvEXT = NULL; + qglColorTableEXT = NULL; - qglMTexCoord2fSGIS = NULL; - qglSelectTextureSGIS = NULL; + qglMTexCoord2fSGIS = NULL; + qglSelectTextureSGIS = NULL; - qglActiveTextureARB = NULL; - qglClientActiveTextureARB = NULL; - qglMultiTexCoord1dARB = NULL; - qglMultiTexCoord1dvARB = NULL; - qglMultiTexCoord1fARB = NULL; - qglMultiTexCoord1fvARB = NULL; - qglMultiTexCoord1iARB = NULL; - qglMultiTexCoord1ivARB = NULL; - qglMultiTexCoord1sARB = NULL; - qglMultiTexCoord1svARB = NULL; - qglMultiTexCoord2dARB = NULL; - qglMultiTexCoord2dvARB = NULL; - qglMultiTexCoord2fARB = NULL; - qglMultiTexCoord2fvARB = NULL; - qglMultiTexCoord2iARB = NULL; - qglMultiTexCoord2ivARB = NULL; - qglMultiTexCoord2sARB = NULL; - qglMultiTexCoord2svARB = NULL; - qglMultiTexCoord3dARB = NULL; - qglMultiTexCoord3dvARB = NULL; - qglMultiTexCoord3fARB = NULL; - qglMultiTexCoord3fvARB = NULL; - qglMultiTexCoord3iARB = NULL; - qglMultiTexCoord3ivARB = NULL; - qglMultiTexCoord3sARB = NULL; - qglMultiTexCoord3svARB = NULL; - qglMultiTexCoord4dARB = NULL; - qglMultiTexCoord4dvARB = NULL; - qglMultiTexCoord4fARB = NULL; - qglMultiTexCoord4fvARB = NULL; - qglMultiTexCoord4iARB = NULL; - qglMultiTexCoord4ivARB = NULL; - qglMultiTexCoord4sARB = NULL; - qglMultiTexCoord4svARB = NULL; -*/ + qglActiveTextureARB = NULL; + qglClientActiveTextureARB = NULL; + qglMultiTexCoord1dARB = NULL; + qglMultiTexCoord1dvARB = NULL; + qglMultiTexCoord1fARB = NULL; + qglMultiTexCoord1fvARB = NULL; + qglMultiTexCoord1iARB = NULL; + qglMultiTexCoord1ivARB = NULL; + qglMultiTexCoord1sARB = NULL; + qglMultiTexCoord1svARB = NULL; + qglMultiTexCoord2dARB = NULL; + qglMultiTexCoord2dvARB = NULL; + qglMultiTexCoord2fARB = NULL; + qglMultiTexCoord2fvARB = NULL; + qglMultiTexCoord2iARB = NULL; + qglMultiTexCoord2ivARB = NULL; + qglMultiTexCoord2sARB = NULL; + qglMultiTexCoord2svARB = NULL; + qglMultiTexCoord3dARB = NULL; + qglMultiTexCoord3dvARB = NULL; + qglMultiTexCoord3fARB = NULL; + qglMultiTexCoord3fvARB = NULL; + qglMultiTexCoord3iARB = NULL; + qglMultiTexCoord3ivARB = NULL; + qglMultiTexCoord3sARB = NULL; + qglMultiTexCoord3svARB = NULL; + qglMultiTexCoord4dARB = NULL; + qglMultiTexCoord4dvARB = NULL; + qglMultiTexCoord4fARB = NULL; + qglMultiTexCoord4fvARB = NULL; + qglMultiTexCoord4iARB = NULL; + qglMultiTexCoord4ivARB = NULL; + qglMultiTexCoord4sARB = NULL; + qglMultiTexCoord4svARB = NULL; + */ } #endif // _IGL_TO_QGL_H_ diff --git a/libs/l_net/l_net.c b/libs/l_net/l_net.c index 49f2014c..8d475080 100644 --- a/libs/l_net/l_net.c +++ b/libs/l_net/l_net.c @@ -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-2007 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 + */ //==================================================================== // @@ -39,24 +39,22 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define GetMemory malloc #define FreeMemory free -#define qtrue 1 -#define qfalse 0 +#define qtrue 1 +#define qfalse 0 #ifdef _DEBUG -void WinPrint(char *str, ...) -{ +void WinPrint( char *str, ... ){ va_list argptr; - char text[4096]; + char text[4096]; - va_start (argptr,str); - vsprintf (text, str, argptr); - va_end (argptr); + va_start( argptr,str ); + vsprintf( text, str, argptr ); + va_end( argptr ); - printf(text); + printf( text ); } #else -void WinPrint(char *str, ...) -{ +void WinPrint( char *str, ... ){ } #endif @@ -66,13 +64,12 @@ void WinPrint(char *str, ...) // Returns: - // Changes Globals: - //=========================================================================== -void Net_SetAddressPort(address_t *address, int port) -{ +void Net_SetAddressPort( address_t *address, int port ){ sockaddr_t addr; - WINS_StringToAddr(address->ip, &addr); - WINS_SetSocketPort(&addr, port); - strcpy(address->ip, WINS_AddrToString(&addr)); + WINS_StringToAddr( address->ip, &addr ); + WINS_SetSocketPort( &addr, port ); + strcpy( address->ip, WINS_AddrToString( &addr ) ); } //end of the function Net_SetAddressPort //=========================================================================== // @@ -80,13 +77,12 @@ void Net_SetAddressPort(address_t *address, int port) // Returns: - // Changes Globals: - //=========================================================================== -int Net_AddressCompare(address_t *addr1, address_t *addr2) -{ +int Net_AddressCompare( address_t *addr1, address_t *addr2 ){ #ifdef _WIN32 - return stricmp(addr1->ip, addr2->ip); + return stricmp( addr1->ip, addr2->ip ); #endif #ifdef __linux__ - return strcasecmp(addr1->ip, addr2->ip); + return strcasecmp( addr1->ip, addr2->ip ); #endif } //end of the function Net_AddressCompare //=========================================================================== @@ -95,9 +91,8 @@ int Net_AddressCompare(address_t *addr1, address_t *addr2) // Returns: - // Changes Globals: - //=========================================================================== -void Net_SocketToAddress(socket_t *sock, address_t *address) -{ - strcpy(address->ip, WINS_AddrToString(&sock->addr)); +void Net_SocketToAddress( socket_t *sock, address_t *address ){ + strcpy( address->ip, WINS_AddrToString( &sock->addr ) ); } //end of the function Net_SocketToAddress //=========================================================================== // @@ -105,16 +100,15 @@ void Net_SocketToAddress(socket_t *sock, address_t *address) // Returns: - // Changes Globals: - //=========================================================================== -int Net_Send(socket_t *sock, netmessage_t *msg) -{ +int Net_Send( socket_t *sock, netmessage_t *msg ){ int size; size = msg->size; msg->size = 0; - NMSG_WriteLong(msg, size-4); + NMSG_WriteLong( msg, size - 4 ); msg->size = size; //WinPrint("Net_Send: message of size %d\n", sendmsg.size); - return WINS_Write(sock->socket, msg->data, msg->size, NULL); + return WINS_Write( sock->socket, msg->data, msg->size, NULL ); } //end of the function Net_SendSocketReliable //=========================================================================== // returns the number of bytes recieved @@ -124,64 +118,60 @@ int Net_Send(socket_t *sock, netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -int Net_Receive(socket_t *sock, netmessage_t *msg) -{ +int Net_Receive( socket_t *sock, netmessage_t *msg ){ int curread; - if (sock->remaining > 0) - { - curread = WINS_Read(sock->socket, &sock->msg.data[sock->msg.size], sock->remaining, NULL); - if (curread == -1) - { - WinPrint("Net_Receive: read error\n"); + if ( sock->remaining > 0 ) { + curread = WINS_Read( sock->socket, &sock->msg.data[sock->msg.size], sock->remaining, NULL ); + if ( curread == -1 ) { + WinPrint( "Net_Receive: read error\n" ); return -1; } //end if sock->remaining -= curread; sock->msg.size += curread; - if (sock->remaining <= 0) - { + if ( sock->remaining <= 0 ) { sock->remaining = 0; - memcpy(msg, &sock->msg, sizeof(netmessage_t)); + memcpy( msg, &sock->msg, sizeof( netmessage_t ) ); sock->msg.size = 0; return msg->size - 4; } //end if return 0; } //end if - sock->msg.size = WINS_Read(sock->socket, sock->msg.data, 4, NULL); - if (sock->msg.size == 0) return 0; - if (sock->msg.size == -1) - { - WinPrint("Net_Receive: size header read error\n"); + sock->msg.size = WINS_Read( sock->socket, sock->msg.data, 4, NULL ); + if ( sock->msg.size == 0 ) { + return 0; + } + if ( sock->msg.size == -1 ) { + WinPrint( "Net_Receive: size header read error\n" ); return -1; } //end if - //WinPrint("Net_Receive: message size header %d\n", msg->size); + //WinPrint("Net_Receive: message size header %d\n", msg->size); sock->msg.read = 0; - sock->remaining = NMSG_ReadLong(&sock->msg); - if (sock->remaining == 0) return 0; - if (sock->remaining < 0 || sock->remaining > MAX_NETMESSAGE) - { - WinPrint("Net_Receive: invalid message size %d\n", sock->remaining); + sock->remaining = NMSG_ReadLong( &sock->msg ); + if ( sock->remaining == 0 ) { + return 0; + } + if ( sock->remaining < 0 || sock->remaining > MAX_NETMESSAGE ) { + WinPrint( "Net_Receive: invalid message size %d\n", sock->remaining ); return -1; } //end if - //try to read the message - curread = WINS_Read(sock->socket, &sock->msg.data[sock->msg.size], sock->remaining, NULL); - if (curread == -1) - { - WinPrint("Net_Receive: read error\n"); + //try to read the message + curread = WINS_Read( sock->socket, &sock->msg.data[sock->msg.size], sock->remaining, NULL ); + if ( curread == -1 ) { + WinPrint( "Net_Receive: read error\n" ); return -1; } //end if sock->remaining -= curread; sock->msg.size += curread; - if (sock->remaining <= 0) - { + if ( sock->remaining <= 0 ) { sock->remaining = 0; - memcpy(msg, &sock->msg, sizeof(netmessage_t)); + memcpy( msg, &sock->msg, sizeof( netmessage_t ) ); sock->msg.size = 0; return msg->size - 4; } //end if - //the message has not been completely read yet + //the message has not been completely read yet #ifdef _DEBUG - printf("++timo TODO: debug the Net_Receive on big size messages\n"); + printf( "++timo TODO: debug the Net_Receive on big size messages\n" ); #endif return 0; } //end of the function Net_Receive @@ -191,12 +181,11 @@ int Net_Receive(socket_t *sock, netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -socket_t *Net_AllocSocket(void) -{ +socket_t *Net_AllocSocket( void ){ socket_t *sock; - sock = (socket_t *) GetMemory(sizeof(socket_t)); - memset(sock, 0, sizeof(socket_t)); + sock = (socket_t *) GetMemory( sizeof( socket_t ) ); + memset( sock, 0, sizeof( socket_t ) ); return sock; } //end of the function Net_AllocSocket //=========================================================================== @@ -205,9 +194,8 @@ socket_t *Net_AllocSocket(void) // Returns: - // Changes Globals: - //=========================================================================== -void Net_FreeSocket(socket_t *sock) -{ - FreeMemory(sock); +void Net_FreeSocket( socket_t *sock ){ + FreeMemory( sock ); } //end of the function Net_FreeSocket //=========================================================================== // @@ -215,36 +203,35 @@ void Net_FreeSocket(socket_t *sock) // Returns: - // Changes Globals: - //=========================================================================== -socket_t *Net_Connect(address_t *address, int port) -{ +socket_t *Net_Connect( address_t *address, int port ){ int newsock; socket_t *sock; sockaddr_t sendaddr; // see if we can resolve the host name - WINS_StringToAddr(address->ip, &sendaddr); + WINS_StringToAddr( address->ip, &sendaddr ); - newsock = WINS_OpenReliableSocket(port); - if (newsock == -1) return NULL; + newsock = WINS_OpenReliableSocket( port ); + if ( newsock == -1 ) { + return NULL; + } sock = Net_AllocSocket(); - if (sock == NULL) - { - WINS_CloseSocket(newsock); + if ( sock == NULL ) { + WINS_CloseSocket( newsock ); return NULL; } //end if sock->socket = newsock; //connect to the host - if (WINS_Connect(newsock, &sendaddr) == -1) - { - Net_FreeSocket(sock); - WINS_CloseSocket(newsock); - WinPrint("Net_Connect: error connecting\n"); + if ( WINS_Connect( newsock, &sendaddr ) == -1 ) { + Net_FreeSocket( sock ); + WINS_CloseSocket( newsock ); + WinPrint( "Net_Connect: error connecting\n" ); return NULL; } //end if - memcpy(&sock->addr, &sendaddr, sizeof(sockaddr_t)); + memcpy( &sock->addr, &sendaddr, sizeof( sockaddr_t ) ); //now we can send messages // return sock; @@ -256,28 +243,27 @@ socket_t *Net_Connect(address_t *address, int port) // Returns: - // Changes Globals: - //=========================================================================== -socket_t *Net_ListenSocket(int port) -{ +socket_t *Net_ListenSocket( int port ){ int newsock; socket_t *sock; - newsock = WINS_OpenReliableSocket(port); - if (newsock == -1) return NULL; + newsock = WINS_OpenReliableSocket( port ); + if ( newsock == -1 ) { + return NULL; + } - if (WINS_Listen(newsock) == -1) - { - WINS_CloseSocket(newsock); + if ( WINS_Listen( newsock ) == -1 ) { + WINS_CloseSocket( newsock ); return NULL; } //end if sock = Net_AllocSocket(); - if (sock == NULL) - { - WINS_CloseSocket(newsock); + if ( sock == NULL ) { + WINS_CloseSocket( newsock ); return NULL; } //end if sock->socket = newsock; - WINS_GetSocketAddr(newsock, &sock->addr); - WinPrint("listen socket opened at %s\n", WINS_AddrToString(&sock->addr)); + WINS_GetSocketAddr( newsock, &sock->addr ); + WinPrint( "listen socket opened at %s\n", WINS_AddrToString( &sock->addr ) ); // return sock; } //end of the function Net_ListenSocket @@ -287,23 +273,23 @@ socket_t *Net_ListenSocket(int port) // Returns: - // Changes Globals: - //=========================================================================== -socket_t *Net_Accept(socket_t *sock) -{ +socket_t *Net_Accept( socket_t *sock ){ int newsocket; sockaddr_t sendaddr; socket_t *newsock; - newsocket = WINS_Accept(sock->socket, &sendaddr); - if (newsocket == -1) return NULL; + newsocket = WINS_Accept( sock->socket, &sendaddr ); + if ( newsocket == -1 ) { + return NULL; + } newsock = Net_AllocSocket(); - if (newsock == NULL) - { - WINS_CloseSocket(newsocket); + if ( newsock == NULL ) { + WINS_CloseSocket( newsocket ); return NULL; } //end if newsock->socket = newsocket; - memcpy(&newsock->addr, &sendaddr, sizeof(sockaddr_t)); + memcpy( &newsock->addr, &sendaddr, sizeof( sockaddr_t ) ); // return newsock; } //end of the function Net_Accept @@ -313,10 +299,9 @@ socket_t *Net_Accept(socket_t *sock) // Returns: - // Changes Globals: - //=========================================================================== -void Net_Disconnect(socket_t *sock) -{ - WINS_CloseSocket(sock->socket); - Net_FreeSocket(sock); +void Net_Disconnect( socket_t *sock ){ + WINS_CloseSocket( sock->socket ); + Net_FreeSocket( sock ); } //end of the function Net_Disconnect //=========================================================================== // @@ -324,9 +309,8 @@ void Net_Disconnect(socket_t *sock) // Returns: - // Changes Globals: - //=========================================================================== -void Net_StringToAddress(char *string, address_t *address) -{ - strcpy(address->ip, string); +void Net_StringToAddress( char *string, address_t *address ){ + strcpy( address->ip, string ); } //end of the function Net_StringToAddress //=========================================================================== // @@ -334,9 +318,8 @@ void Net_StringToAddress(char *string, address_t *address) // Returns: - // Changes Globals: - //=========================================================================== -void Net_MyAddress(address_t *address) -{ - strcpy(address->ip, WINS_MyAddress()); +void Net_MyAddress( address_t *address ){ + strcpy( address->ip, WINS_MyAddress() ); } //end of the function Net_MyAddress //=========================================================================== // @@ -344,13 +327,13 @@ void Net_MyAddress(address_t *address) // Returns: - // Changes Globals: - //=========================================================================== -int Net_Setup(void) -{ - if( !WINS_Init() ) +int Net_Setup( void ){ + if ( !WINS_Init() ) { return qfalse; + } // - WinPrint("my address is %s\n", WINS_MyAddress()); + WinPrint( "my address is %s\n", WINS_MyAddress() ); // return qtrue; } //end of the function Net_Setup @@ -360,8 +343,7 @@ int Net_Setup(void) // Returns: - // Changes Globals: - //=========================================================================== -void Net_Shutdown(void) -{ +void Net_Shutdown( void ){ WINS_Shutdown(); } //end of the function Net_Shutdown //=========================================================================== @@ -370,8 +352,7 @@ void Net_Shutdown(void) // Returns: - // Changes Globals: - //=========================================================================== -void NMSG_Clear(netmessage_t *msg) -{ +void NMSG_Clear( netmessage_t *msg ){ msg->size = 4; } //end of the function NMSG_Clear //=========================================================================== @@ -380,14 +361,13 @@ void NMSG_Clear(netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -void NMSG_WriteChar (netmessage_t *msg, int c) -{ - if (c < -128 || c > 127) - WinPrint("NMSG_WriteChar: range error\n"); +void NMSG_WriteChar( netmessage_t *msg, int c ){ + if ( c < -128 || c > 127 ) { + WinPrint( "NMSG_WriteChar: range error\n" ); + } - if (msg->size >= MAX_NETMESSAGE) - { - WinPrint("NMSG_WriteChar: overflow\n"); + if ( msg->size >= MAX_NETMESSAGE ) { + WinPrint( "NMSG_WriteChar: overflow\n" ); return; } //end if msg->data[msg->size] = c; @@ -399,14 +379,13 @@ void NMSG_WriteChar (netmessage_t *msg, int c) // Returns: - // Changes Globals: - //=========================================================================== -void NMSG_WriteByte(netmessage_t *msg, int c) -{ - if (c < -128 || c > 127) - WinPrint("NMSG_WriteByte: range error\n"); +void NMSG_WriteByte( netmessage_t *msg, int c ){ + if ( c < -128 || c > 127 ) { + WinPrint( "NMSG_WriteByte: range error\n" ); + } - if (msg->size + 1 >= MAX_NETMESSAGE) - { - WinPrint("NMSG_WriteByte: overflow\n"); + if ( msg->size + 1 >= MAX_NETMESSAGE ) { + WinPrint( "NMSG_WriteByte: overflow\n" ); return; } //end if msg->data[msg->size] = c; @@ -418,18 +397,17 @@ void NMSG_WriteByte(netmessage_t *msg, int c) // Returns: - // Changes Globals: - //=========================================================================== -void NMSG_WriteShort(netmessage_t *msg, int c) -{ - if (c < ((short)0x8000) || c > (short)0x7fff) - WinPrint("NMSG_WriteShort: range error"); +void NMSG_WriteShort( netmessage_t *msg, int c ){ + if ( c < ( (short)0x8000 ) || c > (short)0x7fff ) { + WinPrint( "NMSG_WriteShort: range error" ); + } - if (msg->size + 2 >= MAX_NETMESSAGE) - { - WinPrint("NMSG_WriteShort: overflow\n"); + if ( msg->size + 2 >= MAX_NETMESSAGE ) { + WinPrint( "NMSG_WriteShort: overflow\n" ); return; } //end if - msg->data[msg->size] = c&0xff; - msg->data[msg->size+1] = c>>8; + msg->data[msg->size] = c & 0xff; + msg->data[msg->size + 1] = c >> 8; msg->size += 2; } //end of the function NMSG_WriteShort //=========================================================================== @@ -438,17 +416,15 @@ void NMSG_WriteShort(netmessage_t *msg, int c) // Returns: - // Changes Globals: - //=========================================================================== -void NMSG_WriteLong(netmessage_t *msg, int c) -{ - if (msg->size + 4 >= MAX_NETMESSAGE) - { - WinPrint("NMSG_WriteLong: overflow\n"); +void NMSG_WriteLong( netmessage_t *msg, int c ){ + if ( msg->size + 4 >= MAX_NETMESSAGE ) { + WinPrint( "NMSG_WriteLong: overflow\n" ); return; } //end if - msg->data[msg->size] = c&0xff; - msg->data[msg->size+1] = (c>>8)&0xff; - msg->data[msg->size+2] = (c>>16)&0xff; - msg->data[msg->size+3] = c>>24; + msg->data[msg->size] = c & 0xff; + msg->data[msg->size + 1] = ( c >> 8 ) & 0xff; + msg->data[msg->size + 2] = ( c >> 16 ) & 0xff; + msg->data[msg->size + 3] = c >> 24; msg->size += 4; } //end of the function NMSG_WriteLong //=========================================================================== @@ -457,17 +433,15 @@ void NMSG_WriteLong(netmessage_t *msg, int c) // Returns: - // Changes Globals: - //=========================================================================== -void NMSG_WriteFloat(netmessage_t *msg, float c) -{ - if (msg->size + 4 >= MAX_NETMESSAGE) - { - WinPrint("NMSG_WriteLong: overflow\n"); +void NMSG_WriteFloat( netmessage_t *msg, float c ){ + if ( msg->size + 4 >= MAX_NETMESSAGE ) { + WinPrint( "NMSG_WriteLong: overflow\n" ); return; } //end if - msg->data[msg->size] = *((int *)&c)&0xff; - msg->data[msg->size+1] = (*((int *)&c)>>8)&0xff; - msg->data[msg->size+2] = (*((int *)&c)>>16)&0xff; - msg->data[msg->size+3] = *((int *)&c)>>24; + msg->data[msg->size] = *( (int *)&c ) & 0xff; + msg->data[msg->size + 1] = ( *( (int *)&c ) >> 8 ) & 0xff; + msg->data[msg->size + 2] = ( *( (int *)&c ) >> 16 ) & 0xff; + msg->data[msg->size + 3] = *( (int *)&c ) >> 24; msg->size += 4; } //end of the function NMSG_WriteFloat //=========================================================================== @@ -476,15 +450,13 @@ void NMSG_WriteFloat(netmessage_t *msg, float c) // Returns: - // Changes Globals: - //=========================================================================== -void NMSG_WriteString(netmessage_t *msg, char *string) -{ - if (msg->size + strlen(string) + 1 >= MAX_NETMESSAGE) - { - WinPrint("NMSG_WriteString: overflow\n"); +void NMSG_WriteString( netmessage_t *msg, char *string ){ + if ( msg->size + strlen( string ) + 1 >= MAX_NETMESSAGE ) { + WinPrint( "NMSG_WriteString: overflow\n" ); return; } //end if - memcpy(&msg->data[msg->size], string, strlen(string) + 1); - msg->size += strlen(string) + 1; + memcpy( &msg->data[msg->size], string, strlen( string ) + 1 ); + msg->size += strlen( string ) + 1; } //end of the function NMSG_WriteString //=========================================================================== // @@ -492,8 +464,7 @@ void NMSG_WriteString(netmessage_t *msg, char *string) // Returns: - // Changes Globals: - //=========================================================================== -void NMSG_ReadStart(netmessage_t *msg) -{ +void NMSG_ReadStart( netmessage_t *msg ){ msg->readoverflow = qfalse; msg->read = 4; } //end of the function NMSG_ReadStart @@ -503,16 +474,14 @@ void NMSG_ReadStart(netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -int NMSG_ReadChar(netmessage_t *msg) -{ - if (msg->read + 1 > msg->size) - { +int NMSG_ReadChar( netmessage_t *msg ){ + if ( msg->read + 1 > msg->size ) { msg->readoverflow = qtrue; - WinPrint("NMSG_ReadChar: read overflow\n"); + WinPrint( "NMSG_ReadChar: read overflow\n" ); return 0; } //end if msg->read++; - return msg->data[msg->read-1]; + return msg->data[msg->read - 1]; } //end of the function NMSG_ReadChar //=========================================================================== // @@ -520,16 +489,14 @@ int NMSG_ReadChar(netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -int NMSG_ReadByte(netmessage_t *msg) -{ - if (msg->read + 1 > msg->size) - { +int NMSG_ReadByte( netmessage_t *msg ){ + if ( msg->read + 1 > msg->size ) { msg->readoverflow = qtrue; - WinPrint("NMSG_ReadByte: read overflow\n"); + WinPrint( "NMSG_ReadByte: read overflow\n" ); return 0; } //end if msg->read++; - return msg->data[msg->read-1]; + return msg->data[msg->read - 1]; } //end of the function NMSG_ReadByte //=========================================================================== // @@ -537,17 +504,15 @@ int NMSG_ReadByte(netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -int NMSG_ReadShort(netmessage_t *msg) -{ +int NMSG_ReadShort( netmessage_t *msg ){ int c; - if (msg->read + 2 > msg->size) - { + if ( msg->read + 2 > msg->size ) { msg->readoverflow = qtrue; - WinPrint("NMSG_ReadShort: read overflow\n"); + WinPrint( "NMSG_ReadShort: read overflow\n" ); return 0; } //end if - c = (short)(msg->data[msg->read] + (msg->data[msg->read+1]<<8)); + c = (short)( msg->data[msg->read] + ( msg->data[msg->read + 1] << 8 ) ); msg->read += 2; return c; } //end of the function NMSG_ReadShort @@ -557,20 +522,18 @@ int NMSG_ReadShort(netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -int NMSG_ReadLong(netmessage_t *msg) -{ +int NMSG_ReadLong( netmessage_t *msg ){ int c; - if (msg->read + 4 > msg->size) - { + if ( msg->read + 4 > msg->size ) { msg->readoverflow = qtrue; - WinPrint("NMSG_ReadLong: read overflow\n"); + WinPrint( "NMSG_ReadLong: read overflow\n" ); return 0; } //end if c = msg->data[msg->read] - + (msg->data[msg->read+1]<<8) - + (msg->data[msg->read+2]<<16) - + (msg->data[msg->read+3]<<24); + + ( msg->data[msg->read + 1] << 8 ) + + ( msg->data[msg->read + 2] << 16 ) + + ( msg->data[msg->read + 3] << 24 ); msg->read += 4; return c; } //end of the function NMSG_ReadLong @@ -580,20 +543,18 @@ int NMSG_ReadLong(netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -float NMSG_ReadFloat(netmessage_t *msg) -{ +float NMSG_ReadFloat( netmessage_t *msg ){ int c; - if (msg->read + 4 > msg->size) - { + if ( msg->read + 4 > msg->size ) { msg->readoverflow = qtrue; - WinPrint("NMSG_ReadLong: read overflow\n"); + WinPrint( "NMSG_ReadLong: read overflow\n" ); return 0; } //end if c = msg->data[msg->read] - + (msg->data[msg->read+1]<<8) - + (msg->data[msg->read+2]<<16) - + (msg->data[msg->read+3]<<24); + + ( msg->data[msg->read + 1] << 8 ) + + ( msg->data[msg->read + 2] << 16 ) + + ( msg->data[msg->read + 3] << 24 ); msg->read += 4; return *(float *)&c; } //end of the function NMSG_ReadFloat @@ -603,27 +564,27 @@ float NMSG_ReadFloat(netmessage_t *msg) // Returns: - // Changes Globals: - //=========================================================================== -char *NMSG_ReadString(netmessage_t *msg) -{ - static char string[2048]; +char *NMSG_ReadString( netmessage_t *msg ){ + static char string[2048]; int l, c; l = 0; do { - if (msg->read + 1 > msg->size) - { + if ( msg->read + 1 > msg->size ) { msg->readoverflow = qtrue; - WinPrint("NMSG_ReadString: read overflow\n"); + WinPrint( "NMSG_ReadString: read overflow\n" ); string[l] = 0; return string; } //end if c = msg->data[msg->read]; msg->read++; - if (c == 0) break; + if ( c == 0 ) { + break; + } string[l] = c; l++; - } while (l < sizeof(string)-1); + } while ( l < sizeof( string ) - 1 ); string[l] = 0; return string; } //end of the function NMSG_ReadString diff --git a/libs/l_net/l_net.h b/libs/l_net/l_net.h index 167a5a36..e83b65a9 100644 --- a/libs/l_net/l_net.h +++ b/libs/l_net/l_net.h @@ -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-2007 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 + */ //==================================================================== // @@ -32,8 +32,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA //++timo FIXME: the l_net code understands that as the max size for the netmessage_s structure // we have defined unsigned char data[MAX_NETMESSAGE] in netmessage_s but actually it cannot be filled completely // we need to introduce a new #define and adapt to data[MAX_NETBUFFER] -#define MAX_NETMESSAGE 1024 -#define MAX_NETADDRESS 32 +#define MAX_NETMESSAGE 1024 +#define MAX_NETADDRESS 32 #ifdef __cplusplus extern "C" { @@ -66,59 +66,59 @@ typedef struct netmessage_s typedef struct socket_s { - int socket; //socket number - sockaddr_t addr; //socket address - netmessage_t msg; //current message being read - int remaining; //remaining bytes to read for the current message - struct socket_s *prev, *next; //prev and next socket in a list + int socket; //socket number + sockaddr_t addr; //socket address + netmessage_t msg; //current message being read + int remaining; //remaining bytes to read for the current message + struct socket_s *prev, *next; //prev and next socket in a list } socket_t; //compare addresses -int Net_AddressCompare(address_t *addr1, address_t *addr2); +int Net_AddressCompare( address_t *addr1, address_t *addr2 ); //gives the address of a socket -void Net_SocketToAddress(socket_t *sock, address_t *address); +void Net_SocketToAddress( socket_t *sock, address_t *address ); //converts a string to an address -void Net_StringToAddress(char *string, address_t *address); +void Net_StringToAddress( char *string, address_t *address ); //set the address ip port -void Net_SetAddressPort(address_t *address, int port); +void Net_SetAddressPort( address_t *address, int port ); //send a message to the given socket -int Net_Send(socket_t *sock, netmessage_t *msg); +int Net_Send( socket_t *sock, netmessage_t *msg ); //recieve a message from the given socket -int Net_Receive(socket_t *sock, netmessage_t *msg); +int Net_Receive( socket_t *sock, netmessage_t *msg ); //connect to a host // NOTE: port is the localhost port, usually 0 // ex: Net_Connect( "192.168.0.1:39000", 0 ) -socket_t *Net_Connect(address_t *address, int port); +socket_t *Net_Connect( address_t *address, int port ); //disconnect from a host -void Net_Disconnect(socket_t *sock); +void Net_Disconnect( socket_t *sock ); //returns the local address -void Net_MyAddress(address_t *address); +void Net_MyAddress( address_t *address ); //listen at the given port -socket_t *Net_ListenSocket(int port); +socket_t *Net_ListenSocket( int port ); //accept new connections at the given socket -socket_t *Net_Accept(socket_t *sock); +socket_t *Net_Accept( socket_t *sock ); //setup networking -int Net_Setup(void); +int Net_Setup( void ); //shutdown networking -void Net_Shutdown(void); +void Net_Shutdown( void ); //message handling -void NMSG_Clear(netmessage_t *msg); -void NMSG_WriteChar(netmessage_t *msg, int c); -void NMSG_WriteByte(netmessage_t *msg, int c); -void NMSG_WriteShort(netmessage_t *msg, int c); -void NMSG_WriteLong(netmessage_t *msg, int c); -void NMSG_WriteFloat(netmessage_t *msg, float c); -void NMSG_WriteString(netmessage_t *msg, char *string); -void NMSG_ReadStart(netmessage_t *msg); -int NMSG_ReadChar(netmessage_t *msg); -int NMSG_ReadByte(netmessage_t *msg); -int NMSG_ReadShort(netmessage_t *msg); -int NMSG_ReadLong(netmessage_t *msg); -float NMSG_ReadFloat(netmessage_t *msg); -char *NMSG_ReadString(netmessage_t *msg); +void NMSG_Clear( netmessage_t *msg ); +void NMSG_WriteChar( netmessage_t *msg, int c ); +void NMSG_WriteByte( netmessage_t *msg, int c ); +void NMSG_WriteShort( netmessage_t *msg, int c ); +void NMSG_WriteLong( netmessage_t *msg, int c ); +void NMSG_WriteFloat( netmessage_t *msg, float c ); +void NMSG_WriteString( netmessage_t *msg, char *string ); +void NMSG_ReadStart( netmessage_t *msg ); +int NMSG_ReadChar( netmessage_t *msg ); +int NMSG_ReadByte( netmessage_t *msg ); +int NMSG_ReadShort( netmessage_t *msg ); +int NMSG_ReadLong( netmessage_t *msg ); +float NMSG_ReadFloat( netmessage_t *msg ); +char *NMSG_ReadString( netmessage_t *msg ); //++timo FIXME: the WINS_ things are not necessary, they can be made portable arther easily -char *WINS_ErrorMessage(int error); +char *WINS_ErrorMessage( int error ); #ifdef __cplusplus } diff --git a/libs/l_net/l_net_berkeley.c b/libs/l_net/l_net_berkeley.c index e100b948..45ed3c9c 100644 --- a/libs/l_net/l_net_berkeley.c +++ b/libs/l_net/l_net_berkeley.c @@ -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-2007 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 + */ //=========================================================================== // @@ -48,46 +48,45 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define SOCKET_ERROR -1 #define INVALID_SOCKET -1 -extern void WinPrint(char *str, ...); +extern void WinPrint( char *str, ... ); #define WinError WinPrint -#define qtrue 1 -#define qfalse 0 +#define qtrue 1 +#define qfalse 0 #define ioctlsocket ioctl #define closesocket close -int WSAGetLastError() -{ +int WSAGetLastError(){ return errno; } /* -typedef struct tag_error_struct -{ + typedef struct tag_error_struct + { int errnum; LPSTR errstr; -} ERROR_STRUCT; -*/ + } ERROR_STRUCT; + */ typedef struct tag_error_struct { - int errnum; - const char *errstr; + int errnum; + const char *errstr; } ERROR_STRUCT; -#define NET_NAMELEN 64 +#define NET_NAMELEN 64 static char my_tcpip_address[NET_NAMELEN]; -#define DEFAULTnet_hostport 26000 +#define DEFAULTnet_hostport 26000 -#define MAXHOSTNAMELEN 256 +#define MAXHOSTNAMELEN 256 -static int net_acceptsocket = -1; // socket for fielding new connections +static int net_acceptsocket = -1; // socket for fielding new connections static int net_controlsocket; -static int net_hostport; // udp port number for acceptsocket +static int net_hostport; // udp port number for acceptsocket static int net_broadcastsocket = 0; //static qboolean ifbcastinit = qfalse; //static struct sockaddr_s broadcastaddr; @@ -96,18 +95,18 @@ static struct sockaddr_s broadcastaddr; static unsigned long myAddr; ERROR_STRUCT errlist[] = { - {EACCES,"EACCES - The address is protected, user is not root"}, - {EAGAIN,"EAGAIN - Operation on non-blocking socket that cannot return immediatly"}, - {EBADF, "EBADF - sockfd is not a valid descriptor"}, - {EFAULT, "EFAULT - The parameter is not in a writable part of the user address space"}, - {EINVAL,"EINVAL - The socket is already bound to an address"}, - {ENOBUFS,"ENOBUFS - not enough memory"}, - {ENOMEM, "ENOMEM - not enough memory"}, - {ENOTCONN, "ENOTCONN - not connected"}, - {ENOTSOCK,"ENOTSOCK - Argument is file descriptor not a socket"}, - {EOPNOTSUPP,"ENOTSUPP - The referenced socket is not of type SOCK_STREAM"}, - {EPERM, "EPERM - Firewall rules forbid connection"}, - {-1, NULL} + {EACCES,"EACCES - The address is protected, user is not root"}, + {EAGAIN,"EAGAIN - Operation on non-blocking socket that cannot return immediatly"}, + {EBADF, "EBADF - sockfd is not a valid descriptor"}, + {EFAULT, "EFAULT - The parameter is not in a writable part of the user address space"}, + {EINVAL,"EINVAL - The socket is already bound to an address"}, + {ENOBUFS,"ENOBUFS - not enough memory"}, + {ENOMEM, "ENOMEM - not enough memory"}, + {ENOTCONN, "ENOTCONN - not connected"}, + {ENOTSOCK,"ENOTSOCK - Argument is file descriptor not a socket"}, + {EOPNOTSUPP,"ENOTSUPP - The referenced socket is not of type SOCK_STREAM"}, + {EPERM, "EPERM - Firewall rules forbid connection"}, + {-1, NULL} }; //=========================================================================== @@ -116,19 +115,21 @@ ERROR_STRUCT errlist[] = { // Returns: - // Changes Globals: - //=========================================================================== -char *WINS_ErrorMessage(int error) -{ - int search = 0; +char *WINS_ErrorMessage( int error ){ + int search = 0; - if (!error) return "No error occurred"; + if ( !error ) { + return "No error occurred"; + } - for (search = 0; errlist[search].errstr; search++) - { - if (error == errlist[search].errnum) - return (char *)errlist[search].errstr; - } //end for + for ( search = 0; errlist[search].errstr; search++ ) + { + if ( error == errlist[search].errnum ) { + return (char *)errlist[search].errstr; + } + } //end for - return "Unknown error"; + return "Unknown error"; } //end of the function WINS_ErrorMessage //=========================================================================== // @@ -136,50 +137,47 @@ char *WINS_ErrorMessage(int error) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Init(void) -{ - int i; +int WINS_Init( void ){ + int i; struct hostent *local; - char buff[MAXHOSTNAMELEN]; + char buff[MAXHOSTNAMELEN]; struct sockaddr_s addr; - char *p; + char *p; /* - linux doesn't have anything to initialize for the net - "Windows .. built for the internet .. the internet .. built with unix" + linux doesn't have anything to initialize for the net + "Windows .. built for the internet .. the internet .. built with unix" */ #if 0 - int r; - WORD wVersionRequested; + int r; + WORD wVersionRequested; - wVersionRequested = MAKEWORD(2, 2); + wVersionRequested = MAKEWORD( 2, 2 ); - r = WSAStartup (wVersionRequested, &winsockdata); + r = WSAStartup( wVersionRequested, &winsockdata ); - if (r) - { - WinPrint("Winsock initialization failed.\n"); + if ( r ) { + WinPrint( "Winsock initialization failed.\n" ); return -1; } #endif /* - i = COM_CheckParm ("-udpport"); - if (i == 0)*/ - net_hostport = DEFAULTnet_hostport; + i = COM_CheckParm ("-udpport"); + if (i == 0)*/ + net_hostport = DEFAULTnet_hostport; /* - else if (i < com_argc-1) - net_hostport = Q_atoi (com_argv[i+1]); - else - Sys_Error ("WINS_Init: you must specify a number after -udpport"); - */ + else if (i < com_argc-1) + net_hostport = Q_atoi (com_argv[i+1]); + else + Sys_Error ("WINS_Init: you must specify a number after -udpport"); + */ // determine my name & address - gethostname(buff, MAXHOSTNAMELEN); - local = gethostbyname(buff); + gethostname( buff, MAXHOSTNAMELEN ); + local = gethostbyname( buff ); // When hostname can not be resolved, return gracefully - if( local == 0 ) - { - WinError("WINS_Init: Unable to resolve hostname\n"); + if ( local == 0 ) { + WinError( "WINS_Init: Unable to resolve hostname\n" ); return 0; } @@ -189,34 +187,38 @@ int WINS_Init(void) // if (Q_strcmp(hostname.string, "UNNAMED") == 0) { // see if it's a text IP address (well, close enough) - for (p = buff; *p; p++) - if ((*p < '0' || *p > '9') && *p != '.') + for ( p = buff; *p; p++ ) + if ( ( *p < '0' || *p > '9' ) && *p != '.' ) { break; + } // if it is a real name, strip off the domain; we only want the host - if (*p) - { - for (i = 0; i < 15; i++) - if (buff[i] == '.') + if ( *p ) { + for ( i = 0; i < 15; i++ ) + if ( buff[i] == '.' ) { break; + } buff[i] = 0; } // Cvar_Set ("hostname", buff); } - //++timo WTF is that net_controlsocket? it's sole purpose is to retrieve the local IP? - if ((net_controlsocket = WINS_OpenSocket (0)) == SOCKET_ERROR) - WinError("WINS_Init: Unable to open control socket\n"); + //++timo WTF is that net_controlsocket? it's sole purpose is to retrieve the local IP? + if ( ( net_controlsocket = WINS_OpenSocket( 0 ) ) == SOCKET_ERROR ) { + WinError( "WINS_Init: Unable to open control socket\n" ); + } - ((struct sockaddr_in *)&broadcastaddr)->sin_family = AF_INET; - ((struct sockaddr_in *)&broadcastaddr)->sin_addr.s_addr = INADDR_BROADCAST; - ((struct sockaddr_in *)&broadcastaddr)->sin_port = htons((u_short)net_hostport); + ( (struct sockaddr_in *)&broadcastaddr )->sin_family = AF_INET; + ( (struct sockaddr_in *)&broadcastaddr )->sin_addr.s_addr = INADDR_BROADCAST; + ( (struct sockaddr_in *)&broadcastaddr )->sin_port = htons( (u_short)net_hostport ); - WINS_GetSocketAddr (net_controlsocket, &addr); - strcpy(my_tcpip_address, WINS_AddrToString (&addr)); - p = strrchr (my_tcpip_address, ':'); - if (p) *p = 0; - WinPrint("Winsock Initialized\n"); + WINS_GetSocketAddr( net_controlsocket, &addr ); + strcpy( my_tcpip_address, WINS_AddrToString( &addr ) ); + p = strrchr( my_tcpip_address, ':' ); + if ( p ) { + *p = 0; + } + WinPrint( "Winsock Initialized\n" ); return net_controlsocket; } //end of the function WINS_Init @@ -226,8 +228,7 @@ int WINS_Init(void) // Returns: - // Changes Globals: - //=========================================================================== -char *WINS_MyAddress(void) -{ +char *WINS_MyAddress( void ){ return my_tcpip_address; } //end of the function WINS_MyAddress //=========================================================================== @@ -236,13 +237,12 @@ char *WINS_MyAddress(void) // Returns: - // Changes Globals: - //=========================================================================== -void WINS_Shutdown(void) -{ +void WINS_Shutdown( void ){ //WINS_Listen(0); - WINS_CloseSocket(net_controlsocket); + WINS_CloseSocket( net_controlsocket ); // WSACleanup(); // - WinPrint("Winsock Shutdown\n"); + WinPrint( "Winsock Shutdown\n" ); } //end of the function WINS_Shutdown //=========================================================================== // @@ -251,57 +251,53 @@ void WINS_Shutdown(void) // Changes Globals: - //=========================================================================== /* -void WINS_Listen(int state) -{ - // enable listening - if (state) - { - if (net_acceptsocket != -1) - return; - if ((net_acceptsocket = WINS_OpenSocket (net_hostport)) == -1) - WinError ("WINS_Listen: Unable to open accept socket\n"); - return; - } - - // disable listening - if (net_acceptsocket == -1) - return; - WINS_CloseSocket (net_acceptsocket); - net_acceptsocket = -1; -} //end of the function WINS_Listen*/ + void WINS_Listen(int state) + { + // enable listening + if (state) + { + if (net_acceptsocket != -1) + return; + if ((net_acceptsocket = WINS_OpenSocket (net_hostport)) == -1) + WinError ("WINS_Listen: Unable to open accept socket\n"); + return; + } + + // disable listening + if (net_acceptsocket == -1) + return; + WINS_CloseSocket (net_acceptsocket); + net_acceptsocket = -1; + } //end of the function WINS_Listen*/ //=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== -int WINS_OpenSocket(int port) -{ +int WINS_OpenSocket( int port ){ int newsocket; struct sockaddr_in address; u_long _true = 1; - if ((newsocket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR) - { - WinPrint("WINS_OpenSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ( newsocket = socket( PF_INET, SOCK_DGRAM, IPPROTO_UDP ) ) == SOCKET_ERROR ) { + WinPrint( "WINS_OpenSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - if (ioctlsocket (newsocket, FIONBIO, &_true) == SOCKET_ERROR) - { - WinPrint("WINS_OpenSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); - closesocket(newsocket); + if ( ioctlsocket( newsocket, FIONBIO, &_true ) == SOCKET_ERROR ) { + WinPrint( "WINS_OpenSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + closesocket( newsocket ); return -1; } //end if - memset((char *) &address, 0, sizeof(address)); + memset( (char *) &address, 0, sizeof( address ) ); address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; - address.sin_port = htons((u_short)port); - if( bind (newsocket, (void *)&address, sizeof(address)) == -1) - { - WinPrint("WINS_OpenSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); - closesocket(newsocket); + address.sin_port = htons( (u_short)port ); + if ( bind( newsocket, (void *)&address, sizeof( address ) ) == -1 ) { + WinPrint( "WINS_OpenSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + closesocket( newsocket ); return -1; } //end if @@ -313,36 +309,32 @@ int WINS_OpenSocket(int port) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_OpenReliableSocket(int port) -{ +int WINS_OpenReliableSocket( int port ){ int newsocket; struct sockaddr_in address; qboolean _true = 0xFFFFFFFF; //IPPROTO_TCP // - if ((newsocket = socket(AF_INET, SOCK_STREAM, 0)) == -1) - { - WinPrint("WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ( newsocket = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 ) { + WinPrint( "WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - memset((char *) &address, 0, sizeof(address)); + memset( (char *) &address, 0, sizeof( address ) ); address.sin_family = AF_INET; - address.sin_addr.s_addr = htonl(INADDR_ANY); - address.sin_port = htons((u_short)port); - if (bind(newsocket, (void *)&address, sizeof(address)) == -1) - { - WinPrint("WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); - closesocket(newsocket); + address.sin_addr.s_addr = htonl( INADDR_ANY ); + address.sin_port = htons( (u_short)port ); + if ( bind( newsocket, (void *)&address, sizeof( address ) ) == -1 ) { + WinPrint( "WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + closesocket( newsocket ); return -1; } //end if - // - if (setsockopt(newsocket, IPPROTO_TCP, TCP_NODELAY, (void *) &_true, sizeof(int)) == -1) - { - WinPrint("WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); - WinPrint("setsockopt error\n"); + // + if ( setsockopt( newsocket, IPPROTO_TCP, TCP_NODELAY, (void *) &_true, sizeof( int ) ) == -1 ) { + WinPrint( "WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + WinPrint( "setsockopt error\n" ); } //end if return newsocket; @@ -353,18 +345,15 @@ int WINS_OpenReliableSocket(int port) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Listen(int socket) -{ +int WINS_Listen( int socket ){ u_long _true = 1; - if (ioctlsocket(socket, FIONBIO, &_true) == -1) - { - WinPrint("WINS_Listen: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ioctlsocket( socket, FIONBIO, &_true ) == -1 ) { + WinPrint( "WINS_Listen: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - if (listen(socket, SOMAXCONN) == SOCKET_ERROR) - { - WinPrint("WINS_Listen: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( listen( socket, SOMAXCONN ) == SOCKET_ERROR ) { + WinPrint( "WINS_Listen: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if return 0; @@ -375,24 +364,23 @@ int WINS_Listen(int socket) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Accept(int socket, struct sockaddr_s *addr) -{ - int addrlen = sizeof (struct sockaddr_s); +int WINS_Accept( int socket, struct sockaddr_s *addr ){ + int addrlen = sizeof( struct sockaddr_s ); int newsocket; qboolean _true = 1; - newsocket = accept(socket, (struct sockaddr *)addr, &addrlen); - if (newsocket == INVALID_SOCKET) - { - if (errno == EAGAIN) return -1; - WinPrint("WINS_Accept: %s\n", WINS_ErrorMessage(WSAGetLastError())); + newsocket = accept( socket, (struct sockaddr *)addr, &addrlen ); + if ( newsocket == INVALID_SOCKET ) { + if ( errno == EAGAIN ) { + return -1; + } + WinPrint( "WINS_Accept: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - // - if (setsockopt(newsocket, IPPROTO_TCP, TCP_NODELAY, (void *) &_true, sizeof(int)) == SOCKET_ERROR) - { - WinPrint("WINS_Accept: %s\n", WINS_ErrorMessage(WSAGetLastError())); - WinPrint("setsockopt error\n"); + // + if ( setsockopt( newsocket, IPPROTO_TCP, TCP_NODELAY, (void *) &_true, sizeof( int ) ) == SOCKET_ERROR ) { + WinPrint( "WINS_Accept: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + WinPrint( "setsockopt error\n" ); } //end if return newsocket; } //end of the function WINS_Accept @@ -402,17 +390,15 @@ int WINS_Accept(int socket, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_CloseSocket(int socket) -{ +int WINS_CloseSocket( int socket ){ /* - if (socket == net_broadcastsocket) - net_broadcastsocket = 0; - */ + if (socket == net_broadcastsocket) + net_broadcastsocket = 0; + */ // shutdown(socket, SD_SEND); - if (closesocket(socket) == SOCKET_ERROR) - { - WinPrint("WINS_CloseSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( closesocket( socket ) == SOCKET_ERROR ) { + WinPrint( "WINS_CloseSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return SOCKET_ERROR; } //end if return 0; @@ -425,8 +411,7 @@ int WINS_CloseSocket(int socket) // Returns: - // Changes Globals: - //=========================================================================== -static int PartialIPAddress (char *in, struct sockaddr_s *hostaddr) -{ +static int PartialIPAddress( char *in, struct sockaddr_s *hostaddr ){ char buff[256]; char *b; int addr; @@ -435,24 +420,28 @@ static int PartialIPAddress (char *in, struct sockaddr_s *hostaddr) buff[0] = '.'; b = buff; - strcpy(buff+1, in); - if (buff[1] == '.') b++; + strcpy( buff + 1, in ); + if ( buff[1] == '.' ) { + b++; + } addr = 0; - mask=-1; - while (*b == '.') + mask = -1; + while ( *b == '.' ) { num = 0; - if (*++b < '0' || *b > '9') return -1; - while (!( *b < '0' || *b > '9')) - num = num*10 + *(b++) - '0'; - mask<<=8; - addr = (addr<<8) + num; + if ( *++b < '0' || *b > '9' ) { + return -1; + } + while ( !( *b < '0' || *b > '9' ) ) + num = num * 10 + *( b++ ) - '0'; + mask <<= 8; + addr = ( addr << 8 ) + num; } hostaddr->sa_family = AF_INET; - ((struct sockaddr_in *)hostaddr)->sin_port = htons((u_short)net_hostport); - ((struct sockaddr_in *)hostaddr)->sin_addr.s_addr = (myAddr & htonl(mask)) | htonl(addr); + ( (struct sockaddr_in *)hostaddr )->sin_port = htons( (u_short)net_hostport ); + ( (struct sockaddr_in *)hostaddr )->sin_addr.s_addr = ( myAddr & htonl( mask ) ) | htonl( addr ); return 0; } //end of the function PartialIPAddress @@ -462,20 +451,17 @@ static int PartialIPAddress (char *in, struct sockaddr_s *hostaddr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Connect(int socket, struct sockaddr_s *addr) -{ +int WINS_Connect( int socket, struct sockaddr_s *addr ){ int ret; u_long _true2 = 0xFFFFFFFF; - ret = connect(socket, (struct sockaddr *)addr, sizeof(struct sockaddr_s)); - if (ret == SOCKET_ERROR) - { - WinPrint("WINS_Connect: %s\n", WINS_ErrorMessage(WSAGetLastError())); + ret = connect( socket, (struct sockaddr *)addr, sizeof( struct sockaddr_s ) ); + if ( ret == SOCKET_ERROR ) { + WinPrint( "WINS_Connect: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - if (ioctlsocket(socket, FIONBIO, &_true2) == -1) - { - WinPrint("WINS_Connect: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ioctlsocket( socket, FIONBIO, &_true2 ) == -1 ) { + WinPrint( "WINS_Connect: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if return 0; @@ -486,15 +472,16 @@ int WINS_Connect(int socket, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_CheckNewConnections(void) -{ +int WINS_CheckNewConnections( void ){ char buf[4]; - if (net_acceptsocket == -1) + if ( net_acceptsocket == -1 ) { return -1; + } - if (recvfrom(net_acceptsocket, buf, 4, MSG_PEEK, NULL, NULL) > 0) + if ( recvfrom( net_acceptsocket, buf, 4, MSG_PEEK, NULL, NULL ) > 0 ) { return net_acceptsocket; + } return -1; } //end of the function WINS_CheckNewConnections //=========================================================================== @@ -506,41 +493,39 @@ int WINS_CheckNewConnections(void) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Read(int socket, byte *buf, int len, struct sockaddr_s *addr) -{ - int addrlen = sizeof (struct sockaddr_s); +int WINS_Read( int socket, byte *buf, int len, struct sockaddr_s *addr ){ + int addrlen = sizeof( struct sockaddr_s ); int ret; - if (addr) - { - ret = recvfrom(socket, buf, len, 0, (struct sockaddr *)addr, &addrlen); - if (ret == -1) - { + if ( addr ) { + ret = recvfrom( socket, buf, len, 0, (struct sockaddr *)addr, &addrlen ); + if ( ret == -1 ) { // errno = WSAGetLastError(); - if (errno == EAGAIN || errno == ENOTCONN) + if ( errno == EAGAIN || errno == ENOTCONN ) { return 0; + } } //end if } //end if else { - ret = recv(socket, buf, len, 0); - // if there's no data on the socket ret == -1 and errno == EAGAIN - // MSDN states that if ret == 0 the socket has been closed - // man recv doesn't say anything - if (ret == 0) - return -1; - if (ret == SOCKET_ERROR) - { + ret = recv( socket, buf, len, 0 ); + // if there's no data on the socket ret == -1 and errno == EAGAIN + // MSDN states that if ret == 0 the socket has been closed + // man recv doesn't say anything + if ( ret == 0 ) { + return -1; + } + if ( ret == SOCKET_ERROR ) { // errno = WSAGetLastError(); - if (errno == EAGAIN || errno == ENOTCONN) + if ( errno == EAGAIN || errno == ENOTCONN ) { return 0; + } } //end if } //end else - if (ret == SOCKET_ERROR) - { - WinPrint("WINS_Read: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ret == SOCKET_ERROR ) { + WinPrint( "WINS_Read: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); } //end if return ret; } //end of the function WINS_Read @@ -550,13 +535,13 @@ int WINS_Read(int socket, byte *buf, int len, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_MakeSocketBroadcastCapable (int socket) -{ - int i = 1; +int WINS_MakeSocketBroadcastCapable( int socket ){ + int i = 1; // make this socket broadcast capable - if (setsockopt(socket, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) < 0) + if ( setsockopt( socket, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof( i ) ) < 0 ) { return -1; + } net_broadcastsocket = socket; return 0; @@ -567,23 +552,21 @@ int WINS_MakeSocketBroadcastCapable (int socket) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Broadcast (int socket, byte *buf, int len) -{ +int WINS_Broadcast( int socket, byte *buf, int len ){ int ret; - if (socket != net_broadcastsocket) - { - if (net_broadcastsocket != 0) - WinError("Attempted to use multiple broadcasts sockets\n"); - ret = WINS_MakeSocketBroadcastCapable (socket); - if (ret == -1) - { - WinPrint("Unable to make socket broadcast capable\n"); + if ( socket != net_broadcastsocket ) { + if ( net_broadcastsocket != 0 ) { + WinError( "Attempted to use multiple broadcasts sockets\n" ); + } + ret = WINS_MakeSocketBroadcastCapable( socket ); + if ( ret == -1 ) { + WinPrint( "Unable to make socket broadcast capable\n" ); return ret; } } - return WINS_Write (socket, buf, len, &broadcastaddr); + return WINS_Write( socket, buf, len, &broadcastaddr ); } //end of the function WINS_Broadcast //=========================================================================== // returns qtrue on success or qfalse on failure @@ -592,21 +575,19 @@ int WINS_Broadcast (int socket, byte *buf, int len) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr) -{ +int WINS_Write( int socket, byte *buf, int len, struct sockaddr_s *addr ){ int ret = 0, written; - if (addr) - { + if ( addr ) { written = 0; - while(written < len) + while ( written < len ) { - ret = sendto (socket, &buf[written], len-written, 0, (struct sockaddr *)addr, sizeof(struct sockaddr_s)); - if (ret == SOCKET_ERROR) - { - if (WSAGetLastError() != EAGAIN) + ret = sendto( socket, &buf[written], len - written, 0, (struct sockaddr *)addr, sizeof( struct sockaddr_s ) ); + if ( ret == SOCKET_ERROR ) { + if ( WSAGetLastError() != EAGAIN ) { return qfalse; - //++timo FIXME: what is this used for? + } + //++timo FIXME: what is this used for? // Sleep(1000); } //end if else @@ -618,14 +599,14 @@ int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr) else { written = 0; - while(written < len) + while ( written < len ) { - ret = send(socket, buf, len, 0); - if (ret == SOCKET_ERROR) - { - if (WSAGetLastError() != EAGAIN) + ret = send( socket, buf, len, 0 ); + if ( ret == SOCKET_ERROR ) { + if ( WSAGetLastError() != EAGAIN ) { return qfalse; - //++timo FIXME: what is this used for? + } + //++timo FIXME: what is this used for? // Sleep(1000); } //end if else @@ -634,11 +615,10 @@ int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr) } } } //end else - if (ret == SOCKET_ERROR) - { - WinPrint("WINS_Write: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ret == SOCKET_ERROR ) { + WinPrint( "WINS_Write: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); } //end if - return (ret == len); + return ( ret == len ); } //end of the function WINS_Write //=========================================================================== // @@ -646,13 +626,12 @@ int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -char *WINS_AddrToString (struct sockaddr_s *addr) -{ +char *WINS_AddrToString( struct sockaddr_s *addr ){ static char buffer[22]; int haddr; - haddr = ntohl(((struct sockaddr_in *)addr)->sin_addr.s_addr); - sprintf(buffer, "%d.%d.%d.%d:%d", (haddr >> 24) & 0xff, (haddr >> 16) & 0xff, (haddr >> 8) & 0xff, haddr & 0xff, ntohs(((struct sockaddr_in *)addr)->sin_port)); + haddr = ntohl( ( (struct sockaddr_in *)addr )->sin_addr.s_addr ); + sprintf( buffer, "%d.%d.%d.%d:%d", ( haddr >> 24 ) & 0xff, ( haddr >> 16 ) & 0xff, ( haddr >> 8 ) & 0xff, haddr & 0xff, ntohs( ( (struct sockaddr_in *)addr )->sin_port ) ); return buffer; } //end of the function WINS_AddrToString //=========================================================================== @@ -661,17 +640,16 @@ char *WINS_AddrToString (struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_StringToAddr(char *string, struct sockaddr_s *addr) -{ +int WINS_StringToAddr( char *string, struct sockaddr_s *addr ){ int ha1, ha2, ha3, ha4, hp; int ipaddr; - sscanf(string, "%d.%d.%d.%d:%d", &ha1, &ha2, &ha3, &ha4, &hp); - ipaddr = (ha1 << 24) | (ha2 << 16) | (ha3 << 8) | ha4; + sscanf( string, "%d.%d.%d.%d:%d", &ha1, &ha2, &ha3, &ha4, &hp ); + ipaddr = ( ha1 << 24 ) | ( ha2 << 16 ) | ( ha3 << 8 ) | ha4; addr->sa_family = AF_INET; - ((struct sockaddr_in *)addr)->sin_addr.s_addr = htonl(ipaddr); - ((struct sockaddr_in *)addr)->sin_port = htons((u_short)hp); + ( (struct sockaddr_in *)addr )->sin_addr.s_addr = htonl( ipaddr ); + ( (struct sockaddr_in *)addr )->sin_port = htons( (u_short)hp ); return 0; } //end of the function WINS_StringToAddr //=========================================================================== @@ -680,16 +658,16 @@ int WINS_StringToAddr(char *string, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_GetSocketAddr(int socket, struct sockaddr_s *addr) -{ - int addrlen = sizeof(struct sockaddr_s); +int WINS_GetSocketAddr( int socket, struct sockaddr_s *addr ){ + int addrlen = sizeof( struct sockaddr_s ); unsigned int a; - memset(addr, 0, sizeof(struct sockaddr_s)); - getsockname(socket, (struct sockaddr *)addr, &addrlen); - a = ((struct sockaddr_in *)addr)->sin_addr.s_addr; - if (a == 0 || a == inet_addr("127.0.0.1")) - ((struct sockaddr_in *)addr)->sin_addr.s_addr = myAddr; + memset( addr, 0, sizeof( struct sockaddr_s ) ); + getsockname( socket, (struct sockaddr *)addr, &addrlen ); + a = ( (struct sockaddr_in *)addr )->sin_addr.s_addr; + if ( a == 0 || a == inet_addr( "127.0.0.1" ) ) { + ( (struct sockaddr_in *)addr )->sin_addr.s_addr = myAddr; + } return 0; } //end of the function WINS_GetSocketAddr @@ -699,18 +677,16 @@ int WINS_GetSocketAddr(int socket, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_GetNameFromAddr (struct sockaddr_s *addr, char *name) -{ +int WINS_GetNameFromAddr( struct sockaddr_s *addr, char *name ){ struct hostent *hostentry; - hostentry = gethostbyaddr ((char *)&((struct sockaddr_in *)addr)->sin_addr, sizeof(struct in_addr), AF_INET); - if (hostentry) - { - strncpy (name, (char *)hostentry->h_name, NET_NAMELEN - 1); + hostentry = gethostbyaddr( (char *)&( (struct sockaddr_in *)addr )->sin_addr, sizeof( struct in_addr ), AF_INET ); + if ( hostentry ) { + strncpy( name, (char *)hostentry->h_name, NET_NAMELEN - 1 ); return 0; } - strcpy (name, WINS_AddrToString (addr)); + strcpy( name, WINS_AddrToString( addr ) ); return 0; } //end of the function WINS_GetNameFromAddr //=========================================================================== @@ -719,20 +695,21 @@ int WINS_GetNameFromAddr (struct sockaddr_s *addr, char *name) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_GetAddrFromName(char *name, struct sockaddr_s *addr) -{ +int WINS_GetAddrFromName( char *name, struct sockaddr_s *addr ){ struct hostent *hostentry; - if (name[0] >= '0' && name[0] <= '9') - return PartialIPAddress (name, addr); + if ( name[0] >= '0' && name[0] <= '9' ) { + return PartialIPAddress( name, addr ); + } - hostentry = gethostbyname (name); - if (!hostentry) + hostentry = gethostbyname( name ); + if ( !hostentry ) { return -1; + } addr->sa_family = AF_INET; - ((struct sockaddr_in *)addr)->sin_port = htons((u_short)net_hostport); - ((struct sockaddr_in *)addr)->sin_addr.s_addr = *(int *)hostentry->h_addr_list[0]; + ( (struct sockaddr_in *)addr )->sin_port = htons( (u_short)net_hostport ); + ( (struct sockaddr_in *)addr )->sin_addr.s_addr = *(int *)hostentry->h_addr_list[0]; return 0; } //end of the function WINS_GetAddrFromName @@ -742,16 +719,18 @@ int WINS_GetAddrFromName(char *name, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_AddrCompare (struct sockaddr_s *addr1, struct sockaddr_s *addr2) -{ - if (addr1->sa_family != addr2->sa_family) +int WINS_AddrCompare( struct sockaddr_s *addr1, struct sockaddr_s *addr2 ){ + if ( addr1->sa_family != addr2->sa_family ) { return -1; + } - if (((struct sockaddr_in *)addr1)->sin_addr.s_addr != ((struct sockaddr_in *)addr2)->sin_addr.s_addr) + if ( ( (struct sockaddr_in *)addr1 )->sin_addr.s_addr != ( (struct sockaddr_in *)addr2 )->sin_addr.s_addr ) { return -1; + } - if (((struct sockaddr_in *)addr1)->sin_port != ((struct sockaddr_in *)addr2)->sin_port) + if ( ( (struct sockaddr_in *)addr1 )->sin_port != ( (struct sockaddr_in *)addr2 )->sin_port ) { return 1; + } return 0; } //end of the function WINS_AddrCompare @@ -761,9 +740,8 @@ int WINS_AddrCompare (struct sockaddr_s *addr1, struct sockaddr_s *addr2) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_GetSocketPort (struct sockaddr_s *addr) -{ - return ntohs(((struct sockaddr_in *)addr)->sin_port); +int WINS_GetSocketPort( struct sockaddr_s *addr ){ + return ntohs( ( (struct sockaddr_in *)addr )->sin_port ); } //end of the function WINS_GetSocketPort //=========================================================================== // @@ -771,8 +749,7 @@ int WINS_GetSocketPort (struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_SetSocketPort (struct sockaddr_s *addr, int port) -{ - ((struct sockaddr_in *)addr)->sin_port = htons((u_short)port); +int WINS_SetSocketPort( struct sockaddr_s *addr, int port ){ + ( (struct sockaddr_in *)addr )->sin_port = htons( (u_short)port ); return 0; } //end of the function WINS_SetSocketPort diff --git a/libs/l_net/l_net_wins.c b/libs/l_net/l_net_wins.c index 8a73f996..36f31a8c 100644 --- a/libs/l_net/l_net_wins.c +++ b/libs/l_net/l_net_wins.c @@ -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-2007 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 + */ //=========================================================================== // @@ -40,26 +40,26 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define WinError WinPrint -#define qtrue 1 -#define qfalse 0 +#define qtrue 1 +#define qfalse 0 typedef struct tag_error_struct { - int errnum; - LPSTR errstr; + int errnum; + LPSTR errstr; } ERROR_STRUCT; -#define NET_NAMELEN 64 +#define NET_NAMELEN 64 char my_tcpip_address[NET_NAMELEN]; -#define DEFAULTnet_hostport 26000 +#define DEFAULTnet_hostport 26000 -#define MAXHOSTNAMELEN 256 +#define MAXHOSTNAMELEN 256 -static int net_acceptsocket = -1; // socket for fielding new connections +static int net_acceptsocket = -1; // socket for fielding new connections static int net_controlsocket; -static int net_hostport; // udp port number for acceptsocket +static int net_hostport; // udp port number for acceptsocket static int net_broadcastsocket = 0; //static qboolean ifbcastinit = qfalse; static struct sockaddr_s broadcastaddr; @@ -69,77 +69,77 @@ static unsigned long myAddr; WSADATA winsockdata; ERROR_STRUCT errlist[] = { - {WSAEINTR, "WSAEINTR - Interrupted"}, - {WSAEBADF, "WSAEBADF - Bad file number"}, - {WSAEFAULT, "WSAEFAULT - Bad address"}, - {WSAEINVAL, "WSAEINVAL - Invalid argument"}, - {WSAEMFILE, "WSAEMFILE - Too many open files"}, + {WSAEINTR, "WSAEINTR - Interrupted"}, + {WSAEBADF, "WSAEBADF - Bad file number"}, + {WSAEFAULT, "WSAEFAULT - Bad address"}, + {WSAEINVAL, "WSAEINVAL - Invalid argument"}, + {WSAEMFILE, "WSAEMFILE - Too many open files"}, /* -* Windows Sockets definitions of regular Berkeley error constants -*/ - - {WSAEWOULDBLOCK, "WSAEWOULDBLOCK - Socket marked as non-blocking"}, - {WSAEINPROGRESS, "WSAEINPROGRESS - Blocking call in progress"}, - {WSAEALREADY, "WSAEALREADY - Command already completed"}, - {WSAENOTSOCK, "WSAENOTSOCK - Descriptor is not a socket"}, - {WSAEDESTADDRREQ, "WSAEDESTADDRREQ - Destination address required"}, - {WSAEMSGSIZE, "WSAEMSGSIZE - Data size too large"}, - {WSAEPROTOTYPE, "WSAEPROTOTYPE - Protocol is of wrong type for this socket"}, - {WSAENOPROTOOPT, "WSAENOPROTOOPT - Protocol option not supported for this socket type"}, - {WSAEPROTONOSUPPORT, "WSAEPROTONOSUPPORT - Protocol is not supported"}, - {WSAESOCKTNOSUPPORT, "WSAESOCKTNOSUPPORT - Socket type not supported by this address family"}, - {WSAEOPNOTSUPP, "WSAEOPNOTSUPP - Option not supported"}, - {WSAEPFNOSUPPORT, "WSAEPFNOSUPPORT - "}, - {WSAEAFNOSUPPORT, "WSAEAFNOSUPPORT - Address family not supported by this protocol"}, - {WSAEADDRINUSE, "WSAEADDRINUSE - Address is in use"}, - {WSAEADDRNOTAVAIL, "WSAEADDRNOTAVAIL - Address not available from local machine"}, - {WSAENETDOWN, "WSAENETDOWN - Network subsystem is down"}, - {WSAENETUNREACH, "WSAENETUNREACH - Network cannot be reached"}, - {WSAENETRESET, "WSAENETRESET - Connection has been dropped"}, - {WSAECONNABORTED, "WSAECONNABORTED - Connection aborted"}, - {WSAECONNRESET, "WSAECONNRESET - Connection reset"}, - {WSAENOBUFS, "WSAENOBUFS - No buffer space available"}, - {WSAEISCONN, "WSAEISCONN - Socket is already connected"}, - {WSAENOTCONN, "WSAENOTCONN - Socket is not connected"}, - {WSAESHUTDOWN, "WSAESHUTDOWN - Socket has been shut down"}, - {WSAETOOMANYREFS, "WSAETOOMANYREFS - Too many references"}, - {WSAETIMEDOUT, "WSAETIMEDOUT - Command timed out"}, - {WSAECONNREFUSED, "WSAECONNREFUSED - Connection refused"}, - {WSAELOOP, "WSAELOOP - "}, - {WSAENAMETOOLONG, "WSAENAMETOOLONG - "}, - {WSAEHOSTDOWN, "WSAEHOSTDOWN - Host is down"}, - {WSAEHOSTUNREACH, "WSAEHOSTUNREACH - "}, - {WSAENOTEMPTY, "WSAENOTEMPTY - "}, - {WSAEPROCLIM, "WSAEPROCLIM - "}, - {WSAEUSERS, "WSAEUSERS - "}, - {WSAEDQUOT, "WSAEDQUOT - "}, - {WSAESTALE, "WSAESTALE - "}, - {WSAEREMOTE, "WSAEREMOTE - "}, + * Windows Sockets definitions of regular Berkeley error constants + */ + + {WSAEWOULDBLOCK, "WSAEWOULDBLOCK - Socket marked as non-blocking"}, + {WSAEINPROGRESS, "WSAEINPROGRESS - Blocking call in progress"}, + {WSAEALREADY, "WSAEALREADY - Command already completed"}, + {WSAENOTSOCK, "WSAENOTSOCK - Descriptor is not a socket"}, + {WSAEDESTADDRREQ, "WSAEDESTADDRREQ - Destination address required"}, + {WSAEMSGSIZE, "WSAEMSGSIZE - Data size too large"}, + {WSAEPROTOTYPE, "WSAEPROTOTYPE - Protocol is of wrong type for this socket"}, + {WSAENOPROTOOPT, "WSAENOPROTOOPT - Protocol option not supported for this socket type"}, + {WSAEPROTONOSUPPORT, "WSAEPROTONOSUPPORT - Protocol is not supported"}, + {WSAESOCKTNOSUPPORT, "WSAESOCKTNOSUPPORT - Socket type not supported by this address family"}, + {WSAEOPNOTSUPP, "WSAEOPNOTSUPP - Option not supported"}, + {WSAEPFNOSUPPORT, "WSAEPFNOSUPPORT - "}, + {WSAEAFNOSUPPORT, "WSAEAFNOSUPPORT - Address family not supported by this protocol"}, + {WSAEADDRINUSE, "WSAEADDRINUSE - Address is in use"}, + {WSAEADDRNOTAVAIL, "WSAEADDRNOTAVAIL - Address not available from local machine"}, + {WSAENETDOWN, "WSAENETDOWN - Network subsystem is down"}, + {WSAENETUNREACH, "WSAENETUNREACH - Network cannot be reached"}, + {WSAENETRESET, "WSAENETRESET - Connection has been dropped"}, + {WSAECONNABORTED, "WSAECONNABORTED - Connection aborted"}, + {WSAECONNRESET, "WSAECONNRESET - Connection reset"}, + {WSAENOBUFS, "WSAENOBUFS - No buffer space available"}, + {WSAEISCONN, "WSAEISCONN - Socket is already connected"}, + {WSAENOTCONN, "WSAENOTCONN - Socket is not connected"}, + {WSAESHUTDOWN, "WSAESHUTDOWN - Socket has been shut down"}, + {WSAETOOMANYREFS, "WSAETOOMANYREFS - Too many references"}, + {WSAETIMEDOUT, "WSAETIMEDOUT - Command timed out"}, + {WSAECONNREFUSED, "WSAECONNREFUSED - Connection refused"}, + {WSAELOOP, "WSAELOOP - "}, + {WSAENAMETOOLONG, "WSAENAMETOOLONG - "}, + {WSAEHOSTDOWN, "WSAEHOSTDOWN - Host is down"}, + {WSAEHOSTUNREACH, "WSAEHOSTUNREACH - "}, + {WSAENOTEMPTY, "WSAENOTEMPTY - "}, + {WSAEPROCLIM, "WSAEPROCLIM - "}, + {WSAEUSERS, "WSAEUSERS - "}, + {WSAEDQUOT, "WSAEDQUOT - "}, + {WSAESTALE, "WSAESTALE - "}, + {WSAEREMOTE, "WSAEREMOTE - "}, /* -* Extended Windows Sockets error constant definitions -*/ + * Extended Windows Sockets error constant definitions + */ - {WSASYSNOTREADY, "WSASYSNOTREADY - Network subsystem not ready"}, - {WSAVERNOTSUPPORTED, "WSAVERNOTSUPPORTED - Version not supported"}, - {WSANOTINITIALISED, "WSANOTINITIALISED - WSAStartup() has not been successfully called"}, + {WSASYSNOTREADY, "WSASYSNOTREADY - Network subsystem not ready"}, + {WSAVERNOTSUPPORTED, "WSAVERNOTSUPPORTED - Version not supported"}, + {WSANOTINITIALISED, "WSANOTINITIALISED - WSAStartup() has not been successfully called"}, /* -* Other error constants. -*/ - - {WSAHOST_NOT_FOUND, "WSAHOST_NOT_FOUND - Host not found"}, - {WSATRY_AGAIN, "WSATRY_AGAIN - Host not found or SERVERFAIL"}, - {WSANO_RECOVERY, "WSANO_RECOVERY - Non-recoverable error"}, - {WSANO_DATA, "WSANO_DATA - (or WSANO_ADDRESS) - No data record of requested type"}, - {-1, NULL} + * Other error constants. + */ + + {WSAHOST_NOT_FOUND, "WSAHOST_NOT_FOUND - Host not found"}, + {WSATRY_AGAIN, "WSATRY_AGAIN - Host not found or SERVERFAIL"}, + {WSANO_RECOVERY, "WSANO_RECOVERY - Non-recoverable error"}, + {WSANO_DATA, "WSANO_DATA - (or WSANO_ADDRESS) - No data record of requested type"}, + {-1, NULL} }; #ifdef _DEBUG -void WinPrint(char *str, ...); +void WinPrint( char *str, ... ); #else -void WinPrint(char *str, ...); +void WinPrint( char *str, ... ); #endif //=========================================================================== @@ -148,19 +148,21 @@ void WinPrint(char *str, ...); // Returns: - // Changes Globals: - //=========================================================================== -char *WINS_ErrorMessage(int error) -{ - int search = 0; +char *WINS_ErrorMessage( int error ){ + int search = 0; - if (!error) return "No error occurred"; + if ( !error ) { + return "No error occurred"; + } - for (search = 0; errlist[search].errstr; search++) - { - if (error == errlist[search].errnum) - return errlist[search].errstr; - } //end for + for ( search = 0; errlist[search].errstr; search++ ) + { + if ( error == errlist[search].errnum ) { + return errlist[search].errstr; + } + } //end for - return "Unknown error"; + return "Unknown error"; } //end of the function WINS_ErrorMessage //=========================================================================== // @@ -168,73 +170,75 @@ char *WINS_ErrorMessage(int error) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Init(void) -{ - int i; +int WINS_Init( void ){ + int i; struct hostent *local; - char buff[MAXHOSTNAMELEN]; + char buff[MAXHOSTNAMELEN]; struct sockaddr_s addr; - char *p; - int r; - WORD wVersionRequested; + char *p; + int r; + WORD wVersionRequested; - wVersionRequested = MAKEWORD(1, 1); + wVersionRequested = MAKEWORD( 1, 1 ); - r = WSAStartup (wVersionRequested, &winsockdata); + r = WSAStartup( wVersionRequested, &winsockdata ); - if (r) - { - WinPrint("Winsock initialization failed.\n"); + if ( r ) { + WinPrint( "Winsock initialization failed.\n" ); return -1; } /* - i = COM_CheckParm ("-udpport"); - if (i == 0)*/ - net_hostport = DEFAULTnet_hostport; + i = COM_CheckParm ("-udpport"); + if (i == 0)*/ + net_hostport = DEFAULTnet_hostport; /* - else if (i < com_argc-1) - net_hostport = Q_atoi (com_argv[i+1]); - else - Sys_Error ("WINS_Init: you must specify a number after -udpport"); - */ + else if (i < com_argc-1) + net_hostport = Q_atoi (com_argv[i+1]); + else + Sys_Error ("WINS_Init: you must specify a number after -udpport"); + */ // determine my name & address - gethostname(buff, MAXHOSTNAMELEN); - local = gethostbyname(buff); + gethostname( buff, MAXHOSTNAMELEN ); + local = gethostbyname( buff ); myAddr = *(int *)local->h_addr_list[0]; // if the quake hostname isn't set, set it to the machine name // if (Q_strcmp(hostname.string, "UNNAMED") == 0) { // see if it's a text IP address (well, close enough) - for (p = buff; *p; p++) - if ((*p < '0' || *p > '9') && *p != '.') + for ( p = buff; *p; p++ ) + if ( ( *p < '0' || *p > '9' ) && *p != '.' ) { break; + } // if it is a real name, strip off the domain; we only want the host - if (*p) - { - for (i = 0; i < 15; i++) - if (buff[i] == '.') + if ( *p ) { + for ( i = 0; i < 15; i++ ) + if ( buff[i] == '.' ) { break; + } buff[i] = 0; } // Cvar_Set ("hostname", buff); } - if ((net_controlsocket = WINS_OpenSocket (0)) == -1) - WinError("WINS_Init: Unable to open control socket\n"); + if ( ( net_controlsocket = WINS_OpenSocket( 0 ) ) == -1 ) { + WinError( "WINS_Init: Unable to open control socket\n" ); + } - ((struct sockaddr_in *)&broadcastaddr)->sin_family = AF_INET; - ((struct sockaddr_in *)&broadcastaddr)->sin_addr.s_addr = INADDR_BROADCAST; - ((struct sockaddr_in *)&broadcastaddr)->sin_port = htons((u_short)net_hostport); + ( (struct sockaddr_in *)&broadcastaddr )->sin_family = AF_INET; + ( (struct sockaddr_in *)&broadcastaddr )->sin_addr.s_addr = INADDR_BROADCAST; + ( (struct sockaddr_in *)&broadcastaddr )->sin_port = htons( (u_short)net_hostport ); - WINS_GetSocketAddr (net_controlsocket, &addr); - strcpy(my_tcpip_address, WINS_AddrToString (&addr)); - p = strrchr (my_tcpip_address, ':'); - if (p) *p = 0; - WinPrint("Winsock Initialized\n"); + WINS_GetSocketAddr( net_controlsocket, &addr ); + strcpy( my_tcpip_address, WINS_AddrToString( &addr ) ); + p = strrchr( my_tcpip_address, ':' ); + if ( p ) { + *p = 0; + } + WinPrint( "Winsock Initialized\n" ); return net_controlsocket; } //end of the function WINS_Init @@ -244,8 +248,7 @@ int WINS_Init(void) // Returns: - // Changes Globals: - //=========================================================================== -char *WINS_MyAddress(void) -{ +char *WINS_MyAddress( void ){ return my_tcpip_address; } //end of the function WINS_MyAddress //=========================================================================== @@ -254,13 +257,12 @@ char *WINS_MyAddress(void) // Returns: - // Changes Globals: - //=========================================================================== -void WINS_Shutdown(void) -{ +void WINS_Shutdown( void ){ //WINS_Listen(0); - WINS_CloseSocket(net_controlsocket); + WINS_CloseSocket( net_controlsocket ); WSACleanup(); // - WinPrint("Winsock Shutdown\n"); + WinPrint( "Winsock Shutdown\n" ); } //end of the function WINS_Shutdown //=========================================================================== // @@ -269,57 +271,53 @@ void WINS_Shutdown(void) // Changes Globals: - //=========================================================================== /* -void WINS_Listen(int state) -{ - // enable listening - if (state) - { - if (net_acceptsocket != -1) - return; - if ((net_acceptsocket = WINS_OpenSocket (net_hostport)) == -1) - WinError ("WINS_Listen: Unable to open accept socket\n"); - return; - } - - // disable listening - if (net_acceptsocket == -1) - return; - WINS_CloseSocket (net_acceptsocket); - net_acceptsocket = -1; -} //end of the function WINS_Listen*/ + void WINS_Listen(int state) + { + // enable listening + if (state) + { + if (net_acceptsocket != -1) + return; + if ((net_acceptsocket = WINS_OpenSocket (net_hostport)) == -1) + WinError ("WINS_Listen: Unable to open accept socket\n"); + return; + } + + // disable listening + if (net_acceptsocket == -1) + return; + WINS_CloseSocket (net_acceptsocket); + net_acceptsocket = -1; + } //end of the function WINS_Listen*/ //=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== -int WINS_OpenSocket(int port) -{ +int WINS_OpenSocket( int port ){ int newsocket; struct sockaddr_in address; u_long _true = 1; - if ((newsocket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) - { - WinPrint("WINS_OpenSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ( newsocket = socket( PF_INET, SOCK_DGRAM, IPPROTO_UDP ) ) == -1 ) { + WinPrint( "WINS_OpenSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - if (ioctlsocket (newsocket, FIONBIO, &_true) == -1) - { - WinPrint("WINS_OpenSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); - closesocket(newsocket); + if ( ioctlsocket( newsocket, FIONBIO, &_true ) == -1 ) { + WinPrint( "WINS_OpenSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + closesocket( newsocket ); return -1; } //end if - memset((char *) &address, 0, sizeof(address)); + memset( (char *) &address, 0, sizeof( address ) ); address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; - address.sin_port = htons((u_short)port); - if( bind (newsocket, (void *)&address, sizeof(address)) == -1) - { - WinPrint("WINS_OpenSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); - closesocket(newsocket); + address.sin_port = htons( (u_short)port ); + if ( bind( newsocket, (void *)&address, sizeof( address ) ) == -1 ) { + WinPrint( "WINS_OpenSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + closesocket( newsocket ); return -1; } //end if @@ -331,36 +329,32 @@ int WINS_OpenSocket(int port) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_OpenReliableSocket(int port) -{ +int WINS_OpenReliableSocket( int port ){ int newsocket; struct sockaddr_in address; BOOL _true = 0xFFFFFFFF; //IPPROTO_TCP // - if ((newsocket = socket(AF_INET, SOCK_STREAM, 0)) == -1) - { - WinPrint("WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ( newsocket = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 ) { + WinPrint( "WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - memset((char *) &address, 0, sizeof(address)); + memset( (char *) &address, 0, sizeof( address ) ); address.sin_family = AF_INET; - address.sin_addr.s_addr = htonl(INADDR_ANY); - address.sin_port = htons((u_short)port); - if (bind(newsocket, (void *)&address, sizeof(address)) == -1) - { - WinPrint("WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); - closesocket(newsocket); + address.sin_addr.s_addr = htonl( INADDR_ANY ); + address.sin_port = htons( (u_short)port ); + if ( bind( newsocket, (void *)&address, sizeof( address ) ) == -1 ) { + WinPrint( "WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + closesocket( newsocket ); return -1; } //end if - // - if (setsockopt(newsocket, IPPROTO_TCP, TCP_NODELAY, (void *) &_true, sizeof(int)) == SOCKET_ERROR) - { - WinPrint("WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); - WinPrint("setsockopt error\n"); + // + if ( setsockopt( newsocket, IPPROTO_TCP, TCP_NODELAY, (void *) &_true, sizeof( int ) ) == SOCKET_ERROR ) { + WinPrint( "WINS_OpenReliableSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + WinPrint( "setsockopt error\n" ); } //end if return newsocket; @@ -371,18 +365,15 @@ int WINS_OpenReliableSocket(int port) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Listen(int socket) -{ +int WINS_Listen( int socket ){ u_long _true = 1; - if (ioctlsocket(socket, FIONBIO, &_true) == -1) - { - WinPrint("WINS_Listen: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ioctlsocket( socket, FIONBIO, &_true ) == -1 ) { + WinPrint( "WINS_Listen: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - if (listen(socket, SOMAXCONN) == SOCKET_ERROR) - { - WinPrint("WINS_Listen: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( listen( socket, SOMAXCONN ) == SOCKET_ERROR ) { + WinPrint( "WINS_Listen: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if return 0; @@ -393,24 +384,23 @@ int WINS_Listen(int socket) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Accept(int socket, struct sockaddr_s *addr) -{ - int addrlen = sizeof (struct sockaddr_s); +int WINS_Accept( int socket, struct sockaddr_s *addr ){ + int addrlen = sizeof( struct sockaddr_s ); int newsocket; BOOL _true = 1; - newsocket = accept(socket, (struct sockaddr *)addr, &addrlen); - if (newsocket == INVALID_SOCKET) - { - if (WSAGetLastError() == WSAEWOULDBLOCK) return -1; - WinPrint("WINS_Accept: %s\n", WINS_ErrorMessage(WSAGetLastError())); + newsocket = accept( socket, (struct sockaddr *)addr, &addrlen ); + if ( newsocket == INVALID_SOCKET ) { + if ( WSAGetLastError() == WSAEWOULDBLOCK ) { + return -1; + } + WinPrint( "WINS_Accept: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - // - if (setsockopt(newsocket, IPPROTO_TCP, TCP_NODELAY, (void *) &_true, sizeof(int)) == SOCKET_ERROR) - { - WinPrint("WINS_Accept: %s\n", WINS_ErrorMessage(WSAGetLastError())); - WinPrint("setsockopt error\n"); + // + if ( setsockopt( newsocket, IPPROTO_TCP, TCP_NODELAY, (void *) &_true, sizeof( int ) ) == SOCKET_ERROR ) { + WinPrint( "WINS_Accept: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); + WinPrint( "setsockopt error\n" ); } //end if return newsocket; } //end of the function WINS_Accept @@ -420,17 +410,15 @@ int WINS_Accept(int socket, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_CloseSocket(int socket) -{ +int WINS_CloseSocket( int socket ){ /* - if (socket == net_broadcastsocket) - net_broadcastsocket = 0; - */ + if (socket == net_broadcastsocket) + net_broadcastsocket = 0; + */ // shutdown(socket, SD_SEND); - if (closesocket(socket) == SOCKET_ERROR) - { - WinPrint("WINS_CloseSocket: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( closesocket( socket ) == SOCKET_ERROR ) { + WinPrint( "WINS_CloseSocket: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return SOCKET_ERROR; } //end if return 0; @@ -443,35 +431,38 @@ int WINS_CloseSocket(int socket) // Returns: - // Changes Globals: - //=========================================================================== -static int PartialIPAddress (char *in, struct sockaddr_s *hostaddr) -{ +static int PartialIPAddress( char *in, struct sockaddr_s *hostaddr ){ char buff[256]; char *b; int addr; int num; int mask; - + buff[0] = '.'; b = buff; - strcpy(buff+1, in); - if (buff[1] == '.') b++; + strcpy( buff + 1, in ); + if ( buff[1] == '.' ) { + b++; + } addr = 0; - mask=-1; - while (*b == '.') + mask = -1; + while ( *b == '.' ) { num = 0; - if (*++b < '0' || *b > '9') return -1; - while (!( *b < '0' || *b > '9')) - num = num*10 + *(b++) - '0'; - mask<<=8; - addr = (addr<<8) + num; + if ( *++b < '0' || *b > '9' ) { + return -1; + } + while ( !( *b < '0' || *b > '9' ) ) + num = num * 10 + *( b++ ) - '0'; + mask <<= 8; + addr = ( addr << 8 ) + num; } - + hostaddr->sa_family = AF_INET; - ((struct sockaddr_in *)hostaddr)->sin_port = htons((u_short)net_hostport); - ((struct sockaddr_in *)hostaddr)->sin_addr.s_addr = (myAddr & htonl(mask)) | htonl(addr); - + ( (struct sockaddr_in *)hostaddr )->sin_port = htons( (u_short)net_hostport ); + ( (struct sockaddr_in *)hostaddr )->sin_addr.s_addr = ( myAddr & htonl( mask ) ) | htonl( addr ); + return 0; } //end of the function PartialIPAddress //=========================================================================== @@ -480,20 +471,17 @@ static int PartialIPAddress (char *in, struct sockaddr_s *hostaddr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Connect(int socket, struct sockaddr_s *addr) -{ +int WINS_Connect( int socket, struct sockaddr_s *addr ){ int ret; u_long _true2 = 0xFFFFFFFF; - ret = connect(socket, (struct sockaddr *)addr, sizeof(struct sockaddr_s)); - if (ret == SOCKET_ERROR) - { - WinPrint("WINS_Connect: %s\n", WINS_ErrorMessage(WSAGetLastError())); + ret = connect( socket, (struct sockaddr *)addr, sizeof( struct sockaddr_s ) ); + if ( ret == SOCKET_ERROR ) { + WinPrint( "WINS_Connect: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if - if (ioctlsocket(socket, FIONBIO, &_true2) == -1) - { - WinPrint("WINS_Connect: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ioctlsocket( socket, FIONBIO, &_true2 ) == -1 ) { + WinPrint( "WINS_Connect: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); return -1; } //end if return 0; @@ -504,15 +492,16 @@ int WINS_Connect(int socket, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_CheckNewConnections(void) -{ +int WINS_CheckNewConnections( void ){ char buf[4]; - if (net_acceptsocket == -1) + if ( net_acceptsocket == -1 ) { return -1; + } - if (recvfrom(net_acceptsocket, buf, 4, MSG_PEEK, NULL, NULL) > 0) + if ( recvfrom( net_acceptsocket, buf, 4, MSG_PEEK, NULL, NULL ) > 0 ) { return net_acceptsocket; + } return -1; } //end of the function WINS_CheckNewConnections //=========================================================================== @@ -524,36 +513,33 @@ int WINS_CheckNewConnections(void) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Read(int socket, byte *buf, int len, struct sockaddr_s *addr) -{ - int addrlen = sizeof (struct sockaddr_s); +int WINS_Read( int socket, byte *buf, int len, struct sockaddr_s *addr ){ + int addrlen = sizeof( struct sockaddr_s ); int ret, errno; - if (addr) - { - ret = recvfrom(socket, buf, len, 0, (struct sockaddr *)addr, &addrlen); - if (ret == -1) - { + if ( addr ) { + ret = recvfrom( socket, buf, len, 0, (struct sockaddr *)addr, &addrlen ); + if ( ret == -1 ) { errno = WSAGetLastError(); - if (errno == WSAEWOULDBLOCK || errno == WSAECONNREFUSED) + if ( errno == WSAEWOULDBLOCK || errno == WSAECONNREFUSED ) { return 0; + } } //end if } //end if else { - ret = recv(socket, buf, len, 0); - if (ret == SOCKET_ERROR) - { + ret = recv( socket, buf, len, 0 ); + if ( ret == SOCKET_ERROR ) { errno = WSAGetLastError(); - if (errno == WSAEWOULDBLOCK || errno == WSAECONNREFUSED) + if ( errno == WSAEWOULDBLOCK || errno == WSAECONNREFUSED ) { return 0; + } } //end if } //end else - if (ret == SOCKET_ERROR) - { - WinPrint("WINS_Read: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ret == SOCKET_ERROR ) { + WinPrint( "WINS_Read: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); } //end if return ret; } //end of the function WINS_Read @@ -563,13 +549,13 @@ int WINS_Read(int socket, byte *buf, int len, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_MakeSocketBroadcastCapable (int socket) -{ - int i = 1; +int WINS_MakeSocketBroadcastCapable( int socket ){ + int i = 1; // make this socket broadcast capable - if (setsockopt(socket, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) < 0) + if ( setsockopt( socket, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof( i ) ) < 0 ) { return -1; + } net_broadcastsocket = socket; return 0; @@ -580,23 +566,21 @@ int WINS_MakeSocketBroadcastCapable (int socket) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Broadcast (int socket, byte *buf, int len) -{ +int WINS_Broadcast( int socket, byte *buf, int len ){ int ret; - if (socket != net_broadcastsocket) - { - if (net_broadcastsocket != 0) - WinError("Attempted to use multiple broadcasts sockets\n"); - ret = WINS_MakeSocketBroadcastCapable (socket); - if (ret == -1) - { - WinPrint("Unable to make socket broadcast capable\n"); + if ( socket != net_broadcastsocket ) { + if ( net_broadcastsocket != 0 ) { + WinError( "Attempted to use multiple broadcasts sockets\n" ); + } + ret = WINS_MakeSocketBroadcastCapable( socket ); + if ( ret == -1 ) { + WinPrint( "Unable to make socket broadcast capable\n" ); return ret; } } - return WINS_Write (socket, buf, len, &broadcastaddr); + return WINS_Write( socket, buf, len, &broadcastaddr ); } //end of the function WINS_Broadcast //=========================================================================== // returns qtrue on success or qfalse on failure @@ -605,21 +589,19 @@ int WINS_Broadcast (int socket, byte *buf, int len) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr) -{ +int WINS_Write( int socket, byte *buf, int len, struct sockaddr_s *addr ){ int ret, written; - if (addr) - { + if ( addr ) { written = 0; - while(written < len) + while ( written < len ) { - ret = sendto (socket, &buf[written], len-written, 0, (struct sockaddr *)addr, sizeof(struct sockaddr_s)); - if (ret == SOCKET_ERROR) - { - if (WSAGetLastError() != WSAEWOULDBLOCK) + ret = sendto( socket, &buf[written], len - written, 0, (struct sockaddr *)addr, sizeof( struct sockaddr_s ) ); + if ( ret == SOCKET_ERROR ) { + if ( WSAGetLastError() != WSAEWOULDBLOCK ) { return qfalse; - Sleep(1000); + } + Sleep( 1000 ); } //end if else { @@ -630,14 +612,14 @@ int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr) else { written = 0; - while(written < len) + while ( written < len ) { - ret = send(socket, buf, len, 0); - if (ret == SOCKET_ERROR) - { - if (WSAGetLastError() != WSAEWOULDBLOCK) + ret = send( socket, buf, len, 0 ); + if ( ret == SOCKET_ERROR ) { + if ( WSAGetLastError() != WSAEWOULDBLOCK ) { return qfalse; - Sleep(1000); + } + Sleep( 1000 ); } //end if else { @@ -645,11 +627,10 @@ int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr) } } } //end else - if (ret == SOCKET_ERROR) - { - WinPrint("WINS_Write: %s\n", WINS_ErrorMessage(WSAGetLastError())); + if ( ret == SOCKET_ERROR ) { + WinPrint( "WINS_Write: %s\n", WINS_ErrorMessage( WSAGetLastError() ) ); } //end if - return (ret == len); + return ( ret == len ); } //end of the function WINS_Write //=========================================================================== // @@ -657,13 +638,12 @@ int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -char *WINS_AddrToString (struct sockaddr_s *addr) -{ +char *WINS_AddrToString( struct sockaddr_s *addr ){ static char buffer[22]; int haddr; - haddr = ntohl(((struct sockaddr_in *)addr)->sin_addr.s_addr); - sprintf(buffer, "%d.%d.%d.%d:%d", (haddr >> 24) & 0xff, (haddr >> 16) & 0xff, (haddr >> 8) & 0xff, haddr & 0xff, ntohs(((struct sockaddr_in *)addr)->sin_port)); + haddr = ntohl( ( (struct sockaddr_in *)addr )->sin_addr.s_addr ); + sprintf( buffer, "%d.%d.%d.%d:%d", ( haddr >> 24 ) & 0xff, ( haddr >> 16 ) & 0xff, ( haddr >> 8 ) & 0xff, haddr & 0xff, ntohs( ( (struct sockaddr_in *)addr )->sin_port ) ); return buffer; } //end of the function WINS_AddrToString //=========================================================================== @@ -672,17 +652,16 @@ char *WINS_AddrToString (struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_StringToAddr(char *string, struct sockaddr_s *addr) -{ +int WINS_StringToAddr( char *string, struct sockaddr_s *addr ){ int ha1, ha2, ha3, ha4, hp; int ipaddr; - sscanf(string, "%d.%d.%d.%d:%d", &ha1, &ha2, &ha3, &ha4, &hp); - ipaddr = (ha1 << 24) | (ha2 << 16) | (ha3 << 8) | ha4; + sscanf( string, "%d.%d.%d.%d:%d", &ha1, &ha2, &ha3, &ha4, &hp ); + ipaddr = ( ha1 << 24 ) | ( ha2 << 16 ) | ( ha3 << 8 ) | ha4; addr->sa_family = AF_INET; - ((struct sockaddr_in *)addr)->sin_addr.s_addr = htonl(ipaddr); - ((struct sockaddr_in *)addr)->sin_port = htons((u_short)hp); + ( (struct sockaddr_in *)addr )->sin_addr.s_addr = htonl( ipaddr ); + ( (struct sockaddr_in *)addr )->sin_port = htons( (u_short)hp ); return 0; } //end of the function WINS_StringToAddr //=========================================================================== @@ -691,16 +670,16 @@ int WINS_StringToAddr(char *string, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_GetSocketAddr(int socket, struct sockaddr_s *addr) -{ - int addrlen = sizeof(struct sockaddr_s); +int WINS_GetSocketAddr( int socket, struct sockaddr_s *addr ){ + int addrlen = sizeof( struct sockaddr_s ); unsigned int a; - memset(addr, 0, sizeof(struct sockaddr_s)); - getsockname(socket, (struct sockaddr *)addr, &addrlen); - a = ((struct sockaddr_in *)addr)->sin_addr.s_addr; - if (a == 0 || a == inet_addr("127.0.0.1")) - ((struct sockaddr_in *)addr)->sin_addr.s_addr = myAddr; + memset( addr, 0, sizeof( struct sockaddr_s ) ); + getsockname( socket, (struct sockaddr *)addr, &addrlen ); + a = ( (struct sockaddr_in *)addr )->sin_addr.s_addr; + if ( a == 0 || a == inet_addr( "127.0.0.1" ) ) { + ( (struct sockaddr_in *)addr )->sin_addr.s_addr = myAddr; + } return 0; } //end of the function WINS_GetSocketAddr @@ -710,18 +689,16 @@ int WINS_GetSocketAddr(int socket, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_GetNameFromAddr (struct sockaddr_s *addr, char *name) -{ +int WINS_GetNameFromAddr( struct sockaddr_s *addr, char *name ){ struct hostent *hostentry; - hostentry = gethostbyaddr ((char *)&((struct sockaddr_in *)addr)->sin_addr, sizeof(struct in_addr), AF_INET); - if (hostentry) - { - strncpy (name, (char *)hostentry->h_name, NET_NAMELEN - 1); + hostentry = gethostbyaddr( (char *)&( (struct sockaddr_in *)addr )->sin_addr, sizeof( struct in_addr ), AF_INET ); + if ( hostentry ) { + strncpy( name, (char *)hostentry->h_name, NET_NAMELEN - 1 ); return 0; } - strcpy (name, WINS_AddrToString (addr)); + strcpy( name, WINS_AddrToString( addr ) ); return 0; } //end of the function WINS_GetNameFromAddr //=========================================================================== @@ -730,20 +707,21 @@ int WINS_GetNameFromAddr (struct sockaddr_s *addr, char *name) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_GetAddrFromName(char *name, struct sockaddr_s *addr) -{ +int WINS_GetAddrFromName( char *name, struct sockaddr_s *addr ){ struct hostent *hostentry; - if (name[0] >= '0' && name[0] <= '9') - return PartialIPAddress (name, addr); - - hostentry = gethostbyname (name); - if (!hostentry) + if ( name[0] >= '0' && name[0] <= '9' ) { + return PartialIPAddress( name, addr ); + } + + hostentry = gethostbyname( name ); + if ( !hostentry ) { return -1; + } addr->sa_family = AF_INET; - ((struct sockaddr_in *)addr)->sin_port = htons((u_short)net_hostport); - ((struct sockaddr_in *)addr)->sin_addr.s_addr = *(int *)hostentry->h_addr_list[0]; + ( (struct sockaddr_in *)addr )->sin_port = htons( (u_short)net_hostport ); + ( (struct sockaddr_in *)addr )->sin_addr.s_addr = *(int *)hostentry->h_addr_list[0]; return 0; } //end of the function WINS_GetAddrFromName @@ -753,16 +731,18 @@ int WINS_GetAddrFromName(char *name, struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_AddrCompare (struct sockaddr_s *addr1, struct sockaddr_s *addr2) -{ - if (addr1->sa_family != addr2->sa_family) +int WINS_AddrCompare( struct sockaddr_s *addr1, struct sockaddr_s *addr2 ){ + if ( addr1->sa_family != addr2->sa_family ) { return -1; + } - if (((struct sockaddr_in *)addr1)->sin_addr.s_addr != ((struct sockaddr_in *)addr2)->sin_addr.s_addr) + if ( ( (struct sockaddr_in *)addr1 )->sin_addr.s_addr != ( (struct sockaddr_in *)addr2 )->sin_addr.s_addr ) { return -1; + } - if (((struct sockaddr_in *)addr1)->sin_port != ((struct sockaddr_in *)addr2)->sin_port) + if ( ( (struct sockaddr_in *)addr1 )->sin_port != ( (struct sockaddr_in *)addr2 )->sin_port ) { return 1; + } return 0; } //end of the function WINS_AddrCompare @@ -772,9 +752,8 @@ int WINS_AddrCompare (struct sockaddr_s *addr1, struct sockaddr_s *addr2) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_GetSocketPort (struct sockaddr_s *addr) -{ - return ntohs(((struct sockaddr_in *)addr)->sin_port); +int WINS_GetSocketPort( struct sockaddr_s *addr ){ + return ntohs( ( (struct sockaddr_in *)addr )->sin_port ); } //end of the function WINS_GetSocketPort //=========================================================================== // @@ -782,8 +761,7 @@ int WINS_GetSocketPort (struct sockaddr_s *addr) // Returns: - // Changes Globals: - //=========================================================================== -int WINS_SetSocketPort (struct sockaddr_s *addr, int port) -{ - ((struct sockaddr_in *)addr)->sin_port = htons((u_short)port); +int WINS_SetSocketPort( struct sockaddr_s *addr, int port ){ + ( (struct sockaddr_in *)addr )->sin_port = htons( (u_short)port ); return 0; } //end of the function WINS_SetSocketPort diff --git a/libs/l_net/l_net_wins.h b/libs/l_net/l_net_wins.h index 73598795..88c86aa3 100644 --- a/libs/l_net/l_net_wins.h +++ b/libs/l_net/l_net_wins.h @@ -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-2007 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 + */ //=========================================================================== // @@ -29,24 +29,24 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // Notes: //=========================================================================== -int WINS_Init(void); -void WINS_Shutdown(void); -char *WINS_MyAddress(void); -int WINS_Listen(int socket); -int WINS_Accept(int socket, struct sockaddr_s *addr); -int WINS_OpenSocket(int port); -int WINS_OpenReliableSocket(int port); -int WINS_CloseSocket(int socket); -int WINS_Connect (int socket, struct sockaddr_s *addr); -int WINS_CheckNewConnections(void); -int WINS_Read(int socket, byte *buf, int len, struct sockaddr_s *addr); -int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr); -int WINS_Broadcast (int socket, byte *buf, int len); -char *WINS_AddrToString (struct sockaddr_s *addr); -int WINS_StringToAddr (char *string, struct sockaddr_s *addr); -int WINS_GetSocketAddr (int socket, struct sockaddr_s *addr); -int WINS_GetNameFromAddr (struct sockaddr_s *addr, char *name); -int WINS_GetAddrFromName (char *name, struct sockaddr_s *addr); -int WINS_AddrCompare (struct sockaddr_s *addr1, struct sockaddr_s *addr2); -int WINS_GetSocketPort (struct sockaddr_s *addr); -int WINS_SetSocketPort (struct sockaddr_s *addr, int port); +int WINS_Init( void ); +void WINS_Shutdown( void ); +char *WINS_MyAddress( void ); +int WINS_Listen( int socket ); +int WINS_Accept( int socket, struct sockaddr_s *addr ); +int WINS_OpenSocket( int port ); +int WINS_OpenReliableSocket( int port ); +int WINS_CloseSocket( int socket ); +int WINS_Connect( int socket, struct sockaddr_s *addr ); +int WINS_CheckNewConnections( void ); +int WINS_Read( int socket, byte *buf, int len, struct sockaddr_s *addr ); +int WINS_Write( int socket, byte *buf, int len, struct sockaddr_s *addr ); +int WINS_Broadcast( int socket, byte *buf, int len ); +char *WINS_AddrToString( struct sockaddr_s *addr ); +int WINS_StringToAddr( char *string, struct sockaddr_s *addr ); +int WINS_GetSocketAddr( int socket, struct sockaddr_s *addr ); +int WINS_GetNameFromAddr( struct sockaddr_s *addr, char *name ); +int WINS_GetAddrFromName( char *name, struct sockaddr_s *addr ); +int WINS_AddrCompare( struct sockaddr_s *addr1, struct sockaddr_s *addr2 ); +int WINS_GetSocketPort( struct sockaddr_s *addr ); +int WINS_SetSocketPort( struct sockaddr_s *addr, int port ); diff --git a/libs/mathlib.h b/libs/mathlib.h index 172d9eac..b5780dbd 100644 --- a/libs/mathlib.h +++ b/libs/mathlib.h @@ -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-2007 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 + */ #ifndef __MATHLIB__ #define __MATHLIB__ @@ -44,117 +44,117 @@ typedef vec_t vec4_t[4]; // because for example adding VEC_SMALLEST_EPSILON_AROUND_ONE to 1024.0 will have no effect. #define VEC_SMALLEST_EPSILON_AROUND_ONE FLT_EPSILON -#define SIDE_FRONT 0 -#define SIDE_ON 2 -#define SIDE_BACK 1 -#define SIDE_CROSS -2 +#define SIDE_FRONT 0 +#define SIDE_ON 2 +#define SIDE_BACK 1 +#define SIDE_CROSS -2 // plane types are used to speed some tests // 0-2 are axial planes -#define PLANE_X 0 -#define PLANE_Y 1 -#define PLANE_Z 2 -#define PLANE_NON_AXIAL 3 +#define PLANE_X 0 +#define PLANE_Y 1 +#define PLANE_Z 2 +#define PLANE_NON_AXIAL 3 -#define Q_PI 3.14159265358979323846f +#define Q_PI 3.14159265358979323846f extern vec3_t vec3_origin; -#define EQUAL_EPSILON 0.001 +#define EQUAL_EPSILON 0.001 #ifndef VEC_MAX #define VEC_MAX 3.402823466e+38F #endif -qboolean VectorCompare (vec3_t v1, vec3_t v2); +qboolean VectorCompare( vec3_t v1, vec3_t v2 ); -#define DotProduct(x,y) ((x)[0]*(y)[0]+(x)[1]*(y)[1]+(x)[2]*(y)[2]) -#define VectorSubtract(a,b,c) ((c)[0]=(a)[0]-(b)[0],(c)[1]=(a)[1]-(b)[1],(c)[2]=(a)[2]-(b)[2]) -#define VectorAdd(a,b,c) ((c)[0]=(a)[0]+(b)[0],(c)[1]=(a)[1]+(b)[1],(c)[2]=(a)[2]+(b)[2]) -#define VectorIncrement(a,b) ((b)[0]+=(a)[0],(b)[1]+=(a)[1],(b)[2]+=(a)[2]) -#define VectorCopy(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2]) -#define VectorSet(v, a, b, c) ((v)[0]=(a),(v)[1]=(b),(v)[2]=(c)) -#define VectorScale(a,b,c) ((c)[0]=(b)*(a)[0],(c)[1]=(b)*(a)[1],(c)[2]=(b)*(a)[2]) -#define VectorMid(a,b,c) ((c)[0]=((a)[0]+(b)[0])*0.5f,(c)[1]=((a)[1]+(b)[1])*0.5f,(c)[2]=((a)[2]+(b)[2])*0.5f) -#define VectorNegative(a,b) ((b)[0]=-(a)[0],(b)[1]=-(a)[1],(b)[2]=-(a)[2]) -#define CrossProduct(a,b,c) ((c)[0]=(a)[1]*(b)[2]-(a)[2]*(b)[1],(c)[1]=(a)[2]*(b)[0]-(a)[0]*(b)[2],(c)[2]=(a)[0]*(b)[1]-(a)[1]*(b)[0]) -#define VectorClear(x) ((x)[0]=(x)[1]=(x)[2]=0) +#define DotProduct( x,y ) ( ( x )[0] * ( y )[0] + ( x )[1] * ( y )[1] + ( x )[2] * ( y )[2] ) +#define VectorSubtract( a,b,c ) ( ( c )[0] = ( a )[0] - ( b )[0],( c )[1] = ( a )[1] - ( b )[1],( c )[2] = ( a )[2] - ( b )[2] ) +#define VectorAdd( a,b,c ) ( ( c )[0] = ( a )[0] + ( b )[0],( c )[1] = ( a )[1] + ( b )[1],( c )[2] = ( a )[2] + ( b )[2] ) +#define VectorIncrement( a,b ) ( ( b )[0] += ( a )[0],( b )[1] += ( a )[1],( b )[2] += ( a )[2] ) +#define VectorCopy( a,b ) ( ( b )[0] = ( a )[0],( b )[1] = ( a )[1],( b )[2] = ( a )[2] ) +#define VectorSet( v, a, b, c ) ( ( v )[0] = ( a ),( v )[1] = ( b ),( v )[2] = ( c ) ) +#define VectorScale( a,b,c ) ( ( c )[0] = ( b ) * ( a )[0],( c )[1] = ( b ) * ( a )[1],( c )[2] = ( b ) * ( a )[2] ) +#define VectorMid( a,b,c ) ( ( c )[0] = ( ( a )[0] + ( b )[0] ) * 0.5f,( c )[1] = ( ( a )[1] + ( b )[1] ) * 0.5f,( c )[2] = ( ( a )[2] + ( b )[2] ) * 0.5f ) +#define VectorNegative( a,b ) ( ( b )[0] = -( a )[0],( b )[1] = -( a )[1],( b )[2] = -( a )[2] ) +#define CrossProduct( a,b,c ) ( ( c )[0] = ( a )[1] * ( b )[2] - ( a )[2] * ( b )[1],( c )[1] = ( a )[2] * ( b )[0] - ( a )[0] * ( b )[2],( c )[2] = ( a )[0] * ( b )[1] - ( a )[1] * ( b )[0] ) +#define VectorClear( x ) ( ( x )[0] = ( x )[1] = ( x )[2] = 0 ) -#define Q_rint(in) ((vec_t)floor(in+0.5)) +#define Q_rint( in ) ( (vec_t)floor( in + 0.5 ) ) -qboolean VectorIsOnAxis(vec3_t v); -qboolean VectorIsOnAxialPlane(vec3_t v); +qboolean VectorIsOnAxis( vec3_t v ); +qboolean VectorIsOnAxialPlane( vec3_t v ); -vec_t VectorLength(vec3_t v); +vec_t VectorLength( vec3_t v ); void VectorMA( const vec3_t va, vec_t scale, const vec3_t vb, vec3_t vc ); -void _CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross); +void _CrossProduct( vec3_t v1, vec3_t v2, vec3_t cross ); // I need this define in order to test some of the regression tests from time to time. // This define affect the precision of VectorNormalize() function only. #define MATHLIB_VECTOR_NORMALIZE_PRECISION_FIX 1 -vec_t VectorNormalize (const vec3_t in, vec3_t out); +vec_t VectorNormalize( const vec3_t in, vec3_t out ); vec_t ColorNormalize( const vec3_t in, vec3_t out ); -void VectorInverse (vec3_t v); -void VectorPolar(vec3_t v, float radius, float theta, float phi); +void VectorInverse( vec3_t v ); +void VectorPolar( vec3_t v, float radius, float theta, float phi ); // default snapping, to 1 -void VectorSnap(vec3_t v); +void VectorSnap( vec3_t v ); // integer snapping -void VectorISnap(vec3_t point, int snap); +void VectorISnap( vec3_t point, int snap ); // Gef: added snap to float for sub-integer grid sizes // TTimo: we still use the int version of VectorSnap when possible // to avoid potential rounding issues // TTimo: renaming to VectorFSnap for C implementation -void VectorFSnap(vec3_t point, float snap); +void VectorFSnap( vec3_t point, float snap ); // NOTE: added these from Ritual's Q3Radiant -void ClearBounds (vec3_t mins, vec3_t maxs); -void AddPointToBounds (vec3_t v, vec3_t mins, vec3_t maxs); +void ClearBounds( vec3_t mins, vec3_t maxs ); +void AddPointToBounds( vec3_t v, vec3_t mins, vec3_t maxs ); -void AngleVectors (vec3_t angles, vec3_t forward, vec3_t right, vec3_t up); +void AngleVectors( vec3_t angles, vec3_t forward, vec3_t right, vec3_t up ); void VectorToAngles( vec3_t vec, vec3_t angles ); #define ZERO_EPSILON 1.0E-6 #define RAD2DEGMULT 57.29577951308232f #define DEG2RADMULT 0.01745329251994329f -#define RAD2DEG( a ) ( (a) * RAD2DEGMULT ) -#define DEG2RAD( a ) ( (a) * DEG2RADMULT ) +#define RAD2DEG( a ) ( ( a ) * RAD2DEGMULT ) +#define DEG2RAD( a ) ( ( a ) * DEG2RADMULT ) -void VectorRotate (vec3_t vIn, vec3_t vRotation, vec3_t out); -void VectorRotateOrigin (vec3_t vIn, vec3_t vRotation, vec3_t vOrigin, vec3_t out); +void VectorRotate( vec3_t vIn, vec3_t vRotation, vec3_t out ); +void VectorRotateOrigin( vec3_t vIn, vec3_t vRotation, vec3_t vOrigin, vec3_t out ); // some function merged from tools mathlib code qboolean PlaneFromPoints( vec4_t plane, const vec3_t a, const vec3_t b, const vec3_t c ); void NormalToLatLong( const vec3_t normal, byte bytes[2] ); -int PlaneTypeForNormal (vec3_t normal); +int PlaneTypeForNormal( vec3_t normal ); void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, float degrees ); // Spog // code imported from geomlib /*! -\todo -FIXME test calls such as intersect tests should be named test_ -*/ + \todo + FIXME test calls such as intersect tests should be named test_ + */ typedef vec_t m3x3_t[9]; -/*!NOTE -m4x4 looks like this.. +/*!NOTE + m4x4 looks like this.. x y z -x axis ( 0 1 2) -y axis ( 4 5 6) -z axis ( 8 9 10) -translation (12 13 14) -scale ( 0 5 10) -*/ + x axis ( 0 1 2) + y axis ( 4 5 6) + z axis ( 8 9 10) + translation (12 13 14) + scale ( 0 5 10) + */ typedef vec_t m4x4_t[16]; -#define M4X4_INDEX(m,row,col) (m[(col<<2)+row]) +#define M4X4_INDEX( m,row,col ) ( m[( col << 2 ) + row] ) typedef enum { TRANSLATE, SCALE, ROTATE } transformtype; // legacy, used only in pmesh.cpp @@ -162,154 +162,154 @@ typedef enum { eXYZ, eYZX, eZXY, eXZY, eYXZ, eZYX } eulerOrder_t; // constructors /*! create m4x4 as identity matrix */ -void m4x4_identity(m4x4_t matrix); +void m4x4_identity( m4x4_t matrix ); /*! create m4x4 as a translation matrix, for a translation vec3 */ -void m4x4_translation_for_vec3(m4x4_t matrix, const vec3_t translation); +void m4x4_translation_for_vec3( m4x4_t matrix, const vec3_t translation ); /*! create m4x4 as a rotation matrix, for an euler angles (degrees) vec3 */ -void m4x4_rotation_for_vec3(m4x4_t matrix, const vec3_t euler, eulerOrder_t order); +void m4x4_rotation_for_vec3( m4x4_t matrix, const vec3_t euler, eulerOrder_t order ); /*! create m4x4 as a scaling matrix, for a scale vec3 */ -void m4x4_scale_for_vec3(m4x4_t matrix, const vec3_t scale); +void m4x4_scale_for_vec3( m4x4_t matrix, const vec3_t scale ); /*! create m4x4 as a rotation matrix, for a quaternion vec4 */ -void m4x4_rotation_for_quat(m4x4_t matrix, const vec4_t rotation); +void m4x4_rotation_for_quat( m4x4_t matrix, const vec4_t rotation ); /*! create m4x4 as a rotation matrix, for an axis vec3 and an angle (radians) */ -void m4x4_rotation_for_axisangle(m4x4_t matrix, const vec3_t axis, vec_t angle); +void m4x4_rotation_for_axisangle( m4x4_t matrix, const vec3_t axis, vec_t angle ); // a valid m4x4 to be modified is always first argument /*! translate m4x4 by a translation vec3 */ -void m4x4_translate_by_vec3(m4x4_t matrix, const vec3_t translation); +void m4x4_translate_by_vec3( m4x4_t matrix, const vec3_t translation ); /*! rotate m4x4 by a euler (degrees) vec3 */ -void m4x4_rotate_by_vec3(m4x4_t matrix, const vec3_t euler, eulerOrder_t order); +void m4x4_rotate_by_vec3( m4x4_t matrix, const vec3_t euler, eulerOrder_t order ); /*! scale m4x4 by a scaling vec3 */ -void m4x4_scale_by_vec3(m4x4_t matrix, const vec3_t scale); +void m4x4_scale_by_vec3( m4x4_t matrix, const vec3_t scale ); /*! rotate m4x4 by a quaternion vec4 */ -void m4x4_rotate_by_quat(m4x4_t matrix, const vec4_t rotation); +void m4x4_rotate_by_quat( m4x4_t matrix, const vec4_t rotation ); /*! rotate m4x4 by an axis vec3 and an angle (radians) */ -void m4x4_rotate_by_axisangle(m4x4_t matrix, const vec3_t axis, vec_t angle); +void m4x4_rotate_by_axisangle( m4x4_t matrix, const vec3_t axis, vec_t angle ); /*! transform m4x4 by translation/euler/scaling vec3 (transform = translation.euler.scale) */ -void m4x4_transform_by_vec3(m4x4_t matrix, const vec3_t translation, const vec3_t euler, eulerOrder_t order, const vec3_t scale); +void m4x4_transform_by_vec3( m4x4_t matrix, const vec3_t translation, const vec3_t euler, eulerOrder_t order, const vec3_t scale ); /*! rotate m4x4 around a pivot point by euler(degrees) vec3 */ -void m4x4_pivoted_rotate_by_vec3(m4x4_t matrix, const vec3_t euler, eulerOrder_t order, const vec3_t pivotpoint); +void m4x4_pivoted_rotate_by_vec3( m4x4_t matrix, const vec3_t euler, eulerOrder_t order, const vec3_t pivotpoint ); /*! scale m4x4 around a pivot point by scaling vec3 */ -void m4x4_pivoted_scale_by_vec3(m4x4_t matrix, const vec3_t scale, const vec3_t pivotpoint); +void m4x4_pivoted_scale_by_vec3( m4x4_t matrix, const vec3_t scale, const vec3_t pivotpoint ); /*! transform m4x4 around a pivot point by translation/euler/scaling vec3 */ -void m4x4_pivoted_transform_by_vec3(m4x4_t matrix, const vec3_t translation, const vec3_t euler, eulerOrder_t order, const vec3_t scale, const vec3_t pivotpoint); +void m4x4_pivoted_transform_by_vec3( m4x4_t matrix, const vec3_t translation, const vec3_t euler, eulerOrder_t order, const vec3_t scale, const vec3_t pivotpoint ); /*! rotate m4x4 around a pivot point by quaternion vec4 */ -void m4x4_pivoted_rotate_by_quat(m4x4_t matrix, const vec4_t rotation, const vec3_t pivotpoint); +void m4x4_pivoted_rotate_by_quat( m4x4_t matrix, const vec4_t rotation, const vec3_t pivotpoint ); /*! rotate m4x4 around a pivot point by axis vec3 and angle (radians) */ -void m4x4_pivoted_rotate_by_axisangle(m4x4_t matrix, const vec3_t axis, vec_t angle, const vec3_t pivotpoint); +void m4x4_pivoted_rotate_by_axisangle( m4x4_t matrix, const vec3_t axis, vec_t angle, const vec3_t pivotpoint ); /*! post-multiply m4x4 by another m4x4 */ -void m4x4_multiply_by_m4x4(m4x4_t matrix, const m4x4_t other); +void m4x4_multiply_by_m4x4( m4x4_t matrix, const m4x4_t other ); /*! pre-multiply m4x4 by another m4x4 */ -void m4x4_premultiply_by_m4x4(m4x4_t matrix, const m4x4_t other); +void m4x4_premultiply_by_m4x4( m4x4_t matrix, const m4x4_t other ); /*! multiply a point (x,y,z,1) by matrix */ -void m4x4_transform_point(const m4x4_t matrix, vec3_t point); +void m4x4_transform_point( const m4x4_t matrix, vec3_t point ); /*! multiply a normal (x,y,z,0) by matrix */ -void m4x4_transform_normal(const m4x4_t matrix, vec3_t normal); +void m4x4_transform_normal( const m4x4_t matrix, vec3_t normal ); /*! multiply a vec4 (x,y,z,w) by matrix */ -void m4x4_transform_vec4(const m4x4_t matrix, vec4_t vector); +void m4x4_transform_vec4( const m4x4_t matrix, vec4_t vector ); /*! multiply a point (x,y,z,1) by matrix */ -void m4x4_transform_point(const m4x4_t matrix, vec3_t point); +void m4x4_transform_point( const m4x4_t matrix, vec3_t point ); /*! multiply a normal (x,y,z,0) by matrix */ -void m4x4_transform_normal(const m4x4_t matrix, vec3_t normal); +void m4x4_transform_normal( const m4x4_t matrix, vec3_t normal ); /*! transpose a m4x4 */ -void m4x4_transpose(m4x4_t matrix); +void m4x4_transpose( m4x4_t matrix ); /*! invert an orthogonal 4x3 subset of a 4x4 matrix */ -void m4x4_orthogonal_invert(m4x4_t matrix); +void m4x4_orthogonal_invert( m4x4_t matrix ); /*! invert any m4x4 using Kramer's rule.. return 1 if matrix is singular, else return 0 */ -int m4x4_invert(m4x4_t matrix); +int m4x4_invert( m4x4_t matrix ); /*! -\todo object/ray intersection functions should maybe return a point rather than a distance? -*/ + \todo object/ray intersection functions should maybe return a point rather than a distance? + */ /*! -aabb_t - "axis-aligned" bounding box... - origin: centre of bounding box... - extents: +/- extents of box from origin... - radius: cached length of extents vector... -*/ + aabb_t - "axis-aligned" bounding box... + origin: centre of bounding box... + extents: +/- extents of box from origin... + radius: cached length of extents vector... + */ typedef struct aabb_s { - vec3_t origin; - vec3_t extents; - vec_t radius; + vec3_t origin; + vec3_t extents; + vec_t radius; } aabb_t; /*! -bbox_t - oriented bounding box... - aabb: axis-aligned bounding box... - axes: orientation axes... -*/ + bbox_t - oriented bounding box... + aabb: axis-aligned bounding box... + axes: orientation axes... + */ typedef struct bbox_s { - aabb_t aabb; - vec3_t axes[3]; + aabb_t aabb; + vec3_t axes[3]; } bbox_t; /*! -ray_t - origin point and direction unit-vector -*/ + ray_t - origin point and direction unit-vector + */ typedef struct ray_s { - vec3_t origin; - vec3_t direction; + vec3_t origin; + vec3_t direction; } ray_t; /*! Generate AABB from min/max. */ -void aabb_construct_for_vec3(aabb_t *aabb, const vec3_t min, const vec3_t max); +void aabb_construct_for_vec3( aabb_t *aabb, const vec3_t min, const vec3_t max ); /*! Update bounding-sphere radius. */ -void aabb_update_radius(aabb_t *aabb); +void aabb_update_radius( aabb_t *aabb ); /*! Initialise AABB to negative size. */ -void aabb_clear(aabb_t *aabb); +void aabb_clear( aabb_t *aabb ); /*! Extend AABB to include point. */ -void aabb_extend_by_point(aabb_t *aabb, const vec3_t point); +void aabb_extend_by_point( aabb_t *aabb, const vec3_t point ); /*! Extend AABB to include aabb_src. */ -void aabb_extend_by_aabb(aabb_t *aabb, const aabb_t *aabb_src); +void aabb_extend_by_aabb( aabb_t *aabb, const aabb_t *aabb_src ); /*! Extend AABB by +/- extension vector. */ -void aabb_extend_by_vec3(aabb_t *aabb, vec3_t extension); +void aabb_extend_by_vec3( aabb_t *aabb, vec3_t extension ); /*! Return 2 if point is inside, else 1 if point is on surface, else 0. */ -int aabb_intersect_point(const aabb_t *aabb, const vec3_t point); +int aabb_intersect_point( const aabb_t *aabb, const vec3_t point ); /*! Return 2 if aabb_src intersects, else 1 if aabb_src touches exactly, else 0. */ -int aabb_intersect_aabb(const aabb_t *aabb, const aabb_t *aabb_src); +int aabb_intersect_aabb( const aabb_t *aabb, const aabb_t *aabb_src ); /*! Return 2 if aabb is behind plane, else 1 if aabb intersects plane, else 0. */ -int aabb_intersect_plane(const aabb_t *aabb, const float *plane); +int aabb_intersect_plane( const aabb_t *aabb, const float *plane ); /*! Return 1 if aabb intersects ray, else 0... dist = closest intersection. */ -int aabb_intersect_ray(const aabb_t *aabb, const ray_t *ray, vec_t *dist); +int aabb_intersect_ray( const aabb_t *aabb, const ray_t *ray, vec_t *dist ); /*! Return 1 if aabb intersects ray, else 0. Faster, but does not provide point of intersection */ -int aabb_test_ray(const aabb_t* aabb, const ray_t* ray); +int aabb_test_ray( const aabb_t* aabb, const ray_t* ray ); /*! Generate AABB from oriented bounding box. */ -void aabb_for_bbox(aabb_t *aabb, const bbox_t *bbox); +void aabb_for_bbox( aabb_t *aabb, const bbox_t *bbox ); /*! Generate AABB from 2-dimensions of min/max, specified by axis. */ -void aabb_for_area(aabb_t *aabb, vec3_t area_tl, vec3_t area_br, int axis); +void aabb_for_area( aabb_t *aabb, vec3_t area_tl, vec3_t area_br, int axis ); /*! Generate AABB to contain src * transform. NOTE: transform must be orthogonal */ -void aabb_for_transformed_aabb(aabb_t* dst, const aabb_t* src, const m4x4_t transform); +void aabb_for_transformed_aabb( aabb_t* dst, const aabb_t* src, const m4x4_t transform ); /*! Generate oriented bounding box from AABB and transformation matrix. */ /*!\todo Remove need to specify euler/scale. */ -void bbox_for_oriented_aabb(bbox_t *bbox, const aabb_t *aabb, - const m4x4_t matrix, const vec3_t euler, const vec3_t scale); +void bbox_for_oriented_aabb( bbox_t *bbox, const aabb_t *aabb, + const m4x4_t matrix, const vec3_t euler, const vec3_t scale ); /*! Return 2 is bbox is behind plane, else return 1 if bbox intersects plane, else return 0. */ -int bbox_intersect_plane(const bbox_t *bbox, const vec_t* plane); +int bbox_intersect_plane( const bbox_t *bbox, const vec_t* plane ); /*! Generate a ray from an origin point and a direction unit-vector */ -void ray_construct_for_vec3(ray_t *ray, const vec3_t origin, const vec3_t direction); - +void ray_construct_for_vec3( ray_t *ray, const vec3_t origin, const vec3_t direction ); + /*! Transform a ray */ -void ray_transform(ray_t *ray, const m4x4_t matrix); +void ray_transform( ray_t *ray, const m4x4_t matrix ); /*! return true if point intersects cone formed by ray, divergence and epsilon */ -vec_t ray_intersect_point(const ray_t *ray, const vec3_t point, vec_t epsilon, vec_t divergence); +vec_t ray_intersect_point( const ray_t *ray, const vec3_t point, vec_t epsilon, vec_t divergence ); /*! return true if triangle intersects ray... dist = dist from intersection point to ray-origin */ -vec_t ray_intersect_triangle(const ray_t *ray, qboolean bCullBack, const vec3_t vert0, const vec3_t vert1, const vec3_t vert2); +vec_t ray_intersect_triangle( const ray_t *ray, qboolean bCullBack, const vec3_t vert0, const vec3_t vert1, const vec3_t vert2 ); //////////////////////////////////////////////////////////////////////////////// @@ -328,7 +328,7 @@ typedef vec_accu_t vec3_accu_t[3]; // because for example adding VEC_ACCU_SMALLEST_EPSILON_AROUND_ONE to 1024.0 will have no effect. #define VEC_ACCU_SMALLEST_EPSILON_AROUND_ONE DBL_EPSILON -vec_accu_t VectorLengthAccu(const vec3_accu_t v); +vec_accu_t VectorLengthAccu( const vec3_accu_t v ); // I have a feeling it may be safer to break these #define functions out into actual functions // in order to avoid accidental loss of precision. For example, say you call @@ -343,17 +343,17 @@ vec_accu_t VectorLengthAccu(const vec3_accu_t v); //#define CrossProductAccu(a, b, c) ((c)[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1], (c)[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2], (c)[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0]) //#define Q_rintAccu(in) ((vec_accu_t) floor(in + 0.5)) -vec_accu_t DotProductAccu(const vec3_accu_t a, const vec3_accu_t b); -void VectorSubtractAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out); -void VectorAddAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out); -void VectorCopyAccu(const vec3_accu_t in, vec3_accu_t out); -void VectorScaleAccu(const vec3_accu_t in, vec_accu_t scaleFactor, vec3_accu_t out); -void CrossProductAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out); -vec_accu_t Q_rintAccu(vec_accu_t val); - -void VectorCopyAccuToRegular(const vec3_accu_t in, vec3_t out); -void VectorCopyRegularToAccu(const vec3_t in, vec3_accu_t out); -vec_accu_t VectorNormalizeAccu(const vec3_accu_t in, vec3_accu_t out); +vec_accu_t DotProductAccu( const vec3_accu_t a, const vec3_accu_t b ); +void VectorSubtractAccu( const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out ); +void VectorAddAccu( const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out ); +void VectorCopyAccu( const vec3_accu_t in, vec3_accu_t out ); +void VectorScaleAccu( const vec3_accu_t in, vec_accu_t scaleFactor, vec3_accu_t out ); +void CrossProductAccu( const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out ); +vec_accu_t Q_rintAccu( vec_accu_t val ); + +void VectorCopyAccuToRegular( const vec3_accu_t in, vec3_t out ); +void VectorCopyRegularToAccu( const vec3_t in, vec3_accu_t out ); +vec_accu_t VectorNormalizeAccu( const vec3_accu_t in, vec3_accu_t out ); #ifdef __cplusplus } diff --git a/libs/mathlib/bbox.c b/libs/mathlib/bbox.c index f421f917..cffeaa78 100644 --- a/libs/mathlib/bbox.c +++ b/libs/mathlib/bbox.c @@ -1,391 +1,388 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 #include "mathlib.h" -void aabb_construct_for_vec3(aabb_t *aabb, const vec3_t min, const vec3_t max) -{ - VectorMid(min, max, aabb->origin); - VectorSubtract(max, aabb->origin, aabb->extents); +void aabb_construct_for_vec3( aabb_t *aabb, const vec3_t min, const vec3_t max ){ + VectorMid( min, max, aabb->origin ); + VectorSubtract( max, aabb->origin, aabb->extents ); } -void aabb_update_radius(aabb_t *aabb) -{ - aabb->radius = VectorLength(aabb->extents); +void aabb_update_radius( aabb_t *aabb ){ + aabb->radius = VectorLength( aabb->extents ); } -void aabb_clear(aabb_t *aabb) -{ - aabb->origin[0] = aabb->origin[1] = aabb->origin[2] = 0; - aabb->extents[0] = aabb->extents[1] = aabb->extents[2] = -FLT_MAX; +void aabb_clear( aabb_t *aabb ){ + aabb->origin[0] = aabb->origin[1] = aabb->origin[2] = 0; + aabb->extents[0] = aabb->extents[1] = aabb->extents[2] = -FLT_MAX; } -void aabb_extend_by_point(aabb_t *aabb, const vec3_t point) -{ - int i; - vec_t min, max, displacement; - for(i=0; i<3; i++) - { - displacement = point[i] - aabb->origin[i]; - if(fabs(displacement) > aabb->extents[i]) - { - if(aabb->extents[i] < 0) // degenerate - { - min = max = point[i]; - } - else if(displacement > 0) - { - min = aabb->origin[i] - aabb->extents[i]; - max = aabb->origin[i] + displacement; - } - else - { - max = aabb->origin[i] + aabb->extents[i]; - min = aabb->origin[i] + displacement; - } - aabb->origin[i] = (min + max) * 0.5f; - aabb->extents[i] = max - aabb->origin[i]; - } - } +void aabb_extend_by_point( aabb_t *aabb, const vec3_t point ){ + int i; + vec_t min, max, displacement; + for ( i = 0; i < 3; i++ ) + { + displacement = point[i] - aabb->origin[i]; + if ( fabs( displacement ) > aabb->extents[i] ) { + if ( aabb->extents[i] < 0 ) { // degenerate + min = max = point[i]; + } + else if ( displacement > 0 ) { + min = aabb->origin[i] - aabb->extents[i]; + max = aabb->origin[i] + displacement; + } + else + { + max = aabb->origin[i] + aabb->extents[i]; + min = aabb->origin[i] + displacement; + } + aabb->origin[i] = ( min + max ) * 0.5f; + aabb->extents[i] = max - aabb->origin[i]; + } + } } -void aabb_extend_by_aabb(aabb_t *aabb, const aabb_t *aabb_src) -{ - int i; - vec_t min, max, displacement, difference; - for(i=0; i<3; i++) - { - displacement = aabb_src->origin[i] - aabb->origin[i]; - difference = aabb_src->extents[i] - aabb->extents[i]; - if(aabb->extents[i] < 0 - || difference >= fabs(displacement)) - { - // 2nd contains 1st - aabb->extents[i] = aabb_src->extents[i]; - aabb->origin[i] = aabb_src->origin[i]; - } - else if(aabb_src->extents[i] < 0 - || -difference >= fabs(displacement)) - { - // 1st contains 2nd - continue; - } - else - { - // not contained - if(displacement > 0) - { - min = aabb->origin[i] - aabb->extents[i]; - max = aabb_src->origin[i] + aabb_src->extents[i]; - } - else - { - min = aabb_src->origin[i] - aabb_src->extents[i]; - max = aabb->origin[i] + aabb->extents[i]; - } - aabb->origin[i] = (min + max) * 0.5f; - aabb->extents[i] = max - aabb->origin[i]; - } - } +void aabb_extend_by_aabb( aabb_t *aabb, const aabb_t *aabb_src ){ + int i; + vec_t min, max, displacement, difference; + for ( i = 0; i < 3; i++ ) + { + displacement = aabb_src->origin[i] - aabb->origin[i]; + difference = aabb_src->extents[i] - aabb->extents[i]; + if ( aabb->extents[i] < 0 + || difference >= fabs( displacement ) ) { + // 2nd contains 1st + aabb->extents[i] = aabb_src->extents[i]; + aabb->origin[i] = aabb_src->origin[i]; + } + else if ( aabb_src->extents[i] < 0 + || -difference >= fabs( displacement ) ) { + // 1st contains 2nd + continue; + } + else + { + // not contained + if ( displacement > 0 ) { + min = aabb->origin[i] - aabb->extents[i]; + max = aabb_src->origin[i] + aabb_src->extents[i]; + } + else + { + min = aabb_src->origin[i] - aabb_src->extents[i]; + max = aabb->origin[i] + aabb->extents[i]; + } + aabb->origin[i] = ( min + max ) * 0.5f; + aabb->extents[i] = max - aabb->origin[i]; + } + } } -void aabb_extend_by_vec3(aabb_t *aabb, vec3_t extension) -{ - VectorAdd(aabb->extents, extension, aabb->extents); +void aabb_extend_by_vec3( aabb_t *aabb, vec3_t extension ){ + VectorAdd( aabb->extents, extension, aabb->extents ); } -int aabb_intersect_point(const aabb_t *aabb, const vec3_t point) -{ - int i; - for(i=0; i<3; i++) - if(fabs(point[i] - aabb->origin[i]) >= aabb->extents[i]) - return 0; - return 1; +int aabb_intersect_point( const aabb_t *aabb, const vec3_t point ){ + int i; + for ( i = 0; i < 3; i++ ) + if ( fabs( point[i] - aabb->origin[i] ) >= aabb->extents[i] ) { + return 0; + } + return 1; } -int aabb_intersect_aabb(const aabb_t *aabb, const aabb_t *aabb_src) -{ - int i; - for (i=0; i<3; i++) - if ( fabs(aabb_src->origin[i] - aabb->origin[i]) > (fabs(aabb->extents[i]) + fabs(aabb_src->extents[i])) ) - return 0; - return 1; +int aabb_intersect_aabb( const aabb_t *aabb, const aabb_t *aabb_src ){ + int i; + for ( i = 0; i < 3; i++ ) + if ( fabs( aabb_src->origin[i] - aabb->origin[i] ) > ( fabs( aabb->extents[i] ) + fabs( aabb_src->extents[i] ) ) ) { + return 0; + } + return 1; } -int aabb_intersect_plane(const aabb_t *aabb, const float *plane) -{ - float fDist, fIntersect; +int aabb_intersect_plane( const aabb_t *aabb, const float *plane ){ + float fDist, fIntersect; - // calc distance of origin from plane - fDist = DotProduct(plane, aabb->origin) + plane[3]; - - // trivial accept/reject using bounding sphere - if (fabs(fDist) > aabb->radius) - { - if (fDist < 0) + // calc distance of origin from plane + fDist = DotProduct( plane, aabb->origin ) + plane[3]; + + // trivial accept/reject using bounding sphere + if ( fabs( fDist ) > aabb->radius ) { + if ( fDist < 0 ) { return 2; // totally inside - else + } + else{ return 0; // totally outside + } } - // calc extents distance relative to plane normal - fIntersect = (vec_t)(fabs(plane[0] * aabb->extents[0]) + fabs(plane[1] * aabb->extents[1]) + fabs(plane[2] * aabb->extents[2])); - // accept if origin is less than or equal to this distance - if (fabs(fDist) < fIntersect) return 1; // partially inside - else if (fDist < 0) return 2; // totally inside - return 0; // totally outside + // calc extents distance relative to plane normal + fIntersect = (vec_t)( fabs( plane[0] * aabb->extents[0] ) + fabs( plane[1] * aabb->extents[1] ) + fabs( plane[2] * aabb->extents[2] ) ); + // accept if origin is less than or equal to this distance + if ( fabs( fDist ) < fIntersect ) { + return 1; // partially inside + } + else if ( fDist < 0 ) { + return 2; // totally inside + } + return 0; // totally outside } -/* -Fast Ray-Box Intersection -by Andrew Woo -from "Graphics Gems", Academic Press, 1990 -*/ +/* + Fast Ray-Box Intersection + by Andrew Woo + from "Graphics Gems", Academic Press, 1990 + */ -#define NUMDIM 3 -#define RIGHT 0 -#define LEFT 1 -#define MIDDLE 2 +#define NUMDIM 3 +#define RIGHT 0 +#define LEFT 1 +#define MIDDLE 2 -int aabb_intersect_ray(const aabb_t *aabb, const ray_t *ray, vec_t *dist) -{ +int aabb_intersect_ray( const aabb_t *aabb, const ray_t *ray, vec_t *dist ){ int inside = 1; char quadrant[NUMDIM]; register int i; int whichPlane; double maxT[NUMDIM]; double candidatePlane[NUMDIM]; - vec3_t coord, segment; - - const float *origin = ray->origin; - const float *direction = ray->direction; + vec3_t coord, segment; + + const float *origin = ray->origin; + const float *direction = ray->direction; /* Find candidate planes; this loop can be avoided if - rays cast all from the eye(assume perpsective view) */ - for (i=0; iorigin[i] - aabb->extents[i])) - { + rays cast all from the eye(assume perpsective view) */ + for ( i = 0; i < NUMDIM; i++ ) + { + if ( origin[i] < ( aabb->origin[i] - aabb->extents[i] ) ) { quadrant[i] = LEFT; - candidatePlane[i] = (aabb->origin[i] - aabb->extents[i]); + candidatePlane[i] = ( aabb->origin[i] - aabb->extents[i] ); inside = 0; } - else if (origin[i] > (aabb->origin[i] + aabb->extents[i])) - { + else if ( origin[i] > ( aabb->origin[i] + aabb->extents[i] ) ) { quadrant[i] = RIGHT; - candidatePlane[i] = (aabb->origin[i] + aabb->extents[i]); + candidatePlane[i] = ( aabb->origin[i] + aabb->extents[i] ); inside = 0; } - else - { + else + { quadrant[i] = MIDDLE; - } - } + } + } /* Ray origin inside bounding box */ - if(inside == 1) - { + if ( inside == 1 ) { *dist = 0.0f; return 1; } /* Calculate T distances to candidate planes */ - for (i = 0; i < NUMDIM; i++) - { - if (quadrant[i] != MIDDLE && direction[i] !=0.) - maxT[i] = (candidatePlane[i] - origin[i]) / direction[i]; - else + for ( i = 0; i < NUMDIM; i++ ) + { + if ( quadrant[i] != MIDDLE && direction[i] != 0. ) { + maxT[i] = ( candidatePlane[i] - origin[i] ) / direction[i]; + } + else{ maxT[i] = -1.; - } + } + } /* Get largest of the maxT's for final choice of intersection */ whichPlane = 0; - for (i = 1; i < NUMDIM; i++) - if (maxT[whichPlane] < maxT[i]) + for ( i = 1; i < NUMDIM; i++ ) + if ( maxT[whichPlane] < maxT[i] ) { whichPlane = i; + } /* Check final candidate actually inside box */ - if (maxT[whichPlane] < 0.) - return 0; - for (i = 0; i < NUMDIM; i++) - { - if (whichPlane != i) - { - coord[i] = (vec_t)(origin[i] + maxT[whichPlane] * direction[i]); - if (fabs(coord[i] - aabb->origin[i]) > aabb->extents[i]) + if ( maxT[whichPlane] < 0. ) { + return 0; + } + for ( i = 0; i < NUMDIM; i++ ) + { + if ( whichPlane != i ) { + coord[i] = (vec_t)( origin[i] + maxT[whichPlane] * direction[i] ); + if ( fabs( coord[i] - aabb->origin[i] ) > aabb->extents[i] ) { return 0; + } } - else - { + else + { coord[i] = (vec_t)candidatePlane[i]; } - } + } - VectorSubtract(coord, origin, segment); - *dist = DotProduct(segment, direction); + VectorSubtract( coord, origin, segment ); + *dist = DotProduct( segment, direction ); - return 1; /* ray hits box */ + return 1; /* ray hits box */ } -int aabb_test_ray(const aabb_t* aabb, const ray_t* ray) -{ - vec3_t displacement, ray_absolute; - vec_t f; - - displacement[0] = ray->origin[0] - aabb->origin[0]; - if(fabs(displacement[0]) > aabb->extents[0] && displacement[0] * ray->direction[0] >= 0.0f) - return 0; - - displacement[1] = ray->origin[1] - aabb->origin[1]; - if(fabs(displacement[1]) > aabb->extents[1] && displacement[1] * ray->direction[1] >= 0.0f) - return 0; - - displacement[2] = ray->origin[2] - aabb->origin[2]; - if(fabs(displacement[2]) > aabb->extents[2] && displacement[2] * ray->direction[2] >= 0.0f) - return 0; - - ray_absolute[0] = (float)fabs(ray->direction[0]); - ray_absolute[1] = (float)fabs(ray->direction[1]); - ray_absolute[2] = (float)fabs(ray->direction[2]); - - f = ray->direction[1] * displacement[2] - ray->direction[2] * displacement[1]; - if((float)fabs(f) > aabb->extents[1] * ray_absolute[2] + aabb->extents[2] * ray_absolute[1]) - return 0; - - f = ray->direction[2] * displacement[0] - ray->direction[0] * displacement[2]; - if((float)fabs(f) > aabb->extents[0] * ray_absolute[2] + aabb->extents[2] * ray_absolute[0]) - return 0; - - f = ray->direction[0] * displacement[1] - ray->direction[1] * displacement[0]; - if((float)fabs(f) > aabb->extents[0] * ray_absolute[1] + aabb->extents[1] * ray_absolute[0]) - return 0; - - return 1; +int aabb_test_ray( const aabb_t* aabb, const ray_t* ray ){ + vec3_t displacement, ray_absolute; + vec_t f; + + displacement[0] = ray->origin[0] - aabb->origin[0]; + if ( fabs( displacement[0] ) > aabb->extents[0] && displacement[0] * ray->direction[0] >= 0.0f ) { + return 0; + } + + displacement[1] = ray->origin[1] - aabb->origin[1]; + if ( fabs( displacement[1] ) > aabb->extents[1] && displacement[1] * ray->direction[1] >= 0.0f ) { + return 0; + } + + displacement[2] = ray->origin[2] - aabb->origin[2]; + if ( fabs( displacement[2] ) > aabb->extents[2] && displacement[2] * ray->direction[2] >= 0.0f ) { + return 0; + } + + ray_absolute[0] = (float)fabs( ray->direction[0] ); + ray_absolute[1] = (float)fabs( ray->direction[1] ); + ray_absolute[2] = (float)fabs( ray->direction[2] ); + + f = ray->direction[1] * displacement[2] - ray->direction[2] * displacement[1]; + if ( (float)fabs( f ) > aabb->extents[1] * ray_absolute[2] + aabb->extents[2] * ray_absolute[1] ) { + return 0; + } + + f = ray->direction[2] * displacement[0] - ray->direction[0] * displacement[2]; + if ( (float)fabs( f ) > aabb->extents[0] * ray_absolute[2] + aabb->extents[2] * ray_absolute[0] ) { + return 0; + } + + f = ray->direction[0] * displacement[1] - ray->direction[1] * displacement[0]; + if ( (float)fabs( f ) > aabb->extents[0] * ray_absolute[1] + aabb->extents[1] * ray_absolute[0] ) { + return 0; + } + + return 1; } -void aabb_for_bbox(aabb_t *aabb, const bbox_t *bbox) -{ +void aabb_for_bbox( aabb_t *aabb, const bbox_t *bbox ){ int i; vec3_t temp[3]; - VectorCopy(bbox->aabb.origin, aabb->origin); + VectorCopy( bbox->aabb.origin, aabb->origin ); // calculate the AABB extents in local coord space from the OBB extents and axes - VectorScale(bbox->axes[0], bbox->aabb.extents[0], temp[0]); - VectorScale(bbox->axes[1], bbox->aabb.extents[1], temp[1]); - VectorScale(bbox->axes[2], bbox->aabb.extents[2], temp[2]); - for(i=0;i<3;i++) aabb->extents[i] = (vec_t)(fabs(temp[0][i]) + fabs(temp[1][i]) + fabs(temp[2][i])); + VectorScale( bbox->axes[0], bbox->aabb.extents[0], temp[0] ); + VectorScale( bbox->axes[1], bbox->aabb.extents[1], temp[1] ); + VectorScale( bbox->axes[2], bbox->aabb.extents[2], temp[2] ); + for ( i = 0; i < 3; i++ ) aabb->extents[i] = (vec_t)( fabs( temp[0][i] ) + fabs( temp[1][i] ) + fabs( temp[2][i] ) ); } -void aabb_for_area(aabb_t *aabb, vec3_t area_tl, vec3_t area_br, int axis) -{ - aabb_clear(aabb); - aabb->extents[axis] = FLT_MAX; - aabb_extend_by_point(aabb, area_tl); - aabb_extend_by_point(aabb, area_br); +void aabb_for_area( aabb_t *aabb, vec3_t area_tl, vec3_t area_br, int axis ){ + aabb_clear( aabb ); + aabb->extents[axis] = FLT_MAX; + aabb_extend_by_point( aabb, area_tl ); + aabb_extend_by_point( aabb, area_br ); } -void aabb_for_transformed_aabb(aabb_t* dst, const aabb_t* src, const m4x4_t transform) -{ - VectorCopy(src->origin, dst->origin); - m4x4_transform_point(transform, dst->origin); - - dst->extents[0] = (vec_t)(fabs(transform[0] * src->extents[0]) - + fabs(transform[4] * src->extents[1]) - + fabs(transform[8] * src->extents[2])); - dst->extents[1] = (vec_t)(fabs(transform[1] * src->extents[0]) - + fabs(transform[5] * src->extents[1]) - + fabs(transform[9] * src->extents[2])); - dst->extents[2] = (vec_t)(fabs(transform[2] * src->extents[0]) - + fabs(transform[6] * src->extents[1]) - + fabs(transform[10] * src->extents[2])); +void aabb_for_transformed_aabb( aabb_t* dst, const aabb_t* src, const m4x4_t transform ){ + VectorCopy( src->origin, dst->origin ); + m4x4_transform_point( transform, dst->origin ); + + dst->extents[0] = (vec_t)( fabs( transform[0] * src->extents[0] ) + + fabs( transform[4] * src->extents[1] ) + + fabs( transform[8] * src->extents[2] ) ); + dst->extents[1] = (vec_t)( fabs( transform[1] * src->extents[0] ) + + fabs( transform[5] * src->extents[1] ) + + fabs( transform[9] * src->extents[2] ) ); + dst->extents[2] = (vec_t)( fabs( transform[2] * src->extents[0] ) + + fabs( transform[6] * src->extents[1] ) + + fabs( transform[10] * src->extents[2] ) ); } -void bbox_for_oriented_aabb(bbox_t *bbox, const aabb_t *aabb, const m4x4_t matrix, const vec3_t euler, const vec3_t scale) -{ +void bbox_for_oriented_aabb( bbox_t *bbox, const aabb_t *aabb, const m4x4_t matrix, const vec3_t euler, const vec3_t scale ){ double rad[3]; double pi_180 = Q_PI / 180; - double A, B, C, D, E, F, AD, BD; - - VectorCopy(aabb->origin, bbox->aabb.origin); - - m4x4_transform_point(matrix, bbox->aabb.origin); + double A, B, C, D, E, F, AD, BD; + + VectorCopy( aabb->origin, bbox->aabb.origin ); + + m4x4_transform_point( matrix, bbox->aabb.origin ); bbox->aabb.extents[0] = aabb->extents[0] * scale[0]; bbox->aabb.extents[1] = aabb->extents[1] * scale[1]; bbox->aabb.extents[2] = aabb->extents[2] * scale[2]; - rad[0] = euler[0] * pi_180; + rad[0] = euler[0] * pi_180; rad[1] = euler[1] * pi_180; rad[2] = euler[2] * pi_180; - A = cos(rad[0]); - B = sin(rad[0]); - C = cos(rad[1]); - D = sin(rad[1]); - E = cos(rad[2]); - F = sin(rad[2]); - - AD = A * -D; - BD = B * -D; - - bbox->axes[0][0] = (vec_t)(C*E); - bbox->axes[0][1] = (vec_t)(-BD*E + A*F); - bbox->axes[0][2] = (vec_t)(AD*E + B*F); - bbox->axes[1][0] = (vec_t)(-C*F); - bbox->axes[1][1] = (vec_t)(BD*F + A*E); - bbox->axes[1][2] = (vec_t)(-AD*F + B*E); + A = cos( rad[0] ); + B = sin( rad[0] ); + C = cos( rad[1] ); + D = sin( rad[1] ); + E = cos( rad[2] ); + F = sin( rad[2] ); + + AD = A * -D; + BD = B * -D; + + bbox->axes[0][0] = (vec_t)( C * E ); + bbox->axes[0][1] = (vec_t)( -BD * E + A * F ); + bbox->axes[0][2] = (vec_t)( AD * E + B * F ); + bbox->axes[1][0] = (vec_t)( -C * F ); + bbox->axes[1][1] = (vec_t)( BD * F + A * E ); + bbox->axes[1][2] = (vec_t)( -AD * F + B * E ); bbox->axes[2][0] = (vec_t)D; - bbox->axes[2][1] = (vec_t)(-B*C); - bbox->axes[2][2] = (vec_t)(A*C); + bbox->axes[2][1] = (vec_t)( -B * C ); + bbox->axes[2][2] = (vec_t)( A * C ); - aabb_update_radius(&bbox->aabb); + aabb_update_radius( &bbox->aabb ); } -int bbox_intersect_plane(const bbox_t *bbox, const vec_t* plane) -{ - vec_t fDist, fIntersect; +int bbox_intersect_plane( const bbox_t *bbox, const vec_t* plane ){ + vec_t fDist, fIntersect; - // calc distance of origin from plane - fDist = DotProduct(plane, bbox->aabb.origin) + plane[3]; + // calc distance of origin from plane + fDist = DotProduct( plane, bbox->aabb.origin ) + plane[3]; // trivial accept/reject using bounding sphere - if (fabs(fDist) > bbox->aabb.radius) - { - if (fDist < 0) + if ( fabs( fDist ) > bbox->aabb.radius ) { + if ( fDist < 0 ) { return 2; // totally inside - else + } + else{ return 0; // totally outside + } } - // calc extents distance relative to plane normal - fIntersect = (vec_t)(fabs(bbox->aabb.extents[0] * DotProduct(plane, bbox->axes[0])) - + fabs(bbox->aabb.extents[1] * DotProduct(plane, bbox->axes[1])) - + fabs(bbox->aabb.extents[2] * DotProduct(plane, bbox->axes[2]))); - // accept if origin is less than this distance - if (fabs(fDist) < fIntersect) return 1; // partially inside - else if (fDist < 0) return 2; // totally inside - return 0; // totally outside + // calc extents distance relative to plane normal + fIntersect = (vec_t)( fabs( bbox->aabb.extents[0] * DotProduct( plane, bbox->axes[0] ) ) + + fabs( bbox->aabb.extents[1] * DotProduct( plane, bbox->axes[1] ) ) + + fabs( bbox->aabb.extents[2] * DotProduct( plane, bbox->axes[2] ) ) ); + // accept if origin is less than this distance + if ( fabs( fDist ) < fIntersect ) { + return 1; // partially inside + } + else if ( fDist < 0 ) { + return 2; // totally inside + } + return 0; // totally outside } diff --git a/libs/mathlib/linear.c b/libs/mathlib/linear.c index f6482201..faab9742 100644 --- a/libs/mathlib/linear.c +++ b/libs/mathlib/linear.c @@ -10,7 +10,7 @@ #define TINY FLT_MIN -void lubksb(float **a, int n, int *indx, float b[]) +void lubksb( float **a, int n, int *indx, float b[] ){ // Solves the set of n linear equations A.X=B. Here a[n][n] is input, not as the matrix // A but rather as its LU decomposition determined by the routine ludcmp. indx[n] is input // as the permutation vector returned by ludcmp. b[n] is input as the right-hand side vector @@ -18,84 +18,91 @@ void lubksb(float **a, int n, int *indx, float b[]) // and can be left in place for successive calls with different right-hand sides b. This routine takes // into account the possibility that b will begin with many zero elements, so it is efficient for use // in matrix inversion -{ - int i,ii=-1,ip,j; + int i,ii = -1,ip,j; float sum; - for (i=0;i=0) - for (j=ii;j= 0 ) { + for ( j = ii; j < i; j++ ) sum -= a[i][j] * b[j]; + } + else if ( sum ) { + ii = i; + } + b[i] = sum; } - for (i=n-1;i>=0;i--) { - sum=b[i]; - for (j=i+1;j= 0; i-- ) { + sum = b[i]; + for ( j = i + 1; j < n; j++ ) sum -= a[i][j] * b[j]; + b[i] = sum / a[i][i]; } } /* (C) Copr. 1986-92 Numerical Recipes Software */ -int ludcmp(float **a, int n, int *indx, float *d) +int ludcmp( float **a, int n, int *indx, float *d ){ // given a matrix a[n][n] this routine replaces it with the LU decomposition of a rowwise // permutation of itself. a and n are input. a is output, arranged as in above equation; // indx[n] is an output vector that records the row permutation effected by the partial // pivoting; d is output as +/-1 depending on whether the number of row interchanges was even // or odd, respectively. This routine is used in combination with lubksb to solve linear // equations or invert a matrix. -{ int i,imax,j,k; float big,dum,sum,temp; float *vv; imax = 0; - vv=(float*)malloc(sizeof(float)*n); - *d=1.0; - for (i=0;i big) big=temp; - if (big == 0.0) return 1; - vv[i]=1.0f/big; + vv = (float*)malloc( sizeof( float ) * n ); + *d = 1.0; + for ( i = 0; i < n; i++ ) { + big = 0.0; + for ( j = 0; j < n; j++ ) + if ( ( temp = (float)fabs( a[i][j] ) ) > big ) { + big = temp; + } + if ( big == 0.0 ) { + return 1; + } + vv[i] = 1.0f / big; } - for (j=0;j= big) { - big=dum; - imax=i; + big = 0.0; + for ( i = j; i < n; i++ ) { + sum = a[i][j]; + for ( k = 0; k < j; k++ ) + sum -= a[i][k] * a[k][j]; + a[i][j] = sum; + if ( ( dum = vv[i] * (float)fabs( sum ) ) >= big ) { + big = dum; + imax = i; } } - if (j != imax) { - for (k=0;k i ) - idst = ti-1; - - for ( tj = 0; tj < 4; tj++ ) - { - if ( tj < j ) - jdst = tj; - else - if ( tj > j ) - jdst = tj-1; - - if ( ti != i && tj != j ) - mb[idst*3 + jdst] = mr[ti*4 + tj ]; - } - } + for ( ti = 0; ti < 4; ti++ ) + { + if ( ti < i ) { + idst = ti; + } + else + if ( ti > i ) { + idst = ti - 1; + } + + for ( tj = 0; tj < 4; tj++ ) + { + if ( tj < j ) { + jdst = tj; + } + else + if ( tj > j ) { + jdst = tj - 1; + } + + if ( ti != i && tj != j ) { + mb[idst * 3 + jdst] = mr[ti * 4 + tj ]; + } + } + } } -float m4_det( m4x4_t mr ) -{ - float det, result = 0, i = 1; - m3x3_t msub3; - int n; +float m4_det( m4x4_t mr ){ + float det, result = 0, i = 1; + m3x3_t msub3; + int n; - for ( n = 0; n < 4; n++, i *= -1 ) - { - m4_submat( mr, msub3, 0, n ); + for ( n = 0; n < 4; n++, i *= -1 ) + { + m4_submat( mr, msub3, 0, n ); - det = m3_det( msub3 ); - result += mr[n] * det * i; - } + det = m3_det( msub3 ); + result += mr[n] * det * i; + } - return result; + return result; } -int m4x4_invert(m4x4_t matrix) -{ - float mdet = m4_det( matrix ); - m3x3_t mtemp; - int i, j, sign; - m4x4_t m4x4_temp; +int m4x4_invert( m4x4_t matrix ){ + float mdet = m4_det( matrix ); + m3x3_t mtemp; + int i, j, sign; + m4x4_t m4x4_temp; - if ( fabs( mdet ) < 0.0000000001 ) //% 0.0005 - return 1; + if ( fabs( mdet ) < 0.0000000001 ) { //% 0.0005 + return 1; + } - memcpy(m4x4_temp, matrix, sizeof(m4x4_t)); + memcpy( m4x4_temp, matrix, sizeof( m4x4_t ) ); - for ( i = 0; i < 4; i++ ) - for ( j = 0; j < 4; j++ ) - { - sign = 1 - ( (i +j) % 2 ) * 2; + for ( i = 0; i < 4; i++ ) + for ( j = 0; j < 4; j++ ) + { + sign = 1 - ( ( i + j ) % 2 ) * 2; - m4_submat( m4x4_temp, mtemp, i, j ); + m4_submat( m4x4_temp, mtemp, i, j ); - matrix[i+j*4] = ( m3_det( mtemp ) * sign ) / mdet; - } + matrix[i + j * 4] = ( m3_det( mtemp ) * sign ) / mdet; + } - return 0; + return 0; } diff --git a/libs/mathlib/mathlib.c b/libs/mathlib/mathlib.c index 83555254..e422877c 100644 --- a/libs/mathlib/mathlib.c +++ b/libs/mathlib/mathlib.c @@ -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-2007 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 + */ // mathlib.c -- math primitives #include "mathlib.h" @@ -27,25 +27,22 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA vec3_t vec3_origin = {0.0f,0.0f,0.0f}; /* -================ -VectorIsOnAxis -================ -*/ -qboolean VectorIsOnAxis(vec3_t v) -{ - int i, zeroComponentCount; + ================ + VectorIsOnAxis + ================ + */ +qboolean VectorIsOnAxis( vec3_t v ){ + int i, zeroComponentCount; zeroComponentCount = 0; - for (i = 0; i < 3; i++) + for ( i = 0; i < 3; i++ ) { - if (v[i] == 0.0) - { + if ( v[i] == 0.0 ) { zeroComponentCount++; } } - if (zeroComponentCount > 1) - { + if ( zeroComponentCount > 1 ) { // The zero vector will be on axis. return qtrue; } @@ -54,18 +51,16 @@ qboolean VectorIsOnAxis(vec3_t v) } /* -================ -VectorIsOnAxialPlane -================ -*/ -qboolean VectorIsOnAxialPlane(vec3_t v) -{ - int i; + ================ + VectorIsOnAxialPlane + ================ + */ +qboolean VectorIsOnAxialPlane( vec3_t v ){ + int i; - for (i = 0; i < 3; i++) + for ( i = 0; i < 3; i++ ) { - if (v[i] == 0.0) - { + if ( v[i] == 0.0 ) { // The zero vector will be on axial plane. return qtrue; } @@ -75,16 +70,15 @@ qboolean VectorIsOnAxialPlane(vec3_t v) } /* -================ -MakeNormalVectors - -Given a normalized forward vector, create two -other perpendicular vectors -================ -*/ -void MakeNormalVectors (vec3_t forward, vec3_t right, vec3_t up) -{ - float d; + ================ + MakeNormalVectors + + Given a normalized forward vector, create two + other perpendicular vectors + ================ + */ +void MakeNormalVectors( vec3_t forward, vec3_t right, vec3_t up ){ + float d; // this rotate and negate guarantees a vector // not colinear with the original @@ -92,83 +86,76 @@ void MakeNormalVectors (vec3_t forward, vec3_t right, vec3_t up) right[2] = forward[1]; right[0] = forward[2]; - d = DotProduct (right, forward); - VectorMA (right, -d, forward, right); - VectorNormalize (right, right); - CrossProduct (right, forward, up); + d = DotProduct( right, forward ); + VectorMA( right, -d, forward, right ); + VectorNormalize( right, right ); + CrossProduct( right, forward, up ); } -vec_t VectorLength(vec3_t v) -{ - int i; - float length; - +vec_t VectorLength( vec3_t v ){ + int i; + float length; + length = 0.0f; - for (i=0 ; i< 3 ; i++) - length += v[i]*v[i]; - length = (float)sqrt (length); + for ( i = 0 ; i < 3 ; i++ ) + length += v[i] * v[i]; + length = (float)sqrt( length ); return length; } -qboolean VectorCompare (vec3_t v1, vec3_t v2) -{ - int i; - - for (i=0 ; i<3 ; i++) - if (fabs(v1[i]-v2[i]) > EQUAL_EPSILON) +qboolean VectorCompare( vec3_t v1, vec3_t v2 ){ + int i; + + for ( i = 0 ; i < 3 ; i++ ) + if ( fabs( v1[i] - v2[i] ) > EQUAL_EPSILON ) { return qfalse; - + } + return qtrue; } /* -// FIXME TTimo this implementation has to be particular to radiant -// through another name I'd say -vec_t Q_rint (vec_t in) -{ - if (g_PrefsDlg.m_bNoClamp) + // FIXME TTimo this implementation has to be particular to radiant + // through another name I'd say + vec_t Q_rint (vec_t in) + { + if (g_PrefsDlg.m_bNoClamp) return in; - else + else return (float)floor (in + 0.5); -} -*/ + } + */ -void VectorMA( const vec3_t va, vec_t scale, const vec3_t vb, vec3_t vc ) -{ - vc[0] = va[0] + scale*vb[0]; - vc[1] = va[1] + scale*vb[1]; - vc[2] = va[2] + scale*vb[2]; +void VectorMA( const vec3_t va, vec_t scale, const vec3_t vb, vec3_t vc ){ + vc[0] = va[0] + scale * vb[0]; + vc[1] = va[1] + scale * vb[1]; + vc[2] = va[2] + scale * vb[2]; } -void _CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross) -{ - cross[0] = v1[1]*v2[2] - v1[2]*v2[1]; - cross[1] = v1[2]*v2[0] - v1[0]*v2[2]; - cross[2] = v1[0]*v2[1] - v1[1]*v2[0]; +void _CrossProduct( vec3_t v1, vec3_t v2, vec3_t cross ){ + cross[0] = v1[1] * v2[2] - v1[2] * v2[1]; + cross[1] = v1[2] * v2[0] - v1[0] * v2[2]; + cross[2] = v1[0] * v2[1] - v1[1] * v2[0]; } -vec_t _DotProduct (vec3_t v1, vec3_t v2) -{ - return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; +vec_t _DotProduct( vec3_t v1, vec3_t v2 ){ + return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; } -void _VectorSubtract (vec3_t va, vec3_t vb, vec3_t out) -{ - out[0] = va[0]-vb[0]; - out[1] = va[1]-vb[1]; - out[2] = va[2]-vb[2]; +void _VectorSubtract( vec3_t va, vec3_t vb, vec3_t out ){ + out[0] = va[0] - vb[0]; + out[1] = va[1] - vb[1]; + out[2] = va[2] - vb[2]; } -void _VectorAdd (vec3_t va, vec3_t vb, vec3_t out) -{ - out[0] = va[0]+vb[0]; - out[1] = va[1]+vb[1]; - out[2] = va[2]+vb[2]; +void _VectorAdd( vec3_t va, vec3_t vb, vec3_t out ){ + out[0] = va[0] + vb[0]; + out[1] = va[1] + vb[1]; + out[2] = va[2] + vb[2]; } -void _VectorCopy (vec3_t in, vec3_t out) -{ +void _VectorCopy( vec3_t in, vec3_t out ){ out[0] = in[0]; out[1] = in[1]; out[2] = in[2]; @@ -183,40 +170,38 @@ vec_t VectorNormalize( const vec3_t in, vec3_t out ) { // I don't see a reason why using a double outright (instead of using the // vec_accu_t alias for example) could possibly be frowned upon. - double x, y, z, length; + double x, y, z, length; x = (double) in[0]; y = (double) in[1]; z = (double) in[2]; - length = sqrt((x * x) + (y * y) + (z * z)); - if (length == 0) - { - VectorClear (out); + length = sqrt( ( x * x ) + ( y * y ) + ( z * z ) ); + if ( length == 0 ) { + VectorClear( out ); return 0; } - out[0] = (vec_t) (x / length); - out[1] = (vec_t) (y / length); - out[2] = (vec_t) (z / length); + out[0] = (vec_t) ( x / length ); + out[1] = (vec_t) ( y / length ); + out[2] = (vec_t) ( z / length ); return (vec_t) length; #else - vec_t length, ilength; + vec_t length, ilength; - length = (vec_t)sqrt (in[0]*in[0] + in[1]*in[1] + in[2]*in[2]); - if (length == 0) - { - VectorClear (out); + length = (vec_t)sqrt( in[0] * in[0] + in[1] * in[1] + in[2] * in[2] ); + if ( length == 0 ) { + VectorClear( out ); return 0; } - ilength = 1.0f/length; - out[0] = in[0]*ilength; - out[1] = in[1]*ilength; - out[2] = in[2]*ilength; + ilength = 1.0f / length; + out[0] = in[0] * ilength; + out[1] = in[1] * ilength; + out[2] = in[2] * ilength; return length; @@ -225,123 +210,115 @@ vec_t VectorNormalize( const vec3_t in, vec3_t out ) { } vec_t ColorNormalize( const vec3_t in, vec3_t out ) { - float max, scale; + float max, scale; max = in[0]; - if (in[1] > max) + if ( in[1] > max ) { max = in[1]; - if (in[2] > max) + } + if ( in[2] > max ) { max = in[2]; + } - if (max == 0) { + if ( max == 0 ) { out[0] = out[1] = out[2] = 1.0; return 0; } scale = 1.0f / max; - VectorScale (in, scale, out); + VectorScale( in, scale, out ); return max; } -void VectorInverse (vec3_t v) -{ +void VectorInverse( vec3_t v ){ v[0] = -v[0]; v[1] = -v[1]; v[2] = -v[2]; } /* -void VectorScale (vec3_t v, vec_t scale, vec3_t out) -{ - out[0] = v[0] * scale; - out[1] = v[1] * scale; - out[2] = v[2] * scale; + void VectorScale (vec3_t v, vec_t scale, vec3_t out) + { + out[0] = v[0] * scale; + out[1] = v[1] * scale; + out[2] = v[2] * scale; + } + */ + +void VectorRotate( vec3_t vIn, vec3_t vRotation, vec3_t out ){ + vec3_t vWork, va; + int nIndex[3][2]; + int i; + + VectorCopy( vIn, va ); + VectorCopy( va, vWork ); + nIndex[0][0] = 1; nIndex[0][1] = 2; + nIndex[1][0] = 2; nIndex[1][1] = 0; + nIndex[2][0] = 0; nIndex[2][1] = 1; + + for ( i = 0; i < 3; i++ ) + { + if ( vRotation[i] != 0 ) { + float dAngle = vRotation[i] * Q_PI / 180.0f; + float c = (vec_t)cos( dAngle ); + float s = (vec_t)sin( dAngle ); + vWork[nIndex[i][0]] = va[nIndex[i][0]] * c - va[nIndex[i][1]] * s; + vWork[nIndex[i][1]] = va[nIndex[i][0]] * s + va[nIndex[i][1]] * c; + } + VectorCopy( vWork, va ); + } + VectorCopy( vWork, out ); } -*/ -void VectorRotate (vec3_t vIn, vec3_t vRotation, vec3_t out) -{ - vec3_t vWork, va; - int nIndex[3][2]; - int i; - - VectorCopy(vIn, va); - VectorCopy(va, vWork); - nIndex[0][0] = 1; nIndex[0][1] = 2; - nIndex[1][0] = 2; nIndex[1][1] = 0; - nIndex[2][0] = 0; nIndex[2][1] = 1; - - for (i = 0; i < 3; i++) - { - if (vRotation[i] != 0) - { - float dAngle = vRotation[i] * Q_PI / 180.0f; - float c = (vec_t)cos(dAngle); - float s = (vec_t)sin(dAngle); - vWork[nIndex[i][0]] = va[nIndex[i][0]] * c - va[nIndex[i][1]] * s; - vWork[nIndex[i][1]] = va[nIndex[i][0]] * s + va[nIndex[i][1]] * c; - } - VectorCopy(vWork, va); - } - VectorCopy(vWork, out); -} - -void VectorRotateOrigin (vec3_t vIn, vec3_t vRotation, vec3_t vOrigin, vec3_t out) -{ - vec3_t vTemp, vTemp2; - - VectorSubtract(vIn, vOrigin, vTemp); - VectorRotate(vTemp, vRotation, vTemp2); - VectorAdd(vTemp2, vOrigin, out); -} - -void VectorPolar(vec3_t v, float radius, float theta, float phi) -{ - v[0]=(float)(radius * cos(theta) * cos(phi)); - v[1]=(float)(radius * sin(theta) * cos(phi)); - v[2]=(float)(radius * sin(phi)); -} - -void VectorSnap(vec3_t v) -{ - int i; - for (i = 0; i < 3; i++) - { - v[i] = (vec_t)floor (v[i] + 0.5); - } -} - -void VectorISnap(vec3_t point, int snap) -{ - int i; - for (i = 0 ;i < 3 ; i++) +void VectorRotateOrigin( vec3_t vIn, vec3_t vRotation, vec3_t vOrigin, vec3_t out ){ + vec3_t vTemp, vTemp2; + + VectorSubtract( vIn, vOrigin, vTemp ); + VectorRotate( vTemp, vRotation, vTemp2 ); + VectorAdd( vTemp2, vOrigin, out ); +} + +void VectorPolar( vec3_t v, float radius, float theta, float phi ){ + v[0] = (float)( radius * cos( theta ) * cos( phi ) ); + v[1] = (float)( radius * sin( theta ) * cos( phi ) ); + v[2] = (float)( radius * sin( phi ) ); +} + +void VectorSnap( vec3_t v ){ + int i; + for ( i = 0; i < 3; i++ ) { - point[i] = (vec_t)floor (point[i] / snap + 0.5) * snap; + v[i] = (vec_t)floor( v[i] + 0.5 ); } } -void VectorFSnap(vec3_t point, float snap) -{ - int i; - for (i = 0 ;i < 3 ; i++) +void VectorISnap( vec3_t point, int snap ){ + int i; + for ( i = 0 ; i < 3 ; i++ ) { - point[i] = (vec_t)floor (point[i] / snap + 0.5) * snap; + point[i] = (vec_t)floor( point[i] / snap + 0.5 ) * snap; } } -void _Vector5Add (vec5_t va, vec5_t vb, vec5_t out) -{ - out[0] = va[0]+vb[0]; - out[1] = va[1]+vb[1]; - out[2] = va[2]+vb[2]; - out[3] = va[3]+vb[3]; - out[4] = va[4]+vb[4]; +void VectorFSnap( vec3_t point, float snap ){ + int i; + for ( i = 0 ; i < 3 ; i++ ) + { + point[i] = (vec_t)floor( point[i] / snap + 0.5 ) * snap; + } } -void _Vector5Scale (vec5_t v, vec_t scale, vec5_t out) -{ +void _Vector5Add( vec5_t va, vec5_t vb, vec5_t out ){ + out[0] = va[0] + vb[0]; + out[1] = va[1] + vb[1]; + out[2] = va[2] + vb[2]; + out[3] = va[3] + vb[3]; + out[4] = va[4] + vb[4]; +} + +void _Vector5Scale( vec5_t v, vec_t scale, vec5_t out ){ out[0] = v[0] * scale; out[1] = v[1] * scale; out[2] = v[2] * scale; @@ -349,88 +326,80 @@ void _Vector5Scale (vec5_t v, vec_t scale, vec5_t out) out[4] = v[4] * scale; } -void _Vector53Copy (vec5_t in, vec3_t out) -{ +void _Vector53Copy( vec5_t in, vec3_t out ){ out[0] = in[0]; out[1] = in[1]; out[2] = in[2]; } // NOTE: added these from Ritual's Q3Radiant -void ClearBounds (vec3_t mins, vec3_t maxs) -{ +void ClearBounds( vec3_t mins, vec3_t maxs ){ mins[0] = mins[1] = mins[2] = 99999; maxs[0] = maxs[1] = maxs[2] = -99999; } -void AddPointToBounds (vec3_t v, vec3_t mins, vec3_t maxs) -{ - int i; - vec_t val; - - for (i=0 ; i<3 ; i++) +void AddPointToBounds( vec3_t v, vec3_t mins, vec3_t maxs ){ + int i; + vec_t val; + + for ( i = 0 ; i < 3 ; i++ ) { val = v[i]; - if (val < mins[i]) + if ( val < mins[i] ) { mins[i] = val; - if (val > maxs[i]) + } + if ( val > maxs[i] ) { maxs[i] = val; + } } } -#define PITCH 0 // up / down -#define YAW 1 // left / right -#define ROLL 2 // fall over +#define PITCH 0 // up / down +#define YAW 1 // left / right +#define ROLL 2 // fall over #ifndef M_PI -#define M_PI 3.14159265358979323846f // matches value in gcc v2 math.h +#define M_PI 3.14159265358979323846f // matches value in gcc v2 math.h #endif -void AngleVectors (vec3_t angles, vec3_t forward, vec3_t right, vec3_t up) -{ - float angle; - static float sr, sp, sy, cr, cp, cy; +void AngleVectors( vec3_t angles, vec3_t forward, vec3_t right, vec3_t up ){ + float angle; + static float sr, sp, sy, cr, cp, cy; // static to help MS compiler fp bugs - - angle = angles[YAW] * (M_PI*2.0f / 360.0f); - sy = (vec_t)sin(angle); - cy = (vec_t)cos(angle); - angle = angles[PITCH] * (M_PI*2.0f / 360.0f); - sp = (vec_t)sin(angle); - cp = (vec_t)cos(angle); - angle = angles[ROLL] * (M_PI*2.0f / 360.0f); - sr = (vec_t)sin(angle); - cr = (vec_t)cos(angle); - - if (forward) - { - forward[0] = cp*cy; - forward[1] = cp*sy; + + angle = angles[YAW] * ( M_PI * 2.0f / 360.0f ); + sy = (vec_t)sin( angle ); + cy = (vec_t)cos( angle ); + angle = angles[PITCH] * ( M_PI * 2.0f / 360.0f ); + sp = (vec_t)sin( angle ); + cp = (vec_t)cos( angle ); + angle = angles[ROLL] * ( M_PI * 2.0f / 360.0f ); + sr = (vec_t)sin( angle ); + cr = (vec_t)cos( angle ); + + if ( forward ) { + forward[0] = cp * cy; + forward[1] = cp * sy; forward[2] = -sp; } - if (right) - { - right[0] = -sr*sp*cy+cr*sy; - right[1] = -sr*sp*sy-cr*cy; - right[2] = -sr*cp; + if ( right ) { + right[0] = -sr * sp * cy + cr * sy; + right[1] = -sr * sp * sy - cr * cy; + right[2] = -sr * cp; } - if (up) - { - up[0] = cr*sp*cy+sr*sy; - up[1] = cr*sp*sy-sr*cy; - up[2] = cr*cp; + if ( up ) { + up[0] = cr * sp * cy + sr * sy; + up[1] = cr * sp * sy - sr * cy; + up[2] = cr * cp; } } -void VectorToAngles( vec3_t vec, vec3_t angles ) -{ +void VectorToAngles( vec3_t vec, vec3_t angles ){ float forward; float yaw, pitch; - - if ( ( vec[ 0 ] == 0 ) && ( vec[ 1 ] == 0 ) ) - { + + if ( ( vec[ 0 ] == 0 ) && ( vec[ 1 ] == 0 ) ) { yaw = 0; - if ( vec[ 2 ] > 0 ) - { + if ( vec[ 2 ] > 0 ) { pitch = 90; } else @@ -441,34 +410,32 @@ void VectorToAngles( vec3_t vec, vec3_t angles ) else { yaw = (vec_t)atan2( vec[ 1 ], vec[ 0 ] ) * 180 / M_PI; - if ( yaw < 0 ) - { + if ( yaw < 0 ) { yaw += 360; } - + forward = ( float )sqrt( vec[ 0 ] * vec[ 0 ] + vec[ 1 ] * vec[ 1 ] ); pitch = (vec_t)atan2( vec[ 2 ], forward ) * 180 / M_PI; - if ( pitch < 0 ) - { + if ( pitch < 0 ) { pitch += 360; } } - + angles[ 0 ] = pitch; angles[ 1 ] = yaw; angles[ 2 ] = 0; } /* -===================== -PlaneFromPoints + ===================== + PlaneFromPoints -Returns false if the triangle is degenrate. -The normal will point out of the clock for clockwise ordered points -===================== -*/ + Returns false if the triangle is degenrate. + The normal will point out of the clock for clockwise ordered points + ===================== + */ qboolean PlaneFromPoints( vec4_t plane, const vec3_t a, const vec3_t b, const vec3_t c ) { - vec3_t d1, d2; + vec3_t d1, d2; VectorSubtract( b, a, d1 ); VectorSubtract( c, a, d2 ); @@ -494,47 +461,52 @@ void NormalToLatLong( const vec3_t normal, byte bytes[2] ) { if ( normal[0] == 0 && normal[1] == 0 ) { if ( normal[2] > 0 ) { bytes[0] = 0; - bytes[1] = 0; // lat = 0, long = 0 - } else { + bytes[1] = 0; // lat = 0, long = 0 + } + else { bytes[0] = 128; - bytes[1] = 0; // lat = 0, long = 128 + bytes[1] = 0; // lat = 0, long = 128 } - } else { - int a, b; + } + else { + int a, b; - a = (int)( RAD2DEG( atan2( normal[1], normal[0] ) ) * (255.0f / 360.0f ) ); + a = (int)( RAD2DEG( atan2( normal[1], normal[0] ) ) * ( 255.0f / 360.0f ) ); a &= 0xff; b = (int)( RAD2DEG( acos( normal[2] ) ) * ( 255.0f / 360.0f ) ); b &= 0xff; - bytes[0] = b; // longitude - bytes[1] = a; // lattitude + bytes[0] = b; // longitude + bytes[1] = a; // lattitude } } /* -================= -PlaneTypeForNormal -================= -*/ -int PlaneTypeForNormal (vec3_t normal) { - if (normal[0] == 1.0 || normal[0] == -1.0) + ================= + PlaneTypeForNormal + ================= + */ +int PlaneTypeForNormal( vec3_t normal ) { + if ( normal[0] == 1.0 || normal[0] == -1.0 ) { return PLANE_X; - if (normal[1] == 1.0 || normal[1] == -1.0) + } + if ( normal[1] == 1.0 || normal[1] == -1.0 ) { return PLANE_Y; - if (normal[2] == 1.0 || normal[2] == -1.0) + } + if ( normal[2] == 1.0 || normal[2] == -1.0 ) { return PLANE_Z; - + } + return PLANE_NON_AXIAL; } /* -================ -MatrixMultiply -================ -*/ -void MatrixMultiply(float in1[3][3], float in2[3][3], float out[3][3]) { + ================ + MatrixMultiply + ================ + */ +void MatrixMultiply( float in1[3][3], float in2[3][3], float out[3][3] ) { out[0][0] = in1[0][0] * in2[0][0] + in1[0][1] * in2[1][0] + in1[0][2] * in2[2][0]; out[0][1] = in1[0][0] * in2[0][1] + in1[0][1] * in2[1][1] + @@ -555,8 +527,7 @@ void MatrixMultiply(float in1[3][3], float in2[3][3], float out[3][3]) { in1[2][2] * in2[2][2]; } -void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal ) -{ +void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal ){ float d; vec3_t n; float inv_denom; @@ -577,9 +548,8 @@ void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal ) /* ** assumes "src" is normalized */ -void PerpendicularVector( vec3_t dst, const vec3_t src ) -{ - int pos; +void PerpendicularVector( vec3_t dst, const vec3_t src ){ + int pos; int i; vec_t minelem = 1.0F; vec3_t tempvec; @@ -589,8 +559,7 @@ void PerpendicularVector( vec3_t dst, const vec3_t src ) */ for ( pos = 0, i = 0; i < 3; i++ ) { - if ( fabs( src[i] ) < minelem ) - { + if ( fabs( src[i] ) < minelem ) { pos = i; minelem = (vec_t)fabs( src[i] ); } @@ -610,22 +579,22 @@ void PerpendicularVector( vec3_t dst, const vec3_t src ) } /* -=============== -RotatePointAroundVector + =============== + RotatePointAroundVector -This is not implemented very well... -=============== -*/ + This is not implemented very well... + =============== + */ void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, - float degrees ) { - float m[3][3]; - float im[3][3]; - float zrot[3][3]; - float tmpmat[3][3]; - float rot[3][3]; - int i; + float degrees ) { + float m[3][3]; + float im[3][3]; + float zrot[3][3]; + float tmpmat[3][3]; + float rot[3][3]; + int i; vec3_t vr, vup, vf; - float rad; + float rad; vf[0] = dir[0]; vf[1] = dir[1]; @@ -681,137 +650,125 @@ void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, //////////////////////////////////////////////////////////////////////////////// /* -================= -VectorLengthAccu -================= -*/ -vec_accu_t VectorLengthAccu(const vec3_accu_t v) -{ - return (vec_accu_t) sqrt((v[0] * v[0]) + (v[1] * v[1]) + (v[2] * v[2])); + ================= + VectorLengthAccu + ================= + */ +vec_accu_t VectorLengthAccu( const vec3_accu_t v ){ + return (vec_accu_t) sqrt( ( v[0] * v[0] ) + ( v[1] * v[1] ) + ( v[2] * v[2] ) ); } /* -================= -DotProductAccu -================= -*/ -vec_accu_t DotProductAccu(const vec3_accu_t a, const vec3_accu_t b) -{ - return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]); + ================= + DotProductAccu + ================= + */ +vec_accu_t DotProductAccu( const vec3_accu_t a, const vec3_accu_t b ){ + return ( a[0] * b[0] ) + ( a[1] * b[1] ) + ( a[2] * b[2] ); } /* -================= -VectorSubtractAccu -================= -*/ -void VectorSubtractAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out) -{ + ================= + VectorSubtractAccu + ================= + */ +void VectorSubtractAccu( const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out ){ out[0] = a[0] - b[0]; out[1] = a[1] - b[1]; out[2] = a[2] - b[2]; } /* -================= -VectorAddAccu -================= -*/ -void VectorAddAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out) -{ + ================= + VectorAddAccu + ================= + */ +void VectorAddAccu( const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out ){ out[0] = a[0] + b[0]; out[1] = a[1] + b[1]; out[2] = a[2] + b[2]; } /* -================= -VectorCopyAccu -================= -*/ -void VectorCopyAccu(const vec3_accu_t in, vec3_accu_t out) -{ + ================= + VectorCopyAccu + ================= + */ +void VectorCopyAccu( const vec3_accu_t in, vec3_accu_t out ){ out[0] = in[0]; out[1] = in[1]; out[2] = in[2]; } /* -================= -VectorScaleAccu -================= -*/ -void VectorScaleAccu(const vec3_accu_t in, vec_accu_t scaleFactor, vec3_accu_t out) -{ + ================= + VectorScaleAccu + ================= + */ +void VectorScaleAccu( const vec3_accu_t in, vec_accu_t scaleFactor, vec3_accu_t out ){ out[0] = in[0] * scaleFactor; out[1] = in[1] * scaleFactor; out[2] = in[2] * scaleFactor; } /* -================= -CrossProductAccu -================= -*/ -void CrossProductAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out) -{ - out[0] = (a[1] * b[2]) - (a[2] * b[1]); - out[1] = (a[2] * b[0]) - (a[0] * b[2]); - out[2] = (a[0] * b[1]) - (a[1] * b[0]); + ================= + CrossProductAccu + ================= + */ +void CrossProductAccu( const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out ){ + out[0] = ( a[1] * b[2] ) - ( a[2] * b[1] ); + out[1] = ( a[2] * b[0] ) - ( a[0] * b[2] ); + out[2] = ( a[0] * b[1] ) - ( a[1] * b[0] ); } /* -================= -Q_rintAccu -================= -*/ -vec_accu_t Q_rintAccu(vec_accu_t val) -{ - return (vec_accu_t) floor(val + 0.5); + ================= + Q_rintAccu + ================= + */ +vec_accu_t Q_rintAccu( vec_accu_t val ){ + return (vec_accu_t) floor( val + 0.5 ); } /* -================= -VectorCopyAccuToRegular -================= -*/ -void VectorCopyAccuToRegular(const vec3_accu_t in, vec3_t out) -{ + ================= + VectorCopyAccuToRegular + ================= + */ +void VectorCopyAccuToRegular( const vec3_accu_t in, vec3_t out ){ out[0] = (vec_t) in[0]; out[1] = (vec_t) in[1]; out[2] = (vec_t) in[2]; } /* -================= -VectorCopyRegularToAccu -================= -*/ -void VectorCopyRegularToAccu(const vec3_t in, vec3_accu_t out) -{ + ================= + VectorCopyRegularToAccu + ================= + */ +void VectorCopyRegularToAccu( const vec3_t in, vec3_accu_t out ){ out[0] = (vec_accu_t) in[0]; out[1] = (vec_accu_t) in[1]; out[2] = (vec_accu_t) in[2]; } /* -================= -VectorNormalizeAccu -================= -*/ -vec_accu_t VectorNormalizeAccu(const vec3_accu_t in, vec3_accu_t out) -{ + ================= + VectorNormalizeAccu + ================= + */ +vec_accu_t VectorNormalizeAccu( const vec3_accu_t in, vec3_accu_t out ){ // The sqrt() function takes double as an input and returns double as an // output according the the man pages on Debian and on FreeBSD. Therefore, // I don't see a reason why using a double outright (instead of using the // vec_accu_t alias for example) could possibly be frowned upon. - vec_accu_t length; + vec_accu_t length; - length = (vec_accu_t) sqrt((in[0] * in[0]) + (in[1] * in[1]) + (in[2] * in[2])); - if (length == 0) - { - VectorClear(out); + length = (vec_accu_t) sqrt( ( in[0] * in[0] ) + ( in[1] * in[1] ) + ( in[2] * in[2] ) ); + if ( length == 0 ) { + VectorClear( out ); return 0; } diff --git a/libs/mathlib/ray.c b/libs/mathlib/ray.c index cfe4bfd4..79f87278 100644 --- a/libs/mathlib/ray.c +++ b/libs/mathlib/ray.c @@ -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-2007 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 "mathlib.h" /*! for memcpy */ @@ -25,111 +25,116 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA vec3_t identity = { 0,0,0 }; -void ray_construct_for_vec3(ray_t *ray, const vec3_t origin, const vec3_t direction) -{ - VectorCopy(origin, ray->origin); - VectorCopy(direction, ray->direction); +void ray_construct_for_vec3( ray_t *ray, const vec3_t origin, const vec3_t direction ){ + VectorCopy( origin, ray->origin ); + VectorCopy( direction, ray->direction ); } - -void ray_transform(ray_t *ray, const m4x4_t matrix) -{ - m4x4_transform_point(matrix, ray->origin); - m4x4_transform_normal(matrix, ray->direction); + +void ray_transform( ray_t *ray, const m4x4_t matrix ){ + m4x4_transform_point( matrix, ray->origin ); + m4x4_transform_normal( matrix, ray->direction ); } -vec_t ray_intersect_point(const ray_t *ray, const vec3_t point, vec_t epsilon, vec_t divergence) -{ - vec3_t displacement; - vec_t depth; - - // calc displacement of test point from ray origin - VectorSubtract(point, ray->origin, displacement); - // calc length of displacement vector along ray direction - depth = DotProduct(displacement, ray->direction); - if(depth < 0.0f) return (vec_t)VEC_MAX; - // calc position of closest point on ray to test point - VectorMA (ray->origin, depth, ray->direction, displacement); - // calc displacement of test point from closest point - VectorSubtract(point, displacement, displacement); - // calc length of displacement, subtract depth-dependant epsilon - if (VectorLength(displacement) - (epsilon + (depth * divergence)) > 0.0f) return (vec_t)VEC_MAX; - return depth; +vec_t ray_intersect_point( const ray_t *ray, const vec3_t point, vec_t epsilon, vec_t divergence ){ + vec3_t displacement; + vec_t depth; + + // calc displacement of test point from ray origin + VectorSubtract( point, ray->origin, displacement ); + // calc length of displacement vector along ray direction + depth = DotProduct( displacement, ray->direction ); + if ( depth < 0.0f ) { + return (vec_t)VEC_MAX; + } + // calc position of closest point on ray to test point + VectorMA( ray->origin, depth, ray->direction, displacement ); + // calc displacement of test point from closest point + VectorSubtract( point, displacement, displacement ); + // calc length of displacement, subtract depth-dependant epsilon + if ( VectorLength( displacement ) - ( epsilon + ( depth * divergence ) ) > 0.0f ) { + return (vec_t)VEC_MAX; + } + return depth; } // Tomas Moller and Ben Trumbore. Fast, minimum storage ray-triangle intersection. Journal of graphics tools, 2(1):21-28, 1997 #define EPSILON 0.000001 -vec_t ray_intersect_triangle(const ray_t *ray, qboolean bCullBack, const vec3_t vert0, const vec3_t vert1, const vec3_t vert2) -{ - float edge1[3], edge2[3], tvec[3], pvec[3], qvec[3]; - float det,inv_det; - float u, v; - vec_t depth = (vec_t)VEC_MAX; - - /* find vectors for two edges sharing vert0 */ - VectorSubtract(vert1, vert0, edge1); - VectorSubtract(vert2, vert0, edge2); - - /* begin calculating determinant - also used to calculate U parameter */ - CrossProduct(ray->direction, edge2, pvec); - - /* if determinant is near zero, ray lies in plane of triangle */ - det = DotProduct(edge1, pvec); - - if (bCullBack == qtrue) - { - if (det < EPSILON) - return depth; - - // calculate distance from vert0 to ray origin - VectorSubtract(ray->origin, vert0, tvec); - - // calculate U parameter and test bounds - u = DotProduct(tvec, pvec); - if (u < 0.0 || u > det) - return depth; - - // prepare to test V parameter - CrossProduct(tvec, edge1, qvec); - - // calculate V parameter and test bounds - v = DotProduct(ray->direction, qvec); - if (v < 0.0 || u + v > det) - return depth; - - // calculate t, scale parameters, ray intersects triangle - depth = DotProduct(edge2, qvec); - inv_det = 1.0f / det; - depth *= inv_det; - //u *= inv_det; - //v *= inv_det; - } - else - { - /* the non-culling branch */ - if (det > -EPSILON && det < EPSILON) - return depth; - inv_det = 1.0f / det; - - /* calculate distance from vert0 to ray origin */ - VectorSubtract(ray->origin, vert0, tvec); - - /* calculate U parameter and test bounds */ - u = DotProduct(tvec, pvec) * inv_det; - if (u < 0.0 || u > 1.0) - return depth; - - /* prepare to test V parameter */ - CrossProduct(tvec, edge1, qvec); - - /* calculate V parameter and test bounds */ - v = DotProduct(ray->direction, qvec) * inv_det; - if (v < 0.0 || u + v > 1.0) - return depth; - - /* calculate t, ray intersects triangle */ - depth = DotProduct(edge2, qvec) * inv_det; - } - return depth; +vec_t ray_intersect_triangle( const ray_t *ray, qboolean bCullBack, const vec3_t vert0, const vec3_t vert1, const vec3_t vert2 ){ + float edge1[3], edge2[3], tvec[3], pvec[3], qvec[3]; + float det,inv_det; + float u, v; + vec_t depth = (vec_t)VEC_MAX; + + /* find vectors for two edges sharing vert0 */ + VectorSubtract( vert1, vert0, edge1 ); + VectorSubtract( vert2, vert0, edge2 ); + + /* begin calculating determinant - also used to calculate U parameter */ + CrossProduct( ray->direction, edge2, pvec ); + + /* if determinant is near zero, ray lies in plane of triangle */ + det = DotProduct( edge1, pvec ); + + if ( bCullBack == qtrue ) { + if ( det < EPSILON ) { + return depth; + } + + // calculate distance from vert0 to ray origin + VectorSubtract( ray->origin, vert0, tvec ); + + // calculate U parameter and test bounds + u = DotProduct( tvec, pvec ); + if ( u < 0.0 || u > det ) { + return depth; + } + + // prepare to test V parameter + CrossProduct( tvec, edge1, qvec ); + + // calculate V parameter and test bounds + v = DotProduct( ray->direction, qvec ); + if ( v < 0.0 || u + v > det ) { + return depth; + } + + // calculate t, scale parameters, ray intersects triangle + depth = DotProduct( edge2, qvec ); + inv_det = 1.0f / det; + depth *= inv_det; + //u *= inv_det; + //v *= inv_det; + } + else + { + /* the non-culling branch */ + if ( det > -EPSILON && det < EPSILON ) { + return depth; + } + inv_det = 1.0f / det; + + /* calculate distance from vert0 to ray origin */ + VectorSubtract( ray->origin, vert0, tvec ); + + /* calculate U parameter and test bounds */ + u = DotProduct( tvec, pvec ) * inv_det; + if ( u < 0.0 || u > 1.0 ) { + return depth; + } + + /* prepare to test V parameter */ + CrossProduct( tvec, edge1, qvec ); + + /* calculate V parameter and test bounds */ + v = DotProduct( ray->direction, qvec ) * inv_det; + if ( v < 0.0 || u + v > 1.0 ) { + return depth; + } + + /* calculate t, ray intersects triangle */ + depth = DotProduct( edge2, qvec ) * inv_det; + } + return depth; } diff --git a/libs/md4lib.h b/libs/md4lib.h index a427af7d..833aba5d 100644 --- a/libs/md4lib.h +++ b/libs/md4lib.h @@ -22,17 +22,17 @@ struct hash_method { /* Number of bytes that must be allocated for result()'s digest */ unsigned int digest_size; - void (*init)(void *context); - void (*loop)(void *context, const void *data, size_t size); - void (*result)(void *context, unsigned char *digest_r); + void ( *init )( void *context ); + void ( *loop )( void *context, const void *data, size_t size ); + void ( *result )( void *context, unsigned char *digest_r ); }; -const struct hash_method *hash_method_lookup(const char *name); +const struct hash_method *hash_method_lookup( const char *name ); /* NULL-terminated list of all hash methods */ extern const struct hash_method *hash_methods[]; -#define MD4_RESULTLEN (128/8) +#define MD4_RESULTLEN ( 128 / 8 ) struct md4_context { uint_fast32_t lo, hi; @@ -41,12 +41,12 @@ struct md4_context { uint_fast32_t block[MD4_RESULTLEN]; }; -void md4_init(struct md4_context *ctx); -void md4_update(struct md4_context *ctx, const void *data, size_t size); -void md4_final(struct md4_context *ctx, unsigned char result[MD4_RESULTLEN]); +void md4_init( struct md4_context *ctx ); +void md4_update( struct md4_context *ctx, const void *data, size_t size ); +void md4_final( struct md4_context *ctx, unsigned char result[MD4_RESULTLEN] ); -void md4_get_digest(const void *data, size_t size, - unsigned char result[MD4_RESULTLEN]); +void md4_get_digest( const void *data, size_t size, + unsigned char result[MD4_RESULTLEN] ); extern const struct hash_method hash_method_md4; diff --git a/libs/md5lib.h b/libs/md5lib.h index d56f0263..eb6adadd 100644 --- a/libs/md5lib.h +++ b/libs/md5lib.h @@ -1,50 +1,50 @@ /* - Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. + Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - 1. The origin of this software must not be misrepresented; you must not + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. + 3. This notice may not be removed or altered from any source distribution. - L. Peter Deutsch - ghost@aladdin.com + L. Peter Deutsch + ghost@aladdin.com */ /* $Id: md5lib.h,v 1.1 2003/07/18 04:24:39 ydnar Exp $ */ /* - Independent implementation of MD5 (RFC 1321). - - This code implements the MD5 Algorithm defined in RFC 1321, whose - text is available at - http://www.ietf.org/rfc/rfc1321.txt - The code is derived from the text of the RFC, including the test suite - (section A.5) but excluding the rest of Appendix A. It does not include - any code or documentation that is identified in the RFC as being - copyrighted. - - The original and principal author of md5.h is L. Peter Deutsch - . Other authors are noted in the change history - that follows (in reverse chronological order): - - 2002-04-13 lpd Removed support for non-ANSI compilers; removed - references to Ghostscript; clarified derivation from RFC 1321; - now handles byte order either statically or dynamically. - 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. - 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); - added conditionalization for C++ compilation from Martin - Purschke . - 1999-05-03 lpd Original version. + Independent implementation of MD5 (RFC 1321). + + This code implements the MD5 Algorithm defined in RFC 1321, whose + text is available at + http://www.ietf.org/rfc/rfc1321.txt + The code is derived from the text of the RFC, including the test suite + (section A.5) but excluding the rest of Appendix A. It does not include + any code or documentation that is identified in the RFC as being + copyrighted. + + The original and principal author of md5.h is L. Peter Deutsch + . Other authors are noted in the change history + that follows (in reverse chronological order): + + 2002-04-13 lpd Removed support for non-ANSI compilers; removed + references to Ghostscript; clarified derivation from RFC 1321; + now handles byte order either statically or dynamically. + 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. + 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); + added conditionalization for C++ compilation from Martin + Purschke . + 1999-05-03 lpd Original version. */ #ifndef md5_INCLUDED @@ -65,24 +65,24 @@ typedef unsigned int md5_word_t; /* 32-bit word */ /* Define the state of the MD5 Algorithm. */ typedef struct md5_state_s { - md5_word_t count[2]; /* message length in bits, lsw first */ - md5_word_t abcd[4]; /* digest buffer */ - md5_byte_t buf[64]; /* accumulate block */ + md5_word_t count[2]; /* message length in bits, lsw first */ + md5_word_t abcd[4]; /* digest buffer */ + md5_byte_t buf[64]; /* accumulate block */ } md5_state_t; #ifdef __cplusplus -extern "C" +extern "C" { #endif /* Initialize the algorithm. */ -void md5_init(md5_state_t *pms); +void md5_init( md5_state_t *pms ); /* Append a string to the message. */ -void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); +void md5_append( md5_state_t *pms, const md5_byte_t *data, int nbytes ); /* Finish the message and return the digest. */ -void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); +void md5_finish( md5_state_t * pms, md5_byte_t digest[16] ); #ifdef __cplusplus } /* end extern "C" */ diff --git a/libs/md5lib/md4.c b/libs/md5lib/md4.c index 2ea36cfd..993ac4df 100644 --- a/libs/md5lib/md4.c +++ b/libs/md5lib/md4.c @@ -23,16 +23,16 @@ /* * The basic MD4 functions. */ -#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) -#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define F( x, y, z ) ( ( z ) ^ ( ( x ) & ( ( y ) ^ ( z ) ) ) ) +#define G( x, y, z ) ( ( ( x ) & ( y ) ) | ( ( x ) & ( z ) ) | ( ( y ) & ( z ) ) ) +#define H( x, y, z ) ( ( x ) ^ ( y ) ^ ( z ) ) /* * The MD4 transformation for all four rounds. */ -#define STEP(f, a, b, c, d, x, s) \ - (a) += f((b), (c), (d)) + (x); \ - (a) = ((a) << (s)) | ((a) >> (32 - (s))) +#define STEP( f, a, b, c, d, x, s ) \ + ( a ) += f( ( b ), ( c ), ( d ) ) + ( x ); \ + ( a ) = ( ( a ) << ( s ) ) | ( ( a ) >> ( 32 - ( s ) ) ) /* @@ -43,28 +43,27 @@ * memory accesses is just an optimization. Nothing will break if it * doesn't work. */ -#if defined(__i386__) || defined(__x86_64__) || defined(__vax__) -#define SET(n) \ - (*(const uint_fast32_t *)&ptr[(n) * 4]) -#define GET(n) \ - SET(n) +#if defined( __i386__ ) || defined( __x86_64__ ) || defined( __vax__ ) +#define SET( n ) \ + ( *(const uint_fast32_t *)&ptr[( n ) * 4] ) +#define GET( n ) \ + SET( n ) #else -#define SET(n) \ - (ctx->block[(n)] = \ - (uint_fast32_t)ptr[(n) * 4] | \ - ((uint_fast32_t)ptr[(n) * 4 + 1] << 8) | \ - ((uint_fast32_t)ptr[(n) * 4 + 2] << 16) | \ - ((uint_fast32_t)ptr[(n) * 4 + 3] << 24)) -#define GET(n) \ - (ctx->block[(n)]) +#define SET( n ) \ + ( ctx->block[( n )] = \ + (uint_fast32_t)ptr[( n ) * 4] | \ + ( (uint_fast32_t)ptr[( n ) * 4 + 1] << 8 ) | \ + ( (uint_fast32_t)ptr[( n ) * 4 + 2] << 16 ) | \ + ( (uint_fast32_t)ptr[( n ) * 4 + 3] << 24 ) ) +#define GET( n ) \ + ( ctx->block[( n )] ) #endif /* * This processes one or more 64-byte data blocks, but does NOT update * the bit counters. There're no alignment requirements. */ -static const void *body(struct md4_context *ctx, const void *data, size_t size) -{ +static const void *body( struct md4_context *ctx, const void *data, size_t size ){ const unsigned char *ptr; uint32_t a, b, c, d; uint32_t saved_a, saved_b, saved_c, saved_d; @@ -83,65 +82,65 @@ static const void *body(struct md4_context *ctx, const void *data, size_t size) saved_d = d; /* Round 1 */ - STEP(F, a, b, c, d, SET( 0), 3); - STEP(F, d, a, b, c, SET( 1), 7); - STEP(F, c, d, a, b, SET( 2), 11); - STEP(F, b, c, d, a, SET( 3), 19); - - STEP(F, a, b, c, d, SET( 4), 3); - STEP(F, d, a, b, c, SET( 5), 7); - STEP(F, c, d, a, b, SET( 6), 11); - STEP(F, b, c, d, a, SET( 7), 19); - - STEP(F, a, b, c, d, SET( 8), 3); - STEP(F, d, a, b, c, SET( 9), 7); - STEP(F, c, d, a, b, SET(10), 11); - STEP(F, b, c, d, a, SET(11), 19); - - STEP(F, a, b, c, d, SET(12), 3); - STEP(F, d, a, b, c, SET(13), 7); - STEP(F, c, d, a, b, SET(14), 11); - STEP(F, b, c, d, a, SET(15), 19); + STEP( F, a, b, c, d, SET( 0 ), 3 ); + STEP( F, d, a, b, c, SET( 1 ), 7 ); + STEP( F, c, d, a, b, SET( 2 ), 11 ); + STEP( F, b, c, d, a, SET( 3 ), 19 ); + + STEP( F, a, b, c, d, SET( 4 ), 3 ); + STEP( F, d, a, b, c, SET( 5 ), 7 ); + STEP( F, c, d, a, b, SET( 6 ), 11 ); + STEP( F, b, c, d, a, SET( 7 ), 19 ); + + STEP( F, a, b, c, d, SET( 8 ), 3 ); + STEP( F, d, a, b, c, SET( 9 ), 7 ); + STEP( F, c, d, a, b, SET( 10 ), 11 ); + STEP( F, b, c, d, a, SET( 11 ), 19 ); + + STEP( F, a, b, c, d, SET( 12 ), 3 ); + STEP( F, d, a, b, c, SET( 13 ), 7 ); + STEP( F, c, d, a, b, SET( 14 ), 11 ); + STEP( F, b, c, d, a, SET( 15 ), 19 ); /* Round 2 */ - STEP(G, a, b, c, d, GET( 0) + 0x5A827999, 3); - STEP(G, d, a, b, c, GET( 4) + 0x5A827999, 5); - STEP(G, c, d, a, b, GET( 8) + 0x5A827999, 9); - STEP(G, b, c, d, a, GET(12) + 0x5A827999, 13); - - STEP(G, a, b, c, d, GET( 1) + 0x5A827999, 3); - STEP(G, d, a, b, c, GET( 5) + 0x5A827999, 5); - STEP(G, c, d, a, b, GET( 9) + 0x5A827999, 9); - STEP(G, b, c, d, a, GET(13) + 0x5A827999, 13); - - STEP(G, a, b, c, d, GET( 2) + 0x5A827999, 3); - STEP(G, d, a, b, c, GET( 6) + 0x5A827999, 5); - STEP(G, c, d, a, b, GET(10) + 0x5A827999, 9); - STEP(G, b, c, d, a, GET(14) + 0x5A827999, 13); - - STEP(G, a, b, c, d, GET( 3) + 0x5A827999, 3); - STEP(G, d, a, b, c, GET( 7) + 0x5A827999, 5); - STEP(G, c, d, a, b, GET(11) + 0x5A827999, 9); - STEP(G, b, c, d, a, GET(15) + 0x5A827999, 13); + STEP( G, a, b, c, d, GET( 0 ) + 0x5A827999, 3 ); + STEP( G, d, a, b, c, GET( 4 ) + 0x5A827999, 5 ); + STEP( G, c, d, a, b, GET( 8 ) + 0x5A827999, 9 ); + STEP( G, b, c, d, a, GET( 12 ) + 0x5A827999, 13 ); + + STEP( G, a, b, c, d, GET( 1 ) + 0x5A827999, 3 ); + STEP( G, d, a, b, c, GET( 5 ) + 0x5A827999, 5 ); + STEP( G, c, d, a, b, GET( 9 ) + 0x5A827999, 9 ); + STEP( G, b, c, d, a, GET( 13 ) + 0x5A827999, 13 ); + + STEP( G, a, b, c, d, GET( 2 ) + 0x5A827999, 3 ); + STEP( G, d, a, b, c, GET( 6 ) + 0x5A827999, 5 ); + STEP( G, c, d, a, b, GET( 10 ) + 0x5A827999, 9 ); + STEP( G, b, c, d, a, GET( 14 ) + 0x5A827999, 13 ); + + STEP( G, a, b, c, d, GET( 3 ) + 0x5A827999, 3 ); + STEP( G, d, a, b, c, GET( 7 ) + 0x5A827999, 5 ); + STEP( G, c, d, a, b, GET( 11 ) + 0x5A827999, 9 ); + STEP( G, b, c, d, a, GET( 15 ) + 0x5A827999, 13 ); /* Round 3 */ - STEP(H, a, b, c, d, GET( 0) + 0x6ED9EBA1, 3); - STEP(H, d, a, b, c, GET( 8) + 0x6ED9EBA1, 9); - STEP(H, c, d, a, b, GET( 4) + 0x6ED9EBA1, 11); - STEP(H, b, c, d, a, GET(12) + 0x6ED9EBA1, 15); - - STEP(H, a, b, c, d, GET( 2) + 0x6ED9EBA1, 3); - STEP(H, d, a, b, c, GET(10) + 0x6ED9EBA1, 9); - STEP(H, c, d, a, b, GET( 6) + 0x6ED9EBA1, 11); - STEP(H, b, c, d, a, GET(14) + 0x6ED9EBA1, 15); - - STEP(H, a, b, c, d, GET( 1) + 0x6ED9EBA1, 3); - STEP(H, d, a, b, c, GET( 9) + 0x6ED9EBA1, 9); - STEP(H, c, d, a, b, GET( 5) + 0x6ED9EBA1, 11); - STEP(H, b, c, d, a, GET(13) + 0x6ED9EBA1, 15); - - STEP(H, a, b, c, d, GET( 3) + 0x6ED9EBA1, 3); - STEP(H, d, a, b, c, GET(11) + 0x6ED9EBA1, 9); - STEP(H, c, d, a, b, GET( 7) + 0x6ED9EBA1, 11); - STEP(H, b, c, d, a, GET(15) + 0x6ED9EBA1, 15); + STEP( H, a, b, c, d, GET( 0 ) + 0x6ED9EBA1, 3 ); + STEP( H, d, a, b, c, GET( 8 ) + 0x6ED9EBA1, 9 ); + STEP( H, c, d, a, b, GET( 4 ) + 0x6ED9EBA1, 11 ); + STEP( H, b, c, d, a, GET( 12 ) + 0x6ED9EBA1, 15 ); + + STEP( H, a, b, c, d, GET( 2 ) + 0x6ED9EBA1, 3 ); + STEP( H, d, a, b, c, GET( 10 ) + 0x6ED9EBA1, 9 ); + STEP( H, c, d, a, b, GET( 6 ) + 0x6ED9EBA1, 11 ); + STEP( H, b, c, d, a, GET( 14 ) + 0x6ED9EBA1, 15 ); + + STEP( H, a, b, c, d, GET( 1 ) + 0x6ED9EBA1, 3 ); + STEP( H, d, a, b, c, GET( 9 ) + 0x6ED9EBA1, 9 ); + STEP( H, c, d, a, b, GET( 5 ) + 0x6ED9EBA1, 11 ); + STEP( H, b, c, d, a, GET( 13 ) + 0x6ED9EBA1, 15 ); + + STEP( H, a, b, c, d, GET( 3 ) + 0x6ED9EBA1, 3 ); + STEP( H, d, a, b, c, GET( 11 ) + 0x6ED9EBA1, 9 ); + STEP( H, c, d, a, b, GET( 7 ) + 0x6ED9EBA1, 11 ); + STEP( H, b, c, d, a, GET( 15 ) + 0x6ED9EBA1, 15 ); a += saved_a; b += saved_b; @@ -149,7 +148,7 @@ static const void *body(struct md4_context *ctx, const void *data, size_t size) d += saved_d; ptr += 64; - } while (size -= 64); + } while ( size -= 64 ); ctx->a = a; ctx->b = b; @@ -159,8 +158,7 @@ static const void *body(struct md4_context *ctx, const void *data, size_t size) return ptr; } -void md4_init(struct md4_context *ctx) -{ +void md4_init( struct md4_context *ctx ){ ctx->a = 0x67452301; ctx->b = 0xefcdab89; ctx->c = 0x98badcfe; @@ -170,43 +168,42 @@ void md4_init(struct md4_context *ctx) ctx->hi = 0; } -void md4_update(struct md4_context *ctx, const void *data, size_t size) -{ +void md4_update( struct md4_context *ctx, const void *data, size_t size ){ /* @UNSAFE */ uint_fast32_t saved_lo; unsigned long used, free; saved_lo = ctx->lo; - if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo) + if ( ( ctx->lo = ( saved_lo + size ) & 0x1fffffff ) < saved_lo ) { ctx->hi++; + } ctx->hi += size >> 29; used = saved_lo & 0x3f; - if (used) { + if ( used ) { free = 64 - used; - if (size < free) { - memcpy(&ctx->buffer[used], data, size); + if ( size < free ) { + memcpy( &ctx->buffer[used], data, size ); return; } - memcpy(&ctx->buffer[used], data, free); + memcpy( &ctx->buffer[used], data, free ); data = (const unsigned char *) data + free; size -= free; - body(ctx, ctx->buffer, 64); + body( ctx, ctx->buffer, 64 ); } - if (size >= 64) { - data = body(ctx, data, size & ~(unsigned long)0x3f); + if ( size >= 64 ) { + data = body( ctx, data, size & ~(unsigned long)0x3f ); size &= 0x3f; } - memcpy(ctx->buffer, data, size); + memcpy( ctx->buffer, data, size ); } -void md4_final(struct md4_context *ctx, unsigned char result[MD4_RESULTLEN]) -{ +void md4_final( struct md4_context *ctx, unsigned char result[MD4_RESULTLEN] ){ /* @UNSAFE */ unsigned long used, free; @@ -216,14 +213,14 @@ void md4_final(struct md4_context *ctx, unsigned char result[MD4_RESULTLEN]) free = 64 - used; - if (free < 8) { - memset(&ctx->buffer[used], 0, free); - body(ctx, ctx->buffer, 64); + if ( free < 8 ) { + memset( &ctx->buffer[used], 0, free ); + body( ctx, ctx->buffer, 64 ); used = 0; free = 64; } - memset(&ctx->buffer[used], 0, free - 8); + memset( &ctx->buffer[used], 0, free - 8 ); ctx->lo <<= 3; ctx->buffer[56] = ctx->lo; @@ -235,7 +232,7 @@ void md4_final(struct md4_context *ctx, unsigned char result[MD4_RESULTLEN]) ctx->buffer[62] = ctx->hi >> 16; ctx->buffer[63] = ctx->hi >> 24; - body(ctx, ctx->buffer, 64); + body( ctx, ctx->buffer, 64 ); result[0] = ctx->a; result[1] = ctx->a >> 8; @@ -254,36 +251,32 @@ void md4_final(struct md4_context *ctx, unsigned char result[MD4_RESULTLEN]) result[14] = ctx->d >> 16; result[15] = ctx->d >> 24; - memset(ctx, 0, sizeof(*ctx)); + memset( ctx, 0, sizeof( *ctx ) ); } -void md4_get_digest(const void *data, size_t size, - unsigned char result[MD4_RESULTLEN]) -{ +void md4_get_digest( const void *data, size_t size, + unsigned char result[MD4_RESULTLEN] ){ struct md4_context ctx; - md4_init(&ctx); - md4_update(&ctx, data, size); - md4_final(&ctx, result); + md4_init( &ctx ); + md4_update( &ctx, data, size ); + md4_final( &ctx, result ); } -static void hash_method_init_md4(void *context) -{ - md4_init(context); +static void hash_method_init_md4( void *context ){ + md4_init( context ); } -static void hash_method_loop_md4(void *context, const void *data, size_t size) -{ - md4_update(context, data, size); +static void hash_method_loop_md4( void *context, const void *data, size_t size ){ + md4_update( context, data, size ); } -static void hash_method_result_md4(void *context, unsigned char *result_r) -{ - md4_final(context, result_r); +static void hash_method_result_md4( void *context, unsigned char *result_r ){ + md4_final( context, result_r ); } const struct hash_method hash_method_md4 = { "md4", - sizeof(struct md4_context), + sizeof( struct md4_context ), MD4_RESULTLEN, hash_method_init_md4, diff --git a/libs/md5lib/md5lib.c b/libs/md5lib/md5lib.c index 60b45148..f30d0958 100644 --- a/libs/md5lib/md5lib.c +++ b/libs/md5lib/md5lib.c @@ -1,64 +1,64 @@ /* - Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. + Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - 1. The origin of this software must not be misrepresented; you must not + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. + 3. This notice may not be removed or altered from any source distribution. - L. Peter Deutsch - ghost@aladdin.com + L. Peter Deutsch + ghost@aladdin.com */ /* $Id: md5lib.c,v 1.1 2003/07/18 04:24:39 ydnar Exp $ */ /* - Independent implementation of MD5 (RFC 1321). - - This code implements the MD5 Algorithm defined in RFC 1321, whose - text is available at - http://www.ietf.org/rfc/rfc1321.txt - The code is derived from the text of the RFC, including the test suite - (section A.5) but excluding the rest of Appendix A. It does not include - any code or documentation that is identified in the RFC as being - copyrighted. - - The original and principal author of md5.c is L. Peter Deutsch - . Other authors are noted in the change history - that follows (in reverse chronological order): - - 2003-07-17 ydnar added to gtkradiant project from + Independent implementation of MD5 (RFC 1321). + + This code implements the MD5 Algorithm defined in RFC 1321, whose + text is available at + http://www.ietf.org/rfc/rfc1321.txt + The code is derived from the text of the RFC, including the test suite + (section A.5) but excluding the rest of Appendix A. It does not include + any code or documentation that is identified in the RFC as being + copyrighted. + + The original and principal author of md5.c is L. Peter Deutsch + . Other authors are noted in the change history + that follows (in reverse chronological order): + + 2003-07-17 ydnar added to gtkradiant project from http://sourceforge.net/projects/libmd5-rfc/ - 2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order - either statically or dynamically; added missing #include - in library. - 2002-03-11 lpd Corrected argument list for main(), and added int return - type, in test program and T value program. - 2002-02-21 lpd Added missing #include in test program. - 2000-07-03 lpd Patched to eliminate warnings about "constant is - unsigned in ANSI C, signed in traditional"; made test program - self-checking. - 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. - 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). - 1999-05-03 lpd Original version. + 2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order + either statically or dynamically; added missing #include + in library. + 2002-03-11 lpd Corrected argument list for main(), and added int return + type, in test program and T value program. + 2002-02-21 lpd Added missing #include in test program. + 2000-07-03 lpd Patched to eliminate warnings about "constant is + unsigned in ANSI C, signed in traditional"; made test program + self-checking. + 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. + 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). + 1999-05-03 lpd Original version. */ -#include "md5lib.h" /* ydnar */ +#include "md5lib.h" /* ydnar */ #include /* ydnar: gtkradiant endian picking */ #ifdef _SGI_SOURCE -#define __BIG_ENDIAN__ +#define __BIG_ENDIAN__ #endif #ifdef __BIG_ENDIAN__ @@ -68,328 +68,329 @@ #endif /* ydnar: end */ -#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */ +#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */ #ifdef ARCH_IS_BIG_ENDIAN -# define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1) +# define BYTE_ORDER ( ARCH_IS_BIG_ENDIAN ? 1 : -1 ) #else # define BYTE_ORDER 0 #endif -#define T_MASK ((md5_word_t)~0) -#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87) -#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9) +#define T_MASK ( ( md5_word_t ) ~0 ) +#define T1 /* 0xd76aa478 */ ( T_MASK ^ 0x28955b87 ) +#define T2 /* 0xe8c7b756 */ ( T_MASK ^ 0x173848a9 ) #define T3 0x242070db -#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111) -#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050) +#define T4 /* 0xc1bdceee */ ( T_MASK ^ 0x3e423111 ) +#define T5 /* 0xf57c0faf */ ( T_MASK ^ 0x0a83f050 ) #define T6 0x4787c62a -#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec) -#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe) +#define T7 /* 0xa8304613 */ ( T_MASK ^ 0x57cfb9ec ) +#define T8 /* 0xfd469501 */ ( T_MASK ^ 0x02b96afe ) #define T9 0x698098d8 -#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850) -#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e) -#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841) +#define T10 /* 0x8b44f7af */ ( T_MASK ^ 0x74bb0850 ) +#define T11 /* 0xffff5bb1 */ ( T_MASK ^ 0x0000a44e ) +#define T12 /* 0x895cd7be */ ( T_MASK ^ 0x76a32841 ) #define T13 0x6b901122 -#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c) -#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71) +#define T14 /* 0xfd987193 */ ( T_MASK ^ 0x02678e6c ) +#define T15 /* 0xa679438e */ ( T_MASK ^ 0x5986bc71 ) #define T16 0x49b40821 -#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d) -#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf) +#define T17 /* 0xf61e2562 */ ( T_MASK ^ 0x09e1da9d ) +#define T18 /* 0xc040b340 */ ( T_MASK ^ 0x3fbf4cbf ) #define T19 0x265e5a51 -#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855) -#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2) +#define T20 /* 0xe9b6c7aa */ ( T_MASK ^ 0x16493855 ) +#define T21 /* 0xd62f105d */ ( T_MASK ^ 0x29d0efa2 ) #define T22 0x02441453 -#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e) -#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437) +#define T23 /* 0xd8a1e681 */ ( T_MASK ^ 0x275e197e ) +#define T24 /* 0xe7d3fbc8 */ ( T_MASK ^ 0x182c0437 ) #define T25 0x21e1cde6 -#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829) -#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278) +#define T26 /* 0xc33707d6 */ ( T_MASK ^ 0x3cc8f829 ) +#define T27 /* 0xf4d50d87 */ ( T_MASK ^ 0x0b2af278 ) #define T28 0x455a14ed -#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa) -#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07) +#define T29 /* 0xa9e3e905 */ ( T_MASK ^ 0x561c16fa ) +#define T30 /* 0xfcefa3f8 */ ( T_MASK ^ 0x03105c07 ) #define T31 0x676f02d9 -#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375) -#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd) -#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e) +#define T32 /* 0x8d2a4c8a */ ( T_MASK ^ 0x72d5b375 ) +#define T33 /* 0xfffa3942 */ ( T_MASK ^ 0x0005c6bd ) +#define T34 /* 0x8771f681 */ ( T_MASK ^ 0x788e097e ) #define T35 0x6d9d6122 -#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3) -#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb) +#define T36 /* 0xfde5380c */ ( T_MASK ^ 0x021ac7f3 ) +#define T37 /* 0xa4beea44 */ ( T_MASK ^ 0x5b4115bb ) #define T38 0x4bdecfa9 -#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f) -#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f) +#define T39 /* 0xf6bb4b60 */ ( T_MASK ^ 0x0944b49f ) +#define T40 /* 0xbebfbc70 */ ( T_MASK ^ 0x4140438f ) #define T41 0x289b7ec6 -#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805) -#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a) +#define T42 /* 0xeaa127fa */ ( T_MASK ^ 0x155ed805 ) +#define T43 /* 0xd4ef3085 */ ( T_MASK ^ 0x2b10cf7a ) #define T44 0x04881d05 -#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6) -#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a) +#define T45 /* 0xd9d4d039 */ ( T_MASK ^ 0x262b2fc6 ) +#define T46 /* 0xe6db99e5 */ ( T_MASK ^ 0x1924661a ) #define T47 0x1fa27cf8 -#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a) -#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb) +#define T48 /* 0xc4ac5665 */ ( T_MASK ^ 0x3b53a99a ) +#define T49 /* 0xf4292244 */ ( T_MASK ^ 0x0bd6ddbb ) #define T50 0x432aff97 -#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58) -#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6) +#define T51 /* 0xab9423a7 */ ( T_MASK ^ 0x546bdc58 ) +#define T52 /* 0xfc93a039 */ ( T_MASK ^ 0x036c5fc6 ) #define T53 0x655b59c3 -#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d) -#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82) -#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e) +#define T54 /* 0x8f0ccc92 */ ( T_MASK ^ 0x70f3336d ) +#define T55 /* 0xffeff47d */ ( T_MASK ^ 0x00100b82 ) +#define T56 /* 0x85845dd1 */ ( T_MASK ^ 0x7a7ba22e ) #define T57 0x6fa87e4f -#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f) -#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb) +#define T58 /* 0xfe2ce6e0 */ ( T_MASK ^ 0x01d3191f ) +#define T59 /* 0xa3014314 */ ( T_MASK ^ 0x5cfebceb ) #define T60 0x4e0811a1 -#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d) -#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca) +#define T61 /* 0xf7537e82 */ ( T_MASK ^ 0x08ac817d ) +#define T62 /* 0xbd3af235 */ ( T_MASK ^ 0x42c50dca ) #define T63 0x2ad7d2bb -#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e) +#define T64 /* 0xeb86d391 */ ( T_MASK ^ 0x14792c6e ) static void -md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/) -{ - md5_word_t - a = pms->abcd[0], b = pms->abcd[1], - c = pms->abcd[2], d = pms->abcd[3]; - md5_word_t t; +md5_process( md5_state_t *pms, const md5_byte_t *data /*[64]*/ ){ + md5_word_t + a = pms->abcd[0], b = pms->abcd[1], + c = pms->abcd[2], d = pms->abcd[3]; + md5_word_t t; #if BYTE_ORDER > 0 - /* Define storage only for big-endian CPUs. */ - md5_word_t X[16]; + /* Define storage only for big-endian CPUs. */ + md5_word_t X[16]; #else - /* Define storage for little-endian or both types of CPUs. */ - md5_word_t xbuf[16]; - const md5_word_t *X; + /* Define storage for little-endian or both types of CPUs. */ + md5_word_t xbuf[16]; + const md5_word_t *X; #endif - { + { #if BYTE_ORDER == 0 - /* - * Determine dynamically whether this is a big-endian or - * little-endian machine, since we can use a more efficient - * algorithm on the latter. - */ - static const int w = 1; - - if (*((const md5_byte_t *)&w)) /* dynamic little-endian */ + /* + * Determine dynamically whether this is a big-endian or + * little-endian machine, since we can use a more efficient + * algorithm on the latter. + */ + static const int w = 1; + + if ( *( (const md5_byte_t *)&w ) ) /* dynamic little-endian */ #endif -#if BYTE_ORDER <= 0 /* little-endian */ - { - /* - * On little-endian machines, we can process properly aligned - * data without copying it. - */ - if (!((data - (const md5_byte_t *)0) & 3)) { - /* data are properly aligned */ - X = (const md5_word_t *)data; - } else { - /* not aligned */ - memcpy(xbuf, data, 64); - X = xbuf; - } - } +#if BYTE_ORDER <= 0 /* little-endian */ + { + /* + * On little-endian machines, we can process properly aligned + * data without copying it. + */ + if ( !( ( data - (const md5_byte_t *)0 ) & 3 ) ) { + /* data are properly aligned */ + X = (const md5_word_t *)data; + } + else { + /* not aligned */ + memcpy( xbuf, data, 64 ); + X = xbuf; + } + } #endif #if BYTE_ORDER == 0 - else /* dynamic big-endian */ + else /* dynamic big-endian */ #endif -#if BYTE_ORDER >= 0 /* big-endian */ - { - /* - * On big-endian machines, we must arrange the bytes in the - * right order. - */ - const md5_byte_t *xp = data; - int i; +#if BYTE_ORDER >= 0 /* big-endian */ + { + /* + * On big-endian machines, we must arrange the bytes in the + * right order. + */ + const md5_byte_t *xp = data; + int i; # if BYTE_ORDER == 0 - X = xbuf; /* (dynamic only) */ + X = xbuf; /* (dynamic only) */ # else -# define xbuf X /* (static only) */ +# define xbuf X /* (static only) */ # endif - for (i = 0; i < 16; ++i, xp += 4) - xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24); - } + for ( i = 0; i < 16; ++i, xp += 4 ) + xbuf[i] = xp[0] + ( xp[1] << 8 ) + ( xp[2] << 16 ) + ( xp[3] << 24 ); + } #endif - } - -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) - - /* Round 1. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ -#define F(x, y, z) (((x) & (y)) | (~(x) & (z))) -#define SET(a, b, c, d, k, s, Ti)\ - t = a + F(b,c,d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET(a, b, c, d, 0, 7, T1); - SET(d, a, b, c, 1, 12, T2); - SET(c, d, a, b, 2, 17, T3); - SET(b, c, d, a, 3, 22, T4); - SET(a, b, c, d, 4, 7, T5); - SET(d, a, b, c, 5, 12, T6); - SET(c, d, a, b, 6, 17, T7); - SET(b, c, d, a, 7, 22, T8); - SET(a, b, c, d, 8, 7, T9); - SET(d, a, b, c, 9, 12, T10); - SET(c, d, a, b, 10, 17, T11); - SET(b, c, d, a, 11, 22, T12); - SET(a, b, c, d, 12, 7, T13); - SET(d, a, b, c, 13, 12, T14); - SET(c, d, a, b, 14, 17, T15); - SET(b, c, d, a, 15, 22, T16); + } + +#define ROTATE_LEFT( x, n ) ( ( ( x ) << ( n ) ) | ( ( x ) >> ( 32 - ( n ) ) ) ) + + /* Round 1. */ + /* Let [abcd k s i] denote the operation + a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ +#define F( x, y, z ) ( ( ( x ) & ( y ) ) | ( ~( x ) & ( z ) ) ) +#define SET( a, b, c, d, k, s, Ti ) \ + t = a + F( b,c,d ) + X[k] + Ti; \ + a = ROTATE_LEFT( t, s ) + b + /* Do the following 16 operations. */ + SET( a, b, c, d, 0, 7, T1 ); + SET( d, a, b, c, 1, 12, T2 ); + SET( c, d, a, b, 2, 17, T3 ); + SET( b, c, d, a, 3, 22, T4 ); + SET( a, b, c, d, 4, 7, T5 ); + SET( d, a, b, c, 5, 12, T6 ); + SET( c, d, a, b, 6, 17, T7 ); + SET( b, c, d, a, 7, 22, T8 ); + SET( a, b, c, d, 8, 7, T9 ); + SET( d, a, b, c, 9, 12, T10 ); + SET( c, d, a, b, 10, 17, T11 ); + SET( b, c, d, a, 11, 22, T12 ); + SET( a, b, c, d, 12, 7, T13 ); + SET( d, a, b, c, 13, 12, T14 ); + SET( c, d, a, b, 14, 17, T15 ); + SET( b, c, d, a, 15, 22, T16 ); #undef SET - /* Round 2. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ -#define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) -#define SET(a, b, c, d, k, s, Ti)\ - t = a + G(b,c,d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET(a, b, c, d, 1, 5, T17); - SET(d, a, b, c, 6, 9, T18); - SET(c, d, a, b, 11, 14, T19); - SET(b, c, d, a, 0, 20, T20); - SET(a, b, c, d, 5, 5, T21); - SET(d, a, b, c, 10, 9, T22); - SET(c, d, a, b, 15, 14, T23); - SET(b, c, d, a, 4, 20, T24); - SET(a, b, c, d, 9, 5, T25); - SET(d, a, b, c, 14, 9, T26); - SET(c, d, a, b, 3, 14, T27); - SET(b, c, d, a, 8, 20, T28); - SET(a, b, c, d, 13, 5, T29); - SET(d, a, b, c, 2, 9, T30); - SET(c, d, a, b, 7, 14, T31); - SET(b, c, d, a, 12, 20, T32); + /* Round 2. */ + /* Let [abcd k s i] denote the operation + a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ +#define G( x, y, z ) ( ( ( x ) & ( z ) ) | ( ( y ) & ~( z ) ) ) +#define SET( a, b, c, d, k, s, Ti ) \ + t = a + G( b,c,d ) + X[k] + Ti; \ + a = ROTATE_LEFT( t, s ) + b + /* Do the following 16 operations. */ + SET( a, b, c, d, 1, 5, T17 ); + SET( d, a, b, c, 6, 9, T18 ); + SET( c, d, a, b, 11, 14, T19 ); + SET( b, c, d, a, 0, 20, T20 ); + SET( a, b, c, d, 5, 5, T21 ); + SET( d, a, b, c, 10, 9, T22 ); + SET( c, d, a, b, 15, 14, T23 ); + SET( b, c, d, a, 4, 20, T24 ); + SET( a, b, c, d, 9, 5, T25 ); + SET( d, a, b, c, 14, 9, T26 ); + SET( c, d, a, b, 3, 14, T27 ); + SET( b, c, d, a, 8, 20, T28 ); + SET( a, b, c, d, 13, 5, T29 ); + SET( d, a, b, c, 2, 9, T30 ); + SET( c, d, a, b, 7, 14, T31 ); + SET( b, c, d, a, 12, 20, T32 ); #undef SET - /* Round 3. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define SET(a, b, c, d, k, s, Ti)\ - t = a + H(b,c,d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET(a, b, c, d, 5, 4, T33); - SET(d, a, b, c, 8, 11, T34); - SET(c, d, a, b, 11, 16, T35); - SET(b, c, d, a, 14, 23, T36); - SET(a, b, c, d, 1, 4, T37); - SET(d, a, b, c, 4, 11, T38); - SET(c, d, a, b, 7, 16, T39); - SET(b, c, d, a, 10, 23, T40); - SET(a, b, c, d, 13, 4, T41); - SET(d, a, b, c, 0, 11, T42); - SET(c, d, a, b, 3, 16, T43); - SET(b, c, d, a, 6, 23, T44); - SET(a, b, c, d, 9, 4, T45); - SET(d, a, b, c, 12, 11, T46); - SET(c, d, a, b, 15, 16, T47); - SET(b, c, d, a, 2, 23, T48); + /* Round 3. */ + /* Let [abcd k s t] denote the operation + a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ +#define H( x, y, z ) ( ( x ) ^ ( y ) ^ ( z ) ) +#define SET( a, b, c, d, k, s, Ti ) \ + t = a + H( b,c,d ) + X[k] + Ti; \ + a = ROTATE_LEFT( t, s ) + b + /* Do the following 16 operations. */ + SET( a, b, c, d, 5, 4, T33 ); + SET( d, a, b, c, 8, 11, T34 ); + SET( c, d, a, b, 11, 16, T35 ); + SET( b, c, d, a, 14, 23, T36 ); + SET( a, b, c, d, 1, 4, T37 ); + SET( d, a, b, c, 4, 11, T38 ); + SET( c, d, a, b, 7, 16, T39 ); + SET( b, c, d, a, 10, 23, T40 ); + SET( a, b, c, d, 13, 4, T41 ); + SET( d, a, b, c, 0, 11, T42 ); + SET( c, d, a, b, 3, 16, T43 ); + SET( b, c, d, a, 6, 23, T44 ); + SET( a, b, c, d, 9, 4, T45 ); + SET( d, a, b, c, 12, 11, T46 ); + SET( c, d, a, b, 15, 16, T47 ); + SET( b, c, d, a, 2, 23, T48 ); #undef SET - /* Round 4. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ -#define I(x, y, z) ((y) ^ ((x) | ~(z))) -#define SET(a, b, c, d, k, s, Ti)\ - t = a + I(b,c,d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET(a, b, c, d, 0, 6, T49); - SET(d, a, b, c, 7, 10, T50); - SET(c, d, a, b, 14, 15, T51); - SET(b, c, d, a, 5, 21, T52); - SET(a, b, c, d, 12, 6, T53); - SET(d, a, b, c, 3, 10, T54); - SET(c, d, a, b, 10, 15, T55); - SET(b, c, d, a, 1, 21, T56); - SET(a, b, c, d, 8, 6, T57); - SET(d, a, b, c, 15, 10, T58); - SET(c, d, a, b, 6, 15, T59); - SET(b, c, d, a, 13, 21, T60); - SET(a, b, c, d, 4, 6, T61); - SET(d, a, b, c, 11, 10, T62); - SET(c, d, a, b, 2, 15, T63); - SET(b, c, d, a, 9, 21, T64); + /* Round 4. */ + /* Let [abcd k s t] denote the operation + a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ +#define I( x, y, z ) ( ( y ) ^ ( ( x ) | ~( z ) ) ) +#define SET( a, b, c, d, k, s, Ti ) \ + t = a + I( b,c,d ) + X[k] + Ti; \ + a = ROTATE_LEFT( t, s ) + b + /* Do the following 16 operations. */ + SET( a, b, c, d, 0, 6, T49 ); + SET( d, a, b, c, 7, 10, T50 ); + SET( c, d, a, b, 14, 15, T51 ); + SET( b, c, d, a, 5, 21, T52 ); + SET( a, b, c, d, 12, 6, T53 ); + SET( d, a, b, c, 3, 10, T54 ); + SET( c, d, a, b, 10, 15, T55 ); + SET( b, c, d, a, 1, 21, T56 ); + SET( a, b, c, d, 8, 6, T57 ); + SET( d, a, b, c, 15, 10, T58 ); + SET( c, d, a, b, 6, 15, T59 ); + SET( b, c, d, a, 13, 21, T60 ); + SET( a, b, c, d, 4, 6, T61 ); + SET( d, a, b, c, 11, 10, T62 ); + SET( c, d, a, b, 2, 15, T63 ); + SET( b, c, d, a, 9, 21, T64 ); #undef SET - /* Then perform the following additions. (That is increment each - of the four registers by the value it had before this block - was started.) */ - pms->abcd[0] += a; - pms->abcd[1] += b; - pms->abcd[2] += c; - pms->abcd[3] += d; + /* Then perform the following additions. (That is increment each + of the four registers by the value it had before this block + was started.) */ + pms->abcd[0] += a; + pms->abcd[1] += b; + pms->abcd[2] += c; + pms->abcd[3] += d; } void -md5_init(md5_state_t *pms) -{ - pms->count[0] = pms->count[1] = 0; - pms->abcd[0] = 0x67452301; - pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; - pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; - pms->abcd[3] = 0x10325476; +md5_init( md5_state_t *pms ){ + pms->count[0] = pms->count[1] = 0; + pms->abcd[0] = 0x67452301; + pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; + pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; + pms->abcd[3] = 0x10325476; } void -md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes) -{ - const md5_byte_t *p = data; - int left = nbytes; - int offset = (pms->count[0] >> 3) & 63; - md5_word_t nbits = (md5_word_t)(nbytes << 3); - - if (nbytes <= 0) - return; - - /* Update the message length. */ - pms->count[1] += nbytes >> 29; - pms->count[0] += nbits; - if (pms->count[0] < nbits) - pms->count[1]++; - - /* Process an initial partial block. */ - if (offset) { - int copy = (offset + nbytes > 64 ? 64 - offset : nbytes); - - memcpy(pms->buf + offset, p, copy); - if (offset + copy < 64) - return; - p += copy; - left -= copy; - md5_process(pms, pms->buf); - } - - /* Process full blocks. */ - for (; left >= 64; p += 64, left -= 64) - md5_process(pms, p); - - /* Process a final partial block. */ - if (left) - memcpy(pms->buf, p, left); +md5_append( md5_state_t *pms, const md5_byte_t *data, int nbytes ){ + const md5_byte_t *p = data; + int left = nbytes; + int offset = ( pms->count[0] >> 3 ) & 63; + md5_word_t nbits = (md5_word_t)( nbytes << 3 ); + + if ( nbytes <= 0 ) { + return; + } + + /* Update the message length. */ + pms->count[1] += nbytes >> 29; + pms->count[0] += nbits; + if ( pms->count[0] < nbits ) { + pms->count[1]++; + } + + /* Process an initial partial block. */ + if ( offset ) { + int copy = ( offset + nbytes > 64 ? 64 - offset : nbytes ); + + memcpy( pms->buf + offset, p, copy ); + if ( offset + copy < 64 ) { + return; + } + p += copy; + left -= copy; + md5_process( pms, pms->buf ); + } + + /* Process full blocks. */ + for (; left >= 64; p += 64, left -= 64 ) + md5_process( pms, p ); + + /* Process a final partial block. */ + if ( left ) { + memcpy( pms->buf, p, left ); + } } void -md5_finish(md5_state_t *pms, md5_byte_t digest[16]) -{ - static const md5_byte_t pad[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - md5_byte_t data[8]; - int i; - - /* Save the length before padding. */ - for (i = 0; i < 8; ++i) - data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3)); - /* Pad to 56 bytes mod 64. */ - md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1); - /* Append the length. */ - md5_append(pms, data, 8); - for (i = 0; i < 16; ++i) - digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3)); +md5_finish( md5_state_t *pms, md5_byte_t digest[16] ){ + static const md5_byte_t pad[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + md5_byte_t data[8]; + int i; + + /* Save the length before padding. */ + for ( i = 0; i < 8; ++i ) + data[i] = (md5_byte_t)( pms->count[i >> 2] >> ( ( i & 3 ) << 3 ) ); + /* Pad to 56 bytes mod 64. */ + md5_append( pms, pad, ( ( 55 - ( pms->count[0] >> 3 ) ) & 63 ) + 1 ); + /* Append the length. */ + md5_append( pms, data, 8 ); + for ( i = 0; i < 16; ++i ) + digest[i] = (md5_byte_t)( pms->abcd[i >> 2] >> ( ( i & 3 ) << 3 ) ); } diff --git a/libs/missing.h b/libs/missing.h index 135f4d32..2ba03d14 100644 --- a/libs/missing.h +++ b/libs/missing.h @@ -1,32 +1,32 @@ /* -Copyright (c) 2001, Loki software, inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -Neither the name of Loki software nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + Copyright (c) 2001, Loki software, inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + + Neither the name of Loki software nor the names of its contributors may be used + to endorse or promote products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #ifndef _MISSING_H_ #define _MISSING_H_ @@ -56,15 +56,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. inline int GetLastError() { return 0; }; // temp stuff -inline int GetPrivateProfileInt(char* a, char* b, int i, char* c) { return i; }; -#define VERIFY(a) a; -int GetFullPathName(const char *lpFileName, int nBufferLength, char *lpBuffer, char **lpFilePart); +inline int GetPrivateProfileInt( char* a, char* b, int i, char* c ) { return i; }; +int GetFullPathName( const char *lpFileName, int nBufferLength, char *lpBuffer, char **lpFilePart ); #ifndef APIENTRY #define APIENTRY #endif -int MemorySize(void *ptr); +int MemorySize( void *ptr ); #define _msize MemorySize #define MK_LBUTTON 0x0001 @@ -84,146 +83,136 @@ int MemorySize(void *ptr); class CPtrArray { public: - CPtrArray () - { m_ptrs = g_ptr_array_new (); }; - virtual ~CPtrArray () - { g_ptr_array_free (m_ptrs, TRUE); }; - - void* operator[](int i) const - { return g_ptr_array_index (m_ptrs,i); }; - void* GetAt(int i) const - { return g_ptr_array_index (m_ptrs,i); }; - int GetSize () const - { return m_ptrs->len; }; - void Add (void* ptr) - { g_ptr_array_add (m_ptrs, ptr); }; - void RemoveAll () - { g_ptr_array_set_size (m_ptrs, 0); }; - void RemoveAt(int index, int count = 1) - { - if ((index < 0) || (count < 0) || (count + index > (int)m_ptrs->len)) - return; - for (; count > 0; count--) - g_ptr_array_remove_index (m_ptrs, index); - } - void InsertAt(int nStartIndex, CPtrArray* pNewArray) - { - for (int i = 0; i < pNewArray->GetSize(); i++) - InsertAt(nStartIndex+i, pNewArray->GetAt(i)); - } - void InsertAt(int nIndex, void* newElement, int nCount = 1) - { - if ((guint32)nIndex >= m_ptrs->len) - { - g_ptr_array_set_size (m_ptrs, nIndex + nCount); // grow so nIndex is valid - } - else - { - // inserting in the middle of the array - int nOldSize = m_ptrs->len; - g_ptr_array_set_size (m_ptrs, m_ptrs->len + nCount); - // shift old data up to fill gap - memmove(&m_ptrs->pdata[nIndex+nCount], &m_ptrs->pdata[nIndex], - (nOldSize-nIndex) * sizeof(gpointer)); - - memset(&m_ptrs->pdata[nIndex], 0, nCount * sizeof(gpointer)); - } - - // insert new value in the gap - while (nCount--) - m_ptrs->pdata[nIndex++] = newElement; - } - void Copy(const CPtrArray& src) - { - g_ptr_array_set_size (m_ptrs, src.m_ptrs->len); - memcpy (m_ptrs->pdata, src.m_ptrs->pdata, m_ptrs->len*sizeof(gpointer)); - } - +CPtrArray () +{ m_ptrs = g_ptr_array_new(); }; +virtual ~CPtrArray () +{ g_ptr_array_free( m_ptrs, TRUE ); }; + +void* operator[]( int i ) const +{ return g_ptr_array_index( m_ptrs,i ); }; +void* GetAt( int i ) const +{ return g_ptr_array_index( m_ptrs,i ); }; +int GetSize() const +{ return m_ptrs->len; }; +void Add( void* ptr ) +{ g_ptr_array_add( m_ptrs, ptr ); }; +void RemoveAll() +{ g_ptr_array_set_size( m_ptrs, 0 ); }; +void RemoveAt( int index, int count = 1 ){ + if ( ( index < 0 ) || ( count < 0 ) || ( count + index > (int)m_ptrs->len ) ) { + return; + } + for (; count > 0; count-- ) + g_ptr_array_remove_index( m_ptrs, index ); +} +void InsertAt( int nStartIndex, CPtrArray* pNewArray ){ + for ( int i = 0; i < pNewArray->GetSize(); i++ ) + InsertAt( nStartIndex + i, pNewArray->GetAt( i ) ); +} +void InsertAt( int nIndex, void* newElement, int nCount = 1 ){ + if ( (guint32)nIndex >= m_ptrs->len ) { + g_ptr_array_set_size( m_ptrs, nIndex + nCount ); // grow so nIndex is valid + } + else + { + // inserting in the middle of the array + int nOldSize = m_ptrs->len; + g_ptr_array_set_size( m_ptrs, m_ptrs->len + nCount ); + // shift old data up to fill gap + memmove( &m_ptrs->pdata[nIndex + nCount], &m_ptrs->pdata[nIndex], + ( nOldSize - nIndex ) * sizeof( gpointer ) ); + + memset( &m_ptrs->pdata[nIndex], 0, nCount * sizeof( gpointer ) ); + } + + // insert new value in the gap + while ( nCount-- ) + m_ptrs->pdata[nIndex++] = newElement; +} +void Copy( const CPtrArray& src ){ + g_ptr_array_set_size( m_ptrs, src.m_ptrs->len ); + memcpy( m_ptrs->pdata, src.m_ptrs->pdata, m_ptrs->len * sizeof( gpointer ) ); +} + protected: - GPtrArray* m_ptrs; +GPtrArray* m_ptrs; }; typedef struct stringmap_s { - char* key; - char* value; + char* key; + char* value; } stringmap_t; class CMapStringToString { public: - CMapStringToString () - { m_map = g_ptr_array_new (); }; - ~CMapStringToString () - { - for (guint32 i = 0; i < m_map->len; i++) - FreeElement ((stringmap_t*)g_ptr_array_index (m_map,i)); - g_ptr_array_set_size (m_map, 0); - g_ptr_array_free (m_map, TRUE); - }; - void SetAt(char* key, char* newValue) - { - for (guint32 i = 0; i < m_map->len; i++) - { - stringmap_t* entry = (stringmap_t*)g_ptr_array_index (m_map,i); - if (strcmp (entry->key, key) == 0) - { - g_free (entry->value); - entry->value = g_strdup (newValue); - return; - } - } - stringmap_t* entry = (stringmap_t*)g_malloc (sizeof (stringmap_t)); - entry->key = g_strdup (key); - entry->value = g_strdup (newValue); - g_ptr_array_add (m_map, entry); - } - - bool Lookup(const char* key, CString& rValue) const - { - for (guint32 i = 0; i < m_map->len; i++) - { - stringmap_t* entry = (stringmap_t*)g_ptr_array_index (m_map,i); - if (strcmp (entry->key, key) == 0) - { - rValue = entry->value; - return true; - } - } - return false; - } - +CMapStringToString () +{ m_map = g_ptr_array_new(); }; +~CMapStringToString (){ + for ( guint32 i = 0; i < m_map->len; i++ ) + FreeElement( (stringmap_t*)g_ptr_array_index( m_map,i ) ); + g_ptr_array_set_size( m_map, 0 ); + g_ptr_array_free( m_map, TRUE ); +}; +void SetAt( char* key, char* newValue ){ + for ( guint32 i = 0; i < m_map->len; i++ ) + { + stringmap_t* entry = (stringmap_t*)g_ptr_array_index( m_map,i ); + if ( strcmp( entry->key, key ) == 0 ) { + g_free( entry->value ); + entry->value = g_strdup( newValue ); + return; + } + } + stringmap_t* entry = (stringmap_t*)g_malloc( sizeof( stringmap_t ) ); + entry->key = g_strdup( key ); + entry->value = g_strdup( newValue ); + g_ptr_array_add( m_map, entry ); +} + +bool Lookup( const char* key, CString& rValue ) const { + for ( guint32 i = 0; i < m_map->len; i++ ) + { + stringmap_t* entry = (stringmap_t*)g_ptr_array_index( m_map,i ); + if ( strcmp( entry->key, key ) == 0 ) { + rValue = entry->value; + return true; + } + } + return false; +} + protected: - GPtrArray* m_map; - - void FreeElement(stringmap_t* elem) - { - g_free (elem->key); - g_free (elem->value); - g_free (elem); - }; +GPtrArray* m_map; + +void FreeElement( stringmap_t* elem ){ + g_free( elem->key ); + g_free( elem->value ); + g_free( elem ); +}; }; class FindFiles { public: - FindFiles( const char *directory ); - ~FindFiles(); +FindFiles( const char *directory ); +~FindFiles(); - const char* NextFile(); +const char* NextFile(); private: #ifdef _WIN32 - Str directory; - HANDLE findHandle; - WIN32_FIND_DATA findFileData; +Str directory; +HANDLE findHandle; +WIN32_FIND_DATA findFileData; #else - DIR *findHandle; +DIR * findHandle; #endif }; bool CopyTree( const char* source, const char* dest ); typedef enum { - PATH_FAIL, // stat call failed (does not exist is likely) + PATH_FAIL, // stat call failed (does not exist is likely) PATH_DIRECTORY, PATH_FILE } EPathCheck; diff --git a/libs/multimon.h b/libs/multimon.h index 85e7654c..0e2bc6e4 100644 --- a/libs/multimon.h +++ b/libs/multimon.h @@ -32,7 +32,7 @@ extern "C" { /* Assume C declarations for C++ */ #define SM_CMONITORS 80 #define SM_SAMEDISPLAYFORMAT 81 -DECLARE_HANDLE(HMONITOR); +DECLARE_HANDLE( HMONITOR ); #define MONITOR_DEFAULTTONULL 0x00000000 #define MONITOR_DEFAULTTOPRIMARY 0x00000001 @@ -42,10 +42,10 @@ DECLARE_HANDLE(HMONITOR); typedef struct tagMONITORINFO { - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; + DWORD cbSize; + RECT rcMonitor; + RECT rcWork; + DWORD dwFlags; } MONITORINFO, *LPMONITORINFO; #define CCHDEVICENAME 32 @@ -53,27 +53,27 @@ typedef struct tagMONITORINFO #ifdef __cplusplus typedef struct tagMONITORINFOEX : public tagMONITORINFO { - TCHAR szDevice[CCHDEVICENAME]; + TCHAR szDevice[CCHDEVICENAME]; } MONITORINFOEX, *LPMONITORINFOEX; #else typedef struct { - MONITORINFO; - TCHAR szDevice[CCHDEVICENAME]; + MONITORINFO; + TCHAR szDevice[CCHDEVICENAME]; } MONITORINFOEX, *LPMONITORINFOEX; #endif -typedef BOOL (CALLBACK* MONITORENUMPROC)(HMONITOR, HDC, LPRECT, LPARAM); +typedef BOOL ( CALLBACK * MONITORENUMPROC )( HMONITOR, HDC, LPRECT, LPARAM ); #endif // SM_CMONITORS #ifndef DISPLAY_DEVICE_ATTACHED_TO_DESKTOP typedef struct { - DWORD cb; - CHAR DeviceName[32]; - CHAR DeviceString[128]; - DWORD StateFlags; + DWORD cb; + CHAR DeviceName[32]; + CHAR DeviceString[128]; + DWORD StateFlags; } DISPLAY_DEVICE; #define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001 @@ -85,8 +85,8 @@ typedef struct { #define DISPLAY_DEVICE_VGA 0x00000010 #ifndef ENUM_CURRENT_SETTINGS -#define ENUM_CURRENT_SETTINGS ((DWORD)-1) -#define ENUM_REGISTRY_SETTINGS ((DWORD)-2) +#define ENUM_CURRENT_SETTINGS ( (DWORD)-1 ) +#define ENUM_REGISTRY_SETTINGS ( (DWORD)-2 ) #endif #undef GetMonitorInfo @@ -103,261 +103,259 @@ typedef struct { // #ifdef COMPILE_MULTIMON_STUBS - //--------------------------------------------------------------------------- - // - // Implement the API stubs. - // - //--------------------------------------------------------------------------- - - int (WINAPI* g_pfnGetSystemMetrics)(int); - HMONITOR (WINAPI* g_pfnMonitorFromWindow)(HWND, BOOL); - HMONITOR (WINAPI* g_pfnMonitorFromRect)(LPCRECT, BOOL); - HMONITOR (WINAPI* g_pfnMonitorFromPoint)(POINT, BOOL); - BOOL (WINAPI* g_pfnGetMonitorInfo)(HMONITOR, LPMONITORINFO); - BOOL (WINAPI* g_pfnEnumDisplayMonitors)(HDC, LPCRECT, MONITORENUMPROC, LPARAM); - BOOL (WINAPI *g_pfnEnumDisplayDevices)(LPVOID, int, DISPLAY_DEVICE *, DWORD); - - BOOL InitMultipleMonitorStubs(void) - { - HMODULE hUser32; - static BOOL fInitDone; - - if (fInitDone) - { - return g_pfnGetMonitorInfo != NULL; - } - - if ((hUser32 = GetModuleHandle(TEXT("USER32"))) && - (*(FARPROC*)&g_pfnGetSystemMetrics = GetProcAddress(hUser32,"GetSystemMetrics")) && - (*(FARPROC*)&g_pfnMonitorFromWindow = GetProcAddress(hUser32,"MonitorFromWindow")) && - (*(FARPROC*)&g_pfnMonitorFromRect = GetProcAddress(hUser32,"MonitorFromRect")) && - (*(FARPROC*)&g_pfnMonitorFromPoint = GetProcAddress(hUser32,"MonitorFromPoint")) && - (*(FARPROC*)&g_pfnEnumDisplayMonitors = GetProcAddress(hUser32,"EnumDisplayMonitors")) && - #ifdef UNICODE - (*(FARPROC*)&g_pfnGetMonitorInfo = GetProcAddress(hUser32,"GetMonitorInfoW")) && - (*(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress(hUser32,"EnumDisplayDevicesW")) && - #else - (*(FARPROC*)&g_pfnGetMonitorInfo = GetProcAddress(hUser32,"GetMonitorInfoA")) && - (*(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress(hUser32,"EnumDisplayDevicesA")) && - #endif - (GetSystemMetrics(SM_CXVIRTUALSCREEN) >= GetSystemMetrics(SM_CXSCREEN)) && - (GetSystemMetrics(SM_CYVIRTUALSCREEN) >= GetSystemMetrics(SM_CYSCREEN)) ) - { - fInitDone = TRUE; - return TRUE; - } - else - { - g_pfnGetSystemMetrics = NULL; - g_pfnMonitorFromWindow = NULL; - g_pfnMonitorFromRect = NULL; - g_pfnMonitorFromPoint = NULL; - g_pfnGetMonitorInfo = NULL; - g_pfnEnumDisplayMonitors = NULL; - g_pfnEnumDisplayDevices = NULL; - - fInitDone = TRUE; - return FALSE; - } - } - - //--------------------------------------------------------------------------- - // - // "stubbed" implementations of Monitor APIs that work with the primary // display - // - //--------------------------------------------------------------------------- - - int WINAPI - xGetSystemMetrics(int nIndex) - { - if (InitMultipleMonitorStubs()) - return g_pfnGetSystemMetrics(nIndex); - - switch (nIndex) - { - case SM_CMONITORS: - case SM_SAMEDISPLAYFORMAT: - return 1; - - case SM_XVIRTUALSCREEN: - case SM_YVIRTUALSCREEN: - return 0; - - case SM_CXVIRTUALSCREEN: - nIndex = SM_CXSCREEN; - break; - - case SM_CYVIRTUALSCREEN: - nIndex = SM_CYSCREEN; - break; - } - - return GetSystemMetrics(nIndex); - } - - #define xPRIMARY_MONITOR ((HMONITOR)0x42) - - HMONITOR WINAPI - xMonitorFromRect(LPCRECT lprcScreenCoords, - UINT uFlags) - { - if (InitMultipleMonitorStubs()) - return g_pfnMonitorFromRect(lprcScreenCoords, uFlags); - - if ((uFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) || - ((lprcScreenCoords->right > 0) && - (lprcScreenCoords->bottom > 0) && - (lprcScreenCoords->left < GetSystemMetrics(SM_CXSCREEN)) && - (lprcScreenCoords->top < GetSystemMetrics(SM_CYSCREEN)))) - { - return xPRIMARY_MONITOR; - } - - return NULL; - } - - HMONITOR WINAPI - xMonitorFromWindow(HWND hWnd, - UINT uFlags) - { - RECT rc; - - if (InitMultipleMonitorStubs()) - return g_pfnMonitorFromWindow(hWnd, uFlags); - - if (uFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) - return xPRIMARY_MONITOR; - - if (GetWindowRect(hWnd, &rc)) - return xMonitorFromRect(&rc, uFlags); - - return NULL; - } - - HMONITOR WINAPI - xMonitorFromPoint(POINT ptScreenCoords, - UINT uFlags) - { - if (InitMultipleMonitorStubs()) - return g_pfnMonitorFromPoint(ptScreenCoords, uFlags); - - if ((uFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) || - ((ptScreenCoords.x >= 0) && - (ptScreenCoords.x < GetSystemMetrics(SM_CXSCREEN)) && - (ptScreenCoords.y >= 0) && - (ptScreenCoords.y < GetSystemMetrics(SM_CYSCREEN)))) - { - return xPRIMARY_MONITOR; - } - - return NULL; - } - - BOOL WINAPI - xGetMonitorInfo(HMONITOR hMonitor, - LPMONITORINFO lpMonitorInfo) - { - RECT rcWork; - - if (InitMultipleMonitorStubs()) - return g_pfnGetMonitorInfo(hMonitor, lpMonitorInfo); - - if ((hMonitor == xPRIMARY_MONITOR) && lpMonitorInfo && - (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) && - SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWork, 0)) - { - lpMonitorInfo->rcMonitor.left = 0; - lpMonitorInfo->rcMonitor.top = 0; - lpMonitorInfo->rcMonitor.right = GetSystemMetrics(SM_CXSCREEN); - lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics(SM_CYSCREEN); - lpMonitorInfo->rcWork = rcWork; - lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; - - if (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEX)) - lstrcpy(((MONITORINFOEX*)lpMonitorInfo)->szDevice, - TEXT("DISPLAY")); - - return TRUE; - } - - return FALSE; - } - - BOOL WINAPI - xEnumDisplayMonitors(HDC hdc, - LPCRECT lprcIntersect, - MONITORENUMPROC lpfnEnumProc, - LPARAM lData) - { - RECT rcCallback, rcLimit; - - if (InitMultipleMonitorStubs()) - return g_pfnEnumDisplayMonitors(hdc, lprcIntersect, lpfnEnumProc, lData); - - if (!lpfnEnumProc) - return FALSE; - - rcLimit.left = 0; - rcLimit.top = 0; - rcLimit.right = GetSystemMetrics(SM_CXSCREEN); - rcLimit.bottom = GetSystemMetrics(SM_CYSCREEN); - - if (hdc) - { - RECT rcClip; - HWND hWnd; - - if ((hWnd = WindowFromDC(hdc)) == NULL) - return FALSE; - - switch (GetClipBox(hdc, &rcClip)) - { - default: - MapWindowPoints(NULL, hWnd, (LPPOINT)&rcLimit, 2); - if (IntersectRect(&rcCallback, &rcClip, &rcLimit)) - break; - //fall thru - case NULLREGION: - return TRUE; - case ERROR: - return FALSE; - } - - rcLimit = rcCallback; - } - - if (!lprcIntersect || IntersectRect(&rcCallback, lprcIntersect, &rcLimit)) - { - lpfnEnumProc(xPRIMARY_MONITOR, hdc, &rcCallback, lData); - } - - return TRUE; - } - - BOOL WINAPI - xEnumDisplayDevices(LPVOID lpReserved, - int iDeviceNum, - DISPLAY_DEVICE * pDisplayDevice, - DWORD dwFlags) - { - if (InitMultipleMonitorStubs()) - return g_pfnEnumDisplayDevices(lpReserved, iDeviceNum, pDisplayDevice, dwFlags); - - return FALSE; - } +//--------------------------------------------------------------------------- +// +// Implement the API stubs. +// +//--------------------------------------------------------------------------- + +int ( WINAPI* g_pfnGetSystemMetrics )( int ); +HMONITOR ( WINAPI* g_pfnMonitorFromWindow )( HWND, BOOL ); +HMONITOR ( WINAPI* g_pfnMonitorFromRect )( LPCRECT, BOOL ); +HMONITOR ( WINAPI* g_pfnMonitorFromPoint )( POINT, BOOL ); +BOOL ( WINAPI* g_pfnGetMonitorInfo )( HMONITOR, LPMONITORINFO ); +BOOL ( WINAPI* g_pfnEnumDisplayMonitors )( HDC, LPCRECT, MONITORENUMPROC, LPARAM ); +BOOL ( WINAPI *g_pfnEnumDisplayDevices )( LPVOID, int, DISPLAY_DEVICE *, DWORD ); + +BOOL InitMultipleMonitorStubs( void ){ + HMODULE hUser32; + static BOOL fInitDone; + + if ( fInitDone ) { + return g_pfnGetMonitorInfo != NULL; + } + + if ( ( hUser32 = GetModuleHandle( TEXT( "USER32" ) ) ) && + ( *(FARPROC*)&g_pfnGetSystemMetrics = GetProcAddress( hUser32,"GetSystemMetrics" ) ) && + ( *(FARPROC*)&g_pfnMonitorFromWindow = GetProcAddress( hUser32,"MonitorFromWindow" ) ) && + ( *(FARPROC*)&g_pfnMonitorFromRect = GetProcAddress( hUser32,"MonitorFromRect" ) ) && + ( *(FARPROC*)&g_pfnMonitorFromPoint = GetProcAddress( hUser32,"MonitorFromPoint" ) ) && + ( *(FARPROC*)&g_pfnEnumDisplayMonitors = GetProcAddress( hUser32,"EnumDisplayMonitors" ) ) && + #ifdef UNICODE + ( *(FARPROC*)&g_pfnGetMonitorInfo = GetProcAddress( hUser32,"GetMonitorInfoW" ) ) && + ( *(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress( hUser32,"EnumDisplayDevicesW" ) ) && + #else + ( *(FARPROC*)&g_pfnGetMonitorInfo = GetProcAddress( hUser32,"GetMonitorInfoA" ) ) && + ( *(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress( hUser32,"EnumDisplayDevicesA" ) ) && + #endif + ( GetSystemMetrics( SM_CXVIRTUALSCREEN ) >= GetSystemMetrics( SM_CXSCREEN ) ) && + ( GetSystemMetrics( SM_CYVIRTUALSCREEN ) >= GetSystemMetrics( SM_CYSCREEN ) ) ) { + fInitDone = TRUE; + return TRUE; + } + else + { + g_pfnGetSystemMetrics = NULL; + g_pfnMonitorFromWindow = NULL; + g_pfnMonitorFromRect = NULL; + g_pfnMonitorFromPoint = NULL; + g_pfnGetMonitorInfo = NULL; + g_pfnEnumDisplayMonitors = NULL; + g_pfnEnumDisplayDevices = NULL; + + fInitDone = TRUE; + return FALSE; + } +} + +//--------------------------------------------------------------------------- +// +// "stubbed" implementations of Monitor APIs that work with the primary // display +// +//--------------------------------------------------------------------------- + +int WINAPI +xGetSystemMetrics( int nIndex ){ + if ( InitMultipleMonitorStubs() ) { + return g_pfnGetSystemMetrics( nIndex ); + } + + switch ( nIndex ) + { + case SM_CMONITORS: + case SM_SAMEDISPLAYFORMAT: + return 1; + + case SM_XVIRTUALSCREEN: + case SM_YVIRTUALSCREEN: + return 0; + + case SM_CXVIRTUALSCREEN: + nIndex = SM_CXSCREEN; + break; + + case SM_CYVIRTUALSCREEN: + nIndex = SM_CYSCREEN; + break; + } + + return GetSystemMetrics( nIndex ); +} + + #define xPRIMARY_MONITOR ( (HMONITOR)0x42 ) + +HMONITOR WINAPI +xMonitorFromRect( LPCRECT lprcScreenCoords, + UINT uFlags ){ + if ( InitMultipleMonitorStubs() ) { + return g_pfnMonitorFromRect( lprcScreenCoords, uFlags ); + } + + if ( ( uFlags & ( MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST ) ) || + ( ( lprcScreenCoords->right > 0 ) && + ( lprcScreenCoords->bottom > 0 ) && + ( lprcScreenCoords->left < GetSystemMetrics( SM_CXSCREEN ) ) && + ( lprcScreenCoords->top < GetSystemMetrics( SM_CYSCREEN ) ) ) ) { + return xPRIMARY_MONITOR; + } + + return NULL; +} + +HMONITOR WINAPI +xMonitorFromWindow( HWND hWnd, + UINT uFlags ){ + RECT rc; + + if ( InitMultipleMonitorStubs() ) { + return g_pfnMonitorFromWindow( hWnd, uFlags ); + } + + if ( uFlags & ( MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST ) ) { + return xPRIMARY_MONITOR; + } + + if ( GetWindowRect( hWnd, &rc ) ) { + return xMonitorFromRect( &rc, uFlags ); + } + + return NULL; +} + +HMONITOR WINAPI +xMonitorFromPoint( POINT ptScreenCoords, + UINT uFlags ){ + if ( InitMultipleMonitorStubs() ) { + return g_pfnMonitorFromPoint( ptScreenCoords, uFlags ); + } + + if ( ( uFlags & ( MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST ) ) || + ( ( ptScreenCoords.x >= 0 ) && + ( ptScreenCoords.x < GetSystemMetrics( SM_CXSCREEN ) ) && + ( ptScreenCoords.y >= 0 ) && + ( ptScreenCoords.y < GetSystemMetrics( SM_CYSCREEN ) ) ) ) { + return xPRIMARY_MONITOR; + } + + return NULL; +} + +BOOL WINAPI +xGetMonitorInfo( HMONITOR hMonitor, + LPMONITORINFO lpMonitorInfo ){ + RECT rcWork; + + if ( InitMultipleMonitorStubs() ) { + return g_pfnGetMonitorInfo( hMonitor, lpMonitorInfo ); + } + + if ( ( hMonitor == xPRIMARY_MONITOR ) && lpMonitorInfo && + ( lpMonitorInfo->cbSize >= sizeof( MONITORINFO ) ) && + SystemParametersInfo( SPI_GETWORKAREA, 0, &rcWork, 0 ) ) { + lpMonitorInfo->rcMonitor.left = 0; + lpMonitorInfo->rcMonitor.top = 0; + lpMonitorInfo->rcMonitor.right = GetSystemMetrics( SM_CXSCREEN ); + lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics( SM_CYSCREEN ); + lpMonitorInfo->rcWork = rcWork; + lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; + + if ( lpMonitorInfo->cbSize >= sizeof( MONITORINFOEX ) ) { + lstrcpy( ( (MONITORINFOEX*)lpMonitorInfo )->szDevice, + TEXT( "DISPLAY" ) ); + } + + return TRUE; + } + + return FALSE; +} + +BOOL WINAPI +xEnumDisplayMonitors( HDC hdc, + LPCRECT lprcIntersect, + MONITORENUMPROC lpfnEnumProc, + LPARAM lData ){ + RECT rcCallback, rcLimit; + + if ( InitMultipleMonitorStubs() ) { + return g_pfnEnumDisplayMonitors( hdc, lprcIntersect, lpfnEnumProc, lData ); + } + + if ( !lpfnEnumProc ) { + return FALSE; + } + + rcLimit.left = 0; + rcLimit.top = 0; + rcLimit.right = GetSystemMetrics( SM_CXSCREEN ); + rcLimit.bottom = GetSystemMetrics( SM_CYSCREEN ); + + if ( hdc ) { + RECT rcClip; + HWND hWnd; + + if ( ( hWnd = WindowFromDC( hdc ) ) == NULL ) { + return FALSE; + } + + switch ( GetClipBox( hdc, &rcClip ) ) + { + default: + MapWindowPoints( NULL, hWnd, (LPPOINT)&rcLimit, 2 ); + if ( IntersectRect( &rcCallback, &rcClip, &rcLimit ) ) { + break; + } + //fall thru + case NULLREGION: + return TRUE; + case ERROR: + return FALSE; + } + + rcLimit = rcCallback; + } + + if ( !lprcIntersect || IntersectRect( &rcCallback, lprcIntersect, &rcLimit ) ) { + lpfnEnumProc( xPRIMARY_MONITOR, hdc, &rcCallback, lData ); + } + + return TRUE; +} + +BOOL WINAPI +xEnumDisplayDevices( LPVOID lpReserved, + int iDeviceNum, + DISPLAY_DEVICE * pDisplayDevice, + DWORD dwFlags ){ + if ( InitMultipleMonitorStubs() ) { + return g_pfnEnumDisplayDevices( lpReserved, iDeviceNum, pDisplayDevice, dwFlags ); + } + + return FALSE; +} #undef xPRIMARY_MONITOR #undef COMPILE_MULTIMON_STUBS #else // COMPILE_MULTIMON_STUBS - extern int WINAPI xGetSystemMetrics(int); - extern HMONITOR WINAPI xMonitorFromWindow(HWND, UINT); - extern HMONITOR WINAPI xMonitorFromRect(LPCRECT, UINT); - extern HMONITOR WINAPI xMonitorFromPoint(POINT, UINT); - extern BOOL WINAPI xGetMonitorInfo(HMONITOR, LPMONITORINFO); - extern BOOL WINAPI xEnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM); - extern BOOL WINAPI xEnumDisplayDevices(LPVOID, int, DISPLAY_DEVICE *, DWORD); +extern int WINAPI xGetSystemMetrics( int ); +extern HMONITOR WINAPI xMonitorFromWindow( HWND, UINT ); +extern HMONITOR WINAPI xMonitorFromRect( LPCRECT, UINT ); +extern HMONITOR WINAPI xMonitorFromPoint( POINT, UINT ); +extern BOOL WINAPI xGetMonitorInfo( HMONITOR, LPMONITORINFO ); +extern BOOL WINAPI xEnumDisplayMonitors( HDC, LPCRECT, MONITORENUMPROC, LPARAM ); +extern BOOL WINAPI xEnumDisplayDevices( LPVOID, int, DISPLAY_DEVICE *, DWORD ); #endif // COMPILE_MULTIMON_STUBS diff --git a/libs/pak/pakstuff.cpp b/libs/pak/pakstuff.cpp index b6028cc7..9fb89e70 100644 --- a/libs/pak/pakstuff.cpp +++ b/libs/pak/pakstuff.cpp @@ -1,29 +1,29 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2007 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 #include #include #include -#if defined (__linux__) || defined (__APPLE__) +#if defined ( __linux__ ) || defined ( __APPLE__ ) #include #endif #ifdef _WIN32 @@ -38,32 +38,31 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define FALSE 0 #endif -int m_nPAKIndex; +int m_nPAKIndex; FILE* pakfile[16]; -struct PACKDirectory pakdir; -PACKDirPtr pakdirptr = &pakdir; -UInt16 dirsize; -bool pakopen = false; -int f_type; -DIRECTORY *paktextures = NULL; -UInt32 PakColormapOffset; -UInt32 PakColormapSize; -DIRECTORY *dirhead = NULL; -bool g_bPK3 = false; -char g_strBasePaths[16][1024]; -int g_numBasePaths = 0; +struct PACKDirectory pakdir; +PACKDirPtr pakdirptr = &pakdir; +UInt16 dirsize; +bool pakopen = false; +int f_type; +DIRECTORY *paktextures = NULL; +UInt32 PakColormapOffset; +UInt32 PakColormapSize; +DIRECTORY *dirhead = NULL; +bool g_bPK3 = false; +char g_strBasePaths[16][1024]; +int g_numBasePaths = 0; struct PK3FileInfo { - unzFile m_zFile; - char *m_pName; - unz_s m_zInfo; - long m_lSize; - ~PK3FileInfo() - { - delete []m_pName; - } - bool operator ==(const PK3FileInfo& rhs) const { return strcmp(m_pName, rhs.m_pName) == 0; } + unzFile m_zFile; + char *m_pName; + unz_s m_zInfo; + long m_lSize; + ~PK3FileInfo(){ + delete []m_pName; + } + bool operator ==( const PK3FileInfo& rhs ) const { return strcmp( m_pName, rhs.m_pName ) == 0; } }; #define __PATHSEPERATOR '/' @@ -72,7 +71,7 @@ struct PK3FileInfo #ifdef LOG_PAKFAIL -#if defined (__linux__) || defined (__APPLE__) +#if defined ( __linux__ ) || defined ( __APPLE__ ) #include #include #endif @@ -81,193 +80,169 @@ struct PK3FileInfo class LogFile { public: - FILE *m_pFile; - LogFile(const char* pName) - { -#if defined (__linux__) || defined (__APPLE__) - // leo: use ~/.q3a/radiant/paklog instead of /tmp/paklog.txt - char *home = NULL; - - home = getenv("HOME"); - if ( home == NULL ) - { - uid_t id = getuid(); - struct passwd *pwd; - - setpwent(); - while( (pwd = getpwent()) != NULL ) - if( pwd->pw_uid == id ) - { - home = pwd->pw_dir; - break; - } - endpwent(); - } - - if (home != NULL) - { - char path[PATH_MAX]; - strcpy (path, home); - if (path[strlen(path)-1] != '/') - strcat (path, "/"); - strcat (path, ".q3a/radiant/paklog"); - m_pFile = fopen(path, "w"); - } - else +FILE *m_pFile; +LogFile( const char* pName ){ +#if defined ( __linux__ ) || defined ( __APPLE__ ) + // leo: use ~/.q3a/radiant/paklog instead of /tmp/paklog.txt + char *home = NULL; + + home = getenv( "HOME" ); + if ( home == NULL ) { + uid_t id = getuid(); + struct passwd *pwd; + + setpwent(); + while ( ( pwd = getpwent() ) != NULL ) + if ( pwd->pw_uid == id ) { + home = pwd->pw_dir; + break; + } + endpwent(); + } + + if ( home != NULL ) { + char path[PATH_MAX]; + strcpy( path, home ); + if ( path[strlen( path ) - 1] != '/' ) { + strcat( path, "/" ); + } + strcat( path, ".q3a/radiant/paklog" ); + m_pFile = fopen( path, "w" ); + } + else #endif - m_pFile = fopen(pName, "w"); - } - ~LogFile() - { - if (m_pFile) - { - fclose(m_pFile); - } - } - void Log(const char *pFormat, ...) - { - if (m_pFile == NULL) - return; - - va_list arg_ptr; - va_start(arg_ptr, pFormat); - fprintf(m_pFile, pFormat, arg_ptr); - va_end(arg_ptr); - } + m_pFile = fopen( pName, "w" ); +} +~LogFile(){ + if ( m_pFile ) { + fclose( m_pFile ); + } +} +void Log( const char *pFormat, ... ){ + if ( m_pFile == NULL ) { + return; + } + + va_list arg_ptr; + va_start( arg_ptr, pFormat ); + fprintf( m_pFile, pFormat, arg_ptr ); + va_end( arg_ptr ); +} }; -LogFile g_LogFile("/tmp/paklog.txt"); +LogFile g_LogFile( "/tmp/paklog.txt" ); #endif template class StrPtr : public Str { protected: - T* m_pPtr; - StrPtr() - { - m_pPtr = NULL; - } - - StrPtr(const char *pStr, T *p) : Str(pStr) - { - m_pPtr = p; - } - - T* Ptr() - { - return m_pPtr; - } - - T& Ref() - { - return *m_pPtr; - } - +T* m_pPtr; +StrPtr(){ + m_pPtr = NULL; +} + +StrPtr( const char *pStr, T *p ) : Str( pStr ){ + m_pPtr = p; +} + +T* Ptr(){ + return m_pPtr; +} + +T& Ref(){ + return *m_pPtr; +} + }; // PtrList // a list of ptrs -// +// template class PtrList { protected: - T *m_pPtr; - PtrList *m_pNext; +T *m_pPtr; +PtrList *m_pNext; public: - PtrList() - { - m_pNext = NULL; - m_pPtr = NULL; - } - - PtrList(T *ip) - { - m_pNext = NULL; - m_pPtr = ip; - } - - virtual ~PtrList() - { - delete m_pPtr; - } - - PtrList* Next() - { - return m_pNext; - } - - void Add(T *ip) - { - PtrList *pl = this; - while (pl && pl->m_pNext) - { - pl = pl->Next(); - } - pl->m_pNext = new PtrList(ip); - } - - void Remove() - { - PtrList *p = m_pNext; - if (p) - { - while (p->m_pNext != this && p->m_pNext != NULL) - { - p = p->m_pNext; - } - if (p->m_pNext == this) - { - p->m_pNext = m_pNext; - } - } - } - - virtual PtrList* Find(T *ip) - { - PtrList *p = m_pNext; - while (p) - { - if (*p->m_pPtr == *ip) - { - return p; - } - p = p->m_pNext; - } - return NULL; - } - - // remove vp from the list - void Remove(T *ip) - { - PtrList *p = Find(ip); - if (p) - { - p->Remove(); - } - } - - T* Ptr() - { - return m_pPtr; - } - - T& Ref() - { - return *m_pPtr; - } - - void RemoveAll() - { - PtrList *p = m_pNext; - while (p) - { - PtrList *p2 = p; - p = p->m_pNext; - delete p2; - } - } +PtrList(){ + m_pNext = NULL; + m_pPtr = NULL; +} + +PtrList( T *ip ){ + m_pNext = NULL; + m_pPtr = ip; +} + +virtual ~PtrList(){ + delete m_pPtr; +} + +PtrList* Next(){ + return m_pNext; +} + +void Add( T *ip ){ + PtrList *pl = this; + while ( pl && pl->m_pNext ) + { + pl = pl->Next(); + } + pl->m_pNext = new PtrList( ip ); +} + +void Remove(){ + PtrList *p = m_pNext; + if ( p ) { + while ( p->m_pNext != this && p->m_pNext != NULL ) + { + p = p->m_pNext; + } + if ( p->m_pNext == this ) { + p->m_pNext = m_pNext; + } + } +} + +virtual PtrList* Find( T *ip ){ + PtrList *p = m_pNext; + while ( p ) + { + if ( *p->m_pPtr == *ip ) { + return p; + } + p = p->m_pNext; + } + return NULL; +} + +// remove vp from the list +void Remove( T *ip ){ + PtrList *p = Find( ip ); + if ( p ) { + p->Remove(); + } +} + +T* Ptr(){ + return m_pPtr; +} + +T& Ref(){ + return *m_pPtr; +} + +void RemoveAll(){ + PtrList *p = m_pNext; + while ( p ) + { + PtrList *p2 = p; + p = p->m_pNext; + delete p2; + } +} }; @@ -284,137 +259,130 @@ ZFileList g_zFiles; #define PATH_SEPERATORS "/\\:\0" /* -char* __StrDup(char* pStr) -{ - if (pStr == NULL) + char* __StrDup(char* pStr) + { + if (pStr == NULL) pStr = ""; - return strcpy(new char[strlen(pStr)+1], pStr); -} + return strcpy(new char[strlen(pStr)+1], pStr); + } -char* __StrDup(const char* pStr) -{ - if (pStr == NULL) + char* __StrDup(const char* pStr) + { + if (pStr == NULL) pStr = ""; - return strcpy(new char[strlen(pStr)+1], pStr); -} -*/ + return strcpy(new char[strlen(pStr)+1], pStr); + } + */ #define MEM_BLOCKSIZE 4096 -void* __qblockmalloc(size_t nSize) -{ +void* __qblockmalloc( size_t nSize ){ void *b; - // round up to threshold - int nAllocSize = nSize % MEM_BLOCKSIZE; - if ( nAllocSize > 0) - { - nSize += MEM_BLOCKSIZE - nAllocSize; - } - b = malloc(nSize + 1); - memset (b, 0, nSize); + // round up to threshold + int nAllocSize = nSize % MEM_BLOCKSIZE; + if ( nAllocSize > 0 ) { + nSize += MEM_BLOCKSIZE - nAllocSize; + } + b = malloc( nSize + 1 ); + memset( b, 0, nSize ); return b; } -void* __qmalloc (size_t nSize) -{ +void* __qmalloc( size_t nSize ){ void *b; - b = malloc(nSize + 1); - memset (b, 0, nSize); + b = malloc( nSize + 1 ); + memset( b, 0, nSize ); return b; } /* -==================== -Extract file parts -==================== -*/ -void __ExtractFilePath (const char *path, char *dest) -{ + ==================== + Extract file parts + ==================== + */ +void __ExtractFilePath( const char *path, char *dest ){ 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) != __PATHSEPERATOR) + while ( src != path && *( src - 1 ) != __PATHSEPERATOR ) src--; - memcpy (dest, path, src-path); - dest[src-path] = 0; + memcpy( dest, path, src - path ); + dest[src - path] = 0; } -void __ExtractFileName (const char *path, char *dest) -{ +void __ExtractFileName( const char *path, char *dest ){ 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) != '\\' ) + while ( src != path && *( src - 1 ) != '/' + && *( src - 1 ) != '\\' ) src--; - while (*src) + while ( *src ) { *dest++ = *src++; } *dest = 0; } -void __ExtractFileBase (const char *path, char *dest) -{ +void __ExtractFileBase( const char *path, char *dest ){ 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) != '\\' ) + while ( src != path && *( src - 1 ) != '/' + && *( src - 1 ) != '\\' ) src--; - while (*src && *src != '.') + while ( *src && *src != '.' ) { *dest++ = *src++; } *dest = 0; } -void __ExtractFileExtension (const char *path, char *dest) -{ +void __ExtractFileExtension( const char *path, char *dest ){ 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) != '.') + while ( src != path && *( src - 1 ) != '.' ) src--; - if (src == path) - { - *dest = 0; // no extension + if ( src == path ) { + *dest = 0; // no extension return; } - strcpy (dest,src); + strcpy( dest,src ); } -void __ConvertDOSToUnixName( char *dst, const char *src ) -{ +void __ConvertDOSToUnixName( char *dst, const char *src ){ while ( *src ) { - if ( *src == '\\' ) + if ( *src == '\\' ) { *dst = '/'; - else + } + else{ *dst = *src; + } dst++; src++; } *dst = 0; @@ -424,67 +392,62 @@ void __ConvertDOSToUnixName( char *dst, const char *src ) -static void AddSlash(Str& str) -{ - int nLen = str.GetLength(); - if (nLen > 0) - { - if (str[nLen-1] != '\\' && str[nLen-1] != '/') - str += '\\'; - } +static void AddSlash( Str& str ){ + int nLen = str.GetLength(); + if ( nLen > 0 ) { + if ( str[nLen - 1] != '\\' && str[nLen - 1] != '/' ) { + str += '\\'; + } + } } -static void FindReplace(Str& strContents, const char* pTag, const char* pValue) -{ - if (strcmp(pTag, pValue) == 0) - return; - for (int nPos = strContents.Find(pTag); nPos >= 0; nPos = strContents.Find(pTag)) - { - int nRightLen = strContents.GetLength() - strlen(pTag) - nPos; - Str strLeft(strContents.Left(nPos)); - Str strRight(strContents.Right(nRightLen)); - strLeft += pValue; - strLeft += strRight; - strContents = strLeft; - } +static void FindReplace( Str& strContents, const char* pTag, const char* pValue ){ + if ( strcmp( pTag, pValue ) == 0 ) { + return; + } + for ( int nPos = strContents.Find( pTag ); nPos >= 0; nPos = strContents.Find( pTag ) ) + { + int nRightLen = strContents.GetLength() - strlen( pTag ) - nPos; + Str strLeft( strContents.Left( nPos ) ); + Str strRight( strContents.Right( nRightLen ) ); + strLeft += pValue; + strLeft += strRight; + strContents = strLeft; + } } -void ClearFileList(FILELIST **list) -{ - FILELIST *temp; +void ClearFileList( FILELIST **list ){ + FILELIST *temp; - while(*list) + while ( *list ) { temp = *list; - *list = (*list)->next; - free(temp); + *list = ( *list )->next; + free( temp ); } } -void ClearDirList(DIRLIST **list) -{ - DIRLIST *temp; +void ClearDirList( DIRLIST **list ){ + DIRLIST *temp; - while(*list) + while ( *list ) { temp = *list; - *list = (*list)->next; - free(temp); + *list = ( *list )->next; + free( temp ); } } -DIRECTORY *FindPakDir(DIRECTORY *dir, char *name) -{ - DIRECTORY *currentPtr; +DIRECTORY *FindPakDir( DIRECTORY *dir, char *name ){ + DIRECTORY *currentPtr; - for(currentPtr = dir; currentPtr; currentPtr = currentPtr->next) + for ( currentPtr = dir; currentPtr; currentPtr = currentPtr->next ) { - if(!stricmp(name, currentPtr->name)) - { + if ( !stricmp( name, currentPtr->name ) ) { return currentPtr; } } @@ -495,145 +458,144 @@ DIRECTORY *FindPakDir(DIRECTORY *dir, char *name) // LoadPK3FileList // --------------- // -// This gets passed a file mask which we want to remove as +// This gets passed a file mask which we want to remove as // we are only interested in the directory name and any given // extension. Only handles explicit filenames or *.something // -bool LoadPK3FileList(FILELIST **filelist, const char *pattern) -{ - char cSearch[WORK_LEN]; +bool LoadPK3FileList( FILELIST **filelist, const char *pattern ){ + char cSearch[WORK_LEN]; __ConvertDOSToUnixName( cSearch, pattern ); - char cPath[WORK_LEN]; - char cExt[WORK_LEN]; - char cFile[WORK_LEN]; - char cWork[WORK_LEN]; - __ExtractFilePath(pattern, cPath); - __ExtractFileName(pattern, cFile); - __ExtractFileExtension(pattern, cExt); - const char *pCompare = (strnicmp(cFile, "*.", 2) == 0) ? cExt : cFile; - - PK3List *p = g_PK3Files.Next(); - while (p != NULL) - { - // qualify the path - PK3FileInfo *pKey = p->Ptr(); - if (strstr(pKey->m_pName, cPath) && strstr(pKey->m_pName, pCompare)) - { - __ExtractFileName(pKey->m_pName, cWork); - AddToFileListAlphabetized(filelist, cWork, 0, 0, false); - } - p = p->Next(); - } - return (*filelist) != NULL; -} - -bool GetPackFileList(FILELIST **filelist, char *pattern) -{ - char *str1, *str2; - int i; - DIRECTORY *dummy = paktextures; - FILELIST *temp; + char cPath[WORK_LEN]; + char cExt[WORK_LEN]; + char cFile[WORK_LEN]; + char cWork[WORK_LEN]; + __ExtractFilePath( pattern, cPath ); + __ExtractFileName( pattern, cFile ); + __ExtractFileExtension( pattern, cExt ); + const char *pCompare = ( strnicmp( cFile, "*.", 2 ) == 0 ) ? cExt : cFile; + + PK3List *p = g_PK3Files.Next(); + while ( p != NULL ) + { + // qualify the path + PK3FileInfo *pKey = p->Ptr(); + if ( strstr( pKey->m_pName, cPath ) && strstr( pKey->m_pName, pCompare ) ) { + __ExtractFileName( pKey->m_pName, cWork ); + AddToFileListAlphabetized( filelist, cWork, 0, 0, false ); + } + p = p->Next(); + } + return ( *filelist ) != NULL; +} + +bool GetPackFileList( FILELIST **filelist, char *pattern ){ + char *str1, *str2; + int i; + DIRECTORY *dummy = paktextures; + FILELIST *temp; - if (!pakopen) + if ( !pakopen ) { return false; + } - if (g_bPK3) - { - return LoadPK3FileList(filelist, pattern); - } + if ( g_bPK3 ) { + return LoadPK3FileList( filelist, pattern ); + } str1 = pattern; - for(i = 0; pattern[i] != '\0'; i++) + for ( i = 0; pattern[i] != '\0'; i++ ) { - if(pattern[i] == '\\') + if ( pattern[i] == '\\' ) { pattern[i] = '/'; + } } - while(strchr(str1, '/')) + while ( strchr( str1, '/' ) ) { - str2 = strchr(str1, '/'); + str2 = strchr( str1, '/' ); *str2++ = '\0'; - dummy = FindPakDir(dummy, str1); - if(!dummy) + dummy = FindPakDir( dummy, str1 ); + if ( !dummy ) { return false; + } str1 = str2; } - for(temp = dummy->files; temp; temp=temp->next) + for ( temp = dummy->files; temp; temp = temp->next ) { - AddToFileListAlphabetized(filelist, temp->filename, temp->offset, 0, false); + AddToFileListAlphabetized( filelist, temp->filename, temp->offset, 0, false ); } return true; } -bool GetPackTextureDirs(DIRLIST **dirlist) -{ - UInt16 i; - char buf[57]; +bool GetPackTextureDirs( DIRLIST **dirlist ){ + UInt16 i; + char buf[57]; - if (!pakopen) + if ( !pakopen ) { return 1; + } - if (g_bPK3) - { - StrList *pl = g_PK3TexturePaths.Next(); - while (pl != NULL) - { - AddToDirListAlphabetized(dirlist, pl->Ref(), 0); - pl = pl->Next(); - } - return true; - } - - for (i = 0; i < dirsize; i++) - { - if(!strnicmp(pakdirptr[i].name, "textures", 8)) + if ( g_bPK3 ) { + StrList *pl = g_PK3TexturePaths.Next(); + while ( pl != NULL ) { - strncpy(buf, &(pakdirptr[i].name[9]), 46); - if(strchr(buf, '\\')) - *strchr(buf, '\\') = '\0'; - else if(strchr(buf, '/')) - *strchr(buf, '/') = '\0'; - else - buf[56] = '\0'; - - if(strchr(buf, '.')) + AddToDirListAlphabetized( dirlist, pl->Ref(), 0 ); + pl = pl->Next(); + } + return true; + } + + for ( i = 0; i < dirsize; i++ ) + { + if ( !strnicmp( pakdirptr[i].name, "textures", 8 ) ) { + strncpy( buf, &( pakdirptr[i].name[9] ), 46 ); + if ( strchr( buf, '\\' ) ) { + *strchr( buf, '\\' ) = '\0'; + } + else if ( strchr( buf, '/' ) ) { + *strchr( buf, '/' ) = '\0'; + } + else{ + buf[56] = '\0'; + } + + if ( strchr( buf, '.' ) ) { continue; + } - AddToDirListAlphabetized(dirlist, buf, 0); + AddToDirListAlphabetized( dirlist, buf, 0 ); } } return true; } -bool AddToDirListAlphabetized(DIRLIST **list, char *dirname, int from) -{ - DIRLIST *currentPtr, *previousPtr, *newPtr; +bool AddToDirListAlphabetized( DIRLIST **list, char *dirname, int from ){ + DIRLIST *currentPtr, *previousPtr, *newPtr; - strlwr(dirname); - for(currentPtr = *list; currentPtr; currentPtr = currentPtr->next) + strlwr( dirname ); + for ( currentPtr = *list; currentPtr; currentPtr = currentPtr->next ) { - if(!stricmp(dirname, currentPtr->dirname)) - { + if ( !stricmp( dirname, currentPtr->dirname ) ) { return false; } } previousPtr = NULL; currentPtr = *list; - if((newPtr = (DIRLIST *)__qmalloc(sizeof(DIRLIST))) == NULL) + if ( ( newPtr = (DIRLIST *)__qmalloc( sizeof( DIRLIST ) ) ) == NULL ) { return false; + } - strcpy(newPtr->dirname, dirname); + strcpy( newPtr->dirname, dirname ); newPtr->from = from; - while(currentPtr != NULL && stricmp(dirname, currentPtr->dirname) > 0) + while ( currentPtr != NULL && stricmp( dirname, currentPtr->dirname ) > 0 ) { previousPtr = currentPtr; currentPtr = currentPtr->next; } //End while - if(previousPtr == NULL) - { + if ( previousPtr == NULL ) { newPtr->next = *list; *list = newPtr; } //End if @@ -645,34 +607,32 @@ bool AddToDirListAlphabetized(DIRLIST **list, char *dirname, int from) return true; } -bool AddToFileListAlphabetized(FILELIST **list, char *filename, UInt32 offset, UInt32 size, bool dirs) -{ - FILELIST *currentPtr, *previousPtr, *newPtr; +bool AddToFileListAlphabetized( FILELIST **list, char *filename, UInt32 offset, UInt32 size, bool dirs ){ + FILELIST *currentPtr, *previousPtr, *newPtr; - for(currentPtr = *list; currentPtr; currentPtr = currentPtr->next) + for ( currentPtr = *list; currentPtr; currentPtr = currentPtr->next ) { - if(!stricmp(filename, currentPtr->filename)) - { + if ( !stricmp( filename, currentPtr->filename ) ) { return false; } } previousPtr = NULL; currentPtr = *list; - if((newPtr = (FILELIST *)__qmalloc(sizeof(FILELIST))) == NULL) + if ( ( newPtr = (FILELIST *)__qmalloc( sizeof( FILELIST ) ) ) == NULL ) { return false; + } - strcpy(newPtr->filename, filename); + strcpy( newPtr->filename, filename ); newPtr->offset = offset; newPtr->size = size; - while(currentPtr != NULL && stricmp(filename, currentPtr->filename) > 0) + while ( currentPtr != NULL && stricmp( filename, currentPtr->filename ) > 0 ) { previousPtr = currentPtr; currentPtr = currentPtr->next; } //End while - if(previousPtr == NULL) - { + if ( previousPtr == NULL ) { newPtr->next = *list; *list = newPtr; } //End if @@ -684,103 +644,94 @@ bool AddToFileListAlphabetized(FILELIST **list, char *filename, UInt32 offset, U return true; } -int PakLoadAnyFile(const char *filename, void **bufferptr) -{ - char cWork[WORK_LEN]; - if (g_bPK3) - { - // leo: hack to be able to use pak files from multiple directories - for (int i = 0; i < g_numBasePaths; i++) - { - PK3FileInfo *pInfo; - Str strKey; - // need to lookup the file without the base/texture path on it - Str strBase(g_strBasePaths[i]); - AddSlash(strBase); - __ConvertDOSToUnixName(cWork, strBase); - Str strFile(filename); - __ConvertDOSToUnixName(strFile, strFile); - strFile.MakeLower(); - strlwr(cWork); - FindReplace(strFile, cWork, ""); - - PK3FileInfo infoFind; - infoFind.m_pName = __StrDup(strFile.GetBuffer()); - PK3List *pList = g_PK3Files.Find(&infoFind); - if (pList) - { - pInfo = pList->Ptr(); - memcpy(pInfo->m_zFile, &pInfo->m_zInfo, sizeof(unz_s)); - if (unzOpenCurrentFile(pInfo->m_zFile) == UNZ_OK) - { - void *buffer = __qblockmalloc(pInfo->m_lSize+1); - int n = unzReadCurrentFile(pInfo->m_zFile , buffer, pInfo->m_lSize); - *bufferptr = buffer; - unzCloseCurrentFile(pInfo->m_zFile); - return n; - } - } - } +int PakLoadAnyFile( const char *filename, void **bufferptr ){ + char cWork[WORK_LEN]; + if ( g_bPK3 ) { + // leo: hack to be able to use pak files from multiple directories + for ( int i = 0; i < g_numBasePaths; i++ ) + { + PK3FileInfo *pInfo; + Str strKey; + // need to lookup the file without the base/texture path on it + Str strBase( g_strBasePaths[i] ); + AddSlash( strBase ); + __ConvertDOSToUnixName( cWork, strBase ); + Str strFile( filename ); + __ConvertDOSToUnixName( strFile, strFile ); + strFile.MakeLower(); + strlwr( cWork ); + FindReplace( strFile, cWork, "" ); + + PK3FileInfo infoFind; + infoFind.m_pName = __StrDup( strFile.GetBuffer() ); + PK3List *pList = g_PK3Files.Find( &infoFind ); + if ( pList ) { + pInfo = pList->Ptr(); + memcpy( pInfo->m_zFile, &pInfo->m_zInfo, sizeof( unz_s ) ); + if ( unzOpenCurrentFile( pInfo->m_zFile ) == UNZ_OK ) { + void *buffer = __qblockmalloc( pInfo->m_lSize + 1 ); + int n = unzReadCurrentFile( pInfo->m_zFile, buffer, pInfo->m_lSize ); + *bufferptr = buffer; + unzCloseCurrentFile( pInfo->m_zFile ); + return n; + } + } + } #ifdef LOG_PAKFAIL - sprintf(cWork, "PAK failed on %s\n", filename); - g_LogFile.Log(cWork); + sprintf( cWork, "PAK failed on %s\n", filename ); + g_LogFile.Log( cWork ); #endif - return -1; - } - - for (int i = 0; i < dirsize; i++) - { - if(!stricmp(filename, pakdirptr[i].name)) - { - if (fseek(pakfile[m_nPAKIndex], pakdirptr[i].offset, SEEK_SET) >= 0) - { - void *buffer = __qmalloc (pakdirptr[i].size+1); - ((char *)buffer)[pakdirptr[i].size] = 0; - if (fread(buffer, 1, pakdirptr[i].size, pakfile[m_nPAKIndex]) == pakdirptr[i].size) - { - *bufferptr = buffer; - return pakdirptr[i].size; - } - } - } - } + return -1; + } + + for ( int i = 0; i < dirsize; i++ ) + { + if ( !stricmp( filename, pakdirptr[i].name ) ) { + if ( fseek( pakfile[m_nPAKIndex], pakdirptr[i].offset, SEEK_SET ) >= 0 ) { + void *buffer = __qmalloc( pakdirptr[i].size + 1 ); + ( (char *)buffer )[pakdirptr[i].size] = 0; + if ( fread( buffer, 1, pakdirptr[i].size, pakfile[m_nPAKIndex] ) == pakdirptr[i].size ) { + *bufferptr = buffer; + return pakdirptr[i].size; + } + } + } + } #ifdef LOG_PAKFAIL - sprintf(cWork, "PAK failed on %s\n", filename); - g_LogFile.Log(cWork); + sprintf( cWork, "PAK failed on %s\n", filename ); + g_LogFile.Log( cWork ); #endif - return -1; + return -1; } -DIRECTORY *AddPakDir(DIRECTORY **dir, char *name) -{ - DIRECTORY *currentPtr, *previousPtr, *newPtr; +DIRECTORY *AddPakDir( DIRECTORY **dir, char *name ){ + DIRECTORY *currentPtr, *previousPtr, *newPtr; - for(currentPtr = *dir; currentPtr; currentPtr = currentPtr->next) + for ( currentPtr = *dir; currentPtr; currentPtr = currentPtr->next ) { - if(!stricmp(name, currentPtr->name)) - { + if ( !stricmp( name, currentPtr->name ) ) { return currentPtr; } } previousPtr = NULL; currentPtr = *dir; - if((newPtr = (DIRECTORY *)__qmalloc(sizeof(DIRECTORY))) == NULL) + if ( ( newPtr = (DIRECTORY *)__qmalloc( sizeof( DIRECTORY ) ) ) == NULL ) { return NULL; + } - strcpy(newPtr->name, name); + strcpy( newPtr->name, name ); newPtr->files = NULL; - while(currentPtr != NULL && stricmp(name, currentPtr->name) > 0) + while ( currentPtr != NULL && stricmp( name, currentPtr->name ) > 0 ) { previousPtr = currentPtr; currentPtr = currentPtr->next; } - if(previousPtr == NULL) - { + if ( previousPtr == NULL ) { newPtr->next = *dir; *dir = newPtr; } @@ -797,183 +748,165 @@ DIRECTORY *AddPakDir(DIRECTORY **dir, char *name) // ------- // Opens a PK3 ( or zip ) file and creates a list of filenames // and zip info structures -// -bool OpenPK3(const char *filename) -{ - char cFilename[WORK_LEN]; - char cName[WORK_LEN]; - char cWork[WORK_LEN]; - unz_file_info zInfo; - unzFile *zFile = new unzFile(unzOpen(filename)); - g_zFiles.Add(zFile); - if (zFile != NULL) - { - int nStatus = unzGoToFirstFile(*zFile); - while (nStatus == UNZ_OK) - { - cFilename[0] = '\0'; - unzGetCurrentFileInfo(*zFile, &zInfo, cFilename, WORK_LEN, NULL, 0, NULL, 0); - strlwr(cFilename); - __ConvertDOSToUnixName( cWork, cFilename); - if (strstr(cWork, ".") != NULL) - { - PK3FileInfo *pInfo = new PK3FileInfo(); - pInfo->m_pName = __StrDup(cWork); - memcpy(&pInfo->m_zInfo, (unz_s*)*zFile, sizeof(unz_s)); - pInfo->m_lSize = zInfo.uncompressed_size; - pInfo->m_zFile = *zFile; - g_PK3Files.Add(pInfo); - } - char *p = strstr(cFilename, TEXTURE_PATH); - if (p != NULL) - { - // FIXME: path differences per os ? - // catch solo directory entry - if (strlen(p) > strlen(TEXTURE_PATH) + 1) - { - // skip textures + path seperator - p += strlen(TEXTURE_PATH) + 1; - int nEnd = strcspn(p, PATH_SEPERATORS); - strncpy(cName, p, nEnd); - cName[nEnd] = '\0'; - - bool bFound = false; - StrList *pl = g_PK3TexturePaths.Next(); - while (pl != NULL) - { - if (strcmpi(pl->Ref(), cName) == 0) - { - // already have this, continue - bFound = true; - break; - } - pl = pl->Next(); - } - if (!bFound) - { - g_PK3TexturePaths.Add(new Str(cName)); - } - } - } - nStatus = unzGoToNextFile(*zFile); - } - } - return (zFile != NULL); -} - -void closePK3(unzFile zf) -{ - unzClose(zf); +// +bool OpenPK3( const char *filename ){ + char cFilename[WORK_LEN]; + char cName[WORK_LEN]; + char cWork[WORK_LEN]; + unz_file_info zInfo; + unzFile *zFile = new unzFile( unzOpen( filename ) ); + g_zFiles.Add( zFile ); + if ( zFile != NULL ) { + int nStatus = unzGoToFirstFile( *zFile ); + while ( nStatus == UNZ_OK ) + { + cFilename[0] = '\0'; + unzGetCurrentFileInfo( *zFile, &zInfo, cFilename, WORK_LEN, NULL, 0, NULL, 0 ); + strlwr( cFilename ); + __ConvertDOSToUnixName( cWork, cFilename ); + if ( strstr( cWork, "." ) != NULL ) { + PK3FileInfo *pInfo = new PK3FileInfo(); + pInfo->m_pName = __StrDup( cWork ); + memcpy( &pInfo->m_zInfo, (unz_s*)*zFile, sizeof( unz_s ) ); + pInfo->m_lSize = zInfo.uncompressed_size; + pInfo->m_zFile = *zFile; + g_PK3Files.Add( pInfo ); + } + char *p = strstr( cFilename, TEXTURE_PATH ); + if ( p != NULL ) { + // FIXME: path differences per os ? + // catch solo directory entry + if ( strlen( p ) > strlen( TEXTURE_PATH ) + 1 ) { + // skip textures + path seperator + p += strlen( TEXTURE_PATH ) + 1; + int nEnd = strcspn( p, PATH_SEPERATORS ); + strncpy( cName, p, nEnd ); + cName[nEnd] = '\0'; + + bool bFound = false; + StrList *pl = g_PK3TexturePaths.Next(); + while ( pl != NULL ) + { + if ( strcmpi( pl->Ref(), cName ) == 0 ) { + // already have this, continue + bFound = true; + break; + } + pl = pl->Next(); + } + if ( !bFound ) { + g_PK3TexturePaths.Add( new Str( cName ) ); + } + } + } + nStatus = unzGoToNextFile( *zFile ); + } + } + return ( zFile != NULL ); } -void OpenPakFile(const char *filename) -{ - if(!pakopen) - paktextures = NULL; +void closePK3( unzFile zf ){ + unzClose( zf ); +} - pakopen = g_bPK3 = OpenPK3(filename); +void OpenPakFile( const char *filename ){ + if ( !pakopen ) { + paktextures = NULL; + } + + pakopen = g_bPK3 = OpenPK3( filename ); } -void ClearPaKDir(DIRECTORY **dir) -{ - DIRECTORY *d1 = *dir, *d2; +void ClearPaKDir( DIRECTORY **dir ){ + DIRECTORY *d1 = *dir, *d2; - while(d1) + while ( d1 ) { - ClearFileList(&(d1->files)); + ClearFileList( &( d1->files ) ); d2 = d1; d1 = d1->next; - free(d2); + free( d2 ); } } -void CleanUpPakDirs() -{ - ClearPaKDir(&paktextures); - paktextures = NULL; - dirhead = NULL; - g_PK3TexturePaths.RemoveAll(); - g_PK3Files.RemoveAll(); +void CleanUpPakDirs(){ + ClearPaKDir( &paktextures ); + paktextures = NULL; + dirhead = NULL; + g_PK3TexturePaths.RemoveAll(); + g_PK3Files.RemoveAll(); } -void ClosePakFile(void) -{ - if(pakopen) - { - if (g_bPK3) - { - ZFileList *p = g_zFiles.Next(); - while (p != NULL) - { - unzFile uz = p->Ref(); - closePK3(uz); - p = p->Next(); - } - } - else - { - fclose(pakfile[m_nPAKIndex]); - } - } +void ClosePakFile( void ){ + if ( pakopen ) { + if ( g_bPK3 ) { + ZFileList *p = g_zFiles.Next(); + while ( p != NULL ) + { + unzFile uz = p->Ref(); + closePK3( uz ); + p = p->Next(); + } + } + else + { + fclose( pakfile[m_nPAKIndex] ); + } + } pakopen = false; - CleanUpPakDirs(); + CleanUpPakDirs(); } -void WINAPI InitPakFile(const char * pBasePath, const char *pName) -{ - if (g_numBasePaths == 0) - { - m_nPAKIndex = 0; - pakopen = false; - paktextures = NULL; - } - strcpy(g_strBasePaths[g_numBasePaths], pBasePath); - g_numBasePaths++; - - if (pName == NULL) - { - //++timo FIXME: use some kind of compatibility lib here! -#if defined (__linux__) || defined (__APPLE__) - char cWork[WORK_LEN]; - struct dirent *dirlist; - DIR *dir; - - dir = opendir (pBasePath); - if (dir != NULL) - { - while ((dirlist = readdir (dir)) != NULL) - { - if (strstr (dirlist->d_name, ".pk3") == NULL) - continue; - sprintf(cWork, "%s/%s", pBasePath, dirlist->d_name); - OpenPakFile(cWork); - } - closedir (dir); - } +void WINAPI InitPakFile( const char * pBasePath, const char *pName ){ + if ( g_numBasePaths == 0 ) { + m_nPAKIndex = 0; + pakopen = false; + paktextures = NULL; + } + strcpy( g_strBasePaths[g_numBasePaths], pBasePath ); + g_numBasePaths++; + + if ( pName == NULL ) { + //++timo FIXME: use some kind of compatibility lib here! +#if defined ( __linux__ ) || defined ( __APPLE__ ) + char cWork[WORK_LEN]; + struct dirent *dirlist; + DIR *dir; + + dir = opendir( pBasePath ); + if ( dir != NULL ) { + while ( ( dirlist = readdir( dir ) ) != NULL ) + { + if ( strstr( dirlist->d_name, ".pk3" ) == NULL ) { + continue; + } + sprintf( cWork, "%s/%s", pBasePath, dirlist->d_name ); + OpenPakFile( cWork ); + } + closedir( dir ); + } #endif #ifdef _WIN32 - char cWork[WORK_LEN]; - Str strPath(pBasePath); - AddSlash(strPath); - strPath += "*.pk3"; - bool bGo = true; - struct _finddata_t fileinfo; - int handle = _findfirst (strPath, &fileinfo); - if (handle != -1) - { - do - { - sprintf(cWork, "%s/%s", pBasePath, fileinfo.name); - OpenPakFile(cWork); - } while (_findnext( handle, &fileinfo ) != -1); - _findclose (handle); - } + char cWork[WORK_LEN]; + Str strPath( pBasePath ); + AddSlash( strPath ); + strPath += "*.pk3"; + bool bGo = true; + struct _finddata_t fileinfo; + int handle = _findfirst( strPath, &fileinfo ); + if ( handle != -1 ) { + do + { + sprintf( cWork, "%s/%s", pBasePath, fileinfo.name ); + OpenPakFile( cWork ); + } while ( _findnext( handle, &fileinfo ) != -1 ); + _findclose( handle ); + } #endif - } - else - { - OpenPakFile(pName); - } + } + else + { + OpenPakFile( pName ); + } } - diff --git a/libs/pak/unzip.cpp b/libs/pak/unzip.cpp index 5cf24528..269c76c3 100644 --- a/libs/pak/unzip.cpp +++ b/libs/pak/unzip.cpp @@ -1,10 +1,10 @@ /***************************************************************************** - * name: unzip.c - * - * desc: IO on .zip files using portions of zlib - * - * - *****************************************************************************/ +* name: unzip.c +* +* desc: IO on .zip files using portions of zlib +* +* +*****************************************************************************/ #include #include @@ -13,7 +13,7 @@ typedef unsigned char byte; -/* unzip.h -- IO for uncompress .zip files using zlib +/* unzip.h -- IO for uncompress .zip files using zlib Version 0.15 beta, Mar 19th, 1998, Copyright (C) 1998 Gilles Vollant @@ -30,62 +30,62 @@ typedef unsigned char byte; Condition of use and distribution are the same than zlib : - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - 1. The origin of this software must not be misrepresented; you must not + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. + 3. This notice may not be removed or altered from any source distribution. -*/ -/* for more info about .ZIP format, see + */ +/* for more info about .ZIP format, see ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip PkWare has also a specification at : ftp://ftp.pkware.com/probdesc.zip */ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.1.3, July 9th, 1998 + version 1.1.3, July 9th, 1998 - Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - 1. The origin of this software must not be misrepresented; you must not + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. + 3. This notice may not be removed or altered from any source distribution. - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). -*/ + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). + */ /* zconf.h -- configuration of the zlib compression library * Copyright (C) 1995-1998 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ #ifndef _ZCONF_H @@ -111,26 +111,26 @@ typedef unsigned char byte; /* The memory requirements for deflate are (in bytes): (1 << (windowBits+2)) + (1 << (memLevel+9)) - that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) - plus a few kilobytes for small objects. For example, if you want to reduce - the default memory requirements from 256K to 128K, compile with + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" - Of course this will generally degrade compression (there's no free lunch). + Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits - that is, 32K for windowBits=15 (default value) plus a few kilobytes - for small objects. -*/ + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. + */ - /* Type declarations */ +/* Type declarations */ #ifndef OF /* function prototypes */ -#define OF(args) args +#define OF( args ) args #endif -typedef unsigned char Byte; /* 8 bits */ -typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ +typedef unsigned char Byte; /* 8 bits */ +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ typedef Byte *voidp; #ifndef SEEK_SET @@ -143,26 +143,26 @@ typedef Byte *voidp; #define ZLIB_VERSION "1.1.3" -/* +/* The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output - (providing more output space) before each call. + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. The library also supports reading and writing files in gzip (.gz) format - with an interface similar to that of stdio. + with an interface similar to that of stdio. The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. -*/ + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. + */ /* The application must update next_in and avail_in when avail_in has @@ -194,9 +194,9 @@ typedef Byte *voidp; the uncompressed data and may be saved for use in the decompressor (particularly if the decompressor wants to decompress everything in a single step). -*/ + */ - /* constants */ +/* constants */ #define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ @@ -208,12 +208,12 @@ typedef Byte *voidp; #define Z_OK 0 #define Z_STREAM_END 1 #define Z_NEED_DICT 2 -#define Z_ERRNO (-1) -#define Z_STREAM_ERROR (-2) -#define Z_DATA_ERROR (-3) -#define Z_MEM_ERROR (-4) -#define Z_BUF_ERROR (-5) -#define Z_VERSION_ERROR (-6) +#define Z_ERRNO ( -1 ) +#define Z_STREAM_ERROR ( -2 ) +#define Z_DATA_ERROR ( -3 ) +#define Z_MEM_ERROR ( -4 ) +#define Z_BUF_ERROR ( -5 ) +#define Z_VERSION_ERROR ( -6 ) /* Return codes for the compression/decompression functions. Negative * values are errors, positive values are used for special but normal events. */ @@ -221,7 +221,7 @@ typedef Byte *voidp; #define Z_NO_COMPRESSION 0 #define Z_BEST_SPEED 1 #define Z_BEST_COMPRESSION 9 -#define Z_DEFAULT_COMPRESSION (-1) +#define Z_DEFAULT_COMPRESSION ( -1 ) /* compression levels */ #define Z_FILTERED 1 @@ -242,17 +242,17 @@ typedef Byte *voidp; #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ - /* basic functions */ +/* basic functions */ -const char * zlibVersion OF((void)); +const char * zlibVersion OF( (void) ); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check is automatically made by deflateInit and inflateInit. */ -/* -int deflateInit OF((z_streamp strm, int level)); +/* + int deflateInit OF((z_streamp strm, int level)); Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. @@ -271,88 +271,88 @@ int deflateInit OF((z_streamp strm, int level)); with the version assumed by the caller (ZLIB_VERSION). msg is set to null if there is no error message. deflateInit does not perform any compression: this will be done by deflate(). -*/ + */ -int deflate OF((z_streamp strm, int flush)); +int deflate OF( ( z_streamp strm, int flush ) ); /* deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when - forced to flush. + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. The detailed semantics are as follows. deflate performs one or both of the - following actions: + following actions: - - Compress more input starting at next_in and update next_in and avail_in + - Compress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - - Provide more output starting at next_out and update next_out and avail_out + - Provide more output starting at next_out and update next_out and avail_out accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter should be set only when necessary (in interactive applications). Some output may be provided even if flush is not set. - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. If the parameter flush is set to Z_SYNC_FLUSH, all pending output is - flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. If flush is set to Z_FULL_FLUSH, all output is flushed as with - Z_SYNC_FLUSH, and the compression state is reset so that decompression can - restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade - the compression. + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + the compression. If deflate returns with avail_out == 0, this function must be called again - with the same value of the flush parameter and more output space (updated - avail_out), until the flush is complete (deflate returns with non-zero - avail_out). + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. - + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - 0.1% larger than avail_in plus 12 bytes. If deflate does not return - Z_STREAM_END, then it must be called again as described above. + is to be done in a single step. In this case, avail_out must be at least + 0.1% larger than avail_in plus 12 bytes. If deflate does not return + Z_STREAM_END, then it must be called again as described above. deflate() sets strm->adler to the adler32 checksum of all input read - so (that is, total_in bytes). + so (that is, total_in bytes). deflate() may update data_type if it can make a good guess about - the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. + the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input - processed or more output produced), Z_STREAM_END if all input has been - consumed and all output has been produced (only when flush is set to - Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). -*/ + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). + */ -int deflateEnd OF((z_streamp strm)); +int deflateEnd OF( (z_streamp strm) ); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any @@ -363,11 +363,11 @@ int deflateEnd OF((z_streamp strm)); prematurely (some input or output was discarded). In the error case, msg may be set but then points to a static string (which must not be deallocated). -*/ + */ -/* -int inflateInit OF((z_streamp strm)); +/* + int inflateInit OF((z_streamp strm)); Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by @@ -384,79 +384,79 @@ int inflateInit OF((z_streamp strm)); message. inflateInit does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) -*/ + */ -int inflate OF((z_streamp strm, int flush)); +int inflate OF( ( z_streamp strm, int flush ) ); /* inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may some - introduce some output latency (reading input without producing any output) - except when forced to flush. + buffer becomes empty or the output buffer becomes full. It may some + introduce some output latency (reading input without producing any output) + except when forced to flush. - The detailed semantics are as follows. inflate performs one or both of the - following actions: + The detailed semantics are as follows. inflate performs one or both of the + following actions: - - Decompress more input starting at next_in and update next_in and avail_in + - Decompress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in is updated and processing will resume at this point for the next call of inflate(). - - Provide more output starting at next_out and update next_out and avail_out + - Provide more output starting at next_out and update next_out and avail_out accordingly. inflate() provides as much output as possible, until there is no more input data or no more space in the output buffer (see below about the flush parameter). - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much - output as possible to the output buffer. The flushing behavior of inflate is - not specified for values of the flush parameter other than Z_SYNC_FLUSH - and Z_FINISH, but the current implementation actually flushes as much output - as possible anyway. + output as possible to the output buffer. The flushing behavior of inflate is + not specified for values of the flush parameter other than Z_SYNC_FLUSH + and Z_FINISH, but the current implementation actually flushes as much output + as possible anyway. inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster routine - may be used for the single inflate() call. + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster routine + may be used for the single inflate() call. If a preset dictionary is needed at this point (see inflateSetDictionary - below), inflate sets strm-adler to the adler32 checksum of the - dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise - it sets strm->adler to the adler32 checksum of all output produced - so (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or - an error code as described below. At the end of the stream, inflate() - checks that its computed adler32 checksum is equal to that saved by the - compressor and returns Z_STREAM_END only if the checksum is correct. + below), inflate sets strm-adler to the adler32 checksum of the + dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise + it sets strm->adler to the adler32 checksum of all output produced + so (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or + an error code as described below. At the end of the stream, inflate() + checks that its computed adler32 checksum is equal to that saved by the + compressor and returns Z_STREAM_END only if the checksum is correct. inflate() returns Z_OK if some progress has been made (more input processed - or more output produced), Z_STREAM_END if the end of the compressed data has - been reached and all uncompressed output has been produced, Z_NEED_DICT if a - preset dictionary is needed at this point, Z_DATA_ERROR if the input data was - corrupted (input stream not conforming to the zlib format or incorrect - adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent - (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if no progress is possible or if there was not - enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR - case, the application may then call inflateSync to look for a good - compression block. -*/ - - -int inflateEnd OF((z_streamp strm)); + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect + adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent + (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if no progress is possible or if there was not + enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR + case, the application may then call inflateSync to look for a good + compression block. + */ + + +int inflateEnd OF( (z_streamp strm) ); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any @@ -465,16 +465,16 @@ int inflateEnd OF((z_streamp strm)); inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent. In the error case, msg may be set but then points to a static string (which must not be deallocated). -*/ + */ - /* Advanced functions */ +/* Advanced functions */ /* The following functions are needed only in some special applications. -*/ + */ -/* -int deflateInit2 OF((z_streamp strm, +/* + int deflateInit2 OF((z_streamp strm, int level, int method, int windowBits, @@ -515,11 +515,11 @@ int deflateInit2 OF((z_streamp strm, memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid method). msg is set to null if there is no error message. deflateInit2 does not perform any compression: this will be done by deflate(). -*/ - -int deflateSetDictionary OF((z_streamp strm, - const Byte *dictionary, - uInt dictLength)); + */ + +int deflateSetDictionary OF( ( z_streamp strm, + const Byte * dictionary, + uInt dictLength ) ); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. This function must be called @@ -551,10 +551,10 @@ int deflateSetDictionary OF((z_streamp strm, inconsistent (for example if deflate has already been called for this stream or if the compression method is bsort). deflateSetDictionary does not perform any compression: this will be done by deflate(). -*/ + */ -int deflateCopy OF((z_streamp dest, - z_streamp source)); +int deflateCopy OF( ( z_streamp dest, + z_streamp source ) ); /* Sets the destination stream as a complete copy of the source stream. @@ -569,9 +569,9 @@ int deflateCopy OF((z_streamp dest, enough memory, Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc being NULL). msg is left unchanged in both source and destination. -*/ + */ -int deflateReset OF((z_streamp strm)); +int deflateReset OF( (z_streamp strm) ); /* This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate all the internal compression state. @@ -580,11 +580,11 @@ int deflateReset OF((z_streamp strm)); deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). -*/ + */ -int deflateParams OF((z_streamp strm, - int level, - int strategy)); +int deflateParams OF( ( z_streamp strm, + int level, + int strategy ) ); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2. This can be @@ -601,10 +601,10 @@ int deflateParams OF((z_streamp strm, deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if strm->avail_out was zero. -*/ + */ -/* -int inflateInit2 OF((z_streamp strm, +/* + int inflateInit2 OF((z_streamp strm, int windowBits)); This is another version of inflateInit with an extra parameter. The @@ -624,11 +624,11 @@ int inflateInit2 OF((z_streamp strm, does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) -*/ + */ -int inflateSetDictionary OF((z_streamp strm, - const Byte *dictionary, - uInt dictLength)); +int inflateSetDictionary OF( ( z_streamp strm, + const Byte * dictionary, + uInt dictLength ) ); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate @@ -643,24 +643,24 @@ int inflateSetDictionary OF((z_streamp strm, expected one (incorrect Adler32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). -*/ + */ -int inflateSync OF((z_streamp strm)); -/* +int inflateSync OF( (z_streamp strm) ); +/* Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. -*/ - -int inflateReset OF((z_streamp strm)); + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. + */ + +int inflateReset OF( (z_streamp strm) ); /* This function is equivalent to inflateEnd followed by inflateInit, but does not free and reallocate all the internal decompression state. @@ -668,10 +668,10 @@ int inflateReset OF((z_streamp strm)); inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). -*/ + */ - /* utility functions */ +/* utility functions */ /* The following utility functions are implemented on top of the @@ -679,10 +679,10 @@ int inflateReset OF((z_streamp strm)); default options are assumed (compression level and memory usage, standard memory allocation functions). The source code of these utility functions can easily be modified if you need special options. -*/ + */ -int compress OF((Byte *dest, uLong *destLen, - const Byte *source, uLong sourceLen)); +int compress OF( ( Byte * dest, uLong * destLen, + const Byte * source, uLong sourceLen ) ); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total @@ -694,11 +694,11 @@ int compress OF((Byte *dest, uLong *destLen, compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer. -*/ + */ -int compress2 OF((Byte *dest, uLong *destLen, - const Byte *source, uLong sourceLen, - int level)); +int compress2 OF( ( Byte * dest, uLong * destLen, + const Byte * source, uLong sourceLen, + int level ) ); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte @@ -709,10 +709,10 @@ int compress2 OF((Byte *dest, uLong *destLen, compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. -*/ + */ -int uncompress OF((Byte *dest, uLong *destLen, - const Byte *source, uLong sourceLen)); +int uncompress OF( ( Byte * dest, uLong * destLen, + const Byte * source, uLong sourceLen ) ); /* Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total @@ -727,12 +727,12 @@ int uncompress OF((Byte *dest, uLong *destLen, uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted. -*/ + */ typedef voidp gzFile; -gzFile gzopen OF((const char *path, const char *mode)); +gzFile gzopen OF( ( const char *path, const char *mode ) ); /* Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen ("rb" or "wb") but can also include a compression level @@ -748,7 +748,7 @@ gzFile gzopen OF((const char *path, const char *mode)); can be checked to distinguish the two cases (if errno is zero, the zlib error is Z_MEM_ERROR). */ -gzFile gzdopen OF((int fd, const char *mode)); +gzFile gzdopen OF( ( int fd, const char *mode ) ); /* gzdopen() associates a gzFile with the file descriptor fd. File descriptors are obtained from calls like open, dup, creat, pipe or @@ -759,17 +759,17 @@ gzFile gzdopen OF((int fd, const char *mode)); descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). gzdopen returns NULL if there was insufficient memory to allocate the (de)compression state. -*/ + */ -int gzsetparams OF((gzFile file, int level, int strategy)); +int gzsetparams OF( ( gzFile file, int level, int strategy ) ); /* Dynamically update the compression level or strategy. See the description of deflateInit2 for the meaning of these parameters. gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not opened for writing. -*/ + */ -int gzread OF((gzFile file, voidp buf, unsigned len)); +int gzread OF( ( gzFile file, voidp buf, unsigned len ) ); /* Reads the given number of uncompressed bytes from the compressed file. If the input file was not in gzip format, gzread copies the given number @@ -777,50 +777,50 @@ int gzread OF((gzFile file, voidp buf, unsigned len)); gzread returns the number of uncompressed bytes actually read (0 for end of file, -1 for error). */ -int gzwrite OF((gzFile file, - const voidp buf, unsigned len)); +int gzwrite OF( ( gzFile file, + const voidp buf, unsigned len ) ); /* Writes the given number of uncompressed bytes into the compressed file. gzwrite returns the number of uncompressed bytes actually written (0 in case of error). -*/ + */ -int gzprintf OF((gzFile file, const char *format, ...)); +int gzprintf OF( ( gzFile file, const char *format, ... ) ); /* Converts, formats, and writes the args to the compressed file under control of the format string, as in fprintf. gzprintf returns the number of uncompressed bytes actually written (0 in case of error). -*/ + */ -int gzputs OF((gzFile file, const char *s)); +int gzputs OF( ( gzFile file, const char *s ) ); /* Writes the given null-terminated string to the compressed file, excluding the terminating null character. gzputs returns the number of characters written, or -1 in case of error. -*/ + */ -char * gzgets OF((gzFile file, char *buf, int len)); +char * gzgets OF( ( gzFile file, char *buf, int len ) ); /* Reads bytes from the compressed file until len-1 characters are read, or a newline character is read and transferred to buf, or an end-of-file condition is encountered. The string is then terminated with a null character. gzgets returns buf, or Z_NULL in case of error. -*/ + */ -int gzputc OF((gzFile file, int c)); +int gzputc OF( ( gzFile file, int c ) ); /* Writes c, converted to an unsigned char, into the compressed file. gzputc returns the value that was written, or -1 in case of error. -*/ + */ -int gzgetc OF((gzFile file)); +int gzgetc OF( (gzFile file) ); /* Reads one byte from the compressed file. gzgetc returns this byte or -1 in case of end of file or error. -*/ + */ -int gzflush OF((gzFile file, int flush)); +int gzflush OF( ( gzFile file, int flush ) ); /* Flushes all pending output into the compressed file. The parameter flush is as in the deflate() function. The return value is the zlib @@ -828,11 +828,11 @@ int gzflush OF((gzFile file, int flush)); the flush parameter is Z_FINISH and all output could be flushed. gzflush should be called only when strictly necessary because it can degrade compression. -*/ + */ -long gzseek OF((gzFile file, - long offset, int whence)); -/* +long gzseek OF( ( gzFile file, + long offset, int whence ) ); +/* Sets the starting position for the next gzread or gzwrite on the given compressed file. The offset represents a number of bytes in the uncompressed data stream. The whence parameter is defined as in lseek(2); @@ -846,55 +846,55 @@ long gzseek OF((gzFile file, the beginning of the uncompressed stream, or -1 in case of error, in particular if the file is opened for writing and the new starting position would be before the current position. -*/ + */ -int gzrewind OF((gzFile file)); +int gzrewind OF( (gzFile file) ); /* Rewinds the given file. This function is supported only for reading. gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) -*/ + */ -long gztell OF((gzFile file)); +long gztell OF( (gzFile file) ); /* Returns the starting position for the next gzread or gzwrite on the given compressed file. This position represents a number of bytes in the uncompressed data stream. gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) -*/ + */ -int gzeof OF((gzFile file)); +int gzeof OF( (gzFile file) ); /* Returns 1 when EOF has previously been detected reading the given input stream, otherwise zero. -*/ + */ -int gzclose OF((gzFile file)); +int gzclose OF( (gzFile file) ); /* Flushes all pending output if necessary, closes the compressed file and deallocates all the (de)compression state. The return value is the zlib error number (see function gzerror below). -*/ + */ -const char * gzerror OF((gzFile file, int *errnum)); +const char * gzerror OF( ( gzFile file, int *errnum ) ); /* Returns the error message for the last error which occurred on the given compressed file. errnum is set to zlib error number. If an error occurred in the file system and not in the compression library, errnum is set to Z_ERRNO and the application may consult errno to get the exact error code. -*/ + */ - /* checksum functions */ +/* checksum functions */ /* These functions are not related to compression but are exported anyway because they might be useful in applications using the compression library. -*/ + */ -uLong adler32 OF((uLong adler, const Byte *buf, uInt len)); +uLong adler32 OF( ( uLong adler, const Byte * buf, uInt len ) ); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and @@ -909,9 +909,9 @@ uLong adler32 OF((uLong adler, const Byte *buf, uInt len)); adler = adler32(adler, buffer, length); } if (adler != original_adler) error(); -*/ + */ -uLong crc32 OF((uLong crc, const Byte *buf, uInt len)); +uLong crc32 OF( ( uLong crc, const Byte * buf, uInt len ) ); /* Update a running crc with the bytes buf[0..len-1] and return the updated crc. If buf is NULL, this function returns the required initial value @@ -925,72 +925,66 @@ uLong crc32 OF((uLong crc, const Byte *buf, uInt len)); crc = crc32(crc, buffer, length); } if (crc != original_crc) error(); -*/ + */ // private stuff to not include cmdlib.h /* -============================================================================ + ============================================================================ - BYTE ORDER FUNCTIONS + BYTE ORDER FUNCTIONS -============================================================================ -*/ + ============================================================================ + */ #ifdef _SGI_SOURCE -#define __BIG_ENDIAN__ +#define __BIG_ENDIAN__ #endif #ifdef __BIG_ENDIAN__ -short __LittleShort (short l) -{ - byte b1,b2; +short __LittleShort( short l ){ + byte b1,b2; - b1 = l&255; - b2 = (l>>8)&255; + b1 = l & 255; + b2 = ( l >> 8 ) & 255; - return (b1<<8) + b2; + return ( b1 << 8 ) + b2; } -short __BigShort (short l) -{ +short __BigShort( short l ){ return l; } -int __LittleLong (int l) -{ - byte b1,b2,b3,b4; +int __LittleLong( int l ){ + byte b1,b2,b3,b4; - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; + b1 = l & 255; + b2 = ( l >> 8 ) & 255; + b3 = ( l >> 16 ) & 255; + b4 = ( l >> 24 ) & 255; - return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; + return ( (int)b1 << 24 ) + ( (int)b2 << 16 ) + ( (int)b3 << 8 ) + b4; } -int __BigLong (int l) -{ +int __BigLong( int l ){ return l; } -float __LittleFloat (float l) -{ - union {byte b[4]; float f;} in, out; - +float __LittleFloat( float l ){ + union {byte b[4]; float f; } in, out; + in.f = l; out.b[0] = in.b[3]; out.b[1] = in.b[2]; out.b[2] = in.b[1]; out.b[3] = in.b[0]; - + return out.f; } -float __BigFloat (float l) -{ +float __BigFloat( float l ){ return l; } @@ -998,54 +992,48 @@ float __BigFloat (float l) #else -short __BigShort (short l) -{ - byte b1,b2; +short __BigShort( short l ){ + byte b1,b2; - b1 = l&255; - b2 = (l>>8)&255; + b1 = l & 255; + b2 = ( l >> 8 ) & 255; - return (b1<<8) + b2; + return ( b1 << 8 ) + b2; } -short __LittleShort (short l) -{ +short __LittleShort( short l ){ return l; } -int __BigLong (int l) -{ - byte b1,b2,b3,b4; +int __BigLong( int l ){ + byte b1,b2,b3,b4; - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; + b1 = l & 255; + b2 = ( l >> 8 ) & 255; + b3 = ( l >> 16 ) & 255; + b4 = ( l >> 24 ) & 255; - return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; + return ( (int)b1 << 24 ) + ( (int)b2 << 16 ) + ( (int)b3 << 8 ) + b4; } -int __LittleLong (int l) -{ +int __LittleLong( int l ){ return l; } -float __BigFloat (float l) -{ - union {byte b[4]; float f;} in, out; - +float __BigFloat( float l ){ + union {byte b[4]; float f; } in, out; + in.f = l; out.b[0] = in.b[3]; out.b[1] = in.b[2]; out.b[2] = in.b[1]; out.b[3] = in.b[0]; - + return out.f; } -float __LittleFloat (float l) -{ +float __LittleFloat( float l ){ return l; } @@ -1056,50 +1044,50 @@ float __LittleFloat (float l) - /* various hacks, don't look :) */ +/* various hacks, don't look :) */ /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ -int deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -int inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -int deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size)); -int inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -#define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) -#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) - - -const char * zError OF((int err)); -int inflateSyncPoint OF((z_streamp z)); -const uLong * get_crc_table OF((void)); - -typedef unsigned char uch; +int deflateInit_ OF( ( z_streamp strm, int level, + const char *version, int stream_size ) ); +int inflateInit_ OF( ( z_streamp strm, + const char *version, int stream_size ) ); +int deflateInit2_ OF( ( z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size ) ); +int inflateInit2_ OF( ( z_streamp strm, int windowBits, + const char *version, int stream_size ) ); +#define deflateInit( strm, level ) \ + deflateInit_( ( strm ), ( level ), ZLIB_VERSION, sizeof( z_stream ) ) +#define inflateInit( strm ) \ + inflateInit_( ( strm ), ZLIB_VERSION, sizeof( z_stream ) ) +#define deflateInit2( strm, level, method, windowBits, memLevel, strategy ) \ + deflateInit2_( ( strm ),( level ),( method ),( windowBits ),( memLevel ), \ + ( strategy ), ZLIB_VERSION, sizeof( z_stream ) ) +#define inflateInit2( strm, windowBits ) \ + inflateInit2_( ( strm ), ( windowBits ), ZLIB_VERSION, sizeof( z_stream ) ) + + +const char * zError OF( (int err) ); +int inflateSyncPoint OF( (z_streamp z) ); +const uLong * get_crc_table OF( (void) ); + +typedef unsigned char uch; typedef unsigned short ush; -typedef unsigned long ulg; +typedef unsigned long ulg; extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ -#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] +#define ERR_MSG( err ) z_errmsg[Z_NEED_DICT - ( err )] -#define ERR_RETURN(strm,err) \ - return (strm->msg = (char*)ERR_MSG(err), (err)) +#define ERR_RETURN( strm,err ) \ + return ( strm->msg = (char*)ERR_MSG( err ), ( err ) ) /* To be used only when the state is known to be valid */ - /* common constants */ +/* common constants */ #ifndef DEF_WBITS # define DEF_WBITS MAX_WBITS @@ -1124,84 +1112,84 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */ #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ - /* target dependencies */ +/* target dependencies */ - /* Common defaults */ +/* Common defaults */ #ifndef OS_CODE # define OS_CODE 0x03 /* assume Unix */ #endif #ifndef F_OPEN -# define F_OPEN(name, mode) fopen((name), (mode)) +# define F_OPEN( name, mode ) fopen( ( name ), ( mode ) ) #endif - /* functions */ +/* functions */ #ifdef HAVE_STRERROR - extern char *strerror OF((int)); -# define zstrerror(errnum) strerror(errnum) +extern char *strerror OF( (int) ); +# define zstrerror( errnum ) strerror( errnum ) #else -# define zstrerror(errnum) "" +# define zstrerror( errnum ) "" #endif #define zmemcpy memcpy #define zmemcmp memcmp -#define zmemzero(dest, len) memset(dest, 0, len) +#define zmemzero( dest, len ) memset( dest, 0, len ) /* Diagnostic functions */ #ifdef _ZIP_DEBUG_ - int z_verbose = 0; -# define Assert(cond,msg) assert(cond); - //{if(!(cond)) Sys_Error(msg);} -# define Trace(x) {if (z_verbose>=0) Sys_Error x ;} -# define Tracev(x) {if (z_verbose>0) Sys_Error x ;} -# define Tracevv(x) {if (z_verbose>1) Sys_Error x ;} -# define Tracec(c,x) {if (z_verbose>0 && (c)) Sys_Error x ;} -# define Tracecv(c,x) {if (z_verbose>1 && (c)) Sys_Error x ;} +int z_verbose = 0; +# define Assert( cond,msg ) assert( cond ); +//{if(!(cond)) Sys_Error(msg);} +# define Trace( x ) {if ( z_verbose >= 0 ) {Sys_Error x ; }} +# define Tracev( x ) {if ( z_verbose > 0 ) {Sys_Error x ; }} +# define Tracevv( x ) {if ( z_verbose > 1 ) {Sys_Error x ; }} +# define Tracec( c,x ) {if ( z_verbose > 0 && ( c ) ) {Sys_Error x ; }} +# define Tracecv( c,x ) {if ( z_verbose > 1 && ( c ) ) {Sys_Error x ; }} #else -# define Assert(cond,msg) -# define Trace(x) -# define Tracev(x) -# define Tracevv(x) -# define Tracec(c,x) -# define Tracecv(c,x) +# define Assert( cond,msg ) +# define Trace( x ) +# define Tracev( x ) +# define Tracevv( x ) +# define Tracec( c,x ) +# define Tracecv( c,x ) #endif -typedef uLong (*check_func) OF((uLong check, const Byte *buf, uInt len)); -voidp zcalloc OF((voidp opaque, unsigned items, unsigned size)); -void zcfree OF((voidp opaque, voidp ptr)); +typedef uLong ( *check_func ) OF ( ( uLong check, const Byte * buf, uInt len ) ); +voidp zcalloc OF( ( voidp opaque, unsigned items, unsigned size ) ); +void zcfree OF( ( voidp opaque, voidp ptr ) ); -#define ZALLOC(strm, items, size) \ - (*((strm)->zalloc))((strm)->opaque, (items), (size)) -#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidp)(addr)) -#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} +#define ZALLOC( strm, items, size ) \ + ( *( ( strm )->zalloc ) )( ( strm )->opaque, ( items ), ( size ) ) +#define ZFREE( strm, addr ) ( *( ( strm )->zfree ) )( ( strm )->opaque, (voidp)( addr ) ) +#define TRY_FREE( s, p ) {if ( p ) {ZFREE( s, p ); }} -#if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \ - !defined(CASESENSITIVITYDEFAULT_NO) +#if !defined( unix ) && !defined( CASESENSITIVITYDEFAULT_YES ) && \ + !defined( CASESENSITIVITYDEFAULT_NO ) #define CASESENSITIVITYDEFAULT_NO #endif #ifndef UNZ_BUFSIZE -#define UNZ_BUFSIZE (65536) +#define UNZ_BUFSIZE ( 65536 ) #endif #ifndef UNZ_MAXFILENAMEINZIP -#define UNZ_MAXFILENAMEINZIP (256) +#define UNZ_MAXFILENAMEINZIP ( 256 ) #endif #ifndef ALLOC -# define ALLOC(size) (malloc(size)) +# define ALLOC( size ) ( malloc( size ) ) #endif #ifndef TRYFREE -# define TRYFREE(p) {if (p) free(p);} +# define TRYFREE( p ) {if ( p ) {free( p ); }} #endif -#define SIZECENTRALDIRITEM (0x2e) -#define SIZEZIPLOCALHEADER (0x1e) +#define SIZECENTRALDIRITEM ( 0x2e ) +#define SIZEZIPLOCALHEADER ( 0x1e ) @@ -1209,38 +1197,37 @@ void zcfree OF((voidp opaque, voidp ptr)); Read a byte from a gz_stream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been sucessfully opened for reading. -*/ + */ /* -static int unzlocal_getByte(FILE *fin,int *pi) -{ + static int unzlocal_getByte(FILE *fin,int *pi) + { unsigned char c; - int err = fread(&c, 1, 1, fin); + int err = fread(&c, 1, 1, fin); if (err==1) { - *pi = (int)c; + *pi = (int)c; return UNZ_OK; } else { - if (ferror(fin)) + if (ferror(fin)) return UNZ_ERRNO; else return UNZ_EOF; } -} -*/ + } + */ /* =========================================================================== - Reads a long in LSB order from the given gz_stream. Sets -*/ -static int unzlocal_getShort (FILE* fin, uLong *pX) -{ - short v; + Reads a long in LSB order from the given gz_stream. Sets + */ +static int unzlocal_getShort( FILE* fin, uLong *pX ){ + short v; - fread( &v, sizeof(v), 1, fin ); + fread( &v, sizeof( v ), 1, fin ); - *pX = __LittleShort( v); + *pX = __LittleShort( v ); return UNZ_OK; /* @@ -1250,26 +1237,25 @@ static int unzlocal_getShort (FILE* fin, uLong *pX) err = unzlocal_getByte(fin,&i); x = (uLong)i; - + if (err==UNZ_OK) err = unzlocal_getByte(fin,&i); x += ((uLong)i)<<8; - + if (err==UNZ_OK) - *pX = x; + *pX = x; else - *pX = 0; + *pX = 0; return err; -*/ + */ } -static int unzlocal_getLong (FILE *fin, uLong *pX) -{ - int v; +static int unzlocal_getLong( FILE *fin, uLong *pX ){ + int v; - fread( &v, sizeof(v), 1, fin ); + fread( &v, sizeof( v ), 1, fin ); - *pX = __LittleLong( v); + *pX = __LittleLong( v ); return UNZ_OK; /* @@ -1279,7 +1265,7 @@ static int unzlocal_getLong (FILE *fin, uLong *pX) err = unzlocal_getByte(fin,&i); x = (uLong)i; - + if (err==UNZ_OK) err = unzlocal_getByte(fin,&i); x += ((uLong)i)<<8; @@ -1291,35 +1277,40 @@ static int unzlocal_getLong (FILE *fin, uLong *pX) if (err==UNZ_OK) err = unzlocal_getByte(fin,&i); x += ((uLong)i)<<24; - + if (err==UNZ_OK) - *pX = x; + *pX = x; else - *pX = 0; + *pX = 0; return err; -*/ + */ } /* My own strcmpi / strcasecmp */ -static int strcmpcasenosensitive_internal (const char* fileName1,const char* fileName2) -{ - for (;;) +static int strcmpcasenosensitive_internal( const char* fileName1,const char* fileName2 ){ + for (;; ) { - char c1=*(fileName1++); - char c2=*(fileName2++); - if ((c1>='a') && (c1<='z')) + char c1 = *( fileName1++ ); + char c2 = *( fileName2++ ); + if ( ( c1 >= 'a' ) && ( c1 <= 'z' ) ) { c1 -= 0x20; - if ((c2>='a') && (c2<='z')) + } + if ( ( c2 >= 'a' ) && ( c2 <= 'z' ) ) { c2 -= 0x20; - if (c1=='\0') - return ((c2=='\0') ? 0 : -1); - if (c2=='\0') + } + if ( c1 == '\0' ) { + return ( ( c2 == '\0' ) ? 0 : -1 ); + } + if ( c2 == '\0' ) { return 1; - if (c1c2) + } + if ( c1 > c2 ) { return 1; + } } } @@ -1334,7 +1325,7 @@ static int strcmpcasenosensitive_internal (const char* fileName1,const char* fil #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal #endif -/* +/* Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi @@ -1342,398 +1333,450 @@ static int strcmpcasenosensitive_internal (const char* fileName1,const char* fil If iCaseSenisivity = 0, case sensitivity is defaut of your operating system (like 1 on Unix, 2 on Windows) -*/ -extern int unzStringFileNameCompare (const char* fileName1,const char* fileName2,int iCaseSensitivity) -{ - if (iCaseSensitivity==0) - iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; + */ +extern int unzStringFileNameCompare( const char* fileName1,const char* fileName2,int iCaseSensitivity ){ + if ( iCaseSensitivity == 0 ) { + iCaseSensitivity = CASESENSITIVITYDEFAULTVALUE; + } - if (iCaseSensitivity==1) - return strcmp(fileName1,fileName2); + if ( iCaseSensitivity == 1 ) { + return strcmp( fileName1,fileName2 ); + } - return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); -} + return STRCMPCASENOSENTIVEFUNCTION( fileName1,fileName2 ); +} -#define BUFREADCOMMENT (0x400) +#define BUFREADCOMMENT ( 0x400 ) /* - Locate the Central directory of a zipfile (at the end, just before + Locate the Central directory of a zipfile (at the end, just before the global comment) -*/ -static uLong unzlocal_SearchCentralDir(FILE *fin) -{ + */ +static uLong unzlocal_SearchCentralDir( FILE *fin ){ unsigned char* buf; uLong uSizeFile; uLong uBackRead; - uLong uMaxBack=0xffff; /* maximum size of global comment */ - uLong uPosFound=0; - - if (fseek(fin,0,SEEK_END) != 0) + uLong uMaxBack = 0xffff; /* maximum size of global comment */ + uLong uPosFound = 0; + + if ( fseek( fin,0,SEEK_END ) != 0 ) { return 0; + } uSizeFile = ftell( fin ); - - if (uMaxBack>uSizeFile) + + if ( uMaxBack > uSizeFile ) { uMaxBack = uSizeFile; + } - buf = (unsigned char*)malloc(BUFREADCOMMENT+4); - if (buf==NULL) + buf = (unsigned char*)malloc( BUFREADCOMMENT + 4 ); + if ( buf == NULL ) { return 0; + } uBackRead = 4; - while (uBackReaduMaxBack) + if ( uBackRead + BUFREADCOMMENT > uMaxBack ) { uBackRead = uMaxBack; - else - uBackRead+=BUFREADCOMMENT; - uReadPos = uSizeFile-uBackRead ; - - uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? - (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); - if (fseek(fin,uReadPos,SEEK_SET)!=0) + } + else{ + uBackRead += BUFREADCOMMENT; + } + uReadPos = uSizeFile - uBackRead ; + + uReadSize = ( ( BUFREADCOMMENT + 4 ) < ( uSizeFile - uReadPos ) ) ? + ( BUFREADCOMMENT + 4 ) : ( uSizeFile - uReadPos ); + if ( fseek( fin,uReadPos,SEEK_SET ) != 0 ) { break; + } - if (fread(buf,(uInt)uReadSize,1,fin)!=1) + if ( fread( buf,(uInt)uReadSize,1,fin ) != 1 ) { break; + } - for (i=(int)uReadSize-3; (i--)>0;) - if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && - ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) - { - uPosFound = uReadPos+i; + for ( i = (int)uReadSize - 3; ( i-- ) > 0; ) + if ( ( ( *( buf + i ) ) == 0x50 ) && ( ( *( buf + i + 1 ) ) == 0x4b ) && + ( ( *( buf + i + 2 ) ) == 0x05 ) && ( ( *( buf + i + 3 ) ) == 0x06 ) ) { + uPosFound = uReadPos + i; break; } - if (uPosFound!=0) + if ( uPosFound != 0 ) { break; + } } - free(buf); + free( buf ); return uPosFound; } -extern unzFile unzReOpen (const char* path, unzFile file) -{ +extern unzFile unzReOpen( const char* path, unzFile file ){ unz_s *s; FILE * fin; - fin=fopen(path,"rb"); - if (fin==NULL) + fin = fopen( path,"rb" ); + if ( fin == NULL ) { return NULL; + } - s=(unz_s*)malloc(sizeof(unz_s)); - memcpy(s, (unz_s*)file, sizeof(unz_s)); + s = (unz_s*)malloc( sizeof( unz_s ) ); + memcpy( s, (unz_s*)file, sizeof( unz_s ) ); s->file = fin; - return (unzFile)s; + return (unzFile)s; } /* - Open a Zip file. path contain the full pathname (by example, + Open a Zip file. path contain the full pathname (by example, on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer - "zlib/zlib109.zip". - If the zipfile cannot be opened (file don't exist or in not valid), the - return value is NULL. + "zlib/zlib109.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. Else, the return value is a unzFile Handle, usable with other function - of this unzip package. -*/ -extern unzFile unzOpen (const char* path) -{ + of this unzip package. + */ +extern unzFile unzOpen( const char* path ){ unz_s us; unz_s *s; uLong central_pos,uL; FILE * fin ; - uLong number_disk; /* number of the current dist, used for - spaning ZIP, unsupported, always 0*/ + uLong number_disk; /* number of the current dist, used for + spaning ZIP, unsupported, always 0*/ uLong number_disk_with_CD; /* number the the disk with central dir, used - for spaning ZIP, unsupported, always 0*/ + for spaning ZIP, unsupported, always 0*/ uLong number_entry_CD; /* total number of entries in - the central dir + the central dir (same than number_entry on nospan) */ - int err=UNZ_OK; + int err = UNZ_OK; - fin=fopen(path,"rb"); - if (fin==NULL) + fin = fopen( path,"rb" ); + if ( fin == NULL ) { return NULL; + } - central_pos = unzlocal_SearchCentralDir(fin); - if (central_pos==0) - err=UNZ_ERRNO; + central_pos = unzlocal_SearchCentralDir( fin ); + if ( central_pos == 0 ) { + err = UNZ_ERRNO; + } - if (fseek(fin,central_pos,SEEK_SET)!=0) - err=UNZ_ERRNO; + if ( fseek( fin,central_pos,SEEK_SET ) != 0 ) { + err = UNZ_ERRNO; + } /* the signature, already checked */ - if (unzlocal_getLong(fin,&uL)!=UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( fin,&uL ) != UNZ_OK ) { + err = UNZ_ERRNO; + } /* number of this disk */ - if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( fin,&number_disk ) != UNZ_OK ) { + err = UNZ_ERRNO; + } /* number of the disk with the start of the central directory */ - if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( fin,&number_disk_with_CD ) != UNZ_OK ) { + err = UNZ_ERRNO; + } /* total number of entries in the central dir on this disk */ - if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( fin,&us.gi.number_entry ) != UNZ_OK ) { + err = UNZ_ERRNO; + } /* total number of entries in the central dir */ - if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( fin,&number_entry_CD ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if ((number_entry_CD!=us.gi.number_entry) || - (number_disk_with_CD!=0) || - (number_disk!=0)) - err=UNZ_BADZIPFILE; + if ( ( number_entry_CD != us.gi.number_entry ) || + ( number_disk_with_CD != 0 ) || + ( number_disk != 0 ) ) { + err = UNZ_BADZIPFILE; + } /* size of the central directory */ - if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( fin,&us.size_central_dir ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - /* offset of start of central directory with respect to the + /* offset of start of central directory with respect to the starting disk number */ - if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( fin,&us.offset_central_dir ) != UNZ_OK ) { + err = UNZ_ERRNO; + } /* zipfile comment length */ - if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( fin,&us.gi.size_comment ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if ((central_pospfile_in_zip_read!=NULL) - unzCloseCurrentFile(file); + if ( s->pfile_in_zip_read != NULL ) { + unzCloseCurrentFile( file ); + } - fclose(s->file); - free(s); + fclose( s->file ); + free( s ); return UNZ_OK; } /* - Write info about the ZipFile in the *pglobal_info structure. - No preparation of the structure is needed - return UNZ_OK if there is no problem. */ -extern int unzGetGlobalInfo (unzFile file,unz_global_info *pglobal_info) -{ + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ +extern int unzGetGlobalInfo( unzFile file,unz_global_info *pglobal_info ){ unz_s* s; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - *pglobal_info=s->gi; + } + s = (unz_s*)file; + *pglobal_info = s->gi; return UNZ_OK; } /* Translate date/time from Dos format to tm_unz (readable more easilty) -*/ -static void unzlocal_DosDateToTmuDate (uLong ulDosDate, tm_unz* ptm) -{ - uLong uDate; - uDate = (uLong)(ulDosDate>>16); - ptm->tm_mday = (uInt)(uDate&0x1f) ; - ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; - ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; - - ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); - ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; - ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; + */ +static void unzlocal_DosDateToTmuDate( uLong ulDosDate, tm_unz* ptm ){ + uLong uDate; + uDate = (uLong)( ulDosDate >> 16 ); + ptm->tm_mday = (uInt)( uDate & 0x1f ) ; + ptm->tm_mon = (uInt)( ( ( ( uDate ) & 0x1E0 ) / 0x20 ) - 1 ) ; + ptm->tm_year = (uInt)( ( ( uDate & 0x0FE00 ) / 0x0200 ) + 1980 ) ; + + ptm->tm_hour = (uInt) ( ( ulDosDate & 0xF800 ) / 0x800 ); + ptm->tm_min = (uInt) ( ( ulDosDate & 0x7E0 ) / 0x20 ) ; + ptm->tm_sec = (uInt) ( 2 * ( ulDosDate & 0x1f ) ) ; } /* - Get Info about the current file in the zipfile, with internal only info -*/ -static int unzlocal_GetCurrentFileInfoInternal (unzFile file, - unz_file_info *pfile_info, - unz_file_info_internal - *pfile_info_internal, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize) -{ + Get Info about the current file in the zipfile, with internal only info + */ +static int unzlocal_GetCurrentFileInfoInternal( unzFile file, + unz_file_info *pfile_info, + unz_file_info_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize ){ unz_s* s; unz_file_info file_info; unz_file_info_internal file_info_internal; - int err=UNZ_OK; + int err = UNZ_OK; uLong uMagic; - long lSeek=0; + long lSeek = 0; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0) - err=UNZ_ERRNO; + } + s = (unz_s*)file; + if ( fseek( s->file,s->pos_in_central_dir + s->byte_before_the_zipfile,SEEK_SET ) != 0 ) { + err = UNZ_ERRNO; + } /* we check the magic */ - if (err==UNZ_OK) - if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) - err=UNZ_ERRNO; - else if (uMagic!=0x02014b50) - err=UNZ_BADZIPFILE; + if ( err == UNZ_OK ) { + if ( unzlocal_getLong( s->file,&uMagic ) != UNZ_OK ) { + err = UNZ_ERRNO; + } + else if ( uMagic != 0x02014b50 ) { + err = UNZ_BADZIPFILE; + } + } - if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.version ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.version_needed ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.flag ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.compression_method ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( s->file,&file_info.dosDate ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + unzlocal_DosDateToTmuDate( file_info.dosDate,&file_info.tmu_date ); - if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( s->file,&file_info.crc ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( s->file,&file_info.compressed_size ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( s->file,&file_info.uncompressed_size ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getShort(s->file,&file_info.size_filename) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.size_filename ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getShort(s->file,&file_info.size_file_extra) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.size_file_extra ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getShort(s->file,&file_info.size_file_comment) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.size_file_comment ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getShort(s->file,&file_info.disk_num_start) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.disk_num_start ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getShort(s->file,&file_info.internal_fa) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&file_info.internal_fa ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getLong(s->file,&file_info.external_fa) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( s->file,&file_info.external_fa ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getLong( s->file,&file_info_internal.offset_curfile ) != UNZ_OK ) { + err = UNZ_ERRNO; + } - lSeek+=file_info.size_filename; - if ((err==UNZ_OK) && (szFileName!=NULL)) - { + lSeek += file_info.size_filename; + if ( ( err == UNZ_OK ) && ( szFileName != NULL ) ) { uLong uSizeRead ; - if (file_info.size_filename0) && (fileNameBufferSize>0)) - if (fread(szFileName,(uInt)uSizeRead,1,s->file)!=1) - err=UNZ_ERRNO; + if ( ( file_info.size_filename > 0 ) && ( fileNameBufferSize > 0 ) ) { + if ( fread( szFileName,(uInt)uSizeRead,1,s->file ) != 1 ) { + err = UNZ_ERRNO; + } + } lSeek -= uSizeRead; } - - if ((err==UNZ_OK) && (extraField!=NULL)) - { + + if ( ( err == UNZ_OK ) && ( extraField != NULL ) ) { uLong uSizeRead ; - if (file_info.size_file_extrafile,lSeek,SEEK_CUR)==0) - lSeek=0; - else - err=UNZ_ERRNO; - if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) - if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1) - err=UNZ_ERRNO; + if ( lSeek != 0 ) { + if ( fseek( s->file,lSeek,SEEK_CUR ) == 0 ) { + lSeek = 0; + } + else{ + err = UNZ_ERRNO; + } + } + if ( ( file_info.size_file_extra > 0 ) && ( extraFieldBufferSize > 0 ) ) { + if ( fread( extraField,(uInt)uSizeRead,1,s->file ) != 1 ) { + err = UNZ_ERRNO; + } + } lSeek += file_info.size_file_extra - uSizeRead; } - else - lSeek+=file_info.size_file_extra; + else{ + lSeek += file_info.size_file_extra; + } - - if ((err==UNZ_OK) && (szComment!=NULL)) - { + + if ( ( err == UNZ_OK ) && ( szComment != NULL ) ) { uLong uSizeRead ; - if (file_info.size_file_commentfile,lSeek,SEEK_CUR)==0) - lSeek=0; - else - err=UNZ_ERRNO; - if ((file_info.size_file_comment>0) && (commentBufferSize>0)) - if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1) - err=UNZ_ERRNO; - lSeek+=file_info.size_file_comment - uSizeRead; + if ( lSeek != 0 ) { + if ( fseek( s->file,lSeek,SEEK_CUR ) == 0 ) { + lSeek = 0; + } + else{ + err = UNZ_ERRNO; + } + } + if ( ( file_info.size_file_comment > 0 ) && ( commentBufferSize > 0 ) ) { + if ( fread( szComment,(uInt)uSizeRead,1,s->file ) != 1 ) { + err = UNZ_ERRNO; + } + } + lSeek += file_info.size_file_comment - uSizeRead; + } + else{ + lSeek += file_info.size_file_comment; } - else - lSeek+=file_info.size_file_comment; - if ((err==UNZ_OK) && (pfile_info!=NULL)) - *pfile_info=file_info; + if ( ( err == UNZ_OK ) && ( pfile_info != NULL ) ) { + *pfile_info = file_info; + } - if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) - *pfile_info_internal=file_info_internal; + if ( ( err == UNZ_OK ) && ( pfile_info_internal != NULL ) ) { + *pfile_info_internal = file_info_internal; + } return err; } @@ -1741,114 +1784,118 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file, /* - Write info about the ZipFile in the *pglobal_info structure. - No preparation of the structure is needed - return UNZ_OK if there is no problem. -*/ -extern int unzGetCurrentFileInfo ( unzFile file, unz_file_info *pfile_info, - char *szFileName, uLong fileNameBufferSize, - void *extraField, uLong extraFieldBufferSize, - char *szComment, uLong commentBufferSize) -{ - return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. + */ +extern int unzGetCurrentFileInfo( unzFile file, unz_file_info *pfile_info, + char *szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char *szComment, uLong commentBufferSize ){ + return unzlocal_GetCurrentFileInfoInternal( file,pfile_info,NULL, szFileName,fileNameBufferSize, extraField,extraFieldBufferSize, - szComment,commentBufferSize); + szComment,commentBufferSize ); } /* - Set the current file of the zipfile to the first file. - return UNZ_OK if there is no problem -*/ -extern int unzGoToFirstFile (unzFile file) -{ - int err=UNZ_OK; + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem + */ +extern int unzGoToFirstFile( unzFile file ){ + int err = UNZ_OK; unz_s* s; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - s->pos_in_central_dir=s->offset_central_dir; - s->num_file=0; - err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, - &s->cur_file_info_internal, - NULL,0,NULL,0,NULL,0); - s->current_file_ok = (err == UNZ_OK); + } + s = (unz_s*)file; + s->pos_in_central_dir = s->offset_central_dir; + s->num_file = 0; + err = unzlocal_GetCurrentFileInfoInternal( file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0 ); + s->current_file_ok = ( err == UNZ_OK ); return err; } /* - Set the current file of the zipfile to the next file. - return UNZ_OK if there is no problem - return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. -*/ -extern int unzGoToNextFile (unzFile file) -{ - unz_s* s; + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. + */ +extern int unzGoToNextFile( unzFile file ){ + unz_s* s; int err; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - if (!s->current_file_ok) + } + s = (unz_s*)file; + if ( !s->current_file_ok ) { return UNZ_END_OF_LIST_OF_FILE; - if (s->num_file+1==s->gi.number_entry) + } + if ( s->num_file + 1 == s->gi.number_entry ) { return UNZ_END_OF_LIST_OF_FILE; + } s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + - s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; s->num_file++; - err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + err = unzlocal_GetCurrentFileInfoInternal( file,&s->cur_file_info, &s->cur_file_info_internal, - NULL,0,NULL,0,NULL,0); - s->current_file_ok = (err == UNZ_OK); + NULL,0,NULL,0,NULL,0 ); + s->current_file_ok = ( err == UNZ_OK ); return err; } /* - Try locate the file szFileName in the zipfile. - For the iCaseSensitivity signification, see unzipStringFileNameCompare - - return value : - UNZ_OK if the file is found. It becomes the current file. - UNZ_END_OF_LIST_OF_FILE if the file is not found -*/ -extern int unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity) -{ - unz_s* s; + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzipStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found + */ +extern int unzLocateFile( unzFile file, const char *szFileName, int iCaseSensitivity ){ + unz_s* s; int err; - + uLong num_fileSaved; uLong pos_in_central_dirSaved; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; + } - if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) - return UNZ_PARAMERROR; + if ( strlen( szFileName ) >= UNZ_MAXFILENAMEINZIP ) { + return UNZ_PARAMERROR; + } - s=(unz_s*)file; - if (!s->current_file_ok) + s = (unz_s*)file; + if ( !s->current_file_ok ) { return UNZ_END_OF_LIST_OF_FILE; + } num_fileSaved = s->num_file; pos_in_central_dirSaved = s->pos_in_central_dir; - err = unzGoToFirstFile(file); + err = unzGoToFirstFile( file ); - while (err == UNZ_OK) + while ( err == UNZ_OK ) { - char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; - unzGetCurrentFileInfo(file,NULL, - szCurrentFileName,sizeof(szCurrentFileName)-1, - NULL,0,NULL,0); - if (unzStringFileNameCompare(szCurrentFileName, - szFileName,iCaseSensitivity)==0) + char szCurrentFileName[UNZ_MAXFILENAMEINZIP + 1]; + unzGetCurrentFileInfo( file,NULL, + szCurrentFileName,sizeof( szCurrentFileName ) - 1, + NULL,0,NULL,0 ); + if ( unzStringFileNameCompare( szCurrentFileName, + szFileName,iCaseSensitivity ) == 0 ) { return UNZ_OK; - err = unzGoToNextFile(file); + } + err = unzGoToNextFile( file ); } s->num_file = num_fileSaved ; @@ -1858,275 +1905,306 @@ extern int unzLocateFile (unzFile file, const char *szFileName, int iCaseSensiti /* - Read the static header of the current zipfile - Check the coherency of the static header and info in the end of central + Read the static header of the current zipfile + Check the coherency of the static header and info in the end of central directory about this file - store in *piSizeVar the size of extra info in static header + store in *piSizeVar the size of extra info in static header (filename and size of extra field data) -*/ -static int unzlocal_CheckCurrentFileCoherencyHeader (unz_s* s, uInt* piSizeVar, - uLong *poffset_local_extrafield, - uInt *psize_local_extrafield) -{ + */ +static int unzlocal_CheckCurrentFileCoherencyHeader( unz_s* s, uInt* piSizeVar, + uLong *poffset_local_extrafield, + uInt *psize_local_extrafield ){ uLong uMagic,uData,uFlags; uLong size_filename; uLong size_extra_field; - int err=UNZ_OK; + int err = UNZ_OK; *piSizeVar = 0; *poffset_local_extrafield = 0; *psize_local_extrafield = 0; - if (fseek(s->file,s->cur_file_info_internal.offset_curfile + - s->byte_before_the_zipfile,SEEK_SET)!=0) + if ( fseek( s->file,s->cur_file_info_internal.offset_curfile + + s->byte_before_the_zipfile,SEEK_SET ) != 0 ) { return UNZ_ERRNO; + } - if (err==UNZ_OK) - if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) - err=UNZ_ERRNO; - else if (uMagic!=0x04034b50) - err=UNZ_BADZIPFILE; + if ( err == UNZ_OK ) { + if ( unzlocal_getLong( s->file,&uMagic ) != UNZ_OK ) { + err = UNZ_ERRNO; + } + else if ( uMagic != 0x04034b50 ) { + err = UNZ_BADZIPFILE; + } + } - if (unzlocal_getShort(s->file,&uData) != UNZ_OK) - err=UNZ_ERRNO; + if ( unzlocal_getShort( s->file,&uData ) != UNZ_OK ) { + err = UNZ_ERRNO; + } /* - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) - err=UNZ_BADZIPFILE; -*/ - if (unzlocal_getShort(s->file,&uFlags) != UNZ_OK) - err=UNZ_ERRNO; - - if (unzlocal_getShort(s->file,&uData) != UNZ_OK) - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) - err=UNZ_BADZIPFILE; - - if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && - (s->cur_file_info.compression_method!=Z_DEFLATED)) + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) err=UNZ_BADZIPFILE; + */ + if ( unzlocal_getShort( s->file,&uFlags ) != UNZ_OK ) { + err = UNZ_ERRNO; + } + + if ( unzlocal_getShort( s->file,&uData ) != UNZ_OK ) { + err = UNZ_ERRNO; + } + else if ( ( err == UNZ_OK ) && ( uData != s->cur_file_info.compression_method ) ) { + err = UNZ_BADZIPFILE; + } + + if ( ( err == UNZ_OK ) && ( s->cur_file_info.compression_method != 0 ) && + ( s->cur_file_info.compression_method != Z_DEFLATED ) ) { + err = UNZ_BADZIPFILE; + } - if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* date/time */ - err=UNZ_ERRNO; + if ( unzlocal_getLong( s->file,&uData ) != UNZ_OK ) { /* date/time */ + err = UNZ_ERRNO; + } - if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* crc */ - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && - ((uFlags & 8)==0)) - err=UNZ_BADZIPFILE; + if ( unzlocal_getLong( s->file,&uData ) != UNZ_OK ) { /* crc */ + err = UNZ_ERRNO; + } + else if ( ( err == UNZ_OK ) && ( uData != s->cur_file_info.crc ) && + ( ( uFlags & 8 ) == 0 ) ) { + err = UNZ_BADZIPFILE; + } - if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size compr */ - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && - ((uFlags & 8)==0)) - err=UNZ_BADZIPFILE; + if ( unzlocal_getLong( s->file,&uData ) != UNZ_OK ) { /* size compr */ + err = UNZ_ERRNO; + } + else if ( ( err == UNZ_OK ) && ( uData != s->cur_file_info.compressed_size ) && + ( ( uFlags & 8 ) == 0 ) ) { + err = UNZ_BADZIPFILE; + } - if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size uncompr */ - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && - ((uFlags & 8)==0)) - err=UNZ_BADZIPFILE; + if ( unzlocal_getLong( s->file,&uData ) != UNZ_OK ) { /* size uncompr */ + err = UNZ_ERRNO; + } + else if ( ( err == UNZ_OK ) && ( uData != s->cur_file_info.uncompressed_size ) && + ( ( uFlags & 8 ) == 0 ) ) { + err = UNZ_BADZIPFILE; + } - if (unzlocal_getShort(s->file,&size_filename) != UNZ_OK) - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) - err=UNZ_BADZIPFILE; + if ( unzlocal_getShort( s->file,&size_filename ) != UNZ_OK ) { + err = UNZ_ERRNO; + } + else if ( ( err == UNZ_OK ) && ( size_filename != s->cur_file_info.size_filename ) ) { + err = UNZ_BADZIPFILE; + } *piSizeVar += (uInt)size_filename; - if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK) - err=UNZ_ERRNO; - *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + - SIZEZIPLOCALHEADER + size_filename; + if ( unzlocal_getShort( s->file,&size_extra_field ) != UNZ_OK ) { + err = UNZ_ERRNO; + } + *poffset_local_extrafield = s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; *psize_local_extrafield = (uInt)size_extra_field; *piSizeVar += (uInt)size_extra_field; return err; } - + /* - Open for reading data the current file in the zipfile. - If there is no error and the file is opened, the return value is UNZ_OK. -*/ -extern int unzOpenCurrentFile (unzFile file) -{ - int err=UNZ_OK; + Open for reading data the current file in the zipfile. + If there is no error and the file is opened, the return value is UNZ_OK. + */ +extern int unzOpenCurrentFile( unzFile file ){ + int err = UNZ_OK; int Store; uInt iSizeVar; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; uLong offset_local_extrafield; /* offset of the static extra field */ - uInt size_local_extrafield; /* size of the static extra field */ + uInt size_local_extrafield; /* size of the static extra field */ - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - if (!s->current_file_ok) + } + s = (unz_s*)file; + if ( !s->current_file_ok ) { return UNZ_PARAMERROR; + } - if (s->pfile_in_zip_read != NULL) - unzCloseCurrentFile(file); + if ( s->pfile_in_zip_read != NULL ) { + unzCloseCurrentFile( file ); + } - if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, - &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + if ( unzlocal_CheckCurrentFileCoherencyHeader( s,&iSizeVar, + &offset_local_extrafield,&size_local_extrafield ) != UNZ_OK ) { return UNZ_BADZIPFILE; + } pfile_in_zip_read_info = (file_in_zip_read_info_s*) - malloc(sizeof(file_in_zip_read_info_s)); - if (pfile_in_zip_read_info==NULL) + malloc( sizeof( file_in_zip_read_info_s ) ); + if ( pfile_in_zip_read_info == NULL ) { return UNZ_INTERNALERROR; + } - pfile_in_zip_read_info->read_buffer=(char*)malloc(UNZ_BUFSIZE); + pfile_in_zip_read_info->read_buffer = (char*)malloc( UNZ_BUFSIZE ); pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; - pfile_in_zip_read_info->pos_local_extrafield=0; + pfile_in_zip_read_info->pos_local_extrafield = 0; - if (pfile_in_zip_read_info->read_buffer==NULL) - { - free(pfile_in_zip_read_info); + if ( pfile_in_zip_read_info->read_buffer == NULL ) { + free( pfile_in_zip_read_info ); return UNZ_INTERNALERROR; } - pfile_in_zip_read_info->stream_initialised=0; - - if ((s->cur_file_info.compression_method!=0) && - (s->cur_file_info.compression_method!=Z_DEFLATED)) - err=UNZ_BADZIPFILE; - Store = s->cur_file_info.compression_method==0; + pfile_in_zip_read_info->stream_initialised = 0; + + if ( ( s->cur_file_info.compression_method != 0 ) && + ( s->cur_file_info.compression_method != Z_DEFLATED ) ) { + err = UNZ_BADZIPFILE; + } + Store = s->cur_file_info.compression_method == 0; - pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; - pfile_in_zip_read_info->crc32=0; + pfile_in_zip_read_info->crc32_wait = s->cur_file_info.crc; + pfile_in_zip_read_info->crc32 = 0; pfile_in_zip_read_info->compression_method = - s->cur_file_info.compression_method; - pfile_in_zip_read_info->file=s->file; - pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; + s->cur_file_info.compression_method; + pfile_in_zip_read_info->file = s->file; + pfile_in_zip_read_info->byte_before_the_zipfile = s->byte_before_the_zipfile; - pfile_in_zip_read_info->stream.total_out = 0; + pfile_in_zip_read_info->stream.total_out = 0; + + if ( !Store ) { + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidp)0; + + err = inflateInit2( &pfile_in_zip_read_info->stream, -MAX_WBITS ); + if ( err == Z_OK ) { + pfile_in_zip_read_info->stream_initialised = 1; + } + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. + * In unzip, i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ + } + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size ; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size ; + + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; - if (!Store) - { - pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; - pfile_in_zip_read_info->stream.zfree = (free_func)0; - pfile_in_zip_read_info->stream.opaque = (voidp)0; - - err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); - if (err == Z_OK) - pfile_in_zip_read_info->stream_initialised=1; - /* windowBits is passed < 0 to tell that there is no zlib header. - * Note that in this case inflate *requires* an extra "dummy" byte - * after the compressed stream in order to complete decompression and - * return Z_STREAM_END. - * In unzip, i don't wait absolutely Z_STREAM_END because I known the - * size of both compressed and uncompressed data - */ - } - pfile_in_zip_read_info->rest_read_compressed = - s->cur_file_info.compressed_size ; - pfile_in_zip_read_info->rest_read_uncompressed = - s->cur_file_info.uncompressed_size ; - - - pfile_in_zip_read_info->pos_in_zipfile = - s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + - iSizeVar; - pfile_in_zip_read_info->stream.avail_in = (uInt)0; s->pfile_in_zip_read = pfile_in_zip_read_info; - return UNZ_OK; + return UNZ_OK; } /* - Read bytes from the current file. - buf contain buffer where data must be copied - len the size of buf. + Read bytes from the current file. + buf contain buffer where data must be copied + len the size of buf. - return the number of byte copied if somes bytes are copied - return 0 if the end of file was reached - return <0 with error code if there is an error + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) -*/ -extern int unzReadCurrentFile (unzFile file, void *buf, unsigned len) -{ - int err=UNZ_OK; + */ +extern int unzReadCurrentFile( unzFile file, void *buf, unsigned len ){ + int err = UNZ_OK; uInt iRead = 0; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + } + s = (unz_s*)file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if ( pfile_in_zip_read_info == NULL ) { return UNZ_PARAMERROR; + } - if ((pfile_in_zip_read_info->read_buffer == NULL)) + if ( ( pfile_in_zip_read_info->read_buffer == NULL ) ) { return UNZ_END_OF_LIST_OF_FILE; - if (len==0) + } + if ( len == 0 ) { return 0; + } pfile_in_zip_read_info->stream.next_out = (Byte*)buf; pfile_in_zip_read_info->stream.avail_out = (uInt)len; - - if (len>pfile_in_zip_read_info->rest_read_uncompressed) - pfile_in_zip_read_info->stream.avail_out = - (uInt)pfile_in_zip_read_info->rest_read_uncompressed; - while (pfile_in_zip_read_info->stream.avail_out>0) + if ( len > pfile_in_zip_read_info->rest_read_uncompressed ) { + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_uncompressed; + } + + while ( pfile_in_zip_read_info->stream.avail_out > 0 ) { - if ((pfile_in_zip_read_info->stream.avail_in==0) && - (pfile_in_zip_read_info->rest_read_compressed>0)) - { + if ( ( pfile_in_zip_read_info->stream.avail_in == 0 ) && + ( pfile_in_zip_read_info->rest_read_compressed > 0 ) ) { uInt uReadThis = UNZ_BUFSIZE; - if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed < uReadThis ) { uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed; - if (uReadThis == 0) + } + if ( uReadThis == 0 ) { return UNZ_EOF; - if (s->cur_file_info.compressed_size == pfile_in_zip_read_info->rest_read_compressed) - if (fseek(pfile_in_zip_read_info->file, - pfile_in_zip_read_info->pos_in_zipfile + - pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0) + } + if ( s->cur_file_info.compressed_size == pfile_in_zip_read_info->rest_read_compressed ) { + if ( fseek( pfile_in_zip_read_info->file, + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET ) != 0 ) { return UNZ_ERRNO; - if (fread(pfile_in_zip_read_info->read_buffer,uReadThis,1, - pfile_in_zip_read_info->file)!=1) + } + } + if ( fread( pfile_in_zip_read_info->read_buffer,uReadThis,1, + pfile_in_zip_read_info->file ) != 1 ) { return UNZ_ERRNO; + } pfile_in_zip_read_info->pos_in_zipfile += uReadThis; - pfile_in_zip_read_info->rest_read_compressed-=uReadThis; - - pfile_in_zip_read_info->stream.next_in = - (Byte*)pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->rest_read_compressed -= uReadThis; + + pfile_in_zip_read_info->stream.next_in = + (Byte*)pfile_in_zip_read_info->read_buffer; pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; } - if (pfile_in_zip_read_info->compression_method==0) - { + if ( pfile_in_zip_read_info->compression_method == 0 ) { uInt uDoCopy,i ; - if (pfile_in_zip_read_info->stream.avail_out < - pfile_in_zip_read_info->stream.avail_in) + if ( pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in ) { uDoCopy = pfile_in_zip_read_info->stream.avail_out ; - else + } + else{ uDoCopy = pfile_in_zip_read_info->stream.avail_in ; - - for (i=0;istream.next_out+i) = - *(pfile_in_zip_read_info->stream.next_in+i); - - pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, - pfile_in_zip_read_info->stream.next_out, - uDoCopy); - pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + } + + for ( i = 0; i < uDoCopy; i++ ) + *( pfile_in_zip_read_info->stream.next_out + i ) = + *( pfile_in_zip_read_info->stream.next_in + i ); + + pfile_in_zip_read_info->crc32 = crc32( pfile_in_zip_read_info->crc32, + pfile_in_zip_read_info->stream.next_out, + uDoCopy ); + pfile_in_zip_read_info->rest_read_uncompressed -= uDoCopy; pfile_in_zip_read_info->stream.avail_in -= uDoCopy; pfile_in_zip_read_info->stream.avail_out -= uDoCopy; pfile_in_zip_read_info->stream.next_out += uDoCopy; pfile_in_zip_read_info->stream.next_in += uDoCopy; - pfile_in_zip_read_info->stream.total_out += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; iRead += uDoCopy; } else @@ -2134,367 +2212,390 @@ extern int unzReadCurrentFile (unzFile file, void *buf, unsigned len) uLong uTotalOutBefore,uTotalOutAfter; const Byte *bufBefore; uLong uOutThis; - int flush=Z_SYNC_FLUSH; + int flush = Z_SYNC_FLUSH; uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; bufBefore = pfile_in_zip_read_info->stream.next_out; /* - if ((pfile_in_zip_read_info->rest_read_uncompressed == + if ((pfile_in_zip_read_info->rest_read_uncompressed == pfile_in_zip_read_info->stream.avail_out) && - (pfile_in_zip_read_info->rest_read_compressed == 0)) - flush = Z_FINISH; - */ - err=inflate(&pfile_in_zip_read_info->stream,flush); + (pfile_in_zip_read_info->rest_read_compressed == 0)) + flush = Z_FINISH; + */ + err = inflate( &pfile_in_zip_read_info->stream,flush ); uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; - uOutThis = uTotalOutAfter-uTotalOutBefore; - - pfile_in_zip_read_info->crc32 = - crc32(pfile_in_zip_read_info->crc32,bufBefore, - (uInt)(uOutThis)); + uOutThis = uTotalOutAfter - uTotalOutBefore; + + pfile_in_zip_read_info->crc32 = + crc32( pfile_in_zip_read_info->crc32,bufBefore, + (uInt)( uOutThis ) ); pfile_in_zip_read_info->rest_read_uncompressed -= - uOutThis; + uOutThis; + + iRead += (uInt)( uTotalOutAfter - uTotalOutBefore ); - iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); - - if (err==Z_STREAM_END) - return (iRead==0) ? UNZ_EOF : iRead; - if (err!=Z_OK) + if ( err == Z_STREAM_END ) { + return ( iRead == 0 ) ? UNZ_EOF : iRead; + } + if ( err != Z_OK ) { break; + } } } - if (err==Z_OK) + if ( err == Z_OK ) { return iRead; + } return err; } /* - Give the current position in uncompressed data -*/ -extern long unztell (unzFile file) -{ + Give the current position in uncompressed data + */ +extern long unztell( unzFile file ){ unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + } + s = (unz_s*)file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if ( pfile_in_zip_read_info == NULL ) { return UNZ_PARAMERROR; + } return (long)pfile_in_zip_read_info->stream.total_out; } /* - return 1 if the end of file was reached, 0 elsewhere -*/ -extern int unzeof (unzFile file) -{ + return 1 if the end of file was reached, 0 elsewhere + */ +extern int unzeof( unzFile file ){ unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + } + s = (unz_s*)file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if ( pfile_in_zip_read_info == NULL ) { return UNZ_PARAMERROR; - - if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + } + + if ( pfile_in_zip_read_info->rest_read_uncompressed == 0 ) { return 1; - else + } + else{ return 0; + } } /* - Read extra field from the current file (opened by unzOpenCurrentFile) - This is the static-header version of the extra field (sometimes, there is + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the static-header version of the extra field (sometimes, there is more info in the static-header version than in the central-header) - if buf==NULL, it return the size of the static extra field that can be read + if buf==NULL, it return the size of the static extra field that can be read - if buf!=NULL, len is the size of the buffer, the extra header is copied in - buf. - the return value is the number of bytes copied in buf, or (if <0) - the error code -*/ -extern int unzGetLocalExtrafield (unzFile file,void *buf,unsigned len) -{ + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code + */ +extern int unzGetLocalExtrafield( unzFile file,void *buf,unsigned len ){ unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; uInt read_now; uLong size_to_read; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + } + s = (unz_s*)file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if ( pfile_in_zip_read_info == NULL ) { return UNZ_PARAMERROR; + } - size_to_read = (pfile_in_zip_read_info->size_local_extrafield - - pfile_in_zip_read_info->pos_local_extrafield); + size_to_read = ( pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield ); - if (buf==NULL) + if ( buf == NULL ) { return (int)size_to_read; - - if (len>size_to_read) + } + + if ( len > size_to_read ) { read_now = (uInt)size_to_read; - else + } + else{ read_now = (uInt)len ; + } - if (read_now==0) + if ( read_now == 0 ) { return 0; - - if (fseek(pfile_in_zip_read_info->file, - pfile_in_zip_read_info->offset_local_extrafield + - pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0) + } + + if ( fseek( pfile_in_zip_read_info->file, + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET ) != 0 ) { return UNZ_ERRNO; + } - if (fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1) + if ( fread( buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file ) != 1 ) { return UNZ_ERRNO; + } return (int)read_now; } /* - Close the file in zip opened with unzipOpenCurrentFile - Return UNZ_CRCERROR if all the file was read but the CRC is not good -*/ -extern int unzCloseCurrentFile (unzFile file) -{ - int err=UNZ_OK; + Close the file in zip opened with unzipOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good + */ +extern int unzCloseCurrentFile( unzFile file ){ + int err = UNZ_OK; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + } + s = (unz_s*)file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if ( pfile_in_zip_read_info == NULL ) { return UNZ_PARAMERROR; + } - if (pfile_in_zip_read_info->rest_read_uncompressed == 0) - { - if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) - err=UNZ_CRCERROR; + if ( pfile_in_zip_read_info->rest_read_uncompressed == 0 ) { + if ( pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait ) { + err = UNZ_CRCERROR; + } } - free(pfile_in_zip_read_info->read_buffer); + free( pfile_in_zip_read_info->read_buffer ); pfile_in_zip_read_info->read_buffer = NULL; - if (pfile_in_zip_read_info->stream_initialised) - inflateEnd(&pfile_in_zip_read_info->stream); + if ( pfile_in_zip_read_info->stream_initialised ) { + inflateEnd( &pfile_in_zip_read_info->stream ); + } pfile_in_zip_read_info->stream_initialised = 0; - free(pfile_in_zip_read_info); + free( pfile_in_zip_read_info ); - s->pfile_in_zip_read=NULL; + s->pfile_in_zip_read = NULL; return err; } /* - Get the global comment string of the ZipFile, in the szComment buffer. - uSizeBuf is the size of the szComment buffer. - return the number of byte copied or an error code <0 -*/ -extern int unzGetGlobalComment (unzFile file, char *szComment, uLong uSizeBuf) -{ + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 + */ +extern int unzGetGlobalComment( unzFile file, char *szComment, uLong uSizeBuf ){ unz_s* s; uLong uReadThis ; - if (file==NULL) + if ( file == NULL ) { return UNZ_PARAMERROR; - s=(unz_s*)file; + } + s = (unz_s*)file; uReadThis = uSizeBuf; - if (uReadThis>s->gi.size_comment) + if ( uReadThis > s->gi.size_comment ) { uReadThis = s->gi.size_comment; + } - if (fseek(s->file,s->central_pos+22,SEEK_SET)!=0) + if ( fseek( s->file,s->central_pos + 22,SEEK_SET ) != 0 ) { return UNZ_ERRNO; + } - if (uReadThis>0) - { - *szComment='\0'; - if (fread(szComment,(uInt)uReadThis,1,s->file)!=1) - return UNZ_ERRNO; - } + if ( uReadThis > 0 ) { + *szComment = '\0'; + if ( fread( szComment,(uInt)uReadThis,1,s->file ) != 1 ) { + return UNZ_ERRNO; + } + } - if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) - *(szComment+s->gi.size_comment)='\0'; + if ( ( szComment != NULL ) && ( uSizeBuf > s->gi.size_comment ) ) { + *( szComment + s->gi.size_comment ) = '\0'; + } return (int)uReadThis; } /* crc32.c -- compute the CRC-32 of a data stream * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ #ifdef DYNAMIC_CRC_TABLE static int crc_table_empty = 1; static uLong crc_table[256]; -static void make_crc_table OF((void)); +static void make_crc_table OF( (void) ); /* - Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: - x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. - - Polynomials over GF(2) are represented in binary, one bit per coefficient, - with the lowest powers in the most significant bit. Then adding polynomials - is just exclusive-or, and multiplying a polynomial by x is a right shift by - one. If we call the above polynomial p, and represent a byte as the - polynomial q, also with the lowest power in the most significant bit (so the - byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, - where a mod b means the remainder after dividing a by b. - - This calculation is done using the shift-register method of multiplying and - taking the remainder. The register is initialized to zero, and for each - incoming bit, x^32 is added mod p to the register if the bit is a one (where - x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by - x (which is shifting right by one and adding x^32 mod p if the bit shifted - out is a one). We start with the highest power (least significant bit) of - q and repeat for all eight bits of q. - - The table is simply the CRC of all possible eight bit values. This is all - the information needed to generate CRC's on data a byte at a time for all - combinations of CRC register values and incoming bytes. -*/ -static void make_crc_table() -{ - uLong c; - int n, k; - uLong poly; /* polynomial exclusive-or pattern */ - /* terms of polynomial defining this crc (except x^32): */ - static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; - - /* make exclusive-or pattern from polynomial (0xedb88320L) */ - poly = 0L; - for (n = 0; n < sizeof(p)/sizeof(Byte); n++) - poly |= 1L << (31 - p[n]); - - for (n = 0; n < 256; n++) - { - c = (uLong)n; - for (k = 0; k < 8; k++) - c = c & 1 ? poly ^ (c >> 1) : c >> 1; - crc_table[n] = c; - } - crc_table_empty = 0; + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all + the information needed to generate CRC's on data a byte at a time for all + combinations of CRC register values and incoming bytes. + */ +static void make_crc_table(){ + uLong c; + int n, k; + uLong poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* make exclusive-or pattern from polynomial (0xedb88320L) */ + poly = 0L; + for ( n = 0; n < sizeof( p ) / sizeof( Byte ); n++ ) + poly |= 1L << ( 31 - p[n] ); + + for ( n = 0; n < 256; n++ ) + { + c = (uLong)n; + for ( k = 0; k < 8; k++ ) + c = c & 1 ? poly ^ ( c >> 1 ) : c >> 1; + crc_table[n] = c; + } + crc_table_empty = 0; } #else /* ======================================================================== * Table of CRC-32's of all single-byte values (made by make_crc_table) */ static const uLong crc_table[256] = { - 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, - 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, - 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, - 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, - 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, - 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, - 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, - 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, - 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, - 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, - 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, - 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, - 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, - 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, - 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, - 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, - 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, - 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, - 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, - 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, - 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, - 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, - 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, - 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, - 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, - 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, - 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, - 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, - 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, - 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, - 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, - 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, - 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, - 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, - 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, - 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, - 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, - 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, - 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, - 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, - 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, - 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, - 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, - 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, - 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, - 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, - 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, - 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, - 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, - 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, - 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, - 0x2d02ef8dL + 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, + 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, + 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, + 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, + 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, + 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, + 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, + 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, + 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, + 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, + 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, + 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, + 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, + 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, + 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, + 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, + 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, + 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, + 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, + 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, + 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, + 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, + 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, + 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, + 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, + 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, + 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, + 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, + 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, + 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, + 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, + 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, + 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, + 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, + 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, + 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, + 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, + 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, + 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, + 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, + 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, + 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, + 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, + 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, + 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, + 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, + 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, + 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, + 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, + 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, + 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, + 0x2d02ef8dL }; #endif /* ========================================================================= * This function can be used by asm versions of crc32() */ -const uLong * get_crc_table() -{ +const uLong * get_crc_table(){ #ifdef DYNAMIC_CRC_TABLE - if (crc_table_empty) make_crc_table(); + if ( crc_table_empty ) { + make_crc_table(); + } #endif - return (const uLong *)crc_table; + return (const uLong *)crc_table; } /* ========================================================================= */ -#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8); -#define DO2(buf) DO1(buf); DO1(buf); -#define DO4(buf) DO2(buf); DO2(buf); -#define DO8(buf) DO4(buf); DO4(buf); +#define DO1( buf ) crc = crc_table[( (int)crc ^ ( *buf++ ) ) & 0xff] ^ ( crc >> 8 ); +#define DO2( buf ) DO1( buf ); DO1( buf ); +#define DO4( buf ) DO2( buf ); DO2( buf ); +#define DO8( buf ) DO4( buf ); DO4( buf ); /* ========================================================================= */ -uLong crc32(uLong crc, const Byte *buf, uInt len) -{ - if (buf == Z_NULL) return 0L; +uLong crc32( uLong crc, const Byte *buf, uInt len ){ + if ( buf == Z_NULL ) { + return 0L; + } #ifdef DYNAMIC_CRC_TABLE - if (crc_table_empty) - make_crc_table(); + if ( crc_table_empty ) { + make_crc_table(); + } #endif - crc = crc ^ 0xffffffffL; - while (len >= 8) - { - DO8(buf); - len -= 8; - } - if (len) do { - DO1(buf); - } while (--len); - return crc ^ 0xffffffffL; + crc = crc ^ 0xffffffffL; + while ( len >= 8 ) + { + DO8( buf ); + len -= 8; + } + if ( len ) { + do { + DO1( buf ); + } while ( --len ); + } + return crc ^ 0xffffffffL; } /* infblock.h -- header to use infblock.c * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -2505,32 +2606,32 @@ uLong crc32(uLong crc, const Byte *buf, uInt len) struct inflate_blocks_state; typedef struct inflate_blocks_state inflate_blocks_statef; -extern inflate_blocks_statef * inflate_blocks_new OF(( - z_streamp z, - check_func c, /* check function */ - uInt w)); /* window size */ +extern inflate_blocks_statef * inflate_blocks_new OF( ( + z_streamp z, + check_func c, /* check function */ + uInt w ) ); /* window size */ -extern int inflate_blocks OF(( - inflate_blocks_statef *, - z_streamp , - int)); /* initial return code */ +extern int inflate_blocks OF( ( + inflate_blocks_statef *, + z_streamp, + int ) ); /* initial return code */ -extern void inflate_blocks_reset OF(( - inflate_blocks_statef *, - z_streamp , - uLong *)); /* check value on output */ +extern void inflate_blocks_reset OF( ( + inflate_blocks_statef *, + z_streamp, + uLong * ) ); /* check value on output */ -extern int inflate_blocks_free OF(( - inflate_blocks_statef *, - z_streamp)); +extern int inflate_blocks_free OF( ( + inflate_blocks_statef *, + z_streamp ) ); -extern void inflate_set_dictionary OF(( - inflate_blocks_statef *s, - const Byte *d, /* dictionary */ - uInt n)); /* dictionary length */ +extern void inflate_set_dictionary OF( ( + inflate_blocks_statef * s, + const Byte * d, /* dictionary */ + uInt n ) ); /* dictionary length */ -extern int inflate_blocks_sync_point OF(( - inflate_blocks_statef *s)); +extern int inflate_blocks_sync_point OF( ( + inflate_blocks_statef * s ) ); /* simplify the use of the inflate_huft type with some defines */ #define exop word.what.Exop @@ -2538,11 +2639,12 @@ extern int inflate_blocks_sync_point OF(( /* Table for deflate from PKZIP's appnote.txt. */ static const uInt border[] = { /* Order of the bit length code lengths */ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 +}; /* inftrees.h -- header to use inftrees.c * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -2556,15 +2658,15 @@ static const uInt border[] = { /* Order of the bit length code lengths */ typedef struct inflate_huft_s inflate_huft; struct inflate_huft_s { - union { - struct { - Byte Exop; /* number of extra bits or operation */ - Byte Bits; /* number of bits in this code or subcode */ - } what; - uInt pad; /* pad structure to a power of 2 (4 bytes for */ - } word; /* 16-bit, 8 bytes for 32-bit int's) */ - uInt base; /* literal, length base, distance base, - or table offset */ + union { + struct { + Byte Exop; /* number of extra bits or operation */ + Byte Bits; /* number of bits in this code or subcode */ + } what; + uInt pad; /* pad structure to a power of 2 (4 bytes for */ + } word; /* 16-bit, 8 bytes for 32-bit int's) */ + uInt base; /* literal, length base, distance base, + or table offset */ }; /* Maximum size of dynamic tree. The maximum found in a long but non- @@ -2574,35 +2676,35 @@ struct inflate_huft_s { value below is more than safe. */ #define MANY 1440 -extern int inflate_trees_bits OF(( - uInt *, /* 19 code lengths */ - uInt *, /* bits tree desired/actual depth */ - inflate_huft * *, /* bits tree result */ - inflate_huft *, /* space for trees */ - z_streamp)); /* for messages */ - -extern int inflate_trees_dynamic OF(( - uInt, /* number of literal/length codes */ - uInt, /* number of distance codes */ - uInt *, /* that many (total) code lengths */ - uInt *, /* literal desired/actual bit depth */ - uInt *, /* distance desired/actual bit depth */ - inflate_huft * *, /* literal/length tree result */ - inflate_huft * *, /* distance tree result */ - inflate_huft *, /* space for trees */ - z_streamp)); /* for messages */ - -extern int inflate_trees_fixed OF(( - uInt *, /* literal desired/actual bit depth */ - uInt *, /* distance desired/actual bit depth */ - inflate_huft * *, /* literal/length tree result */ - inflate_huft * *, /* distance tree result */ - z_streamp)); /* for memory allocation */ +extern int inflate_trees_bits OF( ( + uInt *, /* 19 code lengths */ + uInt *, /* bits tree desired/actual depth */ + inflate_huft * *, /* bits tree result */ + inflate_huft *, /* space for trees */ + z_streamp ) ); /* for messages */ + +extern int inflate_trees_dynamic OF( ( + uInt, /* number of literal/length codes */ + uInt, /* number of distance codes */ + uInt *, /* that many (total) code lengths */ + uInt *, /* literal desired/actual bit depth */ + uInt *, /* distance desired/actual bit depth */ + inflate_huft * *, /* literal/length tree result */ + inflate_huft * *, /* distance tree result */ + inflate_huft *, /* space for trees */ + z_streamp ) ); /* for messages */ + +extern int inflate_trees_fixed OF( ( + uInt *, /* literal desired/actual bit depth */ + uInt *, /* distance desired/actual bit depth */ + inflate_huft * *, /* literal/length tree result */ + inflate_huft * *, /* distance tree result */ + z_streamp ) ); /* for memory allocation */ /* infcodes.h -- header to use infcodes.c * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -2613,23 +2715,23 @@ extern int inflate_trees_fixed OF(( struct inflate_codes_state; typedef struct inflate_codes_state inflate_codes_statef; -extern inflate_codes_statef *inflate_codes_new OF(( - uInt, uInt, - inflate_huft *, inflate_huft *, - z_streamp )); +extern inflate_codes_statef *inflate_codes_new OF( ( + uInt, uInt, + inflate_huft *, inflate_huft *, + z_streamp ) ); -extern int inflate_codes OF(( - inflate_blocks_statef *, - z_streamp , - int)); +extern int inflate_codes OF( ( + inflate_blocks_statef *, + z_streamp, + int ) ); -extern void inflate_codes_free OF(( - inflate_codes_statef *, - z_streamp )); +extern void inflate_codes_free OF( ( + inflate_codes_statef *, + z_streamp ) ); /* infutil.h -- types and macros common to blocks and codes * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -2641,75 +2743,76 @@ extern void inflate_codes_free OF(( #define _INFUTIL_H typedef enum { - TYPE, /* get type bits (3, including end bit) */ - LENS, /* get lengths for stored */ - STORED, /* processing stored block */ - TABLE, /* get table lengths */ - BTREE, /* get bit lengths tree for a dynamic block */ - DTREE, /* get length, distance trees for a dynamic block */ - CODES, /* processing fixed or dynamic block */ - DRY, /* output remaining window bytes */ - DONE, /* finished last block, done */ - BAD} /* got a data error--stuck here */ + TYPE, /* get type bits (3, including end bit) */ + LENS, /* get lengths for stored */ + STORED, /* processing stored block */ + TABLE, /* get table lengths */ + BTREE, /* get bit lengths tree for a dynamic block */ + DTREE, /* get length, distance trees for a dynamic block */ + CODES, /* processing fixed or dynamic block */ + DRY, /* output remaining window bytes */ + DONE, /* finished last block, done */ + BAD +} /* got a data error--stuck here */ inflate_block_mode; /* inflate blocks semi-private state */ struct inflate_blocks_state { - /* mode */ - inflate_block_mode mode; /* current inflate_block mode */ - - /* mode dependent information */ - union { - uInt left; /* if STORED, bytes left to copy */ - struct { - uInt table; /* table lengths (14 bits) */ - uInt index; /* index into blens (or border) */ - uInt *blens; /* bit lengths of codes */ - uInt bb; /* bit length tree depth */ - inflate_huft *tb; /* bit length decoding tree */ - } trees; /* if DTREE, decoding info for trees */ - struct { - inflate_codes_statef - *codes; - } decode; /* if CODES, current state */ - } sub; /* submode */ - uInt last; /* true if this block is the last block */ - - /* mode independent information */ - uInt bitk; /* bits in bit buffer */ - uLong bitb; /* bit buffer */ - inflate_huft *hufts; /* single malloc for tree space */ - Byte *window; /* sliding window */ - Byte *end; /* one byte after sliding window */ - Byte *read; /* window read pointer */ - Byte *write; /* window write pointer */ - check_func checkfn; /* check function */ - uLong check; /* check on output */ + /* mode */ + inflate_block_mode mode; /* current inflate_block mode */ + + /* mode dependent information */ + union { + uInt left; /* if STORED, bytes left to copy */ + struct { + uInt table; /* table lengths (14 bits) */ + uInt index; /* index into blens (or border) */ + uInt *blens; /* bit lengths of codes */ + uInt bb; /* bit length tree depth */ + inflate_huft *tb; /* bit length decoding tree */ + } trees; /* if DTREE, decoding info for trees */ + struct { + inflate_codes_statef + *codes; + } decode; /* if CODES, current state */ + } sub; /* submode */ + uInt last; /* true if this block is the last block */ + + /* mode independent information */ + uInt bitk; /* bits in bit buffer */ + uLong bitb; /* bit buffer */ + inflate_huft *hufts; /* single malloc for tree space */ + Byte *window; /* sliding window */ + Byte *end; /* one byte after sliding window */ + Byte *read; /* window read pointer */ + Byte *write; /* window write pointer */ + check_func checkfn; /* check function */ + uLong check; /* check on output */ }; /* defines for inflate input/output */ /* update pointers and return */ -#define UPDBITS {s->bitb=b;s->bitk=k;} -#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;} -#define UPDOUT {s->write=q;} +#define UPDBITS {s->bitb = b; s->bitk = k; } +#define UPDIN {z->avail_in = n; z->total_in += p - z->next_in; z->next_in = p; } +#define UPDOUT {s->write = q; } #define UPDATE {UPDBITS UPDIN UPDOUT} -#define LEAVE {UPDATE return inflate_flush(s,z,r);} +#define LEAVE {UPDATE return inflate_flush( s,z,r ); } /* get bytes and bits */ -#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;} -#define NEEDBYTE {if(n)r=Z_OK;else LEAVE} -#define NEXTBYTE (n--,*p++) -#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<>=(j);k-=(j);} +#define LOADIN {p = z->next_in; n = z->avail_in; b = s->bitb; k = s->bitk; } +#define NEEDBYTE {if ( n ) {r = Z_OK; }else LEAVE} +#define NEXTBYTE ( n--,*p++ ) +#define NEEDBITS( j ) {while ( k < ( j ) ) {NEEDBYTE; b |= ( (uLong)NEXTBYTE ) << k; k += 8; }} +#define DUMPBITS( j ) {b >>= ( j ); k -= ( j ); } /* output bytes */ -#define WAVAIL (uInt)(qread?s->read-q-1:s->end-q) -#define LOADOUT {q=s->write;m=(uInt)WAVAIL;} -#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}} -#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT} -#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;} -#define OUTBYTE(a) {*q++=(Byte)(a);m--;} +#define WAVAIL (uInt)( q < s->read ? s->read - q - 1 : s->end - q ) +#define LOADOUT {q = s->write; m = (uInt)WAVAIL; } +#define WRAP {if ( q == s->end && s->read != s->window ) {q = s->window; m = (uInt)WAVAIL; }} +#define FLUSH {UPDOUT r = inflate_flush( s,z,r ); LOADOUT} +#define NEEDOUT {if ( m == 0 ) {WRAP if ( m == 0 ) {FLUSH WRAP if ( m == 0 ) {LEAVE}} r = Z_OK; }} +#define OUTBYTE( a ) {*q++ = (Byte)( a ); m--; } /* load static pointers */ #define LOAD {LOADIN LOADOUT} @@ -2717,14 +2820,14 @@ struct inflate_blocks_state { extern uInt inflate_mask[17]; /* copy as much as possible from the sliding window to the output area */ -extern int inflate_flush OF(( - inflate_blocks_statef *, - z_streamp , - int)); +extern int inflate_flush OF( ( + inflate_blocks_statef *, + z_streamp, + int ) ); #endif - + /* Notes beyond the 1.93a appnote.txt: @@ -2757,420 +2860,426 @@ extern int inflate_flush OF(( (1+6+6). Therefore, to output three times the length, you output three codes (1+1+1), whereas to output four times the same length, you only need two codes (1+3). Hmm. - 10. In the tree reconstruction algorithm, Code = Code + Increment + 10. In the tree reconstruction algorithm, Code = Code + Increment only if BitLength(i) is not zero. (Pretty obvious.) - 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) - 12. Note: length code 284 can represent 227-258, but length code 285 + 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) + 12. Note: length code 284 can represent 227-258, but length code 285 really is 258. The last length deserves its own, short code since it gets used a lot in very redundant files. The length 258 is special since 258 - 3 (the min match length) is 255. - 13. The literal/length and distance code bit lengths are read as a + 13. The literal/length and distance code bit lengths are read as a single stream of lengths. It is possible (and advantageous) for a repeat code (16, 17, or 18) to go across the boundary between the two sets of lengths. */ -void inflate_blocks_reset(inflate_blocks_statef *s, z_streamp z, uLong *c) -{ - if (c != Z_NULL) - *c = s->check; - if (s->mode == BTREE || s->mode == DTREE) - ZFREE(z, s->sub.trees.blens); - if (s->mode == CODES) - inflate_codes_free(s->sub.decode.codes, z); - s->mode = TYPE; - s->bitk = 0; - s->bitb = 0; - s->read = s->write = s->window; - if (s->checkfn != Z_NULL) - z->adler = s->check = (*s->checkfn)(0L, (const Byte *)Z_NULL, 0); - Tracev(("inflate: blocks reset\n")); +void inflate_blocks_reset( inflate_blocks_statef *s, z_streamp z, uLong *c ){ + if ( c != Z_NULL ) { + *c = s->check; + } + if ( s->mode == BTREE || s->mode == DTREE ) { + ZFREE( z, s->sub.trees.blens ); + } + if ( s->mode == CODES ) { + inflate_codes_free( s->sub.decode.codes, z ); + } + s->mode = TYPE; + s->bitk = 0; + s->bitb = 0; + s->read = s->write = s->window; + if ( s->checkfn != Z_NULL ) { + z->adler = s->check = ( *s->checkfn )( 0L, (const Byte *)Z_NULL, 0 ); + } + Tracev( ( "inflate: blocks reset\n" ) ); } -inflate_blocks_statef *inflate_blocks_new(z_streamp z, check_func c, uInt w) -{ - inflate_blocks_statef *s; - - if ((s = (inflate_blocks_statef *)ZALLOC - (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL) - return s; - if ((s->hufts = - (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL) - { - ZFREE(z, s); - return Z_NULL; - } - if ((s->window = (Byte *)ZALLOC(z, 1, w)) == Z_NULL) - { - ZFREE(z, s->hufts); - ZFREE(z, s); - return Z_NULL; - } - s->end = s->window + w; - s->checkfn = c; - s->mode = TYPE; - Tracev(("inflate: blocks allocated\n")); - inflate_blocks_reset(s, z, Z_NULL); - return s; +inflate_blocks_statef *inflate_blocks_new( z_streamp z, check_func c, uInt w ){ + inflate_blocks_statef *s; + + if ( ( s = (inflate_blocks_statef *)ZALLOC + ( z,1,sizeof( struct inflate_blocks_state ) ) ) == Z_NULL ) { + return s; + } + if ( ( s->hufts = + (inflate_huft *)ZALLOC( z, sizeof( inflate_huft ), MANY ) ) == Z_NULL ) { + ZFREE( z, s ); + return Z_NULL; + } + if ( ( s->window = (Byte *)ZALLOC( z, 1, w ) ) == Z_NULL ) { + ZFREE( z, s->hufts ); + ZFREE( z, s ); + return Z_NULL; + } + s->end = s->window + w; + s->checkfn = c; + s->mode = TYPE; + Tracev( ( "inflate: blocks allocated\n" ) ); + inflate_blocks_reset( s, z, Z_NULL ); + return s; } -int inflate_blocks(inflate_blocks_statef *s, z_streamp z, int r) -{ - uInt t; /* temporary storage */ - uLong b; /* bit buffer */ - uInt k; /* bits in bit buffer */ - Byte *p; /* input data pointer */ - uInt n; /* bytes available there */ - Byte *q; /* output window write pointer */ - uInt m; /* bytes to end of window or read pointer */ - - /* copy input/output information to locals (UPDATE macro restores) */ - LOAD - - /* process input based on current state */ - while (1) switch (s->mode) - { - case TYPE: - NEEDBITS(3) - t = (uInt)b & 7; - s->last = t & 1; - switch (t >> 1) - { - case 0: /* stored */ - Tracev(("inflate: stored block%s\n", - s->last ? " (last)" : "")); - DUMPBITS(3) - t = k & 7; /* go to byte boundary */ - DUMPBITS(t) - s->mode = LENS; /* get length of stored block */ - break; - case 1: /* fixed */ - Tracev(("inflate: fixed codes block%s\n", - s->last ? " (last)" : "")); - { - uInt bl, bd; - inflate_huft *tl, *td; - - inflate_trees_fixed(&bl, &bd, &tl, &td, z); - s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z); - if (s->sub.decode.codes == Z_NULL) - { - r = Z_MEM_ERROR; - LEAVE - } - } - DUMPBITS(3) - s->mode = CODES; - break; - case 2: /* dynamic */ - Tracev(("inflate: dynamic codes block%s\n", - s->last ? " (last)" : "")); - DUMPBITS(3) - s->mode = TABLE; - break; - case 3: /* illegal */ - DUMPBITS(3) - s->mode = BAD; - z->msg = (char*)"invalid block type"; - r = Z_DATA_ERROR; - LEAVE - } - break; - case LENS: - NEEDBITS(32) - if ((((~b) >> 16) & 0xffff) != (b & 0xffff)) - { - s->mode = BAD; - z->msg = (char*)"invalid stored block lengths"; - r = Z_DATA_ERROR; - LEAVE - } - s->sub.left = (uInt)b & 0xffff; - b = k = 0; /* dump bits */ - Tracev(("inflate: stored length %u\n", s->sub.left)); - s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE); - break; - case STORED: - if (n == 0) - LEAVE - NEEDOUT - t = s->sub.left; - if (t > n) t = n; - if (t > m) t = m; - zmemcpy(q, p, t); - p += t; n -= t; - q += t; m -= t; - if ((s->sub.left -= t) != 0) - break; - Tracev(("inflate: stored end, %lu total out\n", - z->total_out + (q >= s->read ? q - s->read : - (s->end - s->read) + (q - s->window)))); - s->mode = s->last ? DRY : TYPE; - break; - case TABLE: - NEEDBITS(14) - s->sub.trees.table = t = (uInt)b & 0x3fff; +int inflate_blocks( inflate_blocks_statef *s, z_streamp z, int r ){ + uInt t; /* temporary storage */ + uLong b; /* bit buffer */ + uInt k; /* bits in bit buffer */ + Byte *p; /* input data pointer */ + uInt n; /* bytes available there */ + Byte *q; /* output window write pointer */ + uInt m; /* bytes to end of window or read pointer */ + + /* copy input/output information to locals (UPDATE macro restores) */ + LOAD + + /* process input based on current state */ + while ( 1 ) switch ( s->mode ) + { + case TYPE: + NEEDBITS( 3 ) + t = (uInt)b & 7; + s->last = t & 1; + switch ( t >> 1 ) + { + case 0: /* stored */ + Tracev( ( "inflate: stored block%s\n", + s->last ? " (last)" : "" ) ); + DUMPBITS( 3 ) + t = k & 7; /* go to byte boundary */ + DUMPBITS( t ) + s->mode = LENS; /* get length of stored block */ + break; + case 1: /* fixed */ + Tracev( ( "inflate: fixed codes block%s\n", + s->last ? " (last)" : "" ) ); + { + uInt bl, bd; + inflate_huft *tl, *td; + + inflate_trees_fixed( &bl, &bd, &tl, &td, z ); + s->sub.decode.codes = inflate_codes_new( bl, bd, tl, td, z ); + if ( s->sub.decode.codes == Z_NULL ) { + r = Z_MEM_ERROR; + LEAVE + } + } + DUMPBITS( 3 ) + s->mode = CODES; + break; + case 2: /* dynamic */ + Tracev( ( "inflate: dynamic codes block%s\n", + s->last ? " (last)" : "" ) ); + DUMPBITS( 3 ) + s->mode = TABLE; + break; + case 3: /* illegal */ + DUMPBITS( 3 ) + s->mode = BAD; + z->msg = (char*)"invalid block type"; + r = Z_DATA_ERROR; + LEAVE + } + break; + case LENS: + NEEDBITS( 32 ) + if ( ( ( ( ~b ) >> 16 ) & 0xffff ) != ( b & 0xffff ) ) { + s->mode = BAD; + z->msg = (char*)"invalid stored block lengths"; + r = Z_DATA_ERROR; + LEAVE + } + s->sub.left = (uInt)b & 0xffff; + b = k = 0; /* dump bits */ + Tracev( ( "inflate: stored length %u\n", s->sub.left ) ); + s->mode = s->sub.left ? STORED : ( s->last ? DRY : TYPE ); + break; + case STORED: + if ( n == 0 ) { + LEAVE + NEEDOUT + t = s->sub.left; + } + if ( t > n ) { + t = n; + } + if ( t > m ) { + t = m; + } + zmemcpy( q, p, t ); + p += t; n -= t; + q += t; m -= t; + if ( ( s->sub.left -= t ) != 0 ) { + break; + } + Tracev( ( "inflate: stored end, %lu total out\n", + z->total_out + ( q >= s->read ? q - s->read : + ( s->end - s->read ) + ( q - s->window ) ) ) ); + s->mode = s->last ? DRY : TYPE; + break; + case TABLE: + NEEDBITS( 14 ) + s->sub.trees.table = t = (uInt)b & 0x3fff; #ifndef PKZIP_BUG_WORKAROUND - if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) - { - s->mode = BAD; - z->msg = (char*)"too many length or distance symbols"; - r = Z_DATA_ERROR; - LEAVE - } + if ( ( t & 0x1f ) > 29 || ( ( t >> 5 ) & 0x1f ) > 29 ) { + s->mode = BAD; + z->msg = (char*)"too many length or distance symbols"; + r = Z_DATA_ERROR; + LEAVE + } #endif - t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); - if ((s->sub.trees.blens = (uInt*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL) - { - r = Z_MEM_ERROR; - LEAVE - } - DUMPBITS(14) - s->sub.trees.index = 0; - Tracev(("inflate: table sizes ok\n")); - s->mode = BTREE; - case BTREE: - while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10)) - { - NEEDBITS(3) - s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7; - DUMPBITS(3) - } - while (s->sub.trees.index < 19) - s->sub.trees.blens[border[s->sub.trees.index++]] = 0; - s->sub.trees.bb = 7; - t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb, - &s->sub.trees.tb, s->hufts, z); - if (t != Z_OK) - { - ZFREE(z, s->sub.trees.blens); - r = t; - if (r == Z_DATA_ERROR) - s->mode = BAD; - LEAVE - } - s->sub.trees.index = 0; - Tracev(("inflate: bits tree ok\n")); - s->mode = DTREE; - case DTREE: - while (t = s->sub.trees.table, - s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f)) - { - inflate_huft *h; - uInt i, j, c; - - t = s->sub.trees.bb; - NEEDBITS(t) - h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]); - t = h->bits; - c = h->base; - if (c < 16) - { - DUMPBITS(t) - s->sub.trees.blens[s->sub.trees.index++] = c; - } - else /* c == 16..18 */ - { - i = c == 18 ? 7 : c - 14; - j = c == 18 ? 11 : 3; - NEEDBITS(t + i) - DUMPBITS(t) - j += (uInt)b & inflate_mask[i]; - DUMPBITS(i) - i = s->sub.trees.index; - t = s->sub.trees.table; - if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || - (c == 16 && i < 1)) - { - ZFREE(z, s->sub.trees.blens); - s->mode = BAD; - z->msg = (char*)"invalid bit length repeat"; - r = Z_DATA_ERROR; - LEAVE - } - c = c == 16 ? s->sub.trees.blens[i - 1] : 0; - do { - s->sub.trees.blens[i++] = c; - } while (--j); - s->sub.trees.index = i; - } - } - s->sub.trees.tb = Z_NULL; - { - uInt bl, bd; - inflate_huft *tl, *td; - inflate_codes_statef *c; - - bl = 9; /* must be <= 9 for lookahead assumptions */ - bd = 6; /* must be <= 9 for lookahead assumptions */ - t = s->sub.trees.table; - t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), - s->sub.trees.blens, &bl, &bd, &tl, &td, - s->hufts, z); - ZFREE(z, s->sub.trees.blens); - if (t != Z_OK) - { - if (t == (uInt)Z_DATA_ERROR) - s->mode = BAD; - r = t; - LEAVE - } - Tracev(("inflate: trees ok\n")); - if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL) - { - r = Z_MEM_ERROR; - LEAVE - } - s->sub.decode.codes = c; - } - s->mode = CODES; - case CODES: - UPDATE - if ((r = inflate_codes(s, z, r)) != Z_STREAM_END) - return inflate_flush(s, z, r); - r = Z_OK; - inflate_codes_free(s->sub.decode.codes, z); - LOAD - Tracev(("inflate: codes end, %lu total out\n", - z->total_out + (q >= s->read ? q - s->read : - (s->end - s->read) + (q - s->window)))); - if (!s->last) - { - s->mode = TYPE; - break; - } - s->mode = DRY; - case DRY: - FLUSH - if (s->read != s->write) - LEAVE - s->mode = DONE; - case DONE: - r = Z_STREAM_END; - LEAVE - case BAD: - r = Z_DATA_ERROR; - LEAVE - default: - r = Z_STREAM_ERROR; - LEAVE - } + t = 258 + ( t & 0x1f ) + ( ( t >> 5 ) & 0x1f ); + if ( ( s->sub.trees.blens = (uInt*)ZALLOC( z, t, sizeof( uInt ) ) ) == Z_NULL ) { + r = Z_MEM_ERROR; + LEAVE + } + DUMPBITS( 14 ) + s->sub.trees.index = 0; + Tracev( ( "inflate: table sizes ok\n" ) ); + s->mode = BTREE; + case BTREE: + while ( s->sub.trees.index < 4 + ( s->sub.trees.table >> 10 ) ) + { + NEEDBITS( 3 ) + s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7; + DUMPBITS( 3 ) + } + while ( s->sub.trees.index < 19 ) + s->sub.trees.blens[border[s->sub.trees.index++]] = 0; + s->sub.trees.bb = 7; + t = inflate_trees_bits( s->sub.trees.blens, &s->sub.trees.bb, + &s->sub.trees.tb, s->hufts, z ); + if ( t != Z_OK ) { + ZFREE( z, s->sub.trees.blens ); + r = t; + if ( r == Z_DATA_ERROR ) { + s->mode = BAD; + } + LEAVE + } + s->sub.trees.index = 0; + Tracev( ( "inflate: bits tree ok\n" ) ); + s->mode = DTREE; + case DTREE: + while ( t = s->sub.trees.table, + s->sub.trees.index < 258 + ( t & 0x1f ) + ( ( t >> 5 ) & 0x1f ) ) + { + inflate_huft *h; + uInt i, j, c; + + t = s->sub.trees.bb; + NEEDBITS( t ) + h = s->sub.trees.tb + ( (uInt)b & inflate_mask[t] ); + t = h->bits; + c = h->base; + if ( c < 16 ) { + DUMPBITS( t ) + s->sub.trees.blens[s->sub.trees.index++] = c; + } + else /* c == 16..18 */ + { + i = c == 18 ? 7 : c - 14; + j = c == 18 ? 11 : 3; + NEEDBITS( t + i ) + DUMPBITS( t ) + j += (uInt)b & inflate_mask[i]; + DUMPBITS( i ) + i = s->sub.trees.index; + t = s->sub.trees.table; + if ( i + j > 258 + ( t & 0x1f ) + ( ( t >> 5 ) & 0x1f ) || + ( c == 16 && i < 1 ) ) { + ZFREE( z, s->sub.trees.blens ); + s->mode = BAD; + z->msg = (char*)"invalid bit length repeat"; + r = Z_DATA_ERROR; + LEAVE + } + c = c == 16 ? s->sub.trees.blens[i - 1] : 0; + do { + s->sub.trees.blens[i++] = c; + } while ( --j ); + s->sub.trees.index = i; + } + } + s->sub.trees.tb = Z_NULL; + { + uInt bl, bd; + inflate_huft *tl, *td; + inflate_codes_statef *c; + + bl = 9; /* must be <= 9 for lookahead assumptions */ + bd = 6; /* must be <= 9 for lookahead assumptions */ + t = s->sub.trees.table; + t = inflate_trees_dynamic( 257 + ( t & 0x1f ), 1 + ( ( t >> 5 ) & 0x1f ), + s->sub.trees.blens, &bl, &bd, &tl, &td, + s->hufts, z ); + ZFREE( z, s->sub.trees.blens ); + if ( t != Z_OK ) { + if ( t == (uInt)Z_DATA_ERROR ) { + s->mode = BAD; + } + r = t; + LEAVE + } + Tracev( ( "inflate: trees ok\n" ) ); + if ( ( c = inflate_codes_new( bl, bd, tl, td, z ) ) == Z_NULL ) { + r = Z_MEM_ERROR; + LEAVE + } + s->sub.decode.codes = c; + } + s->mode = CODES; + case CODES: + UPDATE + if ( ( r = inflate_codes( s, z, r ) ) != Z_STREAM_END ) { + return inflate_flush( s, z, r ); + } + r = Z_OK; + inflate_codes_free( s->sub.decode.codes, z ); + LOAD + Tracev( ( "inflate: codes end, %lu total out\n", + z->total_out + ( q >= s->read ? q - s->read : + ( s->end - s->read ) + ( q - s->window ) ) ) ); + if ( !s->last ) { + s->mode = TYPE; + break; + } + s->mode = DRY; + case DRY: + FLUSH + if ( s->read != s->write ) { + LEAVE + s->mode = DONE; + } + case DONE: + r = Z_STREAM_END; + LEAVE + case BAD: + r = Z_DATA_ERROR; + LEAVE + default: + r = Z_STREAM_ERROR; + LEAVE + } } -int inflate_blocks_free(inflate_blocks_statef *s, z_streamp z) -{ - inflate_blocks_reset(s, z, Z_NULL); - ZFREE(z, s->window); - ZFREE(z, s->hufts); - ZFREE(z, s); - Tracev(("inflate: blocks freed\n")); - return Z_OK; +int inflate_blocks_free( inflate_blocks_statef *s, z_streamp z ){ + inflate_blocks_reset( s, z, Z_NULL ); + ZFREE( z, s->window ); + ZFREE( z, s->hufts ); + ZFREE( z, s ); + Tracev( ( "inflate: blocks freed\n" ) ); + return Z_OK; } -void inflate_set_dictionary(inflate_blocks_statef *s, const Byte *d, uInt n) -{ - zmemcpy(s->window, d, n); - s->read = s->write = s->window + n; +void inflate_set_dictionary( inflate_blocks_statef *s, const Byte *d, uInt n ){ + zmemcpy( s->window, d, n ); + s->read = s->write = s->window + n; } /* Returns true if inflate is currently at the end of a block generated - * by Z_SYNC_FLUSH or Z_FULL_FLUSH. + * by Z_SYNC_FLUSH or Z_FULL_FLUSH. * IN assertion: s != Z_NULL */ -int inflate_blocks_sync_point(inflate_blocks_statef *s) -{ - return s->mode == LENS; +int inflate_blocks_sync_point( inflate_blocks_statef *s ){ + return s->mode == LENS; } /* And'ing with mask[n] masks the lower n bits */ uInt inflate_mask[17] = { - 0x0000, - 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, - 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff + 0x0000, + 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, + 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff }; /* copy as much as possible from the sliding window to the output area */ -int inflate_flush(inflate_blocks_statef *s, z_streamp z, int r) -{ - uInt n; - Byte *p; - Byte *q; - - /* static copies of source and destination pointers */ - p = z->next_out; - q = s->read; - - /* compute number of bytes to copy as as end of window */ - n = (uInt)((q <= s->write ? s->write : s->end) - q); - if (n > z->avail_out) n = z->avail_out; - if (n && r == Z_BUF_ERROR) r = Z_OK; - - /* update counters */ - z->avail_out -= n; - z->total_out += n; - - /* update check information */ - if (s->checkfn != Z_NULL) - z->adler = s->check = (*s->checkfn)(s->check, q, n); - - /* copy as as end of window */ - zmemcpy(p, q, n); - p += n; - q += n; - - /* see if more to copy at beginning of window */ - if (q == s->end) - { - /* wrap pointers */ - q = s->window; - if (s->write == s->end) - s->write = s->window; - - /* compute bytes to copy */ - n = (uInt)(s->write - q); - if (n > z->avail_out) n = z->avail_out; - if (n && r == Z_BUF_ERROR) r = Z_OK; - - /* update counters */ - z->avail_out -= n; - z->total_out += n; - - /* update check information */ - if (s->checkfn != Z_NULL) - z->adler = s->check = (*s->checkfn)(s->check, q, n); - - /* copy */ - zmemcpy(p, q, n); - p += n; - q += n; - } - - /* update pointers */ - z->next_out = p; - s->read = q; - - /* done */ - return r; +int inflate_flush( inflate_blocks_statef *s, z_streamp z, int r ){ + uInt n; + Byte *p; + Byte *q; + + /* static copies of source and destination pointers */ + p = z->next_out; + q = s->read; + + /* compute number of bytes to copy as as end of window */ + n = (uInt)( ( q <= s->write ? s->write : s->end ) - q ); + if ( n > z->avail_out ) { + n = z->avail_out; + } + if ( n && r == Z_BUF_ERROR ) { + r = Z_OK; + } + + /* update counters */ + z->avail_out -= n; + z->total_out += n; + + /* update check information */ + if ( s->checkfn != Z_NULL ) { + z->adler = s->check = ( *s->checkfn )( s->check, q, n ); + } + + /* copy as as end of window */ + zmemcpy( p, q, n ); + p += n; + q += n; + + /* see if more to copy at beginning of window */ + if ( q == s->end ) { + /* wrap pointers */ + q = s->window; + if ( s->write == s->end ) { + s->write = s->window; + } + + /* compute bytes to copy */ + n = (uInt)( s->write - q ); + if ( n > z->avail_out ) { + n = z->avail_out; + } + if ( n && r == Z_BUF_ERROR ) { + r = Z_OK; + } + + /* update counters */ + z->avail_out -= n; + z->total_out += n; + + /* update check information */ + if ( s->checkfn != Z_NULL ) { + z->adler = s->check = ( *s->checkfn )( s->check, q, n ); + } + + /* copy */ + zmemcpy( p, q, n ); + p += n; + q += n; + } + + /* update pointers */ + z->next_out = p; + s->read = q; + + /* done */ + return r; } /* inftrees.c -- generate Huffman trees for efficient decoding * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ const char inflate_copyright[] = - " inflate 1.1.3 Copyright 1995-1998 Mark Adler "; + " inflate 1.1.3 Copyright 1995-1998 Mark Adler "; /* - If you use the zlib library in a product, an acknowledgment is welcome - in the documentation of your product. If for some reason you cannot - include such an acknowledgment, I would appreciate that you keep this - copyright string in the executable of your product. + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. */ /* simplify the use of the inflate_huft type with some defines */ @@ -3178,34 +3287,38 @@ const char inflate_copyright[] = #define bits word.what.Bits -static int huft_build OF(( - uInt *, /* code lengths in bits */ - uInt, /* number of codes */ - uInt, /* number of "simple" codes */ - const uInt *, /* list of base values for non-simple codes */ - const uInt *, /* list of extra bits for non-simple codes */ - inflate_huft **, /* result: starting table */ - uInt *, /* maximum lookup bits (returns actual) */ - inflate_huft *, /* space for trees */ - uInt *, /* hufts used in space */ - uInt * )); /* space for values */ +static int huft_build OF( ( + uInt *, /* code lengths in bits */ + uInt, /* number of codes */ + uInt, /* number of "simple" codes */ + const uInt *, /* list of base values for non-simple codes */ + const uInt *, /* list of extra bits for non-simple codes */ + inflate_huft * *, /* result: starting table */ + uInt *, /* maximum lookup bits (returns actual) */ + inflate_huft *, /* space for trees */ + uInt *, /* hufts used in space */ + uInt * ) ); /* space for values */ /* Tables for deflate from PKZIP's appnote.txt. */ static const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; - /* see note #13 above about 258 */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 +}; +/* see note #13 above about 258 */ static const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 +}; /* 112==invalid */ static const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577}; + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577 +}; static const uInt cpdext[30] = { /* Extra bits for distance codes */ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 13, 13}; + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13 +}; /* Huffman code decoding is performed using a multi-level table lookup. @@ -3243,7 +3356,7 @@ static const uInt cpdext[30] = { /* Extra bits for distance codes */ /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */ #define BMAX 15 /* maximum bit length of any code */ -static int huft_build(uInt *b, uInt n, uInt s, const uInt *d, const uInt *e, inflate_huft ** t, uInt *m, inflate_huft *hp, uInt *hn, uInt *v) +static int huft_build( uInt *b, uInt n, uInt s, const uInt *d, const uInt *e, inflate_huft ** t, uInt *m, inflate_huft *hp, uInt *hn, uInt *v ){ //uInt *b; /* code lengths in bits (all assumed <= BMAX) */ //uInt n; /* number of codes (assumed <= 288) */ //uInt s; /* number of simple-valued codes (0..s-1) */ @@ -3259,219 +3372,227 @@ static int huft_build(uInt *b, uInt n, uInt s, const uInt *d, const uInt *e, inf if the given code set is incomplete (the tables are still built in this case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of lengths), or Z_MEM_ERROR if not enough memory. */ -{ - - uInt a; /* counter for codes of length k */ - uInt c[BMAX+1]; /* bit length count table */ - uInt f; /* i repeats in table every f entries */ - int g; /* maximum code length */ - int h; /* table level */ - register uInt i; /* counter, current code */ - register uInt j; /* counter */ - register int k; /* number of bits in current code */ - int l; /* bits per table (returned in m) */ - uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */ - register uInt *p; /* pointer into c[], b[], or v[] */ - inflate_huft *q; /* points to current table */ - struct inflate_huft_s r; /* table entry for structure assignment */ - inflate_huft *u[BMAX]; /* table stack */ - register int w; /* bits before this table == (l * h) */ - uInt x[BMAX+1]; /* bit offsets, then code stack */ - uInt *xp; /* pointer into x */ - int y; /* number of dummy codes added */ - uInt z; /* number of entries in current table */ - - - /* Generate counts for each bit length */ - p = c; + + uInt a; /* counter for codes of length k */ + uInt c[BMAX + 1]; /* bit length count table */ + uInt f; /* i repeats in table every f entries */ + int g; /* maximum code length */ + int h; /* table level */ + register uInt i; /* counter, current code */ + register uInt j; /* counter */ + register int k; /* number of bits in current code */ + int l; /* bits per table (returned in m) */ + uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */ + register uInt *p; /* pointer into c[], b[], or v[] */ + inflate_huft *q; /* points to current table */ + struct inflate_huft_s r; /* table entry for structure assignment */ + inflate_huft *u[BMAX]; /* table stack */ + register int w; /* bits before this table == (l * h) */ + uInt x[BMAX + 1]; /* bit offsets, then code stack */ + uInt *xp; /* pointer into x */ + int y; /* number of dummy codes added */ + uInt z; /* number of entries in current table */ + + + /* Generate counts for each bit length */ + p = c; #define C0 *p++ = 0; #define C2 C0 C0 C0 C0 #define C4 C2 C2 C2 C2 - C4 /* clear c[]--assume BMAX+1 is 16 */ - p = b; i = n; - do { - c[*p++]++; /* assume all entries <= BMAX */ - } while (--i); - if (c[0] == n) /* null input--all zero length codes */ - { - *t = (inflate_huft *)Z_NULL; - *m = 0; - return Z_OK; - } - - - /* Find minimum and maximum length, bound *m by those */ - l = *m; - for (j = 1; j <= BMAX; j++) - if (c[j]) - break; - k = j; /* minimum code length */ - if ((uInt)l < j) - l = j; - for (i = BMAX; i; i--) - if (c[i]) - break; - g = i; /* maximum code length */ - if ((uInt)l > i) - l = i; - *m = l; - - - /* Adjust last length count to fill out codes, if needed */ - for (y = 1 << j; j < i; j++, y <<= 1) - if ((y -= c[j]) < 0) - return Z_DATA_ERROR; - if ((y -= c[i]) < 0) - return Z_DATA_ERROR; - c[i] += y; - - - /* Generate starting offsets into the value table for each length */ - x[1] = j = 0; - p = c + 1; xp = x + 2; - while (--i) { /* note that i == g from above */ - *xp++ = (j += *p++); - } - - - /* Make a table of values in order of bit lengths */ - p = b; i = 0; - do { - if ((j = *p++) != 0) - v[x[j]++] = i; - } while (++i < n); - n = x[g]; /* set n to length of v */ - - - /* Generate the Huffman codes and for each, make the table entries */ - x[0] = i = 0; /* first Huffman code is zero */ - p = v; /* grab values in bit order */ - h = -1; /* no tables yet--level -1 */ - w = -l; /* bits decoded == (l * h) */ - u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */ - q = (inflate_huft *)Z_NULL; /* ditto */ - z = 0; /* ditto */ - - /* go through the bit lengths (k already is bits in shortest code) */ - for (; k <= g; k++) - { - a = c[k]; - while (a--) - { - /* here i is the Huffman code of length k bits for value *p */ - /* make tables up to required level */ - while (k > w + l) - { - h++; - w += l; /* previous table always l bits */ - - /* compute minimum size table less than or equal to l bits */ - z = g - w; - z = z > (uInt)l ? l : z; /* table size upper limit */ - if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ - { /* too few codes for k-w bit table */ - f -= a + 1; /* deduct codes from patterns left */ - xp = c + k; - if (j < z) - while (++j < z) /* try smaller tables up to z bits */ - { - if ((f <<= 1) <= *++xp) - break; /* enough codes to use up j bits */ - f -= *xp; /* else deduct codes from patterns */ - } - } - z = 1 << j; /* table entries for j-bit table */ - - /* allocate new table */ - if (*hn + z > MANY) /* (note: doesn't matter for fixed) */ - return Z_MEM_ERROR; /* not enough memory */ - u[h] = q = hp + *hn; - *hn += z; - - /* connect to last table, if there is one */ - if (h) - { - x[h] = i; /* save pattern for backing up */ - r.bits = (Byte)l; /* bits to dump before this table */ - r.exop = (Byte)j; /* bits in this table */ - j = i >> (w - l); - r.base = (uInt)(q - u[h-1] - j); /* offset to this table */ - u[h-1][j] = r; /* connect to last table */ - } - else - *t = q; /* first table is returned result */ - } - - /* set up table entry in r */ - r.bits = (Byte)(k - w); - if (p >= v + n) - r.exop = 128 + 64; /* out of values--invalid code */ - else if (*p < s) - { - r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */ - r.base = *p++; /* simple code is just the value */ - } - else - { - r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */ - r.base = d[*p++ - s]; - } - - /* fill code-like entries with r */ - f = 1 << (k - w); - for (j = i >> w; j < z; j += f) - q[j] = r; - - /* backwards increment the k-bit code i */ - for (j = 1 << (k - 1); i & j; j >>= 1) - i ^= j; - i ^= j; - - /* backup over finished tables */ - mask = (1 << w) - 1; /* needed on HP, cc -O bug */ - while ((i & mask) != x[h]) - { - h--; /* don't need to update q */ - w -= l; - mask = (1 << w) - 1; - } - } - } + C4 /* clear c[]--assume BMAX+1 is 16 */ + p = b; i = n; + do { + c[*p++]++; /* assume all entries <= BMAX */ + } while ( --i ); + if ( c[0] == n ) { /* null input--all zero length codes */ + *t = (inflate_huft *)Z_NULL; + *m = 0; + return Z_OK; + } + + + /* Find minimum and maximum length, bound *m by those */ + l = *m; + for ( j = 1; j <= BMAX; j++ ) + if ( c[j] ) { + break; + } + k = j; /* minimum code length */ + if ( (uInt)l < j ) { + l = j; + } + for ( i = BMAX; i; i-- ) + if ( c[i] ) { + break; + } + g = i; /* maximum code length */ + if ( (uInt)l > i ) { + l = i; + } + *m = l; + + + /* Adjust last length count to fill out codes, if needed */ + for ( y = 1 << j; j < i; j++, y <<= 1 ) + if ( ( y -= c[j] ) < 0 ) { + return Z_DATA_ERROR; + } + if ( ( y -= c[i] ) < 0 ) { + return Z_DATA_ERROR; + } + c[i] += y; + + + /* Generate starting offsets into the value table for each length */ + x[1] = j = 0; + p = c + 1; xp = x + 2; + while ( --i ) { /* note that i == g from above */ + *xp++ = ( j += *p++ ); + } + + + /* Make a table of values in order of bit lengths */ + p = b; i = 0; + do { + if ( ( j = *p++ ) != 0 ) { + v[x[j]++] = i; + } + } while ( ++i < n ); + n = x[g]; /* set n to length of v */ - /* Return Z_BUF_ERROR if we were given an incomplete table */ - return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK; + /* Generate the Huffman codes and for each, make the table entries */ + x[0] = i = 0; /* first Huffman code is zero */ + p = v; /* grab values in bit order */ + h = -1; /* no tables yet--level -1 */ + w = -l; /* bits decoded == (l * h) */ + u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */ + q = (inflate_huft *)Z_NULL; /* ditto */ + z = 0; /* ditto */ + + /* go through the bit lengths (k already is bits in shortest code) */ + for (; k <= g; k++ ) + { + a = c[k]; + while ( a-- ) + { + /* here i is the Huffman code of length k bits for value *p */ + /* make tables up to required level */ + while ( k > w + l ) + { + h++; + w += l; /* previous table always l bits */ + + /* compute minimum size table less than or equal to l bits */ + z = g - w; + z = z > (uInt)l ? l : z; /* table size upper limit */ + if ( ( f = 1 << ( j = k - w ) ) > a + 1 ) { /* try a k-w bit table */ + /* too few codes for k-w bit table */ + f -= a + 1; /* deduct codes from patterns left */ + xp = c + k; + if ( j < z ) { + while ( ++j < z ) /* try smaller tables up to z bits */ + { + if ( ( f <<= 1 ) <= *++xp ) { + break; /* enough codes to use up j bits */ + } + f -= *xp; /* else deduct codes from patterns */ + } + } + } + z = 1 << j; /* table entries for j-bit table */ + + /* allocate new table */ + if ( *hn + z > MANY ) { /* (note: doesn't matter for fixed) */ + return Z_MEM_ERROR; /* not enough memory */ + } + u[h] = q = hp + *hn; + *hn += z; + + /* connect to last table, if there is one */ + if ( h ) { + x[h] = i; /* save pattern for backing up */ + r.bits = (Byte)l; /* bits to dump before this table */ + r.exop = (Byte)j; /* bits in this table */ + j = i >> ( w - l ); + r.base = (uInt)( q - u[h - 1] - j ); /* offset to this table */ + u[h - 1][j] = r; /* connect to last table */ + } + else{ + *t = q; /* first table is returned result */ + } + } + + /* set up table entry in r */ + r.bits = (Byte)( k - w ); + if ( p >= v + n ) { + r.exop = 128 + 64; /* out of values--invalid code */ + } + else if ( *p < s ) { + r.exop = (Byte)( *p < 256 ? 0 : 32 + 64 ); /* 256 is end-of-block */ + r.base = *p++; /* simple code is just the value */ + } + else + { + r.exop = (Byte)( e[*p - s] + 16 + 64 ); /* non-simple--look up in lists */ + r.base = d[*p++ - s]; + } + + /* fill code-like entries with r */ + f = 1 << ( k - w ); + for ( j = i >> w; j < z; j += f ) + q[j] = r; + + /* backwards increment the k-bit code i */ + for ( j = 1 << ( k - 1 ); i &j; j >>= 1 ) + i ^= j; + i ^= j; + + /* backup over finished tables */ + mask = ( 1 << w ) - 1; /* needed on HP, cc -O bug */ + while ( ( i & mask ) != x[h] ) + { + h--; /* don't need to update q */ + w -= l; + mask = ( 1 << w ) - 1; + } + } + } + + + /* Return Z_BUF_ERROR if we were given an incomplete table */ + return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK; } -int inflate_trees_bits(uInt *c, uInt *bb, inflate_huft * *tb, inflate_huft *hp, z_streamp z) +int inflate_trees_bits( uInt *c, uInt *bb, inflate_huft * *tb, inflate_huft *hp, z_streamp z ){ //uInt *c; /* 19 code lengths */ //uInt *bb; /* bits tree desired/actual depth */ //inflate_huft * *tb; /* bits tree result */ //inflate_huft *hp; /* space for trees */ //z_streamp z; /* for messages */ -{ - int r; - uInt hn = 0; /* hufts used in space */ - uInt *v; /* work area for huft_build */ - - if ((v = (uInt*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL) - return Z_MEM_ERROR; - r = huft_build(c, 19, 19, (uInt*)Z_NULL, (uInt*)Z_NULL, - tb, bb, hp, &hn, v); - if (r == Z_DATA_ERROR) - z->msg = (char*)"oversubscribed dynamic bit lengths tree"; - else if (r == Z_BUF_ERROR || *bb == 0) - { - z->msg = (char*)"incomplete dynamic bit lengths tree"; - r = Z_DATA_ERROR; - } - ZFREE(z, v); - return r; + int r; + uInt hn = 0; /* hufts used in space */ + uInt *v; /* work area for huft_build */ + + if ( ( v = (uInt*)ZALLOC( z, 19, sizeof( uInt ) ) ) == Z_NULL ) { + return Z_MEM_ERROR; + } + r = huft_build( c, 19, 19, (uInt*)Z_NULL, (uInt*)Z_NULL, + tb, bb, hp, &hn, v ); + if ( r == Z_DATA_ERROR ) { + z->msg = (char*)"oversubscribed dynamic bit lengths tree"; + } + else if ( r == Z_BUF_ERROR || *bb == 0 ) { + z->msg = (char*)"incomplete dynamic bit lengths tree"; + r = Z_DATA_ERROR; + } + ZFREE( z, v ); + return r; } -int inflate_trees_dynamic(uInt nl, uInt nd, uInt *c, uInt *bl, uInt *bd, inflate_huft * *tl, inflate_huft * *td, inflate_huft *hp, z_streamp z) +int inflate_trees_dynamic( uInt nl, uInt nd, uInt *c, uInt *bl, uInt *bd, inflate_huft * *tl, inflate_huft * *td, inflate_huft *hp, z_streamp z ){ //uInt nl; /* number of literal/length codes */ //uInt nd; /* number of distance codes */ //uInt *c; /* that many (total) code lengths */ @@ -3481,57 +3602,55 @@ int inflate_trees_dynamic(uInt nl, uInt nd, uInt *c, uInt *bl, uInt *bd, inflate //inflate_huft * *td; /* distance tree result */ //inflate_huft *hp; /* space for trees */ //z_streamp z; /* for messages */ -{ - int r; - uInt hn = 0; /* hufts used in space */ - uInt *v; /* work area for huft_build */ - - /* allocate work area */ - if ((v = (uInt*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) - return Z_MEM_ERROR; - - /* build literal/length tree */ - r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v); - if (r != Z_OK || *bl == 0) - { - if (r == Z_DATA_ERROR) - z->msg = (char*)"oversubscribed literal/length tree"; - else if (r != Z_MEM_ERROR) - { - z->msg = (char*)"incomplete literal/length tree"; - r = Z_DATA_ERROR; - } - ZFREE(z, v); - return r; - } - - /* build distance tree */ - r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v); - if (r != Z_OK || (*bd == 0 && nl > 257)) - { - if (r == Z_DATA_ERROR) - z->msg = (char*)"oversubscribed distance tree"; - else if (r == Z_BUF_ERROR) { + int r; + uInt hn = 0; /* hufts used in space */ + uInt *v; /* work area for huft_build */ + + /* allocate work area */ + if ( ( v = (uInt*)ZALLOC( z, 288, sizeof( uInt ) ) ) == Z_NULL ) { + return Z_MEM_ERROR; + } + + /* build literal/length tree */ + r = huft_build( c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v ); + if ( r != Z_OK || *bl == 0 ) { + if ( r == Z_DATA_ERROR ) { + z->msg = (char*)"oversubscribed literal/length tree"; + } + else if ( r != Z_MEM_ERROR ) { + z->msg = (char*)"incomplete literal/length tree"; + r = Z_DATA_ERROR; + } + ZFREE( z, v ); + return r; + } + + /* build distance tree */ + r = huft_build( c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v ); + if ( r != Z_OK || ( *bd == 0 && nl > 257 ) ) { + if ( r == Z_DATA_ERROR ) { + z->msg = (char*)"oversubscribed distance tree"; + } + else if ( r == Z_BUF_ERROR ) { #ifdef PKZIP_BUG_WORKAROUND - r = Z_OK; - } + r = Z_OK; + } #else - z->msg = (char*)"incomplete distance tree"; - r = Z_DATA_ERROR; - } - else if (r != Z_MEM_ERROR) - { - z->msg = (char*)"empty distance tree with lengths"; - r = Z_DATA_ERROR; - } - ZFREE(z, v); - return r; + z->msg = (char*)"incomplete distance tree"; + r = Z_DATA_ERROR; + } + else if ( r != Z_MEM_ERROR ) { + z->msg = (char*)"empty distance tree with lengths"; + r = Z_DATA_ERROR; + } + ZFREE( z, v ); + return r; #endif - } + } - /* done */ - ZFREE(z, v); - return Z_OK; + /* done */ + ZFREE( z, v ); + return Z_OK; } /* inffixed.h -- table for decoding fixed codes @@ -3546,158 +3665,157 @@ int inflate_trees_dynamic(uInt nl, uInt nd, uInt *c, uInt *bl, uInt *bd, inflate static uInt fixed_bl = 9; static uInt fixed_bd = 5; static inflate_huft fixed_tl[] = { - {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, - {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192}, - {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160}, - {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224}, - {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144}, - {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208}, - {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176}, - {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240}, - {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, - {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200}, - {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168}, - {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232}, - {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152}, - {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216}, - {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184}, - {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248}, - {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, - {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196}, - {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164}, - {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228}, - {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148}, - {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212}, - {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180}, - {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244}, - {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, - {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204}, - {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172}, - {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236}, - {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156}, - {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220}, - {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188}, - {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252}, - {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, - {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194}, - {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162}, - {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226}, - {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146}, - {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210}, - {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178}, - {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242}, - {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, - {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202}, - {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170}, - {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234}, - {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154}, - {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218}, - {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186}, - {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250}, - {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, - {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198}, - {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166}, - {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230}, - {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150}, - {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214}, - {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182}, - {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246}, - {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, - {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206}, - {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174}, - {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238}, - {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158}, - {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222}, - {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190}, - {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254}, - {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, - {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193}, - {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161}, - {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225}, - {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145}, - {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209}, - {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177}, - {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241}, - {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, - {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201}, - {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169}, - {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233}, - {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153}, - {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217}, - {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185}, - {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249}, - {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, - {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197}, - {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165}, - {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229}, - {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149}, - {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213}, - {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181}, - {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245}, - {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, - {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205}, - {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173}, - {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237}, - {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157}, - {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221}, - {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189}, - {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253}, - {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, - {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195}, - {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163}, - {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227}, - {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147}, - {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211}, - {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179}, - {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243}, - {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, - {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203}, - {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171}, - {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235}, - {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155}, - {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219}, - {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187}, - {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251}, - {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, - {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199}, - {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167}, - {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231}, - {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151}, - {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215}, - {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183}, - {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247}, - {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, - {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207}, - {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175}, - {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239}, - {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159}, - {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223}, - {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191}, - {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255} - }; + {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, + {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192}, + {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160}, + {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224}, + {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144}, + {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208}, + {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176}, + {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240}, + {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, + {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200}, + {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168}, + {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232}, + {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152}, + {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216}, + {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184}, + {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248}, + {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, + {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196}, + {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164}, + {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228}, + {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148}, + {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212}, + {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180}, + {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244}, + {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, + {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204}, + {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172}, + {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236}, + {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156}, + {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220}, + {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188}, + {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252}, + {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, + {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194}, + {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162}, + {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226}, + {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146}, + {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210}, + {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178}, + {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242}, + {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, + {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202}, + {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170}, + {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234}, + {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154}, + {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218}, + {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186}, + {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250}, + {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, + {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198}, + {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166}, + {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230}, + {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150}, + {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214}, + {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182}, + {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246}, + {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, + {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206}, + {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174}, + {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238}, + {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158}, + {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222}, + {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190}, + {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254}, + {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, + {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193}, + {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161}, + {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225}, + {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145}, + {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209}, + {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177}, + {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241}, + {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, + {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201}, + {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169}, + {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233}, + {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153}, + {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217}, + {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185}, + {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249}, + {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, + {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197}, + {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165}, + {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229}, + {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149}, + {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213}, + {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181}, + {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245}, + {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, + {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205}, + {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173}, + {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237}, + {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157}, + {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221}, + {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189}, + {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253}, + {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, + {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195}, + {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163}, + {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227}, + {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147}, + {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211}, + {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179}, + {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243}, + {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, + {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203}, + {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171}, + {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235}, + {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155}, + {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219}, + {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187}, + {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251}, + {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, + {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199}, + {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167}, + {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231}, + {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151}, + {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215}, + {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183}, + {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247}, + {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, + {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207}, + {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175}, + {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239}, + {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159}, + {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223}, + {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191}, + {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255} +}; static inflate_huft fixed_td[] = { - {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097}, - {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385}, - {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193}, - {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577}, - {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145}, - {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577}, - {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289}, - {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577} - }; - -int inflate_trees_fixed(uInt *bl, uInt *bd, inflate_huft * *tl, inflate_huft * *td, z_streamp z) + {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097}, + {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385}, + {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193}, + {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577}, + {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145}, + {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577}, + {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289}, + {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577} +}; + +int inflate_trees_fixed( uInt *bl, uInt *bd, inflate_huft * *tl, inflate_huft * *td, z_streamp z ){ //uInt *bl; /* literal desired/actual bit depth */ //uInt *bd; /* distance desired/actual bit depth */ //inflate_huft * *tl; /* literal/length tree result */ //inflate_huft * *td; /* distance tree result */ //z_streamp z; /* for memory allocation */ -{ - *bl = fixed_bl; - *bd = fixed_bd; - *tl = fixed_tl; - *td = fixed_td; - return Z_OK; + *bl = fixed_bl; + *bd = fixed_bd; + *tl = fixed_tl; + *td = fixed_td; + return Z_OK; } /* simplify the use of the inflate_huft type with some defines */ @@ -3705,156 +3823,147 @@ int inflate_trees_fixed(uInt *bl, uInt *bd, inflate_huft * *tl, inflate_huft * * #define bits word.what.Bits /* macros for bit input with no checking and for returning unused bytes */ -#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;} +#define GRABBITS( j ) {while ( k < ( j ) ) {b |= ( (uLong)NEXTBYTE ) << k; k += 8; }} +#define UNGRAB {c = z->avail_in - n; c = ( k >> 3 ) < c ? k >> 3 : c; n += c; p -= c; k -= c << 3; } /* Called with number of bytes left to write in window at least 258 (the maximum string length) and number of input bytes available at least ten. The ten bytes are six bytes for the longest length/ distance pair plus four bytes for overloading the bit buffer. */ -int inflate_fast(uInt bl, uInt bd, inflate_huft *tl, inflate_huft *td, inflate_blocks_statef *s, z_streamp z) -{ - inflate_huft *t; /* temporary pointer */ - uInt e; /* extra bits or operation */ - uLong b; /* bit buffer */ - uInt k; /* bits in bit buffer */ - Byte *p; /* input data pointer */ - uInt n; /* bytes available there */ - Byte *q; /* output window write pointer */ - uInt m; /* bytes to end of window or read pointer */ - uInt ml; /* mask for literal/length tree */ - uInt md; /* mask for distance tree */ - uInt c; /* bytes to copy */ - uInt d; /* distance back to copy from */ - Byte *r; /* copy source pointer */ - - /* load input, output, bit values */ - LOAD - - /* initialize masks */ - ml = inflate_mask[bl]; - md = inflate_mask[bd]; - - /* do until not enough input or output space for fast loop */ - do { /* assume called with m >= 258 && n >= 10 */ - /* get literal/length code */ - GRABBITS(20) /* max bits for literal/length code */ - if ((e = (t = tl + ((uInt)b & ml))->exop) == 0) - { - DUMPBITS(t->bits) - Tracevv((t->base >= 0x20 && t->base < 0x7f ? - "inflate: * literal '%c'\n" : - "inflate: * literal 0x%02x\n", t->base)); - *q++ = (Byte)t->base; - m--; - continue; - } - do { - DUMPBITS(t->bits) - if (e & 16) - { - /* get extra bits for length */ - e &= 15; - c = t->base + ((uInt)b & inflate_mask[e]); - DUMPBITS(e) - Tracevv(("inflate: * length %u\n", c)); - - /* decode distance base of block to copy */ - GRABBITS(15); /* max bits for distance code */ - e = (t = td + ((uInt)b & md))->exop; - do { - DUMPBITS(t->bits) - if (e & 16) - { - /* get extra bits to add to distance base */ - e &= 15; - GRABBITS(e) /* get extra bits (up to 13) */ - d = t->base + ((uInt)b & inflate_mask[e]); - DUMPBITS(e) - Tracevv(("inflate: * distance %u\n", d)); - - /* do the copy */ - m -= c; - if ((uInt)(q - s->window) >= d) /* offset before dest */ - { /* just copy */ - r = q - d; - *q++ = *r++; c--; /* minimum count is three, */ - *q++ = *r++; c--; /* so unroll loop a little */ - } - else /* else offset after destination */ - { - e = d - (uInt)(q - s->window); /* bytes from offset to end */ - r = s->end - e; /* pointer to offset */ - if (c > e) /* if source crosses, */ - { - c -= e; /* copy to end of window */ - do { - *q++ = *r++; - } while (--e); - r = s->window; /* copy rest from start of window */ - } - } - do { /* copy all or what's left */ - *q++ = *r++; - } while (--c); - break; - } - else if ((e & 64) == 0) - { - t += t->base; - e = (t += ((uInt)b & inflate_mask[e]))->exop; - } - else - { - z->msg = (char*)"invalid distance code"; - UNGRAB - UPDATE - return Z_DATA_ERROR; - } - } while (1); - break; - } - if ((e & 64) == 0) - { - t += t->base; - if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0) - { - DUMPBITS(t->bits) - Tracevv((t->base >= 0x20 && t->base < 0x7f ? - "inflate: * literal '%c'\n" : - "inflate: * literal 0x%02x\n", t->base)); - *q++ = (Byte)t->base; - m--; - break; - } - } - else if (e & 32) - { - Tracevv(("inflate: * end of block\n")); - UNGRAB - UPDATE - return Z_STREAM_END; - } - else - { - z->msg = (char*)"invalid literal/length code"; - UNGRAB - UPDATE - return Z_DATA_ERROR; - } - } while (1); - } while (m >= 258 && n >= 10); - - /* not enough input or output--restore pointers and return */ - UNGRAB - UPDATE - return Z_OK; +int inflate_fast( uInt bl, uInt bd, inflate_huft *tl, inflate_huft *td, inflate_blocks_statef *s, z_streamp z ){ + inflate_huft *t; /* temporary pointer */ + uInt e; /* extra bits or operation */ + uLong b; /* bit buffer */ + uInt k; /* bits in bit buffer */ + Byte *p; /* input data pointer */ + uInt n; /* bytes available there */ + Byte *q; /* output window write pointer */ + uInt m; /* bytes to end of window or read pointer */ + uInt ml; /* mask for literal/length tree */ + uInt md; /* mask for distance tree */ + uInt c; /* bytes to copy */ + uInt d; /* distance back to copy from */ + Byte *r; /* copy source pointer */ + + /* load input, output, bit values */ + LOAD + + /* initialize masks */ + ml = inflate_mask[bl]; + md = inflate_mask[bd]; + + /* do until not enough input or output space for fast loop */ + do { /* assume called with m >= 258 && n >= 10 */ + /* get literal/length code */ + GRABBITS( 20 ) /* max bits for literal/length code */ + if ( ( e = ( t = tl + ( (uInt)b & ml ) )->exop ) == 0 ) { + DUMPBITS( t->bits ) + Tracevv( ( t->base >= 0x20 && t->base < 0x7f ? + "inflate: * literal '%c'\n" : + "inflate: * literal 0x%02x\n", t->base ) ); + *q++ = (Byte)t->base; + m--; + continue; + } + do { + DUMPBITS( t->bits ) + if ( e & 16 ) { + /* get extra bits for length */ + e &= 15; + c = t->base + ( (uInt)b & inflate_mask[e] ); + DUMPBITS( e ) + Tracevv( ( "inflate: * length %u\n", c ) ); + + /* decode distance base of block to copy */ + GRABBITS( 15 ); /* max bits for distance code */ + e = ( t = td + ( (uInt)b & md ) )->exop; + do { + DUMPBITS( t->bits ) + if ( e & 16 ) { + /* get extra bits to add to distance base */ + e &= 15; + GRABBITS( e ) /* get extra bits (up to 13) */ + d = t->base + ( (uInt)b & inflate_mask[e] ); + DUMPBITS( e ) + Tracevv( ( "inflate: * distance %u\n", d ) ); + + /* do the copy */ + m -= c; + if ( (uInt)( q - s->window ) >= d ) { /* offset before dest */ + /* just copy */ + r = q - d; + *q++ = *r++; c--; /* minimum count is three, */ + *q++ = *r++; c--; /* so unroll loop a little */ + } + else /* else offset after destination */ + { + e = d - (uInt)( q - s->window ); /* bytes from offset to end */ + r = s->end - e; /* pointer to offset */ + if ( c > e ) { /* if source crosses, */ + c -= e; /* copy to end of window */ + do { + *q++ = *r++; + } while ( --e ); + r = s->window; /* copy rest from start of window */ + } + } + do { /* copy all or what's left */ + *q++ = *r++; + } while ( --c ); + break; + } + else if ( ( e & 64 ) == 0 ) { + t += t->base; + e = ( t += ( (uInt)b & inflate_mask[e] ) )->exop; + } + else + { + z->msg = (char*)"invalid distance code"; + UNGRAB + UPDATE + return Z_DATA_ERROR; + } + } while ( 1 ); + break; + } + if ( ( e & 64 ) == 0 ) { + t += t->base; + if ( ( e = ( t += ( (uInt)b & inflate_mask[e] ) )->exop ) == 0 ) { + DUMPBITS( t->bits ) + Tracevv( ( t->base >= 0x20 && t->base < 0x7f ? + "inflate: * literal '%c'\n" : + "inflate: * literal 0x%02x\n", t->base ) ); + *q++ = (Byte)t->base; + m--; + break; + } + } + else if ( e & 32 ) { + Tracevv( ( "inflate: * end of block\n" ) ); + UNGRAB + UPDATE + return Z_STREAM_END; + } + else + { + z->msg = (char*)"invalid literal/length code"; + UNGRAB + UPDATE + return Z_DATA_ERROR; + } + } while ( 1 ); + } while ( m >= 258 && n >= 10 ); + + /* not enough input or output--restore pointers and return */ + UNGRAB + UPDATE + return Z_OK; } /* infcodes.c -- process literals and length/distance pairs * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* simplify the use of the inflate_huft type with some defines */ @@ -3862,241 +3971,232 @@ int inflate_fast(uInt bl, uInt bd, inflate_huft *tl, inflate_huft *td, inflate_b #define bits word.what.Bits typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ - START, /* x: set up for LEN */ - LEN, /* i: get length/literal/eob next */ - LENEXT, /* i: getting length extra (have base) */ - DIST, /* i: get distance next */ - DISTEXT, /* i: getting distance extra */ - COPY, /* o: copying bytes in window, waiting for space */ - LIT, /* o: got literal, waiting for output space */ - WASH, /* o: got eob, possibly still output waiting */ - END, /* x: got eob and all data flushed */ - BADCODE} /* x: got error */ + START, /* x: set up for LEN */ + LEN, /* i: get length/literal/eob next */ + LENEXT, /* i: getting length extra (have base) */ + DIST, /* i: get distance next */ + DISTEXT, /* i: getting distance extra */ + COPY, /* o: copying bytes in window, waiting for space */ + LIT, /* o: got literal, waiting for output space */ + WASH, /* o: got eob, possibly still output waiting */ + END, /* x: got eob and all data flushed */ + BADCODE +} /* x: got error */ inflate_codes_mode; /* inflate codes private state */ struct inflate_codes_state { - /* mode */ - inflate_codes_mode mode; /* current inflate_codes mode */ - - /* mode dependent information */ - uInt len; - union { - struct { - inflate_huft *tree; /* pointer into tree */ - uInt need; /* bits needed */ - } code; /* if LEN or DIST, where in tree */ - uInt lit; /* if LIT, literal */ - struct { - uInt get; /* bits to get for extra */ - uInt dist; /* distance back to copy from */ - } copy; /* if EXT or COPY, where and how much */ - } sub; /* submode */ - - /* mode independent information */ - Byte lbits; /* ltree bits decoded per branch */ - Byte dbits; /* dtree bits decoder per branch */ - inflate_huft *ltree; /* literal/length/eob tree */ - inflate_huft *dtree; /* distance tree */ + /* mode */ + inflate_codes_mode mode; /* current inflate_codes mode */ + + /* mode dependent information */ + uInt len; + union { + struct { + inflate_huft *tree; /* pointer into tree */ + uInt need; /* bits needed */ + } code; /* if LEN or DIST, where in tree */ + uInt lit; /* if LIT, literal */ + struct { + uInt get; /* bits to get for extra */ + uInt dist; /* distance back to copy from */ + } copy; /* if EXT or COPY, where and how much */ + } sub; /* submode */ + + /* mode independent information */ + Byte lbits; /* ltree bits decoded per branch */ + Byte dbits; /* dtree bits decoder per branch */ + inflate_huft *ltree; /* literal/length/eob tree */ + inflate_huft *dtree; /* distance tree */ }; -inflate_codes_statef *inflate_codes_new(uInt bl, uInt bd, inflate_huft *tl, inflate_huft *td, z_streamp z) -{ - inflate_codes_statef *c; - - if ((c = (inflate_codes_statef *) - ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL) - { - c->mode = START; - c->lbits = (Byte)bl; - c->dbits = (Byte)bd; - c->ltree = tl; - c->dtree = td; - Tracev(("inflate: codes new\n")); - } - return c; +inflate_codes_statef *inflate_codes_new( uInt bl, uInt bd, inflate_huft *tl, inflate_huft *td, z_streamp z ){ + inflate_codes_statef *c; + + if ( ( c = (inflate_codes_statef *) + ZALLOC( z,1,sizeof( struct inflate_codes_state ) ) ) != Z_NULL ) { + c->mode = START; + c->lbits = (Byte)bl; + c->dbits = (Byte)bd; + c->ltree = tl; + c->dtree = td; + Tracev( ( "inflate: codes new\n" ) ); + } + return c; } -int inflate_codes(inflate_blocks_statef *s, z_streamp z, int r) -{ - uInt j; /* temporary storage */ - inflate_huft *t; /* temporary pointer */ - uInt e; /* extra bits or operation */ - uLong b; /* bit buffer */ - uInt k; /* bits in bit buffer */ - Byte *p; /* input data pointer */ - uInt n; /* bytes available there */ - Byte *q; /* output window write pointer */ - uInt m; /* bytes to end of window or read pointer */ - Byte *f; /* pointer to copy strings from */ - inflate_codes_statef *c = s->sub.decode.codes; /* codes state */ - - /* copy input/output information to locals (UPDATE macro restores) */ - LOAD - - /* process input and output based on current state */ - while (1) switch (c->mode) - { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ - case START: /* x: set up for LEN */ +int inflate_codes( inflate_blocks_statef *s, z_streamp z, int r ){ + uInt j; /* temporary storage */ + inflate_huft *t; /* temporary pointer */ + uInt e; /* extra bits or operation */ + uLong b; /* bit buffer */ + uInt k; /* bits in bit buffer */ + Byte *p; /* input data pointer */ + uInt n; /* bytes available there */ + Byte *q; /* output window write pointer */ + uInt m; /* bytes to end of window or read pointer */ + Byte *f; /* pointer to copy strings from */ + inflate_codes_statef *c = s->sub.decode.codes; /* codes state */ + + /* copy input/output information to locals (UPDATE macro restores) */ + LOAD + + /* process input and output based on current state */ + while ( 1 ) switch ( c->mode ) + { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ + case START: /* x: set up for LEN */ #ifndef SLOW - if (m >= 258 && n >= 10) - { - UPDATE - r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z); - LOAD - if (r != Z_OK) - { - c->mode = r == Z_STREAM_END ? WASH : BADCODE; - break; - } - } + if ( m >= 258 && n >= 10 ) { + UPDATE + r = inflate_fast( c->lbits, c->dbits, c->ltree, c->dtree, s, z ); + LOAD + if ( r != Z_OK ) { + c->mode = r == Z_STREAM_END ? WASH : BADCODE; + break; + } + } #endif /* !SLOW */ - c->sub.code.need = c->lbits; - c->sub.code.tree = c->ltree; - c->mode = LEN; - case LEN: /* i: get length/literal/eob next */ - j = c->sub.code.need; - NEEDBITS(j) - t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); - DUMPBITS(t->bits) - e = (uInt)(t->exop); - if (e == 0) /* literal */ - { - c->sub.lit = t->base; - Tracevv((t->base >= 0x20 && t->base < 0x7f ? - "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", t->base)); - c->mode = LIT; - break; - } - if (e & 16) /* length */ - { - c->sub.copy.get = e & 15; - c->len = t->base; - c->mode = LENEXT; - break; - } - if ((e & 64) == 0) /* next table */ - { - c->sub.code.need = e; - c->sub.code.tree = t + t->base; - break; - } - if (e & 32) /* end of block */ - { - Tracevv(("inflate: end of block\n")); - c->mode = WASH; - break; - } - c->mode = BADCODE; /* invalid code */ - z->msg = (char*)"invalid literal/length code"; - r = Z_DATA_ERROR; - LEAVE - case LENEXT: /* i: getting length extra (have base) */ - j = c->sub.copy.get; - NEEDBITS(j) - c->len += (uInt)b & inflate_mask[j]; - DUMPBITS(j) - c->sub.code.need = c->dbits; - c->sub.code.tree = c->dtree; - Tracevv(("inflate: length %u\n", c->len)); - c->mode = DIST; - case DIST: /* i: get distance next */ - j = c->sub.code.need; - NEEDBITS(j) - t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); - DUMPBITS(t->bits) - e = (uInt)(t->exop); - if (e & 16) /* distance */ - { - c->sub.copy.get = e & 15; - c->sub.copy.dist = t->base; - c->mode = DISTEXT; - break; - } - if ((e & 64) == 0) /* next table */ - { - c->sub.code.need = e; - c->sub.code.tree = t + t->base; - break; - } - c->mode = BADCODE; /* invalid code */ - z->msg = (char*)"invalid distance code"; - r = Z_DATA_ERROR; - LEAVE - case DISTEXT: /* i: getting distance extra */ - j = c->sub.copy.get; - NEEDBITS(j) - c->sub.copy.dist += (uInt)b & inflate_mask[j]; - DUMPBITS(j) - Tracevv(("inflate: distance %u\n", c->sub.copy.dist)); - c->mode = COPY; - case COPY: /* o: copying bytes in window, waiting for space */ + c->sub.code.need = c->lbits; + c->sub.code.tree = c->ltree; + c->mode = LEN; + case LEN: /* i: get length/literal/eob next */ + j = c->sub.code.need; + NEEDBITS( j ) + t = c->sub.code.tree + ( (uInt)b & inflate_mask[j] ); + DUMPBITS( t->bits ) + e = (uInt)( t->exop ); + if ( e == 0 ) { /* literal */ + c->sub.lit = t->base; + Tracevv( ( t->base >= 0x20 && t->base < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", t->base ) ); + c->mode = LIT; + break; + } + if ( e & 16 ) { /* length */ + c->sub.copy.get = e & 15; + c->len = t->base; + c->mode = LENEXT; + break; + } + if ( ( e & 64 ) == 0 ) { /* next table */ + c->sub.code.need = e; + c->sub.code.tree = t + t->base; + break; + } + if ( e & 32 ) { /* end of block */ + Tracevv( ( "inflate: end of block\n" ) ); + c->mode = WASH; + break; + } + c->mode = BADCODE; /* invalid code */ + z->msg = (char*)"invalid literal/length code"; + r = Z_DATA_ERROR; + LEAVE + case LENEXT: /* i: getting length extra (have base) */ + j = c->sub.copy.get; + NEEDBITS( j ) + c->len += (uInt)b & inflate_mask[j]; + DUMPBITS( j ) + c->sub.code.need = c->dbits; + c->sub.code.tree = c->dtree; + Tracevv( ( "inflate: length %u\n", c->len ) ); + c->mode = DIST; + case DIST: /* i: get distance next */ + j = c->sub.code.need; + NEEDBITS( j ) + t = c->sub.code.tree + ( (uInt)b & inflate_mask[j] ); + DUMPBITS( t->bits ) + e = (uInt)( t->exop ); + if ( e & 16 ) { /* distance */ + c->sub.copy.get = e & 15; + c->sub.copy.dist = t->base; + c->mode = DISTEXT; + break; + } + if ( ( e & 64 ) == 0 ) { /* next table */ + c->sub.code.need = e; + c->sub.code.tree = t + t->base; + break; + } + c->mode = BADCODE; /* invalid code */ + z->msg = (char*)"invalid distance code"; + r = Z_DATA_ERROR; + LEAVE + case DISTEXT: /* i: getting distance extra */ + j = c->sub.copy.get; + NEEDBITS( j ) + c->sub.copy.dist += (uInt)b & inflate_mask[j]; + DUMPBITS( j ) + Tracevv( ( "inflate: distance %u\n", c->sub.copy.dist ) ); + c->mode = COPY; + case COPY: /* o: copying bytes in window, waiting for space */ #ifndef __TURBOC__ /* Turbo C bug for following expression */ - f = (uInt)(q - s->window) < c->sub.copy.dist ? - s->end - (c->sub.copy.dist - (q - s->window)) : - q - c->sub.copy.dist; + f = (uInt)( q - s->window ) < c->sub.copy.dist ? + s->end - ( c->sub.copy.dist - ( q - s->window ) ) : + q - c->sub.copy.dist; #else - f = q - c->sub.copy.dist; - if ((uInt)(q - s->window) < c->sub.copy.dist) - f = s->end - (c->sub.copy.dist - (uInt)(q - s->window)); + f = q - c->sub.copy.dist; + if ( (uInt)( q - s->window ) < c->sub.copy.dist ) { + f = s->end - ( c->sub.copy.dist - (uInt)( q - s->window ) ); + } #endif - while (c->len) - { - NEEDOUT - OUTBYTE(*f++) - if (f == s->end) - f = s->window; - c->len--; - } - c->mode = START; - break; - case LIT: /* o: got literal, waiting for output space */ - NEEDOUT - OUTBYTE(c->sub.lit) - c->mode = START; - break; - case WASH: /* o: got eob, possibly more output */ - if (k > 7) /* return unused byte, if any */ - { - Assert(k < 16, "inflate_codes grabbed too many bytes") - k -= 8; - n++; - p--; /* can always return one */ - } - FLUSH - if (s->read != s->write) - LEAVE - c->mode = END; - case END: - r = Z_STREAM_END; - LEAVE - case BADCODE: /* x: got error */ - r = Z_DATA_ERROR; - LEAVE - default: - r = Z_STREAM_ERROR; - LEAVE - } + while ( c->len ) + { + NEEDOUT + OUTBYTE( *f++ ) + if ( f == s->end ) { + f = s->window; + } + c->len--; + } + c->mode = START; + break; + case LIT: /* o: got literal, waiting for output space */ + NEEDOUT + OUTBYTE( c->sub.lit ) + c->mode = START; + break; + case WASH: /* o: got eob, possibly more output */ + if ( k > 7 ) { /* return unused byte, if any */ + Assert( k < 16, "inflate_codes grabbed too many bytes" ) + k -= 8; + n++; + p--; /* can always return one */ + } + FLUSH + if ( s->read != s->write ) { + LEAVE + c->mode = END; + } + case END: + r = Z_STREAM_END; + LEAVE + case BADCODE: /* x: got error */ + r = Z_DATA_ERROR; + LEAVE + default: + r = Z_STREAM_ERROR; + LEAVE + } #ifdef NEED_DUMMY_RETURN - return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ + return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ #endif } -void inflate_codes_free(inflate_codes_statef *c, z_streamp z) -{ - ZFREE(z, c); - Tracev(("inflate: codes free\n")); +void inflate_codes_free( inflate_codes_statef *c, z_streamp z ){ + ZFREE( z, c ); + Tracev( ( "inflate: codes free\n" ) ); } /* adler32.c -- compute the Adler-32 checksum of a data stream * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ #define BASE 65521L /* largest prime smaller than 65536 */ @@ -4108,42 +4208,45 @@ void inflate_codes_free(inflate_codes_statef *c, z_streamp z) #undef DO4 #undef DO8 -#define DO1(buf,i) {s1 += buf[i]; s2 += s1;} -#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); -#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); -#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); -#define DO16(buf) DO8(buf,0); DO8(buf,8); +#define DO1( buf,i ) {s1 += buf[i]; s2 += s1; } +#define DO2( buf,i ) DO1( buf,i ); DO1( buf,i + 1 ); +#define DO4( buf,i ) DO2( buf,i ); DO2( buf,i + 2 ); +#define DO8( buf,i ) DO4( buf,i ); DO4( buf,i + 4 ); +#define DO16( buf ) DO8( buf,0 ); DO8( buf,8 ); /* ========================================================================= */ -uLong adler32(uLong adler, const Byte *buf, uInt len) -{ - unsigned long s1 = adler & 0xffff; - unsigned long s2 = (adler >> 16) & 0xffff; - int k; - - if (buf == Z_NULL) return 1L; - - while (len > 0) { - k = len < NMAX ? len : NMAX; - len -= k; - while (k >= 16) { - DO16(buf); - buf += 16; - k -= 16; - } - if (k != 0) do { - s1 += *buf++; - s2 += s1; - } while (--k); - s1 %= BASE; - s2 %= BASE; - } - return (s2 << 16) | s1; +uLong adler32( uLong adler, const Byte *buf, uInt len ){ + unsigned long s1 = adler & 0xffff; + unsigned long s2 = ( adler >> 16 ) & 0xffff; + int k; + + if ( buf == Z_NULL ) { + return 1L; + } + + while ( len > 0 ) { + k = len < NMAX ? len : NMAX; + len -= k; + while ( k >= 16 ) { + DO16( buf ); + buf += 16; + k -= 16; + } + if ( k != 0 ) { + do { + s1 += *buf++; + s2 += s1; + } while ( --k ); + } + s1 %= BASE; + s2 %= BASE; + } + return ( s2 << 16 ) | s1; } /* infblock.h -- header to use infblock.c * Copyright (C) 1995-1998 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h + * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is @@ -4151,358 +4254,359 @@ uLong adler32(uLong adler, const Byte *buf, uInt len) subject to change. Applications should only use zlib.h. */ -extern inflate_blocks_statef * inflate_blocks_new OF(( - z_streamp z, - check_func c, /* check function */ - uInt w)); /* window size */ +extern inflate_blocks_statef * inflate_blocks_new OF( ( + z_streamp z, + check_func c, /* check function */ + uInt w ) ); /* window size */ -extern int inflate_blocks OF(( - inflate_blocks_statef *, - z_streamp , - int)); /* initial return code */ +extern int inflate_blocks OF( ( + inflate_blocks_statef *, + z_streamp, + int ) ); /* initial return code */ -extern void inflate_blocks_reset OF(( - inflate_blocks_statef *, - z_streamp , - uLong *)); /* check value on output */ +extern void inflate_blocks_reset OF( ( + inflate_blocks_statef *, + z_streamp, + uLong * ) ); /* check value on output */ -extern int inflate_blocks_free OF(( - inflate_blocks_statef *, - z_streamp)); +extern int inflate_blocks_free OF( ( + inflate_blocks_statef *, + z_streamp ) ); -extern void inflate_set_dictionary OF(( - inflate_blocks_statef *s, - const Byte *d, /* dictionary */ - uInt n)); /* dictionary length */ +extern void inflate_set_dictionary OF( ( + inflate_blocks_statef * s, + const Byte * d, /* dictionary */ + uInt n ) ); /* dictionary length */ -extern int inflate_blocks_sync_point OF(( - inflate_blocks_statef *s)); +extern int inflate_blocks_sync_point OF( ( + inflate_blocks_statef * s ) ); typedef enum { - imMETHOD, /* waiting for method byte */ - imFLAG, /* waiting for flag byte */ - imDICT4, /* four dictionary check bytes to go */ - imDICT3, /* three dictionary check bytes to go */ - imDICT2, /* two dictionary check bytes to go */ - imDICT1, /* one dictionary check byte to go */ - imDICT0, /* waiting for inflateSetDictionary */ - imBLOCKS, /* decompressing blocks */ - imCHECK4, /* four check bytes to go */ - imCHECK3, /* three check bytes to go */ - imCHECK2, /* two check bytes to go */ - imCHECK1, /* one check byte to go */ - imDONE, /* finished check, done */ - imBAD} /* got an error--stay here */ + imMETHOD, /* waiting for method byte */ + imFLAG, /* waiting for flag byte */ + imDICT4, /* four dictionary check bytes to go */ + imDICT3, /* three dictionary check bytes to go */ + imDICT2, /* two dictionary check bytes to go */ + imDICT1, /* one dictionary check byte to go */ + imDICT0, /* waiting for inflateSetDictionary */ + imBLOCKS, /* decompressing blocks */ + imCHECK4, /* four check bytes to go */ + imCHECK3, /* three check bytes to go */ + imCHECK2, /* two check bytes to go */ + imCHECK1, /* one check byte to go */ + imDONE, /* finished check, done */ + imBAD +} /* got an error--stay here */ inflate_mode; /* inflate private state */ struct internal_state { - /* mode */ - inflate_mode mode; /* current inflate mode */ - - /* mode dependent information */ - union { - uInt method; /* if FLAGS, method byte */ - struct { - uLong was; /* computed check value */ - uLong need; /* stream check value */ - } check; /* if CHECK, check values to compare */ - uInt marker; /* if BAD, inflateSync's marker bytes count */ - } sub; /* submode */ - - /* mode independent information */ - int nowrap; /* flag for no wrapper */ - uInt wbits; /* log2(window size) (8..15, defaults to 15) */ - inflate_blocks_statef - *blocks; /* current inflate_blocks state */ + /* mode */ + inflate_mode mode; /* current inflate mode */ + + /* mode dependent information */ + union { + uInt method; /* if FLAGS, method byte */ + struct { + uLong was; /* computed check value */ + uLong need; /* stream check value */ + } check; /* if CHECK, check values to compare */ + uInt marker; /* if BAD, inflateSync's marker bytes count */ + } sub; /* submode */ + + /* mode independent information */ + int nowrap; /* flag for no wrapper */ + uInt wbits; /* log2(window size) (8..15, defaults to 15) */ + inflate_blocks_statef + *blocks; /* current inflate_blocks state */ }; -int inflateReset(z_streamp z) -{ - if (z == Z_NULL || z->state == Z_NULL) - return Z_STREAM_ERROR; - z->total_in = z->total_out = 0; - z->msg = Z_NULL; - z->state->mode = z->state->nowrap ? imBLOCKS : imMETHOD; - inflate_blocks_reset(z->state->blocks, z, Z_NULL); - Tracev(("inflate: reset\n")); - return Z_OK; +int inflateReset( z_streamp z ){ + if ( z == Z_NULL || z->state == Z_NULL ) { + return Z_STREAM_ERROR; + } + z->total_in = z->total_out = 0; + z->msg = Z_NULL; + z->state->mode = z->state->nowrap ? imBLOCKS : imMETHOD; + inflate_blocks_reset( z->state->blocks, z, Z_NULL ); + Tracev( ( "inflate: reset\n" ) ); + return Z_OK; } -int inflateEnd(z_streamp z) -{ - if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL) - return Z_STREAM_ERROR; - if (z->state->blocks != Z_NULL) - inflate_blocks_free(z->state->blocks, z); - ZFREE(z, z->state); - z->state = Z_NULL; - Tracev(("inflate: end\n")); - return Z_OK; +int inflateEnd( z_streamp z ){ + if ( z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL ) { + return Z_STREAM_ERROR; + } + if ( z->state->blocks != Z_NULL ) { + inflate_blocks_free( z->state->blocks, z ); + } + ZFREE( z, z->state ); + z->state = Z_NULL; + Tracev( ( "inflate: end\n" ) ); + return Z_OK; } -int inflateInit2_(z_streamp z, int w, const char *version, int stream_size) -{ - if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || - stream_size != sizeof(z_stream)) - return Z_VERSION_ERROR; - - /* initialize state */ - if (z == Z_NULL) - return Z_STREAM_ERROR; - z->msg = Z_NULL; - if (z->zalloc == Z_NULL) - { - z->zalloc = (void *(*)(void *, unsigned, unsigned))zcalloc; - z->opaque = (voidp)0; - } - if (z->zfree == Z_NULL) z->zfree = (void (*)(void *, void *))zcfree; - if ((z->state = (struct internal_state *) - ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL) - return Z_MEM_ERROR; - z->state->blocks = Z_NULL; - - /* handle undocumented nowrap option (no zlib header or check) */ - z->state->nowrap = 0; - if (w < 0) - { - w = - w; - z->state->nowrap = 1; - } - - /* set window size */ - if (w < 8 || w > 15) - { - inflateEnd(z); - return Z_STREAM_ERROR; - } - z->state->wbits = (uInt)w; - - /* create inflate_blocks state */ - if ((z->state->blocks = - inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w)) - == Z_NULL) - { - inflateEnd(z); - return Z_MEM_ERROR; - } - Tracev(("inflate: allocated\n")); - - /* reset state */ - inflateReset(z); - return Z_OK; +int inflateInit2_( z_streamp z, int w, const char *version, int stream_size ){ + if ( version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != sizeof( z_stream ) ) { + return Z_VERSION_ERROR; + } + + /* initialize state */ + if ( z == Z_NULL ) { + return Z_STREAM_ERROR; + } + z->msg = Z_NULL; + if ( z->zalloc == Z_NULL ) { + z->zalloc = ( void *( * )( void *, unsigned, unsigned ) )zcalloc; + z->opaque = (voidp)0; + } + if ( z->zfree == Z_NULL ) { + z->zfree = ( void ( * )( void *, void * ) )zcfree; + } + if ( ( z->state = (struct internal_state *) + ZALLOC( z,1,sizeof( struct internal_state ) ) ) == Z_NULL ) { + return Z_MEM_ERROR; + } + z->state->blocks = Z_NULL; + + /* handle undocumented nowrap option (no zlib header or check) */ + z->state->nowrap = 0; + if ( w < 0 ) { + w = -w; + z->state->nowrap = 1; + } + + /* set window size */ + if ( w < 8 || w > 15 ) { + inflateEnd( z ); + return Z_STREAM_ERROR; + } + z->state->wbits = (uInt)w; + + /* create inflate_blocks state */ + if ( ( z->state->blocks = + inflate_blocks_new( z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w ) ) + == Z_NULL ) { + inflateEnd( z ); + return Z_MEM_ERROR; + } + Tracev( ( "inflate: allocated\n" ) ); + + /* reset state */ + inflateReset( z ); + return Z_OK; } -int inflateInit_(z_streamp z, const char *version, int stream_size) -{ - return inflateInit2_(z, DEF_WBITS, version, stream_size); +int inflateInit_( z_streamp z, const char *version, int stream_size ){ + return inflateInit2_( z, DEF_WBITS, version, stream_size ); } -#define iNEEDBYTE {if(z->avail_in==0)return r;r=f;} -#define iNEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++) - -int inflate(z_streamp z, int f) -{ - int r; - uInt b; - - if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL) - return Z_STREAM_ERROR; - f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK; - r = Z_BUF_ERROR; - while (1) switch (z->state->mode) - { - case imMETHOD: - iNEEDBYTE - if (((z->state->sub.method = iNEXTBYTE) & 0xf) != Z_DEFLATED) - { - z->state->mode = imBAD; - z->msg = (char*)"unknown compression method"; - z->state->sub.marker = 5; /* can't try inflateSync */ - break; - } - if ((z->state->sub.method >> 4) + 8 > z->state->wbits) - { - z->state->mode = imBAD; - z->msg = (char*)"invalid window size"; - z->state->sub.marker = 5; /* can't try inflateSync */ - break; - } - z->state->mode = imFLAG; - case imFLAG: - iNEEDBYTE - b = iNEXTBYTE; - if (((z->state->sub.method << 8) + b) % 31) - { - z->state->mode = imBAD; - z->msg = (char*)"incorrect header check"; - z->state->sub.marker = 5; /* can't try inflateSync */ - break; - } - Tracev(("inflate: zlib header ok\n")); - if (!(b & PRESET_DICT)) - { - z->state->mode = imBLOCKS; - break; - } - z->state->mode = imDICT4; - case imDICT4: - iNEEDBYTE - z->state->sub.check.need = (uLong)iNEXTBYTE << 24; - z->state->mode = imDICT3; - case imDICT3: - iNEEDBYTE - z->state->sub.check.need += (uLong)iNEXTBYTE << 16; - z->state->mode = imDICT2; - case imDICT2: - iNEEDBYTE - z->state->sub.check.need += (uLong)iNEXTBYTE << 8; - z->state->mode = imDICT1; - case imDICT1: - iNEEDBYTE - z->state->sub.check.need += (uLong)iNEXTBYTE; - z->adler = z->state->sub.check.need; - z->state->mode = imDICT0; - return Z_NEED_DICT; - case imDICT0: - z->state->mode = imBAD; - z->msg = (char*)"need dictionary"; - z->state->sub.marker = 0; /* can try inflateSync */ - return Z_STREAM_ERROR; - case imBLOCKS: - r = inflate_blocks(z->state->blocks, z, r); - if (r == Z_DATA_ERROR) - { - z->state->mode = imBAD; - z->state->sub.marker = 0; /* can try inflateSync */ - break; - } - if (r == Z_OK) - r = f; - if (r != Z_STREAM_END) - return r; - r = f; - inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was); - if (z->state->nowrap) - { - z->state->mode = imDONE; - break; - } - z->state->mode = imCHECK4; - case imCHECK4: - iNEEDBYTE - z->state->sub.check.need = (uLong)iNEXTBYTE << 24; - z->state->mode = imCHECK3; - case imCHECK3: - iNEEDBYTE - z->state->sub.check.need += (uLong)iNEXTBYTE << 16; - z->state->mode = imCHECK2; - case imCHECK2: - iNEEDBYTE - z->state->sub.check.need += (uLong)iNEXTBYTE << 8; - z->state->mode = imCHECK1; - case imCHECK1: - iNEEDBYTE - z->state->sub.check.need += (uLong)iNEXTBYTE; - - if (z->state->sub.check.was != z->state->sub.check.need) - { - z->state->mode = imBAD; - z->msg = (char*)"incorrect data check"; - z->state->sub.marker = 5; /* can't try inflateSync */ - break; - } - Tracev(("inflate: zlib check ok\n")); - z->state->mode = imDONE; - case imDONE: - return Z_STREAM_END; - case imBAD: - return Z_DATA_ERROR; - default: - return Z_STREAM_ERROR; - } +#define iNEEDBYTE {if ( z->avail_in == 0 ) {return r; } r = f; } +#define iNEXTBYTE ( z->avail_in--,z->total_in++,*z->next_in++ ) + +int inflate( z_streamp z, int f ){ + int r; + uInt b; + + if ( z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL ) { + return Z_STREAM_ERROR; + } + f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK; + r = Z_BUF_ERROR; + while ( 1 ) switch ( z->state->mode ) + { + case imMETHOD: + iNEEDBYTE + if ( ( ( z->state->sub.method = iNEXTBYTE ) & 0xf ) != Z_DEFLATED ) { + z->state->mode = imBAD; + z->msg = (char*)"unknown compression method"; + z->state->sub.marker = 5; /* can't try inflateSync */ + break; + } + if ( ( z->state->sub.method >> 4 ) + 8 > z->state->wbits ) { + z->state->mode = imBAD; + z->msg = (char*)"invalid window size"; + z->state->sub.marker = 5; /* can't try inflateSync */ + break; + } + z->state->mode = imFLAG; + case imFLAG: + iNEEDBYTE + b = iNEXTBYTE; + if ( ( ( z->state->sub.method << 8 ) + b ) % 31 ) { + z->state->mode = imBAD; + z->msg = (char*)"incorrect header check"; + z->state->sub.marker = 5; /* can't try inflateSync */ + break; + } + Tracev( ( "inflate: zlib header ok\n" ) ); + if ( !( b & PRESET_DICT ) ) { + z->state->mode = imBLOCKS; + break; + } + z->state->mode = imDICT4; + case imDICT4: + iNEEDBYTE + z->state->sub.check.need = (uLong)iNEXTBYTE << 24; + z->state->mode = imDICT3; + case imDICT3: + iNEEDBYTE + z->state->sub.check.need += (uLong)iNEXTBYTE << 16; + z->state->mode = imDICT2; + case imDICT2: + iNEEDBYTE + z->state->sub.check.need += (uLong)iNEXTBYTE << 8; + z->state->mode = imDICT1; + case imDICT1: + iNEEDBYTE + z->state->sub.check.need += (uLong)iNEXTBYTE; + z->adler = z->state->sub.check.need; + z->state->mode = imDICT0; + return Z_NEED_DICT; + case imDICT0: + z->state->mode = imBAD; + z->msg = (char*)"need dictionary"; + z->state->sub.marker = 0; /* can try inflateSync */ + return Z_STREAM_ERROR; + case imBLOCKS: + r = inflate_blocks( z->state->blocks, z, r ); + if ( r == Z_DATA_ERROR ) { + z->state->mode = imBAD; + z->state->sub.marker = 0; /* can try inflateSync */ + break; + } + if ( r == Z_OK ) { + r = f; + } + if ( r != Z_STREAM_END ) { + return r; + } + r = f; + inflate_blocks_reset( z->state->blocks, z, &z->state->sub.check.was ); + if ( z->state->nowrap ) { + z->state->mode = imDONE; + break; + } + z->state->mode = imCHECK4; + case imCHECK4: + iNEEDBYTE + z->state->sub.check.need = (uLong)iNEXTBYTE << 24; + z->state->mode = imCHECK3; + case imCHECK3: + iNEEDBYTE + z->state->sub.check.need += (uLong)iNEXTBYTE << 16; + z->state->mode = imCHECK2; + case imCHECK2: + iNEEDBYTE + z->state->sub.check.need += (uLong)iNEXTBYTE << 8; + z->state->mode = imCHECK1; + case imCHECK1: + iNEEDBYTE + z->state->sub.check.need += (uLong)iNEXTBYTE; + + if ( z->state->sub.check.was != z->state->sub.check.need ) { + z->state->mode = imBAD; + z->msg = (char*)"incorrect data check"; + z->state->sub.marker = 5; /* can't try inflateSync */ + break; + } + Tracev( ( "inflate: zlib check ok\n" ) ); + z->state->mode = imDONE; + case imDONE: + return Z_STREAM_END; + case imBAD: + return Z_DATA_ERROR; + default: + return Z_STREAM_ERROR; + } #ifdef NEED_DUMMY_RETURN - return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ + return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ #endif } -int inflateSetDictionary(z_streamp z, const Byte *dictionary, uInt dictLength) -{ - uInt length = dictLength; +int inflateSetDictionary( z_streamp z, const Byte *dictionary, uInt dictLength ){ + uInt length = dictLength; - if (z == Z_NULL || z->state == Z_NULL || z->state->mode != imDICT0) - return Z_STREAM_ERROR; + if ( z == Z_NULL || z->state == Z_NULL || z->state->mode != imDICT0 ) { + return Z_STREAM_ERROR; + } - if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR; - z->adler = 1L; + if ( adler32( 1L, dictionary, dictLength ) != z->adler ) { + return Z_DATA_ERROR; + } + z->adler = 1L; - if (length >= ((uInt)1<state->wbits)) - { - length = (1<state->wbits)-1; - dictionary += dictLength - length; - } - inflate_set_dictionary(z->state->blocks, dictionary, length); - z->state->mode = imBLOCKS; - return Z_OK; + if ( length >= ( (uInt)1 << z->state->wbits ) ) { + length = ( 1 << z->state->wbits ) - 1; + dictionary += dictLength - length; + } + inflate_set_dictionary( z->state->blocks, dictionary, length ); + z->state->mode = imBLOCKS; + return Z_OK; } -int inflateSync(z_streamp z) -{ - uInt n; /* number of bytes to look at */ - Byte *p; /* pointer to bytes */ - uInt m; /* number of marker bytes found in a row */ - uLong r, w; /* temporaries to save total_in and total_out */ - - /* set up */ - if (z == Z_NULL || z->state == Z_NULL) - return Z_STREAM_ERROR; - if (z->state->mode != imBAD) - { - z->state->mode = imBAD; - z->state->sub.marker = 0; - } - if ((n = z->avail_in) == 0) - return Z_BUF_ERROR; - p = z->next_in; - m = z->state->sub.marker; - - /* search */ - while (n && m < 4) - { - static const Byte mark[4] = {0, 0, 0xff, 0xff}; - if (*p == mark[m]) - m++; - else if (*p) - m = 0; - else - m = 4 - m; - p++, n--; - } - - /* restore */ - z->total_in += p - z->next_in; - z->next_in = p; - z->avail_in = n; - z->state->sub.marker = m; - - /* return no joy or set up to restart on a new block */ - if (m != 4) - return Z_DATA_ERROR; - r = z->total_in; w = z->total_out; - inflateReset(z); - z->total_in = r; z->total_out = w; - z->state->mode = imBLOCKS; - return Z_OK; +int inflateSync( z_streamp z ){ + uInt n; /* number of bytes to look at */ + Byte *p; /* pointer to bytes */ + uInt m; /* number of marker bytes found in a row */ + uLong r, w; /* temporaries to save total_in and total_out */ + + /* set up */ + if ( z == Z_NULL || z->state == Z_NULL ) { + return Z_STREAM_ERROR; + } + if ( z->state->mode != imBAD ) { + z->state->mode = imBAD; + z->state->sub.marker = 0; + } + if ( ( n = z->avail_in ) == 0 ) { + return Z_BUF_ERROR; + } + p = z->next_in; + m = z->state->sub.marker; + + /* search */ + while ( n && m < 4 ) + { + static const Byte mark[4] = {0, 0, 0xff, 0xff}; + if ( *p == mark[m] ) { + m++; + } + else if ( *p ) { + m = 0; + } + else{ + m = 4 - m; + } + p++, n--; + } + + /* restore */ + z->total_in += p - z->next_in; + z->next_in = p; + z->avail_in = n; + z->state->sub.marker = m; + + /* return no joy or set up to restart on a new block */ + if ( m != 4 ) { + return Z_DATA_ERROR; + } + r = z->total_in; w = z->total_out; + inflateReset( z ); + z->total_in = r; z->total_out = w; + z->state->mode = imBLOCKS; + return Z_OK; } @@ -4513,22 +4617,23 @@ int inflateSync(z_streamp z) * decompressing, PPP checks that at the end of input packet, inflate is * waiting for these length bytes. */ -int inflateSyncPoint(z_streamp z) -{ - if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL) - return Z_STREAM_ERROR; - return inflate_blocks_sync_point(z->state->blocks); +int inflateSyncPoint( z_streamp z ){ + if ( z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL ) { + return Z_STREAM_ERROR; + } + return inflate_blocks_sync_point( z->state->blocks ); } -voidp zcalloc (voidp opaque, unsigned items, unsigned size) -{ - if (opaque) items += size - size; /* make compiler happy */ - return (voidp)malloc(items*size); +voidp zcalloc( voidp opaque, unsigned items, unsigned size ){ + if ( opaque ) { + items += size - size; /* make compiler happy */ + } + return (voidp)malloc( items * size ); } -void zcfree (voidp opaque, voidp ptr) -{ - free(ptr); - if (opaque) return; /* make compiler happy */ +void zcfree( voidp opaque, voidp ptr ){ + free( ptr ); + if ( opaque ) { + return; /* make compiler happy */ + } } - diff --git a/libs/pak/unzip.h b/libs/pak/unzip.h index 79a487e3..b82840e6 100644 --- a/libs/pak/unzip.h +++ b/libs/pak/unzip.h @@ -1,8 +1,8 @@ -#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) +#if defined( STRICTUNZIP ) || defined( STRICTZIPUNZIP ) /* like the STRICT of WIN32, we define a pointer that cannot be converted from (void*) without cast */ -typedef struct TagunzFile__ { int unused; } unzFile__; +typedef struct TagunzFile__ { int unused; } unzFile__; typedef unzFile__ *unzFile; #else typedef void* unzFile; @@ -10,7 +10,7 @@ typedef void* unzFile; /* tm_unz contain date/time info */ -typedef struct tm_unz_s +typedef struct tm_unz_s { unsigned int tm_sec; /* seconds after the minute - [0,59] */ unsigned int tm_min; /* minutes after the hour - [0,59] */ @@ -32,55 +32,55 @@ typedef struct unz_global_info_s /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_info_s { - unsigned long version; /* version made by 2 unsigned chars */ - unsigned long version_needed; /* version needed to extract 2 unsigned chars */ - unsigned long flag; /* general purpose bit flag 2 unsigned chars */ - unsigned long compression_method; /* compression method 2 unsigned chars */ - unsigned long dosDate; /* last mod file date in Dos fmt 4 unsigned chars */ - unsigned long crc; /* crc-32 4 unsigned chars */ - unsigned long compressed_size; /* compressed size 4 unsigned chars */ - unsigned long uncompressed_size; /* uncompressed size 4 unsigned chars */ - unsigned long size_filename; /* filename length 2 unsigned chars */ - unsigned long size_file_extra; /* extra field length 2 unsigned chars */ - unsigned long size_file_comment; /* file comment length 2 unsigned chars */ - - unsigned long disk_num_start; /* disk number start 2 unsigned chars */ - unsigned long internal_fa; /* internal file attributes 2 unsigned chars */ - unsigned long external_fa; /* external file attributes 4 unsigned chars */ - - tm_unz tmu_date; + unsigned long version; /* version made by 2 unsigned chars */ + unsigned long version_needed; /* version needed to extract 2 unsigned chars */ + unsigned long flag; /* general purpose bit flag 2 unsigned chars */ + unsigned long compression_method; /* compression method 2 unsigned chars */ + unsigned long dosDate; /* last mod file date in Dos fmt 4 unsigned chars */ + unsigned long crc; /* crc-32 4 unsigned chars */ + unsigned long compressed_size; /* compressed size 4 unsigned chars */ + unsigned long uncompressed_size; /* uncompressed size 4 unsigned chars */ + unsigned long size_filename; /* filename length 2 unsigned chars */ + unsigned long size_file_extra; /* extra field length 2 unsigned chars */ + unsigned long size_file_comment; /* file comment length 2 unsigned chars */ + + unsigned long disk_num_start; /* disk number start 2 unsigned chars */ + unsigned long internal_fa; /* internal file attributes 2 unsigned chars */ + unsigned long external_fa; /* external file attributes 4 unsigned chars */ + + tm_unz tmu_date; } unz_file_info; /* unz_file_info_interntal contain internal info about a file in zipfile*/ typedef struct unz_file_info_internal_s { - unsigned long offset_curfile;/* relative offset of static header 4 unsigned chars */ + unsigned long offset_curfile; /* relative offset of static header 4 unsigned chars */ } unz_file_info_internal; -typedef void* (*alloc_func) (void* opaque, unsigned int items, unsigned int size); -typedef void (*free_func) (void* opaque, void* address); +typedef void* ( *alloc_func )( void* opaque, unsigned int items, unsigned int size ); +typedef void ( *free_func )( void* opaque, void* address ); struct internal_state; typedef struct z_stream_s { - unsigned char *next_in; /* next input unsigned char */ - unsigned int avail_in; /* number of unsigned chars available at next_in */ - unsigned long total_in; /* total nb of input unsigned chars read so */ + unsigned char *next_in; /* next input unsigned char */ + unsigned int avail_in; /* number of unsigned chars available at next_in */ + unsigned long total_in; /* total nb of input unsigned chars read so */ - unsigned char *next_out; /* next output unsigned char should be put there */ - unsigned int avail_out; /* remaining free space at next_out */ - unsigned long total_out; /* total nb of unsigned chars output so */ + unsigned char *next_out; /* next output unsigned char should be put there */ + unsigned int avail_out; /* remaining free space at next_out */ + unsigned long total_out; /* total nb of unsigned chars output so */ - char *msg; /* last error message, NULL if no error */ - struct internal_state *state; /* not visible by applications */ + char *msg; /* last error message, NULL if no error */ + struct internal_state *state; /* not visible by applications */ - alloc_func zalloc; /* used to allocate the internal state */ - free_func zfree; /* used to free the internal state */ - unsigned char* opaque; /* private data object passed to zalloc and zfree */ + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + unsigned char* opaque; /* private data object passed to zalloc and zfree */ - int data_type; /* best guess about the data type: ascii or binary */ - unsigned long adler; /* adler32 value of the uncompressed data */ - unsigned long reserved; /* reserved for future use */ + int data_type; /* best guess about the data type: ascii or binary */ + unsigned long adler; /* adler32 value of the uncompressed data */ + unsigned long reserved; /* reserved for future use */ } z_stream; typedef z_stream *z_streamp; @@ -96,27 +96,27 @@ typedef struct unsigned long pos_in_zipfile; /* position in unsigned char on the zipfile, for fseek*/ unsigned long stream_initialised; /* flag set if stream structure is initialised*/ - unsigned long offset_local_extrafield;/* offset of the static extra field */ - unsigned int size_local_extrafield;/* size of the static extra field */ + unsigned long offset_local_extrafield; /* offset of the static extra field */ + unsigned int size_local_extrafield; /* size of the static extra field */ unsigned long pos_local_extrafield; /* position in the static extra field in read*/ unsigned long crc32; /* crc32 of all data uncompressed */ unsigned long crc32_wait; /* crc32 we must obtain after decompress all */ unsigned long rest_read_compressed; /* number of unsigned char to be decompressed */ - unsigned long rest_read_uncompressed;/*number of unsigned char to be obtained after decomp*/ + unsigned long rest_read_uncompressed; /*number of unsigned char to be obtained after decomp*/ FILE* file; /* io structore of the zipfile */ unsigned long compression_method; /* compression method (0==store) */ - unsigned long byte_before_the_zipfile;/* unsigned char before the zipfile, (>0 for sfx)*/ + unsigned long byte_before_the_zipfile; /* unsigned char before the zipfile, (>0 for sfx)*/ } file_in_zip_read_info_s; /* unz_s contain internal information about the zipfile -*/ + */ typedef struct { FILE* file; /* io structore of the zipfile */ unz_global_info gi; /* public global information */ - unsigned long byte_before_the_zipfile;/* unsigned char before the zipfile, (>0 for sfx)*/ + unsigned long byte_before_the_zipfile; /* unsigned char before the zipfile, (>0 for sfx)*/ unsigned long num_file; /* number of the current file in the zipfile*/ unsigned long pos_in_central_dir; /* pos of the current file in the central dir*/ unsigned long current_file_ok; /* flag about the usability of the current file*/ @@ -124,177 +124,177 @@ typedef struct unsigned long size_central_dir; /* size of the central directory */ unsigned long offset_central_dir; /* offset of start of central directory with - respect to the starting disk number */ + respect to the starting disk number */ unz_file_info cur_file_info; /* public info about the current file in zip*/ unz_file_info_internal cur_file_info_internal; /* private info about it*/ - file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current - file if we are decompressing it */ + file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current + file if we are decompressing it */ } unz_s; -#define UNZ_OK (0) -#define UNZ_END_OF_LIST_OF_FILE (-100) -#define UNZ_ERRNO (Z_ERRNO) -#define UNZ_EOF (0) -#define UNZ_PARAMERROR (-102) -#define UNZ_BADZIPFILE (-103) -#define UNZ_INTERNALERROR (-104) -#define UNZ_CRCERROR (-105) +#define UNZ_OK ( 0 ) +#define UNZ_END_OF_LIST_OF_FILE ( -100 ) +#define UNZ_ERRNO ( Z_ERRNO ) +#define UNZ_EOF ( 0 ) +#define UNZ_PARAMERROR ( -102 ) +#define UNZ_BADZIPFILE ( -103 ) +#define UNZ_INTERNALERROR ( -104 ) +#define UNZ_CRCERROR ( -105 ) -#define UNZ_CASESENSITIVE 1 -#define UNZ_NOTCASESENSITIVE 2 -#define UNZ_OSDEFAULTCASE 0 +#define UNZ_CASESENSITIVE 1 +#define UNZ_NOTCASESENSITIVE 2 +#define UNZ_OSDEFAULTCASE 0 -extern int unzStringFileNameCompare (const char* fileName1, const char* fileName2, int iCaseSensitivity); +extern int unzStringFileNameCompare( const char* fileName1, const char* fileName2, int iCaseSensitivity ); /* Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi - or strcasecmp) + or strcasecmp) If iCaseSenisivity = 0, case sensitivity is defaut of your operating system - (like 1 on Unix, 2 on Windows) -*/ + (like 1 on Unix, 2 on Windows) + */ -extern unzFile unzOpen (const char *path); -extern unzFile unzReOpen (const char* path, unzFile file); +extern unzFile unzOpen( const char *path ); +extern unzFile unzReOpen( const char* path, unzFile file ); /* - Open a Zip file. path contain the full pathname (by example, + Open a Zip file. path contain the full pathname (by example, on a Windows NT computer "c:\\zlib\\zlib111.zip" or on an Unix computer - "zlib/zlib111.zip". - If the zipfile cannot be opened (file don't exist or in not valid), the - return value is NULL. + "zlib/zlib111.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. Else, the return value is a unzFile Handle, usable with other function - of this unzip package. -*/ + of this unzip package. + */ -extern int unzClose (unzFile file); +extern int unzClose( unzFile file ); /* - Close a ZipFile opened with unzipOpen. - If there is files inside the .Zip opened with unzOpenCurrentFile (see later), + Close a ZipFile opened with unzipOpen. + If there is files inside the .Zip opened with unzOpenCurrentFile (see later), these files MUST be closed with unzipCloseCurrentFile before call unzipClose. - return UNZ_OK if there is no problem. */ + return UNZ_OK if there is no problem. */ -extern int unzGetGlobalInfo (unzFile file, unz_global_info *pglobal_info); +extern int unzGetGlobalInfo( unzFile file, unz_global_info *pglobal_info ); /* - Write info about the ZipFile in the *pglobal_info structure. - No preparation of the structure is needed - return UNZ_OK if there is no problem. */ + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ -extern int unzGetGlobalComment (unzFile file, char *szComment, unsigned long uSizeBuf); +extern int unzGetGlobalComment( unzFile file, char *szComment, unsigned long uSizeBuf ); /* - Get the global comment string of the ZipFile, in the szComment buffer. - uSizeBuf is the size of the szComment buffer. - return the number of unsigned char copied or an error code <0 -*/ + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of unsigned char copied or an error code <0 + */ /***************************************************************************/ /* Unzip package allow you browse the directory of the zipfile */ -extern int unzGoToFirstFile (unzFile file); +extern int unzGoToFirstFile( unzFile file ); /* - Set the current file of the zipfile to the first file. - return UNZ_OK if there is no problem -*/ + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem + */ -extern int unzGoToNextFile (unzFile file); +extern int unzGoToNextFile( unzFile file ); /* - Set the current file of the zipfile to the next file. - return UNZ_OK if there is no problem - return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. -*/ + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. + */ -extern int unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity); +extern int unzLocateFile( unzFile file, const char *szFileName, int iCaseSensitivity ); /* - Try locate the file szFileName in the zipfile. - For the iCaseSensitivity signification, see unzStringFileNameCompare + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare - return value : - UNZ_OK if the file is found. It becomes the current file. - UNZ_END_OF_LIST_OF_FILE if the file is not found -*/ + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found + */ -extern int unzGetCurrentFileInfo (unzFile file, unz_file_info *pfile_info, char *szFileName, unsigned long fileNameBufferSize, void *extraField, unsigned long extraFieldBufferSize, char *szComment, unsigned long commentBufferSize); +extern int unzGetCurrentFileInfo( unzFile file, unz_file_info *pfile_info, char *szFileName, unsigned long fileNameBufferSize, void *extraField, unsigned long extraFieldBufferSize, char *szComment, unsigned long commentBufferSize ); /* - Get Info about the current file - if pfile_info!=NULL, the *pfile_info structure will contain somes info about - the current file - if szFileName!=NULL, the filemane string will be copied in szFileName - (fileNameBufferSize is the size of the buffer) - if extraField!=NULL, the extra field information will be copied in extraField - (extraFieldBufferSize is the size of the buffer). - This is the Central-header version of the extra field - if szComment!=NULL, the comment string of the file will be copied in szComment - (commentBufferSize is the size of the buffer) -*/ + Get Info about the current file + if pfile_info!=NULL, the *pfile_info structure will contain somes info about + the current file + if szFileName!=NULL, the filemane string will be copied in szFileName + (fileNameBufferSize is the size of the buffer) + if extraField!=NULL, the extra field information will be copied in extraField + (extraFieldBufferSize is the size of the buffer). + This is the Central-header version of the extra field + if szComment!=NULL, the comment string of the file will be copied in szComment + (commentBufferSize is the size of the buffer) + */ /***************************************************************************/ /* for reading the content of the current zipfile, you can open it, read data from it, and close it (you can close it before reading all the file) - */ + */ -extern int unzOpenCurrentFile (unzFile file); +extern int unzOpenCurrentFile( unzFile file ); /* - Open for reading data the current file in the zipfile. - If there is no error, the return value is UNZ_OK. -*/ + Open for reading data the current file in the zipfile. + If there is no error, the return value is UNZ_OK. + */ -extern int unzCloseCurrentFile (unzFile file); +extern int unzCloseCurrentFile( unzFile file ); /* - Close the file in zip opened with unzOpenCurrentFile - Return UNZ_CRCERROR if all the file was read but the CRC is not good -*/ + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good + */ - -extern int unzReadCurrentFile (unzFile file, void* buf, unsigned len); + +extern int unzReadCurrentFile( unzFile file, void* buf, unsigned len ); /* - Read unsigned chars from the current file (opened by unzOpenCurrentFile) - buf contain buffer where data must be copied - len the size of buf. + Read unsigned chars from the current file (opened by unzOpenCurrentFile) + buf contain buffer where data must be copied + len the size of buf. - return the number of unsigned char copied if somes unsigned chars are copied - return 0 if the end of file was reached - return <0 with error code if there is an error + return the number of unsigned char copied if somes unsigned chars are copied + return 0 if the end of file was reached + return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) -*/ + */ -extern long unztell(unzFile file); +extern long unztell( unzFile file ); /* - Give the current position in uncompressed data -*/ + Give the current position in uncompressed data + */ -extern int unzeof (unzFile file); +extern int unzeof( unzFile file ); /* - return 1 if the end of file was reached, 0 elsewhere -*/ + return 1 if the end of file was reached, 0 elsewhere + */ -extern int unzGetLocalExtrafield (unzFile file, void* buf, unsigned len); +extern int unzGetLocalExtrafield( unzFile file, void* buf, unsigned len ); /* - Read extra field from the current file (opened by unzOpenCurrentFile) - This is the local-header version of the extra field (sometimes, there is + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is more info in the local-header version than in the central-header) - if buf==NULL, it return the size of the local extra field + if buf==NULL, it return the size of the local extra field - if buf!=NULL, len is the size of the buffer, the extra header is copied in - buf. - the return value is the number of unsigned chars copied in buf, or (if <0) - the error code -*/ + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of unsigned chars copied in buf, or (if <0) + the error code + */ diff --git a/libs/pakstuff.h b/libs/pakstuff.h index 340e8798..a2ace159 100644 --- a/libs/pakstuff.h +++ b/libs/pakstuff.h @@ -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-2007 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 + */ #ifndef _PAKSTUFF_H_ #define _PAKSTUFF_H_ @@ -37,18 +37,18 @@ extern "C" { #endif -typedef char Int8; -typedef short Int16; -typedef long Int32; -typedef unsigned char UInt8; +typedef char Int8; +typedef short Int16; +typedef long Int32; +typedef unsigned char UInt8; typedef unsigned short UInt16; -typedef unsigned long UInt32; -typedef float Float32; -typedef double Float64; -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define RANDOM(x) (random() % (x)) -#define RANDOMIZE() srand((int) time(NULL)) +typedef unsigned long UInt32; +typedef float Float32; +typedef double Float64; +#define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) +#define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) +#define RANDOM( x ) ( random() % ( x ) ) +#define RANDOMIZE() srand( (int) time( NULL ) ) #define FTYPE_UNKNOWN 0 #define FTYPE_IWAD 1 /* .wad "IWAD" */ @@ -73,75 +73,75 @@ typedef double Float64; #define FTYPE_ERROR -1 #ifdef FAT_ENDIAN -Bool ReadInt16 (FILE *file, UInt16 huge *x); -Bool ReadInt32 (FILE *file, UInt32 huge *x); -Bool ReadFloat32 (FILE *file, Float32 huge *x); -Bool WriteInt16 (FILE *file, UInt16 huge *x); -Bool WriteInt32 (FILE *file, UInt32 huge *x); -Bool WriteFloat32 (FILE *file, Float32 huge *x); -UInt16 SwapInt16 (UInt16 x); -UInt32 SwapInt32 (UInt32 x); -Float32 SwapFloat32 (Float32 x); +Bool ReadInt16( FILE *file, UInt16 huge *x ); +Bool ReadInt32( FILE *file, UInt32 huge *x ); +Bool ReadFloat32( FILE *file, Float32 huge *x ); +Bool WriteInt16( FILE *file, UInt16 huge *x ); +Bool WriteInt32( FILE *file, UInt32 huge *x ); +Bool WriteFloat32( FILE *file, Float32 huge *x ); +UInt16 SwapInt16( UInt16 x ); +UInt32 SwapInt32( UInt32 x ); +Float32 SwapFloat32( Float32 x ); #else -#define ReadInt16(f, p) ReadBytes((f), (p), 2L) -#define ReadInt32(f, p) ReadBytes((f), (p), 4L) -#define ReadFloat32(f, p) ReadBytes((f), (p), 4L) -#define WriteInt16(f, p) WriteBytes((f), (p), 2L) -#define WriteInt32(f, p) WriteBytes((f), (p), 4L) -#define WriteFloat32(f, p) WriteBytes((f), (p), 4L) -#define SwapInt16(x) (x) -#define SwapInt32(x) (x) -#define SwapFloat32(x) (x) +#define ReadInt16( f, p ) ReadBytes( ( f ), ( p ), 2L ) +#define ReadInt32( f, p ) ReadBytes( ( f ), ( p ), 4L ) +#define ReadFloat32( f, p ) ReadBytes( ( f ), ( p ), 4L ) +#define WriteInt16( f, p ) WriteBytes( ( f ), ( p ), 2L ) +#define WriteInt32( f, p ) WriteBytes( ( f ), ( p ), 4L ) +#define WriteFloat32( f, p ) WriteBytes( ( f ), ( p ), 4L ) +#define SwapInt16( x ) ( x ) +#define SwapInt32( x ) ( x ) +#define SwapFloat32( x ) ( x ) #endif /* FAT_ENDIAN */ -#define FROMDISK -1 +#define FROMDISK -1 struct PACKDirectory { - char name[56]; /* name of file */ - UInt32 offset; /* offset to start of data */ - UInt32 size; /* byte size of data */ + char name[56]; /* name of file */ + UInt32 offset; /* offset to start of data */ + UInt32 size; /* byte size of data */ }; typedef struct PACKDirectory *PACKDirPtr; typedef struct DirListStruct { - char dirname[1024]; - int from; - struct DirListStruct *next; + char dirname[1024]; + int from; + struct DirListStruct *next; } DIRLIST; typedef struct FileListStruct { - char filename[1024]; - UInt32 offset; - UInt32 size; - struct FileListStruct *next; + char filename[1024]; + UInt32 offset; + UInt32 size; + struct FileListStruct *next; } FILELIST; typedef struct DirStruct { - char name[1024]; - FILELIST *files; - struct DirStruct *next; + char name[1024]; + FILELIST *files; + struct DirStruct *next; } DIRECTORY; extern int m_nPAKIndex; extern FILE* pakfile[16]; extern bool pakopen; -extern DIRECTORY *paktextures; - -void ClearFileList (FILELIST **); -void ClearDirList (DIRLIST **); -bool GetPackFileList (FILELIST **, char *); -bool GetPackTextureDirs (DIRLIST **); -bool AddToDirListAlphabetized (DIRLIST **, char *, int); -bool AddToFileListAlphabetized (FILELIST **t, char *, UInt32, UInt32, bool); -bool PakLoadFile (const char *, void **); -void OpenPakFile (const char *); -void ClosePakFile (void); -int PakLoadAnyFile(const char *filename, void **bufferptr); -void WINAPI InitPakFile(const char * pBasePath, const char *pName); +extern DIRECTORY *paktextures; + +void ClearFileList( FILELIST ** ); +void ClearDirList( DIRLIST ** ); +bool GetPackFileList( FILELIST **, char * ); +bool GetPackTextureDirs( DIRLIST ** ); +bool AddToDirListAlphabetized( DIRLIST **, char *, int ); +bool AddToFileListAlphabetized( FILELIST * *t, char *, UInt32, UInt32, bool ); +bool PakLoadFile( const char *, void ** ); +void OpenPakFile( const char * ); +void ClosePakFile( void ); +int PakLoadAnyFile( const char *filename, void **bufferptr ); +void WINAPI InitPakFile( const char * pBasePath, const char *pName ); #ifdef __cplusplus } diff --git a/libs/picomodel.h b/libs/picomodel.h index 1912b4cb..98d5452f 100644 --- a/libs/picomodel.h +++ b/libs/picomodel.h @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -46,28 +46,28 @@ extern "C" /* version */ -#define PICOMODEL_VERSION "0.8.20" +#define PICOMODEL_VERSION "0.8.20" /* constants */ -#define PICO_GROW_SHADERS 16 -#define PICO_GROW_SURFACES 16 -#define PICO_GROW_VERTEXES 1024 -#define PICO_GROW_INDEXES 1024 -#define PICO_GROW_ARRAYS 8 -#define PICO_GROW_FACES 256 -#define PICO_MAX_SPECIAL 8 -#define PICO_MAX_DEFAULT_EXTS 4 /* max default extensions per module */ +#define PICO_GROW_SHADERS 16 +#define PICO_GROW_SURFACES 16 +#define PICO_GROW_VERTEXES 1024 +#define PICO_GROW_INDEXES 1024 +#define PICO_GROW_ARRAYS 8 +#define PICO_GROW_FACES 256 +#define PICO_MAX_SPECIAL 8 +#define PICO_MAX_DEFAULT_EXTS 4 /* max default extensions per module */ /* types */ -typedef unsigned char picoByte_t; -typedef float picoVec_t; -typedef float picoVec2_t[ 2 ]; -typedef float picoVec3_t[ 3 ]; -typedef float picoVec4_t[ 4 ]; -typedef picoByte_t picoColor_t[ 4 ]; -typedef int picoIndex_t; +typedef unsigned char picoByte_t; +typedef float picoVec_t; +typedef float picoVec2_t[ 2 ]; +typedef float picoVec3_t[ 3 ]; +typedef float picoVec4_t[ 4 ]; +typedef picoByte_t picoColor_t[ 4 ]; +typedef int picoIndex_t; typedef enum { @@ -87,72 +87,72 @@ typedef enum } picoPrintLevel_t; -typedef struct picoSurface_s picoSurface_t; -typedef struct picoShader_s picoShader_t; -typedef struct picoModel_s picoModel_t; -typedef struct picoModule_s picoModule_t; +typedef struct picoSurface_s picoSurface_t; +typedef struct picoShader_s picoShader_t; +typedef struct picoModel_s picoModel_t; +typedef struct picoModule_s picoModule_t; struct picoSurface_s { - void *data; - - picoModel_t *model; /* owner model */ - - picoSurfaceType_t type; - char *name; /* sea: surface name */ - picoShader_t *shader; /* ydnar: changed to ptr */ - - int numVertexes, maxVertexes; - picoVec3_t *xyz; - picoVec3_t *normal; - - int numSTArrays, maxSTArrays; - picoVec2_t **st; - - int numColorArrays, maxColorArrays; - picoColor_t **color; - - int numIndexes, maxIndexes; - picoIndex_t *index; - - int numFaceNormals, maxFaceNormals; - picoVec3_t *faceNormal; - - int special[ PICO_MAX_SPECIAL ]; + void *data; + + picoModel_t *model; /* owner model */ + + picoSurfaceType_t type; + char *name; /* sea: surface name */ + picoShader_t *shader; /* ydnar: changed to ptr */ + + int numVertexes, maxVertexes; + picoVec3_t *xyz; + picoVec3_t *normal; + + int numSTArrays, maxSTArrays; + picoVec2_t **st; + + int numColorArrays, maxColorArrays; + picoColor_t **color; + + int numIndexes, maxIndexes; + picoIndex_t *index; + + int numFaceNormals, maxFaceNormals; + picoVec3_t *faceNormal; + + int special[ PICO_MAX_SPECIAL ]; }; /* seaw0lf */ struct picoShader_s { - picoModel_t *model; /* owner model */ - - char *name; /* shader name */ - char *mapName; /* shader file name (name of diffuse texturemap) */ - picoColor_t ambientColor; /* ambient color of mesh (rgba) */ - picoColor_t diffuseColor; /* diffuse color of mesh (rgba) */ - picoColor_t specularColor; /* specular color of mesh (rgba) */ - float transparency; /* transparency (0..1; 1 = 100% transparent) */ - float shininess; /* shininess (0..128; 128 = 100% shiny) */ + picoModel_t *model; /* owner model */ + + char *name; /* shader name */ + char *mapName; /* shader file name (name of diffuse texturemap) */ + picoColor_t ambientColor; /* ambient color of mesh (rgba) */ + picoColor_t diffuseColor; /* diffuse color of mesh (rgba) */ + picoColor_t specularColor; /* specular color of mesh (rgba) */ + float transparency; /* transparency (0..1; 1 = 100% transparent) */ + float shininess; /* shininess (0..128; 128 = 100% shiny) */ }; struct picoModel_s { - void *data; - char *name; /* model name */ - char *fileName; /* sea: model file name */ - int frameNum; /* sea: renamed to frameNum */ - int numFrames; /* sea: number of frames */ - picoVec3_t mins; - picoVec3_t maxs; - - int numShaders, maxShaders; - picoShader_t **shader; - - int numSurfaces, maxSurfaces; - picoSurface_t **surface; - - const picoModule_t *module; /* sea */ + void *data; + char *name; /* model name */ + char *fileName; /* sea: model file name */ + int frameNum; /* sea: renamed to frameNum */ + int numFrames; /* sea: number of frames */ + picoVec3_t mins; + picoVec3_t maxs; + + int numShaders, maxShaders; + picoShader_t **shader; + + int numSurfaces, maxSurfaces; + picoSurface_t **surface; + + const picoModule_t *module; /* sea */ }; @@ -162,12 +162,12 @@ struct picoModel_s /* that there was an error. */ enum { - PICO_PMV_OK, /* file valid */ - PICO_PMV_ERROR, /* file not valid */ - PICO_PMV_ERROR_IDENT, /* unknown file magic (aka ident) */ - PICO_PMV_ERROR_VERSION, /* unsupported file version */ - PICO_PMV_ERROR_SIZE, /* file size error */ - PICO_PMV_ERROR_MEMORY, /* out of memory error */ + PICO_PMV_OK, /* file valid */ + PICO_PMV_ERROR, /* file not valid */ + PICO_PMV_ERROR_IDENT, /* unknown file magic (aka ident) */ + PICO_PMV_ERROR_VERSION, /* unsupported file version */ + PICO_PMV_ERROR_SIZE, /* file size error */ + PICO_PMV_ERROR_MEMORY, /* out of memory error */ }; /* convenience (makes it easy to add new params to the callbacks) */ @@ -181,158 +181,158 @@ enum void #define PM_PARAMS_SAVE \ - char *fileName, picoModel_t *model + char *fileName, picoModel_t * model /* pico file format module structure */ struct picoModule_s { - char *version; /* internal module version (e.g. '1.5-b2') */ + char *version; /* internal module version (e.g. '1.5-b2') */ - char *displayName; /* string used to display in guis, etc. */ - char *authorName; /* author name (eg. 'My Real Name') */ - char *copyright; /* copyright year and holder (eg. '2002 My Company') */ + char *displayName; /* string used to display in guis, etc. */ + char *authorName; /* author name (eg. 'My Real Name') */ + char *copyright; /* copyright year and holder (eg. '2002 My Company') */ - char *defaultExts[ PICO_MAX_DEFAULT_EXTS ]; /* default file extensions used by this file type */ - int (*canload)( PM_PARAMS_CANLOAD ); /* checks whether module can load given file (returns PMVR_*) */ - picoModel_t *(*load)( PM_PARAMS_LOAD ); /* parses model file data */ - int (*cansave)( PM_PARAMS_CANSAVE ); /* checks whether module can save (returns 1 or 0 and might spit out a message) */ - int (*save)( PM_PARAMS_SAVE ); /* saves a pico model in module's native model format */ + char *defaultExts[ PICO_MAX_DEFAULT_EXTS ]; /* default file extensions used by this file type */ + int ( *canload )( PM_PARAMS_CANLOAD ); /* checks whether module can load given file (returns PMVR_*) */ + picoModel_t *( *load )( PM_PARAMS_LOAD ); /* parses model file data */ + int ( *cansave )( PM_PARAMS_CANSAVE ); /* checks whether module can save (returns 1 or 0 and might spit out a message) */ + int ( *save )( PM_PARAMS_SAVE ); /* saves a pico model in module's native model format */ }; /* general functions */ -int PicoInit( void ); -void PicoShutdown( void ); -int PicoError( void ); +int PicoInit( void ); +void PicoShutdown( void ); +int PicoError( void ); -void PicoSetMallocFunc( void *(*func)( size_t ) ); -void PicoSetFreeFunc( void (*func)( void* ) ); -void PicoSetLoadFileFunc( void (*func)( char*, unsigned char**, int* ) ); -void PicoSetFreeFileFunc( void (*func)( void* ) ); -void PicoSetPrintFunc( void (*func)( int, const char* ) ); +void PicoSetMallocFunc( void *( *func )( size_t ) ); +void PicoSetFreeFunc( void ( *func )( void* ) ); +void PicoSetLoadFileFunc( void ( *func )( char*, unsigned char**, int* ) ); +void PicoSetFreeFileFunc( void ( *func )( void* ) ); +void PicoSetPrintFunc( void ( *func )( int, const char* ) ); -const picoModule_t **PicoModuleList( int *numModules ); +const picoModule_t **PicoModuleList( int *numModules ); -picoModel_t *PicoLoadModel( char *name, int frameNum ); +picoModel_t *PicoLoadModel( char *name, int frameNum ); /* model functions */ -picoModel_t *PicoNewModel( void ); -void PicoFreeModel( picoModel_t *model ); -int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces ); +picoModel_t *PicoNewModel( void ); +void PicoFreeModel( picoModel_t *model ); +int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces ); /* shader functions */ -picoShader_t *PicoNewShader( picoModel_t *model ); -void PicoFreeShader( picoShader_t *shader ); -picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive ); +picoShader_t *PicoNewShader( picoModel_t *model ); +void PicoFreeShader( picoShader_t *shader ); +picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive ); /* surface functions */ -picoSurface_t *PicoNewSurface( picoModel_t *model ); -void PicoFreeSurface( picoSurface_t *surface ); -picoSurface_t *PicoFindSurface( picoModel_t *model, char *name, int caseSensitive ); -int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, int numColorArrays, int numIndexes, int numFaceNormals ); +picoSurface_t *PicoNewSurface( picoModel_t *model ); +void PicoFreeSurface( picoSurface_t *surface ); +picoSurface_t *PicoFindSurface( picoModel_t *model, char *name, int caseSensitive ); +int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, int numColorArrays, int numIndexes, int numFaceNormals ); /* setter functions */ -void PicoSetModelName( picoModel_t *model, char *name ); -void PicoSetModelFileName( picoModel_t *model, char *fileName ); -void PicoSetModelFrameNum( picoModel_t *model, int frameNum ); -void PicoSetModelNumFrames( picoModel_t *model, int numFrames ); -void PicoSetModelData( picoModel_t *model, void *data ); - -void PicoSetShaderName( picoShader_t *shader, char *name ); -void PicoSetShaderMapName( picoShader_t *shader, char *mapName ); -void PicoSetShaderAmbientColor( picoShader_t *shader, picoColor_t color ); -void PicoSetShaderDiffuseColor( picoShader_t *shader, picoColor_t color ); -void PicoSetShaderSpecularColor( picoShader_t *shader, picoColor_t color ); -void PicoSetShaderTransparency( picoShader_t *shader, float value ); -void PicoSetShaderShininess( picoShader_t *shader, float value ); - -void PicoSetSurfaceData( picoSurface_t *surface, void *data ); -void PicoSetSurfaceType( picoSurface_t *surface, picoSurfaceType_t type ); -void PicoSetSurfaceName( picoSurface_t *surface, char *name ); -void PicoSetSurfaceShader( picoSurface_t *surface, picoShader_t *shader ); -void PicoSetSurfaceXYZ( picoSurface_t *surface, int num, picoVec3_t xyz ); -void PicoSetSurfaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ); -void PicoSetSurfaceST( picoSurface_t *surface, int array, int num, picoVec2_t st ); -void PicoSetSurfaceColor( picoSurface_t *surface, int array, int num, picoColor_t color ); -void PicoSetSurfaceIndex( picoSurface_t *surface, int num, picoIndex_t index ); -void PicoSetSurfaceIndexes( picoSurface_t *surface, int num, picoIndex_t *index, int count ); -void PicoSetFaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ); -void PicoSetSurfaceSpecial( picoSurface_t *surface, int num, int special ); +void PicoSetModelName( picoModel_t *model, char *name ); +void PicoSetModelFileName( picoModel_t *model, char *fileName ); +void PicoSetModelFrameNum( picoModel_t *model, int frameNum ); +void PicoSetModelNumFrames( picoModel_t *model, int numFrames ); +void PicoSetModelData( picoModel_t *model, void *data ); + +void PicoSetShaderName( picoShader_t *shader, char *name ); +void PicoSetShaderMapName( picoShader_t *shader, char *mapName ); +void PicoSetShaderAmbientColor( picoShader_t *shader, picoColor_t color ); +void PicoSetShaderDiffuseColor( picoShader_t *shader, picoColor_t color ); +void PicoSetShaderSpecularColor( picoShader_t *shader, picoColor_t color ); +void PicoSetShaderTransparency( picoShader_t *shader, float value ); +void PicoSetShaderShininess( picoShader_t *shader, float value ); + +void PicoSetSurfaceData( picoSurface_t *surface, void *data ); +void PicoSetSurfaceType( picoSurface_t *surface, picoSurfaceType_t type ); +void PicoSetSurfaceName( picoSurface_t *surface, char *name ); +void PicoSetSurfaceShader( picoSurface_t *surface, picoShader_t *shader ); +void PicoSetSurfaceXYZ( picoSurface_t *surface, int num, picoVec3_t xyz ); +void PicoSetSurfaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ); +void PicoSetSurfaceST( picoSurface_t *surface, int array, int num, picoVec2_t st ); +void PicoSetSurfaceColor( picoSurface_t *surface, int array, int num, picoColor_t color ); +void PicoSetSurfaceIndex( picoSurface_t *surface, int num, picoIndex_t index ); +void PicoSetSurfaceIndexes( picoSurface_t *surface, int num, picoIndex_t *index, int count ); +void PicoSetFaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ); +void PicoSetSurfaceSpecial( picoSurface_t *surface, int num, int special ); /* getter functions */ -char *PicoGetModelName( picoModel_t *model ); -char *PicoGetModelFileName( picoModel_t *model ); -int PicoGetModelFrameNum( picoModel_t *model ); -int PicoGetModelNumFrames( picoModel_t *model ); -void *PicoGetModelData( picoModel_t *model ); -int PicoGetModelNumShaders( picoModel_t *model ); -picoShader_t *PicoGetModelShader( picoModel_t *model, int num ); /* sea */ -int PicoGetModelNumSurfaces( picoModel_t *model ); -picoSurface_t *PicoGetModelSurface( picoModel_t *model, int num ); -int PicoGetModelTotalVertexes( picoModel_t *model ); -int PicoGetModelTotalIndexes( picoModel_t *model ); - -char *PicoGetShaderName( picoShader_t *shader ); -char *PicoGetShaderMapName( picoShader_t *shader ); -picoByte_t *PicoGetShaderAmbientColor( picoShader_t *shader ); -picoByte_t *PicoGetShaderDiffuseColor( picoShader_t *shader ); -picoByte_t *PicoGetShaderSpecularColor( picoShader_t *shader ); -float PicoGetShaderTransparency( picoShader_t *shader ); -float PicoGetShaderShininess( picoShader_t *shader ); - -void *PicoGetSurfaceData( picoSurface_t *surface ); -char *PicoGetSurfaceName( picoSurface_t *surface ); /* sea */ -picoSurfaceType_t PicoGetSurfaceType( picoSurface_t *surface ); -char *PicoGetSurfaceName( picoSurface_t *surface ); -picoShader_t *PicoGetSurfaceShader( picoSurface_t *surface ); /* sea */ - -int PicoGetSurfaceNumVertexes( picoSurface_t *surface ); -picoVec_t *PicoGetSurfaceXYZ( picoSurface_t *surface, int num ); -picoVec_t *PicoGetSurfaceNormal( picoSurface_t *surface, int num ); -picoVec_t *PicoGetSurfaceST( picoSurface_t *surface, int array, int num ); -picoByte_t *PicoGetSurfaceColor( picoSurface_t *surface, int array, int num ); -int PicoGetSurfaceNumIndexes( picoSurface_t *surface ); -picoIndex_t PicoGetSurfaceIndex( picoSurface_t *surface, int num ); -picoIndex_t *PicoGetSurfaceIndexes( picoSurface_t *surface, int num ); -picoVec_t *PicoGetFaceNormal( picoSurface_t *surface, int num ); -int PicoGetSurfaceSpecial( picoSurface_t *surface, int num ); +char *PicoGetModelName( picoModel_t *model ); +char *PicoGetModelFileName( picoModel_t *model ); +int PicoGetModelFrameNum( picoModel_t *model ); +int PicoGetModelNumFrames( picoModel_t *model ); +void *PicoGetModelData( picoModel_t *model ); +int PicoGetModelNumShaders( picoModel_t *model ); +picoShader_t *PicoGetModelShader( picoModel_t *model, int num ); /* sea */ +int PicoGetModelNumSurfaces( picoModel_t *model ); +picoSurface_t *PicoGetModelSurface( picoModel_t *model, int num ); +int PicoGetModelTotalVertexes( picoModel_t *model ); +int PicoGetModelTotalIndexes( picoModel_t *model ); + +char *PicoGetShaderName( picoShader_t *shader ); +char *PicoGetShaderMapName( picoShader_t *shader ); +picoByte_t *PicoGetShaderAmbientColor( picoShader_t *shader ); +picoByte_t *PicoGetShaderDiffuseColor( picoShader_t *shader ); +picoByte_t *PicoGetShaderSpecularColor( picoShader_t *shader ); +float PicoGetShaderTransparency( picoShader_t *shader ); +float PicoGetShaderShininess( picoShader_t *shader ); + +void *PicoGetSurfaceData( picoSurface_t *surface ); +char *PicoGetSurfaceName( picoSurface_t *surface ); /* sea */ +picoSurfaceType_t PicoGetSurfaceType( picoSurface_t *surface ); +char *PicoGetSurfaceName( picoSurface_t *surface ); +picoShader_t *PicoGetSurfaceShader( picoSurface_t *surface ); /* sea */ + +int PicoGetSurfaceNumVertexes( picoSurface_t *surface ); +picoVec_t *PicoGetSurfaceXYZ( picoSurface_t *surface, int num ); +picoVec_t *PicoGetSurfaceNormal( picoSurface_t *surface, int num ); +picoVec_t *PicoGetSurfaceST( picoSurface_t *surface, int array, int num ); +picoByte_t *PicoGetSurfaceColor( picoSurface_t *surface, int array, int num ); +int PicoGetSurfaceNumIndexes( picoSurface_t *surface ); +picoIndex_t PicoGetSurfaceIndex( picoSurface_t *surface, int num ); +picoIndex_t *PicoGetSurfaceIndexes( picoSurface_t *surface, int num ); +picoVec_t *PicoGetFaceNormal( picoSurface_t *surface, int num ); +int PicoGetSurfaceSpecial( picoSurface_t *surface, int num ); /* hashtable related functions */ typedef struct picoVertexCombinationData_s { - picoVec3_t xyz, normal; - picoVec2_t st; - picoColor_t color; + picoVec3_t xyz, normal; + picoVec2_t st; + picoColor_t color; } picoVertexCombinationData_t; typedef struct picoVertexCombinationHash_s { - picoVertexCombinationData_t vcd; - picoIndex_t index; + picoVertexCombinationData_t vcd; + picoIndex_t index; - void *data; + void *data; - struct picoVertexCombinationHash_s *next; + struct picoVertexCombinationHash_s *next; } picoVertexCombinationHash_t; -int PicoGetHashTableSize( void ); -unsigned int PicoVertexCoordGenerateHash( picoVec3_t xyz ); -picoVertexCombinationHash_t **PicoNewVertexCombinationHashTable( void ); -void PicoFreeVertexCombinationHashTable( picoVertexCombinationHash_t **hashTable ); -picoVertexCombinationHash_t *PicoFindVertexCombinationInHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color ); +int PicoGetHashTableSize( void ); +unsigned int PicoVertexCoordGenerateHash( picoVec3_t xyz ); +picoVertexCombinationHash_t **PicoNewVertexCombinationHashTable( void ); +void PicoFreeVertexCombinationHashTable( picoVertexCombinationHash_t **hashTable ); +picoVertexCombinationHash_t *PicoFindVertexCombinationInHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color ); picoVertexCombinationHash_t *PicoAddVertexCombinationToHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color, picoIndex_t index ); /* specialized functions */ -int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color ); -void PicoFixSurfaceNormals( picoSurface_t *surface ); -int PicoRemapModel( picoModel_t *model, char *remapFile ); +int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color ); +void PicoFixSurfaceNormals( picoSurface_t *surface ); +int PicoRemapModel( picoModel_t *model, char *remapFile ); void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** normals, int numSTs, picoVec2_t **st, int numColors, picoColor_t **colors, picoShader_t* shader ); diff --git a/libs/picomodel/lwo/clip.c b/libs/picomodel/lwo/clip.c index 8999f409..97f2973d 100644 --- a/libs/picomodel/lwo/clip.c +++ b/libs/picomodel/lwo/clip.c @@ -1,249 +1,271 @@ /* -====================================================================== -clip.c + ====================================================================== + clip.c -Functions for LWO2 image references. + Functions for LWO2 image references. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" /* -====================================================================== -lwFreeClip() - -Free memory used by an lwClip. -====================================================================== */ - -void lwFreeClip( lwClip *clip ) -{ - if ( clip ) { - lwListFree( (void*) clip->ifilter, lwFreePlugin ); - lwListFree( (void*) clip->pfilter, lwFreePlugin ); - _pico_free( clip ); - } + ====================================================================== + lwFreeClip() + + Free memory used by an lwClip. + ====================================================================== */ + +void lwFreeClip( lwClip *clip ){ + if ( clip ) { + lwListFree( (void*) clip->ifilter, lwFreePlugin ); + lwListFree( (void*) clip->pfilter, lwFreePlugin ); + _pico_free( clip ); + } } /* -====================================================================== -lwGetClip() + ====================================================================== + lwGetClip() -Read image references from a CLIP chunk in an LWO2 file. -====================================================================== */ - -lwClip *lwGetClip( picoMemStream_t *fp, int cksize ) -{ - lwClip *clip; - lwPlugin *filt; - unsigned int id; - unsigned short sz; - int pos, rlen; - - - /* allocate the Clip structure */ - - clip = _pico_calloc( 1, sizeof( lwClip )); - if ( !clip ) goto Fail; - - clip->contrast.val = 1.0f; - clip->brightness.val = 1.0f; - clip->saturation.val = 1.0f; - clip->gamma.val = 1.0f; - - /* remember where we started */ - - set_flen( 0 ); - pos = _pico_memstream_tell( fp ); - - /* index */ - - clip->index = getI4( fp ); - - /* first subchunk header */ - - clip->type = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) goto Fail; - - sz += sz & 1; - set_flen( 0 ); - - switch ( clip->type ) { - case ID_STIL: - clip->source.still.name = getS0( fp ); - break; - - case ID_ISEQ: - clip->source.seq.digits = getU1( fp ); - clip->source.seq.flags = getU1( fp ); - clip->source.seq.offset = getI2( fp ); - getU2( fp ); /* not sure what this is yet */ - clip->source.seq.start = getI2( fp ); - clip->source.seq.end = getI2( fp ); - clip->source.seq.prefix = getS0( fp ); - clip->source.seq.suffix = getS0( fp ); - break; - - case ID_ANIM: - clip->source.anim.name = getS0( fp ); - clip->source.anim.server = getS0( fp ); - rlen = get_flen(); - clip->source.anim.data = getbytes( fp, sz - rlen ); - break; - - case ID_XREF: - clip->source.xref.index = getI4( fp ); - clip->source.xref.string = getS0( fp ); - break; - - case ID_STCC: - clip->source.cycle.lo = getI2( fp ); - clip->source.cycle.hi = getI2( fp ); - clip->source.cycle.name = getS0( fp ); - break; - - default: - break; - } - - /* error while reading current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) goto Fail; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the CLIP chunk? */ - - rlen = _pico_memstream_tell( fp ) - pos; - if ( cksize < rlen ) goto Fail; - if ( cksize == rlen ) - return clip; - - /* process subchunks as they're encountered */ - - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) goto Fail; - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_TIME: - clip->start_time = getF4( fp ); - clip->duration = getF4( fp ); - clip->frame_rate = getF4( fp ); - break; - - case ID_CONT: - clip->contrast.val = getF4( fp ); - clip->contrast.eindex = getVX( fp ); - break; - - case ID_BRIT: - clip->brightness.val = getF4( fp ); - clip->brightness.eindex = getVX( fp ); - break; - - case ID_SATR: - clip->saturation.val = getF4( fp ); - clip->saturation.eindex = getVX( fp ); - break; - - case ID_HUE: - clip->hue.val = getF4( fp ); - clip->hue.eindex = getVX( fp ); - break; - - case ID_GAMM: - clip->gamma.val = getF4( fp ); - clip->gamma.eindex = getVX( fp ); - break; - - case ID_NEGA: - clip->negative = getU2( fp ); - break; - - case ID_IFLT: - case ID_PFLT: - filt = _pico_calloc( 1, sizeof( lwPlugin )); - if ( !filt ) goto Fail; - - filt->name = getS0( fp ); - filt->flags = getU2( fp ); - rlen = get_flen(); - filt->data = getbytes( fp, sz - rlen ); - - if ( id == ID_IFLT ) { - lwListAdd( &clip->ifilter, filt ); - clip->nifilters++; - } - else { - lwListAdd( &clip->pfilter, filt ); - clip->npfilters++; - } - break; - - default: - break; - } - - /* error while reading current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) goto Fail; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the CLIP chunk? */ - - rlen = _pico_memstream_tell( fp ) - pos; - if ( cksize < rlen ) goto Fail; - if ( cksize == rlen ) break; - - /* get the next chunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) goto Fail; - } - - return clip; + Read image references from a CLIP chunk in an LWO2 file. + ====================================================================== */ + +lwClip *lwGetClip( picoMemStream_t *fp, int cksize ){ + lwClip *clip; + lwPlugin *filt; + unsigned int id; + unsigned short sz; + int pos, rlen; + + + /* allocate the Clip structure */ + + clip = _pico_calloc( 1, sizeof( lwClip ) ); + if ( !clip ) { + goto Fail; + } + + clip->contrast.val = 1.0f; + clip->brightness.val = 1.0f; + clip->saturation.val = 1.0f; + clip->gamma.val = 1.0f; + + /* remember where we started */ + + set_flen( 0 ); + pos = _pico_memstream_tell( fp ); + + /* index */ + + clip->index = getI4( fp ); + + /* first subchunk header */ + + clip->type = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + sz += sz & 1; + set_flen( 0 ); + + switch ( clip->type ) { + case ID_STIL: + clip->source.still.name = getS0( fp ); + break; + + case ID_ISEQ: + clip->source.seq.digits = getU1( fp ); + clip->source.seq.flags = getU1( fp ); + clip->source.seq.offset = getI2( fp ); + getU2( fp ); /* not sure what this is yet */ + clip->source.seq.start = getI2( fp ); + clip->source.seq.end = getI2( fp ); + clip->source.seq.prefix = getS0( fp ); + clip->source.seq.suffix = getS0( fp ); + break; + + case ID_ANIM: + clip->source.anim.name = getS0( fp ); + clip->source.anim.server = getS0( fp ); + rlen = get_flen(); + clip->source.anim.data = getbytes( fp, sz - rlen ); + break; + + case ID_XREF: + clip->source.xref.index = getI4( fp ); + clip->source.xref.string = getS0( fp ); + break; + + case ID_STCC: + clip->source.cycle.lo = getI2( fp ); + clip->source.cycle.hi = getI2( fp ); + clip->source.cycle.name = getS0( fp ); + break; + + default: + break; + } + + /* error while reading current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + goto Fail; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the CLIP chunk? */ + + rlen = _pico_memstream_tell( fp ) - pos; + if ( cksize < rlen ) { + goto Fail; + } + if ( cksize == rlen ) { + return clip; + } + + /* process subchunks as they're encountered */ + + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_TIME: + clip->start_time = getF4( fp ); + clip->duration = getF4( fp ); + clip->frame_rate = getF4( fp ); + break; + + case ID_CONT: + clip->contrast.val = getF4( fp ); + clip->contrast.eindex = getVX( fp ); + break; + + case ID_BRIT: + clip->brightness.val = getF4( fp ); + clip->brightness.eindex = getVX( fp ); + break; + + case ID_SATR: + clip->saturation.val = getF4( fp ); + clip->saturation.eindex = getVX( fp ); + break; + + case ID_HUE: + clip->hue.val = getF4( fp ); + clip->hue.eindex = getVX( fp ); + break; + + case ID_GAMM: + clip->gamma.val = getF4( fp ); + clip->gamma.eindex = getVX( fp ); + break; + + case ID_NEGA: + clip->negative = getU2( fp ); + break; + + case ID_IFLT: + case ID_PFLT: + filt = _pico_calloc( 1, sizeof( lwPlugin ) ); + if ( !filt ) { + goto Fail; + } + + filt->name = getS0( fp ); + filt->flags = getU2( fp ); + rlen = get_flen(); + filt->data = getbytes( fp, sz - rlen ); + + if ( id == ID_IFLT ) { + lwListAdd( &clip->ifilter, filt ); + clip->nifilters++; + } + else { + lwListAdd( &clip->pfilter, filt ); + clip->npfilters++; + } + break; + + default: + break; + } + + /* error while reading current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + goto Fail; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the CLIP chunk? */ + + rlen = _pico_memstream_tell( fp ) - pos; + if ( cksize < rlen ) { + goto Fail; + } + if ( cksize == rlen ) { + break; + } + + /* get the next chunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + goto Fail; + } + } + + return clip; Fail: - lwFreeClip( clip ); - return NULL; + lwFreeClip( clip ); + return NULL; } /* -====================================================================== -lwFindClip() - -Returns an lwClip pointer, given a clip index. -====================================================================== */ - -lwClip *lwFindClip( lwClip *list, int index ) -{ - lwClip *clip; - - clip = list; - while ( clip ) { - if ( clip->index == index ) break; - clip = clip->next; - } - return clip; + ====================================================================== + lwFindClip() + + Returns an lwClip pointer, given a clip index. + ====================================================================== */ + +lwClip *lwFindClip( lwClip *list, int index ){ + lwClip *clip; + + clip = list; + while ( clip ) { + if ( clip->index == index ) { + break; + } + clip = clip->next; + } + return clip; } diff --git a/libs/picomodel/lwo/envelope.c b/libs/picomodel/lwo/envelope.c index e3e281ff..7ad200c2 100644 --- a/libs/picomodel/lwo/envelope.c +++ b/libs/picomodel/lwo/envelope.c @@ -1,600 +1,641 @@ /* -====================================================================== -envelope.c + ====================================================================== + envelope.c -Envelope functions for an LWO2 reader. + Envelope functions for an LWO2 reader. -Ernie Wright 16 Nov 00 -====================================================================== */ + Ernie Wright 16 Nov 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" /* -====================================================================== -lwFreeEnvelope() - -Free the memory used by an lwEnvelope. -====================================================================== */ - -void lwFreeEnvelope( lwEnvelope *env ) -{ - if ( env ) { - if ( env->name ) _pico_free( env->name ); - lwListFree( env->key, _pico_free ); - lwListFree( env->cfilter, lwFreePlugin ); - _pico_free( env ); - } + ====================================================================== + lwFreeEnvelope() + + Free the memory used by an lwEnvelope. + ====================================================================== */ + +void lwFreeEnvelope( lwEnvelope *env ){ + if ( env ) { + if ( env->name ) { + _pico_free( env->name ); + } + lwListFree( env->key, _pico_free ); + lwListFree( env->cfilter, lwFreePlugin ); + _pico_free( env ); + } } -static int compare_keys( lwKey *k1, lwKey *k2 ) -{ - return k1->time > k2->time ? 1 : k1->time < k2->time ? -1 : 0; +static int compare_keys( lwKey *k1, lwKey *k2 ){ + return k1->time > k2->time ? 1 : k1->time < k2->time ? -1 : 0; } /* -====================================================================== -lwGetEnvelope() - -Read an ENVL chunk from an LWO2 file. -====================================================================== */ - -lwEnvelope *lwGetEnvelope( picoMemStream_t *fp, int cksize ) -{ - lwEnvelope *env; - lwKey *key; - lwPlugin *plug; - unsigned int id; - unsigned short sz; - float f[ 4 ]; - int i, nparams, pos, rlen; - - - /* allocate the Envelope structure */ - - env = _pico_calloc( 1, sizeof( lwEnvelope )); - if ( !env ) goto Fail; - - /* remember where we started */ - - set_flen( 0 ); - pos = _pico_memstream_tell( fp ); - - /* index */ - - env->index = getVX( fp ); - - /* first subchunk header */ - - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) goto Fail; - - /* process subchunks as they're encountered */ - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_TYPE: - env->type = getU2( fp ); - break; - - case ID_NAME: - env->name = getS0( fp ); - break; - - case ID_PRE: - env->behavior[ 0 ] = getU2( fp ); - break; - - case ID_POST: - env->behavior[ 1 ] = getU2( fp ); - break; - - case ID_KEY: - key = _pico_calloc( 1, sizeof( lwKey )); - if ( !key ) goto Fail; - key->time = getF4( fp ); - key->value = getF4( fp ); - lwListInsert( &env->key, key, compare_keys ); - env->nkeys++; - break; - - case ID_SPAN: - if ( !key ) goto Fail; - key->shape = getU4( fp ); - - nparams = ( sz - 4 ) / 4; - if ( nparams > 4 ) nparams = 4; - for ( i = 0; i < nparams; i++ ) - f[ i ] = getF4( fp ); - - switch ( key->shape ) { - case ID_TCB: - key->tension = f[ 0 ]; - key->continuity = f[ 1 ]; - key->bias = f[ 2 ]; - break; - - case ID_BEZI: - case ID_HERM: - case ID_BEZ2: - for ( i = 0; i < nparams; i++ ) - key->param[ i ] = f[ i ]; - break; - } - break; - - case ID_CHAN: - plug = _pico_calloc( 1, sizeof( lwPlugin )); - if ( !plug ) goto Fail; - - plug->name = getS0( fp ); - plug->flags = getU2( fp ); - plug->data = getbytes( fp, sz - get_flen() ); - - lwListAdd( &env->cfilter, plug ); - env->ncfilters++; - break; - - default: - break; - } - - /* error while reading current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) goto Fail; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the ENVL chunk? */ - - rlen = _pico_memstream_tell( fp ) - pos; - if ( cksize < rlen ) goto Fail; - if ( cksize == rlen ) break; - - /* get the next subchunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) goto Fail; - } - - return env; + ====================================================================== + lwGetEnvelope() + + Read an ENVL chunk from an LWO2 file. + ====================================================================== */ + +lwEnvelope *lwGetEnvelope( picoMemStream_t *fp, int cksize ){ + lwEnvelope *env; + lwKey *key; + lwPlugin *plug; + unsigned int id; + unsigned short sz; + float f[ 4 ]; + int i, nparams, pos, rlen; + + + /* allocate the Envelope structure */ + + env = _pico_calloc( 1, sizeof( lwEnvelope ) ); + if ( !env ) { + goto Fail; + } + + /* remember where we started */ + + set_flen( 0 ); + pos = _pico_memstream_tell( fp ); + + /* index */ + + env->index = getVX( fp ); + + /* first subchunk header */ + + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + /* process subchunks as they're encountered */ + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_TYPE: + env->type = getU2( fp ); + break; + + case ID_NAME: + env->name = getS0( fp ); + break; + + case ID_PRE: + env->behavior[ 0 ] = getU2( fp ); + break; + + case ID_POST: + env->behavior[ 1 ] = getU2( fp ); + break; + + case ID_KEY: + key = _pico_calloc( 1, sizeof( lwKey ) ); + if ( !key ) { + goto Fail; + } + key->time = getF4( fp ); + key->value = getF4( fp ); + lwListInsert( &env->key, key, compare_keys ); + env->nkeys++; + break; + + case ID_SPAN: + if ( !key ) { + goto Fail; + } + key->shape = getU4( fp ); + + nparams = ( sz - 4 ) / 4; + if ( nparams > 4 ) { + nparams = 4; + } + for ( i = 0; i < nparams; i++ ) + f[ i ] = getF4( fp ); + + switch ( key->shape ) { + case ID_TCB: + key->tension = f[ 0 ]; + key->continuity = f[ 1 ]; + key->bias = f[ 2 ]; + break; + + case ID_BEZI: + case ID_HERM: + case ID_BEZ2: + for ( i = 0; i < nparams; i++ ) + key->param[ i ] = f[ i ]; + break; + } + break; + + case ID_CHAN: + plug = _pico_calloc( 1, sizeof( lwPlugin ) ); + if ( !plug ) { + goto Fail; + } + + plug->name = getS0( fp ); + plug->flags = getU2( fp ); + plug->data = getbytes( fp, sz - get_flen() ); + + lwListAdd( &env->cfilter, plug ); + env->ncfilters++; + break; + + default: + break; + } + + /* error while reading current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + goto Fail; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the ENVL chunk? */ + + rlen = _pico_memstream_tell( fp ) - pos; + if ( cksize < rlen ) { + goto Fail; + } + if ( cksize == rlen ) { + break; + } + + /* get the next subchunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + goto Fail; + } + } + + return env; Fail: - lwFreeEnvelope( env ); - return NULL; + lwFreeEnvelope( env ); + return NULL; } /* -====================================================================== -lwFindEnvelope() - -Returns an lwEnvelope pointer, given an envelope index. -====================================================================== */ - -lwEnvelope *lwFindEnvelope( lwEnvelope *list, int index ) -{ - lwEnvelope *env; - - env = list; - while ( env ) { - if ( env->index == index ) break; - env = env->next; - } - return env; + ====================================================================== + lwFindEnvelope() + + Returns an lwEnvelope pointer, given an envelope index. + ====================================================================== */ + +lwEnvelope *lwFindEnvelope( lwEnvelope *list, int index ){ + lwEnvelope *env; + + env = list; + while ( env ) { + if ( env->index == index ) { + break; + } + env = env->next; + } + return env; } /* -====================================================================== -range() + ====================================================================== + range() -Given the value v of a periodic function, returns the equivalent value -v2 in the principal interval [lo, hi]. If i isn't NULL, it receives -the number of wavelengths between v and v2. + Given the value v of a periodic function, returns the equivalent value + v2 in the principal interval [lo, hi]. If i isn't NULL, it receives + the number of wavelengths between v and v2. v2 = v - i * (hi - lo) -For example, range( 3 pi, 0, 2 pi, i ) returns pi, with i = 1. -====================================================================== */ + For example, range( 3 pi, 0, 2 pi, i ) returns pi, with i = 1. + ====================================================================== */ -static float range( float v, float lo, float hi, int *i ) -{ - float v2, r = hi - lo; +static float range( float v, float lo, float hi, int *i ){ + float v2, r = hi - lo; - if ( r == 0.0 ) { - if ( i ) *i = 0; - return lo; - } + if ( r == 0.0 ) { + if ( i ) { + *i = 0; + } + return lo; + } - v2 = lo + v - r * ( float ) floor(( double ) v / r ); - if ( i ) *i = -( int )(( v2 - v ) / r + ( v2 > v ? 0.5 : -0.5 )); + v2 = lo + v - r * ( float ) floor( ( double ) v / r ); + if ( i ) { + *i = -( int )( ( v2 - v ) / r + ( v2 > v ? 0.5 : -0.5 ) ); + } - return v2; + return v2; } /* -====================================================================== -hermite() + ====================================================================== + hermite() -Calculate the Hermite coefficients. -====================================================================== */ + Calculate the Hermite coefficients. + ====================================================================== */ -static void hermite( float t, float *h1, float *h2, float *h3, float *h4 ) -{ - float t2, t3; +static void hermite( float t, float *h1, float *h2, float *h3, float *h4 ){ + float t2, t3; - t2 = t * t; - t3 = t * t2; + t2 = t * t; + t3 = t * t2; - *h2 = 3.0f * t2 - t3 - t3; - *h1 = 1.0f - *h2; - *h4 = t3 - t2; - *h3 = *h4 - t2 + t; + *h2 = 3.0f * t2 - t3 - t3; + *h1 = 1.0f - *h2; + *h4 = t3 - t2; + *h3 = *h4 - t2 + t; } /* -====================================================================== -bezier() + ====================================================================== + bezier() -Interpolate the value of a 1D Bezier curve. -====================================================================== */ + Interpolate the value of a 1D Bezier curve. + ====================================================================== */ -static float bezier( float x0, float x1, float x2, float x3, float t ) -{ - float a, b, c, t2, t3; +static float bezier( float x0, float x1, float x2, float x3, float t ){ + float a, b, c, t2, t3; - t2 = t * t; - t3 = t2 * t; + t2 = t * t; + t3 = t2 * t; - c = 3.0f * ( x1 - x0 ); - b = 3.0f * ( x2 - x1 ) - c; - a = x3 - x0 - c - b; + c = 3.0f * ( x1 - x0 ); + b = 3.0f * ( x2 - x1 ) - c; + a = x3 - x0 - c - b; - return a * t3 + b * t2 + c * t + x0; + return a * t3 + b * t2 + c * t + x0; } /* -====================================================================== -bez2_time() + ====================================================================== + bez2_time() -Find the t for which bezier() returns the input time. The handle -endpoints of a BEZ2 curve represent the control points, and these have -(time, value) coordinates, so time is used as both a coordinate and a -parameter for this curve type. -====================================================================== */ + Find the t for which bezier() returns the input time. The handle + endpoints of a BEZ2 curve represent the control points, and these have + (time, value) coordinates, so time is used as both a coordinate and a + parameter for this curve type. + ====================================================================== */ static float bez2_time( float x0, float x1, float x2, float x3, float time, - float *t0, float *t1 ) -{ - float v, t; - - t = *t0 + ( *t1 - *t0 ) * 0.5f; - v = bezier( x0, x1, x2, x3, t ); - if ( fabs( time - v ) > .0001f ) { - if ( v > time ) - *t1 = t; - else - *t0 = t; - return bez2_time( x0, x1, x2, x3, time, t0, t1 ); - } - else - return t; + float *t0, float *t1 ){ + float v, t; + + t = *t0 + ( *t1 - *t0 ) * 0.5f; + v = bezier( x0, x1, x2, x3, t ); + if ( fabs( time - v ) > .0001f ) { + if ( v > time ) { + *t1 = t; + } + else{ + *t0 = t; + } + return bez2_time( x0, x1, x2, x3, time, t0, t1 ); + } + else{ + return t; + } } /* -====================================================================== -bez2() + ====================================================================== + bez2() -Interpolate the value of a BEZ2 curve. -====================================================================== */ + Interpolate the value of a BEZ2 curve. + ====================================================================== */ -static float bez2( lwKey *key0, lwKey *key1, float time ) -{ - float x, y, t, t0 = 0.0f, t1 = 1.0f; +static float bez2( lwKey *key0, lwKey *key1, float time ){ + float x, y, t, t0 = 0.0f, t1 = 1.0f; - if ( key0->shape == ID_BEZ2 ) - x = key0->time + key0->param[ 2 ]; - else - x = key0->time + ( key1->time - key0->time ) / 3.0f; + if ( key0->shape == ID_BEZ2 ) { + x = key0->time + key0->param[ 2 ]; + } + else{ + x = key0->time + ( key1->time - key0->time ) / 3.0f; + } - t = bez2_time( key0->time, x, key1->time + key1->param[ 0 ], key1->time, - time, &t0, &t1 ); + t = bez2_time( key0->time, x, key1->time + key1->param[ 0 ], key1->time, + time, &t0, &t1 ); - if ( key0->shape == ID_BEZ2 ) - y = key0->value + key0->param[ 3 ]; - else - y = key0->value + key0->param[ 1 ] / 3.0f; + if ( key0->shape == ID_BEZ2 ) { + y = key0->value + key0->param[ 3 ]; + } + else{ + y = key0->value + key0->param[ 1 ] / 3.0f; + } - return bezier( key0->value, y, key1->param[ 1 ] + key1->value, key1->value, t ); + return bezier( key0->value, y, key1->param[ 1 ] + key1->value, key1->value, t ); } /* -====================================================================== -outgoing() - -Return the outgoing tangent to the curve at key0. The value returned -for the BEZ2 case is used when extrapolating a linear pre behavior and -when interpolating a non-BEZ2 span. -====================================================================== */ - -static float outgoing( lwKey *key0, lwKey *key1 ) -{ - float a, b, d, t, out; - - switch ( key0->shape ) - { - case ID_TCB: - a = ( 1.0f - key0->tension ) - * ( 1.0f + key0->continuity ) - * ( 1.0f + key0->bias ); - b = ( 1.0f - key0->tension ) - * ( 1.0f - key0->continuity ) - * ( 1.0f - key0->bias ); - d = key1->value - key0->value; - - if ( key0->prev ) { - t = ( key1->time - key0->time ) / ( key1->time - key0->prev->time ); - out = t * ( a * ( key0->value - key0->prev->value ) + b * d ); - } - else - out = b * d; - break; - - case ID_LINE: - d = key1->value - key0->value; - if ( key0->prev ) { - t = ( key1->time - key0->time ) / ( key1->time - key0->prev->time ); - out = t * ( key0->value - key0->prev->value + d ); - } - else - out = d; - break; - - case ID_BEZI: - case ID_HERM: - out = key0->param[ 1 ]; - if ( key0->prev ) - out *= ( key1->time - key0->time ) / ( key1->time - key0->prev->time ); - break; - - case ID_BEZ2: - out = key0->param[ 3 ] * ( key1->time - key0->time ); - if ( fabs( key0->param[ 2 ] ) > 1e-5f ) - out /= key0->param[ 2 ]; - else - out *= 1e5f; - break; - - case ID_STEP: - default: - out = 0.0f; - break; - } - - return out; + ====================================================================== + outgoing() + + Return the outgoing tangent to the curve at key0. The value returned + for the BEZ2 case is used when extrapolating a linear pre behavior and + when interpolating a non-BEZ2 span. + ====================================================================== */ + +static float outgoing( lwKey *key0, lwKey *key1 ){ + float a, b, d, t, out; + + switch ( key0->shape ) + { + case ID_TCB: + a = ( 1.0f - key0->tension ) + * ( 1.0f + key0->continuity ) + * ( 1.0f + key0->bias ); + b = ( 1.0f - key0->tension ) + * ( 1.0f - key0->continuity ) + * ( 1.0f - key0->bias ); + d = key1->value - key0->value; + + if ( key0->prev ) { + t = ( key1->time - key0->time ) / ( key1->time - key0->prev->time ); + out = t * ( a * ( key0->value - key0->prev->value ) + b * d ); + } + else{ + out = b * d; + } + break; + + case ID_LINE: + d = key1->value - key0->value; + if ( key0->prev ) { + t = ( key1->time - key0->time ) / ( key1->time - key0->prev->time ); + out = t * ( key0->value - key0->prev->value + d ); + } + else{ + out = d; + } + break; + + case ID_BEZI: + case ID_HERM: + out = key0->param[ 1 ]; + if ( key0->prev ) { + out *= ( key1->time - key0->time ) / ( key1->time - key0->prev->time ); + } + break; + + case ID_BEZ2: + out = key0->param[ 3 ] * ( key1->time - key0->time ); + if ( fabs( key0->param[ 2 ] ) > 1e-5f ) { + out /= key0->param[ 2 ]; + } + else{ + out *= 1e5f; + } + break; + + case ID_STEP: + default: + out = 0.0f; + break; + } + + return out; } /* -====================================================================== -incoming() - -Return the incoming tangent to the curve at key1. The value returned -for the BEZ2 case is used when extrapolating a linear post behavior. -====================================================================== */ - -static float incoming( lwKey *key0, lwKey *key1 ) -{ - float a, b, d, t, in; - - switch ( key1->shape ) - { - case ID_LINE: - d = key1->value - key0->value; - if ( key1->next ) { - t = ( key1->time - key0->time ) / ( key1->next->time - key0->time ); - in = t * ( key1->next->value - key1->value + d ); - } - else - in = d; - break; - - case ID_TCB: - a = ( 1.0f - key1->tension ) - * ( 1.0f - key1->continuity ) - * ( 1.0f + key1->bias ); - b = ( 1.0f - key1->tension ) - * ( 1.0f + key1->continuity ) - * ( 1.0f - key1->bias ); - d = key1->value - key0->value; - - if ( key1->next ) { - t = ( key1->time - key0->time ) / ( key1->next->time - key0->time ); - in = t * ( b * ( key1->next->value - key1->value ) + a * d ); - } - else - in = a * d; - break; - - case ID_BEZI: - case ID_HERM: - in = key1->param[ 0 ]; - if ( key1->next ) - in *= ( key1->time - key0->time ) / ( key1->next->time - key0->time ); - break; - return in; - - case ID_BEZ2: - in = key1->param[ 1 ] * ( key1->time - key0->time ); - if ( fabs( key1->param[ 0 ] ) > 1e-5f ) - in /= key1->param[ 0 ]; - else - in *= 1e5f; - break; - - case ID_STEP: - default: - in = 0.0f; - break; - } - - return in; + ====================================================================== + incoming() + + Return the incoming tangent to the curve at key1. The value returned + for the BEZ2 case is used when extrapolating a linear post behavior. + ====================================================================== */ + +static float incoming( lwKey *key0, lwKey *key1 ){ + float a, b, d, t, in; + + switch ( key1->shape ) + { + case ID_LINE: + d = key1->value - key0->value; + if ( key1->next ) { + t = ( key1->time - key0->time ) / ( key1->next->time - key0->time ); + in = t * ( key1->next->value - key1->value + d ); + } + else{ + in = d; + } + break; + + case ID_TCB: + a = ( 1.0f - key1->tension ) + * ( 1.0f - key1->continuity ) + * ( 1.0f + key1->bias ); + b = ( 1.0f - key1->tension ) + * ( 1.0f + key1->continuity ) + * ( 1.0f - key1->bias ); + d = key1->value - key0->value; + + if ( key1->next ) { + t = ( key1->time - key0->time ) / ( key1->next->time - key0->time ); + in = t * ( b * ( key1->next->value - key1->value ) + a * d ); + } + else{ + in = a * d; + } + break; + + case ID_BEZI: + case ID_HERM: + in = key1->param[ 0 ]; + if ( key1->next ) { + in *= ( key1->time - key0->time ) / ( key1->next->time - key0->time ); + } + break; + return in; + + case ID_BEZ2: + in = key1->param[ 1 ] * ( key1->time - key0->time ); + if ( fabs( key1->param[ 0 ] ) > 1e-5f ) { + in /= key1->param[ 0 ]; + } + else{ + in *= 1e5f; + } + break; + + case ID_STEP: + default: + in = 0.0f; + break; + } + + return in; } /* -====================================================================== -evalEnvelope() - -Given a list of keys and a time, returns the interpolated value of the -envelope at that time. -====================================================================== */ - -float evalEnvelope( lwEnvelope *env, float time ) -{ - lwKey *key0, *key1, *skey, *ekey; - float t, h1, h2, h3, h4, in, out, offset = 0.0f; - int noff; - - - /* if there's no key, the value is 0 */ - - if ( env->nkeys == 0 ) return 0.0f; - - /* if there's only one key, the value is constant */ - - if ( env->nkeys == 1 ) - return env->key->value; + ====================================================================== + evalEnvelope() - /* find the first and last keys */ + Given a list of keys and a time, returns the interpolated value of the + envelope at that time. + ====================================================================== */ - skey = ekey = env->key; - while ( ekey->next ) ekey = ekey->next; +float evalEnvelope( lwEnvelope *env, float time ){ + lwKey *key0, *key1, *skey, *ekey; + float t, h1, h2, h3, h4, in, out, offset = 0.0f; + int noff; + + + /* if there's no key, the value is 0 */ - /* use pre-behavior if time is before first key time */ + if ( env->nkeys == 0 ) { + return 0.0f; + } - if ( time < skey->time ) { - switch ( env->behavior[ 0 ] ) - { - case BEH_RESET: - return 0.0f; + /* if there's only one key, the value is constant */ - case BEH_CONSTANT: - return skey->value; + if ( env->nkeys == 1 ) { + return env->key->value; + } - case BEH_REPEAT: - time = range( time, skey->time, ekey->time, NULL ); - break; + /* find the first and last keys */ - case BEH_OSCILLATE: - time = range( time, skey->time, ekey->time, &noff ); - if ( noff % 2 ) - time = ekey->time - skey->time - time; - break; + skey = ekey = env->key; + while ( ekey->next ) ekey = ekey->next; - case BEH_OFFSET: - time = range( time, skey->time, ekey->time, &noff ); - offset = noff * ( ekey->value - skey->value ); - break; + /* use pre-behavior if time is before first key time */ + + if ( time < skey->time ) { + switch ( env->behavior[ 0 ] ) + { + case BEH_RESET: + return 0.0f; - case BEH_LINEAR: - out = outgoing( skey, skey->next ) - / ( skey->next->time - skey->time ); - return out * ( time - skey->time ) + skey->value; - } - } + case BEH_CONSTANT: + return skey->value; - /* use post-behavior if time is after last key time */ + case BEH_REPEAT: + time = range( time, skey->time, ekey->time, NULL ); + break; - else if ( time > ekey->time ) { - switch ( env->behavior[ 1 ] ) - { - case BEH_RESET: - return 0.0f; + case BEH_OSCILLATE: + time = range( time, skey->time, ekey->time, &noff ); + if ( noff % 2 ) { + time = ekey->time - skey->time - time; + } + break; - case BEH_CONSTANT: - return ekey->value; + case BEH_OFFSET: + time = range( time, skey->time, ekey->time, &noff ); + offset = noff * ( ekey->value - skey->value ); + break; - case BEH_REPEAT: - time = range( time, skey->time, ekey->time, NULL ); - break; + case BEH_LINEAR: + out = outgoing( skey, skey->next ) + / ( skey->next->time - skey->time ); + return out * ( time - skey->time ) + skey->value; + } + } - case BEH_OSCILLATE: - time = range( time, skey->time, ekey->time, &noff ); - if ( noff % 2 ) - time = ekey->time - skey->time - time; - break; + /* use post-behavior if time is after last key time */ - case BEH_OFFSET: - time = range( time, skey->time, ekey->time, &noff ); - offset = noff * ( ekey->value - skey->value ); - break; + else if ( time > ekey->time ) { + switch ( env->behavior[ 1 ] ) + { + case BEH_RESET: + return 0.0f; - case BEH_LINEAR: - in = incoming( ekey->prev, ekey ) - / ( ekey->time - ekey->prev->time ); - return in * ( time - ekey->time ) + ekey->value; - } - } + case BEH_CONSTANT: + return ekey->value; - /* get the endpoints of the interval being evaluated */ + case BEH_REPEAT: + time = range( time, skey->time, ekey->time, NULL ); + break; - key0 = env->key; - while ( time > key0->next->time ) - key0 = key0->next; - key1 = key0->next; + case BEH_OSCILLATE: + time = range( time, skey->time, ekey->time, &noff ); + if ( noff % 2 ) { + time = ekey->time - skey->time - time; + } + break; - /* check for singularities first */ + case BEH_OFFSET: + time = range( time, skey->time, ekey->time, &noff ); + offset = noff * ( ekey->value - skey->value ); + break; - if ( time == key0->time ) - return key0->value + offset; - else if ( time == key1->time ) - return key1->value + offset; + case BEH_LINEAR: + in = incoming( ekey->prev, ekey ) + / ( ekey->time - ekey->prev->time ); + return in * ( time - ekey->time ) + ekey->value; + } + } - /* get interval length, time in [0, 1] */ + /* get the endpoints of the interval being evaluated */ - t = ( time - key0->time ) / ( key1->time - key0->time ); + key0 = env->key; + while ( time > key0->next->time ) + key0 = key0->next; + key1 = key0->next; - /* interpolate */ + /* check for singularities first */ - switch ( key1->shape ) - { - case ID_TCB: - case ID_BEZI: - case ID_HERM: - out = outgoing( key0, key1 ); - in = incoming( key0, key1 ); - hermite( t, &h1, &h2, &h3, &h4 ); - return h1 * key0->value + h2 * key1->value + h3 * out + h4 * in + offset; - - case ID_BEZ2: - return bez2( key0, key1, time ) + offset; - - case ID_LINE: - return key0->value + t * ( key1->value - key0->value ) + offset; - - case ID_STEP: - return key0->value + offset; - - default: - return offset; - } + if ( time == key0->time ) { + return key0->value + offset; + } + else if ( time == key1->time ) { + return key1->value + offset; + } + + /* get interval length, time in [0, 1] */ + + t = ( time - key0->time ) / ( key1->time - key0->time ); + + /* interpolate */ + + switch ( key1->shape ) + { + case ID_TCB: + case ID_BEZI: + case ID_HERM: + out = outgoing( key0, key1 ); + in = incoming( key0, key1 ); + hermite( t, &h1, &h2, &h3, &h4 ); + return h1 * key0->value + h2 * key1->value + h3 * out + h4 * in + offset; + + case ID_BEZ2: + return bez2( key0, key1, time ) + offset; + + case ID_LINE: + return key0->value + t * ( key1->value - key0->value ) + offset; + + case ID_STEP: + return key0->value + offset; + + default: + return offset; + } } diff --git a/libs/picomodel/lwo/list.c b/libs/picomodel/lwo/list.c index d337296c..d57547db 100644 --- a/libs/picomodel/lwo/list.c +++ b/libs/picomodel/lwo/list.c @@ -1,101 +1,100 @@ /* -====================================================================== -list.c + ====================================================================== + list.c -Generic linked list operations. + Generic linked list operations. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" /* -====================================================================== -lwListFree() - -Free the items in a list. -====================================================================== */ - -void lwListFree( void *list, void ( *freeNode )( void * )) -{ - lwNode *node, *next; - - node = ( lwNode * ) list; - while ( node ) { - next = node->next; - freeNode( node ); - node = next; - } + ====================================================================== + lwListFree() + + Free the items in a list. + ====================================================================== */ + +void lwListFree( void *list, void ( *freeNode )( void * ) ){ + lwNode *node, *next; + + node = ( lwNode * ) list; + while ( node ) { + next = node->next; + freeNode( node ); + node = next; + } } /* -====================================================================== -lwListAdd() - -Append a node to a list. -====================================================================== */ - -void lwListAdd( void **list, void *node ) -{ - lwNode *head, *tail; - - head = *(( lwNode ** ) list ); - if ( !head ) { - *list = node; - return; - } - while ( head ) { - tail = head; - head = head->next; - } - tail->next = ( lwNode * ) node; - (( lwNode * ) node )->prev = tail; + ====================================================================== + lwListAdd() + + Append a node to a list. + ====================================================================== */ + +void lwListAdd( void **list, void *node ){ + lwNode *head, *tail; + + head = *( ( lwNode ** ) list ); + if ( !head ) { + *list = node; + return; + } + while ( head ) { + tail = head; + head = head->next; + } + tail->next = ( lwNode * ) node; + ( ( lwNode * ) node )->prev = tail; } /* -====================================================================== -lwListInsert() - -Insert a node into a list in sorted order. -====================================================================== */ - -void lwListInsert( void **vlist, void *vitem, int ( *compare )( void *, void * )) -{ - lwNode **list, *item, *node, *prev; - - if ( !*vlist ) { - *vlist = vitem; - return; - } - - list = ( lwNode ** ) vlist; - item = ( lwNode * ) vitem; - node = *list; - prev = NULL; - - while ( node ) { - if ( 0 < compare( node, item )) break; - prev = node; - node = node->next; - } - - if ( !prev ) { - *list = item; - node->prev = item; - item->next = node; - } - else if ( !node ) { - prev->next = item; - item->prev = prev; - } - else { - item->next = node; - item->prev = prev; - prev->next = item; - node->prev = item; - } + ====================================================================== + lwListInsert() + + Insert a node into a list in sorted order. + ====================================================================== */ + +void lwListInsert( void **vlist, void *vitem, int ( *compare )( void *, void * ) ){ + lwNode **list, *item, *node, *prev; + + if ( !*vlist ) { + *vlist = vitem; + return; + } + + list = ( lwNode ** ) vlist; + item = ( lwNode * ) vitem; + node = *list; + prev = NULL; + + while ( node ) { + if ( 0 < compare( node, item ) ) { + break; + } + prev = node; + node = node->next; + } + + if ( !prev ) { + *list = item; + node->prev = item; + item->next = node; + } + else if ( !node ) { + prev->next = item; + item->prev = prev; + } + else { + item->next = node; + item->prev = prev; + prev->next = item; + node->prev = item; + } } diff --git a/libs/picomodel/lwo/lwio.c b/libs/picomodel/lwo/lwio.c index 083ffcdb..52052483 100644 --- a/libs/picomodel/lwo/lwio.c +++ b/libs/picomodel/lwo/lwio.c @@ -1,28 +1,28 @@ /* -====================================================================== -lwio.c + ====================================================================== + lwio.c -Functions for reading basic LWO2 data types. + Functions for reading basic LWO2 data types. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" /* -====================================================================== -flen + ====================================================================== + flen -This accumulates a count of the number of bytes read. Callers can set -it at the beginning of a sequence of reads and then retrieve it to get -the number of bytes actually read. If one of the I/O functions fails, -flen is set to an error code, after which the I/O functions ignore -read requests until flen is reset. -====================================================================== */ + This accumulates a count of the number of bytes read. Callers can set + it at the beginning of a sequence of reads and then retrieve it to get + the number of bytes actually read. If one of the I/O functions fails, + flen is set to an error code, after which the I/O functions ignore + read requests until flen is reset. + ====================================================================== */ -#define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */ +#define INT_MIN ( -2147483647 - 1 ) /* minimum (signed) int value */ #define FLEN_ERROR INT_MIN static int flen; @@ -34,409 +34,438 @@ int get_flen( void ) { return flen; } #ifdef _WIN32 /* -===================================================================== -revbytes() + ===================================================================== + revbytes() -Reverses byte order in place. + Reverses byte order in place. -INPUTS + INPUTS bp bytes to reverse elsize size of the underlying data type elcount number of elements to swap -RESULTS + RESULTS Reverses the byte order in each of elcount elements. -This only needs to be defined on little-endian platforms, most -notably Windows. lwo2.h replaces this with a #define on big-endian -platforms. -===================================================================== */ - -void revbytes( void *bp, int elsize, int elcount ) -{ - register unsigned char *p, *q; - - p = ( unsigned char * ) bp; - - if ( elsize == 2 ) { - q = p + 1; - while ( elcount-- ) { - *p ^= *q; - *q ^= *p; - *p ^= *q; - p += 2; - q += 2; - } - return; - } - - while ( elcount-- ) { - q = p + elsize - 1; - while ( p < q ) { - *p ^= *q; - *q ^= *p; - *p ^= *q; - ++p; - --q; - } - p += elsize >> 1; - } + This only needs to be defined on little-endian platforms, most + notably Windows. lwo2.h replaces this with a #define on big-endian + platforms. + ===================================================================== */ + +void revbytes( void *bp, int elsize, int elcount ){ + register unsigned char *p, *q; + + p = ( unsigned char * ) bp; + + if ( elsize == 2 ) { + q = p + 1; + while ( elcount-- ) { + *p ^= *q; + *q ^= *p; + *p ^= *q; + p += 2; + q += 2; + } + return; + } + + while ( elcount-- ) { + q = p + elsize - 1; + while ( p < q ) { + *p ^= *q; + *q ^= *p; + *p ^= *q; + ++p; + --q; + } + p += elsize >> 1; + } } #endif -void *getbytes( picoMemStream_t *fp, int size ) -{ - void *data; - - if ( flen == FLEN_ERROR ) return NULL; - if ( size < 0 ) { - flen = FLEN_ERROR; - return NULL; - } - data = _pico_alloc( size ); - if ( !data ) { - flen = FLEN_ERROR; - return NULL; - } - if ( 1 != _pico_memstream_read( fp, data, size )) { - flen = FLEN_ERROR; - _pico_free( data ); - return NULL; - } - - flen += size; - return data; +void *getbytes( picoMemStream_t *fp, int size ){ + void *data; + + if ( flen == FLEN_ERROR ) { + return NULL; + } + if ( size < 0 ) { + flen = FLEN_ERROR; + return NULL; + } + data = _pico_alloc( size ); + if ( !data ) { + flen = FLEN_ERROR; + return NULL; + } + if ( 1 != _pico_memstream_read( fp, data, size ) ) { + flen = FLEN_ERROR; + _pico_free( data ); + return NULL; + } + + flen += size; + return data; } -void skipbytes( picoMemStream_t *fp, int n ) -{ - if ( flen == FLEN_ERROR ) return; - if ( _pico_memstream_seek( fp, n, PICO_SEEK_CUR )) - flen = FLEN_ERROR; - else - flen += n; +void skipbytes( picoMemStream_t *fp, int n ){ + if ( flen == FLEN_ERROR ) { + return; + } + if ( _pico_memstream_seek( fp, n, PICO_SEEK_CUR ) ) { + flen = FLEN_ERROR; + } + else{ + flen += n; + } } -int getI1( picoMemStream_t *fp ) -{ - int i; - - if ( flen == FLEN_ERROR ) return 0; - i = _pico_memstream_getc( fp ); - if ( i < 0 ) { - flen = FLEN_ERROR; - return 0; - } - if ( i > 127 ) i -= 256; - flen += 1; - return i; +int getI1( picoMemStream_t *fp ){ + int i; + + if ( flen == FLEN_ERROR ) { + return 0; + } + i = _pico_memstream_getc( fp ); + if ( i < 0 ) { + flen = FLEN_ERROR; + return 0; + } + if ( i > 127 ) { + i -= 256; + } + flen += 1; + return i; } -short getI2( picoMemStream_t *fp ) -{ - short i; +short getI2( picoMemStream_t *fp ){ + short i; - if ( flen == FLEN_ERROR ) return 0; - if ( 1 != _pico_memstream_read( fp, &i, 2 )) { - flen = FLEN_ERROR; - return 0; - } - revbytes( &i, 2, 1 ); - flen += 2; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + if ( 1 != _pico_memstream_read( fp, &i, 2 ) ) { + flen = FLEN_ERROR; + return 0; + } + revbytes( &i, 2, 1 ); + flen += 2; + return i; } -int getI4( picoMemStream_t *fp ) -{ - int i; +int getI4( picoMemStream_t *fp ){ + int i; - if ( flen == FLEN_ERROR ) return 0; - if ( 1 != _pico_memstream_read( fp, &i, 4 )) { - flen = FLEN_ERROR; - return 0; - } - revbytes( &i, 4, 1 ); - flen += 4; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + if ( 1 != _pico_memstream_read( fp, &i, 4 ) ) { + flen = FLEN_ERROR; + return 0; + } + revbytes( &i, 4, 1 ); + flen += 4; + return i; } -unsigned char getU1( picoMemStream_t *fp ) -{ - int i; +unsigned char getU1( picoMemStream_t *fp ){ + int i; - if ( flen == FLEN_ERROR ) return 0; - i = _pico_memstream_getc( fp ); - if ( i < 0 ) { - flen = FLEN_ERROR; - return 0; - } - flen += 1; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + i = _pico_memstream_getc( fp ); + if ( i < 0 ) { + flen = FLEN_ERROR; + return 0; + } + flen += 1; + return i; } -unsigned short getU2( picoMemStream_t *fp ) -{ - unsigned short i; +unsigned short getU2( picoMemStream_t *fp ){ + unsigned short i; - if ( flen == FLEN_ERROR ) return 0; - if ( 1 != _pico_memstream_read( fp, &i, 2 )) { - flen = FLEN_ERROR; - return 0; - } - revbytes( &i, 2, 1 ); - flen += 2; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + if ( 1 != _pico_memstream_read( fp, &i, 2 ) ) { + flen = FLEN_ERROR; + return 0; + } + revbytes( &i, 2, 1 ); + flen += 2; + return i; } -unsigned int getU4( picoMemStream_t *fp ) -{ - unsigned int i; +unsigned int getU4( picoMemStream_t *fp ){ + unsigned int i; - if ( flen == FLEN_ERROR ) return 0; - if ( 1 != _pico_memstream_read( fp, &i, 4 )) { - flen = FLEN_ERROR; - return 0; - } - revbytes( &i, 4, 1 ); - flen += 4; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + if ( 1 != _pico_memstream_read( fp, &i, 4 ) ) { + flen = FLEN_ERROR; + return 0; + } + revbytes( &i, 4, 1 ); + flen += 4; + return i; } -int getVX( picoMemStream_t *fp ) -{ - int i, c; - - if ( flen == FLEN_ERROR ) return 0; - - c = _pico_memstream_getc( fp ); - if ( c != 0xFF ) { - i = c << 8; - c = _pico_memstream_getc( fp ); - i |= c; - flen += 2; - } - else { - c = _pico_memstream_getc( fp ); - i = c << 16; - c = _pico_memstream_getc( fp ); - i |= c << 8; - c = _pico_memstream_getc( fp ); - i |= c; - flen += 4; - } - - if ( _pico_memstream_error( fp )) { - flen = FLEN_ERROR; - return 0; - } - return i; +int getVX( picoMemStream_t *fp ){ + int i, c; + + if ( flen == FLEN_ERROR ) { + return 0; + } + + c = _pico_memstream_getc( fp ); + if ( c != 0xFF ) { + i = c << 8; + c = _pico_memstream_getc( fp ); + i |= c; + flen += 2; + } + else { + c = _pico_memstream_getc( fp ); + i = c << 16; + c = _pico_memstream_getc( fp ); + i |= c << 8; + c = _pico_memstream_getc( fp ); + i |= c; + flen += 4; + } + + if ( _pico_memstream_error( fp ) ) { + flen = FLEN_ERROR; + return 0; + } + return i; } -float getF4( picoMemStream_t *fp ) -{ - float f; +float getF4( picoMemStream_t *fp ){ + float f; - if ( flen == FLEN_ERROR ) return 0.0f; - if ( 1 != _pico_memstream_read( fp, &f, 4 )) { - flen = FLEN_ERROR; - return 0.0f; - } - revbytes( &f, 4, 1 ); - flen += 4; - return f; + if ( flen == FLEN_ERROR ) { + return 0.0f; + } + if ( 1 != _pico_memstream_read( fp, &f, 4 ) ) { + flen = FLEN_ERROR; + return 0.0f; + } + revbytes( &f, 4, 1 ); + flen += 4; + return f; } -char *getS0( picoMemStream_t *fp ) -{ - char *s; - int i, c, len, pos; - - if ( flen == FLEN_ERROR ) return NULL; - - pos = _pico_memstream_tell( fp ); - for ( i = 1; ; i++ ) { - c = _pico_memstream_getc( fp ); - if ( c <= 0 ) break; - } - if ( c < 0 ) { - flen = FLEN_ERROR; - return NULL; - } - - if ( i == 1 ) { - if ( _pico_memstream_seek( fp, pos + 2, PICO_SEEK_SET )) - flen = FLEN_ERROR; - else - flen += 2; - return NULL; - } - - len = i + ( i & 1 ); - s = _pico_alloc( len ); - if ( !s ) { - flen = FLEN_ERROR; - return NULL; - } - - if ( _pico_memstream_seek( fp, pos, PICO_SEEK_SET )) { - flen = FLEN_ERROR; - return NULL; - } - if ( 1 != _pico_memstream_read( fp, s, len )) { - flen = FLEN_ERROR; - return NULL; - } - - flen += len; - return s; +char *getS0( picoMemStream_t *fp ){ + char *s; + int i, c, len, pos; + + if ( flen == FLEN_ERROR ) { + return NULL; + } + + pos = _pico_memstream_tell( fp ); + for ( i = 1; ; i++ ) { + c = _pico_memstream_getc( fp ); + if ( c <= 0 ) { + break; + } + } + if ( c < 0 ) { + flen = FLEN_ERROR; + return NULL; + } + + if ( i == 1 ) { + if ( _pico_memstream_seek( fp, pos + 2, PICO_SEEK_SET ) ) { + flen = FLEN_ERROR; + } + else{ + flen += 2; + } + return NULL; + } + + len = i + ( i & 1 ); + s = _pico_alloc( len ); + if ( !s ) { + flen = FLEN_ERROR; + return NULL; + } + + if ( _pico_memstream_seek( fp, pos, PICO_SEEK_SET ) ) { + flen = FLEN_ERROR; + return NULL; + } + if ( 1 != _pico_memstream_read( fp, s, len ) ) { + flen = FLEN_ERROR; + return NULL; + } + + flen += len; + return s; } -int sgetI1( unsigned char **bp ) -{ - int i; +int sgetI1( unsigned char **bp ){ + int i; - if ( flen == FLEN_ERROR ) return 0; - i = **bp; - if ( i > 127 ) i -= 256; - flen += 1; - (*bp)++; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + i = **bp; + if ( i > 127 ) { + i -= 256; + } + flen += 1; + ( *bp )++; + return i; } -short sgetI2( unsigned char **bp ) -{ - short i; +short sgetI2( unsigned char **bp ){ + short i; - if ( flen == FLEN_ERROR ) return 0; - memcpy( &i, *bp, 2 ); - revbytes( &i, 2, 1 ); - flen += 2; - *bp += 2; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + memcpy( &i, *bp, 2 ); + revbytes( &i, 2, 1 ); + flen += 2; + *bp += 2; + return i; } -int sgetI4( unsigned char **bp ) -{ - int i; +int sgetI4( unsigned char **bp ){ + int i; - if ( flen == FLEN_ERROR ) return 0; - memcpy( &i, *bp, 4 ); - revbytes( &i, 4, 1 ); - flen += 4; - *bp += 4; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + memcpy( &i, *bp, 4 ); + revbytes( &i, 4, 1 ); + flen += 4; + *bp += 4; + return i; } -unsigned char sgetU1( unsigned char **bp ) -{ - unsigned char c; +unsigned char sgetU1( unsigned char **bp ){ + unsigned char c; - if ( flen == FLEN_ERROR ) return 0; - c = **bp; - flen += 1; - (*bp)++; - return c; + if ( flen == FLEN_ERROR ) { + return 0; + } + c = **bp; + flen += 1; + ( *bp )++; + return c; } -unsigned short sgetU2( unsigned char **bp ) -{ - unsigned char *buf = *bp; - unsigned short i; +unsigned short sgetU2( unsigned char **bp ){ + unsigned char *buf = *bp; + unsigned short i; - if ( flen == FLEN_ERROR ) return 0; - i = ( buf[ 0 ] << 8 ) | buf[ 1 ]; - flen += 2; - *bp += 2; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + i = ( buf[ 0 ] << 8 ) | buf[ 1 ]; + flen += 2; + *bp += 2; + return i; } -unsigned int sgetU4( unsigned char **bp ) -{ - unsigned int i; +unsigned int sgetU4( unsigned char **bp ){ + unsigned int i; - if ( flen == FLEN_ERROR ) return 0; - memcpy( &i, *bp, 4 ); - revbytes( &i, 4, 1 ); - flen += 4; - *bp += 4; - return i; + if ( flen == FLEN_ERROR ) { + return 0; + } + memcpy( &i, *bp, 4 ); + revbytes( &i, 4, 1 ); + flen += 4; + *bp += 4; + return i; } -int sgetVX( unsigned char **bp ) -{ - unsigned char *buf = *bp; - int i; - - if ( flen == FLEN_ERROR ) return 0; - - if ( buf[ 0 ] != 0xFF ) { - i = buf[ 0 ] << 8 | buf[ 1 ]; - flen += 2; - *bp += 2; - } - else { - i = ( buf[ 1 ] << 16 ) | ( buf[ 2 ] << 8 ) | buf[ 3 ]; - flen += 4; - *bp += 4; - } - return i; +int sgetVX( unsigned char **bp ){ + unsigned char *buf = *bp; + int i; + + if ( flen == FLEN_ERROR ) { + return 0; + } + + if ( buf[ 0 ] != 0xFF ) { + i = buf[ 0 ] << 8 | buf[ 1 ]; + flen += 2; + *bp += 2; + } + else { + i = ( buf[ 1 ] << 16 ) | ( buf[ 2 ] << 8 ) | buf[ 3 ]; + flen += 4; + *bp += 4; + } + return i; } -float sgetF4( unsigned char **bp ) -{ - float f; +float sgetF4( unsigned char **bp ){ + float f; - if ( flen == FLEN_ERROR ) return 0.0f; - memcpy( &f, *bp, 4 ); - revbytes( &f, 4, 1 ); - flen += 4; - *bp += 4; - return f; + if ( flen == FLEN_ERROR ) { + return 0.0f; + } + memcpy( &f, *bp, 4 ); + revbytes( &f, 4, 1 ); + flen += 4; + *bp += 4; + return f; } -char *sgetS0( unsigned char **bp ) -{ - char *s; - unsigned char *buf = *bp; - int len; - - if ( flen == FLEN_ERROR ) return NULL; - - len = strlen( buf ) + 1; - if ( len == 1 ) { - flen += 2; - *bp += 2; - return NULL; - } - len += len & 1; - s = _pico_alloc( len ); - if ( !s ) { - flen = FLEN_ERROR; - return NULL; - } - - memcpy( s, buf, len ); - flen += len; - *bp += len; - return s; +char *sgetS0( unsigned char **bp ){ + char *s; + unsigned char *buf = *bp; + int len; + + if ( flen == FLEN_ERROR ) { + return NULL; + } + + len = strlen( buf ) + 1; + if ( len == 1 ) { + flen += 2; + *bp += 2; + return NULL; + } + len += len & 1; + s = _pico_alloc( len ); + if ( !s ) { + flen = FLEN_ERROR; + return NULL; + } + + memcpy( s, buf, len ); + flen += len; + *bp += len; + return s; } diff --git a/libs/picomodel/lwo/lwo2.c b/libs/picomodel/lwo/lwo2.c index f4c72443..1a1d7601 100644 --- a/libs/picomodel/lwo/lwo2.c +++ b/libs/picomodel/lwo/lwo2.c @@ -1,11 +1,11 @@ /* -====================================================================== -lwo2.c + ====================================================================== + lwo2.c -The entry point for loading LightWave object files. + The entry point for loading LightWave object files. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" @@ -17,292 +17,348 @@ Ernie Wright 17 Sep 00 /* -====================================================================== -lwFreeLayer() - -Free memory used by an lwLayer. -====================================================================== */ - -void lwFreeLayer( lwLayer *layer ) -{ - if ( layer ) { - if ( layer->name ) _pico_free( layer->name ); - lwFreePoints( &layer->point ); - lwFreePolygons( &layer->polygon ); - lwListFree( layer->vmap, lwFreeVMap ); - _pico_free( layer ); - } + ====================================================================== + lwFreeLayer() + + Free memory used by an lwLayer. + ====================================================================== */ + +void lwFreeLayer( lwLayer *layer ){ + if ( layer ) { + if ( layer->name ) { + _pico_free( layer->name ); + } + lwFreePoints( &layer->point ); + lwFreePolygons( &layer->polygon ); + lwListFree( layer->vmap, lwFreeVMap ); + _pico_free( layer ); + } } /* -====================================================================== -lwFreeObject() - -Free memory used by an lwObject. -====================================================================== */ - -void lwFreeObject( lwObject *object ) -{ - if ( object ) { - lwListFree( object->layer, lwFreeLayer ); - lwListFree( object->env, lwFreeEnvelope ); - lwListFree( object->clip, lwFreeClip ); - lwListFree( object->surf, lwFreeSurface ); - lwFreeTags( &object->taglist ); - _pico_free( object ); - } + ====================================================================== + lwFreeObject() + + Free memory used by an lwObject. + ====================================================================== */ + +void lwFreeObject( lwObject *object ){ + if ( object ) { + lwListFree( object->layer, lwFreeLayer ); + lwListFree( object->env, lwFreeEnvelope ); + lwListFree( object->clip, lwFreeClip ); + lwListFree( object->surf, lwFreeSurface ); + lwFreeTags( &object->taglist ); + _pico_free( object ); + } } /* -====================================================================== -lwGetObject() + ====================================================================== + lwGetObject() -Returns the contents of a LightWave object, given its filename, or -NULL if the file couldn't be loaded. On failure, failID and failpos -can be used to diagnose the cause. + Returns the contents of a LightWave object, given its filename, or + NULL if the file couldn't be loaded. On failure, failID and failpos + can be used to diagnose the cause. -1. If the file isn't an LWO2 or an LWOB, failpos will contain 12 and + 1. If the file isn't an LWO2 or an LWOB, failpos will contain 12 and failID will be unchanged. -2. If an error occurs while reading, failID will contain the most + 2. If an error occurs while reading, failID will contain the most recently read IFF chunk ID, and failpos will contain the value returned by _pico_memstream_tell() at the time of the failure. -3. If the file couldn't be opened, or an error occurs while reading + 3. If the file couldn't be opened, or an error occurs while reading the first 12 bytes, both failID and failpos will be unchanged. -If you don't need this information, failID and failpos can be NULL. -====================================================================== */ - -lwObject *lwGetObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos ) -{ - lwObject *object; - lwLayer *layer; - lwNode *node; - unsigned int id, formsize, type, cksize; - int i, rlen; - - /* open the file */ - - if ( !fp ) return NULL; - - /* read the first 12 bytes */ - - set_flen( 0 ); - id = getU4( fp ); - formsize = getU4( fp ); - type = getU4( fp ); - if ( 12 != get_flen() ) { - return NULL; - } - - /* is this a LW object? */ - - if ( id != ID_FORM ) { - if ( failpos ) *failpos = 12; - return NULL; - } - - if ( type != ID_LWO2 ) { - if ( type == ID_LWOB ) - return lwGetObject5( filename, fp, failID, failpos ); - else { - if ( failpos ) *failpos = 12; - return NULL; - } - } - - /* allocate an object and a default layer */ - - object = _pico_calloc( 1, sizeof( lwObject )); - if ( !object ) goto Fail; - - layer = _pico_calloc( 1, sizeof( lwLayer )); - if ( !layer ) goto Fail; - object->layer = layer; - - /* get the first chunk header */ - - id = getU4( fp ); - cksize = getU4( fp ); - if ( 0 > get_flen() ) goto Fail; - - /* process chunks as they're encountered */ - - while ( 1 ) { - cksize += cksize & 1; - - switch ( id ) - { - case ID_LAYR: - if ( object->nlayers > 0 ) { - layer = _pico_calloc( 1, sizeof( lwLayer )); - if ( !layer ) goto Fail; - lwListAdd( &object->layer, layer ); - } - object->nlayers++; - - set_flen( 0 ); - layer->index = getU2( fp ); - layer->flags = getU2( fp ); - layer->pivot[ 0 ] = getF4( fp ); - layer->pivot[ 1 ] = getF4( fp ); - layer->pivot[ 2 ] = getF4( fp ); - layer->name = getS0( fp ); - - rlen = get_flen(); - if ( rlen < 0 || rlen > cksize ) goto Fail; - if ( rlen <= cksize - 2 ) - layer->parent = getU2( fp ); - rlen = get_flen(); - if ( rlen < cksize ) - _pico_memstream_seek( fp, cksize - rlen, PICO_SEEK_CUR ); - break; - - case ID_PNTS: - if ( !lwGetPoints( fp, cksize, &layer->point )) - goto Fail; - break; - - case ID_POLS: - if ( !lwGetPolygons( fp, cksize, &layer->polygon, - layer->point.offset )) - goto Fail; - break; - - case ID_VMAP: - case ID_VMAD: - node = ( lwNode * ) lwGetVMap( fp, cksize, layer->point.offset, - layer->polygon.offset, id == ID_VMAD ); - if ( !node ) goto Fail; - lwListAdd( &layer->vmap, node ); - layer->nvmaps++; - break; - - case ID_PTAG: - if ( !lwGetPolygonTags( fp, cksize, &object->taglist, - &layer->polygon )) - goto Fail; - break; - - case ID_BBOX: - set_flen( 0 ); - for ( i = 0; i < 6; i++ ) - layer->bbox[ i ] = getF4( fp ); - rlen = get_flen(); - if ( rlen < 0 || rlen > cksize ) goto Fail; - if ( rlen < cksize ) - _pico_memstream_seek( fp, cksize - rlen, PICO_SEEK_CUR ); - break; - - case ID_TAGS: - if ( !lwGetTags( fp, cksize, &object->taglist )) - goto Fail; - break; - - case ID_ENVL: - node = ( lwNode * ) lwGetEnvelope( fp, cksize ); - if ( !node ) goto Fail; - lwListAdd( &object->env, node ); - object->nenvs++; - break; - - case ID_CLIP: - node = ( lwNode * ) lwGetClip( fp, cksize ); - if ( !node ) goto Fail; - lwListAdd( &object->clip, node ); - object->nclips++; - break; - - case ID_SURF: - node = ( lwNode * ) lwGetSurface( fp, cksize ); - if ( !node ) goto Fail; - lwListAdd( &object->surf, node ); - object->nsurfs++; - break; - - case ID_DESC: - case ID_TEXT: - case ID_ICON: - default: - _pico_memstream_seek( fp, cksize, PICO_SEEK_CUR ); - break; - } - - /* end of the file? */ - - if ( formsize <= _pico_memstream_tell( fp ) - 8 ) break; - - /* get the next chunk header */ - - set_flen( 0 ); - id = getU4( fp ); - cksize = getU4( fp ); - if ( 8 != get_flen() ) goto Fail; - } - - if ( object->nlayers == 0 ) - object->nlayers = 1; - - layer = object->layer; - while ( layer ) { - lwGetBoundingBox( &layer->point, layer->bbox ); - lwGetPolyNormals( &layer->point, &layer->polygon ); - if ( !lwGetPointPolygons( &layer->point, &layer->polygon )) goto Fail; - if ( !lwResolvePolySurfaces( &layer->polygon, &object->taglist, - &object->surf, &object->nsurfs )) goto Fail; - lwGetVertNormals( &layer->point, &layer->polygon ); - if ( !lwGetPointVMaps( &layer->point, layer->vmap )) goto Fail; - if ( !lwGetPolyVMaps( &layer->polygon, layer->vmap )) goto Fail; - layer = layer->next; - } - - return object; + If you don't need this information, failID and failpos can be NULL. + ====================================================================== */ + +lwObject *lwGetObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos ){ + lwObject *object; + lwLayer *layer; + lwNode *node; + unsigned int id, formsize, type, cksize; + int i, rlen; + + /* open the file */ + + if ( !fp ) { + return NULL; + } + + /* read the first 12 bytes */ + + set_flen( 0 ); + id = getU4( fp ); + formsize = getU4( fp ); + type = getU4( fp ); + if ( 12 != get_flen() ) { + return NULL; + } + + /* is this a LW object? */ + + if ( id != ID_FORM ) { + if ( failpos ) { + *failpos = 12; + } + return NULL; + } + + if ( type != ID_LWO2 ) { + if ( type == ID_LWOB ) { + return lwGetObject5( filename, fp, failID, failpos ); + } + else { + if ( failpos ) { + *failpos = 12; + } + return NULL; + } + } + + /* allocate an object and a default layer */ + + object = _pico_calloc( 1, sizeof( lwObject ) ); + if ( !object ) { + goto Fail; + } + + layer = _pico_calloc( 1, sizeof( lwLayer ) ); + if ( !layer ) { + goto Fail; + } + object->layer = layer; + + /* get the first chunk header */ + + id = getU4( fp ); + cksize = getU4( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + /* process chunks as they're encountered */ + + while ( 1 ) { + cksize += cksize & 1; + + switch ( id ) + { + case ID_LAYR: + if ( object->nlayers > 0 ) { + layer = _pico_calloc( 1, sizeof( lwLayer ) ); + if ( !layer ) { + goto Fail; + } + lwListAdd( &object->layer, layer ); + } + object->nlayers++; + + set_flen( 0 ); + layer->index = getU2( fp ); + layer->flags = getU2( fp ); + layer->pivot[ 0 ] = getF4( fp ); + layer->pivot[ 1 ] = getF4( fp ); + layer->pivot[ 2 ] = getF4( fp ); + layer->name = getS0( fp ); + + rlen = get_flen(); + if ( rlen < 0 || rlen > cksize ) { + goto Fail; + } + if ( rlen <= cksize - 2 ) { + layer->parent = getU2( fp ); + } + rlen = get_flen(); + if ( rlen < cksize ) { + _pico_memstream_seek( fp, cksize - rlen, PICO_SEEK_CUR ); + } + break; + + case ID_PNTS: + if ( !lwGetPoints( fp, cksize, &layer->point ) ) { + goto Fail; + } + break; + + case ID_POLS: + if ( !lwGetPolygons( fp, cksize, &layer->polygon, + layer->point.offset ) ) { + goto Fail; + } + break; + + case ID_VMAP: + case ID_VMAD: + node = ( lwNode * ) lwGetVMap( fp, cksize, layer->point.offset, + layer->polygon.offset, id == ID_VMAD ); + if ( !node ) { + goto Fail; + } + lwListAdd( &layer->vmap, node ); + layer->nvmaps++; + break; + + case ID_PTAG: + if ( !lwGetPolygonTags( fp, cksize, &object->taglist, + &layer->polygon ) ) { + goto Fail; + } + break; + + case ID_BBOX: + set_flen( 0 ); + for ( i = 0; i < 6; i++ ) + layer->bbox[ i ] = getF4( fp ); + rlen = get_flen(); + if ( rlen < 0 || rlen > cksize ) { + goto Fail; + } + if ( rlen < cksize ) { + _pico_memstream_seek( fp, cksize - rlen, PICO_SEEK_CUR ); + } + break; + + case ID_TAGS: + if ( !lwGetTags( fp, cksize, &object->taglist ) ) { + goto Fail; + } + break; + + case ID_ENVL: + node = ( lwNode * ) lwGetEnvelope( fp, cksize ); + if ( !node ) { + goto Fail; + } + lwListAdd( &object->env, node ); + object->nenvs++; + break; + + case ID_CLIP: + node = ( lwNode * ) lwGetClip( fp, cksize ); + if ( !node ) { + goto Fail; + } + lwListAdd( &object->clip, node ); + object->nclips++; + break; + + case ID_SURF: + node = ( lwNode * ) lwGetSurface( fp, cksize ); + if ( !node ) { + goto Fail; + } + lwListAdd( &object->surf, node ); + object->nsurfs++; + break; + + case ID_DESC: + case ID_TEXT: + case ID_ICON: + default: + _pico_memstream_seek( fp, cksize, PICO_SEEK_CUR ); + break; + } + + /* end of the file? */ + + if ( formsize <= _pico_memstream_tell( fp ) - 8 ) { + break; + } + + /* get the next chunk header */ + + set_flen( 0 ); + id = getU4( fp ); + cksize = getU4( fp ); + if ( 8 != get_flen() ) { + goto Fail; + } + } + + if ( object->nlayers == 0 ) { + object->nlayers = 1; + } + + layer = object->layer; + while ( layer ) { + lwGetBoundingBox( &layer->point, layer->bbox ); + lwGetPolyNormals( &layer->point, &layer->polygon ); + if ( !lwGetPointPolygons( &layer->point, &layer->polygon ) ) { + goto Fail; + } + if ( !lwResolvePolySurfaces( &layer->polygon, &object->taglist, + &object->surf, &object->nsurfs ) ) { + goto Fail; + } + lwGetVertNormals( &layer->point, &layer->polygon ); + if ( !lwGetPointVMaps( &layer->point, layer->vmap ) ) { + goto Fail; + } + if ( !lwGetPolyVMaps( &layer->polygon, layer->vmap ) ) { + goto Fail; + } + layer = layer->next; + } + + return object; Fail: - if ( failID ) *failID = id; - if ( fp ) { - if ( failpos ) *failpos = _pico_memstream_tell( fp ); - } - lwFreeObject( object ); - return NULL; + if ( failID ) { + *failID = id; + } + if ( fp ) { + if ( failpos ) { + *failpos = _pico_memstream_tell( fp ); + } + } + lwFreeObject( object ); + return NULL; } -int lwValidateObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos ) -{ - unsigned int id, formsize, type; - - /* open the file */ - - if ( !fp ) return PICO_PMV_ERROR_MEMORY; - - /* read the first 12 bytes */ - - set_flen( 0 ); - id = getU4( fp ); - formsize = getU4( fp ); - type = getU4( fp ); - if ( 12 != get_flen() ) { - return PICO_PMV_ERROR_SIZE; - } - - /* is this a LW object? */ - - if ( id != ID_FORM ) { - if ( failpos ) *failpos = 12; - return PICO_PMV_ERROR_SIZE; - } - - if ( type != ID_LWO2 ) { - if ( type == ID_LWOB ) - return lwValidateObject5( filename, fp, failID, failpos ); - else { - if ( failpos ) *failpos = 12; - return PICO_PMV_ERROR_IDENT; - } - } - - return PICO_PMV_OK; +int lwValidateObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos ){ + unsigned int id, formsize, type; + + /* open the file */ + + if ( !fp ) { + return PICO_PMV_ERROR_MEMORY; + } + + /* read the first 12 bytes */ + + set_flen( 0 ); + id = getU4( fp ); + formsize = getU4( fp ); + type = getU4( fp ); + if ( 12 != get_flen() ) { + return PICO_PMV_ERROR_SIZE; + } + + /* is this a LW object? */ + + if ( id != ID_FORM ) { + if ( failpos ) { + *failpos = 12; + } + return PICO_PMV_ERROR_SIZE; + } + + if ( type != ID_LWO2 ) { + if ( type == ID_LWOB ) { + return lwValidateObject5( filename, fp, failID, failpos ); + } + else { + if ( failpos ) { + *failpos = 12; + } + return PICO_PMV_ERROR_IDENT; + } + } + + return PICO_PMV_OK; } diff --git a/libs/picomodel/lwo/lwo2.h b/libs/picomodel/lwo/lwo2.h index 1d55ba46..22098c98 100644 --- a/libs/picomodel/lwo/lwo2.h +++ b/libs/picomodel/lwo/lwo2.h @@ -1,205 +1,205 @@ /* -====================================================================== -lwo2.h + ====================================================================== + lwo2.h -Definitions and typedefs for LWO2 files. + Definitions and typedefs for LWO2 files. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #ifndef LWO2_H #define LWO2_H /* chunk and subchunk IDs */ -#define LWID_(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d)) +#define LWID_( a,b,c,d ) ( ( ( a ) << 24 ) | ( ( b ) << 16 ) | ( ( c ) << 8 ) | ( d ) ) -#define ID_FORM LWID_('F','O','R','M') -#define ID_LWO2 LWID_('L','W','O','2') -#define ID_LWOB LWID_('L','W','O','B') +#define ID_FORM LWID_( 'F','O','R','M' ) +#define ID_LWO2 LWID_( 'L','W','O','2' ) +#define ID_LWOB LWID_( 'L','W','O','B' ) /* top-level chunks */ -#define ID_LAYR LWID_('L','A','Y','R') -#define ID_TAGS LWID_('T','A','G','S') -#define ID_PNTS LWID_('P','N','T','S') -#define ID_BBOX LWID_('B','B','O','X') -#define ID_VMAP LWID_('V','M','A','P') -#define ID_VMAD LWID_('V','M','A','D') -#define ID_POLS LWID_('P','O','L','S') -#define ID_PTAG LWID_('P','T','A','G') -#define ID_ENVL LWID_('E','N','V','L') -#define ID_CLIP LWID_('C','L','I','P') -#define ID_SURF LWID_('S','U','R','F') -#define ID_DESC LWID_('D','E','S','C') -#define ID_TEXT LWID_('T','E','X','T') -#define ID_ICON LWID_('I','C','O','N') +#define ID_LAYR LWID_( 'L','A','Y','R' ) +#define ID_TAGS LWID_( 'T','A','G','S' ) +#define ID_PNTS LWID_( 'P','N','T','S' ) +#define ID_BBOX LWID_( 'B','B','O','X' ) +#define ID_VMAP LWID_( 'V','M','A','P' ) +#define ID_VMAD LWID_( 'V','M','A','D' ) +#define ID_POLS LWID_( 'P','O','L','S' ) +#define ID_PTAG LWID_( 'P','T','A','G' ) +#define ID_ENVL LWID_( 'E','N','V','L' ) +#define ID_CLIP LWID_( 'C','L','I','P' ) +#define ID_SURF LWID_( 'S','U','R','F' ) +#define ID_DESC LWID_( 'D','E','S','C' ) +#define ID_TEXT LWID_( 'T','E','X','T' ) +#define ID_ICON LWID_( 'I','C','O','N' ) /* polygon types */ -#define ID_FACE LWID_('F','A','C','E') -#define ID_CURV LWID_('C','U','R','V') -#define ID_PTCH LWID_('P','T','C','H') -#define ID_MBAL LWID_('M','B','A','L') -#define ID_BONE LWID_('B','O','N','E') +#define ID_FACE LWID_( 'F','A','C','E' ) +#define ID_CURV LWID_( 'C','U','R','V' ) +#define ID_PTCH LWID_( 'P','T','C','H' ) +#define ID_MBAL LWID_( 'M','B','A','L' ) +#define ID_BONE LWID_( 'B','O','N','E' ) /* polygon tags */ -#define ID_SURF LWID_('S','U','R','F') -#define ID_PART LWID_('P','A','R','T') -#define ID_SMGP LWID_('S','M','G','P') +#define ID_SURF LWID_( 'S','U','R','F' ) +#define ID_PART LWID_( 'P','A','R','T' ) +#define ID_SMGP LWID_( 'S','M','G','P' ) /* envelopes */ -#define ID_PRE LWID_('P','R','E',' ') -#define ID_POST LWID_('P','O','S','T') -#define ID_KEY LWID_('K','E','Y',' ') -#define ID_SPAN LWID_('S','P','A','N') -#define ID_TCB LWID_('T','C','B',' ') -#define ID_HERM LWID_('H','E','R','M') -#define ID_BEZI LWID_('B','E','Z','I') -#define ID_BEZ2 LWID_('B','E','Z','2') -#define ID_LINE LWID_('L','I','N','E') -#define ID_STEP LWID_('S','T','E','P') +#define ID_PRE LWID_( 'P','R','E',' ' ) +#define ID_POST LWID_( 'P','O','S','T' ) +#define ID_KEY LWID_( 'K','E','Y',' ' ) +#define ID_SPAN LWID_( 'S','P','A','N' ) +#define ID_TCB LWID_( 'T','C','B',' ' ) +#define ID_HERM LWID_( 'H','E','R','M' ) +#define ID_BEZI LWID_( 'B','E','Z','I' ) +#define ID_BEZ2 LWID_( 'B','E','Z','2' ) +#define ID_LINE LWID_( 'L','I','N','E' ) +#define ID_STEP LWID_( 'S','T','E','P' ) /* clips */ -#define ID_STIL LWID_('S','T','I','L') -#define ID_ISEQ LWID_('I','S','E','Q') -#define ID_ANIM LWID_('A','N','I','M') -#define ID_XREF LWID_('X','R','E','F') -#define ID_STCC LWID_('S','T','C','C') -#define ID_TIME LWID_('T','I','M','E') -#define ID_CONT LWID_('C','O','N','T') -#define ID_BRIT LWID_('B','R','I','T') -#define ID_SATR LWID_('S','A','T','R') -#define ID_HUE LWID_('H','U','E',' ') -#define ID_GAMM LWID_('G','A','M','M') -#define ID_NEGA LWID_('N','E','G','A') -#define ID_IFLT LWID_('I','F','L','T') -#define ID_PFLT LWID_('P','F','L','T') +#define ID_STIL LWID_( 'S','T','I','L' ) +#define ID_ISEQ LWID_( 'I','S','E','Q' ) +#define ID_ANIM LWID_( 'A','N','I','M' ) +#define ID_XREF LWID_( 'X','R','E','F' ) +#define ID_STCC LWID_( 'S','T','C','C' ) +#define ID_TIME LWID_( 'T','I','M','E' ) +#define ID_CONT LWID_( 'C','O','N','T' ) +#define ID_BRIT LWID_( 'B','R','I','T' ) +#define ID_SATR LWID_( 'S','A','T','R' ) +#define ID_HUE LWID_( 'H','U','E',' ' ) +#define ID_GAMM LWID_( 'G','A','M','M' ) +#define ID_NEGA LWID_( 'N','E','G','A' ) +#define ID_IFLT LWID_( 'I','F','L','T' ) +#define ID_PFLT LWID_( 'P','F','L','T' ) /* surfaces */ -#define ID_COLR LWID_('C','O','L','R') -#define ID_LUMI LWID_('L','U','M','I') -#define ID_DIFF LWID_('D','I','F','F') -#define ID_SPEC LWID_('S','P','E','C') -#define ID_GLOS LWID_('G','L','O','S') -#define ID_REFL LWID_('R','E','F','L') -#define ID_RFOP LWID_('R','F','O','P') -#define ID_RIMG LWID_('R','I','M','G') -#define ID_RSAN LWID_('R','S','A','N') -#define ID_TRAN LWID_('T','R','A','N') -#define ID_TROP LWID_('T','R','O','P') -#define ID_TIMG LWID_('T','I','M','G') -#define ID_RIND LWID_('R','I','N','D') -#define ID_TRNL LWID_('T','R','N','L') -#define ID_BUMP LWID_('B','U','M','P') -#define ID_SMAN LWID_('S','M','A','N') -#define ID_SIDE LWID_('S','I','D','E') -#define ID_CLRH LWID_('C','L','R','H') -#define ID_CLRF LWID_('C','L','R','F') -#define ID_ADTR LWID_('A','D','T','R') -#define ID_SHRP LWID_('S','H','R','P') -#define ID_LINE LWID_('L','I','N','E') -#define ID_LSIZ LWID_('L','S','I','Z') -#define ID_ALPH LWID_('A','L','P','H') -#define ID_AVAL LWID_('A','V','A','L') -#define ID_GVAL LWID_('G','V','A','L') -#define ID_BLOK LWID_('B','L','O','K') +#define ID_COLR LWID_( 'C','O','L','R' ) +#define ID_LUMI LWID_( 'L','U','M','I' ) +#define ID_DIFF LWID_( 'D','I','F','F' ) +#define ID_SPEC LWID_( 'S','P','E','C' ) +#define ID_GLOS LWID_( 'G','L','O','S' ) +#define ID_REFL LWID_( 'R','E','F','L' ) +#define ID_RFOP LWID_( 'R','F','O','P' ) +#define ID_RIMG LWID_( 'R','I','M','G' ) +#define ID_RSAN LWID_( 'R','S','A','N' ) +#define ID_TRAN LWID_( 'T','R','A','N' ) +#define ID_TROP LWID_( 'T','R','O','P' ) +#define ID_TIMG LWID_( 'T','I','M','G' ) +#define ID_RIND LWID_( 'R','I','N','D' ) +#define ID_TRNL LWID_( 'T','R','N','L' ) +#define ID_BUMP LWID_( 'B','U','M','P' ) +#define ID_SMAN LWID_( 'S','M','A','N' ) +#define ID_SIDE LWID_( 'S','I','D','E' ) +#define ID_CLRH LWID_( 'C','L','R','H' ) +#define ID_CLRF LWID_( 'C','L','R','F' ) +#define ID_ADTR LWID_( 'A','D','T','R' ) +#define ID_SHRP LWID_( 'S','H','R','P' ) +#define ID_LINE LWID_( 'L','I','N','E' ) +#define ID_LSIZ LWID_( 'L','S','I','Z' ) +#define ID_ALPH LWID_( 'A','L','P','H' ) +#define ID_AVAL LWID_( 'A','V','A','L' ) +#define ID_GVAL LWID_( 'G','V','A','L' ) +#define ID_BLOK LWID_( 'B','L','O','K' ) /* texture layer */ -#define ID_TYPE LWID_('T','Y','P','E') -#define ID_CHAN LWID_('C','H','A','N') -#define ID_NAME LWID_('N','A','M','E') -#define ID_ENAB LWID_('E','N','A','B') -#define ID_OPAC LWID_('O','P','A','C') -#define ID_FLAG LWID_('F','L','A','G') -#define ID_PROJ LWID_('P','R','O','J') -#define ID_STCK LWID_('S','T','C','K') -#define ID_TAMP LWID_('T','A','M','P') +#define ID_TYPE LWID_( 'T','Y','P','E' ) +#define ID_CHAN LWID_( 'C','H','A','N' ) +#define ID_NAME LWID_( 'N','A','M','E' ) +#define ID_ENAB LWID_( 'E','N','A','B' ) +#define ID_OPAC LWID_( 'O','P','A','C' ) +#define ID_FLAG LWID_( 'F','L','A','G' ) +#define ID_PROJ LWID_( 'P','R','O','J' ) +#define ID_STCK LWID_( 'S','T','C','K' ) +#define ID_TAMP LWID_( 'T','A','M','P' ) /* texture coordinates */ -#define ID_TMAP LWID_('T','M','A','P') -#define ID_AXIS LWID_('A','X','I','S') -#define ID_CNTR LWID_('C','N','T','R') -#define ID_SIZE LWID_('S','I','Z','E') -#define ID_ROTA LWID_('R','O','T','A') -#define ID_OREF LWID_('O','R','E','F') -#define ID_FALL LWID_('F','A','L','L') -#define ID_CSYS LWID_('C','S','Y','S') +#define ID_TMAP LWID_( 'T','M','A','P' ) +#define ID_AXIS LWID_( 'A','X','I','S' ) +#define ID_CNTR LWID_( 'C','N','T','R' ) +#define ID_SIZE LWID_( 'S','I','Z','E' ) +#define ID_ROTA LWID_( 'R','O','T','A' ) +#define ID_OREF LWID_( 'O','R','E','F' ) +#define ID_FALL LWID_( 'F','A','L','L' ) +#define ID_CSYS LWID_( 'C','S','Y','S' ) /* image map */ -#define ID_IMAP LWID_('I','M','A','P') -#define ID_IMAG LWID_('I','M','A','G') -#define ID_WRAP LWID_('W','R','A','P') -#define ID_WRPW LWID_('W','R','P','W') -#define ID_WRPH LWID_('W','R','P','H') -#define ID_VMAP LWID_('V','M','A','P') -#define ID_AAST LWID_('A','A','S','T') -#define ID_PIXB LWID_('P','I','X','B') +#define ID_IMAP LWID_( 'I','M','A','P' ) +#define ID_IMAG LWID_( 'I','M','A','G' ) +#define ID_WRAP LWID_( 'W','R','A','P' ) +#define ID_WRPW LWID_( 'W','R','P','W' ) +#define ID_WRPH LWID_( 'W','R','P','H' ) +#define ID_VMAP LWID_( 'V','M','A','P' ) +#define ID_AAST LWID_( 'A','A','S','T' ) +#define ID_PIXB LWID_( 'P','I','X','B' ) /* procedural */ -#define ID_PROC LWID_('P','R','O','C') -#define ID_COLR LWID_('C','O','L','R') -#define ID_VALU LWID_('V','A','L','U') -#define ID_FUNC LWID_('F','U','N','C') -#define ID_FTPS LWID_('F','T','P','S') -#define ID_ITPS LWID_('I','T','P','S') -#define ID_ETPS LWID_('E','T','P','S') +#define ID_PROC LWID_( 'P','R','O','C' ) +#define ID_COLR LWID_( 'C','O','L','R' ) +#define ID_VALU LWID_( 'V','A','L','U' ) +#define ID_FUNC LWID_( 'F','U','N','C' ) +#define ID_FTPS LWID_( 'F','T','P','S' ) +#define ID_ITPS LWID_( 'I','T','P','S' ) +#define ID_ETPS LWID_( 'E','T','P','S' ) /* gradient */ -#define ID_GRAD LWID_('G','R','A','D') -#define ID_GRST LWID_('G','R','S','T') -#define ID_GREN LWID_('G','R','E','N') -#define ID_PNAM LWID_('P','N','A','M') -#define ID_INAM LWID_('I','N','A','M') -#define ID_GRPT LWID_('G','R','P','T') -#define ID_FKEY LWID_('F','K','E','Y') -#define ID_IKEY LWID_('I','K','E','Y') +#define ID_GRAD LWID_( 'G','R','A','D' ) +#define ID_GRST LWID_( 'G','R','S','T' ) +#define ID_GREN LWID_( 'G','R','E','N' ) +#define ID_PNAM LWID_( 'P','N','A','M' ) +#define ID_INAM LWID_( 'I','N','A','M' ) +#define ID_GRPT LWID_( 'G','R','P','T' ) +#define ID_FKEY LWID_( 'F','K','E','Y' ) +#define ID_IKEY LWID_( 'I','K','E','Y' ) /* shader */ -#define ID_SHDR LWID_('S','H','D','R') -#define ID_DATA LWID_('D','A','T','A') +#define ID_SHDR LWID_( 'S','H','D','R' ) +#define ID_DATA LWID_( 'D','A','T','A' ) /* generic linked list */ typedef struct st_lwNode { - struct st_lwNode *next, *prev; - void *data; + struct st_lwNode *next, *prev; + void *data; } lwNode; /* plug-in reference */ typedef struct st_lwPlugin { - struct st_lwPlugin *next, *prev; - char *ord; - char *name; - int flags; - void *data; + struct st_lwPlugin *next, *prev; + char *ord; + char *name; + int flags; + void *data; } lwPlugin; /* envelopes */ typedef struct st_lwKey { - struct st_lwKey *next, *prev; - float value; - float time; - unsigned int shape; /* ID_TCB, ID_BEZ2, etc. */ - float tension; - float continuity; - float bias; - float param[ 4 ]; + struct st_lwKey *next, *prev; + float value; + float time; + unsigned int shape; /* ID_TCB, ID_BEZ2, etc. */ + float tension; + float continuity; + float bias; + float param[ 4 ]; } lwKey; typedef struct st_lwEnvelope { - struct st_lwEnvelope *next, *prev; - int index; - int type; - char *name; - lwKey *key; /* linked list of keys */ - int nkeys; - int behavior[ 2 ]; /* pre and post (extrapolation) */ - lwPlugin *cfilter; /* linked list of channel filters */ - int ncfilters; + struct st_lwEnvelope *next, *prev; + int index; + int type; + char *name; + lwKey *key; /* linked list of keys */ + int nkeys; + int behavior[ 2 ]; /* pre and post (extrapolation) */ + lwPlugin *cfilter; /* linked list of channel filters */ + int ncfilters; } lwEnvelope; #define BEH_RESET 0 @@ -213,103 +213,103 @@ typedef struct st_lwEnvelope { /* values that can be enveloped */ typedef struct st_lwEParam { - float val; - int eindex; + float val; + int eindex; } lwEParam; typedef struct st_lwVParam { - float val[ 3 ]; - int eindex; + float val[ 3 ]; + int eindex; } lwVParam; /* clips */ typedef struct st_lwClipStill { - char *name; + char *name; } lwClipStill; typedef struct st_lwClipSeq { - char *prefix; /* filename before sequence digits */ - char *suffix; /* after digits, e.g. extensions */ - int digits; - int flags; - int offset; - int start; - int end; + char *prefix; /* filename before sequence digits */ + char *suffix; /* after digits, e.g. extensions */ + int digits; + int flags; + int offset; + int start; + int end; } lwClipSeq; typedef struct st_lwClipAnim { - char *name; - char *server; /* anim loader plug-in */ - void *data; + char *name; + char *server; /* anim loader plug-in */ + void *data; } lwClipAnim; typedef struct st_lwClipXRef { - char *string; - int index; - struct st_lwClip *clip; + char *string; + int index; + struct st_lwClip *clip; } lwClipXRef; typedef struct st_lwClipCycle { - char *name; - int lo; - int hi; + char *name; + int lo; + int hi; } lwClipCycle; typedef struct st_lwClip { - struct st_lwClip *next, *prev; - int index; - unsigned int type; /* ID_STIL, ID_ISEQ, etc. */ - union { - lwClipStill still; - lwClipSeq seq; - lwClipAnim anim; - lwClipXRef xref; - lwClipCycle cycle; - } source; - float start_time; - float duration; - float frame_rate; - lwEParam contrast; - lwEParam brightness; - lwEParam saturation; - lwEParam hue; - lwEParam gamma; - int negative; - lwPlugin *ifilter; /* linked list of image filters */ - int nifilters; - lwPlugin *pfilter; /* linked list of pixel filters */ - int npfilters; + struct st_lwClip *next, *prev; + int index; + unsigned int type; /* ID_STIL, ID_ISEQ, etc. */ + union { + lwClipStill still; + lwClipSeq seq; + lwClipAnim anim; + lwClipXRef xref; + lwClipCycle cycle; + } source; + float start_time; + float duration; + float frame_rate; + lwEParam contrast; + lwEParam brightness; + lwEParam saturation; + lwEParam hue; + lwEParam gamma; + int negative; + lwPlugin *ifilter; /* linked list of image filters */ + int nifilters; + lwPlugin *pfilter; /* linked list of pixel filters */ + int npfilters; } lwClip; /* textures */ typedef struct st_lwTMap { - lwVParam size; - lwVParam center; - lwVParam rotate; - lwVParam falloff; - int fall_type; - char *ref_object; - int coord_sys; + lwVParam size; + lwVParam center; + lwVParam rotate; + lwVParam falloff; + int fall_type; + char *ref_object; + int coord_sys; } lwTMap; typedef struct st_lwImageMap { - int cindex; - int projection; - char *vmap_name; - int axis; - int wrapw_type; - int wraph_type; - lwEParam wrapw; - lwEParam wraph; - float aa_strength; - int aas_flags; - int pblend; - lwEParam stck; - lwEParam amplitude; + int cindex; + int projection; + char *vmap_name; + int axis; + int wrapw_type; + int wraph_type; + lwEParam wrapw; + lwEParam wraph; + float aa_strength; + int aas_flags; + int pblend; + lwEParam stck; + lwEParam amplitude; } lwImageMap; #define PROJ_PLANAR 0 @@ -324,214 +324,214 @@ typedef struct st_lwImageMap { #define WRAP_MIRROR 3 typedef struct st_lwProcedural { - int axis; - float value[ 3 ]; - char *name; - void *data; + int axis; + float value[ 3 ]; + char *name; + void *data; } lwProcedural; typedef struct st_lwGradKey { - struct st_lwGradKey *next, *prev; - float value; - float rgba[ 4 ]; + struct st_lwGradKey *next, *prev; + float value; + float rgba[ 4 ]; } lwGradKey; typedef struct st_lwGradient { - char *paramname; - char *itemname; - float start; - float end; - int repeat; - lwGradKey *key; /* array of gradient keys */ - short *ikey; /* array of interpolation codes */ + char *paramname; + char *itemname; + float start; + float end; + int repeat; + lwGradKey *key; /* array of gradient keys */ + short *ikey; /* array of interpolation codes */ } lwGradient; typedef struct st_lwTexture { - struct st_lwTexture *next, *prev; - char *ord; - unsigned int type; - unsigned int chan; - lwEParam opacity; - short opac_type; - short enabled; - short negative; - short axis; - union { - lwImageMap imap; - lwProcedural proc; - lwGradient grad; - } param; - lwTMap tmap; + struct st_lwTexture *next, *prev; + char *ord; + unsigned int type; + unsigned int chan; + lwEParam opacity; + short opac_type; + short enabled; + short negative; + short axis; + union { + lwImageMap imap; + lwProcedural proc; + lwGradient grad; + } param; + lwTMap tmap; } lwTexture; /* values that can be textured */ typedef struct st_lwTParam { - float val; - int eindex; - lwTexture *tex; /* linked list of texture layers */ + float val; + int eindex; + lwTexture *tex; /* linked list of texture layers */ } lwTParam; typedef struct st_lwCParam { - float rgb[ 3 ]; - int eindex; - lwTexture *tex; /* linked list of texture layers */ + float rgb[ 3 ]; + int eindex; + lwTexture *tex; /* linked list of texture layers */ } lwCParam; /* surfaces */ typedef struct st_lwGlow { - short enabled; - short type; - lwEParam intensity; - lwEParam size; + short enabled; + short type; + lwEParam intensity; + lwEParam size; } Glow; typedef struct st_lwRMap { - lwTParam val; - int options; - int cindex; - float seam_angle; + lwTParam val; + int options; + int cindex; + float seam_angle; } lwRMap; typedef struct st_lwLine { - short enabled; - unsigned short flags; - lwEParam size; + short enabled; + unsigned short flags; + lwEParam size; } lwLine; typedef struct st_lwSurface { - struct st_lwSurface *next, *prev; - char *name; - char *srcname; - lwCParam color; - lwTParam luminosity; - lwTParam diffuse; - lwTParam specularity; - lwTParam glossiness; - lwRMap reflection; - lwRMap transparency; - lwTParam eta; - lwTParam translucency; - lwTParam bump; - float smooth; - int sideflags; - float alpha; - int alpha_mode; - lwEParam color_hilite; - lwEParam color_filter; - lwEParam add_trans; - lwEParam dif_sharp; - lwEParam glow; - lwLine line; - lwPlugin *shader; /* linked list of shaders */ - int nshaders; + struct st_lwSurface *next, *prev; + char *name; + char *srcname; + lwCParam color; + lwTParam luminosity; + lwTParam diffuse; + lwTParam specularity; + lwTParam glossiness; + lwRMap reflection; + lwRMap transparency; + lwTParam eta; + lwTParam translucency; + lwTParam bump; + float smooth; + int sideflags; + float alpha; + int alpha_mode; + lwEParam color_hilite; + lwEParam color_filter; + lwEParam add_trans; + lwEParam dif_sharp; + lwEParam glow; + lwLine line; + lwPlugin *shader; /* linked list of shaders */ + int nshaders; } lwSurface; /* vertex maps */ typedef struct st_lwVMap { - struct st_lwVMap *next, *prev; - char *name; - unsigned int type; - int dim; - int nverts; - int perpoly; - int *vindex; /* array of point indexes */ - int *pindex; /* array of polygon indexes */ - float **val; + struct st_lwVMap *next, *prev; + char *name; + unsigned int type; + int dim; + int nverts; + int perpoly; + int *vindex; /* array of point indexes */ + int *pindex; /* array of polygon indexes */ + float **val; } lwVMap; typedef struct st_lwVMapPt { - lwVMap *vmap; - int index; /* vindex or pindex element */ + lwVMap *vmap; + int index; /* vindex or pindex element */ } lwVMapPt; /* points and polygons */ typedef struct st_lwPoint { - float pos[ 3 ]; - int npols; /* number of polygons sharing the point */ - int *pol; /* array of polygon indexes */ - int nvmaps; - lwVMapPt *vm; /* array of vmap references */ + float pos[ 3 ]; + int npols; /* number of polygons sharing the point */ + int *pol; /* array of polygon indexes */ + int nvmaps; + lwVMapPt *vm; /* array of vmap references */ } lwPoint; typedef struct st_lwPolVert { - int index; /* index into the point array */ - float norm[ 3 ]; - int nvmaps; - lwVMapPt *vm; /* array of vmap references */ + int index; /* index into the point array */ + float norm[ 3 ]; + int nvmaps; + lwVMapPt *vm; /* array of vmap references */ } lwPolVert; typedef struct st_lwPolygon { - lwSurface *surf; - int part; /* part index */ - int smoothgrp; /* smoothing group */ - int flags; - unsigned int type; - float norm[ 3 ]; - int nverts; - lwPolVert *v; /* array of vertex records */ + lwSurface *surf; + int part; /* part index */ + int smoothgrp; /* smoothing group */ + int flags; + unsigned int type; + float norm[ 3 ]; + int nverts; + lwPolVert *v; /* array of vertex records */ } lwPolygon; typedef struct st_lwPointList { - int count; - int offset; /* only used during reading */ - lwPoint *pt; /* array of points */ + int count; + int offset; /* only used during reading */ + lwPoint *pt; /* array of points */ } lwPointList; typedef struct st_lwPolygonList { - int count; - int offset; /* only used during reading */ - int vcount; /* total number of vertices */ - int voffset; /* only used during reading */ - lwPolygon *pol; /* array of polygons */ + int count; + int offset; /* only used during reading */ + int vcount; /* total number of vertices */ + int voffset; /* only used during reading */ + lwPolygon *pol; /* array of polygons */ } lwPolygonList; /* geometry layers */ typedef struct st_lwLayer { - struct st_lwLayer *next, *prev; - char *name; - int index; - int parent; - int flags; - float pivot[ 3 ]; - float bbox[ 6 ]; - lwPointList point; - lwPolygonList polygon; - int nvmaps; - lwVMap *vmap; /* linked list of vmaps */ + struct st_lwLayer *next, *prev; + char *name; + int index; + int parent; + int flags; + float pivot[ 3 ]; + float bbox[ 6 ]; + lwPointList point; + lwPolygonList polygon; + int nvmaps; + lwVMap *vmap; /* linked list of vmaps */ } lwLayer; /* tag strings */ typedef struct st_lwTagList { - int count; - int offset; /* only used during reading */ - char **tag; /* array of strings */ + int count; + int offset; /* only used during reading */ + char **tag; /* array of strings */ } lwTagList; /* an object */ typedef struct st_lwObject { - lwLayer *layer; /* linked list of layers */ - lwEnvelope *env; /* linked list of envelopes */ - lwClip *clip; /* linked list of clips */ - lwSurface *surf; /* linked list of surfaces */ - lwTagList taglist; - int nlayers; - int nenvs; - int nclips; - int nsurfs; + lwLayer *layer; /* linked list of layers */ + lwEnvelope *env; /* linked list of envelopes */ + lwClip *clip; /* linked list of clips */ + lwSurface *surf; /* linked list of surfaces */ + lwTagList taglist; + int nlayers; + int nenvs; + int nclips; + int nsurfs; } lwObject; @@ -547,24 +547,24 @@ int lwValidateObject( char *filename, picoMemStream_t *fp, unsigned int *failID, void lwFreePoints( lwPointList *point ); void lwFreePolygons( lwPolygonList *plist ); int lwGetPoints( picoMemStream_t *fp, int cksize, lwPointList *point ); -void lwGetBoundingBox( lwPointList *point, float bbox[] ); +void lwGetBoundingBox( lwPointList * point, float bbox[] ); int lwAllocPolygons( lwPolygonList *plist, int npols, int nverts ); int lwGetPolygons( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset ); void lwGetPolyNormals( lwPointList *point, lwPolygonList *polygon ); int lwGetPointPolygons( lwPointList *point, lwPolygonList *polygon ); int lwResolvePolySurfaces( lwPolygonList *polygon, lwTagList *tlist, - lwSurface **surf, int *nsurfs ); + lwSurface **surf, int *nsurfs ); void lwGetVertNormals( lwPointList *point, lwPolygonList *polygon ); void lwFreeTags( lwTagList *tlist ); int lwGetTags( picoMemStream_t *fp, int cksize, lwTagList *tlist ); int lwGetPolygonTags( picoMemStream_t *fp, int cksize, lwTagList *tlist, - lwPolygonList *plist ); + lwPolygonList *plist ); /* vmap.c */ void lwFreeVMap( lwVMap *vmap ); lwVMap *lwGetVMap( picoMemStream_t *fp, int cksize, int ptoffset, int poloffset, - int perpoly ); + int perpoly ); int lwGetPointVMaps( lwPointList *point, lwVMap *vmap ); int lwGetPolyVMaps( lwPolygonList *polygon, lwVMap *vmap ); @@ -605,17 +605,17 @@ int lwValidateObject5( char *filename, picoMemStream_t *fp, unsigned int *failID /* list.c */ -void lwListFree( void *list, void ( *freeNode )( void * )); +void lwListFree( void *list, void ( *freeNode )( void * ) ); void lwListAdd( void **list, void *node ); void lwListInsert( void **vlist, void *vitem, - int ( *compare )( void *, void * )); + int ( *compare )( void *, void * ) ); /* vecmath.c */ float dot( float a[], float b[] ); void cross( float a[], float b[], float c[] ); void normalize( float v[] ); -#define vecangle( a, b ) ( float ) acos( dot( a, b )) +#define vecangle( a, b ) ( float ) acos( dot( a, b ) ) /* lwio.c */ @@ -643,7 +643,7 @@ float sgetF4( unsigned char **bp ); char *sgetS0( unsigned char **bp ); #ifdef _WIN32 - void revbytes( void *bp, int elsize, int elcount ); +void revbytes( void *bp, int elsize, int elcount ); #else #define revbytes( b, s, c ) #endif diff --git a/libs/picomodel/lwo/lwob.c b/libs/picomodel/lwo/lwob.c index ba34c085..3ae40b43 100644 --- a/libs/picomodel/lwo/lwob.c +++ b/libs/picomodel/lwo/lwob.c @@ -1,12 +1,12 @@ /* -====================================================================== -lwob.c + ====================================================================== + lwob.c -Functions for an LWOB reader. LWOB is the LightWave object format -for versions of LW prior to 6.0. + Functions for an LWOB reader. LWOB is the LightWave object format + for versions of LW prior to 6.0. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" @@ -19,705 +19,800 @@ Ernie Wright 17 Sep 00 /* IDs specific to LWOB */ -#define ID_SRFS LWID_('S','R','F','S') -#define ID_FLAG LWID_('F','L','A','G') -#define ID_VLUM LWID_('V','L','U','M') -#define ID_VDIF LWID_('V','D','I','F') -#define ID_VSPC LWID_('V','S','P','C') -#define ID_RFLT LWID_('R','F','L','T') -#define ID_BTEX LWID_('B','T','E','X') -#define ID_CTEX LWID_('C','T','E','X') -#define ID_DTEX LWID_('D','T','E','X') -#define ID_LTEX LWID_('L','T','E','X') -#define ID_RTEX LWID_('R','T','E','X') -#define ID_STEX LWID_('S','T','E','X') -#define ID_TTEX LWID_('T','T','E','X') -#define ID_TFLG LWID_('T','F','L','G') -#define ID_TSIZ LWID_('T','S','I','Z') -#define ID_TCTR LWID_('T','C','T','R') -#define ID_TFAL LWID_('T','F','A','L') -#define ID_TVEL LWID_('T','V','E','L') -#define ID_TCLR LWID_('T','C','L','R') -#define ID_TVAL LWID_('T','V','A','L') -#define ID_TAMP LWID_('T','A','M','P') -#define ID_TIMG LWID_('T','I','M','G') -#define ID_TAAS LWID_('T','A','A','S') -#define ID_TREF LWID_('T','R','E','F') -#define ID_TOPC LWID_('T','O','P','C') -#define ID_SDAT LWID_('S','D','A','T') -#define ID_TFP0 LWID_('T','F','P','0') -#define ID_TFP1 LWID_('T','F','P','1') +#define ID_SRFS LWID_( 'S','R','F','S' ) +#define ID_FLAG LWID_( 'F','L','A','G' ) +#define ID_VLUM LWID_( 'V','L','U','M' ) +#define ID_VDIF LWID_( 'V','D','I','F' ) +#define ID_VSPC LWID_( 'V','S','P','C' ) +#define ID_RFLT LWID_( 'R','F','L','T' ) +#define ID_BTEX LWID_( 'B','T','E','X' ) +#define ID_CTEX LWID_( 'C','T','E','X' ) +#define ID_DTEX LWID_( 'D','T','E','X' ) +#define ID_LTEX LWID_( 'L','T','E','X' ) +#define ID_RTEX LWID_( 'R','T','E','X' ) +#define ID_STEX LWID_( 'S','T','E','X' ) +#define ID_TTEX LWID_( 'T','T','E','X' ) +#define ID_TFLG LWID_( 'T','F','L','G' ) +#define ID_TSIZ LWID_( 'T','S','I','Z' ) +#define ID_TCTR LWID_( 'T','C','T','R' ) +#define ID_TFAL LWID_( 'T','F','A','L' ) +#define ID_TVEL LWID_( 'T','V','E','L' ) +#define ID_TCLR LWID_( 'T','C','L','R' ) +#define ID_TVAL LWID_( 'T','V','A','L' ) +#define ID_TAMP LWID_( 'T','A','M','P' ) +#define ID_TIMG LWID_( 'T','I','M','G' ) +#define ID_TAAS LWID_( 'T','A','A','S' ) +#define ID_TREF LWID_( 'T','R','E','F' ) +#define ID_TOPC LWID_( 'T','O','P','C' ) +#define ID_SDAT LWID_( 'S','D','A','T' ) +#define ID_TFP0 LWID_( 'T','F','P','0' ) +#define ID_TFP1 LWID_( 'T','F','P','1' ) /* -====================================================================== -add_clip() - -Add a clip to the clip list. Used to store the contents of an RIMG or -TIMG surface subchunk. -====================================================================== */ - -static int add_clip( char *s, lwClip **clist, int *nclips ) -{ - lwClip *clip; - char *p; - - clip = _pico_calloc( 1, sizeof( lwClip )); - if ( !clip ) return 0; - - clip->contrast.val = 1.0f; - clip->brightness.val = 1.0f; - clip->saturation.val = 1.0f; - clip->gamma.val = 1.0f; - - if ( (p = strstr( s, "(sequence)" )) != NULL ) { - p[ -1 ] = 0; - clip->type = ID_ISEQ; - clip->source.seq.prefix = s; - clip->source.seq.digits = 3; - } - else { - clip->type = ID_STIL; - clip->source.still.name = s; - } - - (*nclips)++; - clip->index = *nclips; - - lwListAdd( clist, clip ); - - return clip->index; + ====================================================================== + add_clip() + + Add a clip to the clip list. Used to store the contents of an RIMG or + TIMG surface subchunk. + ====================================================================== */ + +static int add_clip( char *s, lwClip **clist, int *nclips ){ + lwClip *clip; + char *p; + + clip = _pico_calloc( 1, sizeof( lwClip ) ); + if ( !clip ) { + return 0; + } + + clip->contrast.val = 1.0f; + clip->brightness.val = 1.0f; + clip->saturation.val = 1.0f; + clip->gamma.val = 1.0f; + + if ( ( p = strstr( s, "(sequence)" ) ) != NULL ) { + p[ -1 ] = 0; + clip->type = ID_ISEQ; + clip->source.seq.prefix = s; + clip->source.seq.digits = 3; + } + else { + clip->type = ID_STIL; + clip->source.still.name = s; + } + + ( *nclips )++; + clip->index = *nclips; + + lwListAdd( clist, clip ); + + return clip->index; } /* -====================================================================== -add_tvel() - -Add a triple of envelopes to simulate the old texture velocity -parameters. -====================================================================== */ - -static int add_tvel( float pos[], float vel[], lwEnvelope **elist, int *nenvs ) -{ - lwEnvelope *env; - lwKey *key0, *key1; - int i; - - for ( i = 0; i < 3; i++ ) { - env = _pico_calloc( 1, sizeof( lwEnvelope )); - key0 = _pico_calloc( 1, sizeof( lwKey )); - key1 = _pico_calloc( 1, sizeof( lwKey )); - if ( !env || !key0 || !key1 ) return 0; - - key0->next = key1; - key0->value = pos[ i ]; - key0->time = 0.0f; - key1->prev = key0; - key1->value = pos[ i ] + vel[ i ] * 30.0f; - key1->time = 1.0f; - key0->shape = key1->shape = ID_LINE; - - env->index = *nenvs + i + 1; - env->type = 0x0301 + i; - env->name = _pico_alloc( 11 ); - if ( env->name ) { - strcpy( env->name, "Position.X" ); - env->name[ 9 ] += i; - } - env->key = key0; - env->nkeys = 2; - env->behavior[ 0 ] = BEH_LINEAR; - env->behavior[ 1 ] = BEH_LINEAR; - - lwListAdd( elist, env ); - } - - *nenvs += 3; - return env->index - 2; + ====================================================================== + add_tvel() + + Add a triple of envelopes to simulate the old texture velocity + parameters. + ====================================================================== */ + +static int add_tvel( float pos[], float vel[], lwEnvelope **elist, int *nenvs ){ + lwEnvelope *env; + lwKey *key0, *key1; + int i; + + for ( i = 0; i < 3; i++ ) { + env = _pico_calloc( 1, sizeof( lwEnvelope ) ); + key0 = _pico_calloc( 1, sizeof( lwKey ) ); + key1 = _pico_calloc( 1, sizeof( lwKey ) ); + if ( !env || !key0 || !key1 ) { + return 0; + } + + key0->next = key1; + key0->value = pos[ i ]; + key0->time = 0.0f; + key1->prev = key0; + key1->value = pos[ i ] + vel[ i ] * 30.0f; + key1->time = 1.0f; + key0->shape = key1->shape = ID_LINE; + + env->index = *nenvs + i + 1; + env->type = 0x0301 + i; + env->name = _pico_alloc( 11 ); + if ( env->name ) { + strcpy( env->name, "Position.X" ); + env->name[ 9 ] += i; + } + env->key = key0; + env->nkeys = 2; + env->behavior[ 0 ] = BEH_LINEAR; + env->behavior[ 1 ] = BEH_LINEAR; + + lwListAdd( elist, env ); + } + + *nenvs += 3; + return env->index - 2; } /* -====================================================================== -get_texture() - -Create a new texture for BTEX, CTEX, etc. subchunks. -====================================================================== */ - -static lwTexture *get_texture( char *s ) -{ - lwTexture *tex; - - tex = _pico_calloc( 1, sizeof( lwTexture )); - if ( !tex ) return NULL; - - tex->tmap.size.val[ 0 ] = - tex->tmap.size.val[ 1 ] = - tex->tmap.size.val[ 2 ] = 1.0f; - tex->opacity.val = 1.0f; - tex->enabled = 1; - - if ( strstr( s, "Image Map" )) { - tex->type = ID_IMAP; - if ( strstr( s, "Planar" )) tex->param.imap.projection = 0; - else if ( strstr( s, "Cylindrical" )) tex->param.imap.projection = 1; - else if ( strstr( s, "Spherical" )) tex->param.imap.projection = 2; - else if ( strstr( s, "Cubic" )) tex->param.imap.projection = 3; - else if ( strstr( s, "Front" )) tex->param.imap.projection = 4; - tex->param.imap.aa_strength = 1.0f; - tex->param.imap.amplitude.val = 1.0f; - _pico_free( s ); - } - else { - tex->type = ID_PROC; - tex->param.proc.name = s; - } - - return tex; + ====================================================================== + get_texture() + + Create a new texture for BTEX, CTEX, etc. subchunks. + ====================================================================== */ + +static lwTexture *get_texture( char *s ){ + lwTexture *tex; + + tex = _pico_calloc( 1, sizeof( lwTexture ) ); + if ( !tex ) { + return NULL; + } + + tex->tmap.size.val[ 0 ] = + tex->tmap.size.val[ 1 ] = + tex->tmap.size.val[ 2 ] = 1.0f; + tex->opacity.val = 1.0f; + tex->enabled = 1; + + if ( strstr( s, "Image Map" ) ) { + tex->type = ID_IMAP; + if ( strstr( s, "Planar" ) ) { + tex->param.imap.projection = 0; + } + else if ( strstr( s, "Cylindrical" ) ) { + tex->param.imap.projection = 1; + } + else if ( strstr( s, "Spherical" ) ) { + tex->param.imap.projection = 2; + } + else if ( strstr( s, "Cubic" ) ) { + tex->param.imap.projection = 3; + } + else if ( strstr( s, "Front" ) ) { + tex->param.imap.projection = 4; + } + tex->param.imap.aa_strength = 1.0f; + tex->param.imap.amplitude.val = 1.0f; + _pico_free( s ); + } + else { + tex->type = ID_PROC; + tex->param.proc.name = s; + } + + return tex; } /* -====================================================================== -lwGetSurface5() - -Read an lwSurface from an LWOB file. -====================================================================== */ - -lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj ) -{ - lwSurface *surf; - lwTexture *tex; - lwPlugin *shdr; - char *s; - float v[ 3 ]; - unsigned int id, flags; - unsigned short sz; - int pos, rlen, i; - - - /* allocate the Surface structure */ - - surf = _pico_calloc( 1, sizeof( lwSurface )); - if ( !surf ) goto Fail; - - /* non-zero defaults */ - - surf->color.rgb[ 0 ] = 0.78431f; - surf->color.rgb[ 1 ] = 0.78431f; - surf->color.rgb[ 2 ] = 0.78431f; - surf->diffuse.val = 1.0f; - surf->glossiness.val = 0.4f; - surf->bump.val = 1.0f; - surf->eta.val = 1.0f; - surf->sideflags = 1; - - /* remember where we started */ - - set_flen( 0 ); - pos = _pico_memstream_tell( fp ); - - /* name */ - - surf->name = getS0( fp ); - - /* first subchunk header */ - - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) goto Fail; - - /* process subchunks as they're encountered */ - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_COLR: - surf->color.rgb[ 0 ] = getU1( fp ) / 255.0f; - surf->color.rgb[ 1 ] = getU1( fp ) / 255.0f; - surf->color.rgb[ 2 ] = getU1( fp ) / 255.0f; - break; - - case ID_FLAG: - flags = getU2( fp ); - if ( flags & 4 ) surf->smooth = 1.56207f; - if ( flags & 8 ) surf->color_hilite.val = 1.0f; - if ( flags & 16 ) surf->color_filter.val = 1.0f; - if ( flags & 128 ) surf->dif_sharp.val = 0.5f; - if ( flags & 256 ) surf->sideflags = 3; - if ( flags & 512 ) surf->add_trans.val = 1.0f; - break; - - case ID_LUMI: - surf->luminosity.val = getI2( fp ) / 256.0f; - break; - - case ID_VLUM: - surf->luminosity.val = getF4( fp ); - break; - - case ID_DIFF: - surf->diffuse.val = getI2( fp ) / 256.0f; - break; - - case ID_VDIF: - surf->diffuse.val = getF4( fp ); - break; - - case ID_SPEC: - surf->specularity.val = getI2( fp ) / 256.0f; - break; - - case ID_VSPC: - surf->specularity.val = getF4( fp ); - break; - - case ID_GLOS: - surf->glossiness.val = ( float ) log( getU2( fp )) / 20.7944f; - break; - - case ID_SMAN: - surf->smooth = getF4( fp ); - break; - - case ID_REFL: - surf->reflection.val.val = getI2( fp ) / 256.0f; - break; - - case ID_RFLT: - surf->reflection.options = getU2( fp ); - break; - - case ID_RIMG: - s = getS0( fp ); - surf->reflection.cindex = add_clip( s, &obj->clip, &obj->nclips ); - surf->reflection.options = 3; - break; - - case ID_RSAN: - surf->reflection.seam_angle = getF4( fp ); - break; - - case ID_TRAN: - surf->transparency.val.val = getI2( fp ) / 256.0f; - break; - - case ID_RIND: - surf->eta.val = getF4( fp ); - break; - - case ID_BTEX: - s = getbytes( fp, sz ); - tex = get_texture( s ); - lwListAdd( &surf->bump.tex, tex ); - break; - - case ID_CTEX: - s = getbytes( fp, sz ); - tex = get_texture( s ); - lwListAdd( &surf->color.tex, tex ); - break; - - case ID_DTEX: - s = getbytes( fp, sz ); - tex = get_texture( s ); - lwListAdd( &surf->diffuse.tex, tex ); - break; - - case ID_LTEX: - s = getbytes( fp, sz ); - tex = get_texture( s ); - lwListAdd( &surf->luminosity.tex, tex ); - break; - - case ID_RTEX: - s = getbytes( fp, sz ); - tex = get_texture( s ); - lwListAdd( &surf->reflection.val.tex, tex ); - break; - - case ID_STEX: - s = getbytes( fp, sz ); - tex = get_texture( s ); - lwListAdd( &surf->specularity.tex, tex ); - break; - - case ID_TTEX: - s = getbytes( fp, sz ); - tex = get_texture( s ); - lwListAdd( &surf->transparency.val.tex, tex ); - break; - - case ID_TFLG: - flags = getU2( fp ); - - if ( flags & 1 ) i = 0; - if ( flags & 2 ) i = 1; - if ( flags & 4 ) i = 2; - tex->axis = i; - if ( tex->type == ID_IMAP ) - tex->param.imap.axis = i; - else - tex->param.proc.axis = i; - - if ( flags & 8 ) tex->tmap.coord_sys = 1; - if ( flags & 16 ) tex->negative = 1; - if ( flags & 32 ) tex->param.imap.pblend = 1; - if ( flags & 64 ) { - tex->param.imap.aa_strength = 1.0f; - tex->param.imap.aas_flags = 1; - } - break; - - case ID_TSIZ: - for ( i = 0; i < 3; i++ ) - tex->tmap.size.val[ i ] = getF4( fp ); - break; - - case ID_TCTR: - for ( i = 0; i < 3; i++ ) - tex->tmap.center.val[ i ] = getF4( fp ); - break; - - case ID_TFAL: - for ( i = 0; i < 3; i++ ) - tex->tmap.falloff.val[ i ] = getF4( fp ); - break; - - case ID_TVEL: - for ( i = 0; i < 3; i++ ) - v[ i ] = getF4( fp ); - tex->tmap.center.eindex = add_tvel( tex->tmap.center.val, v, - &obj->env, &obj->nenvs ); - break; - - case ID_TCLR: - if ( tex->type == ID_PROC ) - for ( i = 0; i < 3; i++ ) - tex->param.proc.value[ i ] = getU1( fp ) / 255.0f; - break; - - case ID_TVAL: - tex->param.proc.value[ 0 ] = getI2( fp ) / 256.0f; - break; - - case ID_TAMP: - if ( tex->type == ID_IMAP ) - tex->param.imap.amplitude.val = getF4( fp ); - break; - - case ID_TIMG: - s = getS0( fp ); - tex->param.imap.cindex = add_clip( s, &obj->clip, &obj->nclips ); - break; - - case ID_TAAS: - tex->param.imap.aa_strength = getF4( fp ); - tex->param.imap.aas_flags = 1; - break; - - case ID_TREF: - tex->tmap.ref_object = getbytes( fp, sz ); - break; - - case ID_TOPC: - tex->opacity.val = getF4( fp ); - break; - - case ID_TFP0: - if ( tex->type == ID_IMAP ) - tex->param.imap.wrapw.val = getF4( fp ); - break; - - case ID_TFP1: - if ( tex->type == ID_IMAP ) - tex->param.imap.wraph.val = getF4( fp ); - break; - - case ID_SHDR: - shdr = _pico_calloc( 1, sizeof( lwPlugin )); - if ( !shdr ) goto Fail; - shdr->name = getbytes( fp, sz ); - lwListAdd( &surf->shader, shdr ); - surf->nshaders++; - break; - - case ID_SDAT: - shdr->data = getbytes( fp, sz ); - break; - - default: - break; - } - - /* error while reading current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) goto Fail; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the SURF chunk? */ - - if ( cksize <= _pico_memstream_tell( fp ) - pos ) - break; - - /* get the next subchunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) goto Fail; - } - - return surf; + ====================================================================== + lwGetSurface5() + + Read an lwSurface from an LWOB file. + ====================================================================== */ + +lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj ){ + lwSurface *surf; + lwTexture *tex; + lwPlugin *shdr; + char *s; + float v[ 3 ]; + unsigned int id, flags; + unsigned short sz; + int pos, rlen, i; + + + /* allocate the Surface structure */ + + surf = _pico_calloc( 1, sizeof( lwSurface ) ); + if ( !surf ) { + goto Fail; + } + + /* non-zero defaults */ + + surf->color.rgb[ 0 ] = 0.78431f; + surf->color.rgb[ 1 ] = 0.78431f; + surf->color.rgb[ 2 ] = 0.78431f; + surf->diffuse.val = 1.0f; + surf->glossiness.val = 0.4f; + surf->bump.val = 1.0f; + surf->eta.val = 1.0f; + surf->sideflags = 1; + + /* remember where we started */ + + set_flen( 0 ); + pos = _pico_memstream_tell( fp ); + + /* name */ + + surf->name = getS0( fp ); + + /* first subchunk header */ + + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + /* process subchunks as they're encountered */ + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_COLR: + surf->color.rgb[ 0 ] = getU1( fp ) / 255.0f; + surf->color.rgb[ 1 ] = getU1( fp ) / 255.0f; + surf->color.rgb[ 2 ] = getU1( fp ) / 255.0f; + break; + + case ID_FLAG: + flags = getU2( fp ); + if ( flags & 4 ) { + surf->smooth = 1.56207f; + } + if ( flags & 8 ) { + surf->color_hilite.val = 1.0f; + } + if ( flags & 16 ) { + surf->color_filter.val = 1.0f; + } + if ( flags & 128 ) { + surf->dif_sharp.val = 0.5f; + } + if ( flags & 256 ) { + surf->sideflags = 3; + } + if ( flags & 512 ) { + surf->add_trans.val = 1.0f; + } + break; + + case ID_LUMI: + surf->luminosity.val = getI2( fp ) / 256.0f; + break; + + case ID_VLUM: + surf->luminosity.val = getF4( fp ); + break; + + case ID_DIFF: + surf->diffuse.val = getI2( fp ) / 256.0f; + break; + + case ID_VDIF: + surf->diffuse.val = getF4( fp ); + break; + + case ID_SPEC: + surf->specularity.val = getI2( fp ) / 256.0f; + break; + + case ID_VSPC: + surf->specularity.val = getF4( fp ); + break; + + case ID_GLOS: + surf->glossiness.val = ( float ) log( getU2( fp ) ) / 20.7944f; + break; + + case ID_SMAN: + surf->smooth = getF4( fp ); + break; + + case ID_REFL: + surf->reflection.val.val = getI2( fp ) / 256.0f; + break; + + case ID_RFLT: + surf->reflection.options = getU2( fp ); + break; + + case ID_RIMG: + s = getS0( fp ); + surf->reflection.cindex = add_clip( s, &obj->clip, &obj->nclips ); + surf->reflection.options = 3; + break; + + case ID_RSAN: + surf->reflection.seam_angle = getF4( fp ); + break; + + case ID_TRAN: + surf->transparency.val.val = getI2( fp ) / 256.0f; + break; + + case ID_RIND: + surf->eta.val = getF4( fp ); + break; + + case ID_BTEX: + s = getbytes( fp, sz ); + tex = get_texture( s ); + lwListAdd( &surf->bump.tex, tex ); + break; + + case ID_CTEX: + s = getbytes( fp, sz ); + tex = get_texture( s ); + lwListAdd( &surf->color.tex, tex ); + break; + + case ID_DTEX: + s = getbytes( fp, sz ); + tex = get_texture( s ); + lwListAdd( &surf->diffuse.tex, tex ); + break; + + case ID_LTEX: + s = getbytes( fp, sz ); + tex = get_texture( s ); + lwListAdd( &surf->luminosity.tex, tex ); + break; + + case ID_RTEX: + s = getbytes( fp, sz ); + tex = get_texture( s ); + lwListAdd( &surf->reflection.val.tex, tex ); + break; + + case ID_STEX: + s = getbytes( fp, sz ); + tex = get_texture( s ); + lwListAdd( &surf->specularity.tex, tex ); + break; + + case ID_TTEX: + s = getbytes( fp, sz ); + tex = get_texture( s ); + lwListAdd( &surf->transparency.val.tex, tex ); + break; + + case ID_TFLG: + flags = getU2( fp ); + + if ( flags & 1 ) { + i = 0; + } + if ( flags & 2 ) { + i = 1; + } + if ( flags & 4 ) { + i = 2; + } + tex->axis = i; + if ( tex->type == ID_IMAP ) { + tex->param.imap.axis = i; + } + else{ + tex->param.proc.axis = i; + } + + if ( flags & 8 ) { + tex->tmap.coord_sys = 1; + } + if ( flags & 16 ) { + tex->negative = 1; + } + if ( flags & 32 ) { + tex->param.imap.pblend = 1; + } + if ( flags & 64 ) { + tex->param.imap.aa_strength = 1.0f; + tex->param.imap.aas_flags = 1; + } + break; + + case ID_TSIZ: + for ( i = 0; i < 3; i++ ) + tex->tmap.size.val[ i ] = getF4( fp ); + break; + + case ID_TCTR: + for ( i = 0; i < 3; i++ ) + tex->tmap.center.val[ i ] = getF4( fp ); + break; + + case ID_TFAL: + for ( i = 0; i < 3; i++ ) + tex->tmap.falloff.val[ i ] = getF4( fp ); + break; + + case ID_TVEL: + for ( i = 0; i < 3; i++ ) + v[ i ] = getF4( fp ); + tex->tmap.center.eindex = add_tvel( tex->tmap.center.val, v, + &obj->env, &obj->nenvs ); + break; + + case ID_TCLR: + if ( tex->type == ID_PROC ) { + for ( i = 0; i < 3; i++ ) + tex->param.proc.value[ i ] = getU1( fp ) / 255.0f; + } + break; + + case ID_TVAL: + tex->param.proc.value[ 0 ] = getI2( fp ) / 256.0f; + break; + + case ID_TAMP: + if ( tex->type == ID_IMAP ) { + tex->param.imap.amplitude.val = getF4( fp ); + } + break; + + case ID_TIMG: + s = getS0( fp ); + tex->param.imap.cindex = add_clip( s, &obj->clip, &obj->nclips ); + break; + + case ID_TAAS: + tex->param.imap.aa_strength = getF4( fp ); + tex->param.imap.aas_flags = 1; + break; + + case ID_TREF: + tex->tmap.ref_object = getbytes( fp, sz ); + break; + + case ID_TOPC: + tex->opacity.val = getF4( fp ); + break; + + case ID_TFP0: + if ( tex->type == ID_IMAP ) { + tex->param.imap.wrapw.val = getF4( fp ); + } + break; + + case ID_TFP1: + if ( tex->type == ID_IMAP ) { + tex->param.imap.wraph.val = getF4( fp ); + } + break; + + case ID_SHDR: + shdr = _pico_calloc( 1, sizeof( lwPlugin ) ); + if ( !shdr ) { + goto Fail; + } + shdr->name = getbytes( fp, sz ); + lwListAdd( &surf->shader, shdr ); + surf->nshaders++; + break; + + case ID_SDAT: + shdr->data = getbytes( fp, sz ); + break; + + default: + break; + } + + /* error while reading current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + goto Fail; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the SURF chunk? */ + + if ( cksize <= _pico_memstream_tell( fp ) - pos ) { + break; + } + + /* get the next subchunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + goto Fail; + } + } + + return surf; Fail: - if ( surf ) lwFreeSurface( surf ); - return NULL; + if ( surf ) { + lwFreeSurface( surf ); + } + return NULL; } /* -====================================================================== -lwGetPolygons5() - -Read polygon records from a POLS chunk in an LWOB file. The polygons -are added to the array in the lwPolygonList. -====================================================================== */ - -int lwGetPolygons5( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset ) -{ - lwPolygon *pp; - lwPolVert *pv; - unsigned char *buf, *bp; - int i, j, nv, nverts, npols; - - - if ( cksize == 0 ) return 1; - - /* read the whole chunk */ - - set_flen( 0 ); - buf = getbytes( fp, cksize ); - if ( !buf ) goto Fail; - - /* count the polygons and vertices */ - - nverts = 0; - npols = 0; - bp = buf; - - while ( bp < buf + cksize ) { - nv = sgetU2( &bp ); - nverts += nv; - npols++; - bp += 2 * nv; - i = sgetI2( &bp ); - if ( i < 0 ) bp += 2; /* detail polygons */ - } - - if ( !lwAllocPolygons( plist, npols, nverts )) - goto Fail; - - /* fill in the new polygons */ - - bp = buf; - pp = plist->pol + plist->offset; - pv = plist->pol[ 0 ].v + plist->voffset; - - for ( i = 0; i < npols; i++ ) { - nv = sgetU2( &bp ); - - pp->nverts = nv; - pp->type = ID_FACE; - if ( !pp->v ) pp->v = pv; - for ( j = 0; j < nv; j++ ) - pv[ j ].index = sgetU2( &bp ) + ptoffset; - j = sgetI2( &bp ); - if ( j < 0 ) { - j = -j; - bp += 2; - } - j -= 1; - pp->surf = ( lwSurface * ) ((size_t)j); - - pp++; - pv += nv; - } - - _pico_free( buf ); - return 1; + ====================================================================== + lwGetPolygons5() + + Read polygon records from a POLS chunk in an LWOB file. The polygons + are added to the array in the lwPolygonList. + ====================================================================== */ + +int lwGetPolygons5( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset ){ + lwPolygon *pp; + lwPolVert *pv; + unsigned char *buf, *bp; + int i, j, nv, nverts, npols; + + + if ( cksize == 0 ) { + return 1; + } + + /* read the whole chunk */ + + set_flen( 0 ); + buf = getbytes( fp, cksize ); + if ( !buf ) { + goto Fail; + } + + /* count the polygons and vertices */ + + nverts = 0; + npols = 0; + bp = buf; + + while ( bp < buf + cksize ) { + nv = sgetU2( &bp ); + nverts += nv; + npols++; + bp += 2 * nv; + i = sgetI2( &bp ); + if ( i < 0 ) { + bp += 2; /* detail polygons */ + } + } + + if ( !lwAllocPolygons( plist, npols, nverts ) ) { + goto Fail; + } + + /* fill in the new polygons */ + + bp = buf; + pp = plist->pol + plist->offset; + pv = plist->pol[ 0 ].v + plist->voffset; + + for ( i = 0; i < npols; i++ ) { + nv = sgetU2( &bp ); + + pp->nverts = nv; + pp->type = ID_FACE; + if ( !pp->v ) { + pp->v = pv; + } + for ( j = 0; j < nv; j++ ) + pv[ j ].index = sgetU2( &bp ) + ptoffset; + j = sgetI2( &bp ); + if ( j < 0 ) { + j = -j; + bp += 2; + } + j -= 1; + pp->surf = ( lwSurface * ) ( (size_t)j ); + + pp++; + pv += nv; + } + + _pico_free( buf ); + return 1; Fail: - if ( buf ) _pico_free( buf ); - lwFreePolygons( plist ); - return 0; + if ( buf ) { + _pico_free( buf ); + } + lwFreePolygons( plist ); + return 0; } /* -====================================================================== -getLWObject5() + ====================================================================== + getLWObject5() -Returns the contents of an LWOB, given its filename, or NULL if the -file couldn't be loaded. On failure, failID and failpos can be used -to diagnose the cause. + Returns the contents of an LWOB, given its filename, or NULL if the + file couldn't be loaded. On failure, failID and failpos can be used + to diagnose the cause. -1. If the file isn't an LWOB, failpos will contain 12 and failID will + 1. If the file isn't an LWOB, failpos will contain 12 and failID will be unchanged. -2. If an error occurs while reading an LWOB, failID will contain the + 2. If an error occurs while reading an LWOB, failID will contain the most recently read IFF chunk ID, and failpos will contain the value returned by _pico_memstream_tell() at the time of the failure. -3. If the file couldn't be opened, or an error occurs while reading + 3. If the file couldn't be opened, or an error occurs while reading the first 12 bytes, both failID and failpos will be unchanged. -If you don't need this information, failID and failpos can be NULL. -====================================================================== */ - -lwObject *lwGetObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos ) -{ - lwObject *object; - lwLayer *layer; - lwNode *node; - unsigned int id, formsize, type, cksize; - - - /* open the file */ - - if ( !fp ) return NULL; - - /* read the first 12 bytes */ - - set_flen( 0 ); - id = getU4( fp ); - formsize = getU4( fp ); - type = getU4( fp ); - if ( 12 != get_flen() ) { - return NULL; - } - - /* LWOB? */ - - if ( id != ID_FORM || type != ID_LWOB ) { - if ( failpos ) *failpos = 12; - return NULL; - } - - /* allocate an object and a default layer */ - - object = _pico_calloc( 1, sizeof( lwObject )); - if ( !object ) goto Fail; - - layer = _pico_calloc( 1, sizeof( lwLayer )); - if ( !layer ) goto Fail; - object->layer = layer; - object->nlayers = 1; - - /* get the first chunk header */ - - id = getU4( fp ); - cksize = getU4( fp ); - if ( 0 > get_flen() ) goto Fail; - - /* process chunks as they're encountered */ - - while ( 1 ) { - cksize += cksize & 1; - - switch ( id ) - { - case ID_PNTS: - if ( !lwGetPoints( fp, cksize, &layer->point )) - goto Fail; - break; - - case ID_POLS: - if ( !lwGetPolygons5( fp, cksize, &layer->polygon, - layer->point.offset )) - goto Fail; - break; - - case ID_SRFS: - if ( !lwGetTags( fp, cksize, &object->taglist )) - goto Fail; - break; - - case ID_SURF: - node = ( lwNode * ) lwGetSurface5( fp, cksize, object ); - if ( !node ) goto Fail; - lwListAdd( &object->surf, node ); - object->nsurfs++; - break; - - default: - _pico_memstream_seek( fp, cksize, PICO_SEEK_CUR ); - break; - } - - /* end of the file? */ - - if ( formsize <= _pico_memstream_tell( fp ) - 8 ) break; - - /* get the next chunk header */ - - set_flen( 0 ); - id = getU4( fp ); - cksize = getU4( fp ); - if ( 8 != get_flen() ) goto Fail; - } - - lwGetBoundingBox( &layer->point, layer->bbox ); - lwGetPolyNormals( &layer->point, &layer->polygon ); - if ( !lwGetPointPolygons( &layer->point, &layer->polygon )) goto Fail; - if ( !lwResolvePolySurfaces( &layer->polygon, &object->taglist, - &object->surf, &object->nsurfs )) goto Fail; - lwGetVertNormals( &layer->point, &layer->polygon ); - - return object; + If you don't need this information, failID and failpos can be NULL. + ====================================================================== */ + +lwObject *lwGetObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos ){ + lwObject *object; + lwLayer *layer; + lwNode *node; + unsigned int id, formsize, type, cksize; + + + /* open the file */ + + if ( !fp ) { + return NULL; + } + + /* read the first 12 bytes */ + + set_flen( 0 ); + id = getU4( fp ); + formsize = getU4( fp ); + type = getU4( fp ); + if ( 12 != get_flen() ) { + return NULL; + } + + /* LWOB? */ + + if ( id != ID_FORM || type != ID_LWOB ) { + if ( failpos ) { + *failpos = 12; + } + return NULL; + } + + /* allocate an object and a default layer */ + + object = _pico_calloc( 1, sizeof( lwObject ) ); + if ( !object ) { + goto Fail; + } + + layer = _pico_calloc( 1, sizeof( lwLayer ) ); + if ( !layer ) { + goto Fail; + } + object->layer = layer; + object->nlayers = 1; + + /* get the first chunk header */ + + id = getU4( fp ); + cksize = getU4( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + /* process chunks as they're encountered */ + + while ( 1 ) { + cksize += cksize & 1; + + switch ( id ) + { + case ID_PNTS: + if ( !lwGetPoints( fp, cksize, &layer->point ) ) { + goto Fail; + } + break; + + case ID_POLS: + if ( !lwGetPolygons5( fp, cksize, &layer->polygon, + layer->point.offset ) ) { + goto Fail; + } + break; + + case ID_SRFS: + if ( !lwGetTags( fp, cksize, &object->taglist ) ) { + goto Fail; + } + break; + + case ID_SURF: + node = ( lwNode * ) lwGetSurface5( fp, cksize, object ); + if ( !node ) { + goto Fail; + } + lwListAdd( &object->surf, node ); + object->nsurfs++; + break; + + default: + _pico_memstream_seek( fp, cksize, PICO_SEEK_CUR ); + break; + } + + /* end of the file? */ + + if ( formsize <= _pico_memstream_tell( fp ) - 8 ) { + break; + } + + /* get the next chunk header */ + + set_flen( 0 ); + id = getU4( fp ); + cksize = getU4( fp ); + if ( 8 != get_flen() ) { + goto Fail; + } + } + + lwGetBoundingBox( &layer->point, layer->bbox ); + lwGetPolyNormals( &layer->point, &layer->polygon ); + if ( !lwGetPointPolygons( &layer->point, &layer->polygon ) ) { + goto Fail; + } + if ( !lwResolvePolySurfaces( &layer->polygon, &object->taglist, + &object->surf, &object->nsurfs ) ) { + goto Fail; + } + lwGetVertNormals( &layer->point, &layer->polygon ); + + return object; Fail: - if ( failID ) *failID = id; - if ( fp ) { - if ( failpos ) *failpos = _pico_memstream_tell( fp ); - } - lwFreeObject( object ); - return NULL; + if ( failID ) { + *failID = id; + } + if ( fp ) { + if ( failpos ) { + *failpos = _pico_memstream_tell( fp ); + } + } + lwFreeObject( object ); + return NULL; } -int lwValidateObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos ) -{ - unsigned int id, formsize, type; +int lwValidateObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos ){ + unsigned int id, formsize, type; - /* open the file */ + /* open the file */ - if ( !fp ) return PICO_PMV_ERROR_MEMORY; + if ( !fp ) { + return PICO_PMV_ERROR_MEMORY; + } - /* read the first 12 bytes */ + /* read the first 12 bytes */ - set_flen( 0 ); - id = getU4( fp ); - formsize = getU4( fp ); - type = getU4( fp ); - if ( 12 != get_flen() ) { - return PICO_PMV_ERROR_SIZE; - } + set_flen( 0 ); + id = getU4( fp ); + formsize = getU4( fp ); + type = getU4( fp ); + if ( 12 != get_flen() ) { + return PICO_PMV_ERROR_SIZE; + } - /* LWOB? */ + /* LWOB? */ - if ( id != ID_FORM || type != ID_LWOB ) { - if ( failpos ) *failpos = 12; - return PICO_PMV_ERROR_IDENT; - } + if ( id != ID_FORM || type != ID_LWOB ) { + if ( failpos ) { + *failpos = 12; + } + return PICO_PMV_ERROR_IDENT; + } - return PICO_PMV_OK; + return PICO_PMV_OK; } diff --git a/libs/picomodel/lwo/pntspols.c b/libs/picomodel/lwo/pntspols.c index 141975e5..b54a6fab 100644 --- a/libs/picomodel/lwo/pntspols.c +++ b/libs/picomodel/lwo/pntspols.c @@ -1,537 +1,588 @@ /* -====================================================================== -pntspols.c + ====================================================================== + pntspols.c -Point and polygon functions for an LWO2 reader. + Point and polygon functions for an LWO2 reader. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" /* -====================================================================== -lwFreePoints() - -Free the memory used by an lwPointList. -====================================================================== */ - -void lwFreePoints( lwPointList *point ) -{ - int i; - - if ( point ) { - if ( point->pt ) { - for ( i = 0; i < point->count; i++ ) { - if ( point->pt[ i ].pol ) _pico_free( point->pt[ i ].pol ); - if ( point->pt[ i ].vm ) _pico_free( point->pt[ i ].vm ); - } - _pico_free( point->pt ); - } - memset( point, 0, sizeof( lwPointList )); - } + ====================================================================== + lwFreePoints() + + Free the memory used by an lwPointList. + ====================================================================== */ + +void lwFreePoints( lwPointList *point ){ + int i; + + if ( point ) { + if ( point->pt ) { + for ( i = 0; i < point->count; i++ ) { + if ( point->pt[ i ].pol ) { + _pico_free( point->pt[ i ].pol ); + } + if ( point->pt[ i ].vm ) { + _pico_free( point->pt[ i ].vm ); + } + } + _pico_free( point->pt ); + } + memset( point, 0, sizeof( lwPointList ) ); + } } /* -====================================================================== -lwFreePolygons() - -Free the memory used by an lwPolygonList. -====================================================================== */ - -void lwFreePolygons( lwPolygonList *plist ) -{ - int i, j; - - if ( plist ) { - if ( plist->pol ) { - for ( i = 0; i < plist->count; i++ ) { - if ( plist->pol[ i ].v ) { - for ( j = 0; j < plist->pol[ i ].nverts; j++ ) - if ( plist->pol[ i ].v[ j ].vm ) - _pico_free( plist->pol[ i ].v[ j ].vm ); - } - } - if ( plist->pol[ 0 ].v ) - _pico_free( plist->pol[ 0 ].v ); - _pico_free( plist->pol ); - } - memset( plist, 0, sizeof( lwPolygonList )); - } + ====================================================================== + lwFreePolygons() + + Free the memory used by an lwPolygonList. + ====================================================================== */ + +void lwFreePolygons( lwPolygonList *plist ){ + int i, j; + + if ( plist ) { + if ( plist->pol ) { + for ( i = 0; i < plist->count; i++ ) { + if ( plist->pol[ i ].v ) { + for ( j = 0; j < plist->pol[ i ].nverts; j++ ) + if ( plist->pol[ i ].v[ j ].vm ) { + _pico_free( plist->pol[ i ].v[ j ].vm ); + } + } + } + if ( plist->pol[ 0 ].v ) { + _pico_free( plist->pol[ 0 ].v ); + } + _pico_free( plist->pol ); + } + memset( plist, 0, sizeof( lwPolygonList ) ); + } } /* -====================================================================== -lwGetPoints() + ====================================================================== + lwGetPoints() -Read point records from a PNTS chunk in an LWO2 file. The points are -added to the array in the lwPointList. -====================================================================== */ + Read point records from a PNTS chunk in an LWO2 file. The points are + added to the array in the lwPointList. + ====================================================================== */ -int lwGetPoints( picoMemStream_t *fp, int cksize, lwPointList *point ) -{ - float *f; - int np, i, j; +int lwGetPoints( picoMemStream_t *fp, int cksize, lwPointList *point ){ + float *f; + int np, i, j; - if ( cksize == 1 ) return 1; + if ( cksize == 1 ) { + return 1; + } - /* extend the point array to hold the new points */ + /* extend the point array to hold the new points */ - np = cksize / 12; - point->offset = point->count; - point->count += np; - if ( !_pico_realloc( (void *) &point->pt, (point->count - np) * sizeof( lwPoint ), point->count * sizeof( lwPoint )) ) - return 0; - memset( &point->pt[ point->offset ], 0, np * sizeof( lwPoint )); + np = cksize / 12; + point->offset = point->count; + point->count += np; + if ( !_pico_realloc( (void *) &point->pt, ( point->count - np ) * sizeof( lwPoint ), point->count * sizeof( lwPoint ) ) ) { + return 0; + } + memset( &point->pt[ point->offset ], 0, np * sizeof( lwPoint ) ); - /* read the whole chunk */ + /* read the whole chunk */ - f = ( float * ) getbytes( fp, cksize ); - if ( !f ) return 0; - revbytes( f, 4, np * 3 ); + f = ( float * ) getbytes( fp, cksize ); + if ( !f ) { + return 0; + } + revbytes( f, 4, np * 3 ); - /* assign position values */ + /* assign position values */ - for ( i = 0, j = 0; i < np; i++, j += 3 ) { - point->pt[ i ].pos[ 0 ] = f[ j ]; - point->pt[ i ].pos[ 1 ] = f[ j + 1 ]; - point->pt[ i ].pos[ 2 ] = f[ j + 2 ]; - } + for ( i = 0, j = 0; i < np; i++, j += 3 ) { + point->pt[ i ].pos[ 0 ] = f[ j ]; + point->pt[ i ].pos[ 1 ] = f[ j + 1 ]; + point->pt[ i ].pos[ 2 ] = f[ j + 2 ]; + } - _pico_free( f ); - return 1; + _pico_free( f ); + return 1; } /* -====================================================================== -lwGetBoundingBox() - -Calculate the bounding box for a point list, but only if the bounding -box hasn't already been initialized. -====================================================================== */ - -void lwGetBoundingBox( lwPointList *point, float bbox[] ) -{ - int i, j; - - if ( point->count == 0 ) return; - - for ( i = 0; i < 6; i++ ) - if ( bbox[ i ] != 0.0f ) return; - - bbox[ 0 ] = bbox[ 1 ] = bbox[ 2 ] = 1e20f; - bbox[ 3 ] = bbox[ 4 ] = bbox[ 5 ] = -1e20f; - for ( i = 0; i < point->count; i++ ) { - for ( j = 0; j < 3; j++ ) { - if ( bbox[ j ] > point->pt[ i ].pos[ j ] ) - bbox[ j ] = point->pt[ i ].pos[ j ]; - if ( bbox[ j + 3 ] < point->pt[ i ].pos[ j ] ) - bbox[ j + 3 ] = point->pt[ i ].pos[ j ]; - } - } + ====================================================================== + lwGetBoundingBox() + + Calculate the bounding box for a point list, but only if the bounding + box hasn't already been initialized. + ====================================================================== */ + +void lwGetBoundingBox( lwPointList *point, float bbox[] ){ + int i, j; + + if ( point->count == 0 ) { + return; + } + + for ( i = 0; i < 6; i++ ) + if ( bbox[ i ] != 0.0f ) { + return; + } + + bbox[ 0 ] = bbox[ 1 ] = bbox[ 2 ] = 1e20f; + bbox[ 3 ] = bbox[ 4 ] = bbox[ 5 ] = -1e20f; + for ( i = 0; i < point->count; i++ ) { + for ( j = 0; j < 3; j++ ) { + if ( bbox[ j ] > point->pt[ i ].pos[ j ] ) { + bbox[ j ] = point->pt[ i ].pos[ j ]; + } + if ( bbox[ j + 3 ] < point->pt[ i ].pos[ j ] ) { + bbox[ j + 3 ] = point->pt[ i ].pos[ j ]; + } + } + } } /* -====================================================================== -lwAllocPolygons() + ====================================================================== + lwAllocPolygons() -Allocate or extend the polygon arrays to hold new records. -====================================================================== */ + Allocate or extend the polygon arrays to hold new records. + ====================================================================== */ -int lwAllocPolygons( lwPolygonList *plist, int npols, int nverts ) -{ - int i; +int lwAllocPolygons( lwPolygonList *plist, int npols, int nverts ){ + int i; - plist->offset = plist->count; - plist->count += npols; - if ( !_pico_realloc( (void *) &plist->pol, (plist->count - npols) * sizeof( lwPolygon ), plist->count * sizeof( lwPolygon )) ) - return 0; - memset( plist->pol + plist->offset, 0, npols * sizeof( lwPolygon )); + plist->offset = plist->count; + plist->count += npols; + if ( !_pico_realloc( (void *) &plist->pol, ( plist->count - npols ) * sizeof( lwPolygon ), plist->count * sizeof( lwPolygon ) ) ) { + return 0; + } + memset( plist->pol + plist->offset, 0, npols * sizeof( lwPolygon ) ); - plist->voffset = plist->vcount; - plist->vcount += nverts; - if ( !_pico_realloc( (void *) &plist->pol[ 0 ].v, (plist->vcount - nverts) * sizeof( lwPolVert ), plist->vcount * sizeof( lwPolVert )) ) - return 0; - memset( plist->pol[ 0 ].v + plist->voffset, 0, nverts * sizeof( lwPolVert )); + plist->voffset = plist->vcount; + plist->vcount += nverts; + if ( !_pico_realloc( (void *) &plist->pol[ 0 ].v, ( plist->vcount - nverts ) * sizeof( lwPolVert ), plist->vcount * sizeof( lwPolVert ) ) ) { + return 0; + } + memset( plist->pol[ 0 ].v + plist->voffset, 0, nverts * sizeof( lwPolVert ) ); - /* fix up the old vertex pointers */ + /* fix up the old vertex pointers */ - for ( i = 1; i < plist->offset; i++ ) - plist->pol[ i ].v = plist->pol[ i - 1 ].v + plist->pol[ i - 1 ].nverts; + for ( i = 1; i < plist->offset; i++ ) + plist->pol[ i ].v = plist->pol[ i - 1 ].v + plist->pol[ i - 1 ].nverts; - return 1; + return 1; } /* -====================================================================== -lwGetPolygons() - -Read polygon records from a POLS chunk in an LWO2 file. The polygons -are added to the array in the lwPolygonList. -====================================================================== */ - -int lwGetPolygons( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset ) -{ - lwPolygon *pp; - lwPolVert *pv; - unsigned char *buf, *bp; - int i, j, flags, nv, nverts, npols; - unsigned int type; - - - if ( cksize == 0 ) return 1; - - /* read the whole chunk */ - - set_flen( 0 ); - type = getU4( fp ); - buf = getbytes( fp, cksize - 4 ); - if ( cksize != get_flen() ) goto Fail; - - /* count the polygons and vertices */ - - nverts = 0; - npols = 0; - bp = buf; - - while ( bp < buf + cksize - 4 ) { - nv = sgetU2( &bp ); - nv &= 0x03FF; - nverts += nv; - npols++; - for ( i = 0; i < nv; i++ ) - j = sgetVX( &bp ); - } - - if ( !lwAllocPolygons( plist, npols, nverts )) - goto Fail; - - /* fill in the new polygons */ - - bp = buf; - pp = plist->pol + plist->offset; - pv = plist->pol[ 0 ].v + plist->voffset; - - for ( i = 0; i < npols; i++ ) { - nv = sgetU2( &bp ); - flags = nv & 0xFC00; - nv &= 0x03FF; - - pp->nverts = nv; - pp->flags = flags; - pp->type = type; - if ( !pp->v ) pp->v = pv; - for ( j = 0; j < nv; j++ ) - pp->v[ j ].index = sgetVX( &bp ) + ptoffset; - - pp++; - pv += nv; - } - - _pico_free( buf ); - return 1; + ====================================================================== + lwGetPolygons() + + Read polygon records from a POLS chunk in an LWO2 file. The polygons + are added to the array in the lwPolygonList. + ====================================================================== */ + +int lwGetPolygons( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset ){ + lwPolygon *pp; + lwPolVert *pv; + unsigned char *buf, *bp; + int i, j, flags, nv, nverts, npols; + unsigned int type; + + + if ( cksize == 0 ) { + return 1; + } + + /* read the whole chunk */ + + set_flen( 0 ); + type = getU4( fp ); + buf = getbytes( fp, cksize - 4 ); + if ( cksize != get_flen() ) { + goto Fail; + } + + /* count the polygons and vertices */ + + nverts = 0; + npols = 0; + bp = buf; + + while ( bp < buf + cksize - 4 ) { + nv = sgetU2( &bp ); + nv &= 0x03FF; + nverts += nv; + npols++; + for ( i = 0; i < nv; i++ ) + j = sgetVX( &bp ); + } + + if ( !lwAllocPolygons( plist, npols, nverts ) ) { + goto Fail; + } + + /* fill in the new polygons */ + + bp = buf; + pp = plist->pol + plist->offset; + pv = plist->pol[ 0 ].v + plist->voffset; + + for ( i = 0; i < npols; i++ ) { + nv = sgetU2( &bp ); + flags = nv & 0xFC00; + nv &= 0x03FF; + + pp->nverts = nv; + pp->flags = flags; + pp->type = type; + if ( !pp->v ) { + pp->v = pv; + } + for ( j = 0; j < nv; j++ ) + pp->v[ j ].index = sgetVX( &bp ) + ptoffset; + + pp++; + pv += nv; + } + + _pico_free( buf ); + return 1; Fail: - if ( buf ) _pico_free( buf ); - lwFreePolygons( plist ); - return 0; + if ( buf ) { + _pico_free( buf ); + } + lwFreePolygons( plist ); + return 0; } /* -====================================================================== -lwGetPolyNormals() - -Calculate the polygon normals. By convention, LW's polygon normals -are found as the cross product of the first and last edges. It's -undefined for one- and two-point polygons. -====================================================================== */ - -void lwGetPolyNormals( lwPointList *point, lwPolygonList *polygon ) -{ - int i, j; - float p1[ 3 ], p2[ 3 ], pn[ 3 ], v1[ 3 ], v2[ 3 ]; - - for ( i = 0; i < polygon->count; i++ ) { - if ( polygon->pol[ i ].nverts < 3 ) continue; - for ( j = 0; j < 3; j++ ) { - p1[ j ] = point->pt[ polygon->pol[ i ].v[ 0 ].index ].pos[ j ]; - p2[ j ] = point->pt[ polygon->pol[ i ].v[ 1 ].index ].pos[ j ]; - pn[ j ] = point->pt[ polygon->pol[ i ].v[ - polygon->pol[ i ].nverts - 1 ].index ].pos[ j ]; - } - - for ( j = 0; j < 3; j++ ) { - v1[ j ] = p2[ j ] - p1[ j ]; - v2[ j ] = pn[ j ] - p1[ j ]; - } - - cross( v1, v2, polygon->pol[ i ].norm ); - normalize( polygon->pol[ i ].norm ); - } + ====================================================================== + lwGetPolyNormals() + + Calculate the polygon normals. By convention, LW's polygon normals + are found as the cross product of the first and last edges. It's + undefined for one- and two-point polygons. + ====================================================================== */ + +void lwGetPolyNormals( lwPointList *point, lwPolygonList *polygon ){ + int i, j; + float p1[ 3 ], p2[ 3 ], pn[ 3 ], v1[ 3 ], v2[ 3 ]; + + for ( i = 0; i < polygon->count; i++ ) { + if ( polygon->pol[ i ].nverts < 3 ) { + continue; + } + for ( j = 0; j < 3; j++ ) { + p1[ j ] = point->pt[ polygon->pol[ i ].v[ 0 ].index ].pos[ j ]; + p2[ j ] = point->pt[ polygon->pol[ i ].v[ 1 ].index ].pos[ j ]; + pn[ j ] = point->pt[ polygon->pol[ i ].v[ + polygon->pol[ i ].nverts - 1 ].index ].pos[ j ]; + } + + for ( j = 0; j < 3; j++ ) { + v1[ j ] = p2[ j ] - p1[ j ]; + v2[ j ] = pn[ j ] - p1[ j ]; + } + + cross( v1, v2, polygon->pol[ i ].norm ); + normalize( polygon->pol[ i ].norm ); + } } /* -====================================================================== -lwGetPointPolygons() - -For each point, fill in the indexes of the polygons that share the -point. Returns 0 if any of the memory allocations fail, otherwise -returns 1. -====================================================================== */ - -int lwGetPointPolygons( lwPointList *point, lwPolygonList *polygon ) -{ - int i, j, k; - - /* count the number of polygons per point */ - - for ( i = 0; i < polygon->count; i++ ) - for ( j = 0; j < polygon->pol[ i ].nverts; j++ ) - ++point->pt[ polygon->pol[ i ].v[ j ].index ].npols; - - /* alloc per-point polygon arrays */ - - for ( i = 0; i < point->count; i++ ) { - if ( point->pt[ i ].npols == 0 ) continue; - point->pt[ i ].pol = _pico_calloc( point->pt[ i ].npols, sizeof( int )); - if ( !point->pt[ i ].pol ) return 0; - point->pt[ i ].npols = 0; - } - - /* fill in polygon array for each point */ - - for ( i = 0; i < polygon->count; i++ ) { - for ( j = 0; j < polygon->pol[ i ].nverts; j++ ) { - k = polygon->pol[ i ].v[ j ].index; - point->pt[ k ].pol[ point->pt[ k ].npols ] = i; - ++point->pt[ k ].npols; - } - } - - return 1; + ====================================================================== + lwGetPointPolygons() + + For each point, fill in the indexes of the polygons that share the + point. Returns 0 if any of the memory allocations fail, otherwise + returns 1. + ====================================================================== */ + +int lwGetPointPolygons( lwPointList *point, lwPolygonList *polygon ){ + int i, j, k; + + /* count the number of polygons per point */ + + for ( i = 0; i < polygon->count; i++ ) + for ( j = 0; j < polygon->pol[ i ].nverts; j++ ) + ++point->pt[ polygon->pol[ i ].v[ j ].index ].npols; + + /* alloc per-point polygon arrays */ + + for ( i = 0; i < point->count; i++ ) { + if ( point->pt[ i ].npols == 0 ) { + continue; + } + point->pt[ i ].pol = _pico_calloc( point->pt[ i ].npols, sizeof( int ) ); + if ( !point->pt[ i ].pol ) { + return 0; + } + point->pt[ i ].npols = 0; + } + + /* fill in polygon array for each point */ + + for ( i = 0; i < polygon->count; i++ ) { + for ( j = 0; j < polygon->pol[ i ].nverts; j++ ) { + k = polygon->pol[ i ].v[ j ].index; + point->pt[ k ].pol[ point->pt[ k ].npols ] = i; + ++point->pt[ k ].npols; + } + } + + return 1; } /* -====================================================================== -lwResolvePolySurfaces() + ====================================================================== + lwResolvePolySurfaces() -Convert tag indexes into actual lwSurface pointers. If any polygons -point to tags for which no corresponding surface can be found, a -default surface is created. -====================================================================== */ + Convert tag indexes into actual lwSurface pointers. If any polygons + point to tags for which no corresponding surface can be found, a + default surface is created. + ====================================================================== */ int lwResolvePolySurfaces( lwPolygonList *polygon, lwTagList *tlist, - lwSurface **surf, int *nsurfs ) -{ - lwSurface **s, *st; - int i, index; - - if ( tlist->count == 0 ) return 1; - - s = _pico_calloc( tlist->count, sizeof( lwSurface * )); - if ( !s ) return 0; - - for ( i = 0; i < tlist->count; i++ ) { - st = *surf; - while ( st ) { - if ( !strcmp( st->name, tlist->tag[ i ] )) { - s[ i ] = st; - break; - } - st = st->next; - } - } - - for ( i = 0; i < polygon->count; i++ ) { - index = ( int ) ((size_t)polygon->pol[ i ].surf); - if ( index < 0 || index > tlist->count ) return 0; - if ( !s[ index ] ) { - s[ index ] = lwDefaultSurface(); - if ( !s[ index ] ) return 0; - s[ index ]->name = _pico_alloc( strlen( tlist->tag[ index ] ) + 1 ); - if ( !s[ index ]->name ) return 0; - strcpy( s[ index ]->name, tlist->tag[ index ] ); - lwListAdd( surf, s[ index ] ); - *nsurfs = *nsurfs + 1; - } - polygon->pol[ i ].surf = s[ index ]; - } - - _pico_free( s ); - return 1; + lwSurface **surf, int *nsurfs ){ + lwSurface **s, *st; + int i, index; + + if ( tlist->count == 0 ) { + return 1; + } + + s = _pico_calloc( tlist->count, sizeof( lwSurface * ) ); + if ( !s ) { + return 0; + } + + for ( i = 0; i < tlist->count; i++ ) { + st = *surf; + while ( st ) { + if ( !strcmp( st->name, tlist->tag[ i ] ) ) { + s[ i ] = st; + break; + } + st = st->next; + } + } + + for ( i = 0; i < polygon->count; i++ ) { + index = ( int ) ( (size_t)polygon->pol[ i ].surf ); + if ( index < 0 || index > tlist->count ) { + return 0; + } + if ( !s[ index ] ) { + s[ index ] = lwDefaultSurface(); + if ( !s[ index ] ) { + return 0; + } + s[ index ]->name = _pico_alloc( strlen( tlist->tag[ index ] ) + 1 ); + if ( !s[ index ]->name ) { + return 0; + } + strcpy( s[ index ]->name, tlist->tag[ index ] ); + lwListAdd( surf, s[ index ] ); + *nsurfs = *nsurfs + 1; + } + polygon->pol[ i ].surf = s[ index ]; + } + + _pico_free( s ); + return 1; } /* -====================================================================== -lwGetVertNormals() - -Calculate the vertex normals. For each polygon vertex, sum the -normals of the polygons that share the point. If the normals of the -current and adjacent polygons form an angle greater than the max -smoothing angle for the current polygon's surface, the normal of the -adjacent polygon is excluded from the sum. It's also excluded if the -polygons aren't in the same smoothing group. - -Assumes that lwGetPointPolygons(), lwGetPolyNormals() and -lwResolvePolySurfaces() have already been called. -====================================================================== */ - -void lwGetVertNormals( lwPointList *point, lwPolygonList *polygon ) -{ - int j, k, n, g, h, p; - float a; - - for ( j = 0; j < polygon->count; j++ ) { - for ( n = 0; n < polygon->pol[ j ].nverts; n++ ) { - for ( k = 0; k < 3; k++ ) - polygon->pol[ j ].v[ n ].norm[ k ] = polygon->pol[ j ].norm[ k ]; - - if ( polygon->pol[ j ].surf->smooth <= 0 ) continue; - - p = polygon->pol[ j ].v[ n ].index; - - for ( g = 0; g < point->pt[ p ].npols; g++ ) { - h = point->pt[ p ].pol[ g ]; - if ( h == j ) continue; - - if ( polygon->pol[ j ].smoothgrp != polygon->pol[ h ].smoothgrp ) - continue; - a = vecangle( polygon->pol[ j ].norm, polygon->pol[ h ].norm ); - if ( a > polygon->pol[ j ].surf->smooth ) continue; - - for ( k = 0; k < 3; k++ ) - polygon->pol[ j ].v[ n ].norm[ k ] += polygon->pol[ h ].norm[ k ]; - } - - normalize( polygon->pol[ j ].v[ n ].norm ); - } - } + ====================================================================== + lwGetVertNormals() + + Calculate the vertex normals. For each polygon vertex, sum the + normals of the polygons that share the point. If the normals of the + current and adjacent polygons form an angle greater than the max + smoothing angle for the current polygon's surface, the normal of the + adjacent polygon is excluded from the sum. It's also excluded if the + polygons aren't in the same smoothing group. + + Assumes that lwGetPointPolygons(), lwGetPolyNormals() and + lwResolvePolySurfaces() have already been called. + ====================================================================== */ + +void lwGetVertNormals( lwPointList *point, lwPolygonList *polygon ){ + int j, k, n, g, h, p; + float a; + + for ( j = 0; j < polygon->count; j++ ) { + for ( n = 0; n < polygon->pol[ j ].nverts; n++ ) { + for ( k = 0; k < 3; k++ ) + polygon->pol[ j ].v[ n ].norm[ k ] = polygon->pol[ j ].norm[ k ]; + + if ( polygon->pol[ j ].surf->smooth <= 0 ) { + continue; + } + + p = polygon->pol[ j ].v[ n ].index; + + for ( g = 0; g < point->pt[ p ].npols; g++ ) { + h = point->pt[ p ].pol[ g ]; + if ( h == j ) { + continue; + } + + if ( polygon->pol[ j ].smoothgrp != polygon->pol[ h ].smoothgrp ) { + continue; + } + a = vecangle( polygon->pol[ j ].norm, polygon->pol[ h ].norm ); + if ( a > polygon->pol[ j ].surf->smooth ) { + continue; + } + + for ( k = 0; k < 3; k++ ) + polygon->pol[ j ].v[ n ].norm[ k ] += polygon->pol[ h ].norm[ k ]; + } + + normalize( polygon->pol[ j ].v[ n ].norm ); + } + } } /* -====================================================================== -lwFreeTags() - -Free memory used by an lwTagList. -====================================================================== */ - -void lwFreeTags( lwTagList *tlist ) -{ - int i; - - if ( tlist ) { - if ( tlist->tag ) { - for ( i = 0; i < tlist->count; i++ ) - if ( tlist->tag[ i ] ) _pico_free( tlist->tag[ i ] ); - _pico_free( tlist->tag ); - } - memset( tlist, 0, sizeof( lwTagList )); - } + ====================================================================== + lwFreeTags() + + Free memory used by an lwTagList. + ====================================================================== */ + +void lwFreeTags( lwTagList *tlist ){ + int i; + + if ( tlist ) { + if ( tlist->tag ) { + for ( i = 0; i < tlist->count; i++ ) + if ( tlist->tag[ i ] ) { + _pico_free( tlist->tag[ i ] ); + } + _pico_free( tlist->tag ); + } + memset( tlist, 0, sizeof( lwTagList ) ); + } } /* -====================================================================== -lwGetTags() + ====================================================================== + lwGetTags() -Read tag strings from a TAGS chunk in an LWO2 file. The tags are -added to the lwTagList array. -====================================================================== */ + Read tag strings from a TAGS chunk in an LWO2 file. The tags are + added to the lwTagList array. + ====================================================================== */ -int lwGetTags( picoMemStream_t *fp, int cksize, lwTagList *tlist ) -{ - char *buf, *bp; - int i, len, ntags; +int lwGetTags( picoMemStream_t *fp, int cksize, lwTagList *tlist ){ + char *buf, *bp; + int i, len, ntags; - if ( cksize == 0 ) return 1; + if ( cksize == 0 ) { + return 1; + } - /* read the whole chunk */ + /* read the whole chunk */ - set_flen( 0 ); - buf = getbytes( fp, cksize ); - if ( !buf ) return 0; + set_flen( 0 ); + buf = getbytes( fp, cksize ); + if ( !buf ) { + return 0; + } - /* count the strings */ + /* count the strings */ - ntags = 0; - bp = buf; - while ( bp < buf + cksize ) { - len = strlen( bp ) + 1; - len += len & 1; - bp += len; - ++ntags; - } + ntags = 0; + bp = buf; + while ( bp < buf + cksize ) { + len = strlen( bp ) + 1; + len += len & 1; + bp += len; + ++ntags; + } - /* expand the string array to hold the new tags */ + /* expand the string array to hold the new tags */ - tlist->offset = tlist->count; - tlist->count += ntags; - if ( !_pico_realloc( (void *) &tlist->tag, (tlist->count - ntags) * sizeof( char * ), tlist->count * sizeof( char * )) ) - goto Fail; - memset( &tlist->tag[ tlist->offset ], 0, ntags * sizeof( char * )); + tlist->offset = tlist->count; + tlist->count += ntags; + if ( !_pico_realloc( (void *) &tlist->tag, ( tlist->count - ntags ) * sizeof( char * ), tlist->count * sizeof( char * ) ) ) { + goto Fail; + } + memset( &tlist->tag[ tlist->offset ], 0, ntags * sizeof( char * ) ); - /* copy the new tags to the tag array */ + /* copy the new tags to the tag array */ - bp = buf; - for ( i = 0; i < ntags; i++ ) - tlist->tag[ i + tlist->offset ] = sgetS0( &bp ); + bp = buf; + for ( i = 0; i < ntags; i++ ) + tlist->tag[ i + tlist->offset ] = sgetS0( &bp ); - _pico_free( buf ); - return 1; + _pico_free( buf ); + return 1; Fail: - if ( buf ) _pico_free( buf ); - return 0; + if ( buf ) { + _pico_free( buf ); + } + return 0; } /* -====================================================================== -lwGetPolygonTags() + ====================================================================== + lwGetPolygonTags() -Read polygon tags from a PTAG chunk in an LWO2 file. -====================================================================== */ + Read polygon tags from a PTAG chunk in an LWO2 file. + ====================================================================== */ int lwGetPolygonTags( picoMemStream_t *fp, int cksize, lwTagList *tlist, - lwPolygonList *plist ) -{ - unsigned int type; - int rlen = 0, i, j; - - set_flen( 0 ); - type = getU4( fp ); - rlen = get_flen(); - if ( rlen < 0 ) return 0; - - if ( type != ID_SURF && type != ID_PART && type != ID_SMGP ) { - _pico_memstream_seek( fp, cksize - 4, PICO_SEEK_CUR ); - return 1; - } - - while ( rlen < cksize ) { - i = getVX( fp ) + plist->offset; - j = getVX( fp ) + tlist->offset; - rlen = get_flen(); - if ( rlen < 0 || rlen > cksize ) return 0; - - switch ( type ) { - case ID_SURF: plist->pol[ i ].surf = ( lwSurface * ) ((size_t)j); break; - case ID_PART: plist->pol[ i ].part = j; break; - case ID_SMGP: plist->pol[ i ].smoothgrp = j; break; - } - } - - return 1; + lwPolygonList *plist ){ + unsigned int type; + int rlen = 0, i, j; + + set_flen( 0 ); + type = getU4( fp ); + rlen = get_flen(); + if ( rlen < 0 ) { + return 0; + } + + if ( type != ID_SURF && type != ID_PART && type != ID_SMGP ) { + _pico_memstream_seek( fp, cksize - 4, PICO_SEEK_CUR ); + return 1; + } + + while ( rlen < cksize ) { + i = getVX( fp ) + plist->offset; + j = getVX( fp ) + tlist->offset; + rlen = get_flen(); + if ( rlen < 0 || rlen > cksize ) { + return 0; + } + + switch ( type ) { + case ID_SURF: plist->pol[ i ].surf = ( lwSurface * ) ( (size_t)j ); break; + case ID_PART: plist->pol[ i ].part = j; break; + case ID_SMGP: plist->pol[ i ].smoothgrp = j; break; + } + } + + return 1; } diff --git a/libs/picomodel/lwo/surface.c b/libs/picomodel/lwo/surface.c index 6c205df2..07ce4d62 100644 --- a/libs/picomodel/lwo/surface.c +++ b/libs/picomodel/lwo/surface.c @@ -1,1004 +1,1104 @@ /* -====================================================================== -surface.c + ====================================================================== + surface.c -Surface functions for an LWO2 reader. + Surface functions for an LWO2 reader. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" /* -====================================================================== -lwFreePlugin() - -Free the memory used by an lwPlugin. -====================================================================== */ - -void lwFreePlugin( lwPlugin *p ) -{ - if ( p ) { - if ( p->ord ) _pico_free( p->ord ); - if ( p->name ) _pico_free( p->name ); - if ( p->data ) _pico_free( p->data ); - _pico_free( p ); - } + ====================================================================== + lwFreePlugin() + + Free the memory used by an lwPlugin. + ====================================================================== */ + +void lwFreePlugin( lwPlugin *p ){ + if ( p ) { + if ( p->ord ) { + _pico_free( p->ord ); + } + if ( p->name ) { + _pico_free( p->name ); + } + if ( p->data ) { + _pico_free( p->data ); + } + _pico_free( p ); + } } /* -====================================================================== -lwFreeTexture() - -Free the memory used by an lwTexture. -====================================================================== */ - -void lwFreeTexture( lwTexture *t ) -{ - if ( t ) { - if ( t->ord ) _pico_free( t->ord ); - switch ( t->type ) { - case ID_IMAP: - if ( t->param.imap.vmap_name ) _pico_free( t->param.imap.vmap_name ); - break; - case ID_PROC: - if ( t->param.proc.name ) _pico_free( t->param.proc.name ); - if ( t->param.proc.data ) _pico_free( t->param.proc.data ); - break; - case ID_GRAD: - if ( t->param.grad.key ) _pico_free( t->param.grad.key ); - if ( t->param.grad.ikey ) _pico_free( t->param.grad.ikey ); - break; - } - _pico_free( t ); - } + ====================================================================== + lwFreeTexture() + + Free the memory used by an lwTexture. + ====================================================================== */ + +void lwFreeTexture( lwTexture *t ){ + if ( t ) { + if ( t->ord ) { + _pico_free( t->ord ); + } + switch ( t->type ) { + case ID_IMAP: + if ( t->param.imap.vmap_name ) { + _pico_free( t->param.imap.vmap_name ); + } + break; + case ID_PROC: + if ( t->param.proc.name ) { + _pico_free( t->param.proc.name ); + } + if ( t->param.proc.data ) { + _pico_free( t->param.proc.data ); + } + break; + case ID_GRAD: + if ( t->param.grad.key ) { + _pico_free( t->param.grad.key ); + } + if ( t->param.grad.ikey ) { + _pico_free( t->param.grad.ikey ); + } + break; + } + _pico_free( t ); + } } /* -====================================================================== -lwFreeSurface() - -Free the memory used by an lwSurface. -====================================================================== */ - -void lwFreeSurface( lwSurface *surf ) -{ - if ( surf ) { - if ( surf->name ) _pico_free( surf->name ); - if ( surf->srcname ) _pico_free( surf->srcname ); - - lwListFree( surf->shader, lwFreePlugin ); - - lwListFree( surf->color.tex, lwFreeTexture ); - lwListFree( surf->luminosity.tex, lwFreeTexture ); - lwListFree( surf->diffuse.tex, lwFreeTexture ); - lwListFree( surf->specularity.tex, lwFreeTexture ); - lwListFree( surf->glossiness.tex, lwFreeTexture ); - lwListFree( surf->reflection.val.tex, lwFreeTexture ); - lwListFree( surf->transparency.val.tex, lwFreeTexture ); - lwListFree( surf->eta.tex, lwFreeTexture ); - lwListFree( surf->translucency.tex, lwFreeTexture ); - lwListFree( surf->bump.tex, lwFreeTexture ); - - _pico_free( surf ); - } + ====================================================================== + lwFreeSurface() + + Free the memory used by an lwSurface. + ====================================================================== */ + +void lwFreeSurface( lwSurface *surf ){ + if ( surf ) { + if ( surf->name ) { + _pico_free( surf->name ); + } + if ( surf->srcname ) { + _pico_free( surf->srcname ); + } + + lwListFree( surf->shader, lwFreePlugin ); + + lwListFree( surf->color.tex, lwFreeTexture ); + lwListFree( surf->luminosity.tex, lwFreeTexture ); + lwListFree( surf->diffuse.tex, lwFreeTexture ); + lwListFree( surf->specularity.tex, lwFreeTexture ); + lwListFree( surf->glossiness.tex, lwFreeTexture ); + lwListFree( surf->reflection.val.tex, lwFreeTexture ); + lwListFree( surf->transparency.val.tex, lwFreeTexture ); + lwListFree( surf->eta.tex, lwFreeTexture ); + lwListFree( surf->translucency.tex, lwFreeTexture ); + lwListFree( surf->bump.tex, lwFreeTexture ); + + _pico_free( surf ); + } } /* -====================================================================== -lwGetTHeader() + ====================================================================== + lwGetTHeader() -Read a texture map header from a SURF.BLOK in an LWO2 file. This is -the first subchunk in a BLOK, and its contents are common to all three -texture types. -====================================================================== */ + Read a texture map header from a SURF.BLOK in an LWO2 file. This is + the first subchunk in a BLOK, and its contents are common to all three + texture types. + ====================================================================== */ -int lwGetTHeader( picoMemStream_t *fp, int hsz, lwTexture *tex ) -{ - unsigned int id; - unsigned short sz; - int pos, rlen; +int lwGetTHeader( picoMemStream_t *fp, int hsz, lwTexture *tex ){ + unsigned int id; + unsigned short sz; + int pos, rlen; - /* remember where we started */ + /* remember where we started */ - set_flen( 0 ); - pos = _pico_memstream_tell( fp ); + set_flen( 0 ); + pos = _pico_memstream_tell( fp ); - /* ordinal string */ + /* ordinal string */ - tex->ord = getS0( fp ); + tex->ord = getS0( fp ); - /* first subchunk header */ + /* first subchunk header */ - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) return 0; + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + return 0; + } - /* process subchunks as they're encountered */ + /* process subchunks as they're encountered */ - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); - switch ( id ) { - case ID_CHAN: - tex->chan = getU4( fp ); - break; + switch ( id ) { + case ID_CHAN: + tex->chan = getU4( fp ); + break; - case ID_OPAC: - tex->opac_type = getU2( fp ); - tex->opacity.val = getF4( fp ); - tex->opacity.eindex = getVX( fp ); - break; + case ID_OPAC: + tex->opac_type = getU2( fp ); + tex->opacity.val = getF4( fp ); + tex->opacity.eindex = getVX( fp ); + break; - case ID_ENAB: - tex->enabled = getU2( fp ); - break; + case ID_ENAB: + tex->enabled = getU2( fp ); + break; - case ID_NEGA: - tex->negative = getU2( fp ); - break; + case ID_NEGA: + tex->negative = getU2( fp ); + break; - case ID_AXIS: - tex->axis = getU2( fp ); - break; + case ID_AXIS: + tex->axis = getU2( fp ); + break; - default: - break; - } + default: + break; + } - /* error while reading current subchunk? */ + /* error while reading current subchunk? */ - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) return 0; + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + return 0; + } - /* skip unread parts of the current subchunk */ + /* skip unread parts of the current subchunk */ - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } - /* end of the texture header subchunk? */ + /* end of the texture header subchunk? */ - if ( hsz <= _pico_memstream_tell( fp ) - pos ) - break; + if ( hsz <= _pico_memstream_tell( fp ) - pos ) { + break; + } - /* get the next subchunk header */ + /* get the next subchunk header */ - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) return 0; - } + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + return 0; + } + } - set_flen( _pico_memstream_tell( fp ) - pos ); - return 1; + set_flen( _pico_memstream_tell( fp ) - pos ); + return 1; } /* -====================================================================== -lwGetTMap() - -Read a texture map from a SURF.BLOK in an LWO2 file. The TMAP -defines the mapping from texture to world or object coordinates. -====================================================================== */ - -int lwGetTMap( picoMemStream_t *fp, int tmapsz, lwTMap *tmap ) -{ - unsigned int id; - unsigned short sz; - int rlen, pos, i; - - pos = _pico_memstream_tell( fp ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) return 0; - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_SIZE: - for ( i = 0; i < 3; i++ ) - tmap->size.val[ i ] = getF4( fp ); - tmap->size.eindex = getVX( fp ); - break; - - case ID_CNTR: - for ( i = 0; i < 3; i++ ) - tmap->center.val[ i ] = getF4( fp ); - tmap->center.eindex = getVX( fp ); - break; - - case ID_ROTA: - for ( i = 0; i < 3; i++ ) - tmap->rotate.val[ i ] = getF4( fp ); - tmap->rotate.eindex = getVX( fp ); - break; - - case ID_FALL: - tmap->fall_type = getU2( fp ); - for ( i = 0; i < 3; i++ ) - tmap->falloff.val[ i ] = getF4( fp ); - tmap->falloff.eindex = getVX( fp ); - break; - - case ID_OREF: - tmap->ref_object = getS0( fp ); - break; - - case ID_CSYS: - tmap->coord_sys = getU2( fp ); - break; - - default: - break; - } - - /* error while reading the current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) return 0; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the TMAP subchunk? */ - - if ( tmapsz <= _pico_memstream_tell( fp ) - pos ) - break; - - /* get the next subchunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) return 0; - } - - set_flen( _pico_memstream_tell( fp ) - pos ); - return 1; + ====================================================================== + lwGetTMap() + + Read a texture map from a SURF.BLOK in an LWO2 file. The TMAP + defines the mapping from texture to world or object coordinates. + ====================================================================== */ + +int lwGetTMap( picoMemStream_t *fp, int tmapsz, lwTMap *tmap ){ + unsigned int id; + unsigned short sz; + int rlen, pos, i; + + pos = _pico_memstream_tell( fp ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + return 0; + } + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_SIZE: + for ( i = 0; i < 3; i++ ) + tmap->size.val[ i ] = getF4( fp ); + tmap->size.eindex = getVX( fp ); + break; + + case ID_CNTR: + for ( i = 0; i < 3; i++ ) + tmap->center.val[ i ] = getF4( fp ); + tmap->center.eindex = getVX( fp ); + break; + + case ID_ROTA: + for ( i = 0; i < 3; i++ ) + tmap->rotate.val[ i ] = getF4( fp ); + tmap->rotate.eindex = getVX( fp ); + break; + + case ID_FALL: + tmap->fall_type = getU2( fp ); + for ( i = 0; i < 3; i++ ) + tmap->falloff.val[ i ] = getF4( fp ); + tmap->falloff.eindex = getVX( fp ); + break; + + case ID_OREF: + tmap->ref_object = getS0( fp ); + break; + + case ID_CSYS: + tmap->coord_sys = getU2( fp ); + break; + + default: + break; + } + + /* error while reading the current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + return 0; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the TMAP subchunk? */ + + if ( tmapsz <= _pico_memstream_tell( fp ) - pos ) { + break; + } + + /* get the next subchunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + return 0; + } + } + + set_flen( _pico_memstream_tell( fp ) - pos ); + return 1; } /* -====================================================================== -lwGetImageMap() - -Read an lwImageMap from a SURF.BLOK in an LWO2 file. -====================================================================== */ - -int lwGetImageMap( picoMemStream_t *fp, int rsz, lwTexture *tex ) -{ - unsigned int id; - unsigned short sz; - int rlen, pos; - - pos = _pico_memstream_tell( fp ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) return 0; - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_TMAP: - if ( !lwGetTMap( fp, sz, &tex->tmap )) return 0; - break; - - case ID_PROJ: - tex->param.imap.projection = getU2( fp ); - break; - - case ID_VMAP: - tex->param.imap.vmap_name = getS0( fp ); - break; - - case ID_AXIS: - tex->param.imap.axis = getU2( fp ); - break; - - case ID_IMAG: - tex->param.imap.cindex = getVX( fp ); - break; - - case ID_WRAP: - tex->param.imap.wrapw_type = getU2( fp ); - tex->param.imap.wraph_type = getU2( fp ); - break; - - case ID_WRPW: - tex->param.imap.wrapw.val = getF4( fp ); - tex->param.imap.wrapw.eindex = getVX( fp ); - break; - - case ID_WRPH: - tex->param.imap.wraph.val = getF4( fp ); - tex->param.imap.wraph.eindex = getVX( fp ); - break; - - case ID_AAST: - tex->param.imap.aas_flags = getU2( fp ); - tex->param.imap.aa_strength = getF4( fp ); - break; - - case ID_PIXB: - tex->param.imap.pblend = getU2( fp ); - break; - - case ID_STCK: - tex->param.imap.stck.val = getF4( fp ); - tex->param.imap.stck.eindex = getVX( fp ); - break; - - case ID_TAMP: - tex->param.imap.amplitude.val = getF4( fp ); - tex->param.imap.amplitude.eindex = getVX( fp ); - break; - - default: - break; - } - - /* error while reading the current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) return 0; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the image map? */ - - if ( rsz <= _pico_memstream_tell( fp ) - pos ) - break; - - /* get the next subchunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) return 0; - } - - set_flen( _pico_memstream_tell( fp ) - pos ); - return 1; + ====================================================================== + lwGetImageMap() + + Read an lwImageMap from a SURF.BLOK in an LWO2 file. + ====================================================================== */ + +int lwGetImageMap( picoMemStream_t *fp, int rsz, lwTexture *tex ){ + unsigned int id; + unsigned short sz; + int rlen, pos; + + pos = _pico_memstream_tell( fp ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + return 0; + } + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_TMAP: + if ( !lwGetTMap( fp, sz, &tex->tmap ) ) { + return 0; + } + break; + + case ID_PROJ: + tex->param.imap.projection = getU2( fp ); + break; + + case ID_VMAP: + tex->param.imap.vmap_name = getS0( fp ); + break; + + case ID_AXIS: + tex->param.imap.axis = getU2( fp ); + break; + + case ID_IMAG: + tex->param.imap.cindex = getVX( fp ); + break; + + case ID_WRAP: + tex->param.imap.wrapw_type = getU2( fp ); + tex->param.imap.wraph_type = getU2( fp ); + break; + + case ID_WRPW: + tex->param.imap.wrapw.val = getF4( fp ); + tex->param.imap.wrapw.eindex = getVX( fp ); + break; + + case ID_WRPH: + tex->param.imap.wraph.val = getF4( fp ); + tex->param.imap.wraph.eindex = getVX( fp ); + break; + + case ID_AAST: + tex->param.imap.aas_flags = getU2( fp ); + tex->param.imap.aa_strength = getF4( fp ); + break; + + case ID_PIXB: + tex->param.imap.pblend = getU2( fp ); + break; + + case ID_STCK: + tex->param.imap.stck.val = getF4( fp ); + tex->param.imap.stck.eindex = getVX( fp ); + break; + + case ID_TAMP: + tex->param.imap.amplitude.val = getF4( fp ); + tex->param.imap.amplitude.eindex = getVX( fp ); + break; + + default: + break; + } + + /* error while reading the current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + return 0; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the image map? */ + + if ( rsz <= _pico_memstream_tell( fp ) - pos ) { + break; + } + + /* get the next subchunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + return 0; + } + } + + set_flen( _pico_memstream_tell( fp ) - pos ); + return 1; } /* -====================================================================== -lwGetProcedural() - -Read an lwProcedural from a SURF.BLOK in an LWO2 file. -====================================================================== */ - -int lwGetProcedural( picoMemStream_t *fp, int rsz, lwTexture *tex ) -{ - unsigned int id; - unsigned short sz; - int rlen, pos; - - pos = _pico_memstream_tell( fp ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) return 0; - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_TMAP: - if ( !lwGetTMap( fp, sz, &tex->tmap )) return 0; - break; - - case ID_AXIS: - tex->param.proc.axis = getU2( fp ); - break; - - case ID_VALU: - tex->param.proc.value[ 0 ] = getF4( fp ); - if ( sz >= 8 ) tex->param.proc.value[ 1 ] = getF4( fp ); - if ( sz >= 12 ) tex->param.proc.value[ 2 ] = getF4( fp ); - break; - - case ID_FUNC: - tex->param.proc.name = getS0( fp ); - rlen = get_flen(); - tex->param.proc.data = getbytes( fp, sz - rlen ); - break; - - default: - break; - } - - /* error while reading the current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) return 0; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the procedural block? */ - - if ( rsz <= _pico_memstream_tell( fp ) - pos ) - break; - - /* get the next subchunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) return 0; - } - - set_flen( _pico_memstream_tell( fp ) - pos ); - return 1; + ====================================================================== + lwGetProcedural() + + Read an lwProcedural from a SURF.BLOK in an LWO2 file. + ====================================================================== */ + +int lwGetProcedural( picoMemStream_t *fp, int rsz, lwTexture *tex ){ + unsigned int id; + unsigned short sz; + int rlen, pos; + + pos = _pico_memstream_tell( fp ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + return 0; + } + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_TMAP: + if ( !lwGetTMap( fp, sz, &tex->tmap ) ) { + return 0; + } + break; + + case ID_AXIS: + tex->param.proc.axis = getU2( fp ); + break; + + case ID_VALU: + tex->param.proc.value[ 0 ] = getF4( fp ); + if ( sz >= 8 ) { + tex->param.proc.value[ 1 ] = getF4( fp ); + } + if ( sz >= 12 ) { + tex->param.proc.value[ 2 ] = getF4( fp ); + } + break; + + case ID_FUNC: + tex->param.proc.name = getS0( fp ); + rlen = get_flen(); + tex->param.proc.data = getbytes( fp, sz - rlen ); + break; + + default: + break; + } + + /* error while reading the current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + return 0; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the procedural block? */ + + if ( rsz <= _pico_memstream_tell( fp ) - pos ) { + break; + } + + /* get the next subchunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + return 0; + } + } + + set_flen( _pico_memstream_tell( fp ) - pos ); + return 1; } /* -====================================================================== -lwGetGradient() - -Read an lwGradient from a SURF.BLOK in an LWO2 file. -====================================================================== */ - -int lwGetGradient( picoMemStream_t *fp, int rsz, lwTexture *tex ) -{ - unsigned int id; - unsigned short sz; - int rlen, pos, i, j, nkeys; - - pos = _pico_memstream_tell( fp ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) return 0; - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_TMAP: - if ( !lwGetTMap( fp, sz, &tex->tmap )) return 0; - break; - - case ID_PNAM: - tex->param.grad.paramname = getS0( fp ); - break; - - case ID_INAM: - tex->param.grad.itemname = getS0( fp ); - break; - - case ID_GRST: - tex->param.grad.start = getF4( fp ); - break; - - case ID_GREN: - tex->param.grad.end = getF4( fp ); - break; - - case ID_GRPT: - tex->param.grad.repeat = getU2( fp ); - break; - - case ID_FKEY: - nkeys = sz / sizeof( lwGradKey ); - tex->param.grad.key = _pico_calloc( nkeys, sizeof( lwGradKey )); - if ( !tex->param.grad.key ) return 0; - for ( i = 0; i < nkeys; i++ ) { - tex->param.grad.key[ i ].value = getF4( fp ); - for ( j = 0; j < 4; j++ ) - tex->param.grad.key[ i ].rgba[ j ] = getF4( fp ); - } - break; - - case ID_IKEY: - nkeys = sz / 2; - tex->param.grad.ikey = _pico_calloc( nkeys, sizeof( short )); - if ( !tex->param.grad.ikey ) return 0; - for ( i = 0; i < nkeys; i++ ) - tex->param.grad.ikey[ i ] = getU2( fp ); - break; - - default: - break; - } - - /* error while reading the current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) return 0; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the gradient? */ - - if ( rsz <= _pico_memstream_tell( fp ) - pos ) - break; - - /* get the next subchunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) return 0; - } - - set_flen( _pico_memstream_tell( fp ) - pos ); - return 1; + ====================================================================== + lwGetGradient() + + Read an lwGradient from a SURF.BLOK in an LWO2 file. + ====================================================================== */ + +int lwGetGradient( picoMemStream_t *fp, int rsz, lwTexture *tex ){ + unsigned int id; + unsigned short sz; + int rlen, pos, i, j, nkeys; + + pos = _pico_memstream_tell( fp ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + return 0; + } + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_TMAP: + if ( !lwGetTMap( fp, sz, &tex->tmap ) ) { + return 0; + } + break; + + case ID_PNAM: + tex->param.grad.paramname = getS0( fp ); + break; + + case ID_INAM: + tex->param.grad.itemname = getS0( fp ); + break; + + case ID_GRST: + tex->param.grad.start = getF4( fp ); + break; + + case ID_GREN: + tex->param.grad.end = getF4( fp ); + break; + + case ID_GRPT: + tex->param.grad.repeat = getU2( fp ); + break; + + case ID_FKEY: + nkeys = sz / sizeof( lwGradKey ); + tex->param.grad.key = _pico_calloc( nkeys, sizeof( lwGradKey ) ); + if ( !tex->param.grad.key ) { + return 0; + } + for ( i = 0; i < nkeys; i++ ) { + tex->param.grad.key[ i ].value = getF4( fp ); + for ( j = 0; j < 4; j++ ) + tex->param.grad.key[ i ].rgba[ j ] = getF4( fp ); + } + break; + + case ID_IKEY: + nkeys = sz / 2; + tex->param.grad.ikey = _pico_calloc( nkeys, sizeof( short ) ); + if ( !tex->param.grad.ikey ) { + return 0; + } + for ( i = 0; i < nkeys; i++ ) + tex->param.grad.ikey[ i ] = getU2( fp ); + break; + + default: + break; + } + + /* error while reading the current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + return 0; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the gradient? */ + + if ( rsz <= _pico_memstream_tell( fp ) - pos ) { + break; + } + + /* get the next subchunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + return 0; + } + } + + set_flen( _pico_memstream_tell( fp ) - pos ); + return 1; } /* -====================================================================== -lwGetTexture() - -Read an lwTexture from a SURF.BLOK in an LWO2 file. -====================================================================== */ - -lwTexture *lwGetTexture( picoMemStream_t *fp, int bloksz, unsigned int type ) -{ - lwTexture *tex; - unsigned short sz; - int ok; - - tex = _pico_calloc( 1, sizeof( lwTexture )); - if ( !tex ) return NULL; - - tex->type = type; - tex->tmap.size.val[ 0 ] = - tex->tmap.size.val[ 1 ] = - tex->tmap.size.val[ 2 ] = 1.0f; - tex->opacity.val = 1.0f; - tex->enabled = 1; - - sz = getU2( fp ); - if ( !lwGetTHeader( fp, sz, tex )) { - _pico_free( tex ); - return NULL; - } - - sz = bloksz - sz - 6; - switch ( type ) { - case ID_IMAP: ok = lwGetImageMap( fp, sz, tex ); break; - case ID_PROC: ok = lwGetProcedural( fp, sz, tex ); break; - case ID_GRAD: ok = lwGetGradient( fp, sz, tex ); break; - default: - ok = !_pico_memstream_seek( fp, sz, PICO_SEEK_CUR ); - } - - if ( !ok ) { - lwFreeTexture( tex ); - return NULL; - } - - set_flen( bloksz ); - return tex; + ====================================================================== + lwGetTexture() + + Read an lwTexture from a SURF.BLOK in an LWO2 file. + ====================================================================== */ + +lwTexture *lwGetTexture( picoMemStream_t *fp, int bloksz, unsigned int type ){ + lwTexture *tex; + unsigned short sz; + int ok; + + tex = _pico_calloc( 1, sizeof( lwTexture ) ); + if ( !tex ) { + return NULL; + } + + tex->type = type; + tex->tmap.size.val[ 0 ] = + tex->tmap.size.val[ 1 ] = + tex->tmap.size.val[ 2 ] = 1.0f; + tex->opacity.val = 1.0f; + tex->enabled = 1; + + sz = getU2( fp ); + if ( !lwGetTHeader( fp, sz, tex ) ) { + _pico_free( tex ); + return NULL; + } + + sz = bloksz - sz - 6; + switch ( type ) { + case ID_IMAP: ok = lwGetImageMap( fp, sz, tex ); break; + case ID_PROC: ok = lwGetProcedural( fp, sz, tex ); break; + case ID_GRAD: ok = lwGetGradient( fp, sz, tex ); break; + default: + ok = !_pico_memstream_seek( fp, sz, PICO_SEEK_CUR ); + } + + if ( !ok ) { + lwFreeTexture( tex ); + return NULL; + } + + set_flen( bloksz ); + return tex; } /* -====================================================================== -lwGetShader() - -Read a shader record from a SURF.BLOK in an LWO2 file. -====================================================================== */ - -lwPlugin *lwGetShader( picoMemStream_t *fp, int bloksz ) -{ - lwPlugin *shdr; - unsigned int id; - unsigned short sz; - int hsz, rlen, pos; - - shdr = _pico_calloc( 1, sizeof( lwPlugin )); - if ( !shdr ) return NULL; - - pos = _pico_memstream_tell( fp ); - set_flen( 0 ); - hsz = getU2( fp ); - shdr->ord = getS0( fp ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) goto Fail; - - while ( hsz > 0 ) { - sz += sz & 1; - hsz -= sz; - if ( id == ID_ENAB ) { - shdr->flags = getU2( fp ); - break; - } - else { - _pico_memstream_seek( fp, sz, PICO_SEEK_CUR ); - id = getU4( fp ); - sz = getU2( fp ); - } - } - - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) goto Fail; - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_FUNC: - shdr->name = getS0( fp ); - rlen = get_flen(); - shdr->data = getbytes( fp, sz - rlen ); - break; - - default: - break; - } - - /* error while reading the current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) goto Fail; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the shader block? */ - - if ( bloksz <= _pico_memstream_tell( fp ) - pos ) - break; - - /* get the next subchunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) goto Fail; - } - - set_flen( _pico_memstream_tell( fp ) - pos ); - return shdr; + ====================================================================== + lwGetShader() + + Read a shader record from a SURF.BLOK in an LWO2 file. + ====================================================================== */ + +lwPlugin *lwGetShader( picoMemStream_t *fp, int bloksz ){ + lwPlugin *shdr; + unsigned int id; + unsigned short sz; + int hsz, rlen, pos; + + shdr = _pico_calloc( 1, sizeof( lwPlugin ) ); + if ( !shdr ) { + return NULL; + } + + pos = _pico_memstream_tell( fp ); + set_flen( 0 ); + hsz = getU2( fp ); + shdr->ord = getS0( fp ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + while ( hsz > 0 ) { + sz += sz & 1; + hsz -= sz; + if ( id == ID_ENAB ) { + shdr->flags = getU2( fp ); + break; + } + else { + _pico_memstream_seek( fp, sz, PICO_SEEK_CUR ); + id = getU4( fp ); + sz = getU2( fp ); + } + } + + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_FUNC: + shdr->name = getS0( fp ); + rlen = get_flen(); + shdr->data = getbytes( fp, sz - rlen ); + break; + + default: + break; + } + + /* error while reading the current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + goto Fail; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the shader block? */ + + if ( bloksz <= _pico_memstream_tell( fp ) - pos ) { + break; + } + + /* get the next subchunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + goto Fail; + } + } + + set_flen( _pico_memstream_tell( fp ) - pos ); + return shdr; Fail: - lwFreePlugin( shdr ); - return NULL; + lwFreePlugin( shdr ); + return NULL; } /* -====================================================================== -compare_textures() -compare_shaders() + ====================================================================== + compare_textures() + compare_shaders() -Callbacks for the lwListInsert() function, which is called to add -textures to surface channels and shaders to surfaces. -====================================================================== */ + Callbacks for the lwListInsert() function, which is called to add + textures to surface channels and shaders to surfaces. + ====================================================================== */ -static int compare_textures( lwTexture *a, lwTexture *b ) -{ - return strcmp( a->ord, b->ord ); +static int compare_textures( lwTexture *a, lwTexture *b ){ + return strcmp( a->ord, b->ord ); } -static int compare_shaders( lwPlugin *a, lwPlugin *b ) -{ - return strcmp( a->ord, b->ord ); +static int compare_shaders( lwPlugin *a, lwPlugin *b ){ + return strcmp( a->ord, b->ord ); } /* -====================================================================== -add_texture() - -Finds the surface channel (lwTParam or lwCParam) to which a texture is -applied, then calls lwListInsert(). -====================================================================== */ - -static int add_texture( lwSurface *surf, lwTexture *tex ) -{ - lwTexture **list; - - switch ( tex->chan ) { - case ID_COLR: list = &surf->color.tex; break; - case ID_LUMI: list = &surf->luminosity.tex; break; - case ID_DIFF: list = &surf->diffuse.tex; break; - case ID_SPEC: list = &surf->specularity.tex; break; - case ID_GLOS: list = &surf->glossiness.tex; break; - case ID_REFL: list = &surf->reflection.val.tex; break; - case ID_TRAN: list = &surf->transparency.val.tex; break; - case ID_RIND: list = &surf->eta.tex; break; - case ID_TRNL: list = &surf->translucency.tex; break; - case ID_BUMP: list = &surf->bump.tex; break; - default: return 0; - } - - lwListInsert( list, tex, compare_textures ); - return 1; + ====================================================================== + add_texture() + + Finds the surface channel (lwTParam or lwCParam) to which a texture is + applied, then calls lwListInsert(). + ====================================================================== */ + +static int add_texture( lwSurface *surf, lwTexture *tex ){ + lwTexture **list; + + switch ( tex->chan ) { + case ID_COLR: list = &surf->color.tex; break; + case ID_LUMI: list = &surf->luminosity.tex; break; + case ID_DIFF: list = &surf->diffuse.tex; break; + case ID_SPEC: list = &surf->specularity.tex; break; + case ID_GLOS: list = &surf->glossiness.tex; break; + case ID_REFL: list = &surf->reflection.val.tex; break; + case ID_TRAN: list = &surf->transparency.val.tex; break; + case ID_RIND: list = &surf->eta.tex; break; + case ID_TRNL: list = &surf->translucency.tex; break; + case ID_BUMP: list = &surf->bump.tex; break; + default: return 0; + } + + lwListInsert( list, tex, compare_textures ); + return 1; } /* -====================================================================== -lwDefaultSurface() - -Allocate and initialize a surface. -====================================================================== */ - -lwSurface *lwDefaultSurface( void ) -{ - lwSurface *surf; - - surf = _pico_calloc( 1, sizeof( lwSurface )); - if ( !surf ) return NULL; - - surf->color.rgb[ 0 ] = 0.78431f; - surf->color.rgb[ 1 ] = 0.78431f; - surf->color.rgb[ 2 ] = 0.78431f; - surf->diffuse.val = 1.0f; - surf->glossiness.val = 0.4f; - surf->bump.val = 1.0f; - surf->eta.val = 1.0f; - surf->sideflags = 1; - - return surf; + ====================================================================== + lwDefaultSurface() + + Allocate and initialize a surface. + ====================================================================== */ + +lwSurface *lwDefaultSurface( void ){ + lwSurface *surf; + + surf = _pico_calloc( 1, sizeof( lwSurface ) ); + if ( !surf ) { + return NULL; + } + + surf->color.rgb[ 0 ] = 0.78431f; + surf->color.rgb[ 1 ] = 0.78431f; + surf->color.rgb[ 2 ] = 0.78431f; + surf->diffuse.val = 1.0f; + surf->glossiness.val = 0.4f; + surf->bump.val = 1.0f; + surf->eta.val = 1.0f; + surf->sideflags = 1; + + return surf; } /* -====================================================================== -lwGetSurface() - -Read an lwSurface from an LWO2 file. -====================================================================== */ - -lwSurface *lwGetSurface( picoMemStream_t *fp, int cksize ) -{ - lwSurface *surf; - lwTexture *tex; - lwPlugin *shdr; - unsigned int id, type; - unsigned short sz; - int pos, rlen; - - - /* allocate the Surface structure */ + ====================================================================== + lwGetSurface() + + Read an lwSurface from an LWO2 file. + ====================================================================== */ + +lwSurface *lwGetSurface( picoMemStream_t *fp, int cksize ){ + lwSurface *surf; + lwTexture *tex; + lwPlugin *shdr; + unsigned int id, type; + unsigned short sz; + int pos, rlen; - surf = _pico_calloc( 1, sizeof( lwSurface )); - if ( !surf ) goto Fail; - - /* non-zero defaults */ - surf->color.rgb[ 0 ] = 0.78431f; - surf->color.rgb[ 1 ] = 0.78431f; - surf->color.rgb[ 2 ] = 0.78431f; - surf->diffuse.val = 1.0f; - surf->glossiness.val = 0.4f; - surf->bump.val = 1.0f; - surf->eta.val = 1.0f; - surf->sideflags = 1; - - /* remember where we started */ - - set_flen( 0 ); - pos = _pico_memstream_tell( fp ); - - /* names */ - - surf->name = getS0( fp ); - surf->srcname = getS0( fp ); - - /* first subchunk header */ - - id = getU4( fp ); - sz = getU2( fp ); - if ( 0 > get_flen() ) goto Fail; - - /* process subchunks as they're encountered */ - - while ( 1 ) { - sz += sz & 1; - set_flen( 0 ); - - switch ( id ) { - case ID_COLR: - surf->color.rgb[ 0 ] = getF4( fp ); - surf->color.rgb[ 1 ] = getF4( fp ); - surf->color.rgb[ 2 ] = getF4( fp ); - surf->color.eindex = getVX( fp ); - break; - - case ID_LUMI: - surf->luminosity.val = getF4( fp ); - surf->luminosity.eindex = getVX( fp ); - break; - - case ID_DIFF: - surf->diffuse.val = getF4( fp ); - surf->diffuse.eindex = getVX( fp ); - break; - - case ID_SPEC: - surf->specularity.val = getF4( fp ); - surf->specularity.eindex = getVX( fp ); - break; - - case ID_GLOS: - surf->glossiness.val = getF4( fp ); - surf->glossiness.eindex = getVX( fp ); - break; - - case ID_REFL: - surf->reflection.val.val = getF4( fp ); - surf->reflection.val.eindex = getVX( fp ); - break; - - case ID_RFOP: - surf->reflection.options = getU2( fp ); - break; - - case ID_RIMG: - surf->reflection.cindex = getVX( fp ); - break; - - case ID_RSAN: - surf->reflection.seam_angle = getF4( fp ); - break; - - case ID_TRAN: - surf->transparency.val.val = getF4( fp ); - surf->transparency.val.eindex = getVX( fp ); - break; - - case ID_TROP: - surf->transparency.options = getU2( fp ); - break; - - case ID_TIMG: - surf->transparency.cindex = getVX( fp ); - break; - - case ID_RIND: - surf->eta.val = getF4( fp ); - surf->eta.eindex = getVX( fp ); - break; - - case ID_TRNL: - surf->translucency.val = getF4( fp ); - surf->translucency.eindex = getVX( fp ); - break; - - case ID_BUMP: - surf->bump.val = getF4( fp ); - surf->bump.eindex = getVX( fp ); - break; - - case ID_SMAN: - surf->smooth = getF4( fp ); - break; - - case ID_SIDE: - surf->sideflags = getU2( fp ); - break; - - case ID_CLRH: - surf->color_hilite.val = getF4( fp ); - surf->color_hilite.eindex = getVX( fp ); - break; - - case ID_CLRF: - surf->color_filter.val = getF4( fp ); - surf->color_filter.eindex = getVX( fp ); - break; - - case ID_ADTR: - surf->add_trans.val = getF4( fp ); - surf->add_trans.eindex = getVX( fp ); - break; - - case ID_SHRP: - surf->dif_sharp.val = getF4( fp ); - surf->dif_sharp.eindex = getVX( fp ); - break; - - case ID_GVAL: - surf->glow.val = getF4( fp ); - surf->glow.eindex = getVX( fp ); - break; - - case ID_LINE: - surf->line.enabled = 1; - if ( sz >= 2 ) surf->line.flags = getU2( fp ); - if ( sz >= 6 ) surf->line.size.val = getF4( fp ); - if ( sz >= 8 ) surf->line.size.eindex = getVX( fp ); - break; - - case ID_ALPH: - surf->alpha_mode = getU2( fp ); - surf->alpha = getF4( fp ); - break; - - case ID_AVAL: - surf->alpha = getF4( fp ); - break; - - case ID_BLOK: - type = getU4( fp ); - - switch ( type ) { - case ID_IMAP: - case ID_PROC: - case ID_GRAD: - tex = lwGetTexture( fp, sz - 4, type ); - if ( !tex ) goto Fail; - if ( !add_texture( surf, tex )) - lwFreeTexture( tex ); - set_flen( 4 + get_flen() ); - break; - case ID_SHDR: - shdr = lwGetShader( fp, sz - 4 ); - if ( !shdr ) goto Fail; - lwListInsert( &surf->shader, shdr, compare_shaders ); - ++surf->nshaders; - set_flen( 4 + get_flen() ); - break; - } - break; - - default: - break; - } - - /* error while reading current subchunk? */ - - rlen = get_flen(); - if ( rlen < 0 || rlen > sz ) goto Fail; - - /* skip unread parts of the current subchunk */ - - if ( rlen < sz ) - _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); - - /* end of the SURF chunk? */ - - if ( cksize <= _pico_memstream_tell( fp ) - pos ) - break; - - /* get the next subchunk header */ - - set_flen( 0 ); - id = getU4( fp ); - sz = getU2( fp ); - if ( 6 != get_flen() ) goto Fail; - } - - return surf; + /* allocate the Surface structure */ + + surf = _pico_calloc( 1, sizeof( lwSurface ) ); + if ( !surf ) { + goto Fail; + } + + /* non-zero defaults */ + + surf->color.rgb[ 0 ] = 0.78431f; + surf->color.rgb[ 1 ] = 0.78431f; + surf->color.rgb[ 2 ] = 0.78431f; + surf->diffuse.val = 1.0f; + surf->glossiness.val = 0.4f; + surf->bump.val = 1.0f; + surf->eta.val = 1.0f; + surf->sideflags = 1; + + /* remember where we started */ + + set_flen( 0 ); + pos = _pico_memstream_tell( fp ); + + /* names */ + + surf->name = getS0( fp ); + surf->srcname = getS0( fp ); + + /* first subchunk header */ + + id = getU4( fp ); + sz = getU2( fp ); + if ( 0 > get_flen() ) { + goto Fail; + } + + /* process subchunks as they're encountered */ + + while ( 1 ) { + sz += sz & 1; + set_flen( 0 ); + + switch ( id ) { + case ID_COLR: + surf->color.rgb[ 0 ] = getF4( fp ); + surf->color.rgb[ 1 ] = getF4( fp ); + surf->color.rgb[ 2 ] = getF4( fp ); + surf->color.eindex = getVX( fp ); + break; + + case ID_LUMI: + surf->luminosity.val = getF4( fp ); + surf->luminosity.eindex = getVX( fp ); + break; + + case ID_DIFF: + surf->diffuse.val = getF4( fp ); + surf->diffuse.eindex = getVX( fp ); + break; + + case ID_SPEC: + surf->specularity.val = getF4( fp ); + surf->specularity.eindex = getVX( fp ); + break; + + case ID_GLOS: + surf->glossiness.val = getF4( fp ); + surf->glossiness.eindex = getVX( fp ); + break; + + case ID_REFL: + surf->reflection.val.val = getF4( fp ); + surf->reflection.val.eindex = getVX( fp ); + break; + + case ID_RFOP: + surf->reflection.options = getU2( fp ); + break; + + case ID_RIMG: + surf->reflection.cindex = getVX( fp ); + break; + + case ID_RSAN: + surf->reflection.seam_angle = getF4( fp ); + break; + + case ID_TRAN: + surf->transparency.val.val = getF4( fp ); + surf->transparency.val.eindex = getVX( fp ); + break; + + case ID_TROP: + surf->transparency.options = getU2( fp ); + break; + + case ID_TIMG: + surf->transparency.cindex = getVX( fp ); + break; + + case ID_RIND: + surf->eta.val = getF4( fp ); + surf->eta.eindex = getVX( fp ); + break; + + case ID_TRNL: + surf->translucency.val = getF4( fp ); + surf->translucency.eindex = getVX( fp ); + break; + + case ID_BUMP: + surf->bump.val = getF4( fp ); + surf->bump.eindex = getVX( fp ); + break; + + case ID_SMAN: + surf->smooth = getF4( fp ); + break; + + case ID_SIDE: + surf->sideflags = getU2( fp ); + break; + + case ID_CLRH: + surf->color_hilite.val = getF4( fp ); + surf->color_hilite.eindex = getVX( fp ); + break; + + case ID_CLRF: + surf->color_filter.val = getF4( fp ); + surf->color_filter.eindex = getVX( fp ); + break; + + case ID_ADTR: + surf->add_trans.val = getF4( fp ); + surf->add_trans.eindex = getVX( fp ); + break; + + case ID_SHRP: + surf->dif_sharp.val = getF4( fp ); + surf->dif_sharp.eindex = getVX( fp ); + break; + + case ID_GVAL: + surf->glow.val = getF4( fp ); + surf->glow.eindex = getVX( fp ); + break; + + case ID_LINE: + surf->line.enabled = 1; + if ( sz >= 2 ) { + surf->line.flags = getU2( fp ); + } + if ( sz >= 6 ) { + surf->line.size.val = getF4( fp ); + } + if ( sz >= 8 ) { + surf->line.size.eindex = getVX( fp ); + } + break; + + case ID_ALPH: + surf->alpha_mode = getU2( fp ); + surf->alpha = getF4( fp ); + break; + + case ID_AVAL: + surf->alpha = getF4( fp ); + break; + + case ID_BLOK: + type = getU4( fp ); + + switch ( type ) { + case ID_IMAP: + case ID_PROC: + case ID_GRAD: + tex = lwGetTexture( fp, sz - 4, type ); + if ( !tex ) { + goto Fail; + } + if ( !add_texture( surf, tex ) ) { + lwFreeTexture( tex ); + } + set_flen( 4 + get_flen() ); + break; + case ID_SHDR: + shdr = lwGetShader( fp, sz - 4 ); + if ( !shdr ) { + goto Fail; + } + lwListInsert( &surf->shader, shdr, compare_shaders ); + ++surf->nshaders; + set_flen( 4 + get_flen() ); + break; + } + break; + + default: + break; + } + + /* error while reading current subchunk? */ + + rlen = get_flen(); + if ( rlen < 0 || rlen > sz ) { + goto Fail; + } + + /* skip unread parts of the current subchunk */ + + if ( rlen < sz ) { + _pico_memstream_seek( fp, sz - rlen, PICO_SEEK_CUR ); + } + + /* end of the SURF chunk? */ + + if ( cksize <= _pico_memstream_tell( fp ) - pos ) { + break; + } + + /* get the next subchunk header */ + + set_flen( 0 ); + id = getU4( fp ); + sz = getU2( fp ); + if ( 6 != get_flen() ) { + goto Fail; + } + } + + return surf; Fail: - if ( surf ) lwFreeSurface( surf ); - return NULL; + if ( surf ) { + lwFreeSurface( surf ); + } + return NULL; } diff --git a/libs/picomodel/lwo/vecmath.c b/libs/picomodel/lwo/vecmath.c index eaa1e8fc..f4ada601 100644 --- a/libs/picomodel/lwo/vecmath.c +++ b/libs/picomodel/lwo/vecmath.c @@ -1,37 +1,34 @@ /* -====================================================================== -vecmath.c + ====================================================================== + vecmath.c -Basic vector and matrix functions. + Basic vector and matrix functions. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include -float dot( float a[], float b[] ) -{ - return a[ 0 ] * b[ 0 ] + a[ 1 ] * b[ 1 ] + a[ 2 ] * b[ 2 ]; +float dot( float a[], float b[] ){ + return a[ 0 ] * b[ 0 ] + a[ 1 ] * b[ 1 ] + a[ 2 ] * b[ 2 ]; } -void cross( float a[], float b[], float c[] ) -{ - c[ 0 ] = a[ 1 ] * b[ 2 ] - a[ 2 ] * b[ 1 ]; - c[ 1 ] = a[ 2 ] * b[ 0 ] - a[ 0 ] * b[ 2 ]; - c[ 2 ] = a[ 0 ] * b[ 1 ] - a[ 1 ] * b[ 0 ]; +void cross( float a[], float b[], float c[] ){ + c[ 0 ] = a[ 1 ] * b[ 2 ] - a[ 2 ] * b[ 1 ]; + c[ 1 ] = a[ 2 ] * b[ 0 ] - a[ 0 ] * b[ 2 ]; + c[ 2 ] = a[ 0 ] * b[ 1 ] - a[ 1 ] * b[ 0 ]; } -void normalize( float v[] ) -{ - float r; +void normalize( float v[] ){ + float r; - r = ( float ) sqrt( dot( v, v )); - if ( r > 0 ) { - v[ 0 ] /= r; - v[ 1 ] /= r; - v[ 2 ] /= r; - } + r = ( float ) sqrt( dot( v, v ) ); + if ( r > 0 ) { + v[ 0 ] /= r; + v[ 1 ] /= r; + v[ 2 ] /= r; + } } diff --git a/libs/picomodel/lwo/vmap.c b/libs/picomodel/lwo/vmap.c index 69f87cf9..89765725 100644 --- a/libs/picomodel/lwo/vmap.c +++ b/libs/picomodel/lwo/vmap.c @@ -1,243 +1,266 @@ /* -====================================================================== -vmap.c + ====================================================================== + vmap.c -Vertex map functions for an LWO2 reader. + Vertex map functions for an LWO2 reader. -Ernie Wright 17 Sep 00 -====================================================================== */ + Ernie Wright 17 Sep 00 + ====================================================================== */ #include "../picointernal.h" #include "lwo2.h" /* -====================================================================== -lwFreeVMap() - -Free memory used by an lwVMap. -====================================================================== */ - -void lwFreeVMap( lwVMap *vmap ) -{ - if ( vmap ) { - if ( vmap->name ) _pico_free( vmap->name ); - if ( vmap->vindex ) _pico_free( vmap->vindex ); - if ( vmap->pindex ) _pico_free( vmap->pindex ); - if ( vmap->val ) { - if ( vmap->val[ 0 ] ) _pico_free( vmap->val[ 0 ] ); - _pico_free( vmap->val ); - } - _pico_free( vmap ); - } + ====================================================================== + lwFreeVMap() + + Free memory used by an lwVMap. + ====================================================================== */ + +void lwFreeVMap( lwVMap *vmap ){ + if ( vmap ) { + if ( vmap->name ) { + _pico_free( vmap->name ); + } + if ( vmap->vindex ) { + _pico_free( vmap->vindex ); + } + if ( vmap->pindex ) { + _pico_free( vmap->pindex ); + } + if ( vmap->val ) { + if ( vmap->val[ 0 ] ) { + _pico_free( vmap->val[ 0 ] ); + } + _pico_free( vmap->val ); + } + _pico_free( vmap ); + } } /* -====================================================================== -lwGetVMap() + ====================================================================== + lwGetVMap() -Read an lwVMap from a VMAP or VMAD chunk in an LWO2. -====================================================================== */ + Read an lwVMap from a VMAP or VMAD chunk in an LWO2. + ====================================================================== */ lwVMap *lwGetVMap( picoMemStream_t *fp, int cksize, int ptoffset, int poloffset, - int perpoly ) -{ - unsigned char *buf, *bp; - lwVMap *vmap; - float *f; - int i, j, npts, rlen; - - - /* read the whole chunk */ - - set_flen( 0 ); - buf = getbytes( fp, cksize ); - if ( !buf ) return NULL; - - vmap = _pico_calloc( 1, sizeof( lwVMap )); - if ( !vmap ) { - _pico_free( buf ); - return NULL; - } - - /* initialize the vmap */ - - vmap->perpoly = perpoly; - - bp = buf; - set_flen( 0 ); - vmap->type = sgetU4( &bp ); - vmap->dim = sgetU2( &bp ); - vmap->name = sgetS0( &bp ); - rlen = get_flen(); - - /* count the vmap records */ - - npts = 0; - while ( bp < buf + cksize ) { - i = sgetVX( &bp ); - if ( perpoly ) - i = sgetVX( &bp ); - bp += vmap->dim * sizeof( float ); - ++npts; - } - - /* allocate the vmap */ - - vmap->nverts = npts; - vmap->vindex = _pico_calloc( npts, sizeof( int )); - if ( !vmap->vindex ) goto Fail; - if ( perpoly ) { - vmap->pindex = _pico_calloc( npts, sizeof( int )); - if ( !vmap->pindex ) goto Fail; - } - - if ( vmap->dim > 0 ) { - vmap->val = _pico_calloc( npts, sizeof( float * )); - if ( !vmap->val ) goto Fail; - f = _pico_alloc( npts * vmap->dim * sizeof( float )); - if ( !f ) goto Fail; - for ( i = 0; i < npts; i++ ) - vmap->val[ i ] = f + i * vmap->dim; - } - - /* fill in the vmap values */ - - bp = buf + rlen; - for ( i = 0; i < npts; i++ ) { - vmap->vindex[ i ] = sgetVX( &bp ); - if ( perpoly ) - vmap->pindex[ i ] = sgetVX( &bp ); - for ( j = 0; j < vmap->dim; j++ ) - vmap->val[ i ][ j ] = sgetF4( &bp ); - } - - _pico_free( buf ); - return vmap; + int perpoly ){ + unsigned char *buf, *bp; + lwVMap *vmap; + float *f; + int i, j, npts, rlen; + + + /* read the whole chunk */ + + set_flen( 0 ); + buf = getbytes( fp, cksize ); + if ( !buf ) { + return NULL; + } + + vmap = _pico_calloc( 1, sizeof( lwVMap ) ); + if ( !vmap ) { + _pico_free( buf ); + return NULL; + } + + /* initialize the vmap */ + + vmap->perpoly = perpoly; + + bp = buf; + set_flen( 0 ); + vmap->type = sgetU4( &bp ); + vmap->dim = sgetU2( &bp ); + vmap->name = sgetS0( &bp ); + rlen = get_flen(); + + /* count the vmap records */ + + npts = 0; + while ( bp < buf + cksize ) { + i = sgetVX( &bp ); + if ( perpoly ) { + i = sgetVX( &bp ); + } + bp += vmap->dim * sizeof( float ); + ++npts; + } + + /* allocate the vmap */ + + vmap->nverts = npts; + vmap->vindex = _pico_calloc( npts, sizeof( int ) ); + if ( !vmap->vindex ) { + goto Fail; + } + if ( perpoly ) { + vmap->pindex = _pico_calloc( npts, sizeof( int ) ); + if ( !vmap->pindex ) { + goto Fail; + } + } + + if ( vmap->dim > 0 ) { + vmap->val = _pico_calloc( npts, sizeof( float * ) ); + if ( !vmap->val ) { + goto Fail; + } + f = _pico_alloc( npts * vmap->dim * sizeof( float ) ); + if ( !f ) { + goto Fail; + } + for ( i = 0; i < npts; i++ ) + vmap->val[ i ] = f + i * vmap->dim; + } + + /* fill in the vmap values */ + + bp = buf + rlen; + for ( i = 0; i < npts; i++ ) { + vmap->vindex[ i ] = sgetVX( &bp ); + if ( perpoly ) { + vmap->pindex[ i ] = sgetVX( &bp ); + } + for ( j = 0; j < vmap->dim; j++ ) + vmap->val[ i ][ j ] = sgetF4( &bp ); + } + + _pico_free( buf ); + return vmap; Fail: - if ( buf ) _pico_free( buf ); - lwFreeVMap( vmap ); - return NULL; + if ( buf ) { + _pico_free( buf ); + } + lwFreeVMap( vmap ); + return NULL; } /* -====================================================================== -lwGetPointVMaps() - -Fill in the lwVMapPt structure for each point. -====================================================================== */ - -int lwGetPointVMaps( lwPointList *point, lwVMap *vmap ) -{ - lwVMap *vm; - int i, j, n; - - /* count the number of vmap values for each point */ - - vm = vmap; - while ( vm ) { - if ( !vm->perpoly ) - for ( i = 0; i < vm->nverts; i++ ) - ++point->pt[ vm->vindex[ i ]].nvmaps; - vm = vm->next; - } - - /* allocate vmap references for each mapped point */ - - for ( i = 0; i < point->count; i++ ) { - if ( point->pt[ i ].nvmaps ) { - point->pt[ i ].vm = _pico_calloc( point->pt[ i ].nvmaps, sizeof( lwVMapPt )); - if ( !point->pt[ i ].vm ) return 0; - point->pt[ i ].nvmaps = 0; - } - } - - /* fill in vmap references for each mapped point */ - - vm = vmap; - while ( vm ) { - if ( !vm->perpoly ) { - for ( i = 0; i < vm->nverts; i++ ) { - j = vm->vindex[ i ]; - n = point->pt[ j ].nvmaps; - point->pt[ j ].vm[ n ].vmap = vm; - point->pt[ j ].vm[ n ].index = i; - ++point->pt[ j ].nvmaps; - } - } - vm = vm->next; - } - - return 1; + ====================================================================== + lwGetPointVMaps() + + Fill in the lwVMapPt structure for each point. + ====================================================================== */ + +int lwGetPointVMaps( lwPointList *point, lwVMap *vmap ){ + lwVMap *vm; + int i, j, n; + + /* count the number of vmap values for each point */ + + vm = vmap; + while ( vm ) { + if ( !vm->perpoly ) { + for ( i = 0; i < vm->nverts; i++ ) + ++point->pt[ vm->vindex[ i ]].nvmaps; + } + vm = vm->next; + } + + /* allocate vmap references for each mapped point */ + + for ( i = 0; i < point->count; i++ ) { + if ( point->pt[ i ].nvmaps ) { + point->pt[ i ].vm = _pico_calloc( point->pt[ i ].nvmaps, sizeof( lwVMapPt ) ); + if ( !point->pt[ i ].vm ) { + return 0; + } + point->pt[ i ].nvmaps = 0; + } + } + + /* fill in vmap references for each mapped point */ + + vm = vmap; + while ( vm ) { + if ( !vm->perpoly ) { + for ( i = 0; i < vm->nverts; i++ ) { + j = vm->vindex[ i ]; + n = point->pt[ j ].nvmaps; + point->pt[ j ].vm[ n ].vmap = vm; + point->pt[ j ].vm[ n ].index = i; + ++point->pt[ j ].nvmaps; + } + } + vm = vm->next; + } + + return 1; } /* -====================================================================== -lwGetPolyVMaps() - -Fill in the lwVMapPt structure for each polygon vertex. -====================================================================== */ - -int lwGetPolyVMaps( lwPolygonList *polygon, lwVMap *vmap ) -{ - lwVMap *vm; - lwPolVert *pv; - int i, j; - - /* count the number of vmap values for each polygon vertex */ - - vm = vmap; - while ( vm ) { - if ( vm->perpoly ) { - for ( i = 0; i < vm->nverts; i++ ) { - for ( j = 0; j < polygon->pol[ vm->pindex[ i ]].nverts; j++ ) { - pv = &polygon->pol[ vm->pindex[ i ]].v[ j ]; - if ( vm->vindex[ i ] == pv->index ) { - ++pv->nvmaps; - break; - } - } - } - } - vm = vm->next; - } - - /* allocate vmap references for each mapped vertex */ - - for ( i = 0; i < polygon->count; i++ ) { - for ( j = 0; j < polygon->pol[ i ].nverts; j++ ) { - pv = &polygon->pol[ i ].v[ j ]; - if ( pv->nvmaps ) { - pv->vm = _pico_calloc( pv->nvmaps, sizeof( lwVMapPt )); - if ( !pv->vm ) return 0; - pv->nvmaps = 0; - } - } - } - - /* fill in vmap references for each mapped point */ - - vm = vmap; - while ( vm ) { - if ( vm->perpoly ) { - for ( i = 0; i < vm->nverts; i++ ) { - for ( j = 0; j < polygon->pol[ vm->pindex[ i ]].nverts; j++ ) { - pv = &polygon->pol[ vm->pindex[ i ]].v[ j ]; - if ( vm->vindex[ i ] == pv->index ) { - pv->vm[ pv->nvmaps ].vmap = vm; - pv->vm[ pv->nvmaps ].index = i; - ++pv->nvmaps; - break; - } - } - } - } - vm = vm->next; - } - - return 1; + ====================================================================== + lwGetPolyVMaps() + + Fill in the lwVMapPt structure for each polygon vertex. + ====================================================================== */ + +int lwGetPolyVMaps( lwPolygonList *polygon, lwVMap *vmap ){ + lwVMap *vm; + lwPolVert *pv; + int i, j; + + /* count the number of vmap values for each polygon vertex */ + + vm = vmap; + while ( vm ) { + if ( vm->perpoly ) { + for ( i = 0; i < vm->nverts; i++ ) { + for ( j = 0; j < polygon->pol[ vm->pindex[ i ]].nverts; j++ ) { + pv = &polygon->pol[ vm->pindex[ i ]].v[ j ]; + if ( vm->vindex[ i ] == pv->index ) { + ++pv->nvmaps; + break; + } + } + } + } + vm = vm->next; + } + + /* allocate vmap references for each mapped vertex */ + + for ( i = 0; i < polygon->count; i++ ) { + for ( j = 0; j < polygon->pol[ i ].nverts; j++ ) { + pv = &polygon->pol[ i ].v[ j ]; + if ( pv->nvmaps ) { + pv->vm = _pico_calloc( pv->nvmaps, sizeof( lwVMapPt ) ); + if ( !pv->vm ) { + return 0; + } + pv->nvmaps = 0; + } + } + } + + /* fill in vmap references for each mapped point */ + + vm = vmap; + while ( vm ) { + if ( vm->perpoly ) { + for ( i = 0; i < vm->nverts; i++ ) { + for ( j = 0; j < polygon->pol[ vm->pindex[ i ]].nverts; j++ ) { + pv = &polygon->pol[ vm->pindex[ i ]].v[ j ]; + if ( vm->vindex[ i ] == pv->index ) { + pv->vm[ pv->nvmaps ].vmap = vm; + pv->vm[ pv->nvmaps ].index = i; + ++pv->nvmaps; + break; + } + } + } + } + vm = vm->next; + } + + return 1; } diff --git a/libs/picomodel/picointernal.c b/libs/picomodel/picointernal.c index 3e32dd08..d8d316a0 100644 --- a/libs/picomodel/picointernal.c +++ b/libs/picomodel/picointernal.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -50,39 +50,41 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* function pointers */ -void *(*_pico_ptr_malloc )( size_t ) = malloc; -void (*_pico_ptr_free )( void* ) = free; -void (*_pico_ptr_load_file )( char*, unsigned char**, int* ) = NULL; -void (*_pico_ptr_free_file )( void* ) = NULL; -void (*_pico_ptr_print )( int, const char* ) = NULL; +void *( *_pico_ptr_malloc )( size_t ) = malloc; +void ( *_pico_ptr_free )( void* ) = free; +void ( *_pico_ptr_load_file )( char*, unsigned char**, int* ) = NULL; +void ( *_pico_ptr_free_file )( void* ) = NULL; +void ( *_pico_ptr_print )( int, const char* ) = NULL; typedef union { - float f; - char c[4]; + float f; + char c[4]; } floatSwapUnion; /* _pico_alloc: * kludged memory allocation wrapper */ -void *_pico_alloc( size_t size ) -{ +void *_pico_alloc( size_t size ){ void *ptr; /* some sanity checks */ - if( size == 0 ) + if ( size == 0 ) { return NULL; - if (_pico_ptr_malloc == NULL) + } + if ( _pico_ptr_malloc == NULL ) { return NULL; + } /* allocate memory */ - ptr = _pico_ptr_malloc(size); - if (ptr == NULL) + ptr = _pico_ptr_malloc( size ); + if ( ptr == NULL ) { return NULL; + } /* zero out allocated memory */ - memset(ptr,0,size); + memset( ptr,0,size ); /* return pointer to allocated memory */ return ptr; @@ -91,23 +93,25 @@ void *_pico_alloc( size_t size ) /* _pico_calloc: * _pico_calloc wrapper */ -void *_pico_calloc( size_t num, size_t size ) -{ +void *_pico_calloc( size_t num, size_t size ){ void *ptr; /* some sanity checks */ - if( num == 0 || size == 0 ) + if ( num == 0 || size == 0 ) { return NULL; - if (_pico_ptr_malloc == NULL) + } + if ( _pico_ptr_malloc == NULL ) { return NULL; + } /* allocate memory */ - ptr = _pico_ptr_malloc(num*size); - if (ptr == NULL) + ptr = _pico_ptr_malloc( num * size ); + if ( ptr == NULL ) { return NULL; + } /* zero out allocated memory */ - memset(ptr,0,num*size); + memset( ptr,0,num * size ); /* return pointer to allocated memory */ return ptr; @@ -117,30 +121,32 @@ void *_pico_calloc( size_t num, size_t size ) * memory reallocation wrapper (note: only grows, * but never shrinks or frees) */ -void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize ) -{ +void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize ){ void *ptr2; - + /* sanity checks */ - if( ptr == NULL ) + if ( ptr == NULL ) { return NULL; - if( newSize < oldSize ) + } + if ( newSize < oldSize ) { return *ptr; - if (_pico_ptr_malloc == NULL) + } + if ( _pico_ptr_malloc == NULL ) { return NULL; + } /* allocate new pointer */ ptr2 = _pico_alloc( newSize ); - if( ptr2 == NULL ) + if ( ptr2 == NULL ) { return NULL; + } /* copy */ - if( *ptr != NULL ) - { + if ( *ptr != NULL ) { memcpy( ptr2, *ptr, oldSize ); _pico_free( *ptr ); } - + /* fix up and return */ *ptr = ptr2; return *ptr; @@ -155,30 +161,33 @@ void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize ) * as custom clone size (the string is cropped to fit into mem * if needed). -sea */ -char *_pico_clone_alloc( char *str, int size ) -{ +char *_pico_clone_alloc( char *str, int size ){ char *cloned; size_t cloneSize; /* sanity check */ - if (str == NULL) return NULL; + if ( str == NULL ) { + return NULL; + } /* set real size of cloned string */ - cloneSize = (size < 0) ? strlen(str) : size; + cloneSize = ( size < 0 ) ? strlen( str ) : size; /* allocate memory */ - cloned = _pico_alloc( cloneSize+1 ); /* bugfix! */ - if (cloned == NULL) + cloned = _pico_alloc( cloneSize + 1 ); /* bugfix! */ + if ( cloned == NULL ) { return NULL; + } /* zero out memory allocated by cloned string */ memset( cloned,0,cloneSize ); /* copy input string to cloned string */ - if (cloneSize < strlen( str )) { + if ( cloneSize < strlen( str ) ) { memcpy( cloned,str,cloneSize ); cloned[ cloneSize ] = '\0'; - } else { + } + else { strcpy( cloned,str ); } /* return ptr to cloned string */ @@ -188,31 +197,29 @@ char *_pico_clone_alloc( char *str, int size ) /* _pico_free: * wrapper around the free function pointer */ -void _pico_free( void *ptr ) -{ +void _pico_free( void *ptr ){ /* sanity checks */ - if( ptr == NULL ) + if ( ptr == NULL ) { return; - if (_pico_ptr_free == NULL) + } + if ( _pico_ptr_free == NULL ) { return; + } /* free the allocated memory */ - _pico_ptr_free( ptr ); + _pico_ptr_free( ptr ); } /* _pico_load_file: * wrapper around the loadfile function pointer */ -void _pico_load_file( char *name, unsigned char **buffer, int *bufSize ) -{ +void _pico_load_file( char *name, unsigned char **buffer, int *bufSize ){ /* sanity checks */ - if( name == NULL ) - { + if ( name == NULL ) { *bufSize = -1; return; } - if (_pico_ptr_load_file == NULL) - { + if ( _pico_ptr_load_file == NULL ) { *bufSize = -1; return; } @@ -224,15 +231,14 @@ void _pico_load_file( char *name, unsigned char **buffer, int *bufSize ) /* _pico_free_file: * wrapper around the file free function pointer */ -void _pico_free_file( void *buffer ) -{ +void _pico_free_file( void *buffer ){ /* sanity checks */ - if( buffer == NULL ) + if ( buffer == NULL ) { return; + } /* use default free */ - if( _pico_ptr_free_file == NULL ) - { + if ( _pico_ptr_free_file == NULL ) { free( buffer ); return; } @@ -243,16 +249,17 @@ void _pico_free_file( void *buffer ) /* _pico_printf: * wrapper around the print function pointer -sea */ -void _pico_printf( int level, const char *format, ...) -{ - char str[4096]; - va_list argptr; +void _pico_printf( int level, const char *format, ... ){ + char str[4096]; + va_list argptr; /* sanity checks */ - if( format == NULL ) + if ( format == NULL ) { return; - if (_pico_ptr_print == NULL) + } + if ( _pico_ptr_print == NULL ) { return; + } /* format string */ va_start( argptr,format ); @@ -260,8 +267,9 @@ void _pico_printf( int level, const char *format, ...) va_end( argptr ); /* remove linefeeds */ - if (str[ strlen(str)-1 ] == '\n') - str[ strlen(str)-1 ] = '\0'; + if ( str[ strlen( str ) - 1 ] == '\n' ) { + str[ strlen( str ) - 1 ] = '\0'; + } /* do the actual call */ _pico_ptr_print( level,str ); @@ -270,53 +278,53 @@ void _pico_printf( int level, const char *format, ...) /* _pico_strltrim: * left trims the given string -sea */ -char *_pico_strltrim( char *str ) -{ +char *_pico_strltrim( char *str ){ char *str1 = str, *str2 = str; - while (isspace(*str2)) str2++; - if( str2 != str ) - while( *str2 != '\0' ) /* fix: ydnar */ + while ( isspace( *str2 ) ) str2++; + if ( str2 != str ) { + while ( *str2 != '\0' ) /* fix: ydnar */ *str1++ = *str2++; + } return str; } /* _pico_strrtrim: * right trims the given string -sea */ -char *_pico_strrtrim( char *str ) -{ - if (str && *str) - { +char *_pico_strrtrim( char *str ){ + if ( str && *str ) { char *str1 = str; int allspace = 1; - while (*str1) + while ( *str1 ) { - if (allspace && !isspace(*str1)) allspace = 0; + if ( allspace && !isspace( *str1 ) ) { + allspace = 0; + } str1++; } - if (allspace) *str = '\0'; + if ( allspace ) { + *str = '\0'; + } else { str1--; - while ((isspace(*str1)) && (str1 >= str)) + while ( ( isspace( *str1 ) ) && ( str1 >= str ) ) *str1-- = '\0'; } } - return str; + return str; } /* _pico_strlwr: * pico internal string-to-lower routine. */ -char *_pico_strlwr( char *str ) -{ +char *_pico_strlwr( char *str ){ char *cp; - for (cp=str; *cp; ++cp) + for ( cp = str; *cp; ++cp ) { - if ('A' <= *cp && *cp <= 'Z') - { - *cp += ('a' - 'A'); + if ( 'A' <= *cp && *cp <= 'Z' ) { + *cp += ( 'a' - 'A' ); } } return str; @@ -325,79 +333,74 @@ char *_pico_strlwr( char *str ) /* _pico_strchcount: * counts how often the given char appears in str. -sea */ -int _pico_strchcount( char *str, int ch ) -{ +int _pico_strchcount( char *str, int ch ){ int count = 0; - while (*str++) if (*str == ch) count++; + while ( *str++ ) if ( *str == ch ) { + count++; + } return count; } -void _pico_zero_bounds( picoVec3_t mins, picoVec3_t maxs ) -{ +void _pico_zero_bounds( picoVec3_t mins, picoVec3_t maxs ){ int i; - for (i=0; i<3; i++) + for ( i = 0; i < 3; i++ ) { mins[i] = +999999; maxs[i] = -999999; } } -void _pico_expand_bounds( picoVec3_t p, picoVec3_t mins, picoVec3_t maxs ) -{ +void _pico_expand_bounds( picoVec3_t p, picoVec3_t mins, picoVec3_t maxs ){ int i; - for (i=0; i<3; i++) + for ( i = 0; i < 3; i++ ) { float value = p[i]; - if (value < mins[i]) mins[i] = value; - if (value > maxs[i]) maxs[i] = value; + if ( value < mins[i] ) { + mins[i] = value; + } + if ( value > maxs[i] ) { + maxs[i] = value; + } } } -void _pico_zero_vec( picoVec3_t vec ) -{ +void _pico_zero_vec( picoVec3_t vec ){ vec[ 0 ] = vec[ 1 ] = vec[ 2 ] = 0; } -void _pico_zero_vec2( picoVec2_t vec ) -{ +void _pico_zero_vec2( picoVec2_t vec ){ vec[ 0 ] = vec[ 1 ] = 0; } -void _pico_zero_vec4( picoVec4_t vec ) -{ +void _pico_zero_vec4( picoVec4_t vec ){ vec[ 0 ] = vec[ 1 ] = vec[ 2 ] = vec[ 3 ] = 0; } -void _pico_set_vec( picoVec3_t v, float a, float b, float c ) -{ +void _pico_set_vec( picoVec3_t v, float a, float b, float c ){ v[ 0 ] = a; v[ 1 ] = b; v[ 2 ] = c; } -void _pico_set_vec4( picoVec4_t v, float a, float b, float c, float d ) -{ +void _pico_set_vec4( picoVec4_t v, float a, float b, float c, float d ){ v[ 0 ] = a; v[ 1 ] = b; v[ 2 ] = c; v[ 3 ] = d; } -void _pico_copy_vec( picoVec3_t src, picoVec3_t dest ) -{ +void _pico_copy_vec( picoVec3_t src, picoVec3_t dest ){ dest[ 0 ] = src[ 0 ]; dest[ 1 ] = src[ 1 ]; dest[ 2 ] = src[ 2 ]; } -void _pico_copy_vec2( picoVec2_t src, picoVec2_t dest ) -{ +void _pico_copy_vec2( picoVec2_t src, picoVec2_t dest ){ dest[ 0 ] = src[ 0 ]; dest[ 1 ] = src[ 1 ]; } -void _pico_copy_vec4( picoVec4_t src, picoVec4_t dest ) -{ +void _pico_copy_vec4( picoVec4_t src, picoVec4_t dest ){ dest[ 0 ] = src[ 0 ]; dest[ 1 ] = src[ 1 ]; dest[ 2 ] = src[ 2 ]; @@ -405,12 +408,13 @@ void _pico_copy_vec4( picoVec4_t src, picoVec4_t dest ) } /* ydnar */ -picoVec_t _pico_normalize_vec( picoVec3_t vec ) -{ - double len, ilen; - +picoVec_t _pico_normalize_vec( picoVec3_t vec ){ + double len, ilen; + len = sqrt( vec[ 0 ] * vec[ 0 ] + vec[ 1 ] * vec[ 1 ] + vec[ 2 ] * vec[ 2 ] ); - if( len == 0.0 ) return 0.0; + if ( len == 0.0 ) { + return 0.0; + } ilen = 1.0 / len; vec[ 0 ] *= (picoVec_t) ilen; vec[ 1 ] *= (picoVec_t) ilen; @@ -418,50 +422,43 @@ picoVec_t _pico_normalize_vec( picoVec3_t vec ) return (picoVec_t) len; } -void _pico_add_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ) -{ +void _pico_add_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ){ dest[ 0 ] = a[ 0 ] + b[ 0 ]; dest[ 1 ] = a[ 1 ] + b[ 1 ]; dest[ 2 ] = a[ 2 ] + b[ 2 ]; } -void _pico_subtract_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ) -{ +void _pico_subtract_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ){ dest[ 0 ] = a[ 0 ] - b[ 0 ]; dest[ 1 ] = a[ 1 ] - b[ 1 ]; dest[ 2 ] = a[ 2 ] - b[ 2 ]; } -void _pico_scale_vec( picoVec3_t v, float scale, picoVec3_t dest ) -{ +void _pico_scale_vec( picoVec3_t v, float scale, picoVec3_t dest ){ dest[ 0 ] = v[ 0 ] * scale; dest[ 1 ] = v[ 1 ] * scale; dest[ 2 ] = v[ 2 ] * scale; } -void _pico_scale_vec4( picoVec4_t v, float scale, picoVec4_t dest ) -{ +void _pico_scale_vec4( picoVec4_t v, float scale, picoVec4_t dest ){ dest[ 0 ] = v[ 0 ] * scale; dest[ 1 ] = v[ 1 ] * scale; dest[ 2 ] = v[ 2 ] * scale; dest[ 3 ] = v[ 3 ] * scale; } -picoVec_t _pico_dot_vec( picoVec3_t a, picoVec3_t b ) -{ +picoVec_t _pico_dot_vec( picoVec3_t a, picoVec3_t b ){ return a[ 0 ] * b[ 0 ] + a[ 1 ] * b[ 1 ] + a[ 2 ] * b[ 2 ]; } -void _pico_cross_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ) -{ +void _pico_cross_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ){ dest[ 0 ] = a[ 1 ] * b[ 2 ] - a[ 2 ] * b[ 1 ]; dest[ 1 ] = a[ 2 ] * b[ 0 ] - a[ 0 ] * b[ 2 ]; dest[ 2 ] = a[ 0 ] * b[ 1 ] - a[ 1 ] * b[ 0 ]; } -picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVec3_t c ) -{ - picoVec3_t ba, ca; +picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVec3_t c ){ + picoVec3_t ba, ca; _pico_subtract_vec( b, a, ba ); _pico_subtract_vec( c, a, ca ); @@ -471,16 +468,14 @@ picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVe } /* separate from _pico_set_vec4 */ -void _pico_set_color( picoColor_t c, int r, int g, int b, int a ) -{ +void _pico_set_color( picoColor_t c, int r, int g, int b, int a ){ c[ 0 ] = r; c[ 1 ] = g; c[ 2 ] = b; c[ 3 ] = a; } -void _pico_copy_color( picoColor_t src, picoColor_t dest ) -{ +void _pico_copy_color( picoColor_t src, picoColor_t dest ){ dest[ 0 ] = src[ 0 ]; dest[ 1 ] = src[ 1 ]; dest[ 2 ] = src[ 2 ]; @@ -489,26 +484,23 @@ void _pico_copy_color( picoColor_t src, picoColor_t dest ) #ifdef __BIG_ENDIAN__ -int _pico_big_long ( int src ) { return src; } +int _pico_big_long( int src ) { return src; } short _pico_big_short( short src ) { return src; } float _pico_big_float( float src ) { return src; } -int _pico_little_long( int src ) -{ - return ((src & 0xFF000000) >> 24) | - ((src & 0x00FF0000) >> 8) | - ((src & 0x0000FF00) << 8) | - ((src & 0x000000FF) << 24); +int _pico_little_long( int src ){ + return ( ( src & 0xFF000000 ) >> 24 ) | + ( ( src & 0x00FF0000 ) >> 8 ) | + ( ( src & 0x0000FF00 ) << 8 ) | + ( ( src & 0x000000FF ) << 24 ); } -short _pico_little_short( short src ) -{ - return ((src & 0xFF00) >> 8) | - ((src & 0x00FF) << 8); +short _pico_little_short( short src ){ + return ( ( src & 0xFF00 ) >> 8 ) | + ( ( src & 0x00FF ) << 8 ); } -float _pico_little_float( float src ) -{ +float _pico_little_float( float src ){ floatSwapUnion in,out; in.f = src; out.c[ 0 ] = in.c[ 3 ]; @@ -519,26 +511,23 @@ float _pico_little_float( float src ) } #else /*__BIG_ENDIAN__*/ -int _pico_little_long ( int src ) { return src; } +int _pico_little_long( int src ) { return src; } short _pico_little_short( short src ) { return src; } float _pico_little_float( float src ) { return src; } - -int _pico_big_long( int src ) -{ - return ((src & 0xFF000000) >> 24) | - ((src & 0x00FF0000) >> 8) | - ((src & 0x0000FF00) << 8) | - ((src & 0x000000FF) << 24); + +int _pico_big_long( int src ){ + return ( ( src & 0xFF000000 ) >> 24 ) | + ( ( src & 0x00FF0000 ) >> 8 ) | + ( ( src & 0x0000FF00 ) << 8 ) | + ( ( src & 0x000000FF ) << 24 ); } - -short _pico_big_short( short src ) -{ - return ((src & 0xFF00) >> 8) | - ((src & 0x00FF) << 8); + +short _pico_big_short( short src ){ + return ( ( src & 0xFF00 ) >> 8 ) | + ( ( src & 0x00FF ) << 8 ); } - -float _pico_big_float( float src ) -{ + +float _pico_big_float( float src ){ floatSwapUnion in,out; in.f = src; out.c[ 0 ] = in.c[ 3 ]; @@ -552,31 +541,35 @@ float _pico_big_float( float src ) /* _pico_stristr: * case-insensitive strstr. -sea */ -char *_pico_stristr( char *str, const char *substr ) -{ - const int sublen = strlen(substr); - while (*str) +char *_pico_stristr( char *str, const char *substr ){ + const int sublen = strlen( substr ); + while ( *str ) { - if (!_pico_strnicmp(str,substr,sublen)) break; + if ( !_pico_strnicmp( str,substr,sublen ) ) { + break; + } str++; } - if (!(*str)) str = NULL; + if ( !( *str ) ) { + str = NULL; + } return str; } /* -_pico_unixify() -changes dos \ style path separators to / -*/ + _pico_unixify() + changes dos \ style path separators to / + */ -void _pico_unixify( char *path ) -{ - if( path == NULL ) +void _pico_unixify( char *path ){ + if ( path == NULL ) { return; - while( *path ) + } + while ( *path ) { - if( *path == '\\' ) + if ( *path == '\\' ) { *path = '/'; + } path++; } } @@ -586,22 +579,19 @@ void _pico_unixify( char *path ) * the directory separators to un*x style. returns 1 on success * or 0 when 'destSize' was exceeded. -sea */ -int _pico_nofname( const char *path, char *dest, int destSize ) -{ - int left = destSize; +int _pico_nofname( const char *path, char *dest, int destSize ){ + int left = destSize; char *temp = dest; - while ((*dest = *path) != '\0') + while ( ( *dest = *path ) != '\0' ) { - if (*dest == '/' || *dest == '\\') - { - temp = (dest + 1); + if ( *dest == '/' || *dest == '\\' ) { + temp = ( dest + 1 ); *dest = '/'; } dest++; path++; - if (--left < 1) - { + if ( --left < 1 ) { *temp = '\0'; return 0; } @@ -614,19 +604,22 @@ int _pico_nofname( const char *path, char *dest, int destSize ) * returns ptr to filename portion in given path or an empty * string otherwise. given 'path' is not altered. -sea */ -char *_pico_nopath( const char *path ) -{ +char *_pico_nopath( const char *path ){ char *src; - src = (char *)path + (strlen(path) - 1); + src = (char *)path + ( strlen( path ) - 1 ); - if (path == NULL) return (char *)""; - if (!strchr((char *)path,'/') && !strchr((char *)path,'\\')) - return ((char *)path); + if ( path == NULL ) { + return (char *)""; + } + if ( !strchr( (char *)path,'/' ) && !strchr( (char *)path,'\\' ) ) { + return ( (char *)path ); + } - while ((src--) != path) + while ( ( src-- ) != path ) { - if (*src == '/' || *src == '\\') - return (++src); + if ( *src == '/' || *src == '\\' ) { + return ( ++src ); + } } return (char *)""; } @@ -636,35 +629,38 @@ char *_pico_nopath( const char *path ) * or filepath's filename portion. the given 'path' *is* * altered. leave 'ext' empty to remove extension. -sea */ -char *_pico_setfext( char *path, const char *ext ) -{ +char *_pico_setfext( char *path, const char *ext ){ char *src; - int remfext = 0; + int remfext = 0; - src = path + (strlen(path) - 1); + src = path + ( strlen( path ) - 1 ); - if (ext == NULL) ext = ""; - if (strlen(ext ) < 1) remfext = 1; - if (strlen(path) < 1) + if ( ext == NULL ) { + ext = ""; + } + if ( strlen( ext ) < 1 ) { + remfext = 1; + } + if ( strlen( path ) < 1 ) { return path; + } - while ((src--) != path) + while ( ( src-- ) != path ) { - if (*src == '/' || *src == '\\') + if ( *src == '/' || *src == '\\' ) { return path; + } - if (*src == '.') - { - if (remfext) - { + if ( *src == '.' ) { + if ( remfext ) { *src = '\0'; return path; } - *(++src) = '\0'; + *( ++src ) = '\0'; break; } } - strcat(path,ext); + strcat( path,ext ); return path; } @@ -674,22 +670,26 @@ char *_pico_setfext( char *path, const char *ext ) * removed string trimming here. this can be done manually by the * calling func. */ -int _pico_getline( char *buf, int bufsize, char *dest, int destsize ) -{ +int _pico_getline( char *buf, int bufsize, char *dest, int destsize ){ int pos; /* check output */ - if (dest == NULL || destsize < 1) return -1; + if ( dest == NULL || destsize < 1 ) { + return -1; + } memset( dest,0,destsize ); /* check input */ - if (buf == NULL || bufsize < 1) + if ( buf == NULL || bufsize < 1 ) { return -1; + } /* get next line */ - for (pos=0; poscursor == NULL) + if ( p == NULL || p->cursor == NULL ) { return; + } /* skin white spaces */ - while( 1 ) + while ( 1 ) { /* sanity checks */ - if (p->cursor < p->buffer || - p->cursor >= p->max) - { + if ( p->cursor < p->buffer || + p->cursor >= p->max ) { return; } /* break for chars other than white spaces */ - if (*p->cursor > 0x20) break; - if (*p->cursor == 0x00) return; + if ( *p->cursor > 0x20 ) { + break; + } + if ( *p->cursor == 0x00 ) { + return; + } /* a bit of linefeed handling */ - if (*p->cursor == '\n') - { + if ( *p->cursor == '\n' ) { *hasLFs = 1; p->curLine++; } @@ -735,33 +737,34 @@ void _pico_parse_skip_white( picoParser_t *p, int *hasLFs ) /* _pico_new_parser: * allocates a new ascii parser object. */ -picoParser_t *_pico_new_parser( picoByte_t *buffer, int bufSize ) -{ +picoParser_t *_pico_new_parser( picoByte_t *buffer, int bufSize ){ picoParser_t *p; - + /* sanity check */ - if( buffer == NULL || bufSize <= 0 ) + if ( buffer == NULL || bufSize <= 0 ) { return NULL; - + } + /* allocate reader */ - p = _pico_alloc( sizeof(picoParser_t) ); - if (p == NULL) return NULL; - memset( p,0,sizeof(picoParser_t) ); + p = _pico_alloc( sizeof( picoParser_t ) ); + if ( p == NULL ) { + return NULL; + } + memset( p,0,sizeof( picoParser_t ) ); /* allocate token space */ p->tokenSize = 0; p->tokenMax = 1024; p->token = _pico_alloc( p->tokenMax ); - if( p->token == NULL ) - { + if ( p->token == NULL ) { _pico_free( p ); return NULL; } /* setup */ - p->buffer = buffer; - p->cursor = buffer; - p->bufSize = bufSize; - p->max = p->buffer + bufSize; + p->buffer = buffer; + p->cursor = buffer; + p->bufSize = bufSize; + p->max = p->buffer + bufSize; p->curLine = 1; /* sea: new */ /* return ptr to parser */ @@ -771,14 +774,14 @@ picoParser_t *_pico_new_parser( picoByte_t *buffer, int bufSize ) /* _pico_free_parser: * frees an existing pico parser object. */ -void _pico_free_parser( picoParser_t *p ) -{ +void _pico_free_parser( picoParser_t *p ){ /* sanity check */ - if (p == NULL) return; + if ( p == NULL ) { + return; + } /* free the parser */ - if (p->token != NULL) - { + if ( p->token != NULL ) { _pico_free( p->token ); } _pico_free( p ); @@ -792,16 +795,14 @@ void _pico_free_parser( picoParser_t *p ) * will handle "quoted" strings and return the data between the * quotes as token. returns 0 on end/error or 1 on success. -sea */ -int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted ) -{ +int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted ){ int hasLFs = 0; char *old; /* sanity checks */ - if( p == NULL || p->buffer == NULL || - p->cursor < p->buffer || - p->cursor >= p->max ) - { + if ( p == NULL || p->buffer == NULL || + p->cursor < p->buffer || + p->cursor >= p->max ) { return 0; } /* clear parser token */ @@ -810,43 +811,36 @@ int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted ) old = p->cursor; /* skip whitespaces */ - while( p->cursor < p->max && *p->cursor <= 32 ) + while ( p->cursor < p->max && *p->cursor <= 32 ) { - if (*p->cursor == '\n') - { + if ( *p->cursor == '\n' ) { p->curLine++; hasLFs++; } p->cursor++; } /* return if we're not allowed to go beyond lfs */ - if ((hasLFs > 0) && !allowLFs) - { + if ( ( hasLFs > 0 ) && !allowLFs ) { p->cursor = old; return 0; } /* get next quoted string */ - if (*p->cursor == '\"' && handleQuoted) - { + if ( *p->cursor == '\"' && handleQuoted ) { p->cursor++; - while (p->cursor < p->max && *p->cursor) + while ( p->cursor < p->max && *p->cursor ) { - if (*p->cursor == '\\') - { - if (*(p->cursor+1) == '"') - { + if ( *p->cursor == '\\' ) { + if ( *( p->cursor + 1 ) == '"' ) { p->cursor++; } p->token[ p->tokenSize++ ] = *p->cursor++; continue; } - else if (*p->cursor == '\"') - { + else if ( *p->cursor == '\"' ) { p->cursor++; break; } - else if (*p->cursor == '\n') - { + else if ( *p->cursor == '\n' ) { p->curLine++; } p->token[ p->tokenSize++ ] = *p->cursor++; @@ -856,10 +850,9 @@ int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted ) return 1; } /* otherwise get next word */ - while( p->cursor < p->max && *p->cursor > 32 ) + while ( p->cursor < p->max && *p->cursor > 32 ) { - if (*p->cursor == '\n') - { + if ( *p->cursor == '\n' ) { p->curLine++; } p->token[ p->tokenSize++ ] = *p->cursor++; @@ -873,14 +866,16 @@ int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted ) * reads the first token from the next line and returns * a pointer to it. returns NULL on EOL or EOF. -sea */ -char *_pico_parse_first( picoParser_t *p ) -{ +char *_pico_parse_first( picoParser_t *p ){ /* sanity check */ - if (p == NULL) return NULL; + if ( p == NULL ) { + return NULL; + } /* try to read next token (with lfs & quots) */ - if (!_pico_parse_ex( p,1,1 )) + if ( !_pico_parse_ex( p,1,1 ) ) { return NULL; + } /* return ptr to the token string */ return p->token; @@ -891,14 +886,16 @@ char *_pico_parse_first( picoParser_t *p ) * to it. quoted strings are handled as usual. returns NULL * on EOL or EOF. -sea */ -char *_pico_parse( picoParser_t *p, int allowLFs ) -{ +char *_pico_parse( picoParser_t *p, int allowLFs ){ /* sanity check */ - if (p == NULL) return NULL; + if ( p == NULL ) { + return NULL; + } /* try to read next token (with quots) */ - if (!_pico_parse_ex( p,allowLFs,1 )) + if ( !_pico_parse_ex( p,allowLFs,1 ) ) { return NULL; + } /* return ptr to the token string */ return p->token; @@ -907,9 +904,8 @@ char *_pico_parse( picoParser_t *p, int allowLFs ) /* _pico_parse_skip_rest: * skips the rest of the current line in parser. */ -void _pico_parse_skip_rest( picoParser_t *p ) -{ - while( _pico_parse_ex( p,0,0 ) ) ; +void _pico_parse_skip_rest( picoParser_t *p ){ + while ( _pico_parse_ex( p,0,0 ) ) ; } /* _pico_parse_skip_braced: @@ -918,29 +914,28 @@ void _pico_parse_skip_rest( picoParser_t *p ) * end of buffer was reached or when the opening bracket was * missing). */ -int _pico_parse_skip_braced( picoParser_t *p ) -{ +int _pico_parse_skip_braced( picoParser_t *p ){ int firstToken = 1; int level; /* sanity check */ - if (p == NULL) return 0; + if ( p == NULL ) { + return 0; + } /* set the initial level for parsing */ level = 0; /* skip braced section */ - while( 1 ) + while ( 1 ) { /* read next token (lfs allowed) */ - if (!_pico_parse_ex( p,1,1 )) - { + if ( !_pico_parse_ex( p,1,1 ) ) { /* end of parser buffer reached */ return 0; } /* first token must be an opening bracket */ - if (firstToken && p->token[0] != '{') - { + if ( firstToken && p->token[0] != '{' ) { /* opening bracket missing */ return 0; } @@ -948,126 +943,140 @@ int _pico_parse_skip_braced( picoParser_t *p ) firstToken = 0; /* update level */ - if (p->token[1] == '\0') - { - if (p->token[0] == '{') level++; - if (p->token[0] == '}') level--; + if ( p->token[1] == '\0' ) { + if ( p->token[0] == '{' ) { + level++; + } + if ( p->token[0] == '}' ) { + level--; + } } /* break if we're back at our starting level */ - if (level == 0) break; + if ( level == 0 ) { + break; + } } /* successfully skipped braced section */ return 1; } -int _pico_parse_check( picoParser_t *p, int allowLFs, char *str ) -{ - if (!_pico_parse_ex( p,allowLFs,1 )) +int _pico_parse_check( picoParser_t *p, int allowLFs, char *str ){ + if ( !_pico_parse_ex( p,allowLFs,1 ) ) { return 0; - if (!strcmp(p->token,str)) + } + if ( !strcmp( p->token,str ) ) { return 1; - return 0; + } + return 0; } -int _pico_parse_checki( picoParser_t *p, int allowLFs, char *str ) -{ - if (!_pico_parse_ex( p,allowLFs,1 )) +int _pico_parse_checki( picoParser_t *p, int allowLFs, char *str ){ + if ( !_pico_parse_ex( p,allowLFs,1 ) ) { return 0; - if (!_pico_stricmp(p->token,str)) + } + if ( !_pico_stricmp( p->token,str ) ) { return 1; - return 0; + } + return 0; } -int _pico_parse_int( picoParser_t *p, int *out ) -{ +int _pico_parse_int( picoParser_t *p, int *out ){ char *token; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* get token and turn it into an integer */ *out = 0; token = _pico_parse( p,0 ); - if (token == NULL) return 0; + if ( token == NULL ) { + return 0; + } *out = atoi( token ); /* success */ return 1; } -int _pico_parse_int_def( picoParser_t *p, int *out, int def ) -{ +int _pico_parse_int_def( picoParser_t *p, int *out, int def ){ char *token; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* get token and turn it into an integer */ *out = def; token = _pico_parse( p,0 ); - if (token == NULL) return 0; + if ( token == NULL ) { + return 0; + } *out = atoi( token ); /* success */ return 1; } -int _pico_parse_float( picoParser_t *p, float *out ) -{ +int _pico_parse_float( picoParser_t *p, float *out ){ char *token; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* get token and turn it into a float */ *out = 0.0f; token = _pico_parse( p,0 ); - if (token == NULL) return 0; + if ( token == NULL ) { + return 0; + } *out = (float) atof( token ); /* success */ return 1; } -int _pico_parse_float_def( picoParser_t *p, float *out, float def ) -{ +int _pico_parse_float_def( picoParser_t *p, float *out, float def ){ char *token; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* get token and turn it into a float */ *out = def; token = _pico_parse( p,0 ); - if (token == NULL) return 0; + if ( token == NULL ) { + return 0; + } *out = (float) atof( token ); /* success */ return 1; } -int _pico_parse_vec( picoParser_t *p, picoVec3_t out ) -{ +int _pico_parse_vec( picoParser_t *p, picoVec3_t out ){ char *token; - int i; + int i; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* zero out outination vector */ _pico_zero_vec( out ); /* parse three vector components */ - for (i=0; i<3; i++) + for ( i = 0; i < 3; i++ ) { token = _pico_parse( p,0 ); - if (token == NULL) - { + if ( token == NULL ) { _pico_zero_vec( out ); return 0; } @@ -1077,24 +1086,23 @@ int _pico_parse_vec( picoParser_t *p, picoVec3_t out ) return 1; } -int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def ) -{ +int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def ){ char *token; - int i; + int i; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* assign default vector value */ _pico_copy_vec( def,out ); /* parse three vector components */ - for (i=0; i<3; i++) + for ( i = 0; i < 3; i++ ) { token = _pico_parse( p,0 ); - if (token == NULL) - { + if ( token == NULL ) { _pico_copy_vec( def,out ); return 0; } @@ -1104,24 +1112,23 @@ int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def ) return 1; } -int _pico_parse_vec2( picoParser_t *p, picoVec2_t out ) -{ +int _pico_parse_vec2( picoParser_t *p, picoVec2_t out ){ char *token; - int i; + int i; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* zero out outination vector */ _pico_zero_vec2( out ); /* parse two vector components */ - for (i=0; i<2; i++) + for ( i = 0; i < 2; i++ ) { token = _pico_parse( p,0 ); - if (token == NULL) - { + if ( token == NULL ) { _pico_zero_vec2( out ); return 0; } @@ -1131,24 +1138,23 @@ int _pico_parse_vec2( picoParser_t *p, picoVec2_t out ) return 1; } -int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def ) -{ +int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def ){ char *token; - int i; + int i; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* assign default vector value */ _pico_copy_vec2( def,out ); /* parse two vector components */ - for (i=0; i<2; i++) + for ( i = 0; i < 2; i++ ) { token = _pico_parse( p,0 ); - if (token == NULL) - { + if ( token == NULL ) { _pico_copy_vec2( def,out ); return 0; } @@ -1158,24 +1164,23 @@ int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def ) return 1; } -int _pico_parse_vec4( picoParser_t *p, picoVec4_t out ) -{ +int _pico_parse_vec4( picoParser_t *p, picoVec4_t out ){ char *token; - int i; + int i; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* zero out outination vector */ _pico_zero_vec4( out ); /* parse four vector components */ - for (i=0; i<4; i++) + for ( i = 0; i < 4; i++ ) { token = _pico_parse( p,0 ); - if (token == NULL) - { + if ( token == NULL ) { _pico_zero_vec4( out ); return 0; } @@ -1185,24 +1190,23 @@ int _pico_parse_vec4( picoParser_t *p, picoVec4_t out ) return 1; } -int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def ) -{ +int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def ){ char *token; - int i; + int i; /* sanity checks */ - if (p == NULL || out == NULL) + if ( p == NULL || out == NULL ) { return 0; + } /* assign default vector value */ _pico_copy_vec4( def,out ); /* parse four vector components */ - for (i=0; i<4; i++) + for ( i = 0; i < 4; i++ ) { token = _pico_parse( p,0 ); - if (token == NULL) - { + if ( token == NULL ) { _pico_copy_vec4( def,out ); return 0; } @@ -1215,24 +1219,26 @@ int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def ) /* _pico_new_memstream: * allocates a new memorystream object. */ -picoMemStream_t *_pico_new_memstream( picoByte_t *buffer, int bufSize ) -{ +picoMemStream_t *_pico_new_memstream( picoByte_t *buffer, int bufSize ){ picoMemStream_t *s; - + /* sanity check */ - if( buffer == NULL || bufSize <= 0 ) + if ( buffer == NULL || bufSize <= 0 ) { return NULL; - + } + /* allocate stream */ - s = _pico_alloc( sizeof(picoMemStream_t) ); - if (s == NULL) return NULL; - memset( s,0,sizeof(picoMemStream_t) ); + s = _pico_alloc( sizeof( picoMemStream_t ) ); + if ( s == NULL ) { + return NULL; + } + memset( s,0,sizeof( picoMemStream_t ) ); /* setup */ - s->buffer = buffer; - s->curPos = buffer; - s->bufSize = bufSize; - s->flag = 0; + s->buffer = buffer; + s->curPos = buffer; + s->bufSize = bufSize; + s->flag = 0; /* return ptr to stream */ return s; @@ -1241,10 +1247,11 @@ picoMemStream_t *_pico_new_memstream( picoByte_t *buffer, int bufSize ) /* _pico_free_memstream: * frees an existing pico memorystream object. */ -void _pico_free_memstream( picoMemStream_t *s ) -{ +void _pico_free_memstream( picoMemStream_t *s ){ /* sanity check */ - if (s == NULL) return; + if ( s == NULL ) { + return; + } /* free the stream */ _pico_free( s ); @@ -1253,16 +1260,15 @@ void _pico_free_memstream( picoMemStream_t *s ) /* _pico_memstream_read: * reads data from a pico memorystream into a buffer. */ -int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len ) -{ +int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len ){ int ret = 1; /* sanity checks */ - if (s == NULL || buffer == NULL) + if ( s == NULL || buffer == NULL ) { return 0; + } - if (s->curPos + len > s->buffer + s->bufSize) - { + if ( s->curPos + len > s->buffer + s->bufSize ) { s->flag |= PICO_IOEOF; len = s->buffer + s->bufSize - s->curPos; ret = 0; @@ -1277,17 +1283,18 @@ int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len ) /* _pico_memstream_read: * reads a character from a pico memorystream */ -int _pico_memstream_getc( picoMemStream_t *s ) -{ +int _pico_memstream_getc( picoMemStream_t *s ){ int c = 0; /* sanity check */ - if (s == NULL) + if ( s == NULL ) { return -1; + } /* read the character */ - if (_pico_memstream_read( s, &c, 1) == 0) + if ( _pico_memstream_read( s, &c, 1 ) == 0 ) { return -1; + } return c; } @@ -1295,42 +1302,36 @@ int _pico_memstream_getc( picoMemStream_t *s ) /* _pico_memstream_seek: * sets the current read position to a different location */ -int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin ) -{ +int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin ){ int overflow; /* sanity check */ - if (s == NULL) + if ( s == NULL ) { return -1; + } - if (origin == PICO_SEEK_SET) - { + if ( origin == PICO_SEEK_SET ) { s->curPos = s->buffer + offset; overflow = s->curPos - ( s->buffer + s->bufSize ); - if (overflow > 0) - { + if ( overflow > 0 ) { s->curPos = s->buffer + s->bufSize; return offset - overflow; } return 0; } - else if (origin == PICO_SEEK_CUR) - { + else if ( origin == PICO_SEEK_CUR ) { s->curPos += offset; overflow = s->curPos - ( s->buffer + s->bufSize ); - if (overflow > 0) - { + if ( overflow > 0 ) { s->curPos = s->buffer + s->bufSize; return offset - overflow; } return 0; } - else if (origin == PICO_SEEK_END) - { + else if ( origin == PICO_SEEK_END ) { s->curPos = ( s->buffer + s->bufSize ) - offset; overflow = s->buffer - s->curPos; - if (overflow > 0) - { + if ( overflow > 0 ) { s->curPos = s->buffer; return offset - overflow; } @@ -1343,11 +1344,11 @@ int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin ) /* _pico_memstream_tell: * returns the current read position in the pico memorystream */ -long _pico_memstream_tell( picoMemStream_t *s ) -{ +long _pico_memstream_tell( picoMemStream_t *s ){ /* sanity check */ - if (s == NULL) + if ( s == NULL ) { return -1; + } return s->curPos - s->buffer; } diff --git a/libs/picomodel/picointernal.h b/libs/picomodel/picointernal.h index 8a3ee68d..12b8cd7c 100644 --- a/libs/picomodel/picointernal.h +++ b/libs/picomodel/picointernal.h @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -66,136 +66,136 @@ extern "C" /* constants */ -#define PICO_PI 3.14159265358979323846 +#define PICO_PI 3.14159265358979323846 #define PICO_SEEK_SET 0 #define PICO_SEEK_CUR 1 #define PICO_SEEK_END 2 -#define PICO_IOEOF 1 -#define PICO_IOERR 2 +#define PICO_IOEOF 1 +#define PICO_IOERR 2 /* types */ typedef struct picoParser_s { - char *buffer; - int bufSize; - char *token; - int tokenSize; - int tokenMax; - char *cursor; - char *max; - int curLine; + char *buffer; + int bufSize; + char *token; + int tokenSize; + int tokenMax; + char *cursor; + char *max; + int curLine; } picoParser_t; typedef struct picoMemStream_s { - picoByte_t *buffer; - int bufSize; - picoByte_t *curPos; - int flag; + picoByte_t *buffer; + int bufSize; + picoByte_t *curPos; + int flag; } picoMemStream_t; /* variables */ -extern const picoModule_t *picoModules[]; +extern const picoModule_t *picoModules[]; -extern void *(*_pico_ptr_malloc)( size_t ); -extern void (*_pico_ptr_free)( void* ); -extern void (*_pico_ptr_load_file)( char*, unsigned char**, int* ); -extern void (*_pico_ptr_free_file)( void* ); -extern void (*_pico_ptr_print)( int, const char* ); +extern void *( *_pico_ptr_malloc )( size_t ); +extern void ( *_pico_ptr_free )( void* ); +extern void ( *_pico_ptr_load_file )( char*, unsigned char**, int* ); +extern void ( *_pico_ptr_free_file )( void* ); +extern void ( *_pico_ptr_print )( int, const char* ); /* prototypes */ /* memory */ -void *_pico_alloc( size_t size ); -void *_pico_calloc( size_t num, size_t size ); -void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize ); -char *_pico_clone_alloc( char *str, int size ); -void _pico_free( void *ptr ); +void *_pico_alloc( size_t size ); +void *_pico_calloc( size_t num, size_t size ); +void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize ); +char *_pico_clone_alloc( char *str, int size ); +void _pico_free( void *ptr ); /* files */ -void _pico_load_file( char *name, unsigned char **buffer, int *bufSize ); -void _pico_free_file( void *buffer ); +void _pico_load_file( char *name, unsigned char **buffer, int *bufSize ); +void _pico_free_file( void *buffer ); /* strings */ -char *_pico_strltrim( char *str ); -char *_pico_strrtrim( char *str ); -int _pico_strchcount( char *str, int ch ); -void _pico_printf( int level, const char *format, ... ); -char *_pico_stristr( char *str, const char *substr ); -void _pico_unixify( char *path ); -int _pico_nofname( const char *path, char *dest, int destSize ); -char *_pico_nopath( const char *path ); -char *_pico_setfext( char *path, const char *ext ); -int _pico_getline( char *buf, int bufsize, char *dest, int destsize ); -char *_pico_strlwr( char *str ); +char *_pico_strltrim( char *str ); +char *_pico_strrtrim( char *str ); +int _pico_strchcount( char *str, int ch ); +void _pico_printf( int level, const char *format, ... ); +char *_pico_stristr( char *str, const char *substr ); +void _pico_unixify( char *path ); +int _pico_nofname( const char *path, char *dest, int destSize ); +char *_pico_nopath( const char *path ); +char *_pico_setfext( char *path, const char *ext ); +int _pico_getline( char *buf, int bufsize, char *dest, int destsize ); +char *_pico_strlwr( char *str ); /* vectors */ -void _pico_zero_bounds( picoVec3_t mins, picoVec3_t maxs ); -void _pico_expand_bounds( picoVec3_t p, picoVec3_t mins, picoVec3_t maxs ); -void _pico_zero_vec( picoVec3_t vec ); -void _pico_zero_vec2( picoVec2_t vec ); -void _pico_zero_vec4( picoVec4_t vec ); -void _pico_set_vec( picoVec3_t v, float a, float b, float c ); -void _pico_set_vec4( picoVec4_t v, float a, float b, float c, float d ); -void _pico_set_color( picoColor_t c, int r, int g, int b, int a ); -void _pico_copy_color( picoColor_t src, picoColor_t dest ); -void _pico_copy_vec( picoVec3_t src, picoVec3_t dest ); -void _pico_copy_vec2( picoVec2_t src, picoVec2_t dest ); -picoVec_t _pico_normalize_vec( picoVec3_t vec ); -void _pico_add_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ); -void _pico_subtract_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ); -picoVec_t _pico_dot_vec( picoVec3_t a, picoVec3_t b ); -void _pico_cross_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ); -picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVec3_t c ); -void _pico_scale_vec( picoVec3_t v, float scale, picoVec3_t dest ); -void _pico_scale_vec4( picoVec4_t v, float scale, picoVec4_t dest ); +void _pico_zero_bounds( picoVec3_t mins, picoVec3_t maxs ); +void _pico_expand_bounds( picoVec3_t p, picoVec3_t mins, picoVec3_t maxs ); +void _pico_zero_vec( picoVec3_t vec ); +void _pico_zero_vec2( picoVec2_t vec ); +void _pico_zero_vec4( picoVec4_t vec ); +void _pico_set_vec( picoVec3_t v, float a, float b, float c ); +void _pico_set_vec4( picoVec4_t v, float a, float b, float c, float d ); +void _pico_set_color( picoColor_t c, int r, int g, int b, int a ); +void _pico_copy_color( picoColor_t src, picoColor_t dest ); +void _pico_copy_vec( picoVec3_t src, picoVec3_t dest ); +void _pico_copy_vec2( picoVec2_t src, picoVec2_t dest ); +picoVec_t _pico_normalize_vec( picoVec3_t vec ); +void _pico_add_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ); +void _pico_subtract_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ); +picoVec_t _pico_dot_vec( picoVec3_t a, picoVec3_t b ); +void _pico_cross_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ); +picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVec3_t c ); +void _pico_scale_vec( picoVec3_t v, float scale, picoVec3_t dest ); +void _pico_scale_vec4( picoVec4_t v, float scale, picoVec4_t dest ); /* endian */ -int _pico_big_long( int src ); -short _pico_big_short( short src ); -float _pico_big_float( float src ); +int _pico_big_long( int src ); +short _pico_big_short( short src ); +float _pico_big_float( float src ); -int _pico_little_long( int src ); -short _pico_little_short( short src ); -float _pico_little_float( float src ); +int _pico_little_long( int src ); +short _pico_little_short( short src ); +float _pico_little_float( float src ); /* pico ascii parser */ -picoParser_t *_pico_new_parser( picoByte_t *buffer, int bufSize ); -void _pico_free_parser( picoParser_t *p ); -int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted ); -char *_pico_parse_first( picoParser_t *p ); -char *_pico_parse( picoParser_t *p, int allowLFs ); -void _pico_parse_skip_rest( picoParser_t *p ); -int _pico_parse_skip_braced( picoParser_t *p ); -int _pico_parse_check( picoParser_t *p, int allowLFs, char *str ); -int _pico_parse_checki( picoParser_t *p, int allowLFs, char *str ); -int _pico_parse_int( picoParser_t *p, int *out ); -int _pico_parse_int_def( picoParser_t *p, int *out, int def ); -int _pico_parse_float( picoParser_t *p, float *out ); -int _pico_parse_float_def( picoParser_t *p, float *out, float def ); -int _pico_parse_vec( picoParser_t *p, picoVec3_t out); -int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def); -int _pico_parse_vec2( picoParser_t *p, picoVec2_t out ); -int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def ); -int _pico_parse_vec4( picoParser_t *p, picoVec4_t out); -int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def); +picoParser_t *_pico_new_parser( picoByte_t *buffer, int bufSize ); +void _pico_free_parser( picoParser_t *p ); +int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted ); +char *_pico_parse_first( picoParser_t *p ); +char *_pico_parse( picoParser_t *p, int allowLFs ); +void _pico_parse_skip_rest( picoParser_t *p ); +int _pico_parse_skip_braced( picoParser_t *p ); +int _pico_parse_check( picoParser_t *p, int allowLFs, char *str ); +int _pico_parse_checki( picoParser_t *p, int allowLFs, char *str ); +int _pico_parse_int( picoParser_t *p, int *out ); +int _pico_parse_int_def( picoParser_t *p, int *out, int def ); +int _pico_parse_float( picoParser_t *p, float *out ); +int _pico_parse_float_def( picoParser_t *p, float *out, float def ); +int _pico_parse_vec( picoParser_t *p, picoVec3_t out ); +int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def ); +int _pico_parse_vec2( picoParser_t *p, picoVec2_t out ); +int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def ); +int _pico_parse_vec4( picoParser_t *p, picoVec4_t out ); +int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def ); /* pico memory stream */ -picoMemStream_t *_pico_new_memstream( picoByte_t *buffer, int bufSize ); -void _pico_free_memstream( picoMemStream_t *s ); -int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len ); -int _pico_memstream_getc( picoMemStream_t *s ); -int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin ); -long _pico_memstream_tell( picoMemStream_t *s ); -#define _pico_memstream_eof( _pico_memstream ) ((_pico_memstream)->flag & PICO_IOEOF) -#define _pico_memstream_error( _pico_memstream ) ((_pico_memstream)->flag & PICO_IOERR) +picoMemStream_t *_pico_new_memstream( picoByte_t *buffer, int bufSize ); +void _pico_free_memstream( picoMemStream_t *s ); +int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len ); +int _pico_memstream_getc( picoMemStream_t *s ); +int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin ); +long _pico_memstream_tell( picoMemStream_t *s ); +#define _pico_memstream_eof( _pico_memstream ) ( ( _pico_memstream )->flag & PICO_IOEOF ) +#define _pico_memstream_error( _pico_memstream ) ( ( _pico_memstream )->flag & PICO_IOERR ) /* end marker */ #ifdef __cplusplus diff --git a/libs/picomodel/picomodel.c b/libs/picomodel/picomodel.c index dcba41b1..767fc74f 100644 --- a/libs/picomodel/picomodel.c +++ b/libs/picomodel/picomodel.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -45,12 +45,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* -PicoInit() -initializes the picomodel library -*/ + PicoInit() + initializes the picomodel library + */ -int PicoInit( void ) -{ +int PicoInit( void ){ /* successfully initialized -sea */ return 1; } @@ -58,12 +57,11 @@ int PicoInit( void ) /* -PicoShutdown() -shuts the pico model library down -*/ + PicoShutdown() + shuts the pico model library down + */ -void PicoShutdown( void ) -{ +void PicoShutdown( void ){ /* do something interesting here in the future */ return; } @@ -71,12 +69,11 @@ void PicoShutdown( void ) /* -PicoError() -returns last picomodel error code (see PME_* defines) -*/ + PicoError() + returns last picomodel error code (see PME_* defines) + */ -int PicoError( void ) -{ +int PicoError( void ){ /* todo: do something here */ return 0; } @@ -84,98 +81,95 @@ int PicoError( void ) /* -PicoSetMallocFunc() -sets the ptr to the malloc function -*/ + PicoSetMallocFunc() + sets the ptr to the malloc function + */ -void PicoSetMallocFunc( void *(*func)( size_t ) ) -{ - if( func != NULL ) +void PicoSetMallocFunc( void *( *func )( size_t ) ){ + if ( func != NULL ) { _pico_ptr_malloc = func; + } } /* -PicoSetFreeFunc() -sets the ptr to the free function -*/ + PicoSetFreeFunc() + sets the ptr to the free function + */ -void PicoSetFreeFunc( void (*func)( void* ) ) -{ - if( func != NULL ) +void PicoSetFreeFunc( void ( *func )( void* ) ){ + if ( func != NULL ) { _pico_ptr_free = func; + } } /* -PicoSetLoadFileFunc() -sets the ptr to the file load function -*/ + PicoSetLoadFileFunc() + sets the ptr to the file load function + */ -void PicoSetLoadFileFunc( void (*func)( char*, unsigned char**, int* ) ) -{ - if( func != NULL ) +void PicoSetLoadFileFunc( void ( *func )( char*, unsigned char**, int* ) ){ + if ( func != NULL ) { _pico_ptr_load_file = func; + } } /* -PicoSetFreeFileFunc() -sets the ptr to the free function -*/ + PicoSetFreeFileFunc() + sets the ptr to the free function + */ -void PicoSetFreeFileFunc( void (*func)( void* ) ) -{ - if( func != NULL ) +void PicoSetFreeFileFunc( void ( *func )( void* ) ){ + if ( func != NULL ) { _pico_ptr_free_file = func; + } } /* -PicoSetPrintFunc() -sets the ptr to the print function -*/ + PicoSetPrintFunc() + sets the ptr to the print function + */ -void PicoSetPrintFunc( void (*func)( int, const char* ) ) -{ - if( func != NULL ) +void PicoSetPrintFunc( void ( *func )( int, const char* ) ){ + if ( func != NULL ) { _pico_ptr_print = func; + } } /* -PicoLoadModel() -the meat and potatoes function -*/ + PicoLoadModel() + the meat and potatoes function + */ -picoModel_t *PicoLoadModel( char *fileName, int frameNum ) -{ - const picoModule_t **modules, *pm; - picoModel_t *model; - picoByte_t *buffer; - int bufSize; - char *modelFileName, *remapFileName; +picoModel_t *PicoLoadModel( char *fileName, int frameNum ){ + const picoModule_t **modules, *pm; + picoModel_t *model; + picoByte_t *buffer; + int bufSize; + char *modelFileName, *remapFileName; /* init */ model = NULL; /* make sure we've got a file name */ - if( fileName == NULL ) - { + if ( fileName == NULL ) { _pico_printf( PICO_ERROR, "PicoLoadModel: No filename given (fileName == NULL)" ); return NULL; } /* load file data (buffer is allocated by host app) */ _pico_load_file( fileName, &buffer, &bufSize ); - if( bufSize < 0 ) - { + if ( bufSize < 0 ) { _pico_printf( PICO_ERROR, "PicoLoadModel: Failed loading model %s", fileName ); return NULL; } @@ -185,26 +179,26 @@ picoModel_t *PicoLoadModel( char *fileName, int frameNum ) /* run it through the various loader functions and try */ /* to find a loader that fits the given file data */ - for( ; *modules != NULL; modules++ ) + for ( ; *modules != NULL; modules++ ) { /* get module */ pm = *modules; /* sanity check */ - if( pm == NULL) + if ( pm == NULL ) { break; + } /* module must be able to load */ - if( pm->canload == NULL || pm->load == NULL ) + if ( pm->canload == NULL || pm->load == NULL ) { continue; + } /* see whether this module can load the model file or not */ - if( pm->canload( fileName, buffer, bufSize ) == PICO_PMV_OK ) - { + if ( pm->canload( fileName, buffer, bufSize ) == PICO_PMV_OK ) { /* use loader provided by module to read the model data */ model = pm->load( fileName, frameNum, buffer, bufSize ); - if( model == NULL ) - { + if ( model == NULL ) { _pico_free_file( buffer ); return NULL; } @@ -216,12 +210,10 @@ picoModel_t *PicoLoadModel( char *fileName, int frameNum ) modelFileName = PicoGetModelFileName( model ); /* apply model remappings from .remap */ - if( strlen( modelFileName ) ) - { + if ( strlen( modelFileName ) ) { /* alloc copy of model file name */ remapFileName = _pico_alloc( strlen( modelFileName ) + 20 ); - if( remapFileName != NULL ) - { + if ( remapFileName != NULL ) { /* copy model file name and change extension */ strcpy( remapFileName, modelFileName ); _pico_setfext( remapFileName, "remap" ); @@ -240,8 +232,9 @@ picoModel_t *PicoLoadModel( char *fileName, int frameNum ) } /* free memory used by file buffer */ - if( buffer) + if ( buffer ) { _pico_free_file( buffer ); + } /* return */ return model; @@ -250,25 +243,25 @@ picoModel_t *PicoLoadModel( char *fileName, int frameNum ) /* ---------------------------------------------------------------------------- -models ----------------------------------------------------------------------------- */ + models + ---------------------------------------------------------------------------- */ /* -PicoNewModel() -creates a new pico model -*/ + PicoNewModel() + creates a new pico model + */ -picoModel_t *PicoNewModel( void ) -{ - picoModel_t *model; +picoModel_t *PicoNewModel( void ){ + picoModel_t *model; /* allocate */ - model = _pico_alloc( sizeof(picoModel_t) ); - if( model == NULL ) + model = _pico_alloc( sizeof( picoModel_t ) ); + if ( model == NULL ) { return NULL; + } /* clear */ - memset( model,0,sizeof(picoModel_t) ); + memset( model,0,sizeof( picoModel_t ) ); /* model set up */ _pico_zero_bounds( model->mins,model->maxs ); @@ -283,30 +276,31 @@ picoModel_t *PicoNewModel( void ) /* -PicoFreeModel() -frees a model and all associated data -*/ + PicoFreeModel() + frees a model and all associated data + */ -void PicoFreeModel( picoModel_t *model ) -{ - int i; +void PicoFreeModel( picoModel_t *model ){ + int i; /* sanity check */ - if( model == NULL ) + if ( model == NULL ) { return; + } /* free bits */ - if( model->name ) + if ( model->name ) { _pico_free( model->name ); + } /* free shaders */ - for( i = 0; i < model->numShaders; i++ ) + for ( i = 0; i < model->numShaders; i++ ) PicoFreeShader( model->shader[ i ] ); free( model->shader ); /* free surfaces */ - for( i = 0; i < model->numSurfaces; i++ ) + for ( i = 0; i < model->numSurfaces; i++ ) PicoFreeSurface( model->surface[ i ] ); free( model->surface ); @@ -317,47 +311,53 @@ void PicoFreeModel( picoModel_t *model ) /* -PicoAdjustModel() -adjusts a models's memory allocations to handle the requested sizes. -will always grow, never shrink -*/ + PicoAdjustModel() + adjusts a models's memory allocations to handle the requested sizes. + will always grow, never shrink + */ -int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces ) -{ +int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces ){ /* dummy check */ - if( model == NULL ) + if ( model == NULL ) { return 0; + } /* bare minimums */ /* sea: null surface/shader fix (1s=>0s) */ - if( numShaders < 0 ) + if ( numShaders < 0 ) { numShaders = 0; - if( numSurfaces < 0 ) + } + if ( numSurfaces < 0 ) { numSurfaces = 0; + } /* additional shaders? */ - while( numShaders > model->maxShaders ) + while ( numShaders > model->maxShaders ) { model->maxShaders += PICO_GROW_SHADERS; - if( !_pico_realloc( (void *) &model->shader, model->numShaders * sizeof( *model->shader ), model->maxShaders * sizeof( *model->shader ) ) ) + if ( !_pico_realloc( (void *) &model->shader, model->numShaders * sizeof( *model->shader ), model->maxShaders * sizeof( *model->shader ) ) ) { return 0; + } } /* set shader count to higher */ - if( numShaders > model->numShaders ) + if ( numShaders > model->numShaders ) { model->numShaders = numShaders; + } /* additional surfaces? */ - while( numSurfaces > model->maxSurfaces ) + while ( numSurfaces > model->maxSurfaces ) { model->maxSurfaces += PICO_GROW_SURFACES; - if( !_pico_realloc( (void *) &model->surface, model->numSurfaces * sizeof( *model->surface ), model->maxSurfaces * sizeof( *model->surface ) ) ) + if ( !_pico_realloc( (void *) &model->surface, model->numSurfaces * sizeof( *model->surface ), model->maxSurfaces * sizeof( *model->surface ) ) ) { return 0; + } } /* set shader count to higher */ - if( numSurfaces > model->numSurfaces ) + if ( numSurfaces > model->numSurfaces ) { model->numSurfaces = numSurfaces; + } /* return ok */ return 1; @@ -366,31 +366,29 @@ int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces ) /* ---------------------------------------------------------------------------- -shaders ----------------------------------------------------------------------------- */ + shaders + ---------------------------------------------------------------------------- */ /* -PicoNewShader() -creates a new pico shader and returns its index. -sea -*/ + PicoNewShader() + creates a new pico shader and returns its index. -sea + */ -picoShader_t *PicoNewShader( picoModel_t *model ) -{ - picoShader_t *shader; +picoShader_t *PicoNewShader( picoModel_t *model ){ + picoShader_t *shader; /* allocate and clear */ - shader = _pico_alloc( sizeof(picoShader_t) ); - if( shader == NULL ) + shader = _pico_alloc( sizeof( picoShader_t ) ); + if ( shader == NULL ) { return NULL; - memset( shader, 0, sizeof(picoShader_t) ); + } + memset( shader, 0, sizeof( picoShader_t ) ); /* attach it to the model */ - if( model != NULL ) - { + if ( model != NULL ) { /* adjust model */ - if( !PicoAdjustModel( model, model->numShaders + 1, 0 ) ) - { + if ( !PicoAdjustModel( model, model->numShaders + 1, 0 ) ) { _pico_free( shader ); return NULL; } @@ -414,21 +412,23 @@ picoShader_t *PicoNewShader( picoModel_t *model ) /* -PicoFreeShader() -frees a shader and all associated data -sea -*/ + PicoFreeShader() + frees a shader and all associated data -sea + */ -void PicoFreeShader( picoShader_t *shader ) -{ +void PicoFreeShader( picoShader_t *shader ){ /* dummy check */ - if( shader == NULL ) + if ( shader == NULL ) { return; + } /* free bits */ - if( shader->name ) + if ( shader->name ) { _pico_free( shader->name ); - if( shader->mapName ) + } + if ( shader->mapName ) { _pico_free( shader->mapName ); + } /* free the shader */ _pico_free( shader ); @@ -437,35 +437,37 @@ void PicoFreeShader( picoShader_t *shader ) /* -PicoFindShader() -finds a named shader in a model -*/ + PicoFindShader() + finds a named shader in a model + */ -picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive ) -{ - int i; +picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive ){ + int i; /* sanity checks */ - if( model == NULL || name == NULL ) /* sea: null name fix */ + if ( model == NULL || name == NULL ) { /* sea: null name fix */ return NULL; + } /* walk list */ - for( i = 0; i < model->numShaders; i++ ) + for ( i = 0; i < model->numShaders; i++ ) { /* skip null shaders or shaders with null names */ - if( model->shader[ i ] == NULL || - model->shader[ i ]->name == NULL ) + if ( model->shader[ i ] == NULL || + model->shader[ i ]->name == NULL ) { continue; + } /* compare the shader name with name we're looking for */ - if( caseSensitive ) - { - if( !strcmp( name, model->shader[ i ]->name ) ) + if ( caseSensitive ) { + if ( !strcmp( name, model->shader[ i ]->name ) ) { return model->shader[ i ]; + } + } + else if ( !_pico_stricmp( name, model->shader[ i ]->name ) ) { + return model->shader[ i ]; } - else if( !_pico_stricmp( name, model->shader[ i ]->name ) ) - return model->shader[ i ]; } /* named shader not found */ @@ -475,31 +477,29 @@ picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive /* ---------------------------------------------------------------------------- -surfaces ----------------------------------------------------------------------------- */ + surfaces + ---------------------------------------------------------------------------- */ /* -PicoNewSurface() -creates a new pico surface -*/ + PicoNewSurface() + creates a new pico surface + */ -picoSurface_t *PicoNewSurface( picoModel_t *model ) -{ - picoSurface_t *surface; +picoSurface_t *PicoNewSurface( picoModel_t *model ){ + picoSurface_t *surface; char surfaceName[64]; /* allocate and clear */ surface = _pico_alloc( sizeof( *surface ) ); - if( surface == NULL ) + if ( surface == NULL ) { return NULL; + } memset( surface, 0, sizeof( *surface ) ); /* attach it to the model */ - if( model != NULL ) - { + if ( model != NULL ) { /* adjust model */ - if( !PicoAdjustModel( model, 0, model->numSurfaces + 1 ) ) - { + if ( !PicoAdjustModel( model, 0, model->numSurfaces + 1 ) ) { _pico_free( surface ); return NULL; } @@ -520,17 +520,17 @@ picoSurface_t *PicoNewSurface( picoModel_t *model ) /* -PicoFreeSurface() -frees a surface and all associated data -*/ -void PicoFreeSurface( picoSurface_t *surface ) -{ - int i; + PicoFreeSurface() + frees a surface and all associated data + */ +void PicoFreeSurface( picoSurface_t *surface ){ + int i; /* dummy check */ - if( surface == NULL ) + if ( surface == NULL ) { return; + } /* free bits */ _pico_free( surface->xyz ); @@ -539,10 +539,10 @@ void PicoFreeSurface( picoSurface_t *surface ) _pico_free( surface->faceNormal ); /* free arrays */ - for( i = 0; i < surface->numSTArrays; i++ ) + for ( i = 0; i < surface->numSTArrays; i++ ) _pico_free( surface->st[ i ] ); free( surface->st ); - for( i = 0; i < surface->numColorArrays; i++ ) + for ( i = 0; i < surface->numColorArrays; i++ ) _pico_free( surface->color[ i ] ); free( surface->color ); @@ -553,57 +553,67 @@ void PicoFreeSurface( picoSurface_t *surface ) /* -PicoAdjustSurface() -adjusts a surface's memory allocations to handle the requested sizes. -will always grow, never shrink -*/ + PicoAdjustSurface() + adjusts a surface's memory allocations to handle the requested sizes. + will always grow, never shrink + */ -int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, int numColorArrays, int numIndexes, int numFaceNormals ) -{ - int i; +int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, int numColorArrays, int numIndexes, int numFaceNormals ){ + int i; /* dummy check */ - if( surface == NULL ) + if ( surface == NULL ) { return 0; + } /* bare minimums */ - if( numVertexes < 1 ) + if ( numVertexes < 1 ) { numVertexes = 1; - if( numSTArrays < 1 ) + } + if ( numSTArrays < 1 ) { numSTArrays = 1; - if( numColorArrays < 1 ) + } + if ( numColorArrays < 1 ) { numColorArrays = 1; - if( numIndexes < 1 ) + } + if ( numIndexes < 1 ) { numIndexes = 1; + } /* additional vertexes? */ - while( numVertexes > surface->maxVertexes ) /* fix */ + while ( numVertexes > surface->maxVertexes ) /* fix */ { surface->maxVertexes += PICO_GROW_VERTEXES; - if( !_pico_realloc( (void *) &surface->xyz, surface->numVertexes * sizeof( *surface->xyz ), surface->maxVertexes * sizeof( *surface->xyz ) ) ) - return 0; - if( !_pico_realloc( (void *) &surface->normal, surface->numVertexes * sizeof( *surface->normal ), surface->maxVertexes * sizeof( *surface->normal ) ) ) - return 0; - for( i = 0; i < surface->numSTArrays; i++ ) - if( !_pico_realloc( (void*) &surface->st[ i ], surface->numVertexes * sizeof( *surface->st[ i ] ), surface->maxVertexes * sizeof( *surface->st[ i ] ) ) ) + if ( !_pico_realloc( (void *) &surface->xyz, surface->numVertexes * sizeof( *surface->xyz ), surface->maxVertexes * sizeof( *surface->xyz ) ) ) { return 0; - for( i = 0; i < surface->numColorArrays; i++ ) - if( !_pico_realloc( (void*) &surface->color[ i ], surface->numVertexes * sizeof( *surface->color[ i ] ), surface->maxVertexes * sizeof( *surface->color[ i ] ) ) ) + } + if ( !_pico_realloc( (void *) &surface->normal, surface->numVertexes * sizeof( *surface->normal ), surface->maxVertexes * sizeof( *surface->normal ) ) ) { return 0; + } + for ( i = 0; i < surface->numSTArrays; i++ ) + if ( !_pico_realloc( (void*) &surface->st[ i ], surface->numVertexes * sizeof( *surface->st[ i ] ), surface->maxVertexes * sizeof( *surface->st[ i ] ) ) ) { + return 0; + } + for ( i = 0; i < surface->numColorArrays; i++ ) + if ( !_pico_realloc( (void*) &surface->color[ i ], surface->numVertexes * sizeof( *surface->color[ i ] ), surface->maxVertexes * sizeof( *surface->color[ i ] ) ) ) { + return 0; + } } /* set vertex count to higher */ - if( numVertexes > surface->numVertexes ) + if ( numVertexes > surface->numVertexes ) { surface->numVertexes = numVertexes; + } /* additional st arrays? */ - while( numSTArrays > surface->maxSTArrays ) /* fix */ + while ( numSTArrays > surface->maxSTArrays ) /* fix */ { surface->maxSTArrays += PICO_GROW_ARRAYS; - if( !_pico_realloc( (void*) &surface->st, surface->numSTArrays * sizeof( *surface->st ), surface->maxSTArrays * sizeof( *surface->st ) ) ) + if ( !_pico_realloc( (void*) &surface->st, surface->numSTArrays * sizeof( *surface->st ), surface->maxSTArrays * sizeof( *surface->st ) ) ) { return 0; - while( surface->numSTArrays < numSTArrays ) + } + while ( surface->numSTArrays < numSTArrays ) { surface->st[ surface->numSTArrays ] = _pico_alloc( surface->maxVertexes * sizeof( *surface->st[ 0 ] ) ); memset( surface->st[ surface->numSTArrays ], 0, surface->maxVertexes * sizeof( *surface->st[ 0 ] ) ); @@ -612,12 +622,13 @@ int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, } /* additional color arrays? */ - while( numColorArrays > surface->maxColorArrays ) /* fix */ + while ( numColorArrays > surface->maxColorArrays ) /* fix */ { surface->maxColorArrays += PICO_GROW_ARRAYS; - if( !_pico_realloc( (void*) &surface->color, surface->numColorArrays * sizeof( *surface->color ), surface->maxColorArrays * sizeof( *surface->color ) ) ) + if ( !_pico_realloc( (void*) &surface->color, surface->numColorArrays * sizeof( *surface->color ), surface->maxColorArrays * sizeof( *surface->color ) ) ) { return 0; - while( surface->numColorArrays < numColorArrays ) + } + while ( surface->numColorArrays < numColorArrays ) { surface->color[ surface->numColorArrays ] = _pico_alloc( surface->maxVertexes * sizeof( *surface->color[ 0 ] ) ); memset( surface->color[ surface->numColorArrays ], 0, surface->maxVertexes * sizeof( *surface->color[ 0 ] ) ); @@ -626,28 +637,32 @@ int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, } /* additional indexes? */ - while( numIndexes > surface->maxIndexes ) /* fix */ + while ( numIndexes > surface->maxIndexes ) /* fix */ { surface->maxIndexes += PICO_GROW_INDEXES; - if( !_pico_realloc( (void*) &surface->index, surface->numIndexes * sizeof( *surface->index ), surface->maxIndexes * sizeof( *surface->index ) ) ) + if ( !_pico_realloc( (void*) &surface->index, surface->numIndexes * sizeof( *surface->index ), surface->maxIndexes * sizeof( *surface->index ) ) ) { return 0; + } } /* set index count to higher */ - if( numIndexes > surface->numIndexes ) + if ( numIndexes > surface->numIndexes ) { surface->numIndexes = numIndexes; + } /* additional face normals? */ - while( numFaceNormals > surface->maxFaceNormals ) /* fix */ + while ( numFaceNormals > surface->maxFaceNormals ) /* fix */ { surface->maxFaceNormals += PICO_GROW_FACES; - if( !_pico_realloc( (void *) &surface->faceNormal, surface->numFaceNormals * sizeof( *surface->faceNormal ), surface->maxFaceNormals * sizeof( *surface->faceNormal ) ) ) + if ( !_pico_realloc( (void *) &surface->faceNormal, surface->numFaceNormals * sizeof( *surface->faceNormal ), surface->maxFaceNormals * sizeof( *surface->faceNormal ) ) ) { return 0; + } } /* set face normal count to higher */ - if( numFaceNormals > surface->numFaceNormals ) + if ( numFaceNormals > surface->numFaceNormals ) { surface->numFaceNormals = numFaceNormals; + } /* return ok */ return 1; @@ -658,29 +673,33 @@ int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, * Finds first matching named surface in a model. */ picoSurface_t *PicoFindSurface( - picoModel_t *model, char *name, int caseSensitive ) -{ - int i; + picoModel_t *model, char *name, int caseSensitive ){ + int i; /* sanity check */ - if( model == NULL || name == NULL ) + if ( model == NULL || name == NULL ) { return NULL; + } /* walk list */ - for( i = 0; i < model->numSurfaces; i++ ) + for ( i = 0; i < model->numSurfaces; i++ ) { /* skip null surfaces or surfaces with null names */ - if( model->surface[ i ] == NULL || - model->surface[ i ]->name == NULL ) + if ( model->surface[ i ] == NULL || + model->surface[ i ]->name == NULL ) { continue; + } /* compare the surface name with name we're looking for */ - if (caseSensitive) { - if( !strcmp(name,model->surface[ i ]->name) ) + if ( caseSensitive ) { + if ( !strcmp( name,model->surface[ i ]->name ) ) { return model->surface[ i ]; - } else { - if( !_pico_stricmp(name,model->surface[ i ]->name) ) + } + } + else { + if ( !_pico_stricmp( name,model->surface[ i ]->name ) ) { return model->surface[ i ]; + } } } /* named surface not found */ @@ -690,88 +709,92 @@ picoSurface_t *PicoFindSurface( /*---------------------------------------------------------------------------- - PicoSet*() Setter Functions -----------------------------------------------------------------------------*/ + PicoSet*() Setter Functions + ----------------------------------------------------------------------------*/ -void PicoSetModelName( picoModel_t *model, char *name ) -{ - if( model == NULL || name == NULL ) +void PicoSetModelName( picoModel_t *model, char *name ){ + if ( model == NULL || name == NULL ) { return; - if( model->name != NULL ) + } + if ( model->name != NULL ) { _pico_free( model->name ); + } model->name = _pico_clone_alloc( name,-1 ); } -void PicoSetModelFileName( picoModel_t *model, char *fileName ) -{ - if( model == NULL || fileName == NULL ) +void PicoSetModelFileName( picoModel_t *model, char *fileName ){ + if ( model == NULL || fileName == NULL ) { return; - if( model->fileName != NULL ) + } + if ( model->fileName != NULL ) { _pico_free( model->fileName ); + } model->fileName = _pico_clone_alloc( fileName,-1 ); } -void PicoSetModelFrameNum( picoModel_t *model, int frameNum ) -{ - if( model == NULL ) +void PicoSetModelFrameNum( picoModel_t *model, int frameNum ){ + if ( model == NULL ) { return; + } model->frameNum = frameNum; } -void PicoSetModelNumFrames( picoModel_t *model, int numFrames ) -{ - if( model == NULL ) +void PicoSetModelNumFrames( picoModel_t *model, int numFrames ){ + if ( model == NULL ) { return; + } model->numFrames = numFrames; } -void PicoSetModelData( picoModel_t *model, void *data ) -{ - if( model == NULL ) +void PicoSetModelData( picoModel_t *model, void *data ){ + if ( model == NULL ) { return; + } model->data = data; } -void PicoSetShaderName( picoShader_t *shader, char *name ) -{ - if( shader == NULL || name == NULL ) +void PicoSetShaderName( picoShader_t *shader, char *name ){ + if ( shader == NULL || name == NULL ) { return; - if( shader->name != NULL ) + } + if ( shader->name != NULL ) { _pico_free( shader->name ); + } shader->name = _pico_clone_alloc( name,-1 ); } -void PicoSetShaderMapName( picoShader_t *shader, char *mapName ) -{ - if( shader == NULL || mapName == NULL ) +void PicoSetShaderMapName( picoShader_t *shader, char *mapName ){ + if ( shader == NULL || mapName == NULL ) { return; - if( shader->mapName != NULL ) + } + if ( shader->mapName != NULL ) { _pico_free( shader->mapName ); + } shader->mapName = _pico_clone_alloc( mapName,-1 ); } -void PicoSetShaderAmbientColor( picoShader_t *shader, picoColor_t color ) -{ - if( shader == NULL || color == NULL ) +void PicoSetShaderAmbientColor( picoShader_t *shader, picoColor_t color ){ + if ( shader == NULL || color == NULL ) { return; + } shader->ambientColor[ 0 ] = color[ 0 ]; shader->ambientColor[ 1 ] = color[ 1 ]; shader->ambientColor[ 2 ] = color[ 2 ]; @@ -780,10 +803,10 @@ void PicoSetShaderAmbientColor( picoShader_t *shader, picoColor_t color ) -void PicoSetShaderDiffuseColor( picoShader_t *shader, picoColor_t color ) -{ - if( shader == NULL || color == NULL ) +void PicoSetShaderDiffuseColor( picoShader_t *shader, picoColor_t color ){ + if ( shader == NULL || color == NULL ) { return; + } shader->diffuseColor[ 0 ] = color[ 0 ]; shader->diffuseColor[ 1 ] = color[ 1 ]; shader->diffuseColor[ 2 ] = color[ 2 ]; @@ -792,10 +815,10 @@ void PicoSetShaderDiffuseColor( picoShader_t *shader, picoColor_t color ) -void PicoSetShaderSpecularColor( picoShader_t *shader, picoColor_t color ) -{ - if( shader == NULL || color == NULL ) +void PicoSetShaderSpecularColor( picoShader_t *shader, picoColor_t color ){ + if ( shader == NULL || color == NULL ) { return; + } shader->specularColor[ 0 ] = color[ 0 ]; shader->specularColor[ 1 ] = color[ 1 ]; shader->specularColor[ 2 ] = color[ 2 ]; @@ -804,117 +827,127 @@ void PicoSetShaderSpecularColor( picoShader_t *shader, picoColor_t color ) -void PicoSetShaderTransparency( picoShader_t *shader, float value ) -{ - if( shader == NULL ) +void PicoSetShaderTransparency( picoShader_t *shader, float value ){ + if ( shader == NULL ) { return; + } shader->transparency = value; /* cap to 0..1 range */ - if (shader->transparency < 0.0) + if ( shader->transparency < 0.0 ) { shader->transparency = 0.0; - if (shader->transparency > 1.0) + } + if ( shader->transparency > 1.0 ) { shader->transparency = 1.0; + } } -void PicoSetShaderShininess( picoShader_t *shader, float value ) -{ - if( shader == NULL ) +void PicoSetShaderShininess( picoShader_t *shader, float value ){ + if ( shader == NULL ) { return; + } shader->shininess = value; /* cap to 0..127 range */ - if (shader->shininess < 0.0) + if ( shader->shininess < 0.0 ) { shader->shininess = 0.0; - if (shader->shininess > 127.0) + } + if ( shader->shininess > 127.0 ) { shader->shininess = 127.0; + } } -void PicoSetSurfaceData( picoSurface_t *surface, void *data ) -{ - if( surface == NULL ) +void PicoSetSurfaceData( picoSurface_t *surface, void *data ){ + if ( surface == NULL ) { return; + } surface->data = data; } -void PicoSetSurfaceType( picoSurface_t *surface, picoSurfaceType_t type ) -{ - if( surface == NULL ) +void PicoSetSurfaceType( picoSurface_t *surface, picoSurfaceType_t type ){ + if ( surface == NULL ) { return; + } surface->type = type; } -void PicoSetSurfaceName( picoSurface_t *surface, char *name ) -{ - if( surface == NULL || name == NULL ) +void PicoSetSurfaceName( picoSurface_t *surface, char *name ){ + if ( surface == NULL || name == NULL ) { return; - if( surface->name != NULL ) + } + if ( surface->name != NULL ) { _pico_free( surface->name ); + } surface->name = _pico_clone_alloc( name,-1 ); } -void PicoSetSurfaceShader( picoSurface_t *surface, picoShader_t *shader ) -{ - if( surface == NULL ) +void PicoSetSurfaceShader( picoSurface_t *surface, picoShader_t *shader ){ + if ( surface == NULL ) { return; + } surface->shader = shader; } -void PicoSetSurfaceXYZ( picoSurface_t *surface, int num, picoVec3_t xyz ) -{ - if( surface == NULL || num < 0 || xyz == NULL ) +void PicoSetSurfaceXYZ( picoSurface_t *surface, int num, picoVec3_t xyz ){ + if ( surface == NULL || num < 0 || xyz == NULL ) { return; - if( !PicoAdjustSurface( surface, num + 1, 0, 0, 0, 0 ) ) + } + if ( !PicoAdjustSurface( surface, num + 1, 0, 0, 0, 0 ) ) { return; + } _pico_copy_vec( xyz, surface->xyz[ num ] ); - if( surface->model != NULL ) + if ( surface->model != NULL ) { _pico_expand_bounds( xyz, surface->model->mins, surface->model->maxs ); + } } -void PicoSetSurfaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ) -{ - if( surface == NULL || num < 0 || normal == NULL ) +void PicoSetSurfaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ){ + if ( surface == NULL || num < 0 || normal == NULL ) { return; - if( !PicoAdjustSurface( surface, num + 1, 0, 0, 0, 0 ) ) + } + if ( !PicoAdjustSurface( surface, num + 1, 0, 0, 0, 0 ) ) { return; + } _pico_copy_vec( normal, surface->normal[ num ] ); } -void PicoSetSurfaceST( picoSurface_t *surface, int array, int num, picoVec2_t st ) -{ - if( surface == NULL || num < 0 || st == NULL ) +void PicoSetSurfaceST( picoSurface_t *surface, int array, int num, picoVec2_t st ){ + if ( surface == NULL || num < 0 || st == NULL ) { return; - if( !PicoAdjustSurface( surface, num + 1, array + 1, 0, 0, 0 ) ) + } + if ( !PicoAdjustSurface( surface, num + 1, array + 1, 0, 0, 0 ) ) { return; + } surface->st[ array ][ num ][ 0 ] = st[ 0 ]; surface->st[ array ][ num ][ 1 ] = st[ 1 ]; } -void PicoSetSurfaceColor( picoSurface_t *surface, int array, int num, picoColor_t color ) -{ - if( surface == NULL || num < 0 || color == NULL ) +void PicoSetSurfaceColor( picoSurface_t *surface, int array, int num, picoColor_t color ){ + if ( surface == NULL || num < 0 || color == NULL ) { return; - if( !PicoAdjustSurface( surface, num + 1, 0, array + 1, 0, 0 ) ) + } + if ( !PicoAdjustSurface( surface, num + 1, 0, array + 1, 0, 0 ) ) { return; + } surface->color[ array ][ num ][ 0 ] = color[ 0 ]; surface->color[ array ][ num ][ 1 ] = color[ 1 ]; surface->color[ array ][ num ][ 2 ] = color[ 2 ]; @@ -923,118 +956,125 @@ void PicoSetSurfaceColor( picoSurface_t *surface, int array, int num, picoColor_ -void PicoSetSurfaceIndex( picoSurface_t *surface, int num, picoIndex_t index ) -{ - if( surface == NULL || num < 0 ) +void PicoSetSurfaceIndex( picoSurface_t *surface, int num, picoIndex_t index ){ + if ( surface == NULL || num < 0 ) { return; - if( !PicoAdjustSurface( surface, 0, 0, 0, num + 1, 0 ) ) + } + if ( !PicoAdjustSurface( surface, 0, 0, 0, num + 1, 0 ) ) { return; + } surface->index[ num ] = index; } -void PicoSetSurfaceIndexes( picoSurface_t *surface, int num, picoIndex_t *index, int count ) -{ - if( num < 0 || index == NULL || count < 1 ) +void PicoSetSurfaceIndexes( picoSurface_t *surface, int num, picoIndex_t *index, int count ){ + if ( num < 0 || index == NULL || count < 1 ) { return; - if( !PicoAdjustSurface( surface, 0, 0, 0, num + count, 0 ) ) + } + if ( !PicoAdjustSurface( surface, 0, 0, 0, num + count, 0 ) ) { return; + } memcpy( &surface->index[ num ], index, count * sizeof( surface->index[ num ] ) ); } -void PicoSetFaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ) -{ - if( surface == NULL || num < 0 || normal == NULL ) +void PicoSetFaceNormal( picoSurface_t *surface, int num, picoVec3_t normal ){ + if ( surface == NULL || num < 0 || normal == NULL ) { return; - if( !PicoAdjustSurface( surface, 0, 0, 0, 0, num + 1 ) ) + } + if ( !PicoAdjustSurface( surface, 0, 0, 0, 0, num + 1 ) ) { return; + } _pico_copy_vec( normal, surface->faceNormal[ num ] ); } -void PicoSetSurfaceSpecial( picoSurface_t *surface, int num, int special ) -{ - if( surface == NULL || num < 0 || num >= PICO_MAX_SPECIAL ) +void PicoSetSurfaceSpecial( picoSurface_t *surface, int num, int special ){ + if ( surface == NULL || num < 0 || num >= PICO_MAX_SPECIAL ) { return; + } surface->special[ num ] = special; } /*---------------------------------------------------------------------------- - PicoGet*() Getter Functions -----------------------------------------------------------------------------*/ + PicoGet*() Getter Functions + ----------------------------------------------------------------------------*/ -char *PicoGetModelName( picoModel_t *model ) -{ - if( model == NULL ) +char *PicoGetModelName( picoModel_t *model ){ + if ( model == NULL ) { return NULL; - if( model->name == NULL) + } + if ( model->name == NULL ) { return (char*) ""; + } return model->name; } -char *PicoGetModelFileName( picoModel_t *model ) -{ - if( model == NULL ) +char *PicoGetModelFileName( picoModel_t *model ){ + if ( model == NULL ) { return NULL; - if( model->fileName == NULL) + } + if ( model->fileName == NULL ) { return (char*) ""; + } return model->fileName; } -int PicoGetModelFrameNum( picoModel_t *model ) -{ - if( model == NULL ) +int PicoGetModelFrameNum( picoModel_t *model ){ + if ( model == NULL ) { return 0; + } return model->frameNum; } -int PicoGetModelNumFrames( picoModel_t *model ) -{ - if( model == NULL ) +int PicoGetModelNumFrames( picoModel_t *model ){ + if ( model == NULL ) { return 0; + } return model->numFrames; } -void *PicoGetModelData( picoModel_t *model ) -{ - if( model == NULL ) +void *PicoGetModelData( picoModel_t *model ){ + if ( model == NULL ) { return NULL; + } return model->data; } -int PicoGetModelNumShaders( picoModel_t *model ) -{ - if( model == NULL ) +int PicoGetModelNumShaders( picoModel_t *model ){ + if ( model == NULL ) { return 0; + } return model->numShaders; } -picoShader_t *PicoGetModelShader( picoModel_t *model, int num ) -{ +picoShader_t *PicoGetModelShader( picoModel_t *model, int num ){ /* a few sanity checks */ - if( model == NULL ) + if ( model == NULL ) { return NULL; - if( model->shader == NULL) + } + if ( model->shader == NULL ) { return NULL; - if( num < 0 || num >= model->numShaders ) + } + if ( num < 0 || num >= model->numShaders ) { return NULL; + } /* return the shader */ return model->shader[ num ]; @@ -1042,24 +1082,26 @@ picoShader_t *PicoGetModelShader( picoModel_t *model, int num ) -int PicoGetModelNumSurfaces( picoModel_t *model ) -{ - if( model == NULL ) +int PicoGetModelNumSurfaces( picoModel_t *model ){ + if ( model == NULL ) { return 0; + } return model->numSurfaces; } -picoSurface_t *PicoGetModelSurface( picoModel_t *model, int num ) -{ +picoSurface_t *PicoGetModelSurface( picoModel_t *model, int num ){ /* a few sanity checks */ - if( model == NULL ) + if ( model == NULL ) { return NULL; - if( model->surface == NULL) + } + if ( model->surface == NULL ) { return NULL; - if( num < 0 || num >= model->numSurfaces ) + } + if ( num < 0 || num >= model->numSurfaces ) { return NULL; + } /* return the surface */ return model->surface[ num ]; @@ -1067,321 +1109,321 @@ picoSurface_t *PicoGetModelSurface( picoModel_t *model, int num ) -int PicoGetModelTotalVertexes( picoModel_t *model ) -{ - int i, count; +int PicoGetModelTotalVertexes( picoModel_t *model ){ + int i, count; - if( model == NULL ) + if ( model == NULL ) { return 0; - if( model->surface == NULL ) + } + if ( model->surface == NULL ) { return 0; + } count = 0; - for( i = 0; i < model->numSurfaces; i++ ) - count += PicoGetSurfaceNumVertexes( model->surface[ i ] ); + for ( i = 0; i < model->numSurfaces; i++ ) + count += PicoGetSurfaceNumVertexes( model->surface[ i ] ); return count; } -int PicoGetModelTotalIndexes( picoModel_t *model ) -{ - int i, count; +int PicoGetModelTotalIndexes( picoModel_t *model ){ + int i, count; - if( model == NULL ) + if ( model == NULL ) { return 0; - if( model->surface == NULL ) + } + if ( model->surface == NULL ) { return 0; + } count = 0; - for( i = 0; i < model->numSurfaces; i++ ) - count += PicoGetSurfaceNumIndexes( model->surface[ i ] ); + for ( i = 0; i < model->numSurfaces; i++ ) + count += PicoGetSurfaceNumIndexes( model->surface[ i ] ); return count; } -char *PicoGetShaderName( picoShader_t *shader ) -{ - if( shader == NULL ) +char *PicoGetShaderName( picoShader_t *shader ){ + if ( shader == NULL ) { return NULL; - if( shader->name == NULL) + } + if ( shader->name == NULL ) { return (char*) ""; + } return shader->name; } -char *PicoGetShaderMapName( picoShader_t *shader ) -{ - if( shader == NULL ) +char *PicoGetShaderMapName( picoShader_t *shader ){ + if ( shader == NULL ) { return NULL; - if( shader->mapName == NULL) + } + if ( shader->mapName == NULL ) { return (char*) ""; + } return shader->mapName; } -picoByte_t *PicoGetShaderAmbientColor( picoShader_t *shader ) -{ - if( shader == NULL ) +picoByte_t *PicoGetShaderAmbientColor( picoShader_t *shader ){ + if ( shader == NULL ) { return NULL; + } return shader->ambientColor; } -picoByte_t *PicoGetShaderDiffuseColor( picoShader_t *shader ) -{ - if( shader == NULL ) +picoByte_t *PicoGetShaderDiffuseColor( picoShader_t *shader ){ + if ( shader == NULL ) { return NULL; + } return shader->diffuseColor; } -picoByte_t *PicoGetShaderSpecularColor( picoShader_t *shader ) -{ - if( shader == NULL ) +picoByte_t *PicoGetShaderSpecularColor( picoShader_t *shader ){ + if ( shader == NULL ) { return NULL; + } return shader->specularColor; } -float PicoGetShaderTransparency( picoShader_t *shader ) -{ - if( shader == NULL ) +float PicoGetShaderTransparency( picoShader_t *shader ){ + if ( shader == NULL ) { return 0.0f; + } return shader->transparency; } -float PicoGetShaderShininess( picoShader_t *shader ) -{ - if( shader == NULL ) +float PicoGetShaderShininess( picoShader_t *shader ){ + if ( shader == NULL ) { return 0.0f; + } return shader->shininess; } -void *PicoGetSurfaceData( picoSurface_t *surface ) -{ - if( surface == NULL ) +void *PicoGetSurfaceData( picoSurface_t *surface ){ + if ( surface == NULL ) { return NULL; + } return surface->data; } -picoSurfaceType_t PicoGetSurfaceType( picoSurface_t *surface ) -{ - if( surface == NULL ) +picoSurfaceType_t PicoGetSurfaceType( picoSurface_t *surface ){ + if ( surface == NULL ) { return PICO_BAD; + } return surface->type; } -char *PicoGetSurfaceName( picoSurface_t *surface ) -{ - if( surface == NULL ) +char *PicoGetSurfaceName( picoSurface_t *surface ){ + if ( surface == NULL ) { return NULL; - if( surface->name == NULL ) + } + if ( surface->name == NULL ) { return (char*) ""; + } return surface->name; } -picoShader_t *PicoGetSurfaceShader( picoSurface_t *surface ) -{ - if( surface == NULL ) +picoShader_t *PicoGetSurfaceShader( picoSurface_t *surface ){ + if ( surface == NULL ) { return NULL; + } return surface->shader; } -int PicoGetSurfaceNumVertexes( picoSurface_t *surface ) -{ - if( surface == NULL ) +int PicoGetSurfaceNumVertexes( picoSurface_t *surface ){ + if ( surface == NULL ) { return 0; + } return surface->numVertexes; } -picoVec_t *PicoGetSurfaceXYZ( picoSurface_t *surface, int num ) -{ - if( surface == NULL || num < 0 || num > surface->numVertexes ) +picoVec_t *PicoGetSurfaceXYZ( picoSurface_t *surface, int num ){ + if ( surface == NULL || num < 0 || num > surface->numVertexes ) { return NULL; + } return surface->xyz[ num ]; } -picoVec_t *PicoGetSurfaceNormal( picoSurface_t *surface, int num ) -{ - if( surface == NULL || num < 0 || num > surface->numVertexes ) +picoVec_t *PicoGetSurfaceNormal( picoSurface_t *surface, int num ){ + if ( surface == NULL || num < 0 || num > surface->numVertexes ) { return NULL; + } return surface->normal[ num ]; } -picoVec_t *PicoGetSurfaceST( picoSurface_t *surface, int array, int num ) -{ - if( surface == NULL || array < 0 || array > surface->numSTArrays || num < 0 || num > surface->numVertexes ) +picoVec_t *PicoGetSurfaceST( picoSurface_t *surface, int array, int num ){ + if ( surface == NULL || array < 0 || array > surface->numSTArrays || num < 0 || num > surface->numVertexes ) { return NULL; + } return surface->st[ array ][ num ]; } -picoByte_t *PicoGetSurfaceColor( picoSurface_t *surface, int array, int num ) -{ - if( surface == NULL || array < 0 || array > surface->numColorArrays || num < 0 || num > surface->numVertexes ) +picoByte_t *PicoGetSurfaceColor( picoSurface_t *surface, int array, int num ){ + if ( surface == NULL || array < 0 || array > surface->numColorArrays || num < 0 || num > surface->numVertexes ) { return NULL; + } return surface->color[ array ][ num ]; } -int PicoGetSurfaceNumIndexes( picoSurface_t *surface ) -{ - if( surface == NULL ) +int PicoGetSurfaceNumIndexes( picoSurface_t *surface ){ + if ( surface == NULL ) { return 0; + } return surface->numIndexes; } -picoIndex_t PicoGetSurfaceIndex( picoSurface_t *surface, int num ) -{ - if( surface == NULL || num < 0 || num > surface->numIndexes ) +picoIndex_t PicoGetSurfaceIndex( picoSurface_t *surface, int num ){ + if ( surface == NULL || num < 0 || num > surface->numIndexes ) { return 0; + } return surface->index[ num ]; } -picoIndex_t *PicoGetSurfaceIndexes( picoSurface_t *surface, int num ) -{ - if( surface == NULL || num < 0 || num > surface->numIndexes ) +picoIndex_t *PicoGetSurfaceIndexes( picoSurface_t *surface, int num ){ + if ( surface == NULL || num < 0 || num > surface->numIndexes ) { return NULL; + } return &surface->index[ num ]; } -picoVec_t *PicoGetFaceNormal( picoSurface_t *surface, int num ) -{ - if( surface == NULL || num < 0 || num > surface->numFaceNormals ) +picoVec_t *PicoGetFaceNormal( picoSurface_t *surface, int num ){ + if ( surface == NULL || num < 0 || num > surface->numFaceNormals ) { return NULL; + } return surface->faceNormal[ num ]; } -int PicoGetSurfaceSpecial( picoSurface_t *surface, int num ) -{ - if( surface == NULL || num < 0 || num >= PICO_MAX_SPECIAL ) +int PicoGetSurfaceSpecial( picoSurface_t *surface, int num ){ + if ( surface == NULL || num < 0 || num >= PICO_MAX_SPECIAL ) { return 0; + } return surface->special[ num ]; } /* ---------------------------------------------------------------------------- -hashtable related functions ----------------------------------------------------------------------------- */ + hashtable related functions + ---------------------------------------------------------------------------- */ /* hashtable code for faster vertex lookups */ //#define HASHTABLE_SIZE 32768 // 2048 /* power of 2, use & */ -#define HASHTABLE_SIZE 7919 // 32749 // 2039 /* prime, use % */ +#define HASHTABLE_SIZE 7919 // 32749 // 2039 /* prime, use % */ -int PicoGetHashTableSize( void ) -{ +int PicoGetHashTableSize( void ){ return HASHTABLE_SIZE; } #define HASH_USE_EPSILON #ifdef HASH_USE_EPSILON -#define HASH_XYZ_EPSILON 0.01f -#define HASH_XYZ_EPSILONSPACE_MULTIPLIER 1.f / HASH_XYZ_EPSILON -#define HASH_ST_EPSILON 0.0001f -#define HASH_NORMAL_EPSILON 0.02f +#define HASH_XYZ_EPSILON 0.01f +#define HASH_XYZ_EPSILONSPACE_MULTIPLIER 1.f / HASH_XYZ_EPSILON +#define HASH_ST_EPSILON 0.0001f +#define HASH_NORMAL_EPSILON 0.02f #endif -unsigned int PicoVertexCoordGenerateHash( picoVec3_t xyz ) -{ +unsigned int PicoVertexCoordGenerateHash( picoVec3_t xyz ){ unsigned int hash = 0; #ifndef HASH_USE_EPSILON - hash += ~(*((unsigned int*) &xyz[ 0 ]) << 15); - hash ^= (*((unsigned int*) &xyz[ 0 ]) >> 10); - hash += (*((unsigned int*) &xyz[ 1 ]) << 3); - hash ^= (*((unsigned int*) &xyz[ 1 ]) >> 6); - hash += ~(*((unsigned int*) &xyz[ 2 ]) << 11); - hash ^= (*((unsigned int*) &xyz[ 2 ]) >> 16); + hash += ~( *( (unsigned int*) &xyz[ 0 ] ) << 15 ); + hash ^= ( *( (unsigned int*) &xyz[ 0 ] ) >> 10 ); + hash += ( *( (unsigned int*) &xyz[ 1 ] ) << 3 ); + hash ^= ( *( (unsigned int*) &xyz[ 1 ] ) >> 6 ); + hash += ~( *( (unsigned int*) &xyz[ 2 ] ) << 11 ); + hash ^= ( *( (unsigned int*) &xyz[ 2 ] ) >> 16 ); #else picoVec3_t xyz_epsilonspace; _pico_scale_vec( xyz, HASH_XYZ_EPSILONSPACE_MULTIPLIER, xyz_epsilonspace ); - xyz_epsilonspace[ 0 ] = (float)floor(xyz_epsilonspace[ 0 ]); - xyz_epsilonspace[ 1 ] = (float)floor(xyz_epsilonspace[ 1 ]); - xyz_epsilonspace[ 2 ] = (float)floor(xyz_epsilonspace[ 2 ]); - - hash += ~(*((unsigned int*) &xyz_epsilonspace[ 0 ]) << 15); - hash ^= (*((unsigned int*) &xyz_epsilonspace[ 0 ]) >> 10); - hash += (*((unsigned int*) &xyz_epsilonspace[ 1 ]) << 3); - hash ^= (*((unsigned int*) &xyz_epsilonspace[ 1 ]) >> 6); - hash += ~(*((unsigned int*) &xyz_epsilonspace[ 2 ]) << 11); - hash ^= (*((unsigned int*) &xyz_epsilonspace[ 2 ]) >> 16); + xyz_epsilonspace[ 0 ] = (float)floor( xyz_epsilonspace[ 0 ] ); + xyz_epsilonspace[ 1 ] = (float)floor( xyz_epsilonspace[ 1 ] ); + xyz_epsilonspace[ 2 ] = (float)floor( xyz_epsilonspace[ 2 ] ); + + hash += ~( *( (unsigned int*) &xyz_epsilonspace[ 0 ] ) << 15 ); + hash ^= ( *( (unsigned int*) &xyz_epsilonspace[ 0 ] ) >> 10 ); + hash += ( *( (unsigned int*) &xyz_epsilonspace[ 1 ] ) << 3 ); + hash ^= ( *( (unsigned int*) &xyz_epsilonspace[ 1 ] ) >> 6 ); + hash += ~( *( (unsigned int*) &xyz_epsilonspace[ 2 ] ) << 11 ); + hash ^= ( *( (unsigned int*) &xyz_epsilonspace[ 2 ] ) >> 16 ); #endif //hash = hash & (HASHTABLE_SIZE-1); - hash = hash % (HASHTABLE_SIZE); + hash = hash % ( HASHTABLE_SIZE ); return hash; } -picoVertexCombinationHash_t **PicoNewVertexCombinationHashTable( void ) -{ - picoVertexCombinationHash_t **hashTable = _pico_alloc( HASHTABLE_SIZE * sizeof(picoVertexCombinationHash_t*) ); +picoVertexCombinationHash_t **PicoNewVertexCombinationHashTable( void ){ + picoVertexCombinationHash_t **hashTable = _pico_alloc( HASHTABLE_SIZE * sizeof( picoVertexCombinationHash_t* ) ); - memset( hashTable, 0, HASHTABLE_SIZE * sizeof(picoVertexCombinationHash_t*) ); + memset( hashTable, 0, HASHTABLE_SIZE * sizeof( picoVertexCombinationHash_t* ) ); return hashTable; } -void PicoFreeVertexCombinationHashTable( picoVertexCombinationHash_t **hashTable ) -{ - int i; - picoVertexCombinationHash_t *vertexCombinationHash; +void PicoFreeVertexCombinationHashTable( picoVertexCombinationHash_t **hashTable ){ + int i; + picoVertexCombinationHash_t *vertexCombinationHash; picoVertexCombinationHash_t *nextVertexCombinationHash; /* dummy check */ - if (hashTable == NULL) + if ( hashTable == NULL ) { return; + } - for( i = 0; i < HASHTABLE_SIZE; i++ ) + for ( i = 0; i < HASHTABLE_SIZE; i++ ) { - if (hashTable[ i ]) - { + if ( hashTable[ i ] ) { nextVertexCombinationHash = NULL; - for( vertexCombinationHash = hashTable[ i ]; vertexCombinationHash; vertexCombinationHash = nextVertexCombinationHash ) + for ( vertexCombinationHash = hashTable[ i ]; vertexCombinationHash; vertexCombinationHash = nextVertexCombinationHash ) { nextVertexCombinationHash = vertexCombinationHash->next; - if (vertexCombinationHash->data != NULL) - { + if ( vertexCombinationHash->data != NULL ) { _pico_free( vertexCombinationHash->data ); } _pico_free( vertexCombinationHash ); @@ -1392,53 +1434,60 @@ void PicoFreeVertexCombinationHashTable( picoVertexCombinationHash_t **hashTable _pico_free( hashTable ); } -picoVertexCombinationHash_t *PicoFindVertexCombinationInHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color ) -{ - unsigned int hash; - picoVertexCombinationHash_t *vertexCombinationHash; +picoVertexCombinationHash_t *PicoFindVertexCombinationInHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color ){ + unsigned int hash; + picoVertexCombinationHash_t *vertexCombinationHash; /* dumy check */ - if (hashTable == NULL || xyz == NULL || normal == NULL || st == NULL || color == NULL ) + if ( hashTable == NULL || xyz == NULL || normal == NULL || st == NULL || color == NULL ) { return NULL; + } hash = PicoVertexCoordGenerateHash( xyz ); - for( vertexCombinationHash = hashTable[ hash ]; vertexCombinationHash; vertexCombinationHash = vertexCombinationHash->next ) + for ( vertexCombinationHash = hashTable[ hash ]; vertexCombinationHash; vertexCombinationHash = vertexCombinationHash->next ) { #ifndef HASH_USE_EPSILON /* check xyz */ - if( (vertexCombinationHash->vcd.xyz[ 0 ] != xyz[ 0 ] || vertexCombinationHash->vcd.xyz[ 1 ] != xyz[ 1 ] || vertexCombinationHash->vcd.xyz[ 2 ] != xyz[ 2 ]) ) + if ( ( vertexCombinationHash->vcd.xyz[ 0 ] != xyz[ 0 ] || vertexCombinationHash->vcd.xyz[ 1 ] != xyz[ 1 ] || vertexCombinationHash->vcd.xyz[ 2 ] != xyz[ 2 ] ) ) { continue; + } /* check normal */ - if( (vertexCombinationHash->vcd.normal[ 0 ] != normal[ 0 ] || vertexCombinationHash->vcd.normal[ 1 ] != normal[ 1 ] || vertexCombinationHash->vcd.normal[ 2 ] != normal[ 2 ]) ) + if ( ( vertexCombinationHash->vcd.normal[ 0 ] != normal[ 0 ] || vertexCombinationHash->vcd.normal[ 1 ] != normal[ 1 ] || vertexCombinationHash->vcd.normal[ 2 ] != normal[ 2 ] ) ) { continue; + } /* check st */ - if( vertexCombinationHash->vcd.st[ 0 ] != st[ 0 ] || vertexCombinationHash->vcd.st[ 1 ] != st[ 1 ] ) + if ( vertexCombinationHash->vcd.st[ 0 ] != st[ 0 ] || vertexCombinationHash->vcd.st[ 1 ] != st[ 1 ] ) { continue; + } #else /* check xyz */ - if( ( fabs(xyz[ 0 ] - vertexCombinationHash->vcd.xyz[ 0 ]) ) > HASH_XYZ_EPSILON || - ( fabs(xyz[ 1 ] - vertexCombinationHash->vcd.xyz[ 1 ]) ) > HASH_XYZ_EPSILON || - ( fabs(xyz[ 2 ] - vertexCombinationHash->vcd.xyz[ 2 ]) ) > HASH_XYZ_EPSILON ) + if ( ( fabs( xyz[ 0 ] - vertexCombinationHash->vcd.xyz[ 0 ] ) ) > HASH_XYZ_EPSILON || + ( fabs( xyz[ 1 ] - vertexCombinationHash->vcd.xyz[ 1 ] ) ) > HASH_XYZ_EPSILON || + ( fabs( xyz[ 2 ] - vertexCombinationHash->vcd.xyz[ 2 ] ) ) > HASH_XYZ_EPSILON ) { continue; + } /* check normal */ - if( ( fabs(normal[ 0 ] - vertexCombinationHash->vcd.normal[ 0 ]) ) > HASH_NORMAL_EPSILON || - ( fabs(normal[ 1 ] - vertexCombinationHash->vcd.normal[ 1 ]) ) > HASH_NORMAL_EPSILON || - ( fabs(normal[ 2 ] - vertexCombinationHash->vcd.normal[ 2 ]) ) > HASH_NORMAL_EPSILON ) + if ( ( fabs( normal[ 0 ] - vertexCombinationHash->vcd.normal[ 0 ] ) ) > HASH_NORMAL_EPSILON || + ( fabs( normal[ 1 ] - vertexCombinationHash->vcd.normal[ 1 ] ) ) > HASH_NORMAL_EPSILON || + ( fabs( normal[ 2 ] - vertexCombinationHash->vcd.normal[ 2 ] ) ) > HASH_NORMAL_EPSILON ) { continue; + } /* check st */ - if( ( fabs(st[ 0 ] - vertexCombinationHash->vcd.st[ 0 ]) ) > HASH_ST_EPSILON || - ( fabs(st[ 1 ] - vertexCombinationHash->vcd.st[ 1 ]) ) > HASH_ST_EPSILON ) + if ( ( fabs( st[ 0 ] - vertexCombinationHash->vcd.st[ 0 ] ) ) > HASH_ST_EPSILON || + ( fabs( st[ 1 ] - vertexCombinationHash->vcd.st[ 1 ] ) ) > HASH_ST_EPSILON ) { continue; + } #endif /* check color */ - if( *((int*) vertexCombinationHash->vcd.color) != *((int*) color) ) + if ( *( (int*) vertexCombinationHash->vcd.color ) != *( (int*) color ) ) { continue; + } /* gotcha */ return vertexCombinationHash; @@ -1447,19 +1496,20 @@ picoVertexCombinationHash_t *PicoFindVertexCombinationInHashTable( picoVertexCom return NULL; } -picoVertexCombinationHash_t *PicoAddVertexCombinationToHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color, picoIndex_t index ) -{ - unsigned int hash; - picoVertexCombinationHash_t *vertexCombinationHash; +picoVertexCombinationHash_t *PicoAddVertexCombinationToHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color, picoIndex_t index ){ + unsigned int hash; + picoVertexCombinationHash_t *vertexCombinationHash; /* dumy check */ - if (hashTable == NULL || xyz == NULL || normal == NULL || st == NULL || color == NULL ) + if ( hashTable == NULL || xyz == NULL || normal == NULL || st == NULL || color == NULL ) { return NULL; + } - vertexCombinationHash = _pico_alloc( sizeof(picoVertexCombinationHash_t) ); + vertexCombinationHash = _pico_alloc( sizeof( picoVertexCombinationHash_t ) ); - if (!vertexCombinationHash) + if ( !vertexCombinationHash ) { return NULL; + } hash = PicoVertexCoordGenerateHash( xyz ); @@ -1476,57 +1526,61 @@ picoVertexCombinationHash_t *PicoAddVertexCombinationToHashTable( picoVertexComb } /* ---------------------------------------------------------------------------- -specialized routines ----------------------------------------------------------------------------- */ + specialized routines + ---------------------------------------------------------------------------- */ /* -PicoFindSurfaceVertex() -finds a vertex matching the set parameters -fixme: needs non-naive algorithm -*/ + PicoFindSurfaceVertex() + finds a vertex matching the set parameters + fixme: needs non-naive algorithm + */ -int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color ) -{ - int i, j; +int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color ){ + int i, j; /* dummy check */ - if( surface == NULL || surface->numVertexes <= 0 ) + if ( surface == NULL || surface->numVertexes <= 0 ) { return -1; + } /* walk vertex list */ - for( i = 0; i < surface->numVertexes; i++ ) + for ( i = 0; i < surface->numVertexes; i++ ) { /* check xyz */ - if( xyz != NULL && (surface->xyz[ i ][ 0 ] != xyz[ 0 ] || surface->xyz[ i ][ 1 ] != xyz[ 1 ] || surface->xyz[ i ][ 2 ] != xyz[ 2 ]) ) + if ( xyz != NULL && ( surface->xyz[ i ][ 0 ] != xyz[ 0 ] || surface->xyz[ i ][ 1 ] != xyz[ 1 ] || surface->xyz[ i ][ 2 ] != xyz[ 2 ] ) ) { continue; + } /* check normal */ - if( normal != NULL && (surface->normal[ i ][ 0 ] != normal[ 0 ] || surface->normal[ i ][ 1 ] != normal[ 1 ] || surface->normal[ i ][ 2 ] != normal[ 2 ]) ) + if ( normal != NULL && ( surface->normal[ i ][ 0 ] != normal[ 0 ] || surface->normal[ i ][ 1 ] != normal[ 1 ] || surface->normal[ i ][ 2 ] != normal[ 2 ] ) ) { continue; + } /* check st */ - if( numSTs > 0 && st != NULL ) - { - for( j = 0; j < numSTs; j++ ) + if ( numSTs > 0 && st != NULL ) { + for ( j = 0; j < numSTs; j++ ) { - if( surface->st[ j ][ i ][ 0 ] != st[ j ][ 0 ] || surface->st[ j ][ i ][ 1 ] != st[ j ][ 1 ] ) + if ( surface->st[ j ][ i ][ 0 ] != st[ j ][ 0 ] || surface->st[ j ][ i ][ 1 ] != st[ j ][ 1 ] ) { break; + } } - if( j != numSTs ) + if ( j != numSTs ) { continue; + } } /* check color */ - if( numColors > 0 && color != NULL ) - { - for( j = 0; j < numSTs; j++ ) + if ( numColors > 0 && color != NULL ) { + for ( j = 0; j < numSTs; j++ ) { - if( *((int*) surface->color[ j ]) != *((int*) color[ j ]) ) + if ( *( (int*) surface->color[ j ] ) != *( (int*) color[ j ] ) ) { break; + } } - if( j != numColors ) + if ( j != numColors ) { continue; + } } /* vertex matches */ @@ -1540,34 +1594,34 @@ int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t /* -PicoFixSurfaceNormals() -fixes broken normals (certain formats bork normals) -*/ + PicoFixSurfaceNormals() + fixes broken normals (certain formats bork normals) + */ -#define MAX_NORMAL_VOTES 128 -#define EQUAL_NORMAL_EPSILON 0.01 -#define BAD_NORMAL_EPSILON 0.5 +#define MAX_NORMAL_VOTES 128 +#define EQUAL_NORMAL_EPSILON 0.01 +#define BAD_NORMAL_EPSILON 0.5 -void PicoFixSurfaceNormals( picoSurface_t *surface ) -{ - int i, j, k, a, b, c, numVotes, faceIndex; - picoVec3_t votes[ MAX_NORMAL_VOTES ]; - picoVec3_t *normals, diff; - picoVec4_t plane; +void PicoFixSurfaceNormals( picoSurface_t *surface ){ + int i, j, k, a, b, c, numVotes, faceIndex; + picoVec3_t votes[ MAX_NORMAL_VOTES ]; + picoVec3_t *normals, diff; + picoVec4_t plane; /* dummy check */ - if( surface == NULL || surface->numVertexes == 0 ) + if ( surface == NULL || surface->numVertexes == 0 ) { return; + } /* fixme: handle other surface types */ - if( surface->type != PICO_TRIANGLES ) + if ( surface->type != PICO_TRIANGLES ) { return; + } /* allocate normal storage */ normals = _pico_alloc( surface->numVertexes * sizeof( *normals ) ); - if( normals == NULL ) - { + if ( normals == NULL ) { _pico_printf( PICO_ERROR, "PicoFixSurfaceNormals: Unable to allocate memory for temporary normal storage" ); return; } @@ -1576,13 +1630,13 @@ void PicoFixSurfaceNormals( picoSurface_t *surface ) memset( normals, 0, surface->numVertexes * sizeof( *normals ) ); /* walk vertex list */ - for( i = 0; i < surface->numVertexes; i++ ) + for ( i = 0; i < surface->numVertexes; i++ ) { /* zero out votes */ numVotes = 0; /* find all the triangles that reference this vertex */ - for( j = 0, faceIndex = 0; j < surface->numIndexes; j += 3, faceIndex++ ) + for ( j = 0, faceIndex = 0; j < surface->numIndexes; j += 3, faceIndex++ ) { /* get triangle */ a = surface->index[ j ]; @@ -1590,50 +1644,47 @@ void PicoFixSurfaceNormals( picoSurface_t *surface ) c = surface->index[ j + 2 ]; /* ignore degenerate triangles */ - if( a == b || b == c || c == a ) + if ( a == b || b == c || c == a ) { continue; + } /* ignore indexes out of range */ - if( a < 0 || a >= surface->numVertexes || - b < 0 || b >= surface->numVertexes || - c < 0 || c >= surface->numVertexes ) + if ( a < 0 || a >= surface->numVertexes || + b < 0 || b >= surface->numVertexes || + c < 0 || c >= surface->numVertexes ) { continue; + } /* test triangle */ - if( a == i || b == i || c == i ) - { + if ( a == i || b == i || c == i ) { /* if this surface has face normals */ - if( surface->numFaceNormals && faceIndex < surface->numFaceNormals ) - { + if ( surface->numFaceNormals && faceIndex < surface->numFaceNormals ) { _pico_copy_vec( surface->faceNormal[ faceIndex ], plane ); - if( plane[ 0 ] == 0.f && plane[ 1 ] == 0.f && plane[ 2 ] == 0.f ) - { + if ( plane[ 0 ] == 0.f && plane[ 1 ] == 0.f && plane[ 2 ] == 0.f ) { /* if null normal, make plane from the 3 points */ - if( _pico_calc_plane( plane, surface->xyz[ a ], surface->xyz[ b ], surface->xyz[ c ] ) == 0 ) - { + if ( _pico_calc_plane( plane, surface->xyz[ a ], surface->xyz[ b ], surface->xyz[ c ] ) == 0 ) { continue; } } } /* make a plane from the 3 points */ - else if( _pico_calc_plane( plane, surface->xyz[ a ], surface->xyz[ b ], surface->xyz[ c ] ) == 0 ) - { + else if ( _pico_calc_plane( plane, surface->xyz[ a ], surface->xyz[ b ], surface->xyz[ c ] ) == 0 ) { continue; } /* see if this normal has already been voted */ - for( k = 0; k < numVotes; k++ ) + for ( k = 0; k < numVotes; k++ ) { _pico_subtract_vec( plane, votes[ k ], diff ); - if( fabs( diff[ 0 ] ) < EQUAL_NORMAL_EPSILON && - fabs( diff[ 1 ] ) < EQUAL_NORMAL_EPSILON && - fabs( diff[ 2 ] ) < EQUAL_NORMAL_EPSILON ) + if ( fabs( diff[ 0 ] ) < EQUAL_NORMAL_EPSILON && + fabs( diff[ 1 ] ) < EQUAL_NORMAL_EPSILON && + fabs( diff[ 2 ] ) < EQUAL_NORMAL_EPSILON ) { break; + } } /* add a new vote? */ - if( k == numVotes && numVotes < MAX_NORMAL_VOTES ) - { + if ( k == numVotes && numVotes < MAX_NORMAL_VOTES ) { _pico_copy_vec( plane, votes[ numVotes ] ); numVotes++; } @@ -1641,19 +1692,16 @@ void PicoFixSurfaceNormals( picoSurface_t *surface ) } /* tally votes */ - if( numVotes > 0 ) - { + if ( numVotes > 0 ) { /* create average normal */ _pico_zero_vec( normals[ i ] ); - for( k = 0; k < numVotes; k++ ) + for ( k = 0; k < numVotes; k++ ) _pico_add_vec( normals[ i ], votes[ k ], normals[ i ] ); /* normalize it */ - if( _pico_normalize_vec( normals[ i ] ) ) - { + if ( _pico_normalize_vec( normals[ i ] ) ) { /* test against actual normal */ - if( fabs( _pico_dot_vec( normals[ i ], surface->normal[ i ] ) - 1 ) > BAD_NORMAL_EPSILON ) - { + if ( fabs( _pico_dot_vec( normals[ i ], surface->normal[ i ] ) - 1 ) > BAD_NORMAL_EPSILON ) { //% printf( "Normal %8d: (%f %f %f) -> (%f %f %f)\n", i, //% surface->normal[ i ][ 0 ], surface->normal[ i ][ 1 ], surface->normal[ i ][ 2 ], //% normals[ i ][ 0 ], normals[ i ][ 1 ], normals[ i ][ 2 ] ); @@ -1671,104 +1719,113 @@ void PicoFixSurfaceNormals( picoSurface_t *surface ) /* -PicoRemapModel() - sea -remaps model material/etc. information using the remappings -contained in the given 'remapFile' (full path to the ascii file to open) -returns 1 on success or 0 on error -*/ + PicoRemapModel() - sea + remaps model material/etc. information using the remappings + contained in the given 'remapFile' (full path to the ascii file to open) + returns 1 on success or 0 on error + */ #define _prm_error_return \ -{ \ - _pico_free_parser( p ); \ - _pico_free_file( remapBuffer ); \ - return 0; \ -} + { \ + _pico_free_parser( p ); \ + _pico_free_file( remapBuffer ); \ + return 0; \ + } -int PicoRemapModel( picoModel_t *model, char *remapFile ) -{ - picoParser_t *p; - picoByte_t *remapBuffer; - int remapBufSize; +int PicoRemapModel( picoModel_t *model, char *remapFile ){ + picoParser_t *p; + picoByte_t *remapBuffer; + int remapBufSize; /* sanity checks */ - if( model == NULL || remapFile == NULL ) + if ( model == NULL || remapFile == NULL ) { return 0; + } /* load remap file contents */ _pico_load_file( remapFile,&remapBuffer,&remapBufSize ); /* check result */ - if( remapBufSize == 0 ) - return 1; /* file is empty: no error */ - if( remapBufSize < 0 ) - return 0; /* load failed: error */ + if ( remapBufSize == 0 ) { + return 1; /* file is empty: no error */ + } + if ( remapBufSize < 0 ) { + return 0; /* load failed: error */ + } /* create a new pico parser */ p = _pico_new_parser( remapBuffer, remapBufSize ); - if (p == NULL) - { + if ( p == NULL ) { /* ram is really cheap nowadays... */ _prm_error_return; } /* doo teh parse */ - while( 1 ) + while ( 1 ) { /* get next token in remap file */ - if (!_pico_parse( p,1 )) + if ( !_pico_parse( p,1 ) ) { break; + } /* skip over c++ style comment lines */ - if (!_pico_stricmp(p->token,"//")) - { + if ( !_pico_stricmp( p->token,"//" ) ) { _pico_parse_skip_rest( p ); continue; } /* block for quick material shader name remapping */ /* materials { "m" (=>|->|=) "s" } */ - if( !_pico_stricmp(p->token, "materials" ) ) - { + if ( !_pico_stricmp( p->token, "materials" ) ) { int level = 1; /* check bracket */ - if (!_pico_parse_check( p,1,"{" )) + if ( !_pico_parse_check( p,1,"{" ) ) { _prm_error_return; + } /* process assignments */ - while( 1 ) + while ( 1 ) { - picoShader_t *shader; - char *materialName; + picoShader_t *shader; + char *materialName; /* get material name */ - if (_pico_parse( p,1 ) == NULL) break; - if (!strlen(p->token)) continue; + if ( _pico_parse( p,1 ) == NULL ) { + break; + } + if ( !strlen( p->token ) ) { + continue; + } materialName = _pico_clone_alloc( p->token,-1 ); - if (materialName == NULL) + if ( materialName == NULL ) { _prm_error_return; + } /* handle levels */ - if (p->token[0] == '{') level++; - if (p->token[0] == '}') level--; - if (!level) break; + if ( p->token[0] == '{' ) { + level++; + } + if ( p->token[0] == '}' ) { + level--; + } + if ( !level ) { + break; + } /* get next token (assignment token or shader name) */ - if (!_pico_parse( p,0 )) - { + if ( !_pico_parse( p,0 ) ) { _pico_free( materialName ); _prm_error_return; } /* skip assignment token (if present) */ - if (!strcmp(p->token,"=>") || - !strcmp(p->token,"->") || - !strcmp(p->token,"=")) - { + if ( !strcmp( p->token,"=>" ) || + !strcmp( p->token,"->" ) || + !strcmp( p->token,"=" ) ) { /* simply grab the next token */ - if (!_pico_parse( p,0 )) - { + if ( !_pico_parse( p,0 ) ) { _pico_free( materialName ); _prm_error_return; } @@ -1777,8 +1834,7 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ) shader = PicoFindShader( model,materialName,0 ); /* we've found a material matching the name */ - if (shader != NULL) - { + if ( shader != NULL ) { PicoSetShaderName( shader,p->token ); } /* free memory used by material name */ @@ -1790,24 +1846,26 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ) } /* block for detailed single material remappings */ /* materials[ "m" ] { key data... } */ - else if (!_pico_stricmp(p->token,"materials[")) - { + else if ( !_pico_stricmp( p->token,"materials[" ) ) { picoShader_t *shader; char *tempMaterialName; int level = 1; /* get material name */ - if (!_pico_parse( p,0 )) + if ( !_pico_parse( p,0 ) ) { _prm_error_return; + } /* temporary copy of material name */ tempMaterialName = _pico_clone_alloc( p->token,-1 ); - if (tempMaterialName == NULL) + if ( tempMaterialName == NULL ) { _prm_error_return; + } /* check square closing bracket */ - if (!_pico_parse_check( p,0,"]" )) + if ( !_pico_parse_check( p,0,"]" ) ) { _prm_error_return; + } /* try to find material by name */ shader = PicoFindShader( model,tempMaterialName,0 ); @@ -1818,47 +1876,60 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ) /* we haven't found a material matching the name */ /* so we simply skip the braced section now and */ /* continue parsing with the next main token */ - if (shader == NULL) - { + if ( shader == NULL ) { _pico_parse_skip_braced( p ); continue; } /* check opening bracket */ - if (!_pico_parse_check( p,1,"{" )) + if ( !_pico_parse_check( p,1,"{" ) ) { _prm_error_return; + } /* process material info keys */ - while( 1 ) + while ( 1 ) { /* get key name */ - if (_pico_parse( p,1 ) == NULL) break; - if (!strlen(p->token)) continue; + if ( _pico_parse( p,1 ) == NULL ) { + break; + } + if ( !strlen( p->token ) ) { + continue; + } /* handle levels */ - if (p->token[0] == '{') level++; - if (p->token[0] == '}') level--; - if (!level) break; + if ( p->token[0] == '{' ) { + level++; + } + if ( p->token[0] == '}' ) { + level--; + } + if ( !level ) { + break; + } /* remap shader name */ - if (!_pico_stricmp(p->token,"shader")) - { - if (!_pico_parse( p,0 )) _prm_error_return; + if ( !_pico_stricmp( p->token,"shader" ) ) { + if ( !_pico_parse( p,0 ) ) { + _prm_error_return; + } PicoSetShaderName( shader,p->token ); } /* remap shader map name */ - else if (!_pico_stricmp(p->token,"mapname")) - { - if (!_pico_parse( p,0 )) _prm_error_return; + else if ( !_pico_stricmp( p->token,"mapname" ) ) { + if ( !_pico_parse( p,0 ) ) { + _prm_error_return; + } PicoSetShaderMapName( shader,p->token ); } /* remap shader's ambient color */ - else if (!_pico_stricmp(p->token,"ambient")) - { + else if ( !_pico_stricmp( p->token,"ambient" ) ) { picoColor_t color; - picoVec3_t v; + picoVec3_t v; /* get vector from parser */ - if (!_pico_parse_vec( p,v )) _prm_error_return; + if ( !_pico_parse_vec( p,v ) ) { + _prm_error_return; + } /* store as color */ color[ 0 ] = (picoByte_t)v[ 0 ]; @@ -1870,13 +1941,14 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ) PicoSetShaderAmbientColor( shader,color ); } /* remap shader's diffuse color */ - else if (!_pico_stricmp(p->token,"diffuse")) - { + else if ( !_pico_stricmp( p->token,"diffuse" ) ) { picoColor_t color; - picoVec3_t v; + picoVec3_t v; /* get vector from parser */ - if (!_pico_parse_vec( p,v )) _prm_error_return; + if ( !_pico_parse_vec( p,v ) ) { + _prm_error_return; + } /* store as color */ color[ 0 ] = (picoByte_t)v[ 0 ]; @@ -1888,13 +1960,14 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ) PicoSetShaderDiffuseColor( shader,color ); } /* remap shader's specular color */ - else if (!_pico_stricmp(p->token,"specular")) - { + else if ( !_pico_stricmp( p->token,"specular" ) ) { picoColor_t color; - picoVec3_t v; + picoVec3_t v; /* get vector from parser */ - if (!_pico_parse_vec( p,v )) _prm_error_return; + if ( !_pico_parse_vec( p,v ) ) { + _prm_error_return; + } /* store as color */ color[ 0 ] = (picoByte_t)v[ 0 ]; @@ -1922,15 +1995,14 @@ int PicoRemapModel( picoModel_t *model, char *remapFile ) /* -PicoAddTriangleToModel() - jhefty -A nice way to add individual triangles to the model. -Chooses an appropriate surface based on the shader, or adds a new surface if necessary -*/ + PicoAddTriangleToModel() - jhefty + A nice way to add individual triangles to the model. + Chooses an appropriate surface based on the shader, or adds a new surface if necessary + */ void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** normals, - int numSTs, picoVec2_t **st, int numColors, picoColor_t **colors, - picoShader_t* shader ) -{ + int numSTs, picoVec2_t **st, int numColors, picoColor_t **colors, + picoShader_t* shader ){ int i,j; int vertDataIndex; picoSurface_t* workSurface = NULL; @@ -1939,20 +2011,17 @@ void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** for ( i = 0 ; i < model->numSurfaces ; i++ ) { workSurface = model->surface[i]; - if ( workSurface->shader == shader ) - { + if ( workSurface->shader == shader ) { break; } } /* no surface uses this shader yet, so create a new surface */ - if ( !workSurface || i >=model->numSurfaces ) - { + if ( !workSurface || i >= model->numSurfaces ) { /* create a new surface in the model for the unique shader */ - workSurface = PicoNewSurface(model); - if ( !workSurface ) - { - _pico_printf ( PICO_ERROR , "Could not allocate a new surface!\n" ); + workSurface = PicoNewSurface( model ); + if ( !workSurface ) { + _pico_printf( PICO_ERROR, "Could not allocate a new surface!\n" ); return; } @@ -1966,33 +2035,32 @@ void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** for ( i = 0 ; i < 3 ; i++ ) { /* get the next free spot in the index array */ - int newVertIndex = PicoGetSurfaceNumIndexes ( workSurface ); + int newVertIndex = PicoGetSurfaceNumIndexes( workSurface ); /* get the index of the vertex that we're going to store at newVertIndex */ - vertDataIndex = PicoFindSurfaceVertexNum ( workSurface , *xyz[i] , *normals[i] , numSTs , st[i] , numColors , colors[i]); + vertDataIndex = PicoFindSurfaceVertexNum( workSurface, *xyz[i], *normals[i], numSTs, st[i], numColors, colors[i] ); /* the vertex wasn't found, so create a new vertex in the pool from the data we have */ - if ( vertDataIndex == -1 ) - { + if ( vertDataIndex == -1 ) { /* find the next spot for a new vertex */ - vertDataIndex = PicoGetSurfaceNumVertexes ( workSurface ); + vertDataIndex = PicoGetSurfaceNumVertexes( workSurface ); /* assign the data to it */ - PicoSetSurfaceXYZ ( workSurface ,vertDataIndex , *xyz[i] ); - PicoSetSurfaceNormal ( workSurface , vertDataIndex , *normals[i] ); + PicoSetSurfaceXYZ( workSurface,vertDataIndex, *xyz[i] ); + PicoSetSurfaceNormal( workSurface, vertDataIndex, *normals[i] ); /* make sure to copy over all available ST's and colors for the vertex */ for ( j = 0 ; j < numColors ; j++ ) { - PicoSetSurfaceColor( workSurface , j , vertDataIndex , colors[i][j] ); + PicoSetSurfaceColor( workSurface, j, vertDataIndex, colors[i][j] ); } for ( j = 0 ; j < numSTs ; j++ ) { - PicoSetSurfaceST ( workSurface , j , vertDataIndex , st[i][j] ); + PicoSetSurfaceST( workSurface, j, vertDataIndex, st[i][j] ); } } /* add this vertex to the triangle */ - PicoSetSurfaceIndex ( workSurface , newVertIndex , vertDataIndex ); + PicoSetSurfaceIndex( workSurface, newVertIndex, vertDataIndex ); } } diff --git a/libs/picomodel/picomodules.c b/libs/picomodel/picomodules.c index 7a237c1c..6ccafc46 100644 --- a/libs/picomodel/picomodules.c +++ b/libs/picomodel/picomodules.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -60,33 +60,33 @@ extern const picoModule_t picoModuleLWO; /* list of all supported file format modules */ const picoModule_t *picoModules[] = { - &picoModuleMD3, /* quake3 arena md3 */ - &picoModule3DS, /* autodesk 3ds */ - &picoModuleASE, /* autodesk ase */ - &picoModuleMS3D, /* milkshape3d */ - &picoModuleMDC, /* return to castle wolfenstein mdc */ - &picoModuleMD2, /* quake2 md2 */ - &picoModuleFM, /* heretic2 fm */ - &picoModuleLWO, /* lightwave object */ - &picoModuleOBJ, /* wavefront object */ - NULL /* arnold */ + &picoModuleMD3, /* quake3 arena md3 */ + &picoModule3DS, /* autodesk 3ds */ + &picoModuleASE, /* autodesk ase */ + &picoModuleMS3D, /* milkshape3d */ + &picoModuleMDC, /* return to castle wolfenstein mdc */ + &picoModuleMD2, /* quake2 md2 */ + &picoModuleFM, /* heretic2 fm */ + &picoModuleLWO, /* lightwave object */ + &picoModuleOBJ, /* wavefront object */ + NULL /* arnold */ }; /* -PicoModuleList() -returns a pointer to the module list and optionally stores -the number of supported modules in 'numModules'. Note that -this param can be NULL when the count is not needed. -*/ + PicoModuleList() + returns a pointer to the module list and optionally stores + the number of supported modules in 'numModules'. Note that + this param can be NULL when the count is not needed. + */ -const picoModule_t **PicoModuleList( int *numModules ) -{ +const picoModule_t **PicoModuleList( int *numModules ){ /* get module count */ - if( numModules != NULL ) - for( (*numModules) = 0; picoModules[ *numModules ] != NULL; (*numModules)++ ); - + if ( numModules != NULL ) { + for ( ( *numModules ) = 0; picoModules[ *numModules ] != NULL; ( *numModules )++ ) ; + } + /* return list of modules */ return (const picoModule_t**) picoModules; } diff --git a/libs/picomodel/pm_3ds.c b/libs/picomodel/pm_3ds.c index 0f2b41f7..64b77fe6 100644 --- a/libs/picomodel/pm_3ds.c +++ b/libs/picomodel/pm_3ds.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -51,88 +51,86 @@ static picoColor_t white = { 255,255,255,255 }; */ /* uncomment when debugging this module */ /* #define DEBUG_PM_3DS -#define DEBUG_PM_3DS_EX */ + #define DEBUG_PM_3DS_EX */ /* structure holding persistent 3ds loader specific data used */ /* to store formerly static vars to keep the module reentrant */ /* safe. put everything that needs to be static in here. */ typedef struct S3dsLoaderPers { - picoModel_t *model; /* ptr to output model */ - picoSurface_t *surface; /* ptr to current surface */ - picoShader_t *shader; /* ptr to current shader */ - picoByte_t *bufptr; /* ptr to raw data */ - char *basename; /* ptr to model base name (eg. jeep) */ - int cofs; - int maxofs; + picoModel_t *model; /* ptr to output model */ + picoSurface_t *surface; /* ptr to current surface */ + picoShader_t *shader; /* ptr to current shader */ + picoByte_t *bufptr; /* ptr to raw data */ + char *basename; /* ptr to model base name (eg. jeep) */ + int cofs; + int maxofs; } T3dsLoaderPers; /* 3ds chunk types that we use */ enum { - /* primary chunk */ - CHUNK_MAIN = 0x4D4D, + /* primary chunk */ + CHUNK_MAIN = 0x4D4D, /* main chunks */ - CHUNK_VERSION = 0x0002, - CHUNK_EDITOR_CONFIG = 0x3D3E, - CHUNK_EDITOR_DATA = 0x3D3D, - CHUNK_KEYFRAME_DATA = 0xB000, + CHUNK_VERSION = 0x0002, + CHUNK_EDITOR_CONFIG = 0x3D3E, + CHUNK_EDITOR_DATA = 0x3D3D, + CHUNK_KEYFRAME_DATA = 0xB000, /* editor data sub chunks */ - CHUNK_MATERIAL = 0xAFFF, - CHUNK_OBJECT = 0x4000, + CHUNK_MATERIAL = 0xAFFF, + CHUNK_OBJECT = 0x4000, /* material sub chunks */ - CHUNK_MATNAME = 0xA000, - CHUNK_MATDIFFUSE = 0xA020, - CHUNK_MATMAP = 0xA200, - CHUNK_MATMAPFILE = 0xA300, + CHUNK_MATNAME = 0xA000, + CHUNK_MATDIFFUSE = 0xA020, + CHUNK_MATMAP = 0xA200, + CHUNK_MATMAPFILE = 0xA300, /* lets us know we're reading a new object */ - CHUNK_OBJECT_MESH = 0x4100, + CHUNK_OBJECT_MESH = 0x4100, /* object mesh sub chunks */ - CHUNK_OBJECT_VERTICES = 0x4110, - CHUNK_OBJECT_FACES = 0x4120, - CHUNK_OBJECT_MATERIAL = 0x4130, - CHUNK_OBJECT_UV = 0x4140, + CHUNK_OBJECT_VERTICES = 0x4110, + CHUNK_OBJECT_FACES = 0x4120, + CHUNK_OBJECT_MATERIAL = 0x4130, + CHUNK_OBJECT_UV = 0x4140, }; #ifdef DEBUG_PM_3DS static struct { - int id; + int id; char *name; } debugChunkNames[] = { - { CHUNK_MAIN , "CHUNK_MAIN" }, - { CHUNK_VERSION , "CHUNK_VERSION" }, - { CHUNK_EDITOR_CONFIG , "CHUNK_EDITOR_CONFIG" }, - { CHUNK_EDITOR_DATA , "CHUNK_EDITOR_DATA" }, - { CHUNK_KEYFRAME_DATA , "CHUNK_KEYFRAME_DATA" }, - { CHUNK_MATERIAL , "CHUNK_MATERIAL" }, - { CHUNK_OBJECT , "CHUNK_OBJECT" }, - { CHUNK_MATNAME , "CHUNK_MATNAME" }, - { CHUNK_MATDIFFUSE , "CHUNK_MATDIFFUSE" }, - { CHUNK_MATMAP , "CHUNK_MATMAP" }, - { CHUNK_MATMAPFILE , "CHUNK_MATMAPFILE" }, - { CHUNK_OBJECT_MESH , "CHUNK_OBJECT_MESH" }, - { CHUNK_OBJECT_VERTICES , "CHUNK_OBJECT_VERTICES" }, - { CHUNK_OBJECT_FACES , "CHUNK_OBJECT_FACES" }, - { CHUNK_OBJECT_MATERIAL , "CHUNK_OBJECT_MATERIAL" }, - { CHUNK_OBJECT_UV , "CHUNK_OBJECT_UV" }, - { 0 , NULL } + { CHUNK_MAIN, "CHUNK_MAIN" }, + { CHUNK_VERSION, "CHUNK_VERSION" }, + { CHUNK_EDITOR_CONFIG, "CHUNK_EDITOR_CONFIG" }, + { CHUNK_EDITOR_DATA, "CHUNK_EDITOR_DATA" }, + { CHUNK_KEYFRAME_DATA, "CHUNK_KEYFRAME_DATA" }, + { CHUNK_MATERIAL, "CHUNK_MATERIAL" }, + { CHUNK_OBJECT, "CHUNK_OBJECT" }, + { CHUNK_MATNAME, "CHUNK_MATNAME" }, + { CHUNK_MATDIFFUSE, "CHUNK_MATDIFFUSE" }, + { CHUNK_MATMAP, "CHUNK_MATMAP" }, + { CHUNK_MATMAPFILE, "CHUNK_MATMAPFILE" }, + { CHUNK_OBJECT_MESH, "CHUNK_OBJECT_MESH" }, + { CHUNK_OBJECT_VERTICES, "CHUNK_OBJECT_VERTICES" }, + { CHUNK_OBJECT_FACES, "CHUNK_OBJECT_FACES" }, + { CHUNK_OBJECT_MATERIAL, "CHUNK_OBJECT_MATERIAL" }, + { CHUNK_OBJECT_UV, "CHUNK_OBJECT_UV" }, + { 0, NULL } }; -static char *DebugGetChunkName (int id) -{ - int i,max; /* imax? ;) */ - max = sizeof(debugChunkNames) / sizeof(debugChunkNames[0]); +static char *DebugGetChunkName( int id ){ + int i,max; /* imax? ;) */ + max = sizeof( debugChunkNames ) / sizeof( debugChunkNames[0] ); - for (i=0; ilen)) + if ( bufSize < _pico_little_long( chunk->len ) ) { return PICO_PMV_ERROR_SIZE; + } /* check 3ds magic */ - if (_pico_little_short(chunk->id) != CHUNK_MAIN) + if ( _pico_little_short( chunk->id ) != CHUNK_MAIN ) { return PICO_PMV_ERROR_IDENT; + } /* file seems to be a valid 3ds */ return PICO_PMV_OK; } -static T3dsChunk *GetChunk (T3dsLoaderPers *pers) -{ +static T3dsChunk *GetChunk( T3dsLoaderPers *pers ){ T3dsChunk *chunk; /* sanity check */ - if (pers->cofs > pers->maxofs) return 0; + if ( pers->cofs > pers->maxofs ) { + return 0; + } #ifdef DEBUG_PM_3DS /* printf("GetChunk: pers->cofs %x\n",pers->cofs); */ #endif /* fill in pointer to chunk */ chunk = (T3dsChunk *)&pers->bufptr[ pers->cofs ]; - if (!chunk) return NULL; + if ( !chunk ) { + return NULL; + } - chunk->id = _pico_little_short(chunk->id ); - chunk->len = _pico_little_long (chunk->len); + chunk->id = _pico_little_short( chunk->id ); + chunk->len = _pico_little_long( chunk->len ); /* advance in buffer */ - pers->cofs += sizeof(T3dsChunk); + pers->cofs += sizeof( T3dsChunk ); /* this means yay */ return chunk; } -static int GetASCIIZ (T3dsLoaderPers *pers, char *dest, int max) -{ +static int GetASCIIZ( T3dsLoaderPers *pers, char *dest, int max ){ int pos = 0; int ch; - for (;;) + for (;; ) { ch = pers->bufptr[ pers->cofs++ ]; - if (ch == '\0') break; - if (pers->cofs >= pers->maxofs) - { + if ( ch == '\0' ) { + break; + } + if ( pers->cofs >= pers->maxofs ) { dest[ pos ] = '\0'; return 0; } dest[ pos++ ] = ch; - if (pos >= max) break; + if ( pos >= max ) { + break; + } } dest[ pos ] = '\0'; return 1; } -static picoByte_t GetByte (T3dsLoaderPers *pers) -{ +static picoByte_t GetByte( T3dsLoaderPers *pers ){ picoByte_t *value; /* sanity check */ - if (pers->cofs > pers->maxofs) return 0; + if ( pers->cofs > pers->maxofs ) { + return 0; + } /* get and return value */ - value = (picoByte_t *)(pers->bufptr + pers->cofs); + value = (picoByte_t *)( pers->bufptr + pers->cofs ); pers->cofs += 1; return *value; } -static int GetWord (T3dsLoaderPers *pers) -{ +static int GetWord( T3dsLoaderPers *pers ){ unsigned short *value; /* sanity check */ - if (pers->cofs > pers->maxofs) return 0; + if ( pers->cofs > pers->maxofs ) { + return 0; + } /* get and return value */ - value = (unsigned short *)(pers->bufptr + pers->cofs); + value = (unsigned short *)( pers->bufptr + pers->cofs ); pers->cofs += 2; - return _pico_little_short(*value); + return _pico_little_short( *value ); } -static float GetFloat (T3dsLoaderPers *pers) -{ +static float GetFloat( T3dsLoaderPers *pers ){ float *value; /* sanity check */ - if (pers->cofs > pers->maxofs) return 0; + if ( pers->cofs > pers->maxofs ) { + return 0; + } /* get and return value */ - value = (float *)(pers->bufptr + pers->cofs); + value = (float *)( pers->bufptr + pers->cofs ); pers->cofs += 4; - return _pico_little_float(*value); + return _pico_little_float( *value ); } -static int GetMeshVertices (T3dsLoaderPers *pers) -{ +static int GetMeshVertices( T3dsLoaderPers *pers ){ int numVerts; int i; /* get number of verts for this surface */ - numVerts = GetWord(pers); + numVerts = GetWord( pers ); #ifdef DEBUG_PM_3DS - printf("GetMeshVertices: numverts %d\n",numVerts); + printf( "GetMeshVertices: numverts %d\n",numVerts ); #endif /* read in vertices for current surface */ - for (i=0; isurface,i,v ); - PicoSetSurfaceColor( pers->surface,0,i,white ); /* ydnar */ + PicoSetSurfaceColor( pers->surface,0,i,white ); /* ydnar */ #ifdef DEBUG_PM_3DS_EX - printf("Vertex: x: %f y: %f z: %f\n",v[0],v[1],v[2]); + printf( "Vertex: x: %f y: %f z: %f\n",v[0],v[1],v[2] ); #endif } /* success (no errors occured) */ return 1; } -static int GetMeshFaces (T3dsLoaderPers *pers) -{ +static int GetMeshFaces( T3dsLoaderPers *pers ){ int numFaces; int i; /* get number of faces for this surface */ - numFaces = GetWord(pers); + numFaces = GetWord( pers ); #ifdef DEBUG_PM_3DS - printf("GetMeshFaces: numfaces %d\n",numFaces); + printf( "GetMeshFaces: numfaces %d\n",numFaces ); #endif /* read in vertex indices for current surface */ - for (i=0; isurface, (i * 3 + 0), (picoIndex_t)face.a ); - PicoSetSurfaceIndex( pers->surface, (i * 3 + 1), (picoIndex_t)face.b ); - PicoSetSurfaceIndex( pers->surface, (i * 3 + 2), (picoIndex_t)face.c ); + PicoSetSurfaceIndex( pers->surface, ( i * 3 + 0 ), (picoIndex_t)face.a ); + PicoSetSurfaceIndex( pers->surface, ( i * 3 + 1 ), (picoIndex_t)face.b ); + PicoSetSurfaceIndex( pers->surface, ( i * 3 + 2 ), (picoIndex_t)face.c ); #ifdef DEBUG_PM_3DS_EX - printf("Face: a: %d b: %d c: %d (%d)\n",face.a,face.b,face.c,face.visible); + printf( "Face: a: %d b: %d c: %d (%d)\n",face.a,face.b,face.c,face.visible ); #endif } /* success (no errors occured) */ return 1; } -static int GetMeshTexCoords (T3dsLoaderPers *pers) -{ +static int GetMeshTexCoords( T3dsLoaderPers *pers ){ int numTexCoords; int i; /* get number of uv coords for this surface */ - numTexCoords = GetWord(pers); + numTexCoords = GetWord( pers ); #ifdef DEBUG_PM_3DS - printf("GetMeshTexCoords: numcoords %d\n",numTexCoords); + printf( "GetMeshTexCoords: numcoords %d\n",numTexCoords ); #endif /* read in uv coords for current surface */ - for (i=0; isurface == NULL) + if ( pers->surface == NULL ) { continue; - + } + /* add current uv */ PicoSetSurfaceST( pers->surface,0,i,uv ); #ifdef DEBUG_PM_3DS_EX - printf("u: %f v: %f\n",uv[0],uv[1]); + printf( "u: %f v: %f\n",uv[0],uv[1] ); #endif } /* success (no errors occured) */ return 1; } -static int GetMeshShader (T3dsLoaderPers *pers) -{ +static int GetMeshShader( T3dsLoaderPers *pers ){ char shaderName[255] = { 0 }; picoShader_t *shader; - int numSharedVerts; - int setShaderName = 0; - int i; - + int numSharedVerts; + int setShaderName = 0; + int i; + /* the shader is either the color or the texture map of the */ /* object. it can also hold other information like the brightness, */ /* shine, etc. stuff we don't really care about. we just want the */ /* color, or the texture map file name really */ /* get in the shader name */ - if (!GetASCIIZ(pers,shaderName,sizeof(shaderName))) + if ( !GetASCIIZ( pers,shaderName,sizeof( shaderName ) ) ) { return 0; + } /* now that we have the shader name we need to go through all of */ /* the shaders and check the name against each shader. when we */ @@ -401,19 +407,17 @@ static int GetMeshShader (T3dsLoaderPers *pers) shader = PicoFindShader( pers->model, shaderName, 1 ); /* we've found a matching shader */ - if ((shader != NULL) && pers->surface) - { - char mapName[1024+1]; + if ( ( shader != NULL ) && pers->surface ) { + char mapName[1024 + 1]; char *mapNamePtr; - memset( mapName,0,sizeof(mapName) ); + memset( mapName,0,sizeof( mapName ) ); /* get ptr to shader's map name */ mapNamePtr = PicoGetShaderMapName( shader ); /* we have a valid map name ptr */ - if (mapNamePtr != NULL) - { - char temp[128]; + if ( mapNamePtr != NULL ) { + char temp[128]; char *name; /* copy map name to local buffer */ @@ -421,14 +425,15 @@ static int GetMeshShader (T3dsLoaderPers *pers) /* extract file name */ name = _pico_nopath( mapName ); - strncpy( temp, name, sizeof(temp) ); + strncpy( temp, name, sizeof( temp ) ); /* remove file extension */ /* name = _pico_setfext( name,"" ); */ /* assign default name if no name available */ - if (strlen(temp) < 1) - strcpy(temp,pers->basename); + if ( strlen( temp ) < 1 ) { + strcpy( temp,pers->basename ); + } /* build shader name */ _pico_strlwr( temp ); /* gaynux update -sea */ @@ -444,9 +449,8 @@ static int GetMeshShader (T3dsLoaderPers *pers) } } /* we didn't set a shader name; throw out warning */ - if (!setShaderName) - { - _pico_printf( PICO_WARNING,"3DS mesh is missing shader name"); + if ( !setShaderName ) { + _pico_printf( PICO_WARNING,"3DS mesh is missing shader name" ); } /* we don't process the list of shared vertices here; there is a */ /* short int that gives the number of faces of the mesh concerned */ @@ -454,80 +458,80 @@ static int GetMeshShader (T3dsLoaderPers *pers) /* 0000 means the first face of the (4120) face list */ /* get number of shared verts */ - numSharedVerts = GetWord(pers); + numSharedVerts = GetWord( pers ); #ifdef DEBUG_PM_3DS - printf("GetMeshShader: uses shader '%s' (nsv %d)\n",shaderName,numSharedVerts); + printf( "GetMeshShader: uses shader '%s' (nsv %d)\n",shaderName,numSharedVerts ); #endif /* skip list of shared verts */ - for (i=0; ishader ) - { + if ( pers->shader ) { PicoSetShaderDiffuseColor( pers->shader,color ); } #ifdef DEBUG_PM_3DS - printf("GetDiffuseColor: %d %d %d\n",color[0],color[1],color[2]); + printf( "GetDiffuseColor: %d %d %d\n",color[0],color[1],color[2] ); #endif /* success (no errors occured) */ return 1; } -static int DoNextEditorDataChunk (T3dsLoaderPers *pers, long endofs) -{ +static int DoNextEditorDataChunk( T3dsLoaderPers *pers, long endofs ){ T3dsChunk *chunk; #ifdef DEBUG_PM_3DS_EX - printf("DoNextEditorDataChunk: endofs %d\n",endofs); + printf( "DoNextEditorDataChunk: endofs %d\n",endofs ); #endif - while (pers->cofs < endofs) + while ( pers->cofs < endofs ) { long nextofs = pers->cofs; - if ((chunk = GetChunk(pers)) == NULL) return 0; - if (!chunk->len) return 0; + if ( ( chunk = GetChunk( pers ) ) == NULL ) { + return 0; + } + if ( !chunk->len ) { + return 0; + } nextofs += chunk->len; #ifdef DEBUG_PM_3DS_EX - printf("Chunk %04x (%s), len %d pers->cofs %x\n",chunk->id,DebugGetChunkName(chunk->id),chunk->len,pers->cofs); + printf( "Chunk %04x (%s), len %d pers->cofs %x\n",chunk->id,DebugGetChunkName( chunk->id ),chunk->len,pers->cofs ); #endif /*** meshes ***/ - if (chunk->id == CHUNK_OBJECT) - { + if ( chunk->id == CHUNK_OBJECT ) { picoSurface_t *surface; char surfaceName[ 0xff ] = { 0 }; /* read in surface name */ - if( !GetASCIIZ(pers,surfaceName,sizeof(surfaceName)) ) + if ( !GetASCIIZ( pers,surfaceName,sizeof( surfaceName ) ) ) { return 0; /* this is bad */ + } //PicoGetSurfaceName /* ignore NULL name surfaces */ // if( surfaceName /* allocate a pico surface */ surface = PicoNewSurface( pers->model ); - if( surface == NULL ) - { + if ( surface == NULL ) { pers->surface = NULL; return 0; /* this is bad too */ } @@ -541,135 +545,137 @@ static int DoNextEditorDataChunk (T3dsLoaderPers *pers, long endofs) PicoSetSurfaceName( pers->surface,surfaceName ); /* continue mess with object's sub chunks */ - DoNextEditorDataChunk(pers,nextofs); + DoNextEditorDataChunk( pers,nextofs ); continue; } - if (chunk->id == CHUNK_OBJECT_MESH) - { + if ( chunk->id == CHUNK_OBJECT_MESH ) { /* continue mess with mesh's sub chunks */ - if (!DoNextEditorDataChunk(pers,nextofs)) return 0; + if ( !DoNextEditorDataChunk( pers,nextofs ) ) { + return 0; + } continue; } - if (chunk->id == CHUNK_OBJECT_VERTICES) - { - if (!GetMeshVertices(pers)) return 0; + if ( chunk->id == CHUNK_OBJECT_VERTICES ) { + if ( !GetMeshVertices( pers ) ) { + return 0; + } continue; } - if (chunk->id == CHUNK_OBJECT_FACES) - { - if (!GetMeshFaces(pers)) return 0; + if ( chunk->id == CHUNK_OBJECT_FACES ) { + if ( !GetMeshFaces( pers ) ) { + return 0; + } continue; } - if (chunk->id == CHUNK_OBJECT_UV) - { - if (!GetMeshTexCoords(pers)) return 0; + if ( chunk->id == CHUNK_OBJECT_UV ) { + if ( !GetMeshTexCoords( pers ) ) { + return 0; + } continue; } - if (chunk->id == CHUNK_OBJECT_MATERIAL) - { - if (!GetMeshShader(pers)) return 0; + if ( chunk->id == CHUNK_OBJECT_MATERIAL ) { + if ( !GetMeshShader( pers ) ) { + return 0; + } continue; } /*** materials ***/ - if (chunk->id == CHUNK_MATERIAL) - { + if ( chunk->id == CHUNK_MATERIAL ) { /* new shader specific things should be */ /* initialized right here */ picoShader_t *shader; /* allocate a pico shader */ - shader = PicoNewShader( pers->model ); /* ydnar */ - if( shader == NULL ) - { + shader = PicoNewShader( pers->model ); /* ydnar */ + if ( shader == NULL ) { pers->shader = NULL; return 0; /* this is bad too */ } - + /* assign ptr to current shader */ pers->shader = shader; /* continue and process the material's sub chunks */ - DoNextEditorDataChunk(pers,nextofs); + DoNextEditorDataChunk( pers,nextofs ); continue; } - if (chunk->id == CHUNK_MATNAME) - { + if ( chunk->id == CHUNK_MATNAME ) { /* new material's names should be stored here. note that */ /* GetMeshMaterial returns the name of the material that */ /* is used by the mesh. new material names are set HERE. */ /* but for now we skip the new material's name ... */ - if (pers->shader) - { - char *name = (char *)(pers->bufptr + pers->cofs); + if ( pers->shader ) { + char *name = (char *)( pers->bufptr + pers->cofs ); PicoSetShaderName( pers->shader,name ); #ifdef DEBUG_PM_3DS - printf("NewShader: '%s'\n",name); + printf( "NewShader: '%s'\n",name ); #endif } } - if (chunk->id == CHUNK_MATDIFFUSE) - { + if ( chunk->id == CHUNK_MATDIFFUSE ) { /* todo: color for last inserted new material should be */ /* stored somewhere by GetDiffuseColor */ - if (!GetDiffuseColor(pers)) return 0; + if ( !GetDiffuseColor( pers ) ) { + return 0; + } /* rest of chunk is skipped here */ } - if (chunk->id == CHUNK_MATMAP) - { + if ( chunk->id == CHUNK_MATMAP ) { /* continue and process the material map sub chunks */ - DoNextEditorDataChunk(pers,nextofs); + DoNextEditorDataChunk( pers,nextofs ); continue; } - if (chunk->id == CHUNK_MATMAPFILE) - { + if ( chunk->id == CHUNK_MATMAPFILE ) { /* map file name for last inserted new material should */ /* be stored here. but for now we skip this too ... */ - if( pers->shader ) - { - char *name = (char *)(pers->bufptr + pers->cofs); + if ( pers->shader ) { + char *name = (char *)( pers->bufptr + pers->cofs ); PicoSetShaderMapName( pers->shader,name ); #ifdef DEBUG_PM_3DS - printf("NewShaderMapfile: '%s'\n",name); + printf( "NewShaderMapfile: '%s'\n",name ); #endif } } /*** keyframes ***/ - if (chunk->id == CHUNK_KEYFRAME_DATA) - { + if ( chunk->id == CHUNK_KEYFRAME_DATA ) { /* well umm, this is a bit too much since we don't really */ /* need model animation sequences right now. we skip this */ #ifdef DEBUG_PM_3DS - printf("KeyframeData: len %d\n",chunk->len); + printf( "KeyframeData: len %d\n",chunk->len ); #endif } /* skip unknown chunk */ pers->cofs = nextofs; - if (pers->cofs >= pers->maxofs) break; + if ( pers->cofs >= pers->maxofs ) { + break; + } } return 1; } -static int DoNextChunk (T3dsLoaderPers *pers, int endofs) -{ +static int DoNextChunk( T3dsLoaderPers *pers, int endofs ){ T3dsChunk *chunk; #ifdef DEBUG_PM_3DS - printf("DoNextChunk: endofs %d\n",endofs); + printf( "DoNextChunk: endofs %d\n",endofs ); #endif - while (pers->cofs < endofs) + while ( pers->cofs < endofs ) { long nextofs = pers->cofs; - if ((chunk = GetChunk(pers)) == NULL) return 0; - if (!chunk->len) return 0; + if ( ( chunk = GetChunk( pers ) ) == NULL ) { + return 0; + } + if ( !chunk->len ) { + return 0; + } nextofs += chunk->len; #ifdef DEBUG_PM_3DS_EX - printf("Chunk %04x (%s), len %d pers->cofs %x\n",chunk->id,DebugGetChunkName(chunk->id),chunk->len,pers->cofs); + printf( "Chunk %04x (%s), len %d pers->cofs %x\n",chunk->id,DebugGetChunkName( chunk->id ),chunk->len,pers->cofs ); #endif /*** version ***/ - if (chunk->id == CHUNK_VERSION) - { + if ( chunk->id == CHUNK_VERSION ) { /* at this point i get the 3ds file version. since there */ /* might be new additions to the 3ds file format in 4.0 */ /* it might be a good idea to store the version somewhere */ @@ -677,55 +683,55 @@ static int DoNextChunk (T3dsLoaderPers *pers, int endofs) /* get the version */ int version; - version = GetWord(pers); - GetWord(pers); + version = GetWord( pers ); + GetWord( pers ); #ifdef DEBUG_PM_3DS - printf("FileVersion: %d\n",version); + printf( "FileVersion: %d\n",version ); #endif /* throw out a warning for version 4 models */ - if (version == 4) - { + if ( version == 4 ) { _pico_printf( PICO_WARNING, - "3DS version is 4. Model might load incorrectly."); + "3DS version is 4. Model might load incorrectly." ); } /* store the 3ds file version in pico special field 0 */ /* PicoSetSurfaceSpecial(pers->surface,0,version); */ /* ydnar: this was causing a crash accessing uninitialized surface */ - + /* rest of chunk is skipped here */ } /*** editor data ***/ - if (chunk->id == CHUNK_EDITOR_DATA) - { - if (!DoNextEditorDataChunk(pers,nextofs)) return 0; + if ( chunk->id == CHUNK_EDITOR_DATA ) { + if ( !DoNextEditorDataChunk( pers,nextofs ) ) { + return 0; + } continue; } /* skip unknown chunk */ pers->cofs = nextofs; - if (pers->cofs >= pers->maxofs) break; + if ( pers->cofs >= pers->maxofs ) { + break; + } } return 1; } /* _3ds_load: * loads an autodesk 3ds model file. -*/ -static picoModel_t *_3ds_load( PM_PARAMS_LOAD ) -{ - T3dsLoaderPers pers; - picoModel_t *model; - char basename[128]; + */ +static picoModel_t *_3ds_load( PM_PARAMS_LOAD ){ + T3dsLoaderPers pers; + picoModel_t *model; + char basename[128]; /* create a new pico model */ model = PicoNewModel(); - if (model == NULL) - { + if ( model == NULL ) { /* user must have some serious ram problems ;) */ return NULL; } /* get model's base name (eg. jeep from c:\models\jeep.3ds) */ - memset( basename,0,sizeof(basename) ); - strncpy( basename,_pico_nopath(fileName),sizeof(basename) ); + memset( basename,0,sizeof( basename ) ); + strncpy( basename,_pico_nopath( fileName ),sizeof( basename ) ); _pico_setfext( basename,"" ); /* initialize persistant vars (formerly static) */ @@ -741,13 +747,12 @@ static picoModel_t *_3ds_load( PM_PARAMS_LOAD ) PicoSetModelFileName( model,fileName ); /* skip first chunk in file (magic) */ - GetChunk(&pers); + GetChunk( &pers ); /* process chunks */ - if (!DoNextChunk(&pers,pers.maxofs)) - { + if ( !DoNextChunk( &pers,pers.maxofs ) ) { /* well, bleh i guess */ - PicoFreeModel(model); + PicoFreeModel( model ); return NULL; } /* return allocated pico model */ @@ -757,15 +762,15 @@ static picoModel_t *_3ds_load( PM_PARAMS_LOAD ) /* pico file format module definition */ const picoModule_t picoModule3DS = { - "0.86-b", /* module version string */ - "Autodesk 3Dstudio", /* module display name */ - "seaw0lf", /* author's name */ - "2002 seaw0lf", /* module copyright */ + "0.86-b", /* module version string */ + "Autodesk 3Dstudio", /* module display name */ + "seaw0lf", /* author's name */ + "2002 seaw0lf", /* module copyright */ { - "3ds",NULL,NULL,NULL /* default extensions to use */ + "3ds",NULL,NULL,NULL /* default extensions to use */ }, - _3ds_canload, /* validation routine */ - _3ds_load, /* load routine */ - NULL, /* save validation routine */ - NULL /* save routine */ + _3ds_canload, /* validation routine */ + _3ds_load, /* load routine */ + NULL, /* save validation routine */ + NULL /* save routine */ }; diff --git a/libs/picomodel/pm_ase.c b/libs/picomodel/pm_ase.c index c8465ce6..dc31dd5f 100644 --- a/libs/picomodel/pm_ase.c +++ b/libs/picomodel/pm_ase.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other aseMaterialList provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other aseMaterialList provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ /* marker */ @@ -72,14 +72,12 @@ typedef struct aseMaterial_s } aseMaterial_t; /* Material/SubMaterial management functions */ -static aseMaterial_t* _ase_get_material ( aseMaterial_t* list , int mtlIdParent ) -{ +static aseMaterial_t* _ase_get_material( aseMaterial_t* list, int mtlIdParent ){ aseMaterial_t* mtl = list; while ( mtl ) { - if ( mtlIdParent == mtl->mtlId ) - { + if ( mtlIdParent == mtl->mtlId ) { break; } mtl = mtl->next; @@ -87,22 +85,19 @@ static aseMaterial_t* _ase_get_material ( aseMaterial_t* list , int mtlIdParent return mtl; } -static aseSubMaterial_t* _ase_get_submaterial ( aseMaterial_t* list, int mtlIdParent , int subMtlId ) -{ - aseMaterial_t* parent = _ase_get_material ( list , mtlIdParent ); +static aseSubMaterial_t* _ase_get_submaterial( aseMaterial_t* list, int mtlIdParent, int subMtlId ){ + aseMaterial_t* parent = _ase_get_material( list, mtlIdParent ); aseSubMaterial_t* subMtl = NULL; - if ( !parent ) - { - _pico_printf ( PICO_ERROR , "No ASE material exists with id %i\n" , mtlIdParent ); + if ( !parent ) { + _pico_printf( PICO_ERROR, "No ASE material exists with id %i\n", mtlIdParent ); return NULL; } subMtl = parent->subMtls; while ( subMtl ) { - if ( subMtlId == subMtl->subMtlId ) - { + if ( subMtlId == subMtl->subMtlId ) { break; } subMtl = subMtl->next; @@ -110,8 +105,7 @@ static aseSubMaterial_t* _ase_get_submaterial ( aseMaterial_t* list, int mtlIdP return subMtl; } -static aseMaterial_t* _ase_add_material( aseMaterial_t **list, int mtlIdParent ) -{ +static aseMaterial_t* _ase_add_material( aseMaterial_t **list, int mtlIdParent ){ aseMaterial_t *mtl = _pico_calloc( 1, sizeof( aseMaterial_t ) ); mtl->mtlId = mtlIdParent; mtl->subMtls = NULL; @@ -121,14 +115,12 @@ static aseMaterial_t* _ase_add_material( aseMaterial_t **list, int mtlIdParent ) return mtl; } -static aseSubMaterial_t* _ase_add_submaterial( aseMaterial_t **list, int mtlIdParent, int subMtlId, picoShader_t* shader ) -{ +static aseSubMaterial_t* _ase_add_submaterial( aseMaterial_t **list, int mtlIdParent, int subMtlId, picoShader_t* shader ){ aseMaterial_t *parent = _ase_get_material( *list, mtlIdParent ); - aseSubMaterial_t *subMtl = _pico_calloc( 1, sizeof ( aseSubMaterial_t ) ); + aseSubMaterial_t *subMtl = _pico_calloc( 1, sizeof( aseSubMaterial_t ) ); - if ( !parent ) - { - parent = _ase_add_material ( list , mtlIdParent ); + if ( !parent ) { + parent = _ase_add_material( list, mtlIdParent ); } subMtl->shader = shader; @@ -139,8 +131,7 @@ static aseSubMaterial_t* _ase_add_submaterial( aseMaterial_t **list, int mtlIdPa return subMtl; } -static void _ase_free_materials( aseMaterial_t **list ) -{ +static void _ase_free_materials( aseMaterial_t **list ){ aseMaterial_t* mtl = *list; aseSubMaterial_t* subMtl = NULL; @@ -153,29 +144,28 @@ static void _ase_free_materials( aseMaterial_t **list ) while ( subMtl ) { subMtlTemp = subMtl->next; - _pico_free ( subMtl ); + _pico_free( subMtl ); subMtl = subMtlTemp; } mtlTemp = mtl->next; - _pico_free ( mtl ); + _pico_free( mtl ); mtl = mtlTemp; } - (*list) = NULL; + ( *list ) = NULL; } #ifdef DEBUG_PM_ASE -static void _ase_print_materials( aseMaterial_t *list ) -{ +static void _ase_print_materials( aseMaterial_t *list ){ aseMaterial_t* mtl = list; aseSubMaterial_t* subMtl = NULL; while ( mtl ) { - _pico_printf ( PICO_NORMAL , "ASE Material %i" , mtl->mtlId ); + _pico_printf( PICO_NORMAL, "ASE Material %i", mtl->mtlId ); subMtl = mtl->subMtls; while ( subMtl ) { - _pico_printf ( PICO_NORMAL , " -- ASE SubMaterial %i - %s\n" , subMtl->subMtlId , subMtl->shader->name ); + _pico_printf( PICO_NORMAL, " -- ASE SubMaterial %i - %s\n", subMtl->subMtlId, subMtl->shader->name ); subMtl = subMtl->next; } mtl = mtl->next; @@ -196,16 +186,14 @@ typedef struct aseFace_s } aseFace_t; /* ASE Face management functions */ -void _ase_add_face( aseFace_t **list, aseFace_t **tail, aseFace_t *newFace ) -{ +void _ase_add_face( aseFace_t **list, aseFace_t **tail, aseFace_t *newFace ){ /* insert as head of list */ - if ( !(*list) ) - { + if ( !( *list ) ) { *list = newFace; } else { - (*tail)->next = newFace; + ( *tail )->next = newFace; } *tail = newFace; @@ -217,8 +205,7 @@ void _ase_add_face( aseFace_t **list, aseFace_t **tail, aseFace_t *newFace ) newFace->index[8] = -1; } -aseFace_t* _ase_get_face_for_index( aseFace_t *list, int index ) -{ +aseFace_t* _ase_get_face_for_index( aseFace_t *list, int index ){ int counter = 0; aseFace_t* face = list; @@ -229,20 +216,19 @@ aseFace_t* _ase_get_face_for_index( aseFace_t *list, int index ) } return face; } -static void _ase_free_faces (aseFace_t** list, aseFace_t** tail ) -{ +static void _ase_free_faces( aseFace_t** list, aseFace_t** tail ){ aseFace_t* face = *list; aseFace_t* tempFace = NULL; while ( face ) { tempFace = face->next; - _pico_free ( face ); + _pico_free( face ); face = tempFace; } - (*list) = NULL; - (*tail) = NULL; + ( *list ) = NULL; + ( *tail ) = NULL; } /* todo: @@ -252,32 +238,31 @@ static void _ase_free_faces (aseFace_t** list, aseFace_t** tail ) /* _ase_canload: * validates a 3dsmax ase model file. */ -static int _ase_canload( PM_PARAMS_CANLOAD ) -{ +static int _ase_canload( PM_PARAMS_CANLOAD ){ picoParser_t *p; /* quick data length validation */ - if( bufSize < 80 ) + if ( bufSize < 80 ) { return PICO_PMV_ERROR_SIZE; + } /* keep the friggin compiler happy */ *fileName = *fileName; /* create pico parser */ p = _pico_new_parser( (picoByte_t*) buffer, bufSize ); - if( p == NULL ) + if ( p == NULL ) { return PICO_PMV_ERROR_MEMORY; + } /* get first token */ - if( _pico_parse_first( p ) == NULL) - { + if ( _pico_parse_first( p ) == NULL ) { return PICO_PMV_ERROR_IDENT; } /* check first token */ - if( _pico_stricmp( p->token, "*3dsmax_asciiexport" ) ) - { + if ( _pico_stricmp( p->token, "*3dsmax_asciiexport" ) ) { _pico_free_parser( p ); return PICO_PMV_ERROR_IDENT; } @@ -292,17 +277,16 @@ static int _ase_canload( PM_PARAMS_CANLOAD ) /* _ase_submit_triangles - jhefty - use the surface and the current face list to look up material/submaterial IDs - and submit them to the model for proper processing + use the surface and the current face list to look up material/submaterial IDs + and submit them to the model for proper processing -The following still holds from ydnar's _ase_make_surface: - indexes 0 1 2 = vert indexes - indexes 3 4 5 = st indexes - indexes 6 7 8 = color indexes (new) -*/ + The following still holds from ydnar's _ase_make_surface: + indexes 0 1 2 = vert indexes + indexes 3 4 5 = st indexes + indexes 6 7 8 = color indexes (new) + */ -static void _ase_submit_triangles ( picoSurface_t* surface , picoModel_t* model , aseMaterial_t* materials , aseFace_t* faces ) -{ +static void _ase_submit_triangles( picoSurface_t* surface, picoModel_t* model, aseMaterial_t* materials, aseFace_t* faces ){ aseFace_t* face; aseSubMaterial_t* subMtl; picoVec3_t* xyz[3]; @@ -316,27 +300,24 @@ static void _ase_submit_triangles ( picoSurface_t* surface , picoModel_t* model { /* look up the shader for the material/submaterial pair */ subMtl = _ase_get_submaterial( materials, face->mtlId, face->subMtlId ); - if( subMtl == NULL ) - { + if ( subMtl == NULL ) { /* ydnar: trying default submaterial */ subMtl = _ase_get_submaterial( materials, face->mtlId, 0 ); - if( subMtl == NULL ) - { + if ( subMtl == NULL ) { _pico_printf( PICO_ERROR, "Could not find material/submaterial for id %d/%d\n", face->mtlId, face->subMtlId ); return; } } /* we pull the data from the surface using the facelist data */ - for ( i = 0 ; i < 3 ; i ++ ) + for ( i = 0 ; i < 3 ; i++ ) { - xyz[i] = (picoVec3_t*) PicoGetSurfaceXYZ ( surface, face->index[ i ] ); + xyz[i] = (picoVec3_t*) PicoGetSurfaceXYZ( surface, face->index[ i ] ); normal[i] = (picoVec3_t*) PicoGetSurfaceNormal( surface, face->index[ i ] ); - st[i] = (picoVec2_t*) PicoGetSurfaceST ( surface, 0, face->index[ i + 3 ] ); + st[i] = (picoVec2_t*) PicoGetSurfaceST( surface, 0, face->index[ i + 3 ] ); - if ( face->index [ i + 6] >= 0 ) - { - color[i] = (picoColor_t*)PicoGetSurfaceColor ( surface, 0, face->index[ i + 6 ] ); + if ( face->index [ i + 6] >= 0 ) { + color[i] = (picoColor_t*)PicoGetSurfaceColor( surface, 0, face->index[ i + 6 ] ); } else { @@ -346,7 +327,7 @@ static void _ase_submit_triangles ( picoSurface_t* surface , picoModel_t* model } /* submit the triangle to the model */ - PicoAddTriangleToModel ( model , xyz , normal , 1 , st , 1 , color , subMtl->shader ); + PicoAddTriangleToModel( model, xyz, normal, 1, st, 1, color, subMtl->shader ); /* advance to the next face */ face = face->next; @@ -355,13 +336,12 @@ static void _ase_submit_triangles ( picoSurface_t* surface , picoModel_t* model /* _ase_load: * loads a 3dsmax ase model file. -*/ -static picoModel_t *_ase_load( PM_PARAMS_LOAD ) -{ + */ +static picoModel_t *_ase_load( PM_PARAMS_LOAD ){ picoModel_t *model; picoSurface_t *surface = NULL; picoParser_t *p; - char lastNodeName[ 1024 ]; + char lastNodeName[ 1024 ]; aseFace_t* faces = NULL; aseFace_t* facesTail = NULL; @@ -374,21 +354,22 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) #endif /* helper */ - #define _ase_error_return(m) \ + #define _ase_error_return( m ) \ { \ - _pico_printf( PICO_ERROR,"%s in ASE, line %d.",m,p->curLine); \ - _pico_free_parser( p ); \ - PicoFreeModel( model ); \ + _pico_printf( PICO_ERROR,"%s in ASE, line %d.",m,p->curLine ); \ + _pico_free_parser( p ); \ + PicoFreeModel( model ); \ return NULL; \ } /* create a new pico parser */ p = _pico_new_parser( (picoByte_t *)buffer,bufSize ); - if (p == NULL) return NULL; + if ( p == NULL ) { + return NULL; + } /* create a new pico model */ model = PicoNewModel(); - if (model == NULL) - { + if ( model == NULL ) { _pico_free_parser( p ); return NULL; } @@ -398,48 +379,47 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) PicoSetModelFileName( model, fileName ); /* initialize some stuff */ - memset( lastNodeName,0,sizeof(lastNodeName) ); + memset( lastNodeName,0,sizeof( lastNodeName ) ); /* parse ase model file */ - while( 1 ) + while ( 1 ) { /* get first token on line */ - if (_pico_parse_first( p ) == NULL) + if ( _pico_parse_first( p ) == NULL ) { break; + } /* we just skip empty lines */ - if (p->token == NULL || !strlen( p->token )) + if ( p->token == NULL || !strlen( p->token ) ) { continue; + } /* we skip invalid ase statements */ - if (p->token[0] != '*' && p->token[0] != '{' && p->token[0] != '}') - { + if ( p->token[0] != '*' && p->token[0] != '{' && p->token[0] != '}' ) { _pico_parse_skip_rest( p ); continue; } /* remember node name */ - if (!_pico_stricmp(p->token,"*node_name")) - { + if ( !_pico_stricmp( p->token,"*node_name" ) ) { /* read node name */ char *ptr = _pico_parse( p,0 ); - if (ptr == NULL) - _ase_error_return("Node name parse error"); + if ( ptr == NULL ) { + _ase_error_return( "Node name parse error" ); + } /* remember node name */ - strncpy( lastNodeName,ptr,sizeof(lastNodeName) ); + strncpy( lastNodeName,ptr,sizeof( lastNodeName ) ); } /* model mesh (originally contained within geomobject) */ - else if (!_pico_stricmp(p->token,"*mesh")) - { + else if ( !_pico_stricmp( p->token,"*mesh" ) ) { /* finish existing surface */ //_ase_make_surface( model, &surface ); - _ase_submit_triangles (surface, model ,materials,faces); - _ase_free_faces (&faces,&facesTail); + _ase_submit_triangles( surface, model,materials,faces ); + _ase_free_faces( &faces,&facesTail ); /* allocate new pico surface */ surface = PicoNewSurface( NULL ); - if (surface == NULL) - { + if ( surface == NULL ) { PicoFreeModel( model ); return NULL; } @@ -448,18 +428,19 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) /* geomobjects after the mesh blocks. we must assume that the */ /* new mesh was already created so all we can do here is assign */ /* the material reference id (shader index) now. */ - else if (!_pico_stricmp(p->token,"*material_ref")) - { + else if ( !_pico_stricmp( p->token,"*material_ref" ) ) { int mtlId; aseFace_t* face; /* we must have a valid surface */ - if( surface == NULL ) - _ase_error_return("Missing mesh for material reference"); + if ( surface == NULL ) { + _ase_error_return( "Missing mesh for material reference" ); + } /* get the material ref (0..n) */ - if (!_pico_parse_int( p,&mtlId) ) - _ase_error_return("Missing material reference ID"); + if ( !_pico_parse_int( p,&mtlId ) ) { + _ase_error_return( "Missing material reference ID" ); + } /* fix up all of the aseFaceList in the surface to point to the parent material */ /* we've already saved off their subMtl */ @@ -471,88 +452,95 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) } } /* model mesh vertex */ - else if (!_pico_stricmp(p->token,"*mesh_vertex")) - { - picoVec3_t v; - int index; + else if ( !_pico_stricmp( p->token,"*mesh_vertex" ) ) { + picoVec3_t v; + int index; /* we must have a valid surface */ - if( surface == NULL ) + if ( surface == NULL ) { continue; + } /* get vertex data (orig: index +y -x +z) */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("Vertex parse error"); - if (!_pico_parse_vec( p,v )) - _ase_error_return("Vertex parse error"); + if ( !_pico_parse_int( p,&index ) ) { + _ase_error_return( "Vertex parse error" ); + } + if ( !_pico_parse_vec( p,v ) ) { + _ase_error_return( "Vertex parse error" ); + } /* set vertex */ PicoSetSurfaceXYZ( surface,index,v ); } /* model mesh vertex normal */ - else if (!_pico_stricmp(p->token,"*mesh_vertexnormal")) - { - picoVec3_t v; - int index; + else if ( !_pico_stricmp( p->token,"*mesh_vertexnormal" ) ) { + picoVec3_t v; + int index; /* we must have a valid surface */ - if( surface == NULL ) + if ( surface == NULL ) { continue; + } /* get vertex data (orig: index +y -x +z) */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("Vertex parse error"); - if (!_pico_parse_vec( p,v )) - _ase_error_return("Vertex parse error"); + if ( !_pico_parse_int( p,&index ) ) { + _ase_error_return( "Vertex parse error" ); + } + if ( !_pico_parse_vec( p,v ) ) { + _ase_error_return( "Vertex parse error" ); + } /* set vertex */ PicoSetSurfaceNormal( surface,index,v ); } /* model mesh face */ - else if (!_pico_stricmp(p->token,"*mesh_face")) - { + else if ( !_pico_stricmp( p->token,"*mesh_face" ) ) { picoIndex_t indexes[3]; - int index; + int index; /* we must have a valid surface */ - if( surface == NULL ) + if ( surface == NULL ) { continue; + } /* get face index */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("Face parse error"); + if ( !_pico_parse_int( p,&index ) ) { + _ase_error_return( "Face parse error" ); + } /* get 1st vertex index */ _pico_parse( p,0 ); - if (!_pico_parse_int( p,&indexes[0] )) - _ase_error_return("Face parse error"); + if ( !_pico_parse_int( p,&indexes[0] ) ) { + _ase_error_return( "Face parse error" ); + } /* get 2nd vertex index */ _pico_parse( p,0 ); - if (!_pico_parse_int( p,&indexes[1] )) - _ase_error_return("Face parse error"); + if ( !_pico_parse_int( p,&indexes[1] ) ) { + _ase_error_return( "Face parse error" ); + } /* get 3rd vertex index */ _pico_parse( p,0 ); - if (!_pico_parse_int( p,&indexes[2] )) - _ase_error_return("Face parse error"); + if ( !_pico_parse_int( p,&indexes[2] ) ) { + _ase_error_return( "Face parse error" ); + } /* set face indexes (note interleaved offset!) */ - PicoSetSurfaceIndex( surface, (index * 9 + 0), indexes[2] ); - PicoSetSurfaceIndex( surface, (index * 9 + 1), indexes[1] ); - PicoSetSurfaceIndex( surface, (index * 9 + 2), indexes[0] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 0 ), indexes[2] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 1 ), indexes[1] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 2 ), indexes[0] ); /* parse to the subMaterial ID */ while ( 1 ) { - _pico_parse (p,0); - if (!_pico_stricmp (p->token,"*MESH_MTLID" )) - { + _pico_parse( p,0 ); + if ( !_pico_stricmp( p->token,"*MESH_MTLID" ) ) { aseFace_t* newFace; int subMtlId; - _pico_parse_int ( p , &subMtlId ); - newFace = _pico_calloc ( 1 , sizeof ( aseFace_t )); + _pico_parse_int( p, &subMtlId ); + newFace = _pico_calloc( 1, sizeof( aseFace_t ) ); /* we fix up the mtlId later when we parse the material_ref */ newFace->mtlId = 0; @@ -561,33 +549,36 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) newFace->index[1] = indexes[1]; newFace->index[2] = indexes[0]; - _ase_add_face ( &faces,&facesTail,newFace ); + _ase_add_face( &faces,&facesTail,newFace ); break; } } } /* model texture vertex */ - else if (!_pico_stricmp(p->token,"*mesh_tvert")) - { - picoVec2_t uv; - int index; + else if ( !_pico_stricmp( p->token,"*mesh_tvert" ) ) { + picoVec2_t uv; + int index; /* we must have a valid surface */ - if( surface == NULL ) + if ( surface == NULL ) { continue; + } /* get uv vertex index */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("UV vertex parse error"); + if ( !_pico_parse_int( p,&index ) ) { + _ase_error_return( "UV vertex parse error" ); + } /* get uv vertex s */ - if (!_pico_parse_float( p,&uv[0] )) - _ase_error_return("UV vertex parse error"); + if ( !_pico_parse_float( p,&uv[0] ) ) { + _ase_error_return( "UV vertex parse error" ); + } /* get uv vertex t */ - if (!_pico_parse_float( p,&uv[1] )) - _ase_error_return("UV vertex parse error"); + if ( !_pico_parse_float( p,&uv[1] ) ) { + _ase_error_return( "UV vertex parse error" ); + } /* ydnar: invert t */ uv[ 1 ] = 1.0f - uv[ 1 ]; @@ -596,71 +587,79 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) PicoSetSurfaceST( surface,0,index,uv ); } /* ydnar: model mesh texture face */ - else if( !_pico_stricmp( p->token, "*mesh_tface" ) ) - { + else if ( !_pico_stricmp( p->token, "*mesh_tface" ) ) { picoIndex_t indexes[3]; - int index; + int index; aseFace_t* face; /* we must have a valid surface */ - if( surface == NULL ) + if ( surface == NULL ) { continue; + } /* get face index */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("Texture face parse error"); + if ( !_pico_parse_int( p,&index ) ) { + _ase_error_return( "Texture face parse error" ); + } /* get 1st vertex index */ - if (!_pico_parse_int( p,&indexes[0] )) - _ase_error_return("Texture face parse error"); + if ( !_pico_parse_int( p,&indexes[0] ) ) { + _ase_error_return( "Texture face parse error" ); + } /* get 2nd vertex index */ - if (!_pico_parse_int( p,&indexes[1] )) - _ase_error_return("Texture face parse error"); + if ( !_pico_parse_int( p,&indexes[1] ) ) { + _ase_error_return( "Texture face parse error" ); + } /* get 3rd vertex index */ - if (!_pico_parse_int( p,&indexes[2] )) - _ase_error_return("Texture face parse error"); + if ( !_pico_parse_int( p,&indexes[2] ) ) { + _ase_error_return( "Texture face parse error" ); + } /* set face indexes (note interleaved offset!) */ - PicoSetSurfaceIndex( surface, (index * 9 + 3), indexes[2] ); - PicoSetSurfaceIndex( surface, (index * 9 + 4), indexes[1] ); - PicoSetSurfaceIndex( surface, (index * 9 + 5), indexes[0] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 3 ), indexes[2] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 4 ), indexes[1] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 5 ), indexes[0] ); - face = _ase_get_face_for_index(faces,index); + face = _ase_get_face_for_index( faces,index ); face->index[3] = indexes[2]; face->index[4] = indexes[1]; face->index[5] = indexes[0]; } /* model color vertex */ - else if (!_pico_stricmp(p->token,"*mesh_vertcol")) - { - picoColor_t color; - int index; - float colorInput; + else if ( !_pico_stricmp( p->token,"*mesh_vertcol" ) ) { + picoColor_t color; + int index; + float colorInput; /* we must have a valid surface */ - if( surface == NULL ) + if ( surface == NULL ) { continue; + } /* get color vertex index */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("UV vertex parse error"); + if ( !_pico_parse_int( p,&index ) ) { + _ase_error_return( "UV vertex parse error" ); + } /* get R component */ - if (!_pico_parse_float( p,&colorInput )) - _ase_error_return("color vertex parse error"); - color[0] = (picoByte_t)(colorInput * 255); + if ( !_pico_parse_float( p,&colorInput ) ) { + _ase_error_return( "color vertex parse error" ); + } + color[0] = (picoByte_t)( colorInput * 255 ); /* get G component */ - if (!_pico_parse_float( p,&colorInput )) - _ase_error_return("color vertex parse error"); - color[1] = (picoByte_t)(colorInput * 255); + if ( !_pico_parse_float( p,&colorInput ) ) { + _ase_error_return( "color vertex parse error" ); + } + color[1] = (picoByte_t)( colorInput * 255 ); /* get B component */ - if (!_pico_parse_float( p,&colorInput )) - _ase_error_return("color vertex parse error"); - color[2] = (picoByte_t)(colorInput * 255); + if ( !_pico_parse_float( p,&colorInput ) ) { + _ase_error_return( "color vertex parse error" ); + } + color[2] = (picoByte_t)( colorInput * 255 ); /* leave alpha alone since we don't get any data from the ASE format */ color[3] = 255; @@ -669,81 +668,94 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) PicoSetSurfaceColor( surface,0,index,color ); } /* model color face */ - else if (!_pico_stricmp(p->token,"*mesh_cface")) - { + else if ( !_pico_stricmp( p->token,"*mesh_cface" ) ) { picoIndex_t indexes[3]; - int index; + int index; aseFace_t* face; /* we must have a valid surface */ - if( surface == NULL ) + if ( surface == NULL ) { continue; + } /* get face index */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("Face parse error"); + if ( !_pico_parse_int( p,&index ) ) { + _ase_error_return( "Face parse error" ); + } /* get 1st cvertex index */ // _pico_parse( p,0 ); - if (!_pico_parse_int( p,&indexes[0] )) - _ase_error_return("Face parse error"); + if ( !_pico_parse_int( p,&indexes[0] ) ) { + _ase_error_return( "Face parse error" ); + } /* get 2nd cvertex index */ // _pico_parse( p,0 ); - if (!_pico_parse_int( p,&indexes[1] )) - _ase_error_return("Face parse error"); + if ( !_pico_parse_int( p,&indexes[1] ) ) { + _ase_error_return( "Face parse error" ); + } /* get 3rd cvertex index */ // _pico_parse( p,0 ); - if (!_pico_parse_int( p,&indexes[2] )) - _ase_error_return("Face parse error"); + if ( !_pico_parse_int( p,&indexes[2] ) ) { + _ase_error_return( "Face parse error" ); + } /* set face indexes (note interleaved offset!) */ - PicoSetSurfaceIndex( surface, (index * 9 + 6), indexes[2] ); - PicoSetSurfaceIndex( surface, (index * 9 + 7), indexes[1] ); - PicoSetSurfaceIndex( surface, (index * 9 + 8), indexes[0] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 6 ), indexes[2] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 7 ), indexes[1] ); + PicoSetSurfaceIndex( surface, ( index * 9 + 8 ), indexes[0] ); - face = _ase_get_face_for_index(faces,index); + face = _ase_get_face_for_index( faces,index ); face->index[6] = indexes[2]; face->index[7] = indexes[1]; face->index[8] = indexes[0]; } /* model material */ - else if( !_pico_stricmp( p->token, "*material" ) ) - { - aseSubMaterial_t* subMaterial = NULL; - picoShader_t *shader = NULL; - int level = 1, index; - char materialName[ 1024 ]; - float transValue = 0.0f, shineValue = 1.0f; - picoColor_t ambientColor, diffuseColor, specularColor; - char *mapname = NULL; - int subMtlId, subMaterialLevel = -1; + else if ( !_pico_stricmp( p->token, "*material" ) ) { + aseSubMaterial_t* subMaterial = NULL; + picoShader_t *shader = NULL; + int level = 1, index; + char materialName[ 1024 ]; + float transValue = 0.0f, shineValue = 1.0f; + picoColor_t ambientColor, diffuseColor, specularColor; + char *mapname = NULL; + int subMtlId, subMaterialLevel = -1; /* get material index */ _pico_parse_int( p,&index ); /* check brace */ - if (!_pico_parse_check(p,1,"{")) - _ase_error_return("Material missing opening brace"); + if ( !_pico_parse_check( p,1,"{" ) ) { + _ase_error_return( "Material missing opening brace" ); + } /* parse material block */ - while( 1 ) + while ( 1 ) { /* get next token */ - if (_pico_parse(p,1) == NULL) break; - if (!strlen(p->token)) continue; + if ( _pico_parse( p,1 ) == NULL ) { + break; + } + if ( !strlen( p->token ) ) { + continue; + } /* handle levels */ - if (p->token[0] == '{') level++; - if (p->token[0] == '}') level--; - if (!level) break; + if ( p->token[0] == '{' ) { + level++; + } + if ( p->token[0] == '}' ) { + level--; + } + if ( !level ) { + break; + } - if( level == subMaterialLevel ) - { + if ( level == subMaterialLevel ) { /* set material name */ - PicoSetShaderName( shader, materialName); + PicoSetShaderName( shader, materialName ); /* set shader's transparency */ PicoSetShaderTransparency( shader,transValue ); @@ -771,52 +783,50 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) } /* parse submaterial index */ - if (!_pico_stricmp(p->token,"*submaterial")) - { + if ( !_pico_stricmp( p->token,"*submaterial" ) ) { /* allocate new pico shader */ - _pico_parse_int( p , &subMtlId ); + _pico_parse_int( p, &subMtlId ); shader = PicoNewShader( model ); - if (shader == NULL) - { + if ( shader == NULL ) { PicoFreeModel( model ); return NULL; } subMaterialLevel = level; } /* parse material name */ - else if (!_pico_stricmp(p->token,"*material_name")) - { - char* name = _pico_parse(p,0); - if ( name == NULL) - _ase_error_return("Missing material name"); + else if ( !_pico_stricmp( p->token,"*material_name" ) ) { + char* name = _pico_parse( p,0 ); + if ( name == NULL ) { + _ase_error_return( "Missing material name" ); + } - strcpy ( materialName , name ); + strcpy( materialName, name ); /* skip rest and continue with next token */ _pico_parse_skip_rest( p ); continue; } /* parse material transparency */ - else if (!_pico_stricmp(p->token,"*material_transparency")) - { + else if ( !_pico_stricmp( p->token,"*material_transparency" ) ) { /* get transparency value from ase */ - if (!_pico_parse_float( p,&transValue )) - _ase_error_return("Material transparency parse error"); + if ( !_pico_parse_float( p,&transValue ) ) { + _ase_error_return( "Material transparency parse error" ); + } /* skip rest and continue with next token */ _pico_parse_skip_rest( p ); continue; } /* parse material shininess */ - else if (!_pico_stricmp(p->token,"*material_shine")) - { + else if ( !_pico_stricmp( p->token,"*material_shine" ) ) { /* remark: * - not sure but instead of '*material_shine' i might * need to use '*material_shinestrength' */ /* get shine value from ase */ - if (!_pico_parse_float( p,&shineValue )) - _ase_error_return("Material shine parse error"); + if ( !_pico_parse_float( p,&shineValue ) ) { + _ase_error_return( "Material shine parse error" ); + } /* scale ase shine range 0..1 to pico range 0..127 */ shineValue *= 128.0; @@ -826,12 +836,12 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) continue; } /* parse ambient material color */ - else if (!_pico_stricmp(p->token,"*material_ambient")) - { - picoVec3_t vec; + else if ( !_pico_stricmp( p->token,"*material_ambient" ) ) { + picoVec3_t vec; /* get r,g,b float values from ase */ - if (!_pico_parse_vec( p,vec )) - _ase_error_return("Material color parse error"); + if ( !_pico_parse_vec( p,vec ) ) { + _ase_error_return( "Material color parse error" ); + } /* setup 0..255 range color values */ ambientColor[ 0 ] = (int)( vec[ 0 ] * 255.0 ); @@ -844,13 +854,13 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) continue; } /* parse diffuse material color */ - else if (!_pico_stricmp(p->token,"*material_diffuse")) - { - picoVec3_t vec; + else if ( !_pico_stricmp( p->token,"*material_diffuse" ) ) { + picoVec3_t vec; /* get r,g,b float values from ase */ - if (!_pico_parse_vec( p,vec )) - _ase_error_return("Material color parse error"); + if ( !_pico_parse_vec( p,vec ) ) { + _ase_error_return( "Material color parse error" ); + } /* setup 0..255 range color */ diffuseColor[ 0 ] = (int)( vec[ 0 ] * 255.0 ); @@ -863,13 +873,13 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) continue; } /* parse specular material color */ - else if (!_pico_stricmp(p->token,"*material_specular")) - { - picoVec3_t vec; + else if ( !_pico_stricmp( p->token,"*material_specular" ) ) { + picoVec3_t vec; /* get r,g,b float values from ase */ - if (!_pico_parse_vec( p,vec )) - _ase_error_return("Material color parse error"); + if ( !_pico_parse_vec( p,vec ) ) { + _ase_error_return( "Material color parse error" ); + } /* setup 0..255 range color */ specularColor[ 0 ] = (int)( vec[ 0 ] * 255 ); @@ -882,30 +892,39 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) continue; } /* material diffuse map */ - else if (!_pico_stricmp(p->token,"*map_diffuse") ) - { + else if ( !_pico_stricmp( p->token,"*map_diffuse" ) ) { int sublevel = 0; /* parse material block */ - while( 1 ) + while ( 1 ) { /* get next token */ - if (_pico_parse(p,1) == NULL) break; - if (!strlen(p->token)) continue; + if ( _pico_parse( p,1 ) == NULL ) { + break; + } + if ( !strlen( p->token ) ) { + continue; + } /* handle levels */ - if (p->token[0] == '{') sublevel++; - if (p->token[0] == '}') sublevel--; - if (!sublevel) break; + if ( p->token[0] == '{' ) { + sublevel++; + } + if ( p->token[0] == '}' ) { + sublevel--; + } + if ( !sublevel ) { + break; + } /* parse diffuse map bitmap */ - if (!_pico_stricmp(p->token,"*bitmap")) - { - char* name = _pico_parse(p,0); - if (name == NULL) - _ase_error_return("Missing material map bitmap name"); - mapname = _pico_alloc ( strlen ( name ) + 1 ); - strcpy ( mapname, name ); + if ( !_pico_stricmp( p->token,"*bitmap" ) ) { + char* name = _pico_parse( p,0 ); + if ( name == NULL ) { + _ase_error_return( "Missing material map bitmap name" ); + } + mapname = _pico_alloc( strlen( name ) + 1 ); + strcpy( mapname, name ); /* skip rest and continue with next token */ _pico_parse_skip_rest( p ); continue; @@ -916,12 +935,10 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) } /* end material block */ - if( subMaterial == NULL ) - { + if ( subMaterial == NULL ) { /* allocate new pico shader */ shader = PicoNewShader( model ); - if (shader == NULL) - { + if ( shader == NULL ) { PicoFreeModel( model ); return NULL; } @@ -955,9 +972,10 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) } /* ydnar: free mapname */ - if( mapname != NULL ) + if ( mapname != NULL ) { _pico_free( mapname ); - } // !_pico_stricmp ( "*material" ) + } + } // !_pico_stricmp ( "*material" ) /* skip unparsed rest of line and continue */ _pico_parse_skip_rest( p ); @@ -965,17 +983,17 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) /* ydnar: finish existing surface */ // _ase_make_surface( model, &surface ); - _ase_submit_triangles (surface, model ,materials,faces); - _ase_free_faces (&faces,&facesTail); + _ase_submit_triangles( surface, model,materials,faces ); + _ase_free_faces( &faces,&facesTail ); #ifdef DEBUG_PM_ASE - _ase_print_materials(materials); + _ase_print_materials( materials ); finish = clock(); - elapsed = (double)(finish - start) / CLOCKS_PER_SEC; + elapsed = (double)( finish - start ) / CLOCKS_PER_SEC; _pico_printf( PICO_NORMAL, "Loaded model in in %-.2f second(s)\n", elapsed ); #endif //DEBUG_PM_ASE - _ase_free_materials(&materials); + _ase_free_materials( &materials ); /* return allocated pico model */ return model; @@ -984,15 +1002,15 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD ) /* pico file format module definition */ const picoModule_t picoModuleASE = { - "1.0", /* module version string */ - "Autodesk 3DSMAX ASCII", /* module display name */ - "Jared Hefty, seaw0lf", /* author's name */ - "2003 Jared Hefty, 2002 seaw0lf", /* module copyright */ + "1.0", /* module version string */ + "Autodesk 3DSMAX ASCII", /* module display name */ + "Jared Hefty, seaw0lf", /* author's name */ + "2003 Jared Hefty, 2002 seaw0lf", /* module copyright */ { - "ase",NULL,NULL,NULL /* default extensions to use */ + "ase",NULL,NULL,NULL /* default extensions to use */ }, - _ase_canload, /* validation routine */ - _ase_load, /* load routine */ - NULL, /* save validation routine */ - NULL /* save routine */ + _ase_canload, /* validation routine */ + _ase_load, /* load routine */ + NULL, /* save validation routine */ + NULL /* save routine */ }; diff --git a/libs/picomodel/pm_fm.c b/libs/picomodel/pm_fm.c index bb3216c3..9201e27e 100644 --- a/libs/picomodel/pm_fm.c +++ b/libs/picomodel/pm_fm.c @@ -1,40 +1,40 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ /* -Nurail: Used pm_md3.c (Randy Reddig) as a template. -*/ + Nurail: Used pm_md3.c (Randy Reddig) as a template. + */ /* marker */ #define PM_FM_C @@ -48,140 +48,129 @@ Nurail: Used pm_md3.c (Randy Reddig) as a template. typedef struct index_LUT_s { - short Vert; - short ST; - struct index_LUT_s *next; + short Vert; + short ST; + struct index_LUT_s *next; } index_LUT_t; typedef struct index_DUP_LUT_s { - short ST; - short OldVert; + short ST; + short OldVert; } index_DUP_LUT_t; // _fm_canload() -static int _fm_canload( PM_PARAMS_CANLOAD ) -{ - fm_t fm; - unsigned char *bb; - int fm_file_pos; +static int _fm_canload( PM_PARAMS_CANLOAD ){ + fm_t fm; + unsigned char *bb; + int fm_file_pos; bb = (unsigned char *) buffer; // Header fm.fm_header_hdr = (fm_chunk_header_t *) bb; - fm_file_pos = sizeof(fm_chunk_header_t) + fm.fm_header_hdr->size; + fm_file_pos = sizeof( fm_chunk_header_t ) + fm.fm_header_hdr->size; #ifdef FM_VERBOSE_DBG _pico_printf( PICO_VERBOSE, "IDENT: %s\n", (unsigned char *) fm.fm_header_hdr->ident ); #endif - if( (strcmp(fm.fm_header_hdr->ident, FM_HEADERCHUNKNAME)) ) - { + if ( ( strcmp( fm.fm_header_hdr->ident, FM_HEADERCHUNKNAME ) ) ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM Header Ident incorrect\n"); + _pico_printf( PICO_WARNING, "FM Header Ident incorrect\n" ); #endif return PICO_PMV_ERROR_IDENT; } // check fm - if( _pico_little_long( fm.fm_header_hdr->version ) != FM_HEADERCHUNKVER ) - { + if ( _pico_little_long( fm.fm_header_hdr->version ) != FM_HEADERCHUNKVER ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM Header Version incorrect\n"); + _pico_printf( PICO_WARNING, "FM Header Version incorrect\n" ); #endif return PICO_PMV_ERROR_VERSION; } // Skin - fm.fm_skin_hdr = (fm_chunk_header_t *) (bb + fm_file_pos); - fm_file_pos += sizeof(fm_chunk_header_t) + fm.fm_skin_hdr->size; + fm.fm_skin_hdr = (fm_chunk_header_t *) ( bb + fm_file_pos ); + fm_file_pos += sizeof( fm_chunk_header_t ) + fm.fm_skin_hdr->size; #ifdef FM_VERBOSE_DBG _pico_printf( PICO_VERBOSE, "SKIN: %s\n", (unsigned char *) fm.fm_skin_hdr->ident ); #endif - if( (strcmp(fm.fm_skin_hdr->ident, FM_SKINCHUNKNAME)) ) - { + if ( ( strcmp( fm.fm_skin_hdr->ident, FM_SKINCHUNKNAME ) ) ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM Skin Ident incorrect\n"); + _pico_printf( PICO_WARNING, "FM Skin Ident incorrect\n" ); #endif return PICO_PMV_ERROR_IDENT; } // check fm - if( _pico_little_long( fm.fm_skin_hdr->version ) != FM_SKINCHUNKVER ) - { + if ( _pico_little_long( fm.fm_skin_hdr->version ) != FM_SKINCHUNKVER ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM Skin Version incorrect\n"); + _pico_printf( PICO_WARNING, "FM Skin Version incorrect\n" ); #endif return PICO_PMV_ERROR_VERSION; } // st - fm.fm_st_hdr = (fm_chunk_header_t *) (bb + fm_file_pos); - fm_file_pos += sizeof(fm_chunk_header_t) + fm.fm_st_hdr->size; + fm.fm_st_hdr = (fm_chunk_header_t *) ( bb + fm_file_pos ); + fm_file_pos += sizeof( fm_chunk_header_t ) + fm.fm_st_hdr->size; #ifdef FM_VERBOSE_DBG _pico_printf( PICO_VERBOSE, "ST: %s\n", (unsigned char *) fm.fm_st_hdr->ident ); #endif - if( (strcmp(fm.fm_st_hdr->ident, FM_STCOORDCHUNKNAME)) ) - { + if ( ( strcmp( fm.fm_st_hdr->ident, FM_STCOORDCHUNKNAME ) ) ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM ST Ident incorrect\n"); + _pico_printf( PICO_WARNING, "FM ST Ident incorrect\n" ); #endif return PICO_PMV_ERROR_IDENT; } // check fm - if( _pico_little_long( fm.fm_st_hdr->version ) != FM_STCOORDCHUNKVER ) - { + if ( _pico_little_long( fm.fm_st_hdr->version ) != FM_STCOORDCHUNKVER ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM ST Version incorrect\n"); + _pico_printf( PICO_WARNING, "FM ST Version incorrect\n" ); #endif return PICO_PMV_ERROR_VERSION; } // tri - fm.fm_tri_hdr = (fm_chunk_header_t *) (bb + fm_file_pos); - fm_file_pos += sizeof(fm_chunk_header_t) + fm.fm_tri_hdr->size; + fm.fm_tri_hdr = (fm_chunk_header_t *) ( bb + fm_file_pos ); + fm_file_pos += sizeof( fm_chunk_header_t ) + fm.fm_tri_hdr->size; #ifdef FM_VERBOSE_DBG _pico_printf( PICO_VERBOSE, "TRI: %s\n", (unsigned char *) fm.fm_tri_hdr->ident ); #endif - if( (strcmp(fm.fm_tri_hdr->ident, FM_TRISCHUNKNAME)) ) - { + if ( ( strcmp( fm.fm_tri_hdr->ident, FM_TRISCHUNKNAME ) ) ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM Tri Ident incorrect\n"); + _pico_printf( PICO_WARNING, "FM Tri Ident incorrect\n" ); #endif return PICO_PMV_ERROR_IDENT; } // check fm - if( _pico_little_long( fm.fm_tri_hdr->version ) != FM_TRISCHUNKVER ) - { + if ( _pico_little_long( fm.fm_tri_hdr->version ) != FM_TRISCHUNKVER ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM Tri Version incorrect\n"); + _pico_printf( PICO_WARNING, "FM Tri Version incorrect\n" ); #endif return PICO_PMV_ERROR_VERSION; } // frame - fm.fm_frame_hdr = (fm_chunk_header_t *) (bb + fm_file_pos); - fm_file_pos += sizeof(fm_chunk_header_t); + fm.fm_frame_hdr = (fm_chunk_header_t *) ( bb + fm_file_pos ); + fm_file_pos += sizeof( fm_chunk_header_t ); #ifdef FM_VERBOSE_DBG _pico_printf( PICO_VERBOSE, "FRAME: %s\n", (unsigned char *) fm.fm_frame_hdr->ident ); #endif - if( (strcmp(fm.fm_frame_hdr->ident, FM_FRAMESCHUNKNAME)) ) - { + if ( ( strcmp( fm.fm_frame_hdr->ident, FM_FRAMESCHUNKNAME ) ) ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM Frame Ident incorrect\n"); + _pico_printf( PICO_WARNING, "FM Frame Ident incorrect\n" ); #endif return PICO_PMV_ERROR_IDENT; } // check fm - if( _pico_little_long( fm.fm_frame_hdr->version ) != FM_FRAMESCHUNKVER ) - { + if ( _pico_little_long( fm.fm_frame_hdr->version ) != FM_FRAMESCHUNKVER ) { #ifdef FM_DBG - _pico_printf( PICO_WARNING, "FM Frame Version incorrect\n"); + _pico_printf( PICO_WARNING, "FM Frame Version incorrect\n" ); #endif return PICO_PMV_ERROR_VERSION; } @@ -193,146 +182,133 @@ static int _fm_canload( PM_PARAMS_CANLOAD ) // _fm_load() loads a Heretic 2 model file. -static picoModel_t *_fm_load( PM_PARAMS_LOAD ) -{ - int i, j, dups, dup_index; - int fm_file_pos; - short tot_numVerts; - index_LUT_t *p_index_LUT, *p_index_LUT2, *p_index_LUT3; - index_DUP_LUT_t *p_index_LUT_DUPS; - - fm_vert_normal_t *vert; - - char skinname[FM_SKINPATHSIZE]; - fm_t fm; - fm_header_t *fm_head; - fm_st_t *texCoord; - fm_xyz_st_t *tri_verts; - fm_xyz_st_t *triangle; - fm_frame_t *frame; +static picoModel_t *_fm_load( PM_PARAMS_LOAD ){ + int i, j, dups, dup_index; + int fm_file_pos; + short tot_numVerts; + index_LUT_t *p_index_LUT, *p_index_LUT2, *p_index_LUT3; + index_DUP_LUT_t *p_index_LUT_DUPS; + + fm_vert_normal_t *vert; + + char skinname[FM_SKINPATHSIZE]; + fm_t fm; + fm_header_t *fm_head; + fm_st_t *texCoord; + fm_xyz_st_t *tri_verts; + fm_xyz_st_t *triangle; + fm_frame_t *frame; picoByte_t *bb; - picoModel_t *picoModel; - picoSurface_t *picoSurface; - picoShader_t *picoShader; - picoVec3_t xyz, normal; - picoVec2_t st; - picoColor_t color; - + picoModel_t *picoModel; + picoSurface_t *picoSurface; + picoShader_t *picoShader; + picoVec3_t xyz, normal; + picoVec2_t st; + picoColor_t color; + // fm loading - _pico_printf( PICO_NORMAL, "Loading \"%s\"", fileName ); + _pico_printf( PICO_NORMAL, "Loading \"%s\"", fileName ); bb = (picoByte_t*) buffer; // Header Header fm.fm_header_hdr = (fm_chunk_header_t *) bb; - fm_file_pos = sizeof(fm_chunk_header_t) + fm.fm_header_hdr->size; - if( (strcmp(fm.fm_header_hdr->ident, FM_HEADERCHUNKNAME)) ) - { - _pico_printf( PICO_WARNING, "FM Header Ident incorrect\n"); + fm_file_pos = sizeof( fm_chunk_header_t ) + fm.fm_header_hdr->size; + if ( ( strcmp( fm.fm_header_hdr->ident, FM_HEADERCHUNKNAME ) ) ) { + _pico_printf( PICO_WARNING, "FM Header Ident incorrect\n" ); return NULL; } - if( _pico_little_long( fm.fm_header_hdr->version ) != FM_HEADERCHUNKVER ) - { - _pico_printf( PICO_WARNING, "FM Header Version incorrect\n"); + if ( _pico_little_long( fm.fm_header_hdr->version ) != FM_HEADERCHUNKVER ) { + _pico_printf( PICO_WARNING, "FM Header Version incorrect\n" ); return NULL; } // Skin Header - fm.fm_skin_hdr = (fm_chunk_header_t *) (bb + fm_file_pos); - fm_file_pos += sizeof(fm_chunk_header_t) + fm.fm_skin_hdr->size; - if( (strcmp(fm.fm_skin_hdr->ident, FM_SKINCHUNKNAME)) ) - { - _pico_printf( PICO_WARNING, "FM Skin Ident incorrect\n"); + fm.fm_skin_hdr = (fm_chunk_header_t *) ( bb + fm_file_pos ); + fm_file_pos += sizeof( fm_chunk_header_t ) + fm.fm_skin_hdr->size; + if ( ( strcmp( fm.fm_skin_hdr->ident, FM_SKINCHUNKNAME ) ) ) { + _pico_printf( PICO_WARNING, "FM Skin Ident incorrect\n" ); return NULL; } - if( _pico_little_long( fm.fm_skin_hdr->version ) != FM_SKINCHUNKVER ) - { - _pico_printf( PICO_WARNING, "FM Skin Version incorrect\n"); + if ( _pico_little_long( fm.fm_skin_hdr->version ) != FM_SKINCHUNKVER ) { + _pico_printf( PICO_WARNING, "FM Skin Version incorrect\n" ); return NULL; } // ST Header - fm.fm_st_hdr = (fm_chunk_header_t *) (bb + fm_file_pos); - fm_file_pos += sizeof(fm_chunk_header_t) + fm.fm_st_hdr->size; - if( (strcmp(fm.fm_st_hdr->ident, FM_STCOORDCHUNKNAME)) ) - { - _pico_printf( PICO_WARNING, "FM ST Ident incorrect\n"); + fm.fm_st_hdr = (fm_chunk_header_t *) ( bb + fm_file_pos ); + fm_file_pos += sizeof( fm_chunk_header_t ) + fm.fm_st_hdr->size; + if ( ( strcmp( fm.fm_st_hdr->ident, FM_STCOORDCHUNKNAME ) ) ) { + _pico_printf( PICO_WARNING, "FM ST Ident incorrect\n" ); return NULL; } - if( _pico_little_long( fm.fm_st_hdr->version ) != FM_STCOORDCHUNKVER ) - { - _pico_printf( PICO_WARNING, "FM ST Version incorrect\n"); + if ( _pico_little_long( fm.fm_st_hdr->version ) != FM_STCOORDCHUNKVER ) { + _pico_printf( PICO_WARNING, "FM ST Version incorrect\n" ); return NULL; } // Tris Header - fm.fm_tri_hdr = (fm_chunk_header_t *) (bb + fm_file_pos); - fm_file_pos += sizeof(fm_chunk_header_t) + fm.fm_tri_hdr->size; - if( (strcmp(fm.fm_tri_hdr->ident, FM_TRISCHUNKNAME)) ) - { - _pico_printf( PICO_WARNING, "FM Tri Ident incorrect\n"); + fm.fm_tri_hdr = (fm_chunk_header_t *) ( bb + fm_file_pos ); + fm_file_pos += sizeof( fm_chunk_header_t ) + fm.fm_tri_hdr->size; + if ( ( strcmp( fm.fm_tri_hdr->ident, FM_TRISCHUNKNAME ) ) ) { + _pico_printf( PICO_WARNING, "FM Tri Ident incorrect\n" ); return NULL; } - if( _pico_little_long( fm.fm_tri_hdr->version ) != FM_TRISCHUNKVER ) - { - _pico_printf( PICO_WARNING, "FM Tri Version incorrect\n"); + if ( _pico_little_long( fm.fm_tri_hdr->version ) != FM_TRISCHUNKVER ) { + _pico_printf( PICO_WARNING, "FM Tri Version incorrect\n" ); return NULL; } // Frame Header - fm.fm_frame_hdr = (fm_chunk_header_t *) (bb + fm_file_pos); - fm_file_pos += sizeof(fm_chunk_header_t); - if( (strcmp(fm.fm_frame_hdr->ident, FM_FRAMESCHUNKNAME)) ) - { - _pico_printf( PICO_WARNING, "FM Frame Ident incorrect\n"); + fm.fm_frame_hdr = (fm_chunk_header_t *) ( bb + fm_file_pos ); + fm_file_pos += sizeof( fm_chunk_header_t ); + if ( ( strcmp( fm.fm_frame_hdr->ident, FM_FRAMESCHUNKNAME ) ) ) { + _pico_printf( PICO_WARNING, "FM Frame Ident incorrect\n" ); return NULL; } - if( _pico_little_long( fm.fm_frame_hdr->version ) != FM_FRAMESCHUNKVER ) - { - _pico_printf( PICO_WARNING, "FM Frame Version incorrect\n"); + if ( _pico_little_long( fm.fm_frame_hdr->version ) != FM_FRAMESCHUNKVER ) { + _pico_printf( PICO_WARNING, "FM Frame Version incorrect\n" ); return NULL; } // Header - fm_file_pos = sizeof(fm_chunk_header_t); - fm_head = fm.fm_header = (fm_header_t *) (bb + fm_file_pos); + fm_file_pos = sizeof( fm_chunk_header_t ); + fm_head = fm.fm_header = (fm_header_t *) ( bb + fm_file_pos ); fm_file_pos += fm.fm_header_hdr->size; // Skin - fm_file_pos += sizeof(fm_chunk_header_t); - fm.fm_skin = (fm_skinpath_t *) (bb + fm_file_pos); + fm_file_pos += sizeof( fm_chunk_header_t ); + fm.fm_skin = (fm_skinpath_t *) ( bb + fm_file_pos ); fm_file_pos += fm.fm_skin_hdr->size; // ST - fm_file_pos += sizeof(fm_chunk_header_t); - texCoord = fm.fm_st = (fm_st_t *) (bb + fm_file_pos); + fm_file_pos += sizeof( fm_chunk_header_t ); + texCoord = fm.fm_st = (fm_st_t *) ( bb + fm_file_pos ); fm_file_pos += fm.fm_st_hdr->size; // Tri - fm_file_pos += sizeof(fm_chunk_header_t); - tri_verts = fm.fm_tri = (fm_xyz_st_t *) (bb + fm_file_pos); + fm_file_pos += sizeof( fm_chunk_header_t ); + tri_verts = fm.fm_tri = (fm_xyz_st_t *) ( bb + fm_file_pos ); fm_file_pos += fm.fm_tri_hdr->size; // Frame - fm_file_pos += sizeof(fm_chunk_header_t); - frame = fm.fm_frame = (fm_frame_t *) (bb + fm_file_pos); + fm_file_pos += sizeof( fm_chunk_header_t ); + frame = fm.fm_frame = (fm_frame_t *) ( bb + fm_file_pos ); // do frame check - if( fm_head->numFrames < 1 ) - { + if ( fm_head->numFrames < 1 ) { _pico_printf( PICO_ERROR, "%s has 0 frames!", fileName ); return NULL; } - - if( frameNum < 0 || frameNum >= fm_head->numFrames ) - { + + if ( frameNum < 0 || frameNum >= fm_head->numFrames ) { _pico_printf( PICO_ERROR, "Invalid or out-of-range FM frame specified" ); return NULL; } @@ -350,7 +326,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) fm_head->numFrames = _pico_little_long( fm_head->numFrames ); // swap frame scale and translation - for( i = 0; i < 3; i++ ) + for ( i = 0; i < 3; i++ ) { frame->header.scale[ i ] = _pico_little_float( frame->header.scale[ i ] ); frame->header.translate[ i ] = _pico_little_float( frame->header.translate[ i ] ); @@ -358,9 +334,9 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) // swap triangles triangle = tri_verts; - for( i = 0; i < fm_head->numTris; i++, triangle++ ) + for ( i = 0; i < fm_head->numTris; i++, triangle++ ) { - for( j = 0; j < 3; j++ ) + for ( j = 0; j < 3; j++ ) { triangle->index_xyz[ j ] = _pico_little_short( triangle->index_xyz[ j ] ); triangle->index_st[ j ] = _pico_little_short( triangle->index_st[ j ] ); @@ -368,17 +344,17 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) } // swap st coords - for( i = 0; i < fm_head->numST; i++ ) + for ( i = 0; i < fm_head->numST; i++ ) { texCoord->s = _pico_little_short( texCoord[i].s ); texCoord->t = _pico_little_short( texCoord[i].t ); } // set Skin Name - strncpy(skinname, (unsigned char *) fm.fm_skin, FM_SKINPATHSIZE ); + strncpy( skinname, (unsigned char *) fm.fm_skin, FM_SKINPATHSIZE ); #ifdef FM_VERBOSE_DBG // Print out md2 values - _pico_printf(PICO_VERBOSE,"numSkins->%d numXYZ->%d numST->%d numTris->%d numFrames->%d\nSkin Name \"%s\"\n", fm_head->numSkins, fm_head->numXYZ, fm_head->numST, fm_head->numTris, fm_head->numFrames, &skinname ); + _pico_printf( PICO_VERBOSE,"numSkins->%d numXYZ->%d numST->%d numTris->%d numFrames->%d\nSkin Name \"%s\"\n", fm_head->numSkins, fm_head->numXYZ, fm_head->numST, fm_head->numTris, fm_head->numFrames, &skinname ); #endif // detox Skin name @@ -387,8 +363,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) /* create new pico model */ picoModel = PicoNewModel(); - if( picoModel == NULL ) - { + if ( picoModel == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model" ); return NULL; } @@ -401,8 +376,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) // allocate new pico surface picoSurface = PicoNewSurface( picoModel ); - if( picoSurface == NULL ) - { + if ( picoSurface == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" ); PicoFreeModel( picoModel ); return NULL; @@ -412,8 +386,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) PicoSetSurfaceType( picoSurface, PICO_TRIANGLES ); PicoSetSurfaceName( picoSurface, frame->header.name ); picoShader = PicoNewShader( picoModel ); - if( picoShader == NULL ) - { + if ( picoShader == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" ); PicoFreeModel( picoModel ); return NULL; @@ -425,8 +398,8 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) PicoSetSurfaceShader( picoSurface, picoShader ); // Init LUT for Verts - p_index_LUT = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t) * fm_head->numXYZ); - for(i=0; inumXYZ; i++) + p_index_LUT = (index_LUT_t *)_pico_alloc( sizeof( index_LUT_t ) * fm_head->numXYZ ); + for ( i = 0; i < fm_head->numXYZ; i++ ) { p_index_LUT[i].Vert = -1; p_index_LUT[i].ST = -1; @@ -438,31 +411,32 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) dups = 0; triangle = tri_verts; - for(i=0; inumTris; i++) + for ( i = 0; i < fm_head->numTris; i++ ) { - for(j=0; j<3; j++) + for ( j = 0; j < 3; j++ ) { - if (p_index_LUT[triangle->index_xyz[j]].ST == -1) // No Main Entry + if ( p_index_LUT[triangle->index_xyz[j]].ST == -1 ) { // No Main Entry p_index_LUT[triangle->index_xyz[j]].ST = triangle->index_st[j]; + } - else if (triangle->index_st[j] == p_index_LUT[triangle->index_xyz[j]].ST ) // Equal to Main Entry - { + else if ( triangle->index_st[j] == p_index_LUT[triangle->index_xyz[j]].ST ) { // Equal to Main Entry #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, "-> Tri #%d, Vert %d:\t XYZ:%d ST:%d\n", i, j, triangle->index_xyz[j], triangle->index_st[j]); + _pico_printf( PICO_NORMAL, "-> Tri #%d, Vert %d:\t XYZ:%d ST:%d\n", i, j, triangle->index_xyz[j], triangle->index_st[j] ); #endif continue; } - else if ( (p_index_LUT[triangle->index_xyz[j]].next == NULL) ) // Not equal to Main entry, and no LL entry - { // Add first entry of LL from Main - p_index_LUT2 = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t)); - if (p_index_LUT2 == NULL) - _pico_printf( PICO_NORMAL, " Couldn't allocate memory!\n"); + else if ( ( p_index_LUT[triangle->index_xyz[j]].next == NULL ) ) { // Not equal to Main entry, and no LL entry + // Add first entry of LL from Main + p_index_LUT2 = (index_LUT_t *)_pico_alloc( sizeof( index_LUT_t ) ); + if ( p_index_LUT2 == NULL ) { + _pico_printf( PICO_NORMAL, " Couldn't allocate memory!\n" ); + } p_index_LUT[triangle->index_xyz[j]].next = (index_LUT_t *)p_index_LUT2; p_index_LUT2->Vert = dups; p_index_LUT2->ST = triangle->index_st[j]; p_index_LUT2->next = NULL; #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, " ADDING first LL XYZ:%d DUP:%d ST:%d\n", triangle->index_xyz[j], dups, triangle->index_st[j]); + _pico_printf( PICO_NORMAL, " ADDING first LL XYZ:%d DUP:%d ST:%d\n", triangle->index_xyz[j], dups, triangle->index_st[j] ); #endif triangle->index_xyz[j] = dups + fm_head->numXYZ; // Make change in Tri hunk dups++; @@ -470,56 +444,56 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) else // Try to find in LL from Main Entry { p_index_LUT3 = p_index_LUT2 = p_index_LUT[triangle->index_xyz[j]].next; - while ( (p_index_LUT2 != NULL) && (triangle->index_xyz[j] != p_index_LUT2->Vert) ) // Walk down LL + while ( ( p_index_LUT2 != NULL ) && ( triangle->index_xyz[j] != p_index_LUT2->Vert ) ) // Walk down LL { p_index_LUT3 = p_index_LUT2; p_index_LUT2 = p_index_LUT2->next; } p_index_LUT2 = p_index_LUT3; - if ( triangle->index_st[j] == p_index_LUT2->ST ) // Found it - { + if ( triangle->index_st[j] == p_index_LUT2->ST ) { // Found it triangle->index_xyz[j] = p_index_LUT2->Vert + fm_head->numXYZ; // Make change in Tri hunk #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, "--> Tri #%d, Vert %d:\t XYZ:%d ST:%d\n", i, j, triangle->index_xyz[j], triangle->index_st[j]); + _pico_printf( PICO_NORMAL, "--> Tri #%d, Vert %d:\t XYZ:%d ST:%d\n", i, j, triangle->index_xyz[j], triangle->index_st[j] ); #endif continue; } - if ( p_index_LUT2->next == NULL) // Didn't find it. Add entry to LL. - { + if ( p_index_LUT2->next == NULL ) { // Didn't find it. Add entry to LL. // Add the Entry - p_index_LUT3 = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t)); - if (p_index_LUT3 == NULL) - _pico_printf( PICO_NORMAL, " Couldn't allocate memory!\n"); + p_index_LUT3 = (index_LUT_t *)_pico_alloc( sizeof( index_LUT_t ) ); + if ( p_index_LUT3 == NULL ) { + _pico_printf( PICO_NORMAL, " Couldn't allocate memory!\n" ); + } p_index_LUT2->next = (index_LUT_t *)p_index_LUT3; p_index_LUT3->Vert = dups; p_index_LUT3->ST = triangle->index_st[j]; p_index_LUT3->next = NULL; #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, " ADDING additional LL XYZ:%d DUP:%d NewXYZ:%d ST:%d\n", triangle->index_xyz[j], dups, dups + (fm_head->numXYZ), triangle->index_st[j]); + _pico_printf( PICO_NORMAL, " ADDING additional LL XYZ:%d DUP:%d NewXYZ:%d ST:%d\n", triangle->index_xyz[j], dups, dups + ( fm_head->numXYZ ), triangle->index_st[j] ); #endif triangle->index_xyz[j] = dups + fm_head->numXYZ; // Make change in Tri hunk dups++; } } #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, "---> Tri #%d, Vert %d:\t XYZ:%d ST:%d\n", i, j, triangle->index_xyz[j], triangle->index_st[j]); + _pico_printf( PICO_NORMAL, "---> Tri #%d, Vert %d:\t XYZ:%d ST:%d\n", i, j, triangle->index_xyz[j], triangle->index_st[j] ); #endif } triangle++; } // malloc and build array for Dup STs - p_index_LUT_DUPS = (index_DUP_LUT_t *)_pico_alloc(sizeof(index_DUP_LUT_t) * dups); - if (p_index_LUT_DUPS == NULL) - _pico_printf( PICO_NORMAL, " Couldn't allocate memory!\n"); + p_index_LUT_DUPS = (index_DUP_LUT_t *)_pico_alloc( sizeof( index_DUP_LUT_t ) * dups ); + if ( p_index_LUT_DUPS == NULL ) { + _pico_printf( PICO_NORMAL, " Couldn't allocate memory!\n" ); + } dup_index = 0; - for(i=0; inumXYZ; i++) + for ( i = 0; i < fm_head->numXYZ; i++ ) { p_index_LUT2 = p_index_LUT[i].next; - while (p_index_LUT2 != NULL) + while ( p_index_LUT2 != NULL ) { p_index_LUT_DUPS[p_index_LUT2->Vert].OldVert = i; p_index_LUT_DUPS[p_index_LUT2->Vert].ST = p_index_LUT2->ST; @@ -528,96 +502,94 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) } } #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, " Dups = %d\n", dups); - _pico_printf( PICO_NORMAL, " Dup Index = %d\n", dup_index); + _pico_printf( PICO_NORMAL, " Dups = %d\n", dups ); + _pico_printf( PICO_NORMAL, " Dup Index = %d\n", dup_index ); #endif - for(i=0; inumXYZ; i++) + for ( i = 0; i < fm_head->numXYZ; i++ ) { #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, "Vert: %4d\t%4d",i, p_index_LUT[i].ST); + _pico_printf( PICO_NORMAL, "Vert: %4d\t%4d",i, p_index_LUT[i].ST ); #endif - if (p_index_LUT[i].next != NULL) - { + if ( p_index_LUT[i].next != NULL ) { p_index_LUT2 = p_index_LUT[i].next; do { #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, " %4d %4d", p_index_LUT2->Vert, p_index_LUT2->ST); + _pico_printf( PICO_NORMAL, " %4d %4d", p_index_LUT2->Vert, p_index_LUT2->ST ); #endif p_index_LUT2 = p_index_LUT2->next; - } while ( p_index_LUT2 != NULL); + } while ( p_index_LUT2 != NULL ); } #ifdef FM_VERBOSE_DBG - _pico_printf( PICO_NORMAL, "\n"); + _pico_printf( PICO_NORMAL, "\n" ); #endif } #ifdef FM_VERBOSE_DBG - for(i=0; inumTris; i++) + for ( i = 0; i < fm_head->numTris; i++ ) { - for(j=0; j<3; j++) - _pico_printf( PICO_NORMAL, "Tri #%d, Vert %d:\t XYZ:%d ST:%d\n", i, j, triangle->index_xyz[j], triangle->index_st[j]); - _pico_printf( PICO_NORMAL, "\n"); + for ( j = 0; j < 3; j++ ) + _pico_printf( PICO_NORMAL, "Tri #%d, Vert %d:\t XYZ:%d ST:%d\n", i, j, triangle->index_xyz[j], triangle->index_st[j] ); + _pico_printf( PICO_NORMAL, "\n" ); triangle++; } #endif // Build Picomodel triangle = tri_verts; - for( j = 0; j < fm_head->numTris; j++, triangle++ ) + for ( j = 0; j < fm_head->numTris; j++, triangle++ ) { - PicoSetSurfaceIndex( picoSurface, j*3 , triangle->index_xyz[0] ); - PicoSetSurfaceIndex( picoSurface, j*3+1 , triangle->index_xyz[1] ); - PicoSetSurfaceIndex( picoSurface, j*3+2 , triangle->index_xyz[2] ); + PicoSetSurfaceIndex( picoSurface, j * 3, triangle->index_xyz[0] ); + PicoSetSurfaceIndex( picoSurface, j * 3 + 1, triangle->index_xyz[1] ); + PicoSetSurfaceIndex( picoSurface, j * 3 + 2, triangle->index_xyz[2] ); } - vert = (fm_vert_normal_t*) ((picoByte_t*) (frame->verts) ); - for(i=0; i< fm_head->numXYZ; i++, vert++) + vert = (fm_vert_normal_t*) ( (picoByte_t*) ( frame->verts ) ); + for ( i = 0; i < fm_head->numXYZ; i++, vert++ ) { /* set vertex origin */ xyz[ 0 ] = vert->v[0] * frame->header.scale[0] + frame->header.translate[0]; xyz[ 1 ] = vert->v[1] * frame->header.scale[1] + frame->header.translate[1]; xyz[ 2 ] = vert->v[2] * frame->header.scale[2] + frame->header.translate[2]; - PicoSetSurfaceXYZ( picoSurface, i , xyz ); + PicoSetSurfaceXYZ( picoSurface, i, xyz ); /* set normal */ normal[ 0 ] = fm_normals[vert->lightnormalindex][0]; normal[ 1 ] = fm_normals[vert->lightnormalindex][1]; normal[ 2 ] = fm_normals[vert->lightnormalindex][2]; - PicoSetSurfaceNormal( picoSurface, i , normal ); + PicoSetSurfaceNormal( picoSurface, i, normal ); /* set st coords */ - st[ 0 ] = ((texCoord[p_index_LUT[i].ST].s) / ((float)fm_head->skinWidth)); - st[ 1 ] = (texCoord[p_index_LUT[i].ST].t / ((float)fm_head->skinHeight)); - PicoSetSurfaceST( picoSurface, 0, i , st ); + st[ 0 ] = ( ( texCoord[p_index_LUT[i].ST].s ) / ( (float)fm_head->skinWidth ) ); + st[ 1 ] = ( texCoord[p_index_LUT[i].ST].t / ( (float)fm_head->skinHeight ) ); + PicoSetSurfaceST( picoSurface, 0, i, st ); } - if (dups) - { - for(i=0; iverts[j].v[0] * frame->header.scale[0] + frame->header.translate[0]; xyz[ 1 ] = frame->verts[j].v[1] * frame->header.scale[1] + frame->header.translate[1]; xyz[ 2 ] = frame->verts[j].v[2] * frame->header.scale[2] + frame->header.translate[2]; - PicoSetSurfaceXYZ( picoSurface, i + fm_head->numXYZ , xyz ); + PicoSetSurfaceXYZ( picoSurface, i + fm_head->numXYZ, xyz ); /* set normal */ normal[ 0 ] = fm_normals[frame->verts[j].lightnormalindex][0]; normal[ 1 ] = fm_normals[frame->verts[j].lightnormalindex][1]; normal[ 2 ] = fm_normals[frame->verts[j].lightnormalindex][2]; - PicoSetSurfaceNormal( picoSurface, i + fm_head->numXYZ , normal ); + PicoSetSurfaceNormal( picoSurface, i + fm_head->numXYZ, normal ); /* set st coords */ - st[ 0 ] = ((texCoord[p_index_LUT_DUPS[i].ST].s) / ((float)fm_head->skinWidth)); - st[ 1 ] = (texCoord[p_index_LUT_DUPS[i].ST].t / ((float)fm_head->skinHeight)); - PicoSetSurfaceST( picoSurface, 0, i + fm_head->numXYZ , st ); + st[ 0 ] = ( ( texCoord[p_index_LUT_DUPS[i].ST].s ) / ( (float)fm_head->skinWidth ) ); + st[ 1 ] = ( texCoord[p_index_LUT_DUPS[i].ST].t / ( (float)fm_head->skinHeight ) ); + PicoSetSurfaceST( picoSurface, 0, i + fm_head->numXYZ, st ); } } @@ -625,26 +597,26 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) PicoSetSurfaceColor( picoSurface, 0, 0, color ); // Free up malloc'ed LL entries - for(i=0; inumXYZ; i++) + for ( i = 0; i < fm_head->numXYZ; i++ ) { - if(p_index_LUT[i].next != NULL) - { + if ( p_index_LUT[i].next != NULL ) { p_index_LUT2 = p_index_LUT[i].next; do { p_index_LUT3 = p_index_LUT2->next; - _pico_free(p_index_LUT2); + _pico_free( p_index_LUT2 ); p_index_LUT2 = p_index_LUT3; dups--; - } while (p_index_LUT2 != NULL); + } while ( p_index_LUT2 != NULL ); } } - if (dups) - _pico_printf(PICO_WARNING, " Not all LL mallocs freed\n"); + if ( dups ) { + _pico_printf( PICO_WARNING, " Not all LL mallocs freed\n" ); + } // Free malloc'ed LUTs - _pico_free(p_index_LUT); - _pico_free(p_index_LUT_DUPS); + _pico_free( p_index_LUT ); + _pico_free( p_index_LUT_DUPS ); /* return the new pico model */ return picoModel; @@ -656,15 +628,15 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD ) /* pico file format module definition */ const picoModule_t picoModuleFM = { - "0.85", /* module version string */ - "Heretic 2 FM", /* module display name */ - "Nurail", /* author's name */ - "2003 Nurail", /* module copyright */ + "0.85", /* module version string */ + "Heretic 2 FM", /* module display name */ + "Nurail", /* author's name */ + "2003 Nurail", /* module copyright */ { - "fm", NULL, NULL, NULL /* default extensions to use */ + "fm", NULL, NULL, NULL /* default extensions to use */ }, - _fm_canload, /* validation routine */ - _fm_load, /* load routine */ - NULL, /* save validation routine */ - NULL /* save routine */ + _fm_canload, /* validation routine */ + _fm_load, /* load routine */ + NULL, /* save validation routine */ + NULL /* save routine */ }; diff --git a/libs/picomodel/pm_fm.h b/libs/picomodel/pm_fm.h index 3fd5148e..6fa317ca 100644 --- a/libs/picomodel/pm_fm.h +++ b/libs/picomodel/pm_fm.h @@ -1,48 +1,48 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ // This header file is based from the following: /* - FlexModel.H - Header file for FlexModel file structure + FlexModel.H - Header file for FlexModel file structure - By Chris Burke - serotonin@earthlink.net -*/ + By Chris Burke + serotonin@earthlink.net + */ -#ifndef __PM_FM_H__ -#define __PM_FM_H__ +#ifndef __PM_FM_H__ +#define __PM_FM_H__ #include "picointernal.h" @@ -50,12 +50,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Absolute limits (from QData / QMView source) // -#define MAX_FM_TRIANGLES 2048 -#define MAX_FM_VERTS 2048 -#define MAX_FM_FRAMES 2048 -#define MAX_FM_SKINS 64 -#define MAX_FM_SKINNAME 64 -#define MAX_FM_MESH_NODES 16 +#define MAX_FM_TRIANGLES 2048 +#define MAX_FM_VERTS 2048 +#define MAX_FM_FRAMES 2048 +#define MAX_FM_SKINS 64 +#define MAX_FM_SKINNAME 64 +#define MAX_FM_MESH_NODES 16 #define DTRIVERTX_V0 0 #define DTRIVERTX_V1 1 @@ -74,7 +74,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SCALE_ADJUST_FACTOR 0.96 #define INFO_HEIGHT 5 -#define INFO_Y (SKINPAGE_HEIGHT-INFO_HEIGHT) +#define INFO_Y ( SKINPAGE_HEIGHT - INFO_HEIGHT ) #ifndef byte #define byte unsigned char @@ -84,45 +84,45 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Generic header on every chunk // -#define FM_MAXCHUNKIDENT 32L +#define FM_MAXCHUNKIDENT 32L typedef struct { - char ident[FM_MAXCHUNKIDENT]; - unsigned int version; - unsigned int size; + char ident[FM_MAXCHUNKIDENT]; + unsigned int version; + unsigned int size; } fm_chunk_header_t; // // The format of the "header" chunk // -#define FM_HEADERCHUNKNAME "header" -#define FM_HEADERCHUNKVER 2 -#define FM_HEADERCHUNKSIZE 40 +#define FM_HEADERCHUNKNAME "header" +#define FM_HEADERCHUNKVER 2 +#define FM_HEADERCHUNKSIZE 40 typedef struct { - int skinWidth; // in pixels - int skinHeight; // in pixels - int frameSize; // size of each frame (in bytes) - int numSkins; // number of skins - int numXYZ; // number of unique vertices in 3D space - int numST; // number of unique vertices in texture space - int numTris; // number of unique triangles - int numGLCmds; // # 32-bit elements in strip/fan command list - int numFrames; // number of animation frames - int numMeshNodes; // number of mesh nodes + int skinWidth; // in pixels + int skinHeight; // in pixels + int frameSize; // size of each frame (in bytes) + int numSkins; // number of skins + int numXYZ; // number of unique vertices in 3D space + int numST; // number of unique vertices in texture space + int numTris; // number of unique triangles + int numGLCmds; // # 32-bit elements in strip/fan command list + int numFrames; // number of animation frames + int numMeshNodes; // number of mesh nodes } fm_header_t; // // The format of an entry in the "skin" chunk. // The number of entries is given in the fmheader chunk // -#define FM_SKINCHUNKNAME "skin" -#define FM_SKINCHUNKVER 1 -#define FM_MAXPATHLENGTH 64L -#define FM_SKINPATHSIZE (FM_MAXPATHLENGTH) +#define FM_SKINCHUNKNAME "skin" +#define FM_SKINCHUNKVER 1 +#define FM_MAXPATHLENGTH 64L +#define FM_SKINPATHSIZE ( FM_MAXPATHLENGTH ) typedef struct { - char path[FM_SKINPATHSIZE]; // path, relative to 'base' + char path[FM_SKINPATHSIZE]; // path, relative to 'base' } fm_skinpath_t; // @@ -130,28 +130,28 @@ typedef struct // of unique skin texture (u, v) coordinates to be mapped // to verteces of the model // -#define FM_STCOORDCHUNKNAME "st coord" -#define FM_STCOORDCHUNKVER 1 -#define FM_STCOORDUVSIZE (2L + 2L) +#define FM_STCOORDCHUNKNAME "st coord" +#define FM_STCOORDCHUNKVER 1 +#define FM_STCOORDUVSIZE ( 2L + 2L ) typedef struct { - short s; - short t; + short s; + short t; } fm_st_t; // // The format of the "tris" chunk. This is a list of vertex indeces // in 3D space, and the corresponding vertex indeces in texture space. // -#define FM_TRISCHUNKNAME "tris" -#define FM_TRISCHUNKVER 1 -#define FM_TRISINFOSIZE (2L*3 + 2L*3) +#define FM_TRISCHUNKNAME "tris" +#define FM_TRISCHUNKVER 1 +#define FM_TRISINFOSIZE ( 2L * 3 + 2L * 3 ) typedef struct { - short index_xyz[3]; - short index_st[3]; + short index_xyz[3]; + short index_st[3]; } fm_xyz_st_t; @@ -160,208 +160,208 @@ typedef struct // frames, each specifying the coordinates and "light normal" index // of every vertex of the model in 3D space. // -#define FM_FRAMESCHUNKNAME "frames" -#define FM_FRAMESCHUNKVER 1 +#define FM_FRAMESCHUNKNAME "frames" +#define FM_FRAMESCHUNKVER 1 -#define FM_NUMVERTEXNORMALS 162 +#define FM_NUMVERTEXNORMALS 162 // Frame info typedef struct { - byte v[3]; // scaled by header info - byte lightnormalindex; // index in canned table of closest vertex normal + byte v[3]; // scaled by header info + byte lightnormalindex; // index in canned table of closest vertex normal } fm_vert_normal_t; typedef struct { - float scale[3]; // multiply byte verts by this - float translate[3]; // then add this - char name[16]; // frame name + float scale[3]; // multiply byte verts by this + float translate[3]; // then add this + char name[16]; // frame name } fm_framehdr_t; typedef struct { - fm_framehdr_t header; // One header per frame - fm_vert_normal_t verts[1]; // variable number of these + fm_framehdr_t header; // One header per frame + fm_vert_normal_t verts[1]; // variable number of these } fm_frame_t; typedef struct { - fm_chunk_header_t *fm_header_hdr; - fm_header_t *fm_header; - fm_chunk_header_t *fm_skin_hdr; - fm_skinpath_t *fm_skin; - fm_chunk_header_t *fm_st_hdr; - fm_st_t *fm_st; - fm_chunk_header_t *fm_tri_hdr; - fm_xyz_st_t *fm_tri; - fm_chunk_header_t *fm_frame_hdr; - fm_frame_t *fm_frame; + fm_chunk_header_t *fm_header_hdr; + fm_header_t *fm_header; + fm_chunk_header_t *fm_skin_hdr; + fm_skinpath_t *fm_skin; + fm_chunk_header_t *fm_st_hdr; + fm_st_t *fm_st; + fm_chunk_header_t *fm_tri_hdr; + fm_xyz_st_t *fm_tri; + fm_chunk_header_t *fm_frame_hdr; + fm_frame_t *fm_frame; } fm_t; -float fm_normals[FM_NUMVERTEXNORMALS][3] = { - {-0.525731f, 0.000000f, 0.850651f}, - {-0.442863f, 0.238856f, 0.864188f}, - {-0.295242f, 0.000000f, 0.955423f}, - {-0.309017f, 0.500000f, 0.809017f}, - {-0.162460f, 0.262866f, 0.951056f}, - {0.000000f, 0.000000f, 1.000000f}, - {0.000000f, 0.850651f, 0.525731f}, - {-0.147621f, 0.716567f, 0.681718f}, - {0.147621f, 0.716567f, 0.681718f}, - {0.000000f, 0.525731f, 0.850651f}, - {0.309017f, 0.500000f, 0.809017f}, - {0.525731f, 0.000000f, 0.850651f}, - {0.295242f, 0.000000f, 0.955423f}, - {0.442863f, 0.238856f, 0.864188f}, - {0.162460f, 0.262866f, 0.951056f}, - {-0.681718f, 0.147621f, 0.716567f}, - {-0.809017f, 0.309017f, 0.500000f}, - {-0.587785f, 0.425325f, 0.688191f}, - {-0.850651f, 0.525731f, 0.000000f}, - {-0.864188f, 0.442863f, 0.238856f}, - {-0.716567f, 0.681718f, 0.147621f}, - {-0.688191f, 0.587785f, 0.425325f}, - {-0.500000f, 0.809017f, 0.309017f}, - {-0.238856f, 0.864188f, 0.442863f}, - {-0.425325f, 0.688191f, 0.587785f}, - {-0.716567f, 0.681718f, -0.147621f}, - {-0.500000f, 0.809017f, -0.309017f}, - {-0.525731f, 0.850651f, 0.000000f}, - {0.000000f, 0.850651f, -0.525731f}, - {-0.238856f, 0.864188f, -0.442863f}, - {0.000000f, 0.955423f, -0.295242f}, - {-0.262866f, 0.951056f, -0.162460f}, - {0.000000f, 1.000000f, 0.000000f}, - {0.000000f, 0.955423f, 0.295242f}, - {-0.262866f, 0.951056f, 0.162460f}, - {0.238856f, 0.864188f, 0.442863f}, - {0.262866f, 0.951056f, 0.162460f}, - {0.500000f, 0.809017f, 0.309017f}, - {0.238856f, 0.864188f, -0.442863f}, - {0.262866f, 0.951056f, -0.162460f}, - {0.500000f, 0.809017f, -0.309017f}, - {0.850651f, 0.525731f, 0.000000f}, - {0.716567f, 0.681718f, 0.147621f}, - {0.716567f, 0.681718f, -0.147621f}, - {0.525731f, 0.850651f, 0.000000f}, - {0.425325f, 0.688191f, 0.587785f}, - {0.864188f, 0.442863f, 0.238856f}, - {0.688191f, 0.587785f, 0.425325f}, - {0.809017f, 0.309017f, 0.500000f}, - {0.681718f, 0.147621f, 0.716567f}, - {0.587785f, 0.425325f, 0.688191f}, - {0.955423f, 0.295242f, 0.000000f}, - {1.000000f, 0.000000f, 0.000000f}, - {0.951056f, 0.162460f, 0.262866f}, - {0.850651f, -0.525731f, 0.000000f}, - {0.955423f, -0.295242f, 0.000000f}, - {0.864188f, -0.442863f, 0.238856f}, - {0.951056f, -0.162460f, 0.262866f}, - {0.809017f, -0.309017f, 0.500000f}, - {0.681718f, -0.147621f, 0.716567f}, - {0.850651f, 0.000000f, 0.525731f}, - {0.864188f, 0.442863f, -0.238856f}, - {0.809017f, 0.309017f, -0.500000f}, - {0.951056f, 0.162460f, -0.262866f}, - {0.525731f, 0.000000f, -0.850651f}, - {0.681718f, 0.147621f, -0.716567f}, - {0.681718f, -0.147621f, -0.716567f}, - {0.850651f, 0.000000f, -0.525731f}, - {0.809017f, -0.309017f, -0.500000f}, - {0.864188f, -0.442863f, -0.238856f}, - {0.951056f, -0.162460f, -0.262866f}, - {0.147621f, 0.716567f, -0.681718f}, - {0.309017f, 0.500000f, -0.809017f}, - {0.425325f, 0.688191f, -0.587785f}, - {0.442863f, 0.238856f, -0.864188f}, - {0.587785f, 0.425325f, -0.688191f}, - {0.688191f, 0.587785f, -0.425325f}, - {-0.147621f, 0.716567f, -0.681718f}, - {-0.309017f, 0.500000f, -0.809017f}, - {0.000000f, 0.525731f, -0.850651f}, - {-0.525731f, 0.000000f, -0.850651f}, - {-0.442863f, 0.238856f, -0.864188f}, - {-0.295242f, 0.000000f, -0.955423f}, - {-0.162460f, 0.262866f, -0.951056f}, - {0.000000f, 0.000000f, -1.000000f}, - {0.295242f, 0.000000f, -0.955423f}, - {0.162460f, 0.262866f, -0.951056f}, - {-0.442863f, -0.238856f, -0.864188f}, - {-0.309017f, -0.500000f, -0.809017f}, - {-0.162460f, -0.262866f, -0.951056f}, - {0.000000f, -0.850651f, -0.525731f}, - {-0.147621f, -0.716567f, -0.681718f}, - {0.147621f, -0.716567f, -0.681718f}, - {0.000000f, -0.525731f, -0.850651f}, - {0.309017f, -0.500000f, -0.809017f}, - {0.442863f, -0.238856f, -0.864188f}, - {0.162460f, -0.262866f, -0.951056f}, - {0.238856f, -0.864188f, -0.442863f}, - {0.500000f, -0.809017f, -0.309017f}, - {0.425325f, -0.688191f, -0.587785f}, - {0.716567f, -0.681718f, -0.147621f}, - {0.688191f, -0.587785f, -0.425325f}, - {0.587785f, -0.425325f, -0.688191f}, - {0.000000f, -0.955423f, -0.295242f}, - {0.000000f, -1.000000f, 0.000000f}, - {0.262866f, -0.951056f, -0.162460f}, - {0.000000f, -0.850651f, 0.525731f}, - {0.000000f, -0.955423f, 0.295242f}, - {0.238856f, -0.864188f, 0.442863f}, - {0.262866f, -0.951056f, 0.162460f}, - {0.500000f, -0.809017f, 0.309017f}, - {0.716567f, -0.681718f, 0.147621f}, - {0.525731f, -0.850651f, 0.000000f}, - {-0.238856f, -0.864188f, -0.442863f}, - {-0.500000f, -0.809017f, -0.309017f}, - {-0.262866f, -0.951056f, -0.162460f}, - {-0.850651f, -0.525731f, 0.000000f}, - {-0.716567f, -0.681718f, -0.147621f}, - {-0.716567f, -0.681718f, 0.147621f}, - {-0.525731f, -0.850651f, 0.000000f}, - {-0.500000f, -0.809017f, 0.309017f}, - {-0.238856f, -0.864188f, 0.442863f}, - {-0.262866f, -0.951056f, 0.162460f}, - {-0.864188f, -0.442863f, 0.238856f}, - {-0.809017f, -0.309017f, 0.500000f}, - {-0.688191f, -0.587785f, 0.425325f}, - {-0.681718f, -0.147621f, 0.716567f}, - {-0.442863f, -0.238856f, 0.864188f}, - {-0.587785f, -0.425325f, 0.688191f}, - {-0.309017f, -0.500000f, 0.809017f}, - {-0.147621f, -0.716567f, 0.681718f}, - {-0.425325f, -0.688191f, 0.587785f}, - {-0.162460f, -0.262866f, 0.951056f}, - {0.442863f, -0.238856f, 0.864188f}, - {0.162460f, -0.262866f, 0.951056f}, - {0.309017f, -0.500000f, 0.809017f}, - {0.147621f, -0.716567f, 0.681718f}, - {0.000000f, -0.525731f, 0.850651f}, - {0.425325f, -0.688191f, 0.587785f}, - {0.587785f, -0.425325f, 0.688191f}, - {0.688191f, -0.587785f, 0.425325f}, - {-0.955423f, 0.295242f, 0.000000f}, - {-0.951056f, 0.162460f, 0.262866f}, - {-1.000000f, 0.000000f, 0.000000f}, - {-0.850651f, 0.000000f, 0.525731f}, - {-0.955423f, -0.295242f, 0.000000f}, - {-0.951056f, -0.162460f, 0.262866f}, - {-0.864188f, 0.442863f, -0.238856f}, - {-0.951056f, 0.162460f, -0.262866f}, - {-0.809017f, 0.309017f, -0.500000f}, - {-0.864188f, -0.442863f, -0.238856f}, - {-0.951056f, -0.162460f, -0.262866f}, - {-0.809017f, -0.309017f, -0.500000f}, - {-0.681718f, 0.147621f, -0.716567f}, - {-0.681718f, -0.147621f, -0.716567f}, - {-0.850651f, 0.000000f, -0.525731f}, - {-0.688191f, 0.587785f, -0.425325f}, - {-0.587785f, 0.425325f, -0.688191f}, - {-0.425325f, 0.688191f, -0.587785f}, - {-0.425325f, -0.688191f, -0.587785f}, - {-0.587785f, -0.425325f, -0.688191f}, - {-0.688191f, -0.587785f, -0.425325f}, +float fm_normals[FM_NUMVERTEXNORMALS][3] = { + {-0.525731f, 0.000000f, 0.850651f}, + {-0.442863f, 0.238856f, 0.864188f}, + {-0.295242f, 0.000000f, 0.955423f}, + {-0.309017f, 0.500000f, 0.809017f}, + {-0.162460f, 0.262866f, 0.951056f}, + {0.000000f, 0.000000f, 1.000000f}, + {0.000000f, 0.850651f, 0.525731f}, + {-0.147621f, 0.716567f, 0.681718f}, + {0.147621f, 0.716567f, 0.681718f}, + {0.000000f, 0.525731f, 0.850651f}, + {0.309017f, 0.500000f, 0.809017f}, + {0.525731f, 0.000000f, 0.850651f}, + {0.295242f, 0.000000f, 0.955423f}, + {0.442863f, 0.238856f, 0.864188f}, + {0.162460f, 0.262866f, 0.951056f}, + {-0.681718f, 0.147621f, 0.716567f}, + {-0.809017f, 0.309017f, 0.500000f}, + {-0.587785f, 0.425325f, 0.688191f}, + {-0.850651f, 0.525731f, 0.000000f}, + {-0.864188f, 0.442863f, 0.238856f}, + {-0.716567f, 0.681718f, 0.147621f}, + {-0.688191f, 0.587785f, 0.425325f}, + {-0.500000f, 0.809017f, 0.309017f}, + {-0.238856f, 0.864188f, 0.442863f}, + {-0.425325f, 0.688191f, 0.587785f}, + {-0.716567f, 0.681718f, -0.147621f}, + {-0.500000f, 0.809017f, -0.309017f}, + {-0.525731f, 0.850651f, 0.000000f}, + {0.000000f, 0.850651f, -0.525731f}, + {-0.238856f, 0.864188f, -0.442863f}, + {0.000000f, 0.955423f, -0.295242f}, + {-0.262866f, 0.951056f, -0.162460f}, + {0.000000f, 1.000000f, 0.000000f}, + {0.000000f, 0.955423f, 0.295242f}, + {-0.262866f, 0.951056f, 0.162460f}, + {0.238856f, 0.864188f, 0.442863f}, + {0.262866f, 0.951056f, 0.162460f}, + {0.500000f, 0.809017f, 0.309017f}, + {0.238856f, 0.864188f, -0.442863f}, + {0.262866f, 0.951056f, -0.162460f}, + {0.500000f, 0.809017f, -0.309017f}, + {0.850651f, 0.525731f, 0.000000f}, + {0.716567f, 0.681718f, 0.147621f}, + {0.716567f, 0.681718f, -0.147621f}, + {0.525731f, 0.850651f, 0.000000f}, + {0.425325f, 0.688191f, 0.587785f}, + {0.864188f, 0.442863f, 0.238856f}, + {0.688191f, 0.587785f, 0.425325f}, + {0.809017f, 0.309017f, 0.500000f}, + {0.681718f, 0.147621f, 0.716567f}, + {0.587785f, 0.425325f, 0.688191f}, + {0.955423f, 0.295242f, 0.000000f}, + {1.000000f, 0.000000f, 0.000000f}, + {0.951056f, 0.162460f, 0.262866f}, + {0.850651f, -0.525731f, 0.000000f}, + {0.955423f, -0.295242f, 0.000000f}, + {0.864188f, -0.442863f, 0.238856f}, + {0.951056f, -0.162460f, 0.262866f}, + {0.809017f, -0.309017f, 0.500000f}, + {0.681718f, -0.147621f, 0.716567f}, + {0.850651f, 0.000000f, 0.525731f}, + {0.864188f, 0.442863f, -0.238856f}, + {0.809017f, 0.309017f, -0.500000f}, + {0.951056f, 0.162460f, -0.262866f}, + {0.525731f, 0.000000f, -0.850651f}, + {0.681718f, 0.147621f, -0.716567f}, + {0.681718f, -0.147621f, -0.716567f}, + {0.850651f, 0.000000f, -0.525731f}, + {0.809017f, -0.309017f, -0.500000f}, + {0.864188f, -0.442863f, -0.238856f}, + {0.951056f, -0.162460f, -0.262866f}, + {0.147621f, 0.716567f, -0.681718f}, + {0.309017f, 0.500000f, -0.809017f}, + {0.425325f, 0.688191f, -0.587785f}, + {0.442863f, 0.238856f, -0.864188f}, + {0.587785f, 0.425325f, -0.688191f}, + {0.688191f, 0.587785f, -0.425325f}, + {-0.147621f, 0.716567f, -0.681718f}, + {-0.309017f, 0.500000f, -0.809017f}, + {0.000000f, 0.525731f, -0.850651f}, + {-0.525731f, 0.000000f, -0.850651f}, + {-0.442863f, 0.238856f, -0.864188f}, + {-0.295242f, 0.000000f, -0.955423f}, + {-0.162460f, 0.262866f, -0.951056f}, + {0.000000f, 0.000000f, -1.000000f}, + {0.295242f, 0.000000f, -0.955423f}, + {0.162460f, 0.262866f, -0.951056f}, + {-0.442863f, -0.238856f, -0.864188f}, + {-0.309017f, -0.500000f, -0.809017f}, + {-0.162460f, -0.262866f, -0.951056f}, + {0.000000f, -0.850651f, -0.525731f}, + {-0.147621f, -0.716567f, -0.681718f}, + {0.147621f, -0.716567f, -0.681718f}, + {0.000000f, -0.525731f, -0.850651f}, + {0.309017f, -0.500000f, -0.809017f}, + {0.442863f, -0.238856f, -0.864188f}, + {0.162460f, -0.262866f, -0.951056f}, + {0.238856f, -0.864188f, -0.442863f}, + {0.500000f, -0.809017f, -0.309017f}, + {0.425325f, -0.688191f, -0.587785f}, + {0.716567f, -0.681718f, -0.147621f}, + {0.688191f, -0.587785f, -0.425325f}, + {0.587785f, -0.425325f, -0.688191f}, + {0.000000f, -0.955423f, -0.295242f}, + {0.000000f, -1.000000f, 0.000000f}, + {0.262866f, -0.951056f, -0.162460f}, + {0.000000f, -0.850651f, 0.525731f}, + {0.000000f, -0.955423f, 0.295242f}, + {0.238856f, -0.864188f, 0.442863f}, + {0.262866f, -0.951056f, 0.162460f}, + {0.500000f, -0.809017f, 0.309017f}, + {0.716567f, -0.681718f, 0.147621f}, + {0.525731f, -0.850651f, 0.000000f}, + {-0.238856f, -0.864188f, -0.442863f}, + {-0.500000f, -0.809017f, -0.309017f}, + {-0.262866f, -0.951056f, -0.162460f}, + {-0.850651f, -0.525731f, 0.000000f}, + {-0.716567f, -0.681718f, -0.147621f}, + {-0.716567f, -0.681718f, 0.147621f}, + {-0.525731f, -0.850651f, 0.000000f}, + {-0.500000f, -0.809017f, 0.309017f}, + {-0.238856f, -0.864188f, 0.442863f}, + {-0.262866f, -0.951056f, 0.162460f}, + {-0.864188f, -0.442863f, 0.238856f}, + {-0.809017f, -0.309017f, 0.500000f}, + {-0.688191f, -0.587785f, 0.425325f}, + {-0.681718f, -0.147621f, 0.716567f}, + {-0.442863f, -0.238856f, 0.864188f}, + {-0.587785f, -0.425325f, 0.688191f}, + {-0.309017f, -0.500000f, 0.809017f}, + {-0.147621f, -0.716567f, 0.681718f}, + {-0.425325f, -0.688191f, 0.587785f}, + {-0.162460f, -0.262866f, 0.951056f}, + {0.442863f, -0.238856f, 0.864188f}, + {0.162460f, -0.262866f, 0.951056f}, + {0.309017f, -0.500000f, 0.809017f}, + {0.147621f, -0.716567f, 0.681718f}, + {0.000000f, -0.525731f, 0.850651f}, + {0.425325f, -0.688191f, 0.587785f}, + {0.587785f, -0.425325f, 0.688191f}, + {0.688191f, -0.587785f, 0.425325f}, + {-0.955423f, 0.295242f, 0.000000f}, + {-0.951056f, 0.162460f, 0.262866f}, + {-1.000000f, 0.000000f, 0.000000f}, + {-0.850651f, 0.000000f, 0.525731f}, + {-0.955423f, -0.295242f, 0.000000f}, + {-0.951056f, -0.162460f, 0.262866f}, + {-0.864188f, 0.442863f, -0.238856f}, + {-0.951056f, 0.162460f, -0.262866f}, + {-0.809017f, 0.309017f, -0.500000f}, + {-0.864188f, -0.442863f, -0.238856f}, + {-0.951056f, -0.162460f, -0.262866f}, + {-0.809017f, -0.309017f, -0.500000f}, + {-0.681718f, 0.147621f, -0.716567f}, + {-0.681718f, -0.147621f, -0.716567f}, + {-0.850651f, 0.000000f, -0.525731f}, + {-0.688191f, 0.587785f, -0.425325f}, + {-0.587785f, 0.425325f, -0.688191f}, + {-0.425325f, 0.688191f, -0.587785f}, + {-0.425325f, -0.688191f, -0.587785f}, + {-0.587785f, -0.425325f, -0.688191f}, + {-0.688191f, -0.587785f, -0.425325f}, }; #endif diff --git a/libs/picomodel/pm_lwo.c b/libs/picomodel/pm_lwo.c index d7b3bc8a..f1d82dd9 100644 --- a/libs/picomodel/pm_lwo.c +++ b/libs/picomodel/pm_lwo.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ /* marker */ #define PM_LWO_C @@ -47,32 +47,29 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #endif /* helper functions */ -static const char *lwo_lwIDToStr( unsigned int lwID ) -{ +static const char *lwo_lwIDToStr( unsigned int lwID ){ static char lwIDStr[5]; - if (!lwID) - { + if ( !lwID ) { return "n/a"; } - lwIDStr[ 0 ] = (char)((lwID) >> 24); - lwIDStr[ 1 ] = (char)((lwID) >> 16); - lwIDStr[ 2 ] = (char)((lwID) >> 8); - lwIDStr[ 3 ] = (char)((lwID)); + lwIDStr[ 0 ] = (char)( ( lwID ) >> 24 ); + lwIDStr[ 1 ] = (char)( ( lwID ) >> 16 ); + lwIDStr[ 2 ] = (char)( ( lwID ) >> 8 ); + lwIDStr[ 3 ] = (char)( ( lwID ) ); lwIDStr[ 4 ] = '\0'; return lwIDStr; } /* -_lwo_canload() -validates a LightWave Object model file. btw, i use the -preceding underscore cause it's a static func referenced -by one structure only. -*/ -static int _lwo_canload( PM_PARAMS_CANLOAD ) -{ + _lwo_canload() + validates a LightWave Object model file. btw, i use the + preceding underscore cause it's a static func referenced + by one structure only. + */ +static int _lwo_canload( PM_PARAMS_CANLOAD ){ picoMemStream_t *s; unsigned int failID = 0; int failpos = -1; @@ -80,8 +77,7 @@ static int _lwo_canload( PM_PARAMS_CANLOAD ) /* create a new pico memorystream */ s = _pico_new_memstream( (picoByte_t *)buffer, bufSize ); - if (s == NULL) - { + if ( s == NULL ) { return PICO_PMV_ERROR_MEMORY; } @@ -93,36 +89,35 @@ static int _lwo_canload( PM_PARAMS_CANLOAD ) } /* -_lwo_load() -loads a LightWave Object model file. -*/ -static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) -{ - picoMemStream_t *s; - unsigned int failID = 0; - int failpos = -1; - lwObject *obj; - lwSurface *surface; - lwLayer *layer; - lwPoint *pt; - lwPolygon *pol; - lwPolVert *v; - lwVMapPt *vm; - char name[ 64 ]; - int i, j, k, numverts; - - picoModel_t *picoModel; - picoSurface_t *picoSurface; - picoShader_t *picoShader; - picoVec3_t xyz, normal; - picoVec2_t st; - picoColor_t color; - - int defaultSTAxis[ 2 ]; - picoVec2_t defaultXYZtoSTScale; + _lwo_load() + loads a LightWave Object model file. + */ +static picoModel_t *_lwo_load( PM_PARAMS_LOAD ){ + picoMemStream_t *s; + unsigned int failID = 0; + int failpos = -1; + lwObject *obj; + lwSurface *surface; + lwLayer *layer; + lwPoint *pt; + lwPolygon *pol; + lwPolVert *v; + lwVMapPt *vm; + char name[ 64 ]; + int i, j, k, numverts; + + picoModel_t *picoModel; + picoSurface_t *picoSurface; + picoShader_t *picoShader; + picoVec3_t xyz, normal; + picoVec2_t st; + picoColor_t color; + + int defaultSTAxis[ 2 ]; + picoVec2_t defaultXYZtoSTScale; picoVertexCombinationHash_t **hashTable; - picoVertexCombinationHash_t *vertexCombinationHash; + picoVertexCombinationHash_t *vertexCombinationHash; #ifdef DEBUG_PM_LWO clock_t load_start, load_finish, convert_start, convert_finish; @@ -132,16 +127,14 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) #endif /* do frame check */ - if( frameNum < 0 || frameNum >= 1 ) - { + if ( frameNum < 0 || frameNum >= 1 ) { _pico_printf( PICO_ERROR, "Invalid or out-of-range LWO frame specified" ); return NULL; } /* create a new pico memorystream */ s = _pico_new_memstream( (picoByte_t *)buffer, bufSize ); - if (s == NULL) - { + if ( s == NULL ) { return NULL; } @@ -149,24 +142,23 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) _pico_free_memstream( s ); - if( !obj ) { + if ( !obj ) { _pico_printf( PICO_ERROR, "Couldn't load LWO file, failed on ID '%s', position %d", lwo_lwIDToStr( failID ), failpos ); return NULL; } #ifdef DEBUG_PM_LWO convert_start = load_finish = clock(); - load_elapsed = (double)(load_finish - load_start) / CLOCKS_PER_SEC; + load_elapsed = (double)( load_finish - load_start ) / CLOCKS_PER_SEC; #endif /* ------------------------------------------------- - pico model creation - ------------------------------------------------- */ - + pico model creation + ------------------------------------------------- */ + /* create a new pico model */ picoModel = PicoNewModel(); - if (picoModel == NULL) - { + if ( picoModel == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model" ); return NULL; } @@ -181,8 +173,7 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) layer = &obj->layer[0]; /* warn the user that other layers are discarded */ - if (obj->nlayers > 1) - { + if ( obj->nlayers > 1 ) { _pico_printf( PICO_WARNING, "LWO loader discards any geometry data not in Layer 1 (%d layers found)", obj->nlayers ); } @@ -190,25 +181,23 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) normal[ 0 ] = normal[ 1 ] = normal[ 2 ] = 0.f; /* setup default st map */ - st[ 0 ] = st[ 1 ] = 0.f; /* st[0] holds max, st[1] holds max par one */ + st[ 0 ] = st[ 1 ] = 0.f; /* st[0] holds max, st[1] holds max par one */ defaultSTAxis[ 0 ] = 0; defaultSTAxis[ 1 ] = 1; - for( i = 0; i < 3; i++ ) + for ( i = 0; i < 3; i++ ) { float min = layer->bbox[ i ]; float max = layer->bbox[ i + 3 ]; float size = max - min; - - if (size > st[ 0 ]) - { + + if ( size > st[ 0 ] ) { defaultSTAxis[ 1 ] = defaultSTAxis[ 0 ]; defaultSTAxis[ 0 ] = i; st[ 1 ] = st[ 0 ]; st[ 0 ] = size; } - else if (size > st[ 1 ]) - { + else if ( size > st[ 1 ] ) { defaultSTAxis[ 1 ] = i; st[ 1 ] = size; } @@ -218,12 +207,11 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) /* LWO surfaces become pico surfaces */ surface = obj->surf; - while (surface) + while ( surface ) { /* allocate new pico surface */ picoSurface = PicoNewSurface( picoModel ); - if (picoSurface == NULL) - { + if ( picoSurface == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" ); PicoFreeModel( picoModel ); lwFreeObject( obj ); @@ -238,8 +226,7 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) /* create new pico shader */ picoShader = PicoNewShader( picoModel ); - if (picoShader == NULL) - { + if ( picoShader == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" ); PicoFreeModel( picoModel ); lwFreeObject( obj ); @@ -247,7 +234,7 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) } /* detox and set shader name */ - strncpy( name, surface->name, sizeof(name) ); + strncpy( name, surface->name, sizeof( name ) ); _pico_setfext( name, "" ); _pico_unixify( name ); PicoSetShaderName( picoShader, name ); @@ -260,35 +247,33 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) hashTable = PicoNewVertexCombinationHashTable(); - if (hashTable == NULL) - { + if ( hashTable == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate hash table" ); PicoFreeModel( picoModel ); lwFreeObject( obj ); return NULL; } - for( i = 0, pol = layer->polygon.pol; i < layer->polygon.count; i++, pol++ ) + for ( i = 0, pol = layer->polygon.pol; i < layer->polygon.count; i++, pol++ ) { /* does this polygon belong to this surface? */ - if (pol->surf != surface) + if ( pol->surf != surface ) { continue; + } /* we only support polygons of the FACE type */ - if (pol->type != ID_FACE) - { + if ( pol->type != ID_FACE ) { _pico_printf( PICO_WARNING, "LWO loader discarded a polygon because it's type != FACE (%s)", lwo_lwIDToStr( pol->type ) ); continue; } /* NOTE: LWO has support for non-convex polygons, do we want to store them as well? */ - if (pol->nverts != 3) - { + if ( pol->nverts != 3 ) { _pico_printf( PICO_WARNING, "LWO loader discarded a polygon because it has != 3 verts (%d)", pol->nverts ); continue; } - for( j = 0, v = pol->v; j < 3; j++, v++ ) + for ( j = 0, v = pol->v; j < 3; j++, v++ ) { pt = &layer->point.pt[ v->index ]; @@ -304,64 +289,58 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) st[ 0 ] = xyz[ defaultSTAxis[ 0 ] ] * defaultXYZtoSTScale[ 0 ]; st[ 1 ] = xyz[ defaultSTAxis[ 1 ] ] * defaultXYZtoSTScale[ 1 ]; - color[ 0 ] = (picoByte_t)(surface->color.rgb[ 0 ] * surface->diffuse.val * 0xFF); - color[ 1 ] = (picoByte_t)(surface->color.rgb[ 1 ] * surface->diffuse.val * 0xFF); - color[ 2 ] = (picoByte_t)(surface->color.rgb[ 2 ] * surface->diffuse.val * 0xFF); + color[ 0 ] = (picoByte_t)( surface->color.rgb[ 0 ] * surface->diffuse.val * 0xFF ); + color[ 1 ] = (picoByte_t)( surface->color.rgb[ 1 ] * surface->diffuse.val * 0xFF ); + color[ 2 ] = (picoByte_t)( surface->color.rgb[ 2 ] * surface->diffuse.val * 0xFF ); color[ 3 ] = 0xFF; /* set from points */ - for( k = 0, vm = pt->vm; k < pt->nvmaps; k++, vm++ ) + for ( k = 0, vm = pt->vm; k < pt->nvmaps; k++, vm++ ) { - if (vm->vmap->type == LWID_('T','X','U','V')) - { + if ( vm->vmap->type == LWID_( 'T','X','U','V' ) ) { /* set st coords */ st[ 0 ] = vm->vmap->val[ vm->index ][ 0 ]; st[ 1 ] = 1.f - vm->vmap->val[ vm->index ][ 1 ]; } - else if (vm->vmap->type == LWID_('R','G','B','A')) - { + else if ( vm->vmap->type == LWID_( 'R','G','B','A' ) ) { /* set rgba */ - color[ 0 ] = (picoByte_t)(vm->vmap->val[ vm->index ][ 0 ] * surface->color.rgb[ 0 ] * surface->diffuse.val * 0xFF); - color[ 1 ] = (picoByte_t)(vm->vmap->val[ vm->index ][ 1 ] * surface->color.rgb[ 1 ] * surface->diffuse.val * 0xFF); - color[ 2 ] = (picoByte_t)(vm->vmap->val[ vm->index ][ 2 ] * surface->color.rgb[ 2 ] * surface->diffuse.val * 0xFF); - color[ 3 ] = (picoByte_t)(vm->vmap->val[ vm->index ][ 3 ] * 0xFF); + color[ 0 ] = (picoByte_t)( vm->vmap->val[ vm->index ][ 0 ] * surface->color.rgb[ 0 ] * surface->diffuse.val * 0xFF ); + color[ 1 ] = (picoByte_t)( vm->vmap->val[ vm->index ][ 1 ] * surface->color.rgb[ 1 ] * surface->diffuse.val * 0xFF ); + color[ 2 ] = (picoByte_t)( vm->vmap->val[ vm->index ][ 2 ] * surface->color.rgb[ 2 ] * surface->diffuse.val * 0xFF ); + color[ 3 ] = (picoByte_t)( vm->vmap->val[ vm->index ][ 3 ] * 0xFF ); } } /* override with polygon data */ - for( k = 0, vm = v->vm; k < v->nvmaps; k++, vm++ ) + for ( k = 0, vm = v->vm; k < v->nvmaps; k++, vm++ ) { - if (vm->vmap->type == LWID_('T','X','U','V')) - { + if ( vm->vmap->type == LWID_( 'T','X','U','V' ) ) { /* set st coords */ st[ 0 ] = vm->vmap->val[ vm->index ][ 0 ]; st[ 1 ] = 1.f - vm->vmap->val[ vm->index ][ 1 ]; } - else if (vm->vmap->type == LWID_('R','G','B','A')) - { + else if ( vm->vmap->type == LWID_( 'R','G','B','A' ) ) { /* set rgba */ - color[ 0 ] = (picoByte_t)(vm->vmap->val[ vm->index ][ 0 ] * surface->color.rgb[ 0 ] * surface->diffuse.val * 0xFF); - color[ 1 ] = (picoByte_t)(vm->vmap->val[ vm->index ][ 1 ] * surface->color.rgb[ 1 ] * surface->diffuse.val * 0xFF); - color[ 2 ] = (picoByte_t)(vm->vmap->val[ vm->index ][ 2 ] * surface->color.rgb[ 2 ] * surface->diffuse.val * 0xFF); - color[ 3 ] = (picoByte_t)(vm->vmap->val[ vm->index ][ 3 ] * 0xFF); + color[ 0 ] = (picoByte_t)( vm->vmap->val[ vm->index ][ 0 ] * surface->color.rgb[ 0 ] * surface->diffuse.val * 0xFF ); + color[ 1 ] = (picoByte_t)( vm->vmap->val[ vm->index ][ 1 ] * surface->color.rgb[ 1 ] * surface->diffuse.val * 0xFF ); + color[ 2 ] = (picoByte_t)( vm->vmap->val[ vm->index ][ 2 ] * surface->color.rgb[ 2 ] * surface->diffuse.val * 0xFF ); + color[ 3 ] = (picoByte_t)( vm->vmap->val[ vm->index ][ 3 ] * 0xFF ); } } /* find vertex in this surface and if we can't find it there create it */ vertexCombinationHash = PicoFindVertexCombinationInHashTable( hashTable, xyz, normal, st, color ); - if (vertexCombinationHash) - { + if ( vertexCombinationHash ) { /* found an existing one */ - PicoSetSurfaceIndex( picoSurface, (i * 3 + j ), vertexCombinationHash->index ); + PicoSetSurfaceIndex( picoSurface, ( i * 3 + j ), vertexCombinationHash->index ); } else { /* it is a new one */ vertexCombinationHash = PicoAddVertexCombinationToHashTable( hashTable, xyz, normal, st, color, (picoIndex_t) numverts ); - if (vertexCombinationHash == NULL) - { + if ( vertexCombinationHash == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate hash bucket entry table" ); PicoFreeVertexCombinationHashTable( hashTable ); PicoFreeModel( picoModel ); @@ -382,7 +361,7 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) PicoSetSurfaceST( picoSurface, 0, numverts, st ); /* set index */ - PicoSetSurfaceIndex( picoSurface, (i * 3 + j ), (picoIndex_t) numverts ); + PicoSetSurfaceIndex( picoSurface, ( i * 3 + j ), (picoIndex_t) numverts ); numverts++; } @@ -392,7 +371,7 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) /* free the hashtable */ PicoFreeVertexCombinationHashTable( hashTable ); - /* get next surface */ + /* get next surface */ surface = surface->next; } @@ -404,8 +383,8 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) #ifdef DEBUG_PM_LWO load_finish = clock(); - load_elapsed += (double)(load_finish - load_start) / CLOCKS_PER_SEC; - convert_elapsed = (double)(convert_finish - convert_start) / CLOCKS_PER_SEC; + load_elapsed += (double)( load_finish - load_start ) / CLOCKS_PER_SEC; + convert_elapsed = (double)( convert_finish - convert_start ) / CLOCKS_PER_SEC; _pico_printf( PICO_NORMAL, "Loaded model in in %-.2f second(s) (loading: %-.2fs converting: %-.2fs)\n", load_elapsed + convert_elapsed, load_elapsed, convert_elapsed ); #endif @@ -416,15 +395,15 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD ) /* pico file format module definition */ const picoModule_t picoModuleLWO = { - "1.0", /* module version string */ - "LightWave Object", /* module display name */ - "Arnout van Meer", /* author's name */ - "2003 Arnout van Meer, 2000 Ernie Wright", /* module copyright */ + "1.0", /* module version string */ + "LightWave Object", /* module display name */ + "Arnout van Meer", /* author's name */ + "2003 Arnout van Meer, 2000 Ernie Wright", /* module copyright */ { - "lwo", NULL, NULL, NULL /* default extensions to use */ + "lwo", NULL, NULL, NULL /* default extensions to use */ }, - _lwo_canload, /* validation routine */ - _lwo_load, /* load routine */ - NULL, /* save validation routine */ - NULL /* save routine */ + _lwo_canload, /* validation routine */ + _lwo_load, /* load routine */ + NULL, /* save validation routine */ + NULL /* save routine */ }; diff --git a/libs/picomodel/pm_md2.c b/libs/picomodel/pm_md2.c index b0ff40ca..bb3f6f11 100644 --- a/libs/picomodel/pm_md2.c +++ b/libs/picomodel/pm_md2.c @@ -1,40 +1,40 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ /* -Nurail: Used pm_md3.c (Randy Reddig) as a template. -*/ + Nurail: Used pm_md3.c (Randy Reddig) as a template. + */ /* marker */ @@ -45,16 +45,16 @@ Nurail: Used pm_md3.c (Randy Reddig) as a template. /* md2 model format */ -#define MD2_MAGIC "IDP2" -#define MD2_VERSION 8 +#define MD2_MAGIC "IDP2" +#define MD2_VERSION 8 -#define MD2_NUMVERTEXNORMALS 162 -#define MD2_MAX_SKINNAME 64 -#define MD2_MAX_TRIANGLES 4096 -#define MD2_MAX_VERTS 2048 -#define MD2_MAX_FRAMES 512 -#define MD2_MAX_MD2SKINS 32 -#define MD2_MAX_SKINNAME 64 +#define MD2_NUMVERTEXNORMALS 162 +#define MD2_MAX_SKINNAME 64 +#define MD2_MAX_TRIANGLES 4096 +#define MD2_MAX_VERTS 2048 +#define MD2_MAX_FRAMES 512 +#define MD2_MAX_MD2SKINS 32 +#define MD2_MAX_SKINNAME 64 #ifndef byte #define byte unsigned char @@ -62,43 +62,43 @@ Nurail: Used pm_md3.c (Randy Reddig) as a template. typedef struct index_LUT_s { - short Vert; - short ST; - struct index_LUT_s *next; + short Vert; + short ST; + struct index_LUT_s *next; } index_LUT_t; typedef struct index_DUP_LUT_s { - short ST; - short OldVert; + short ST; + short OldVert; } index_DUP_LUT_t; typedef struct { - short s; - short t; + short s; + short t; } md2St_t; typedef struct { - short index_xyz[3]; - short index_st[3]; + short index_xyz[3]; + short index_st[3]; } md2Triangle_t; typedef struct { - byte v[3]; // scaled byte to fit in frame mins/maxs - byte lightnormalindex; + byte v[3]; // scaled byte to fit in frame mins/maxs + byte lightnormalindex; } md2XyzNormal_t; typedef struct md2Frame_s { - float scale[3]; // multiply byte verts by this - float translate[3]; // then add this - char name[16]; // frame name from grabbing - md2XyzNormal_t verts[1]; // variable sized + float scale[3]; // multiply byte verts by this + float translate[3]; // then add this + char name[16]; // frame name from grabbing + md2XyzNormal_t verts[1]; // variable sized } md2Frame_t; @@ -106,221 +106,223 @@ md2Frame_t; /* md2 model file md2 structure */ typedef struct md2_s { - char magic[ 4 ]; - int version; - - int skinWidth; - int skinHeight; - int frameSize; - - int numSkins; - int numXYZ; - int numST; - int numTris; - int numGLCmds; - int numFrames; - - int ofsSkins; - int ofsST; - int ofsTris; - int ofsFrames; - int ofsGLCmds; - int ofsEnd; + char magic[ 4 ]; + int version; + + int skinWidth; + int skinHeight; + int frameSize; + + int numSkins; + int numXYZ; + int numST; + int numTris; + int numGLCmds; + int numFrames; + + int ofsSkins; + int ofsST; + int ofsTris; + int ofsFrames; + int ofsGLCmds; + int ofsEnd; } md2_t; -float md2_normals[ MD2_NUMVERTEXNORMALS ][ 3 ] = +float md2_normals[ MD2_NUMVERTEXNORMALS ][ 3 ] = { { -0.525731f, 0.000000f, 0.850651f }, - { -0.442863f, 0.238856f, 0.864188f }, - { -0.295242f, 0.000000f, 0.955423f }, - { -0.309017f, 0.500000f, 0.809017f }, - { -0.162460f, 0.262866f, 0.951056f }, + { -0.442863f, 0.238856f, 0.864188f }, + { -0.295242f, 0.000000f, 0.955423f }, + { -0.309017f, 0.500000f, 0.809017f }, + { -0.162460f, 0.262866f, 0.951056f }, { 0.000000f, 0.000000f, 1.000000f }, { 0.000000f, 0.850651f, 0.525731f }, { -0.147621f, 0.716567f, 0.681718f }, - { 0.147621f, 0.716567f, 0.681718f }, - { 0.000000f, 0.525731f, 0.850651f }, - { 0.309017f, 0.500000f, 0.809017f }, - { 0.525731f, 0.000000f, 0.850651f }, - { 0.295242f, 0.000000f, 0.955423f }, - { 0.442863f, 0.238856f, 0.864188f }, - { 0.162460f, 0.262866f, 0.951056f }, - { -0.681718f, 0.147621f, 0.716567f }, - { -0.809017f, 0.309017f, 0.500000f }, - { -0.587785f, 0.425325f, 0.688191f }, - { -0.850651f, 0.525731f, 0.000000f }, - { -0.864188f, 0.442863f, 0.238856f }, - { -0.716567f, 0.681718f, 0.147621f }, - { -0.688191f, 0.587785f, 0.425325f }, - { -0.500000f, 0.809017f, 0.309017f }, - { -0.238856f, 0.864188f, 0.442863f }, - { -0.425325f, 0.688191f, 0.587785f }, - { -0.716567f, 0.681718f, -0.147621f }, - { -0.500000f, 0.809017f, -0.309017f }, - { -0.525731f, 0.850651f, 0.000000f }, - { 0.000000f, 0.850651f, -0.525731f }, - { -0.238856f, 0.864188f, -0.442863f }, - { 0.000000f, 0.955423f, -0.295242f }, - { -0.262866f, 0.951056f, -0.162460f }, - { 0.000000f, 1.000000f, 0.000000f }, - { 0.000000f, 0.955423f, 0.295242f }, - { -0.262866f, 0.951056f, 0.162460f }, - { 0.238856f, 0.864188f, 0.442863f }, - { 0.262866f, 0.951056f, 0.162460f }, - { 0.500000f, 0.809017f, 0.309017f }, - { 0.238856f, 0.864188f, -0.442863f }, - { 0.262866f, 0.951056f, -0.162460f }, - { 0.500000f, 0.809017f, -0.309017f }, - { 0.850651f, 0.525731f, 0.000000f }, - { 0.716567f, 0.681718f, 0.147621f }, - { 0.716567f, 0.681718f, -0.147621f }, - { 0.525731f, 0.850651f, 0.000000f }, - { 0.425325f, 0.688191f, 0.587785f }, - { 0.864188f, 0.442863f, 0.238856f }, - { 0.688191f, 0.587785f, 0.425325f }, - { 0.809017f, 0.309017f, 0.500000f }, - { 0.681718f, 0.147621f, 0.716567f }, - { 0.587785f, 0.425325f, 0.688191f }, - { 0.955423f, 0.295242f, 0.000000f }, - { 1.000000f, 0.000000f, 0.000000f }, - { 0.951056f, 0.162460f, 0.262866f }, - { 0.850651f, -0.525731f, 0.000000f }, - { 0.955423f, -0.295242f, 0.000000f }, - { 0.864188f, -0.442863f, 0.238856f }, - { 0.951056f, -0.162460f, 0.262866f }, - { 0.809017f, -0.309017f, 0.500000f }, - { 0.681718f, -0.147621f, 0.716567f }, - { 0.850651f, 0.000000f, 0.525731f }, - { 0.864188f, 0.442863f, -0.238856f }, - { 0.809017f, 0.309017f, -0.500000f }, - { 0.951056f, 0.162460f, -0.262866f }, - { 0.525731f, 0.000000f, -0.850651f }, - { 0.681718f, 0.147621f, -0.716567f }, - { 0.681718f, -0.147621f, -0.716567f }, - { 0.850651f, 0.000000f, -0.525731f }, - { 0.809017f, -0.309017f, -0.500000f }, - { 0.864188f, -0.442863f, -0.238856f }, - { 0.951056f, -0.162460f, -0.262866f }, - { 0.147621f, 0.716567f, -0.681718f }, - { 0.309017f, 0.500000f, -0.809017f }, - { 0.425325f, 0.688191f, -0.587785f }, - { 0.442863f, 0.238856f, -0.864188f }, - { 0.587785f, 0.425325f, -0.688191f }, - { 0.688191f, 0.587785f, -0.425325f }, - { -0.147621f, 0.716567f, -0.681718f }, - { -0.309017f, 0.500000f, -0.809017f }, - { 0.000000f, 0.525731f, -0.850651f }, - { -0.525731f, 0.000000f, -0.850651f }, - { -0.442863f, 0.238856f, -0.864188f }, - { -0.295242f, 0.000000f, -0.955423f }, - { -0.162460f, 0.262866f, -0.951056f }, - { 0.000000f, 0.000000f, -1.000000f }, - { 0.295242f, 0.000000f, -0.955423f }, - { 0.162460f, 0.262866f, -0.951056f }, - { -0.442863f, -0.238856f, -0.864188f }, - { -0.309017f, -0.500000f, -0.809017f }, - { -0.162460f, -0.262866f, -0.951056f }, - { 0.000000f, -0.850651f, -0.525731f }, - { -0.147621f, -0.716567f, -0.681718f }, - { 0.147621f, -0.716567f, -0.681718f }, - { 0.000000f, -0.525731f, -0.850651f }, - { 0.309017f, -0.500000f, -0.809017f }, - { 0.442863f, -0.238856f, -0.864188f }, - { 0.162460f, -0.262866f, -0.951056f }, - { 0.238856f, -0.864188f, -0.442863f }, - { 0.500000f, -0.809017f, -0.309017f }, - { 0.425325f, -0.688191f, -0.587785f }, - { 0.716567f, -0.681718f, -0.147621f }, - { 0.688191f, -0.587785f, -0.425325f }, - { 0.587785f, -0.425325f, -0.688191f }, - { 0.000000f, -0.955423f, -0.295242f }, - { 0.000000f, -1.000000f, 0.000000f }, - { 0.262866f, -0.951056f, -0.162460f }, - { 0.000000f, -0.850651f, 0.525731f }, - { 0.000000f, -0.955423f, 0.295242f }, - { 0.238856f, -0.864188f, 0.442863f }, - { 0.262866f, -0.951056f, 0.162460f }, - { 0.500000f, -0.809017f, 0.309017f }, - { 0.716567f, -0.681718f, 0.147621f }, - { 0.525731f, -0.850651f, 0.000000f }, - { -0.238856f, -0.864188f, -0.442863f }, - { -0.500000f, -0.809017f, -0.309017f }, - { -0.262866f, -0.951056f, -0.162460f }, - { -0.850651f, -0.525731f, 0.000000f }, - { -0.716567f, -0.681718f, -0.147621f }, - { -0.716567f, -0.681718f, 0.147621f }, - { -0.525731f, -0.850651f, 0.000000f }, - { -0.500000f, -0.809017f, 0.309017f }, - { -0.238856f, -0.864188f, 0.442863f }, - { -0.262866f, -0.951056f, 0.162460f }, - { -0.864188f, -0.442863f, 0.238856f }, - { -0.809017f, -0.309017f, 0.500000f }, - { -0.688191f, -0.587785f, 0.425325f }, - { -0.681718f, -0.147621f, 0.716567f }, - { -0.442863f, -0.238856f, 0.864188f }, - { -0.587785f, -0.425325f, 0.688191f }, - { -0.309017f, -0.500000f, 0.809017f }, - { -0.147621f, -0.716567f, 0.681718f }, - { -0.425325f, -0.688191f, 0.587785f }, - { -0.162460f, -0.262866f, 0.951056f }, - { 0.442863f, -0.238856f, 0.864188f }, - { 0.162460f, -0.262866f, 0.951056f }, - { 0.309017f, -0.500000f, 0.809017f }, - { 0.147621f, -0.716567f, 0.681718f }, - { 0.000000f, -0.525731f, 0.850651f }, - { 0.425325f, -0.688191f, 0.587785f }, - { 0.587785f, -0.425325f, 0.688191f }, - { 0.688191f, -0.587785f, 0.425325f }, - { -0.955423f, 0.295242f, 0.000000f }, - { -0.951056f, 0.162460f, 0.262866f }, - { -1.000000f, 0.000000f, 0.000000f }, - { -0.850651f, 0.000000f, 0.525731f }, - { -0.955423f, -0.295242f, 0.000000f }, - { -0.951056f, -0.162460f, 0.262866f }, - { -0.864188f, 0.442863f, -0.238856f }, - { -0.951056f, 0.162460f, -0.262866f }, - { -0.809017f, 0.309017f, -0.500000f }, + { 0.147621f, 0.716567f, 0.681718f }, + { 0.000000f, 0.525731f, 0.850651f }, + { 0.309017f, 0.500000f, 0.809017f }, + { 0.525731f, 0.000000f, 0.850651f }, + { 0.295242f, 0.000000f, 0.955423f }, + { 0.442863f, 0.238856f, 0.864188f }, + { 0.162460f, 0.262866f, 0.951056f }, + { -0.681718f, 0.147621f, 0.716567f }, + { -0.809017f, 0.309017f, 0.500000f }, + { -0.587785f, 0.425325f, 0.688191f }, + { -0.850651f, 0.525731f, 0.000000f }, + { -0.864188f, 0.442863f, 0.238856f }, + { -0.716567f, 0.681718f, 0.147621f }, + { -0.688191f, 0.587785f, 0.425325f }, + { -0.500000f, 0.809017f, 0.309017f }, + { -0.238856f, 0.864188f, 0.442863f }, + { -0.425325f, 0.688191f, 0.587785f }, + { -0.716567f, 0.681718f, -0.147621f }, + { -0.500000f, 0.809017f, -0.309017f }, + { -0.525731f, 0.850651f, 0.000000f }, + { 0.000000f, 0.850651f, -0.525731f }, + { -0.238856f, 0.864188f, -0.442863f }, + { 0.000000f, 0.955423f, -0.295242f }, + { -0.262866f, 0.951056f, -0.162460f }, + { 0.000000f, 1.000000f, 0.000000f }, + { 0.000000f, 0.955423f, 0.295242f }, + { -0.262866f, 0.951056f, 0.162460f }, + { 0.238856f, 0.864188f, 0.442863f }, + { 0.262866f, 0.951056f, 0.162460f }, + { 0.500000f, 0.809017f, 0.309017f }, + { 0.238856f, 0.864188f, -0.442863f }, + { 0.262866f, 0.951056f, -0.162460f }, + { 0.500000f, 0.809017f, -0.309017f }, + { 0.850651f, 0.525731f, 0.000000f }, + { 0.716567f, 0.681718f, 0.147621f }, + { 0.716567f, 0.681718f, -0.147621f }, + { 0.525731f, 0.850651f, 0.000000f }, + { 0.425325f, 0.688191f, 0.587785f }, + { 0.864188f, 0.442863f, 0.238856f }, + { 0.688191f, 0.587785f, 0.425325f }, + { 0.809017f, 0.309017f, 0.500000f }, + { 0.681718f, 0.147621f, 0.716567f }, + { 0.587785f, 0.425325f, 0.688191f }, + { 0.955423f, 0.295242f, 0.000000f }, + { 1.000000f, 0.000000f, 0.000000f }, + { 0.951056f, 0.162460f, 0.262866f }, + { 0.850651f, -0.525731f, 0.000000f }, + { 0.955423f, -0.295242f, 0.000000f }, + { 0.864188f, -0.442863f, 0.238856f }, + { 0.951056f, -0.162460f, 0.262866f }, + { 0.809017f, -0.309017f, 0.500000f }, + { 0.681718f, -0.147621f, 0.716567f }, + { 0.850651f, 0.000000f, 0.525731f }, + { 0.864188f, 0.442863f, -0.238856f }, + { 0.809017f, 0.309017f, -0.500000f }, + { 0.951056f, 0.162460f, -0.262866f }, + { 0.525731f, 0.000000f, -0.850651f }, + { 0.681718f, 0.147621f, -0.716567f }, + { 0.681718f, -0.147621f, -0.716567f }, + { 0.850651f, 0.000000f, -0.525731f }, + { 0.809017f, -0.309017f, -0.500000f }, + { 0.864188f, -0.442863f, -0.238856f }, + { 0.951056f, -0.162460f, -0.262866f }, + { 0.147621f, 0.716567f, -0.681718f }, + { 0.309017f, 0.500000f, -0.809017f }, + { 0.425325f, 0.688191f, -0.587785f }, + { 0.442863f, 0.238856f, -0.864188f }, + { 0.587785f, 0.425325f, -0.688191f }, + { 0.688191f, 0.587785f, -0.425325f }, + { -0.147621f, 0.716567f, -0.681718f }, + { -0.309017f, 0.500000f, -0.809017f }, + { 0.000000f, 0.525731f, -0.850651f }, + { -0.525731f, 0.000000f, -0.850651f }, + { -0.442863f, 0.238856f, -0.864188f }, + { -0.295242f, 0.000000f, -0.955423f }, + { -0.162460f, 0.262866f, -0.951056f }, + { 0.000000f, 0.000000f, -1.000000f }, + { 0.295242f, 0.000000f, -0.955423f }, + { 0.162460f, 0.262866f, -0.951056f }, + { -0.442863f, -0.238856f, -0.864188f }, + { -0.309017f, -0.500000f, -0.809017f }, + { -0.162460f, -0.262866f, -0.951056f }, + { 0.000000f, -0.850651f, -0.525731f }, + { -0.147621f, -0.716567f, -0.681718f }, + { 0.147621f, -0.716567f, -0.681718f }, + { 0.000000f, -0.525731f, -0.850651f }, + { 0.309017f, -0.500000f, -0.809017f }, + { 0.442863f, -0.238856f, -0.864188f }, + { 0.162460f, -0.262866f, -0.951056f }, + { 0.238856f, -0.864188f, -0.442863f }, + { 0.500000f, -0.809017f, -0.309017f }, + { 0.425325f, -0.688191f, -0.587785f }, + { 0.716567f, -0.681718f, -0.147621f }, + { 0.688191f, -0.587785f, -0.425325f }, + { 0.587785f, -0.425325f, -0.688191f }, + { 0.000000f, -0.955423f, -0.295242f }, + { 0.000000f, -1.000000f, 0.000000f }, + { 0.262866f, -0.951056f, -0.162460f }, + { 0.000000f, -0.850651f, 0.525731f }, + { 0.000000f, -0.955423f, 0.295242f }, + { 0.238856f, -0.864188f, 0.442863f }, + { 0.262866f, -0.951056f, 0.162460f }, + { 0.500000f, -0.809017f, 0.309017f }, + { 0.716567f, -0.681718f, 0.147621f }, + { 0.525731f, -0.850651f, 0.000000f }, + { -0.238856f, -0.864188f, -0.442863f }, + { -0.500000f, -0.809017f, -0.309017f }, + { -0.262866f, -0.951056f, -0.162460f }, + { -0.850651f, -0.525731f, 0.000000f }, + { -0.716567f, -0.681718f, -0.147621f }, + { -0.716567f, -0.681718f, 0.147621f }, + { -0.525731f, -0.850651f, 0.000000f }, + { -0.500000f, -0.809017f, 0.309017f }, + { -0.238856f, -0.864188f, 0.442863f }, + { -0.262866f, -0.951056f, 0.162460f }, + { -0.864188f, -0.442863f, 0.238856f }, + { -0.809017f, -0.309017f, 0.500000f }, + { -0.688191f, -0.587785f, 0.425325f }, + { -0.681718f, -0.147621f, 0.716567f }, + { -0.442863f, -0.238856f, 0.864188f }, + { -0.587785f, -0.425325f, 0.688191f }, + { -0.309017f, -0.500000f, 0.809017f }, + { -0.147621f, -0.716567f, 0.681718f }, + { -0.425325f, -0.688191f, 0.587785f }, + { -0.162460f, -0.262866f, 0.951056f }, + { 0.442863f, -0.238856f, 0.864188f }, + { 0.162460f, -0.262866f, 0.951056f }, + { 0.309017f, -0.500000f, 0.809017f }, + { 0.147621f, -0.716567f, 0.681718f }, + { 0.000000f, -0.525731f, 0.850651f }, + { 0.425325f, -0.688191f, 0.587785f }, + { 0.587785f, -0.425325f, 0.688191f }, + { 0.688191f, -0.587785f, 0.425325f }, + { -0.955423f, 0.295242f, 0.000000f }, + { -0.951056f, 0.162460f, 0.262866f }, + { -1.000000f, 0.000000f, 0.000000f }, + { -0.850651f, 0.000000f, 0.525731f }, + { -0.955423f, -0.295242f, 0.000000f }, + { -0.951056f, -0.162460f, 0.262866f }, + { -0.864188f, 0.442863f, -0.238856f }, + { -0.951056f, 0.162460f, -0.262866f }, + { -0.809017f, 0.309017f, -0.500000f }, { -0.864188f, -0.442863f, -0.238856f }, - { -0.951056f, -0.162460f, -0.262866f }, - { -0.809017f, -0.309017f, -0.500000f }, - { -0.681718f, 0.147621f, -0.716567f }, - { -0.681718f, -0.147621f, -0.716567f }, - { -0.850651f, 0.000000f, -0.525731f }, - { -0.688191f, 0.587785f, -0.425325f }, - { -0.587785f, 0.425325f, -0.688191f }, - { -0.425325f, 0.688191f, -0.587785f }, - { -0.425325f, -0.688191f, -0.587785f }, - { -0.587785f, -0.425325f, -0.688191f }, - { -0.688191f, -0.587785f, -0.425325f }, + { -0.951056f, -0.162460f, -0.262866f }, + { -0.809017f, -0.309017f, -0.500000f }, + { -0.681718f, 0.147621f, -0.716567f }, + { -0.681718f, -0.147621f, -0.716567f }, + { -0.850651f, 0.000000f, -0.525731f }, + { -0.688191f, 0.587785f, -0.425325f }, + { -0.587785f, 0.425325f, -0.688191f }, + { -0.425325f, 0.688191f, -0.587785f }, + { -0.425325f, -0.688191f, -0.587785f }, + { -0.587785f, -0.425325f, -0.688191f }, + { -0.688191f, -0.587785f, -0.425325f }, }; // _md2_canload() -static int _md2_canload( PM_PARAMS_CANLOAD ) -{ - md2_t *md2; +static int _md2_canload( PM_PARAMS_CANLOAD ){ + md2_t *md2; - /* to keep the compiler happy */ + /* to keep the compiler happy */ *fileName = *fileName; /* sanity check */ - if( bufSize < ( sizeof( *md2 ) * 2) ) + if ( bufSize < ( sizeof( *md2 ) * 2 ) ) { return PICO_PMV_ERROR_SIZE; - + } + /* set as md2 */ md2 = (md2_t*) buffer; - + /* check md2 magic */ - if( *((int*) md2->magic) != *((int*) MD2_MAGIC) ) + if ( *( (int*) md2->magic ) != *( (int*) MD2_MAGIC ) ) { return PICO_PMV_ERROR_IDENT; - + } + /* check md2 version */ - if( _pico_little_long( md2->version ) != MD2_VERSION ) + if ( _pico_little_long( md2->version ) != MD2_VERSION ) { return PICO_PMV_ERROR_VERSION; + } - /* file seems to be a valid md2 */ + /* file seems to be a valid md2 */ return PICO_PMV_OK; } @@ -329,46 +331,44 @@ static int _md2_canload( PM_PARAMS_CANLOAD ) // _md2_load() loads a quake2 md2 model file. -static picoModel_t *_md2_load( PM_PARAMS_LOAD ) -{ - int i, j, dups, dup_index; - short tot_numVerts; - index_LUT_t *p_index_LUT, *p_index_LUT2, *p_index_LUT3; - index_DUP_LUT_t *p_index_LUT_DUPS; - md2Triangle_t *p_md2Triangle; - - char path[ MD2_MAX_SKINNAME ]; - char skinname[ MD2_MAX_SKINNAME ]; - md2_t *md2; - md2St_t *texCoord; - md2Frame_t *frame; - md2Triangle_t *triangle; - md2XyzNormal_t *vertex; +static picoModel_t *_md2_load( PM_PARAMS_LOAD ){ + int i, j, dups, dup_index; + short tot_numVerts; + index_LUT_t *p_index_LUT, *p_index_LUT2, *p_index_LUT3; + index_DUP_LUT_t *p_index_LUT_DUPS; + md2Triangle_t *p_md2Triangle; + + char path[ MD2_MAX_SKINNAME ]; + char skinname[ MD2_MAX_SKINNAME ]; + md2_t *md2; + md2St_t *texCoord; + md2Frame_t *frame; + md2Triangle_t *triangle; + md2XyzNormal_t *vertex; picoByte_t *bb; - picoModel_t *picoModel; - picoSurface_t *picoSurface; - picoShader_t *picoShader; - picoVec3_t xyz, normal; - picoVec2_t st; - picoColor_t color; - + picoModel_t *picoModel; + picoSurface_t *picoSurface; + picoShader_t *picoShader; + picoVec3_t xyz, normal; + picoVec2_t st; + picoColor_t color; + // md2 loading - _pico_printf( PICO_NORMAL, "Loading \"%s\"", fileName ); + _pico_printf( PICO_NORMAL, "Loading \"%s\"", fileName ); /* set as md2 */ bb = (picoByte_t*) buffer; - md2 = (md2_t*) buffer; + md2 = (md2_t*) buffer; /* check ident and version */ - if( *((int*) md2->magic) != *((int*) MD2_MAGIC) || _pico_little_long( md2->version ) != MD2_VERSION ) - { + if ( *( (int*) md2->magic ) != *( (int*) MD2_MAGIC ) || _pico_little_long( md2->version ) != MD2_VERSION ) { /* not an md2 file (todo: set error) */ _pico_printf( PICO_ERROR, "%s is not an MD2 File!", fileName ); return NULL; } - + // swap md2 md2->version = _pico_little_long( md2->version ); @@ -391,33 +391,31 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) md2->ofsEnd = _pico_little_long( md2->ofsEnd ); // do frame check - if( md2->numFrames < 1 ) - { + if ( md2->numFrames < 1 ) { _pico_printf( PICO_ERROR, "%s has 0 frames!", fileName ); return NULL; } - - if( frameNum < 0 || frameNum >= md2->numFrames ) - { + + if ( frameNum < 0 || frameNum >= md2->numFrames ) { _pico_printf( PICO_ERROR, "Invalid or out-of-range MD2 frame specified" ); return NULL; } // Setup Frame - frame = (md2Frame_t *) (bb + md2->ofsFrames + (sizeof(md2Frame_t) * frameNum)); + frame = (md2Frame_t *) ( bb + md2->ofsFrames + ( sizeof( md2Frame_t ) * frameNum ) ); // swap frame scale and translation - for( i = 0; i < 3; i++ ) + for ( i = 0; i < 3; i++ ) { frame->scale[ i ] = _pico_little_float( frame->scale[ i ] ); frame->translate[ i ] = _pico_little_float( frame->translate[ i ] ); } // swap triangles - triangle = (md2Triangle_t *) ((picoByte_t *) (bb + md2->ofsTris) ); - for( i = 0; i < md2->numTris; i++, triangle++ ) + triangle = (md2Triangle_t *) ( (picoByte_t *) ( bb + md2->ofsTris ) ); + for ( i = 0; i < md2->numTris; i++, triangle++ ) { - for( j = 0; j < 3; j++ ) + for ( j = 0; j < 3; j++ ) { triangle->index_xyz[ j ] = _pico_little_short( triangle->index_xyz[ j ] ); triangle->index_st[ j ] = _pico_little_short( triangle->index_st[ j ] ); @@ -425,44 +423,44 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) } // swap st coords - texCoord = (md2St_t*) ((picoByte_t *) (bb + md2->ofsST) ); - for( i = 0; i < md2->numST; i++, texCoord++ ) + texCoord = (md2St_t*) ( (picoByte_t *) ( bb + md2->ofsST ) ); + for ( i = 0; i < md2->numST; i++, texCoord++ ) { texCoord->s = _pico_little_short( texCoord->s ); texCoord->t = _pico_little_short( texCoord->t ); } // set Skin Name - strncpy(skinname, (bb + md2->ofsSkins), MD2_MAX_SKINNAME ); + strncpy( skinname, ( bb + md2->ofsSkins ), MD2_MAX_SKINNAME ); // Print out md2 values - _pico_printf(PICO_VERBOSE,"Skins: %d Verts: %d STs: %d Triangles: %d Frames: %d\nSkin Name \"%s\"\n", md2->numSkins, md2->numXYZ, md2->numST, md2->numTris, md2->numFrames, skinname ); + _pico_printf( PICO_VERBOSE,"Skins: %d Verts: %d STs: %d Triangles: %d Frames: %d\nSkin Name \"%s\"\n", md2->numSkins, md2->numXYZ, md2->numST, md2->numTris, md2->numFrames, skinname ); // relative texture path - allows moving of models in game dir structure without changing the skinpath // e.g. used in ufo:ai - if (skinname[0] == '.') { - strncpy(path, fileName, MD2_MAX_SKINNAME); - for (i = MD2_MAX_SKINNAME; i--;) { + if ( skinname[0] == '.' ) { + strncpy( path, fileName, MD2_MAX_SKINNAME ); + for ( i = MD2_MAX_SKINNAME; i--; ) { // skip filename - if (path[i] == '/' || path[i] == '\\') + if ( path[i] == '/' || path[i] == '\\' ) { break; + } path[i] = '\0'; } - strncat(path, &skinname[1], MD2_MAX_SKINNAME); - strncpy(skinname, path, MD2_MAX_SKINNAME); + strncat( path, &skinname[1], MD2_MAX_SKINNAME ); + strncpy( skinname, path, MD2_MAX_SKINNAME ); // Print out md2 values - _pico_printf(PICO_VERBOSE,"Relative skin path converted to: \"%s\" (%s)\n", skinname, fileName ); + _pico_printf( PICO_VERBOSE,"Relative skin path converted to: \"%s\" (%s)\n", skinname, fileName ); } - + // detox Skin name _pico_setfext( skinname, "" ); _pico_unixify( skinname ); /* create new pico model */ picoModel = PicoNewModel(); - if( picoModel == NULL ) - { + if ( picoModel == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model" ); return NULL; } @@ -475,8 +473,7 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) // allocate new pico surface picoSurface = PicoNewSurface( picoModel ); - if( picoSurface == NULL ) - { + if ( picoSurface == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" ); PicoFreeModel( picoModel ); return NULL; @@ -486,8 +483,7 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) PicoSetSurfaceType( picoSurface, PICO_TRIANGLES ); PicoSetSurfaceName( picoSurface, frame->name ); picoShader = PicoNewShader( picoModel ); - if( picoShader == NULL ) - { + if ( picoShader == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" ); PicoFreeModel( picoModel ); return NULL; @@ -499,8 +495,8 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) PicoSetSurfaceShader( picoSurface, picoShader ); // Init LUT for Verts - p_index_LUT = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t) * md2->numXYZ); - for(i=0; inumXYZ; i++) + p_index_LUT = (index_LUT_t *)_pico_alloc( sizeof( index_LUT_t ) * md2->numXYZ ); + for ( i = 0; i < md2->numXYZ; i++ ) { p_index_LUT[i].Vert = -1; p_index_LUT[i].ST = -1; @@ -510,22 +506,25 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) // Fill in Look Up Table, and allocate/fill Linked List from vert array as needed for dup STs per Vert. tot_numVerts = md2->numXYZ; dups = 0; - for(i=0; inumTris; i++) + for ( i = 0; i < md2->numTris; i++ ) { - p_md2Triangle = (md2Triangle_t *) ( bb + md2->ofsTris + (sizeof(md2Triangle_t)*i)); - for(j=0; j<3; j++) + p_md2Triangle = (md2Triangle_t *) ( bb + md2->ofsTris + ( sizeof( md2Triangle_t ) * i ) ); + for ( j = 0; j < 3; j++ ) { - if (p_index_LUT[p_md2Triangle->index_xyz[j]].ST == -1) // No Main Entry + if ( p_index_LUT[p_md2Triangle->index_xyz[j]].ST == -1 ) { // No Main Entry p_index_LUT[p_md2Triangle->index_xyz[j]].ST = p_md2Triangle->index_st[j]; + } - else if (p_md2Triangle->index_st[j] == p_index_LUT[p_md2Triangle->index_xyz[j]].ST ) // Equal to Main Entry + else if ( p_md2Triangle->index_st[j] == p_index_LUT[p_md2Triangle->index_xyz[j]].ST ) { // Equal to Main Entry continue; + } - else if ( (p_index_LUT[p_md2Triangle->index_xyz[j]].next == NULL) ) // Not equal to Main entry, and no LL entry - { // Add first entry of LL from Main - p_index_LUT2 = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t)); - if (p_index_LUT2 == NULL) - _pico_printf( PICO_ERROR," Couldn't allocate memory!\n"); + else if ( ( p_index_LUT[p_md2Triangle->index_xyz[j]].next == NULL ) ) { // Not equal to Main entry, and no LL entry + // Add first entry of LL from Main + p_index_LUT2 = (index_LUT_t *)_pico_alloc( sizeof( index_LUT_t ) ); + if ( p_index_LUT2 == NULL ) { + _pico_printf( PICO_ERROR," Couldn't allocate memory!\n" ); + } p_index_LUT[p_md2Triangle->index_xyz[j]].next = (index_LUT_t *)p_index_LUT2; p_index_LUT2->Vert = dups; p_index_LUT2->ST = p_md2Triangle->index_st[j]; @@ -536,25 +535,24 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) else // Try to find in LL from Main Entry { p_index_LUT3 = p_index_LUT2 = p_index_LUT[p_md2Triangle->index_xyz[j]].next; - while ( (p_index_LUT2 != NULL) && (p_md2Triangle->index_xyz[j] != p_index_LUT2->Vert) ) // Walk down LL + while ( ( p_index_LUT2 != NULL ) && ( p_md2Triangle->index_xyz[j] != p_index_LUT2->Vert ) ) // Walk down LL { p_index_LUT3 = p_index_LUT2; p_index_LUT2 = p_index_LUT2->next; } p_index_LUT2 = p_index_LUT3; - if ( p_md2Triangle->index_st[j] == p_index_LUT2->ST ) // Found it - { + if ( p_md2Triangle->index_st[j] == p_index_LUT2->ST ) { // Found it p_md2Triangle->index_xyz[j] = p_index_LUT2->Vert + md2->numXYZ; // Make change in Tri hunk continue; } - if ( p_index_LUT2->next == NULL) // Didn't find it. Add entry to LL. - { + if ( p_index_LUT2->next == NULL ) { // Didn't find it. Add entry to LL. // Add the Entry - p_index_LUT3 = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t)); - if (p_index_LUT3 == NULL) - _pico_printf( PICO_ERROR," Couldn't allocate memory!\n"); + p_index_LUT3 = (index_LUT_t *)_pico_alloc( sizeof( index_LUT_t ) ); + if ( p_index_LUT3 == NULL ) { + _pico_printf( PICO_ERROR," Couldn't allocate memory!\n" ); + } p_index_LUT2->next = (index_LUT_t *)p_index_LUT3; p_index_LUT3->Vert = p_md2Triangle->index_xyz[j]; p_index_LUT3->ST = p_md2Triangle->index_st[j]; @@ -567,15 +565,16 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) } // malloc and build array for Dup STs - p_index_LUT_DUPS = (index_DUP_LUT_t *)_pico_alloc(sizeof(index_DUP_LUT_t) * dups); - if (p_index_LUT_DUPS == NULL) - _pico_printf( PICO_ERROR," Couldn't allocate memory!\n"); + p_index_LUT_DUPS = (index_DUP_LUT_t *)_pico_alloc( sizeof( index_DUP_LUT_t ) * dups ); + if ( p_index_LUT_DUPS == NULL ) { + _pico_printf( PICO_ERROR," Couldn't allocate memory!\n" ); + } dup_index = 0; - for(i=0; inumXYZ; i++) + for ( i = 0; i < md2->numXYZ; i++ ) { p_index_LUT2 = p_index_LUT[i].next; - while (p_index_LUT2 != NULL) + while ( p_index_LUT2 != NULL ) { p_index_LUT_DUPS[p_index_LUT2->Vert].OldVert = i; p_index_LUT_DUPS[p_index_LUT2->Vert].ST = p_index_LUT2->ST; @@ -585,57 +584,56 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) } // Build Picomodel - triangle = (md2Triangle_t *) ((picoByte_t *) (bb + md2->ofsTris) ); - texCoord = (md2St_t*) ((picoByte_t *) (bb + md2->ofsST) ); - vertex = (md2XyzNormal_t*) ((picoByte_t*) (frame->verts) ); - for( j = 0; j < md2->numTris; j++, triangle++ ) + triangle = (md2Triangle_t *) ( (picoByte_t *) ( bb + md2->ofsTris ) ); + texCoord = (md2St_t*) ( (picoByte_t *) ( bb + md2->ofsST ) ); + vertex = (md2XyzNormal_t*) ( (picoByte_t*) ( frame->verts ) ); + for ( j = 0; j < md2->numTris; j++, triangle++ ) { - PicoSetSurfaceIndex( picoSurface, j*3 , triangle->index_xyz[0] ); - PicoSetSurfaceIndex( picoSurface, j*3+1 , triangle->index_xyz[1] ); - PicoSetSurfaceIndex( picoSurface, j*3+2 , triangle->index_xyz[2] ); + PicoSetSurfaceIndex( picoSurface, j * 3, triangle->index_xyz[0] ); + PicoSetSurfaceIndex( picoSurface, j * 3 + 1, triangle->index_xyz[1] ); + PicoSetSurfaceIndex( picoSurface, j * 3 + 2, triangle->index_xyz[2] ); } - for(i=0; i< md2->numXYZ; i++, vertex++) + for ( i = 0; i < md2->numXYZ; i++, vertex++ ) { /* set vertex origin */ xyz[ 0 ] = vertex->v[0] * frame->scale[0] + frame->translate[0]; xyz[ 1 ] = vertex->v[1] * frame->scale[1] + frame->translate[1]; xyz[ 2 ] = vertex->v[2] * frame->scale[2] + frame->translate[2]; - PicoSetSurfaceXYZ( picoSurface, i , xyz ); + PicoSetSurfaceXYZ( picoSurface, i, xyz ); /* set normal */ normal[ 0 ] = md2_normals[vertex->lightnormalindex][0]; normal[ 1 ] = md2_normals[vertex->lightnormalindex][1]; normal[ 2 ] = md2_normals[vertex->lightnormalindex][2]; - PicoSetSurfaceNormal( picoSurface, i , normal ); + PicoSetSurfaceNormal( picoSurface, i, normal ); /* set st coords */ - st[ 0 ] = ((texCoord[p_index_LUT[i].ST].s) / ((float)md2->skinWidth)); - st[ 1 ] = (texCoord[p_index_LUT[i].ST].t / ((float)md2->skinHeight)); - PicoSetSurfaceST( picoSurface, 0, i , st ); + st[ 0 ] = ( ( texCoord[p_index_LUT[i].ST].s ) / ( (float)md2->skinWidth ) ); + st[ 1 ] = ( texCoord[p_index_LUT[i].ST].t / ( (float)md2->skinHeight ) ); + PicoSetSurfaceST( picoSurface, 0, i, st ); } - if (dups) - { - for(i=0; iverts[j].v[0] * frame->scale[0] + frame->translate[0]; xyz[ 1 ] = frame->verts[j].v[1] * frame->scale[1] + frame->translate[1]; xyz[ 2 ] = frame->verts[j].v[2] * frame->scale[2] + frame->translate[2]; - PicoSetSurfaceXYZ( picoSurface, i + md2->numXYZ , xyz ); + PicoSetSurfaceXYZ( picoSurface, i + md2->numXYZ, xyz ); /* set normal */ normal[ 0 ] = md2_normals[frame->verts[j].lightnormalindex][0]; normal[ 1 ] = md2_normals[frame->verts[j].lightnormalindex][1]; normal[ 2 ] = md2_normals[frame->verts[j].lightnormalindex][2]; - PicoSetSurfaceNormal( picoSurface, i + md2->numXYZ , normal ); + PicoSetSurfaceNormal( picoSurface, i + md2->numXYZ, normal ); /* set st coords */ - st[ 0 ] = ((texCoord[p_index_LUT_DUPS[i].ST].s) / ((float)md2->skinWidth)); - st[ 1 ] = (texCoord[p_index_LUT_DUPS[i].ST].t / ((float)md2->skinHeight)); - PicoSetSurfaceST( picoSurface, 0, i + md2->numXYZ , st ); + st[ 0 ] = ( ( texCoord[p_index_LUT_DUPS[i].ST].s ) / ( (float)md2->skinWidth ) ); + st[ 1 ] = ( texCoord[p_index_LUT_DUPS[i].ST].t / ( (float)md2->skinHeight ) ); + PicoSetSurfaceST( picoSurface, 0, i + md2->numXYZ, st ); } } @@ -643,26 +641,26 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) PicoSetSurfaceColor( picoSurface, 0, 0, color ); // Free up malloc'ed LL entries - for(i=0; inumXYZ; i++) + for ( i = 0; i < md2->numXYZ; i++ ) { - if(p_index_LUT[i].next != NULL) - { + if ( p_index_LUT[i].next != NULL ) { p_index_LUT2 = p_index_LUT[i].next; do { p_index_LUT3 = p_index_LUT2->next; - _pico_free(p_index_LUT2); + _pico_free( p_index_LUT2 ); p_index_LUT2 = p_index_LUT3; dups--; - } while (p_index_LUT2 != NULL); + } while ( p_index_LUT2 != NULL ); } } - if (dups) - _pico_printf(PICO_WARNING, " Not all LL mallocs freed\n"); + if ( dups ) { + _pico_printf( PICO_WARNING, " Not all LL mallocs freed\n" ); + } // Free malloc'ed LUTs - _pico_free(p_index_LUT); - _pico_free(p_index_LUT_DUPS); + _pico_free( p_index_LUT ); + _pico_free( p_index_LUT_DUPS ); /* return the new pico model */ return picoModel; @@ -674,15 +672,15 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD ) /* pico file format module definition */ const picoModule_t picoModuleMD2 = { - "0.875", /* module version string */ - "Quake 2 MD2", /* module display name */ - "Nurail", /* author's name */ - "2003 Nurail", /* module copyright */ + "0.875", /* module version string */ + "Quake 2 MD2", /* module display name */ + "Nurail", /* author's name */ + "2003 Nurail", /* module copyright */ { - "md2", NULL, NULL, NULL /* default extensions to use */ + "md2", NULL, NULL, NULL /* default extensions to use */ }, - _md2_canload, /* validation routine */ - _md2_load, /* load routine */ - NULL, /* save validation routine */ - NULL /* save routine */ + _md2_canload, /* validation routine */ + _md2_load, /* load routine */ + NULL, /* save validation routine */ + NULL /* save routine */ }; diff --git a/libs/picomodel/pm_md3.c b/libs/picomodel/pm_md3.c index 55022b28..94f7a8f4 100644 --- a/libs/picomodel/pm_md3.c +++ b/libs/picomodel/pm_md3.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -45,72 +45,72 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* md3 model format */ -#define MD3_MAGIC "IDP3" -#define MD3_VERSION 15 +#define MD3_MAGIC "IDP3" +#define MD3_VERSION 15 /* md3 vertex scale */ -#define MD3_SCALE (1.0f / 64.0f) +#define MD3_SCALE ( 1.0f / 64.0f ) /* md3 model frame information */ typedef struct md3Frame_s { - float bounds[ 2 ][ 3 ]; - float localOrigin[ 3 ]; - float radius; - char creator[ 16 ]; + float bounds[ 2 ][ 3 ]; + float localOrigin[ 3 ]; + float radius; + char creator[ 16 ]; } md3Frame_t; /* md3 model tag information */ typedef struct md3Tag_s { - char name[ 64 ]; - float origin[ 3 ]; - float axis[ 3 ][ 3 ]; + char name[ 64 ]; + float origin[ 3 ]; + float axis[ 3 ][ 3 ]; } md3Tag_t; /* md3 surface md3 (one object mesh) */ typedef struct md3Surface_s { - char magic[ 4 ]; - char name[ 64 ]; /* polyset name */ - int flags; - int numFrames; /* all model surfaces should have the same */ - int numShaders; /* all model surfaces should have the same */ - int numVerts; - int numTriangles; - int ofsTriangles; - int ofsShaders; /* offset from start of md3Surface_t */ - int ofsSt; /* texture coords are common for all frames */ - int ofsVertexes; /* numVerts * numFrames */ - int ofsEnd; /* next surface follows */ + char magic[ 4 ]; + char name[ 64 ]; /* polyset name */ + int flags; + int numFrames; /* all model surfaces should have the same */ + int numShaders; /* all model surfaces should have the same */ + int numVerts; + int numTriangles; + int ofsTriangles; + int ofsShaders; /* offset from start of md3Surface_t */ + int ofsSt; /* texture coords are common for all frames */ + int ofsVertexes; /* numVerts * numFrames */ + int ofsEnd; /* next surface follows */ } md3Surface_t; typedef struct md3Shader_s { - char name[ 64 ]; - int shaderIndex; /* for ingame use */ + char name[ 64 ]; + int shaderIndex; /* for ingame use */ } md3Shader_t; typedef struct md3Triangle_s { - int indexes[ 3 ]; + int indexes[ 3 ]; } md3Triangle_t; typedef struct md3TexCoord_s { - float st[ 2 ]; + float st[ 2 ]; } md3TexCoord_t; typedef struct md3Vertex_s { - short xyz[ 3 ]; - short normal; + short xyz[ 3 ]; + short normal; } md3Vertex_t; @@ -118,18 +118,18 @@ md3Vertex_t; /* md3 model file md3 structure */ typedef struct md3_s { - char magic[ 4 ]; /* MD3_MAGIC */ - int version; - char name[ 64 ]; /* model name */ - int flags; - int numFrames; - int numTags; - int numSurfaces; - int numSkins; /* number of skins for the mesh */ - int ofsFrames; /* offset for first frame */ - int ofsTags; /* numFrames * numTags */ - int ofsSurfaces; /* first surface, others follow */ - int ofsEnd; /* end of file */ + char magic[ 4 ]; /* MD3_MAGIC */ + int version; + char name[ 64 ]; /* model name */ + int flags; + int numFrames; + int numTags; + int numSurfaces; + int numSkins; /* number of skins for the mesh */ + int ofsFrames; /* offset for first frame */ + int ofsTags; /* numFrames * numTags */ + int ofsSurfaces; /* first surface, others follow */ + int ofsEnd; /* end of file */ } md3_t; @@ -137,35 +137,37 @@ md3_t; /* -_md3_canload() -validates a quake3 arena md3 model file. btw, i use the -preceding underscore cause it's a static func referenced -by one structure only. -*/ + _md3_canload() + validates a quake3 arena md3 model file. btw, i use the + preceding underscore cause it's a static func referenced + by one structure only. + */ + +static int _md3_canload( PM_PARAMS_CANLOAD ){ + md3_t *md3; -static int _md3_canload( PM_PARAMS_CANLOAD ) -{ - md3_t *md3; - /* to keep the compiler happy */ *fileName = *fileName; - + /* sanity check */ - if( bufSize < ( sizeof( *md3 ) * 2) ) + if ( bufSize < ( sizeof( *md3 ) * 2 ) ) { return PICO_PMV_ERROR_SIZE; - + } + /* set as md3 */ - md3 = (md3_t*) buffer; - + md3 = (md3_t*) buffer; + /* check md3 magic */ - if( *((int*) md3->magic) != *((int*) MD3_MAGIC) ) + if ( *( (int*) md3->magic ) != *( (int*) MD3_MAGIC ) ) { return PICO_PMV_ERROR_IDENT; - + } + /* check md3 version */ - if( _pico_little_long( md3->version ) != MD3_VERSION ) + if ( _pico_little_long( md3->version ) != MD3_VERSION ) { return PICO_PMV_ERROR_VERSION; - + } + /* file seems to be a valid md3 */ return PICO_PMV_OK; } @@ -173,47 +175,45 @@ static int _md3_canload( PM_PARAMS_CANLOAD ) /* -_md3_load() -loads a quake3 arena md3 model file. -*/ + _md3_load() + loads a quake3 arena md3 model file. + */ + +static picoModel_t *_md3_load( PM_PARAMS_LOAD ){ + int i, j; + picoByte_t *bb; + md3_t *md3; + md3Surface_t *surface; + md3Shader_t *shader; + md3TexCoord_t *texCoord; + md3Frame_t *frame; + md3Triangle_t *triangle; + md3Vertex_t *vertex; + double lat, lng; + + picoModel_t *picoModel; + picoSurface_t *picoSurface; + picoShader_t *picoShader; + picoVec3_t xyz, normal; + picoVec2_t st; + picoColor_t color; + -static picoModel_t *_md3_load( PM_PARAMS_LOAD ) -{ - int i, j; - picoByte_t *bb; - md3_t *md3; - md3Surface_t *surface; - md3Shader_t *shader; - md3TexCoord_t *texCoord; - md3Frame_t *frame; - md3Triangle_t *triangle; - md3Vertex_t *vertex; - double lat, lng; - - picoModel_t *picoModel; - picoSurface_t *picoSurface; - picoShader_t *picoShader; - picoVec3_t xyz, normal; - picoVec2_t st; - picoColor_t color; - - /* ------------------------------------------------- - md3 loading - ------------------------------------------------- */ + md3 loading + ------------------------------------------------- */ /* set as md3 */ bb = (picoByte_t*) buffer; - md3 = (md3_t*) buffer; - + md3 = (md3_t*) buffer; + /* check ident and version */ - if( *((int*) md3->magic) != *((int*) MD3_MAGIC) || _pico_little_long( md3->version ) != MD3_VERSION ) - { + if ( *( (int*) md3->magic ) != *( (int*) MD3_MAGIC ) || _pico_little_long( md3->version ) != MD3_VERSION ) { /* not an md3 file (todo: set error) */ return NULL; } - + /* swap md3; sea: swaps fixed */ md3->version = _pico_little_long( md3->version ); md3->numFrames = _pico_little_long( md3->numFrames ); @@ -224,36 +224,34 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD ) md3->ofsTags = _pico_little_long( md3->ofsTags ); md3->ofsSurfaces = _pico_little_long( md3->ofsSurfaces ); md3->ofsEnd = _pico_little_long( md3->ofsEnd ); - + /* do frame check */ - if( md3->numFrames < 1 ) - { + if ( md3->numFrames < 1 ) { _pico_printf( PICO_ERROR, "MD3 with 0 frames" ); return NULL; } - - if( frameNum < 0 || frameNum >= md3->numFrames ) - { + + if ( frameNum < 0 || frameNum >= md3->numFrames ) { _pico_printf( PICO_ERROR, "Invalid or out-of-range MD3 frame specified" ); return NULL; } - + /* swap frames */ - frame = (md3Frame_t*) (bb + md3->ofsFrames ); - for( i = 0; i < md3->numFrames; i++, frame++ ) + frame = (md3Frame_t*) ( bb + md3->ofsFrames ); + for ( i = 0; i < md3->numFrames; i++, frame++ ) { frame->radius = _pico_little_float( frame->radius ); - for( j = 0; j < 3; j++ ) + for ( j = 0; j < 3; j++ ) { frame->bounds[ 0 ][ j ] = _pico_little_float( frame->bounds[ 0 ][ j ] ); frame->bounds[ 1 ][ j ] = _pico_little_float( frame->bounds[ 1 ][ j ] ); frame->localOrigin[ j ] = _pico_little_float( frame->localOrigin[ j ] ); } } - + /* swap surfaces */ - surface = (md3Surface_t*) (bb + md3->ofsSurfaces); - for( i = 0; i < md3->numSurfaces; i++ ) + surface = (md3Surface_t*) ( bb + md3->ofsSurfaces ); + for ( i = 0; i < md3->numSurfaces; i++ ) { /* swap surface md3; sea: swaps fixed */ surface->flags = _pico_little_long( surface->flags ); @@ -266,129 +264,126 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD ) surface->ofsSt = _pico_little_long( surface->ofsSt ); surface->ofsVertexes = _pico_little_long( surface->ofsVertexes ); surface->ofsEnd = _pico_little_long( surface->ofsEnd ); - + /* swap triangles */ - triangle = (md3Triangle_t*) ((picoByte_t*) surface + surface->ofsTriangles); - for( j = 0; j < surface->numTriangles; j++, triangle++ ) + triangle = (md3Triangle_t*) ( (picoByte_t*) surface + surface->ofsTriangles ); + for ( j = 0; j < surface->numTriangles; j++, triangle++ ) { /* sea: swaps fixed */ triangle->indexes[ 0 ] = _pico_little_long( triangle->indexes[ 0 ] ); triangle->indexes[ 1 ] = _pico_little_long( triangle->indexes[ 1 ] ); triangle->indexes[ 2 ] = _pico_little_long( triangle->indexes[ 2 ] ); } - + /* swap st coords */ - texCoord = (md3TexCoord_t*) ((picoByte_t*) surface + surface->ofsSt); - for( j = 0; j < surface->numVerts; j++, texCoord++ ) + texCoord = (md3TexCoord_t*) ( (picoByte_t*) surface + surface->ofsSt ); + for ( j = 0; j < surface->numVerts; j++, texCoord++ ) { texCoord->st[ 0 ] = _pico_little_float( texCoord->st[ 0 ] ); texCoord->st[ 1 ] = _pico_little_float( texCoord->st[ 1 ] ); } - + /* swap xyz/normals */ - vertex = (md3Vertex_t*) ((picoByte_t*) surface + surface->ofsVertexes); - for( j = 0; j < (surface->numVerts * surface->numFrames); j++, vertex++) + vertex = (md3Vertex_t*) ( (picoByte_t*) surface + surface->ofsVertexes ); + for ( j = 0; j < ( surface->numVerts * surface->numFrames ); j++, vertex++ ) { vertex->xyz[ 0 ] = _pico_little_short( vertex->xyz[ 0 ] ); vertex->xyz[ 1 ] = _pico_little_short( vertex->xyz[ 1 ] ); vertex->xyz[ 2 ] = _pico_little_short( vertex->xyz[ 2 ] ); - vertex->normal = _pico_little_short( vertex->normal ); + vertex->normal = _pico_little_short( vertex->normal ); } - + /* get next surface */ - surface = (md3Surface_t*) ((picoByte_t*) surface + surface->ofsEnd); + surface = (md3Surface_t*) ( (picoByte_t*) surface + surface->ofsEnd ); } - + /* ------------------------------------------------- - pico model creation - ------------------------------------------------- */ - + pico model creation + ------------------------------------------------- */ + /* create new pico model */ picoModel = PicoNewModel(); - if( picoModel == NULL ) - { + if ( picoModel == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model" ); return NULL; } - + /* do model setup */ PicoSetModelFrameNum( picoModel, frameNum ); PicoSetModelNumFrames( picoModel, md3->numFrames ); /* sea */ PicoSetModelName( picoModel, fileName ); PicoSetModelFileName( picoModel, fileName ); - + /* md3 surfaces become picomodel surfaces */ - surface = (md3Surface_t*) (bb + md3->ofsSurfaces); - + surface = (md3Surface_t*) ( bb + md3->ofsSurfaces ); + /* run through md3 surfaces */ - for( i = 0; i < md3->numSurfaces; i++ ) + for ( i = 0; i < md3->numSurfaces; i++ ) { /* allocate new pico surface */ picoSurface = PicoNewSurface( picoModel ); - if( picoSurface == NULL ) - { + if ( picoSurface == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" ); PicoFreeModel( picoModel ); /* sea */ return NULL; } - + /* md3 model surfaces are all triangle meshes */ PicoSetSurfaceType( picoSurface, PICO_TRIANGLES ); - + /* set surface name */ PicoSetSurfaceName( picoSurface, surface->name ); - + /* create new pico shader -sea */ picoShader = PicoNewShader( picoModel ); - if( picoShader == NULL ) - { + if ( picoShader == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" ); PicoFreeModel( picoModel ); return NULL; } - + /* detox and set shader name */ - shader = (md3Shader_t*) ((picoByte_t*) surface + surface->ofsShaders); + shader = (md3Shader_t*) ( (picoByte_t*) surface + surface->ofsShaders ); _pico_setfext( shader->name, "" ); _pico_unixify( shader->name ); PicoSetShaderName( picoShader, shader->name ); - + /* associate current surface with newly created shader */ PicoSetSurfaceShader( picoSurface, picoShader ); - + /* copy indexes */ - triangle = (md3Triangle_t *) ((picoByte_t*) surface + surface->ofsTriangles); - - for( j = 0; j < surface->numTriangles; j++, triangle++ ) + triangle = (md3Triangle_t *) ( (picoByte_t*) surface + surface->ofsTriangles ); + + for ( j = 0; j < surface->numTriangles; j++, triangle++ ) { - PicoSetSurfaceIndex( picoSurface, (j * 3 + 0), (picoIndex_t) triangle->indexes[ 0 ] ); - PicoSetSurfaceIndex( picoSurface, (j * 3 + 1), (picoIndex_t) triangle->indexes[ 1 ] ); - PicoSetSurfaceIndex( picoSurface, (j * 3 + 2), (picoIndex_t) triangle->indexes[ 2 ] ); + PicoSetSurfaceIndex( picoSurface, ( j * 3 + 0 ), (picoIndex_t) triangle->indexes[ 0 ] ); + PicoSetSurfaceIndex( picoSurface, ( j * 3 + 1 ), (picoIndex_t) triangle->indexes[ 1 ] ); + PicoSetSurfaceIndex( picoSurface, ( j * 3 + 2 ), (picoIndex_t) triangle->indexes[ 2 ] ); } - + /* copy vertexes */ - texCoord = (md3TexCoord_t*) ((picoByte_t *) surface + surface->ofsSt); - vertex = (md3Vertex_t*) ((picoByte_t*) surface + surface->ofsVertexes + surface->numVerts * frameNum * sizeof( md3Vertex_t ) ); + texCoord = (md3TexCoord_t*) ( (picoByte_t *) surface + surface->ofsSt ); + vertex = (md3Vertex_t*) ( (picoByte_t*) surface + surface->ofsVertexes + surface->numVerts * frameNum * sizeof( md3Vertex_t ) ); _pico_set_color( color, 255, 255, 255, 255 ); - - for( j = 0; j < surface->numVerts; j++, texCoord++, vertex++ ) + + for ( j = 0; j < surface->numVerts; j++, texCoord++, vertex++ ) { /* set vertex origin */ xyz[ 0 ] = MD3_SCALE * vertex->xyz[ 0 ]; xyz[ 1 ] = MD3_SCALE * vertex->xyz[ 1 ]; xyz[ 2 ] = MD3_SCALE * vertex->xyz[ 2 ]; PicoSetSurfaceXYZ( picoSurface, j, xyz ); - + /* decode lat/lng normal to 3 float normal */ - lat = (float) ((vertex->normal >> 8) & 0xff); - lng = (float) (vertex->normal & 0xff); + lat = (float) ( ( vertex->normal >> 8 ) & 0xff ); + lng = (float) ( vertex->normal & 0xff ); lat *= PICO_PI / 128; lng *= PICO_PI / 128; normal[ 0 ] = (picoVec_t) cos( lat ) * (picoVec_t) sin( lng ); normal[ 1 ] = (picoVec_t) sin( lat ) * (picoVec_t) sin( lng ); normal[ 2 ] = (picoVec_t) cos( lng ); PicoSetSurfaceNormal( picoSurface, j, normal ); - + /* set st coords */ st[ 0 ] = texCoord->st[ 0 ]; st[ 1 ] = texCoord->st[ 1 ]; @@ -397,11 +392,11 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD ) /* set color */ PicoSetSurfaceColor( picoSurface, 0, j, color ); } - + /* get next surface */ - surface = (md3Surface_t*) ((picoByte_t*) surface + surface->ofsEnd); + surface = (md3Surface_t*) ( (picoByte_t*) surface + surface->ofsEnd ); } - + /* return the new pico model */ return picoModel; } @@ -411,15 +406,15 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD ) /* pico file format module definition */ const picoModule_t picoModuleMD3 = { - "1.3", /* module version string */ - "Quake 3 Arena", /* module display name */ - "Randy Reddig", /* author's name */ - "2002 Randy Reddig", /* module copyright */ + "1.3", /* module version string */ + "Quake 3 Arena", /* module display name */ + "Randy Reddig", /* author's name */ + "2002 Randy Reddig", /* module copyright */ { - "md3", NULL, NULL, NULL /* default extensions to use */ + "md3", NULL, NULL, NULL /* default extensions to use */ }, - _md3_canload, /* validation routine */ - _md3_load, /* load routine */ - NULL, /* save validation routine */ - NULL /* save routine */ + _md3_canload, /* validation routine */ + _md3_load, /* load routine */ + NULL, /* save validation routine */ + NULL /* save routine */ }; diff --git a/libs/picomodel/pm_mdc.c b/libs/picomodel/pm_mdc.c index 27e612e8..2e4849fb 100644 --- a/libs/picomodel/pm_mdc.c +++ b/libs/picomodel/pm_mdc.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -43,13 +43,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "picointernal.h" /* mdc model format */ -#define MDC_MAGIC "IDPC" -#define MDC_VERSION 2 +#define MDC_MAGIC "IDPC" +#define MDC_VERSION 2 /* mdc vertex scale */ -#define MDC_SCALE (1.0f / 64.0f) -#define MDC_MAX_OFS 127.0f -#define MDC_DIST_SCALE 0.05f +#define MDC_SCALE ( 1.0f / 64.0f ) +#define MDC_MAX_OFS 127.0f +#define MDC_DIST_SCALE 0.05f /* mdc decoding normal table */ double mdcNormals[ 256 ][ 3 ] = @@ -315,73 +315,73 @@ double mdcNormals[ 256 ][ 3 ] = /* mdc model frame information */ typedef struct mdcFrame_s { - float bounds[ 2 ][ 3 ]; - float localOrigin[ 3 ]; - float radius; - char creator[ 16 ]; + float bounds[ 2 ][ 3 ]; + float localOrigin[ 3 ]; + float radius; + char creator[ 16 ]; } mdcFrame_t; /* mdc model tag information */ typedef struct mdcTag_s { - short xyz[3]; - short angles[3]; + short xyz[3]; + short angles[3]; } mdcTag_t; /* mdc surface mdc (one object mesh) */ typedef struct mdcSurface_s { - char magic[ 4 ]; - char name[ 64 ]; /* polyset name */ - int flags; - int numCompFrames; /* all surfaces in a model should have the same */ - int numBaseFrames; /* ditto */ - int numShaders; /* all model surfaces should have the same */ - int numVerts; - int numTriangles; - int ofsTriangles; - int ofsShaders; /* offset from start of mdcSurface_t */ - int ofsSt; /* texture coords are common for all frames */ - int ofsXyzNormals; /* numVerts * numBaseFrames */ - int ofsXyzCompressed; /* numVerts * numCompFrames */ - - int ofsFrameBaseFrames; /* numFrames */ - int ofsFrameCompFrames; /* numFrames */ - int ofsEnd; /* next surface follows */ + char magic[ 4 ]; + char name[ 64 ]; /* polyset name */ + int flags; + int numCompFrames; /* all surfaces in a model should have the same */ + int numBaseFrames; /* ditto */ + int numShaders; /* all model surfaces should have the same */ + int numVerts; + int numTriangles; + int ofsTriangles; + int ofsShaders; /* offset from start of mdcSurface_t */ + int ofsSt; /* texture coords are common for all frames */ + int ofsXyzNormals; /* numVerts * numBaseFrames */ + int ofsXyzCompressed; /* numVerts * numCompFrames */ + + int ofsFrameBaseFrames; /* numFrames */ + int ofsFrameCompFrames; /* numFrames */ + int ofsEnd; /* next surface follows */ } mdcSurface_t; typedef struct mdcShader_s { - char name[ 64 ]; - int shaderIndex; /* for ingame use */ + char name[ 64 ]; + int shaderIndex; /* for ingame use */ } mdcShader_t; typedef struct mdcTriangle_s { - int indexes[ 3 ]; + int indexes[ 3 ]; } mdcTriangle_t; typedef struct mdcTexCoord_s { - float st[ 2 ]; + float st[ 2 ]; } mdcTexCoord_t; typedef struct mdcVertex_s { - short xyz[ 3 ]; - short normal; + short xyz[ 3 ]; + short normal; } mdcVertex_t; typedef struct mdcXyzCompressed_s { - unsigned int ofsVec; /* offset direction from the last base frame */ + unsigned int ofsVec; /* offset direction from the last base frame */ } mdcXyzCompressed_t; @@ -389,19 +389,19 @@ mdcXyzCompressed_t; /* mdc model file mdc structure */ typedef struct mdc_s { - char magic[ 4 ]; /* MDC_MAGIC */ - int version; - char name[ 64 ]; /* model name */ - int flags; - int numFrames; - int numTags; - int numSurfaces; - int numSkins; /* number of skins for the mesh */ - int ofsFrames; /* offset for first frame */ - int ofsTagNames; /* numTags */ - int ofsTags; /* numFrames * numTags */ - int ofsSurfaces; /* first surface, others follow */ - int ofsEnd; /* end of file */ + char magic[ 4 ]; /* MDC_MAGIC */ + int version; + char name[ 64 ]; /* model name */ + int flags; + int numFrames; + int numTags; + int numSurfaces; + int numSkins; /* number of skins for the mesh */ + int ofsFrames; /* offset for first frame */ + int ofsTagNames; /* numTags */ + int ofsTags; /* numFrames * numTags */ + int ofsSurfaces; /* first surface, others follow */ + int ofsEnd; /* end of file */ } mdc_t; @@ -409,35 +409,37 @@ mdc_t; /* -_mdc_canload() -validates a Return to Castle Wolfenstein model file. btw, i use the -preceding underscore cause it's a static func referenced -by one structure only. -*/ + _mdc_canload() + validates a Return to Castle Wolfenstein model file. btw, i use the + preceding underscore cause it's a static func referenced + by one structure only. + */ + +static int _mdc_canload( PM_PARAMS_CANLOAD ){ + mdc_t *mdc; -static int _mdc_canload( PM_PARAMS_CANLOAD ) -{ - mdc_t *mdc; - /* to keep the compiler happy */ *fileName = *fileName; - + /* sanity check */ - if( bufSize < ( sizeof( *mdc ) * 2) ) + if ( bufSize < ( sizeof( *mdc ) * 2 ) ) { return PICO_PMV_ERROR_SIZE; - + } + /* set as mdc */ - mdc = (mdc_t*) buffer; - + mdc = (mdc_t*) buffer; + /* check mdc magic */ - if( *((int*) mdc->magic) != *((int*) MDC_MAGIC) ) + if ( *( (int*) mdc->magic ) != *( (int*) MDC_MAGIC ) ) { return PICO_PMV_ERROR_IDENT; - + } + /* check mdc version */ - if( _pico_little_long( mdc->version ) != MDC_VERSION ) + if ( _pico_little_long( mdc->version ) != MDC_VERSION ) { return PICO_PMV_ERROR_VERSION; - + } + /* file seems to be a valid mdc */ return PICO_PMV_OK; } @@ -445,49 +447,47 @@ static int _mdc_canload( PM_PARAMS_CANLOAD ) /* -_mdc_load() -loads a Return to Castle Wolfenstein mdc model file. -*/ + _mdc_load() + loads a Return to Castle Wolfenstein mdc model file. + */ + +static picoModel_t *_mdc_load( PM_PARAMS_LOAD ){ + int i, j; + picoByte_t *bb; + mdc_t *mdc; + mdcSurface_t *surface; + mdcShader_t *shader; + mdcTexCoord_t *texCoord; + mdcFrame_t *frame; + mdcTriangle_t *triangle; + mdcVertex_t *vertex; + mdcXyzCompressed_t *vertexComp; + short *mdcShort, *mdcCompVert; + double lat, lng; + + picoModel_t *picoModel; + picoSurface_t *picoSurface; + picoShader_t *picoShader; + picoVec3_t xyz, normal; + picoVec2_t st; + picoColor_t color; + -static picoModel_t *_mdc_load( PM_PARAMS_LOAD ) -{ - int i, j; - picoByte_t *bb; - mdc_t *mdc; - mdcSurface_t *surface; - mdcShader_t *shader; - mdcTexCoord_t *texCoord; - mdcFrame_t *frame; - mdcTriangle_t *triangle; - mdcVertex_t *vertex; - mdcXyzCompressed_t *vertexComp; - short *mdcShort, *mdcCompVert; - double lat, lng; - - picoModel_t *picoModel; - picoSurface_t *picoSurface; - picoShader_t *picoShader; - picoVec3_t xyz, normal; - picoVec2_t st; - picoColor_t color; - - /* ------------------------------------------------- - mdc loading - ------------------------------------------------- */ + mdc loading + ------------------------------------------------- */ /* set as mdc */ bb = (picoByte_t*) buffer; - mdc = (mdc_t*) buffer; - + mdc = (mdc_t*) buffer; + /* check ident and version */ - if( *((int*) mdc->magic) != *((int*) MDC_MAGIC) || _pico_little_long( mdc->version ) != MDC_VERSION ) - { + if ( *( (int*) mdc->magic ) != *( (int*) MDC_MAGIC ) || _pico_little_long( mdc->version ) != MDC_VERSION ) { /* not an mdc file (todo: set error) */ return NULL; } - + /* swap mdc */ mdc->version = _pico_little_long( mdc->version ); mdc->numFrames = _pico_little_long( mdc->numFrames ); @@ -499,36 +499,34 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD ) mdc->ofsTagNames = _pico_little_long( mdc->ofsTagNames ); mdc->ofsSurfaces = _pico_little_long( mdc->ofsSurfaces ); mdc->ofsEnd = _pico_little_long( mdc->ofsEnd ); - + /* do frame check */ - if( mdc->numFrames < 1 ) - { + if ( mdc->numFrames < 1 ) { _pico_printf( PICO_ERROR, "MDC with 0 frames" ); return NULL; } - - if( frameNum < 0 || frameNum >= mdc->numFrames ) - { + + if ( frameNum < 0 || frameNum >= mdc->numFrames ) { _pico_printf( PICO_ERROR, "Invalid or out-of-range MDC frame specified" ); return NULL; } - + /* swap frames */ - frame = (mdcFrame_t*) (bb + mdc->ofsFrames ); - for( i = 0; i < mdc->numFrames; i++, frame++ ) + frame = (mdcFrame_t*) ( bb + mdc->ofsFrames ); + for ( i = 0; i < mdc->numFrames; i++, frame++ ) { frame->radius = _pico_little_float( frame->radius ); - for( j = 0; j < 3; j++ ) + for ( j = 0; j < 3; j++ ) { frame->bounds[ 0 ][ j ] = _pico_little_float( frame->bounds[ 0 ][ j ] ); frame->bounds[ 1 ][ j ] = _pico_little_float( frame->bounds[ 1 ][ j ] ); frame->localOrigin[ j ] = _pico_little_float( frame->localOrigin[ j ] ); } } - + /* swap surfaces */ - surface = (mdcSurface_t*) (bb + mdc->ofsSurfaces); - for( i = 0; i < mdc->numSurfaces; i++ ) + surface = (mdcSurface_t*) ( bb + mdc->ofsSurfaces ); + for ( i = 0; i < mdc->numSurfaces; i++ ) { /* swap surface mdc */ surface->flags = _pico_little_long( surface->flags ); @@ -545,139 +543,136 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD ) surface->ofsFrameBaseFrames = _pico_little_long( surface->ofsFrameBaseFrames ); surface->ofsFrameCompFrames = _pico_little_long( surface->ofsFrameCompFrames ); surface->ofsEnd = _pico_little_long( surface->ofsEnd ); - + /* swap triangles */ - triangle = (mdcTriangle_t*) ((picoByte_t*) surface + surface->ofsTriangles); - for( j = 0; j < surface->numTriangles; j++, triangle++ ) + triangle = (mdcTriangle_t*) ( (picoByte_t*) surface + surface->ofsTriangles ); + for ( j = 0; j < surface->numTriangles; j++, triangle++ ) { /* sea: swaps fixed */ triangle->indexes[ 0 ] = _pico_little_long( triangle->indexes[ 0 ] ); triangle->indexes[ 1 ] = _pico_little_long( triangle->indexes[ 1 ] ); triangle->indexes[ 2 ] = _pico_little_long( triangle->indexes[ 2 ] ); } - + /* swap st coords */ - texCoord = (mdcTexCoord_t*) ((picoByte_t*) surface + surface->ofsSt); - for( j = 0; j < surface->numVerts; j++, texCoord++ ) + texCoord = (mdcTexCoord_t*) ( (picoByte_t*) surface + surface->ofsSt ); + for ( j = 0; j < surface->numVerts; j++, texCoord++ ) { texCoord->st[ 0 ] = _pico_little_float( texCoord->st[ 0 ] ); texCoord->st[ 1 ] = _pico_little_float( texCoord->st[ 1 ] ); } - + /* swap xyz/normals */ - vertex = (mdcVertex_t*) ((picoByte_t*) surface + surface->ofsXyzNormals); - for( j = 0; j < (surface->numVerts * surface->numBaseFrames); j++, vertex++) + vertex = (mdcVertex_t*) ( (picoByte_t*) surface + surface->ofsXyzNormals ); + for ( j = 0; j < ( surface->numVerts * surface->numBaseFrames ); j++, vertex++ ) { vertex->xyz[ 0 ] = _pico_little_short( vertex->xyz[ 0 ] ); vertex->xyz[ 1 ] = _pico_little_short( vertex->xyz[ 1 ] ); vertex->xyz[ 2 ] = _pico_little_short( vertex->xyz[ 2 ] ); - vertex->normal = _pico_little_short( vertex->normal ); + vertex->normal = _pico_little_short( vertex->normal ); } /* swap xyz/compressed */ - vertexComp = (mdcXyzCompressed_t*) ((picoByte_t*) surface + surface->ofsXyzCompressed); - for( j = 0; j < (surface->numVerts * surface->numCompFrames); j++, vertexComp++) + vertexComp = (mdcXyzCompressed_t*) ( (picoByte_t*) surface + surface->ofsXyzCompressed ); + for ( j = 0; j < ( surface->numVerts * surface->numCompFrames ); j++, vertexComp++ ) { - vertexComp->ofsVec = _pico_little_long( vertexComp->ofsVec ); + vertexComp->ofsVec = _pico_little_long( vertexComp->ofsVec ); } /* swap base frames */ - mdcShort = (short *) ((picoByte_t*) surface + surface->ofsFrameBaseFrames); - for( j = 0; j < mdc->numFrames; j++, mdcShort++) + mdcShort = (short *) ( (picoByte_t*) surface + surface->ofsFrameBaseFrames ); + for ( j = 0; j < mdc->numFrames; j++, mdcShort++ ) { - *mdcShort = _pico_little_short( *mdcShort ); + *mdcShort = _pico_little_short( *mdcShort ); } /* swap compressed frames */ - mdcShort = (short *) ((picoByte_t*) surface + surface->ofsFrameCompFrames); - for( j = 0; j < mdc->numFrames; j++, mdcShort++) + mdcShort = (short *) ( (picoByte_t*) surface + surface->ofsFrameCompFrames ); + for ( j = 0; j < mdc->numFrames; j++, mdcShort++ ) { - *mdcShort = _pico_little_short( *mdcShort ); + *mdcShort = _pico_little_short( *mdcShort ); } - + /* get next surface */ - surface = (mdcSurface_t*) ((picoByte_t*) surface + surface->ofsEnd); + surface = (mdcSurface_t*) ( (picoByte_t*) surface + surface->ofsEnd ); } - + /* ------------------------------------------------- - pico model creation - ------------------------------------------------- */ - + pico model creation + ------------------------------------------------- */ + /* create new pico model */ picoModel = PicoNewModel(); - if( picoModel == NULL ) - { + if ( picoModel == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model" ); return NULL; } - + /* do model setup */ PicoSetModelFrameNum( picoModel, frameNum ); PicoSetModelNumFrames( picoModel, mdc->numFrames ); /* sea */ PicoSetModelName( picoModel, fileName ); PicoSetModelFileName( picoModel, fileName ); - + /* mdc surfaces become picomodel surfaces */ - surface = (mdcSurface_t*) (bb + mdc->ofsSurfaces); - + surface = (mdcSurface_t*) ( bb + mdc->ofsSurfaces ); + /* run through mdc surfaces */ - for( i = 0; i < mdc->numSurfaces; i++ ) + for ( i = 0; i < mdc->numSurfaces; i++ ) { /* allocate new pico surface */ picoSurface = PicoNewSurface( picoModel ); - if( picoSurface == NULL ) - { + if ( picoSurface == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" ); PicoFreeModel( picoModel ); /* sea */ return NULL; } - + /* mdc model surfaces are all triangle meshes */ PicoSetSurfaceType( picoSurface, PICO_TRIANGLES ); - + /* set surface name */ PicoSetSurfaceName( picoSurface, surface->name ); - + /* create new pico shader -sea */ picoShader = PicoNewShader( picoModel ); - if( picoShader == NULL ) - { + if ( picoShader == NULL ) { _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" ); PicoFreeModel( picoModel ); return NULL; } - + /* detox and set shader name */ - shader = (mdcShader_t*) ((picoByte_t*) surface + surface->ofsShaders); + shader = (mdcShader_t*) ( (picoByte_t*) surface + surface->ofsShaders ); _pico_setfext( shader->name, "" ); _pico_unixify( shader->name ); PicoSetShaderName( picoShader, shader->name ); - + /* associate current surface with newly created shader */ PicoSetSurfaceShader( picoSurface, picoShader ); - + /* copy indexes */ - triangle = (mdcTriangle_t *) ((picoByte_t*) surface + surface->ofsTriangles); - - for( j = 0; j < surface->numTriangles; j++, triangle++ ) + triangle = (mdcTriangle_t *) ( (picoByte_t*) surface + surface->ofsTriangles ); + + for ( j = 0; j < surface->numTriangles; j++, triangle++ ) { - PicoSetSurfaceIndex( picoSurface, (j * 3 + 0), (picoIndex_t) triangle->indexes[ 0 ] ); - PicoSetSurfaceIndex( picoSurface, (j * 3 + 1), (picoIndex_t) triangle->indexes[ 1 ] ); - PicoSetSurfaceIndex( picoSurface, (j * 3 + 2), (picoIndex_t) triangle->indexes[ 2 ] ); + PicoSetSurfaceIndex( picoSurface, ( j * 3 + 0 ), (picoIndex_t) triangle->indexes[ 0 ] ); + PicoSetSurfaceIndex( picoSurface, ( j * 3 + 1 ), (picoIndex_t) triangle->indexes[ 1 ] ); + PicoSetSurfaceIndex( picoSurface, ( j * 3 + 2 ), (picoIndex_t) triangle->indexes[ 2 ] ); } - + /* copy vertexes */ - texCoord = (mdcTexCoord_t*) ((picoByte_t *) surface + surface->ofsSt); - mdcShort = (short *) ((picoByte_t *) surface + surface->ofsXyzNormals) + ((int)*((short *) ((picoByte_t *) surface + surface->ofsFrameBaseFrames) + frameNum) * surface->numVerts * 4); - if( surface->numCompFrames > 0 ) - { - mdcCompVert = (short *) ((picoByte_t *) surface + surface->ofsFrameCompFrames) + frameNum; - if( *mdcCompVert >= 0 ) - vertexComp = (mdcXyzCompressed_t *) ((picoByte_t *) surface + surface->ofsXyzCompressed) + (*mdcCompVert * surface->numVerts); + texCoord = (mdcTexCoord_t*) ( (picoByte_t *) surface + surface->ofsSt ); + mdcShort = (short *) ( (picoByte_t *) surface + surface->ofsXyzNormals ) + ( (int)*( (short *) ( (picoByte_t *) surface + surface->ofsFrameBaseFrames ) + frameNum ) * surface->numVerts * 4 ); + if ( surface->numCompFrames > 0 ) { + mdcCompVert = (short *) ( (picoByte_t *) surface + surface->ofsFrameCompFrames ) + frameNum; + if ( *mdcCompVert >= 0 ) { + vertexComp = (mdcXyzCompressed_t *) ( (picoByte_t *) surface + surface->ofsXyzCompressed ) + ( *mdcCompVert * surface->numVerts ); + } } _pico_set_color( color, 255, 255, 255, 255 ); - - for( j = 0; j < surface->numVerts; j++, texCoord++, mdcShort+=4 ) + + for ( j = 0; j < surface->numVerts; j++, texCoord++, mdcShort += 4 ) { /* set vertex origin */ xyz[ 0 ] = MDC_SCALE * mdcShort[ 0 ]; @@ -685,27 +680,26 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD ) xyz[ 2 ] = MDC_SCALE * mdcShort[ 2 ]; /* add compressed ofsVec */ - if( surface->numCompFrames > 0 && *mdcCompVert >= 0 ) - { - xyz[ 0 ] += ((float) ((vertexComp->ofsVec) & 255) - MDC_MAX_OFS) * MDC_DIST_SCALE; - xyz[ 1 ] += ((float) ((vertexComp->ofsVec >> 8) & 255) - MDC_MAX_OFS) * MDC_DIST_SCALE; - xyz[ 2 ] += ((float) ((vertexComp->ofsVec >> 16) & 255) - MDC_MAX_OFS) * MDC_DIST_SCALE; + if ( surface->numCompFrames > 0 && *mdcCompVert >= 0 ) { + xyz[ 0 ] += ( (float) ( ( vertexComp->ofsVec ) & 255 ) - MDC_MAX_OFS ) * MDC_DIST_SCALE; + xyz[ 1 ] += ( (float) ( ( vertexComp->ofsVec >> 8 ) & 255 ) - MDC_MAX_OFS ) * MDC_DIST_SCALE; + xyz[ 2 ] += ( (float) ( ( vertexComp->ofsVec >> 16 ) & 255 ) - MDC_MAX_OFS ) * MDC_DIST_SCALE; PicoSetSurfaceXYZ( picoSurface, j, xyz ); - normal[ 0 ] = (float) mdcNormals[ (vertexComp->ofsVec >> 24) ][ 0 ]; - normal[ 1 ] = (float) mdcNormals[ (vertexComp->ofsVec >> 24) ][ 1 ]; - normal[ 2 ] = (float) mdcNormals[ (vertexComp->ofsVec >> 24) ][ 2 ]; + normal[ 0 ] = (float) mdcNormals[ ( vertexComp->ofsVec >> 24 ) ][ 0 ]; + normal[ 1 ] = (float) mdcNormals[ ( vertexComp->ofsVec >> 24 ) ][ 1 ]; + normal[ 2 ] = (float) mdcNormals[ ( vertexComp->ofsVec >> 24 ) ][ 2 ]; PicoSetSurfaceNormal( picoSurface, j, normal ); vertexComp++; } else - { + { PicoSetSurfaceXYZ( picoSurface, j, xyz ); /* decode lat/lng normal to 3 float normal */ - lat = (float) ((*(mdcShort + 3) >> 8) & 0xff); - lng = (float) (*(mdcShort + 3) & 0xff); + lat = (float) ( ( *( mdcShort + 3 ) >> 8 ) & 0xff ); + lng = (float) ( *( mdcShort + 3 ) & 0xff ); lat *= PICO_PI / 128; lng *= PICO_PI / 128; normal[ 0 ] = (picoVec_t) cos( lat ) * (picoVec_t) sin( lng ); @@ -713,7 +707,7 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD ) normal[ 2 ] = (picoVec_t) cos( lng ); PicoSetSurfaceNormal( picoSurface, j, normal ); } - + /* set st coords */ st[ 0 ] = texCoord->st[ 0 ]; st[ 1 ] = texCoord->st[ 1 ]; @@ -722,11 +716,11 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD ) /* set color */ PicoSetSurfaceColor( picoSurface, 0, j, color ); } - + /* get next surface */ - surface = (mdcSurface_t*) ((picoByte_t*) surface + surface->ofsEnd); + surface = (mdcSurface_t*) ( (picoByte_t*) surface + surface->ofsEnd ); } - + /* return the new pico model */ return picoModel; } @@ -736,15 +730,15 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD ) /* pico file format module definition */ const picoModule_t picoModuleMDC = { - "1.3", /* module version string */ - "RtCW MDC", /* module display name */ - "Arnout van Meer", /* author's name */ - "2002 Arnout van Meer", /* module copyright */ + "1.3", /* module version string */ + "RtCW MDC", /* module display name */ + "Arnout van Meer", /* author's name */ + "2002 Arnout van Meer", /* module copyright */ { - "mdc", NULL, NULL, NULL /* default extensions to use */ + "mdc", NULL, NULL, NULL /* default extensions to use */ }, - _mdc_canload, /* validation routine */ - _mdc_load, /* load routine */ - NULL, /* save validation routine */ - NULL /* save routine */ + _mdc_canload, /* validation routine */ + _mdc_load, /* load routine */ + NULL, /* save validation routine */ + NULL /* save routine */ }; diff --git a/libs/picomodel/pm_ms3d.c b/libs/picomodel/pm_ms3d.c index 27147bc0..08dd6f45 100644 --- a/libs/picomodel/pm_ms3d.c +++ b/libs/picomodel/pm_ms3d.c @@ -1,36 +1,36 @@ /* ----------------------------------------------------------------------------- -PicoModel Library + PicoModel Library -Copyright (c) 2002, Randy Reddig & seaw0lf -All rights reserved. + Copyright (c) 2002, Randy Reddig & seaw0lf + All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. -Neither the names of the copyright holders nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. + Neither the names of the copyright holders nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ */ + ----------------------------------------------------------------------------- */ @@ -59,18 +59,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. static picoColor_t white = { 255,255,255,255 }; /* ms3d limits */ -#define MS3D_MAX_VERTS 8192 -#define MS3D_MAX_TRIS 16384 -#define MS3D_MAX_GROUPS 128 -#define MS3D_MAX_MATERIALS 128 -#define MS3D_MAX_JOINTS 128 -#define MS3D_MAX_KEYFRAMES 216 +#define MS3D_MAX_VERTS 8192 +#define MS3D_MAX_TRIS 16384 +#define MS3D_MAX_GROUPS 128 +#define MS3D_MAX_MATERIALS 128 +#define MS3D_MAX_JOINTS 128 +#define MS3D_MAX_KEYFRAMES 216 /* ms3d flags */ -#define MS3D_SELECTED 1 -#define MS3D_HIDDEN 2 -#define MS3D_SELECTED2 4 -#define MS3D_DIRTY 8 +#define MS3D_SELECTED 1 +#define MS3D_HIDDEN 2 +#define MS3D_SELECTED2 4 +#define MS3D_DIRTY 8 /* this freaky loader needs byte alignment */ #pragma pack(push, 1) @@ -78,47 +78,47 @@ static picoColor_t white = { 255,255,255,255 }; /* ms3d header */ typedef struct SMsHeader { - char magic[10]; - int version; + char magic[10]; + int version; } TMsHeader; /* ms3d vertex */ typedef struct SMsVertex { - unsigned char flags; /* sel, sel2, or hidden */ - float xyz[3]; - char boneID; /* -1 means 'no bone' */ - unsigned char refCount; + unsigned char flags; /* sel, sel2, or hidden */ + float xyz[3]; + char boneID; /* -1 means 'no bone' */ + unsigned char refCount; } TMsVertex; /* ms3d triangle */ typedef struct SMsTriangle { - unsigned short flags; /* sel, sel2, or hidden */ - unsigned short vertexIndices[3]; - float vertexNormals[3][3]; - float s[3]; - float t[3]; - unsigned char smoothingGroup; /* 1 - 32 */ - unsigned char groupIndex; + unsigned short flags; /* sel, sel2, or hidden */ + unsigned short vertexIndices[3]; + float vertexNormals[3][3]; + float s[3]; + float t[3]; + unsigned char smoothingGroup; /* 1 - 32 */ + unsigned char groupIndex; } TMsTriangle; /* ms3d material */ typedef struct SMsMaterial { - char name[32]; - float ambient[4]; - float diffuse[4]; - float specular[4]; - float emissive[4]; - float shininess; /* range 0..128 */ - float transparency; /* range 0..1 */ - unsigned char mode; - char texture [128]; /* texture.bmp */ - char alphamap[128]; /* alpha.bmp */ + char name[32]; + float ambient[4]; + float diffuse[4]; + float specular[4]; + float emissive[4]; + float shininess; /* range 0..128 */ + float transparency; /* range 0..1 */ + unsigned char mode; + char texture [128]; /* texture.bmp */ + char alphamap[128]; /* alpha.bmp */ } TMsMaterial; @@ -126,34 +126,34 @@ TMsMaterial; // followed by a variable size block (see below) typedef struct SMsGroup { - unsigned char flags; // sel, hidden - char name[32]; - unsigned short numTriangles; + unsigned char flags; // sel, hidden + char name[32]; + unsigned short numTriangles; /* - unsigned short triangleIndices[ numTriangles ]; - char materialIndex; // -1 means 'no material' -*/ + unsigned short triangleIndices[ numTriangles ]; + char materialIndex; // -1 means 'no material' + */ } TMsGroup; // ms3d joint typedef struct SMsJoint { - unsigned char flags; - char name[32]; - char parentName[32]; - float rotation[3]; - float translation[3]; - unsigned short numRotationKeyframes; - unsigned short numTranslationKeyframes; + unsigned char flags; + char name[32]; + char parentName[32]; + float rotation[3]; + float translation[3]; + unsigned short numRotationKeyframes; + unsigned short numTranslationKeyframes; } TMsJoint; // ms3d keyframe typedef struct SMsKeyframe { - float time; - float parameter[3]; + float time; + float parameter[3]; } TMsKeyframe; @@ -163,29 +163,29 @@ TMsKeyframe; /* _ms3d_canload: * validates a milkshape3d model file. */ -static int _ms3d_canload( PM_PARAMS_CANLOAD ) -{ +static int _ms3d_canload( PM_PARAMS_CANLOAD ){ TMsHeader *hdr; - - + + /* to keep the compiler happy */ *fileName = *fileName; /* sanity check */ - if (bufSize < sizeof(TMsHeader)) + if ( bufSize < sizeof( TMsHeader ) ) { return PICO_PMV_ERROR_SIZE; + } /* get ms3d header */ hdr = (TMsHeader *)buffer; /* check ms3d magic */ - if (strncmp(hdr->magic,"MS3D000000",10) != 0) + if ( strncmp( hdr->magic,"MS3D000000",10 ) != 0 ) { return PICO_PMV_ERROR_IDENT; + } /* check ms3d version */ - if (_pico_little_long(hdr->version) < 3 || - _pico_little_long(hdr->version) > 4) - { + if ( _pico_little_long( hdr->version ) < 3 || + _pico_little_long( hdr->version ) > 4 ) { _pico_printf( PICO_ERROR,"MS3D file ignored. Only MS3D 1.3 and 1.4 is supported." ); return PICO_PMV_ERROR_VERSION; } @@ -193,33 +193,35 @@ static int _ms3d_canload( PM_PARAMS_CANLOAD ) return PICO_PMV_OK; } -static unsigned char *GetWord( unsigned char *bufptr, int *out ) -{ - if (bufptr == NULL) return NULL; +static unsigned char *GetWord( unsigned char *bufptr, int *out ){ + if ( bufptr == NULL ) { + return NULL; + } *out = _pico_little_short( *(unsigned short *)bufptr ); return( bufptr + 2 ); } /* _ms3d_load: * loads a milkshape3d model file. -*/ -static picoModel_t *_ms3d_load( PM_PARAMS_LOAD ) -{ - picoModel_t *model; + */ +static picoModel_t *_ms3d_load( PM_PARAMS_LOAD ){ + picoModel_t *model; unsigned char *bufptr; - int shaderRefs[ MS3D_MAX_GROUPS ]; - int numGroups; - int numMaterials; + int shaderRefs[ MS3D_MAX_GROUPS ]; + int numGroups; + int numMaterials; // unsigned char *ptrToGroups; - int numVerts; + int numVerts; unsigned char *ptrToVerts; - int numTris; + int numTris; unsigned char *ptrToTris; - int i,k,m; + int i,k,m; /* create new pico model */ model = PicoNewModel(); - if (model == NULL) return NULL; + if ( model == NULL ) { + return NULL; + } /* do model setup */ PicoSetModelFrameNum( model, frameNum ); @@ -227,17 +229,17 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD ) PicoSetModelFileName( model, fileName ); /* skip header */ - bufptr = (unsigned char *)buffer + sizeof(TMsHeader); + bufptr = (unsigned char *)buffer + sizeof( TMsHeader ); /* get number of vertices */ bufptr = GetWord( bufptr,&numVerts ); ptrToVerts = bufptr; #ifdef DEBUG_PM_MS3D - printf("NumVertices: %d\n",numVerts); + printf( "NumVertices: %d\n",numVerts ); #endif /* swap verts */ - for (i=0; ixyz[ 2 ] = _pico_little_float( vertex->xyz[ 2 ] ); #ifdef DEBUG_PM_MS3D_EX_ - printf("Vertex: x: %f y: %f z: %f\n", - msvd[i]->vertex[0], - msvd[i]->vertex[1], - msvd[i]->vertex[2]); + printf( "Vertex: x: %f y: %f z: %f\n", + msvd[i]->vertex[0], + msvd[i]->vertex[1], + msvd[i]->vertex[2] ); #endif } /* get number of triangles */ @@ -259,10 +261,10 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD ) ptrToTris = bufptr; #ifdef DEBUG_PM_MS3D - printf("NumTriangles: %d\n",numTris); + printf( "NumTriangles: %d\n",numTris ); #endif /* swap tris */ - for (i=0; iflags = _pico_little_short( triangle->flags ); /* run through all tri verts */ - for (k=0; k<3; k++) + for ( k = 0; k < 3; k++ ) { /* swap tex coords */ triangle->s[ k ] = _pico_little_float( triangle->s[ k ] ); @@ -284,9 +286,8 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD ) triangle->vertexNormals[ 2 ][ k ] = _pico_little_float( triangle->vertexNormals[ 2 ][ k ] ); /* check for out of range indices */ - if (triangle->vertexIndices[ k ] >= numVerts) - { - _pico_printf( PICO_ERROR,"Vertex %d index %d out of range (%d, max %d)",i,k,triangle->vertexIndices[k],numVerts-1); + if ( triangle->vertexIndices[ k ] >= numVerts ) { + _pico_printf( PICO_ERROR,"Vertex %d index %d out of range (%d, max %d)",i,k,triangle->vertexIndices[k],numVerts - 1 ); PicoFreeModel( model ); return NULL; /* yuck */ } @@ -297,21 +298,20 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD ) // ptrToGroups = bufptr; #ifdef DEBUG_PM_MS3D - printf("NumGroups: %d\n",numGroups); + printf( "NumGroups: %d\n",numGroups ); #endif /* run through all groups in model */ - for (i=0; i