[PR]

水無瀬の部屋 > Programming > sample > cur2cpp > cur2cpp.cpp
最終更新日: 2007/03/29

   1: //*********************************************************
   2: // プロジェクト: cur2cpp
   3: //   ファイル名: cur2cpp.cpp
   4: //*********************************************************
   5: #include "cur2cpp.h"
   6: #include "instdlg.h"  //
   7: #include "loadcur.h"
   8: #include "putcpp.h"
   9: #include "cmdline.h"
  10: #include <filefmt/curfile.h>
  11: #include <filefmt/bmpfile.h>
  12: #include <misc/pathargv.h>
  13: 
  14: 
  15: //---------------------------------------------------------
  16: // マクロ定数 の 定義
  17: //---------------------------------------------------------
  18: //
  19: #define MUTEX_INSTALLDLG  ( "cur2cpp.InstallDlg" )
  20: //
  21: #define MODE_CUR2CPP  ( 1 )  // 変換実行
  22: #define MODE_INSTALL  ( 2 )  // インストール
  23: 
  24: 
  25: //---------------------------------------------------------
  26: // ファイルスコープ関数 の 宣言
  27: //---------------------------------------------------------
  28: static int GetApplicationMode( int argc, char **argv );
  29: static int CommandLineApplicationMainProc( HINSTANCE hInstance, int argc, char **argv );
  30: static int ApplicationInstallMainProc( HINSTANCE hInstance, int argc, char **argv );
  31: 
  32: 
  33: //*********************************************************
  34: // ApplicationMainProc
  35: //*********************************************************
  36: int
  37: ApplicationMainProc
  38: 	(
  39: 		HINSTANCE   hInstance,
  40: 		int         argc,
  41: 		char      **argv
  42: 	)
  43: {
  44: 	// パラメタの仮定
  45: 	ASSERT( IsValidInstanceHandle( hInstance ) );
  46: 	ASSERT( IsValidArgcArgv( argc, argv ) );
  47: 	ASSERT( IsPathMyself( argv[ 0 ] ) ); // 自分自身
  48: 
  49: 	//
  50: 	const int mode = GetApplicationMode( argc, argv );
  51: 	switch( mode )
  52: 	{
  53: 		default:           return EXIT_FAILURE;
  54: 		case MODE_CUR2CPP: return CommandLineApplicationMainProc( hInstance, argc, argv );
  55: 		case MODE_INSTALL: return ApplicationInstallMainProc( hInstance, argc, argv );
  56: 	}	
  57: }//ApplicationMainProc
  58: 
  59: 
  60: //******************************************************************************************************************
  61: // private
  62: //******************************************************************************************************************
  63: //*********************************************************
  64: // GetApplicationMode
  65: //*********************************************************
  66: static
  67: int
  68: GetApplicationMode
  69: 	(
  70: 		int    argc,
  71: 		char **argv
  72: 	)
  73: {
  74: 	// パラメタの仮定
  75: 	ASSERT( IsValidArgcArgv( argc, argv ) );
  76: 	ASSERT( IsPathMyself( argv[ 0 ] ) ); // 自分自身
  77: 
  78: 	// 引数が無ければ 設定 モード
  79: 	return (1 < argc) ? MODE_CUR2CPP : MODE_INSTALL ;
  80: }//GetApplicationMode
  81: 
  82: 
  83: //******************************************************************************************************************
  84: // private - MODE_INSTALL
  85: //******************************************************************************************************************
  86: //*********************************************************
  87: // ApplicationInstallMainProc
  88: //*********************************************************
  89: static
  90: int
  91: ApplicationInstallMainProc
  92: 	(
  93: 		HINSTANCE   hInstance,
  94: 		int         argc,
  95: 		char      **argv
  96: 	)
  97: {
  98: 	// パラメタの仮定
  99: 	ASSERT( IsValidInstanceHandle( hInstance ) );
 100: 	ASSERT( IsValidArgcArgv( argc, argv ) );
 101: 	ASSERT( IsPathMyself( argv[ 0 ] ) ); // 自分自身
 102: 
 103: 	//
 104: 	HANDLE hMutex = CreateMutexOnce( MUTEX_INSTALLDLG );
 105: 	if ( hMutex )
 106: 	{
 107: 		InstallDlg( HWND_DESKTOP );
 108: 		VERIFY( CloseHandle( hMutex ) );
 109: 	}
 110: 
 111: 	return EXIT_SUCCESS;
 112: }//ApplicationInstallMainProc
 113: 
 114: 
 115: //******************************************************************************************************************
 116: // private - MODE_CUR2CPP
 117: //******************************************************************************************************************
 118: static FILE *CreateCodeFile( const char *curfile );
 119: 
 120: 
 121: //*********************************************************
 122: // CommandLineApplicationMainProc
 123: //*********************************************************
 124: static
 125: int
 126: CommandLineApplicationMainProc
 127: 	(
 128: 		HINSTANCE   hInstance,
 129: 		int         argc,
 130: 		char      **argv
 131: 	)
 132: {
 133: 	// パラメタの仮定
 134: 	ASSERT( IsValidInstanceHandle( hInstance ) );
 135: 	ASSERT( IsValidArgcArgv( argc, argv ) );
 136: 	ASSERT( IsPathMyself( argv[ 0 ] ) ); // 自分自身
 137: 	
 138: 	//
 139: 	const DWORD flags = get_cmdline_option( argc, argv );
 140: 
 141: 	//
 142: 	int count;
 143: 	char **paths = GetPathArgcArgv( &count, argc - 1 , argv + 1 );
 144: 	if ( paths )
 145: 	{
 146: 		{for( int i = 0; i < count; ++i )
 147: 		{
 148: 			if ( IsPathFile( paths[ i ] ) )
 149: 			{
 150: 				// カーソルを読み込む
 151: 				FILE *fr = fopen( paths[ i ], "rb" );
 152: 				if ( fr )
 153: 				{
 154: 					MONOCHROMECURSORFILEDATA_t *cursor = LoadMonochromeCursorFileData( fr );
 155: 					if ( cursor )
 156: 					{
 157: 						char *code = GenerateCode( &cursor->cih, &cursor->bih, cursor->maskXOR, cursor->maskAND );
 158: 						if ( code )
 159: 						{
 160: 							// クリップボードへ
 161: 							if ( FLAG_TOCLIPBOARD == (FLAG_TOCLIPBOARD & flags) )
 162: 							{
 163: 								SetClipboardText( HWND_DESKTOP, code );
 164: 							}
 165: 
 166: 							// ファイルへ
 167: 							if ( FLAG_TOFILE == (FLAG_TOFILE & flags) )
 168: 							{
 169: 								FILE *fw = CreateCodeFile( paths[ i ] );
 170: 								if ( fw )
 171: 								{
 172: 									fputs( code, fw );
 173: 									VERIFY( 0 == fclose( fw ) );
 174: 								}
 175: 							}
 176: 							free( code );
 177: 						}
 178: 
 179: 						// カーソルを破棄する
 180: 						VERIFY( ReleaseMonochromeCursorFileData( cursor ) );
 181: 					}
 182: 					VERIFY( 0 == fclose( fr ) );
 183: 				}
 184: 			}
 185: 		}}
 186: 		VERIFY( ReleasePathArgcArgv( count, paths ) );
 187: 	}
 188: 
 189: 	return EXIT_SUCCESS;
 190: }//CommandLineApplicationMainProc
 191: 
 192: //*********************************************************
 193: // CreateCodeFile
 194: //   body.cur => body.cpp
 195: //*********************************************************
 196: static
 197: FILE *
 198: CreateCodeFile
 199: 	(
 200: 		const char *curfile
 201: 	)
 202: {
 203: 	// パラメタの仮定
 204: 	ASSERT( IsPathFile( curfile ) );
 205: 
 206: 	char cppfile[ MAX_PATH_BUF ];
 207: 	strcopy( cppfile, numof( cppfile ), curfile );
 208: 	SwapFileExtension( cppfile, numof( cppfile ), ".cpp" );
 209: 
 210: 	// 既にディレクトリがある
 211: 	// これを上書きするわけにはいかない
 212: 	if ( IsPathDirectory( cppfile ) )
 213: 	{
 214: 		return null;
 215: 	}
 216: 
 217: 	// 既にファイルがあれば上書きする前にゴミ箱へバックアップする
 218: 	if ( IsPathFile( cppfile ) )
 219: 	{
 220: 		char backupfile[ MAX_PATH_BUF ];
 221: 		VERIFY( 0 < snprintf( backupfile, numof(backupfile)-1, "%s%c%c", cppfile, '\0', '\0' ) );
 222: 		MoveFileToRecycleBin( HWND_DESKTOP, backupfile, FOF_SILENT| FOF_NOCONFIRMATION );
 223: 		Sleep( 100 );
 224: 	}
 225: 
 226: 	return fopen( cppfile, "wb" );
 227: }//CreateCodeFile
 228: 
 229: 
 230: //** end **

参照:


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬の部屋 > sample > cur2cpp > cur2cpp.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/cur2cpp/cur2cpp_cpp.shtml
『新妻LOVELY×CATION』を応援しています!