#include <wx/filename.h>
#include <wx/listimpl.cpp>
#include <wx/arrimpl.cpp>
#include <wx/tokenzr.h>
#include <wx/buffer.h>
#include <sys/stat.h>
#include <wx/encconv.h>
#include <errno.h>
#include "declarations.h"
#include "commonfunctions.h"
#include "dll/gcomp.h"
wxEncodingConverter CP1251ToUnicodeConv, UnicodeToCP1251Conv;
wxEncodingConverter u2utf, utf2u;
WX_DEFINE_LIST(wxPtrList);
WX_DEFINE_OBJARRAY(wxPtrArray);
bool IsValidFileName(const wxString& String)
{
wxFileName fname(String);
return fname.IsOk();
}
wxArrayString SplitPath(const wxString& Path)
{
return wxStringTokenize(Path, _U("/"));
}
void CopyFile(FILE* dest, FILE* src)
{
char buf[1024];
rewind(src);
rewind(dest);
while( !feof(src) )
{
int read = fread(buf, 1, sizeof(buf), src);
fwrite(buf, 1, read, dest);
}
}
bool IsIgnoredFolder(const wxString& FileName)
{
if( !FileName.Cmp(_U(".")) ) return true;
if( !FileName.Cmp(_U("..")) ) return true;
return false;
}
bool IsIgnoredFile(const wxString& FileName)
{
if( !FileName.CmpNoCase(_U("CVS")) ) return true;
if( !FileName.CmpNoCase(_U(".svn")) ) return true;
if( !FileName.CmpNoCase(_U("ChangeLog")) ) return true;
if( !FileName.CmpNoCase(_U("gcomp.ini")) ) return true;
return IsIgnoredFolder(FileName);
}
//Меняет все нежелательные буквы на '_'. Замена производится прямо в строке
int MangleFileName(wxString& str)
{
wxString forbidden = wxFileName::GetForbiddenChars();
int repl_count = 0;
for(uint ch=0;ch<forbidden.Len();ch++) repl_count+=((wxString)str).Replace(forbidden.Mid(ch, 1), _U("_"));
return repl_count;
}
wxString Suffix(const wxString& str)
{
wxFileName fname(str);
return fname.GetExt();
}
void SystemErrorMessage()
{
/* char *ErrMsg = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
ErrMsg,
0, NULL);
printf(ErrMsg);
fflush(stdout);
LocalFree(ErrMsg);
*/
}
void Msg(int MinimalVerbosityLevel, const wxString& msg, ...)
{
wxString ConvertedMsg;
va_list ap;
va_start(ap, msg);
ConvertedMsg.PrintfV(msg, ap);
va_end(ap);
time_t t;
wxLog::GetActiveTarget()->OnLog(MinimalVerbosityLevel, ConvertedMsg, t);
}
void PrintTime()
{
wxDateTime Time = wxDateTime::Now();
Msg(0, _U("Time: %s"), Time.Format(_U("%H:%M:%S")).c_str());
}
void InitConv()
{
//it's a fuck
CP1251ToUnicodeConv.Init(wxFONTENCODING_CP1251, wxFONTENCODING_UNICODE);
UnicodeToCP1251Conv.Init(wxFONTENCODING_UNICODE, wxFONTENCODING_CP1251);
}
wxString CP1251ToUnicode(const wxString& str)
{
return CP1251ToUnicodeConv.Convert(str);
}
wxString UnicodeToCP1251(const wxString& str)
{
return UnicodeToCP1251Conv.Convert(str);
}
void wxLogConsole::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
{
if(level>GetLogLevel()) return;
DoLogString(szString, t);
}
void wxLogConsole::DoLogString(const wxChar *szString, time_t t)
{
wxString tstr;
TimeStamp(&tstr);
tstr += szString;
#ifndef __WXMSW__
printf("%s\n", (char*)tstr.char_str(wxConvUTF8));
#else
tstr = wxString(tstr.utf8_str(), wxConvUTF8);
tstr = UnicodeToCP1251(tstr);
printf("%s\n", (char*)tstr.char_str(wxConvLocal));
#endif
}