| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #include "stdafx.h"
- #include "libs.h"
- #include "editor.h"
- #include "blitzide.h"
- static map<string,string> keyhelps;
- int linker_ver,runtime_ver;
- static string execProc( const string &proc ){
- HANDLE rd,wr;
- SECURITY_ATTRIBUTES sa={sizeof(sa),0,true};
- if( CreatePipe( &rd,&wr,&sa,0 ) ){
- STARTUPINFO si={sizeof(si)};
- si.dwFlags=STARTF_USESTDHANDLES;
- si.hStdOutput=si.hStdError=wr;
- PROCESS_INFORMATION pi={0};
- if( CreateProcess( 0,(char*)proc.c_str(),0,0,true,DETACHED_PROCESS,0,0,&si,&pi ) ){
- CloseHandle( pi.hProcess );
- CloseHandle( pi.hThread );
- CloseHandle( wr );
- string t;
- char *buf=new char[1024];
- for(;;){
- unsigned long sz;
- int n=ReadFile( rd,buf,1024,&sz,0 );
- if( !n && GetLastError()==ERROR_BROKEN_PIPE ) break;
- if( !n ){ t="";break; }
- if( !sz ) break;
- t+=string( buf,sz );
- }
- delete[] buf;
- CloseHandle(rd);
- return t;
- }
- CloseHandle( rd );
- CloseHandle( wr );
- }
- AfxMessageBox( (proc+" failed").c_str() );
- ExitProcess(0);
- return "";
- }
- int version( string vers,string t ){
- t+=" version:";
- int n=vers.find( t );n+=t.size();
- int maj=atoi( vers.substr(n) );n=vers.find( '.',n )+1;
- int min=atoi( vers.substr(n) );
- return maj*100+min;
- }
- void initLibs(){
- string valid=execProc( prefs.homeDir+"/bin/blitzcc -q" );
- if( valid.size() ){
- AfxMessageBox( ("Compiler environment error: "+valid).c_str() );
- ExitProcess(0);
- }
- string vers=tolower( execProc( prefs.homeDir+"/bin/blitzcc -v" ) );
- linker_ver=version( vers,"linker" );
- runtime_ver=version( vers,"runtime" );
- //generate keywords!
- string kws=execProc( prefs.homeDir+"/bin/blitzcc +k" );
- if( !kws.size() ){
- AfxMessageBox( "Error generating keywords" );
- ExitProcess(0);
- }
- int pos=0,n;
- while( (n=kws.find( '\n',pos ))!=string::npos ){
- string t=kws.substr( pos,n-pos-1 );
- for( int q=0;(q=t.find('\r',q))!=string::npos; ) t=t.replace( q,1,"" );
- string help=t;
- int i=t.find(' ');
- if( i!=string::npos ){
- t=t.substr(0,i);if( !t.size() ){
- AfxMessageBox( "Error in keywords" );
- ExitProcess(0);
- }
- if( !isalnum(t[t.size()-1]) ) t=t.substr(0,t.size()-1);
- }
- Editor::addKeyword(t);
- keyhelps[t]=help;
- pos=n+1;
- }
- }
- string quickHelp( const string &kw ){
- map<string,string>::const_iterator it=keyhelps.find(kw);
- return it==keyhelps.end() ? "" : it->second;
- }
- bool isMediaFile( const string &f ){
- #ifndef PRO
- return false;
- #endif
- static char *exts[]={
- "bmp","jpg","png","tga","iff","pcx",
- "wav","mid","mp3","mod","s3m","xm","it","rmi","sgt",
- "x","3ds",0
- };
- int i=f.rfind( '.' );
- if( i==string::npos || i+1==f.size() ) return false;
- string ext=f.substr( i+1 );
- char **p=exts;
- while( const char *e=*p++ ){
- string t(e);
- if( i+t.size()+1!=f.size() ) continue;
- if( ext==t ) return true;
- }
- return false;
- }
|