File Annotation

Not logged in
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #include "stdafx.h"
5128eecc9f 2011-02-23        kinaba: #include "kiutil.h"
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: ///////////////
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiutil::timeSet( const char* fname, FILETIME* pft )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	HANDLE han = CreateFile( fname,
5128eecc9f 2011-02-23        kinaba: 							 GENERIC_READ | GENERIC_WRITE,
5128eecc9f 2011-02-23        kinaba: 							 FILE_SHARE_READ,NULL,
5128eecc9f 2011-02-23        kinaba: 							 OPEN_EXISTING,
5128eecc9f 2011-02-23        kinaba: 							 FILE_ATTRIBUTE_NORMAL,
5128eecc9f 2011-02-23        kinaba: 							 NULL );
5128eecc9f 2011-02-23        kinaba: 	if( han==INVALID_HANDLE_VALUE )
5128eecc9f 2011-02-23        kinaba: 		return;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	SetFileTime( han,pft,NULL,pft );
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	CloseHandle( han );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiutil::timeSet( const char* fname, DWORD sec )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	struct tm* time=gmtime((long*)&sec);
5128eecc9f 2011-02-23        kinaba: 	if( time!=NULL )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		FILETIME ft;
5128eecc9f 2011-02-23        kinaba: 		SYSTEMTIME sys;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		sys.wYear =      time->tm_year+1900;
5128eecc9f 2011-02-23        kinaba: 		sys.wMonth =     time->tm_mon+1;
5128eecc9f 2011-02-23        kinaba: 		sys.wDayOfWeek = time->tm_wday;
5128eecc9f 2011-02-23        kinaba: 		sys.wDay =       time->tm_mday;
5128eecc9f 2011-02-23        kinaba: 		sys.wHour =      time->tm_hour;
5128eecc9f 2011-02-23        kinaba: 		sys.wMinute =    time->tm_min;
5128eecc9f 2011-02-23        kinaba: 		sys.wSecond =    time->tm_sec;
5128eecc9f 2011-02-23        kinaba: 		sys.wMilliseconds = 0;
5128eecc9f 2011-02-23        kinaba: 		SystemTimeToFileTime(&sys,&ft);
5128eecc9f 2011-02-23        kinaba: 		timeSet( fname,&ft );
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiutil::timeSet( const char* fname,WORD date,WORD time )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	FILETIME ft,lc;
5128eecc9f 2011-02-23        kinaba: 	if( DosDateTimeToFileTime( date, time, &lc ) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		if( LocalFileTimeToFileTime( &lc, &ft ) )
5128eecc9f 2011-02-23        kinaba: 			timeSet( fname,&ft );
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: //////////////
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiutil::wndFront( HWND wnd )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	static DWORD Ver = GetVersion();
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	if( ( (Ver&0x80000000) && LOBYTE(LOWORD(Ver))>=4 && HIBYTE(LOWORD(Ver))>=10 ) ||
5128eecc9f 2011-02-23        kinaba: 	    (!(Ver&0x80000000) && LOBYTE(LOWORD(Ver))>=5 )) // 新しいWindows
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		DWORD pid;
5128eecc9f 2011-02-23        kinaba: 		DWORD thread1 = GetWindowThreadProcessId( GetForegroundWindow(),&pid );
5128eecc9f 2011-02-23        kinaba: 		DWORD thread2 = GetCurrentThreadId();
5128eecc9f 2011-02-23        kinaba: 		AttachThreadInput( thread2, thread1, TRUE );
5128eecc9f 2011-02-23        kinaba: 		SetForegroundWindow( wnd );
5128eecc9f 2011-02-23        kinaba: 		AttachThreadInput( thread2, thread1, FALSE );
5128eecc9f 2011-02-23        kinaba: 		BringWindowToTop( wnd );
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 	else  // 古いWindows
5128eecc9f 2011-02-23        kinaba: 		SetForegroundWindow( wnd );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: ///////////////
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: char kiutil::lb[256];
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiutil::pathInit()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	lb[0] = 0;
5128eecc9f 2011-02-23        kinaba: 	for( int c=1; c!=256; c++ )
5128eecc9f 2011-02-23        kinaba: 		lb[c] = (IsDBCSLeadByte(c) ? 2 : 1);
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #define isdblb(c) (lb[(unsigned char)(c)]==2)
5128eecc9f 2011-02-23        kinaba: #define step(p) (p+=lb[(unsigned char)*(p)])
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: char* kiutil::pathMake( char* path )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char* st = path;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	while( *st=='/' || *st=='\\' || *st=='?' )
5128eecc9f 2011-02-23        kinaba: 		st++;
5128eecc9f 2011-02-23        kinaba: 	if( st[0]!='\0' && st[1]==':' )
5128eecc9f 2011-02-23        kinaba: 		st+=2;
5128eecc9f 2011-02-23        kinaba: 	while( *st=='/' || *st=='\\' || *st=='?' )
5128eecc9f 2011-02-23        kinaba: 		st++;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	for( unsigned char *p=(unsigned char*)st; *p!='\0'; step(p) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		if( isdblb(*p) )
5128eecc9f 2011-02-23        kinaba: 			continue;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		if( *p=='\\' || *p=='/' )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			*p='\0';
5128eecc9f 2011-02-23        kinaba: 			CreateDirectory( st, NULL );
5128eecc9f 2011-02-23        kinaba: 			*p='\\';
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 		else if( *p<' ' || ( *p>'~' && !( 0xa0<=*p && *p<=0xdf ) ) || strchr(":*?\"<>|",*p) )
5128eecc9f 2011-02-23        kinaba: 			*p = '_';
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	return st;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiutil::pathMakeAbs( char* path )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	int i=0;
5128eecc9f 2011-02-23        kinaba: 	for( char* p=path; *p!='\0'; step(p) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		if( i++ < 4 ) // 最初の4文字以内の \ はドライブを表す、ということにしておく。
5128eecc9f 2011-02-23        kinaba: 			continue;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		if( *p=='\\' )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			*p='\0';
5128eecc9f 2011-02-23        kinaba: 			CreateDirectory( path, NULL );
5128eecc9f 2011-02-23        kinaba: 			*p='\\';
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiutil::pathSplit( const char* path, int* y, int* d )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	*y=-1, *d=-1;
5128eecc9f 2011-02-23        kinaba: 	for( const char* x=path; *x!='\0'; step(x) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		if( *x=='\\' || *x=='/' )	*y=x-path,*d=-1;
5128eecc9f 2011-02-23        kinaba: 		else if( *x=='.' )			*d=x-path;
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: const char* kiutil::pathExt( const char* path )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	int y,d;
5128eecc9f 2011-02-23        kinaba: 	kiutil::pathSplit( path,&y,&d );
5128eecc9f 2011-02-23        kinaba: 	return (d!=-1) ? path+d+1 : path+strlen(path);
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: const char* kiutil::pathName( const char* path )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	int y,d;
5128eecc9f 2011-02-23        kinaba: 	kiutil::pathSplit( path,&y,&d );
5128eecc9f 2011-02-23        kinaba: 	return path+y+1;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #undef step
5128eecc9f 2011-02-23        kinaba: #undef isdblb
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: //////////////
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: char* kiutil::getline( char* str, int size, FILE* fp )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	if( size>0 )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		char* p=str;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		while( --size )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			int c = fgetc(fp);
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 			if( c<=0 ) // EOF || '\0'
5128eecc9f 2011-02-23        kinaba: 				break;
5128eecc9f 2011-02-23        kinaba: 			else if( c=='\n' )
5128eecc9f 2011-02-23        kinaba: 				break;
5128eecc9f 2011-02-23        kinaba: 			else if( c=='\r' )
5128eecc9f 2011-02-23        kinaba: 			{
5128eecc9f 2011-02-23        kinaba: 				c = fgetc(fp);
5128eecc9f 2011-02-23        kinaba: 				if( c!=EOF && c!='\n' )
5128eecc9f 2011-02-23        kinaba: 					ungetc( c,fp );
5128eecc9f 2011-02-23        kinaba: 				break;
5128eecc9f 2011-02-23        kinaba: 			}
5128eecc9f 2011-02-23        kinaba: 			else
5128eecc9f 2011-02-23        kinaba: 				*(p++) = c;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		*p='\0';
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	return feof(fp) ? NULL : str;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiutil::getOriginalName( char* nw, const char* od, char* ext )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	int y,d;
5128eecc9f 2011-02-23        kinaba: 	kiutil::pathSplit( od,&y,&d );
5128eecc9f 2011-02-23        kinaba: 	strcpy( nw,od+y+1 );
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	if( ext )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		strcat( nw,"." );
5128eecc9f 2011-02-23        kinaba: 		strcat( nw,ext );
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 	else
5128eecc9f 2011-02-23        kinaba: 		nw[d-y-1]='\0';
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: