]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - radiant/shaders.cpp
add a missing cast
[xonotic/netradiant.git] / radiant / shaders.cpp
1 /*
2    Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3    For a list of contributors, see the accompanying CONTRIBUTORS file.
4
5    This file is part of GtkRadiant.
6
7    GtkRadiant is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    GtkRadiant is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GtkRadiant; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #include "shaders.h"
23
24 #include "ifilesystem.h"
25
26 #include "stream/stringstream.h"
27
28 #include "gtkdlgs.h"
29
30 void ViewShader( const char *pFile, const char *pName ){
31         char* pBuff = 0;
32         //int nSize =
33         vfsLoadFile( pFile, reinterpret_cast<void**>( &pBuff ) );
34         if ( pBuff == 0 ) {
35                 globalErrorStream() << "Failed to load shader file " << pFile << "\n";
36                 return;
37         }
38         // look for the shader declaration
39         StringOutputStream strFind( string_length( pName ) );
40         strFind << LowerCase( pName );
41         StringOutputStream strLook( string_length( pBuff ) );
42         strFind << LowerCase( pBuff );
43         // offset used when jumping over commented out definitions
44         std::size_t nOffset = 0;
45         while ( true )
46         {
47                 const char* substr = strstr( strFind.c_str() + nOffset, strFind.c_str() );
48                 if ( substr == 0 ) {
49                         break;
50                 }
51                 std::size_t nStart = substr - strLook.c_str();
52                 // we have found something, maybe it's a commented out shader name?
53                 char *strCheck = new char[string_length( strLook.c_str() ) + 1];
54                 strcpy( strCheck, strLook.c_str() );
55                 strCheck[nStart] = 0;
56                 char *pCheck = strrchr( strCheck, '\n' );
57                 // if there's a commentary sign in-between we'll continue
58                 if ( pCheck && strstr( pCheck, "//" ) ) {
59                         delete[] strCheck;
60                         nOffset = nStart + 1;
61                         continue;
62                 }
63                 delete[] strCheck;
64                 nOffset = nStart;
65                 break;
66         }
67         // now close the file
68         vfsFreeFile( pBuff );
69
70         DoTextEditor( pFile, static_cast<int>( nOffset ) );
71 }