2009.11.29 Sunday | 18:33

  総合 ふるいむかし

■ Flex3
	● FLARToolkit
	WEB カメ くらぶ
	Metasequoia.as 拡張クラス ( ローカルの zip 書庫内のファイルをロードする )
	Flex3 : FLARToolKitをベースとして、単純画像/3D画像/3D球体を乗っけてpngに保存
	● PV3D
	Flex3 : Papervision3D+KMZとDAE拡張(ローカルPCのzipファイルをロードして表示)
	Flex3 : Papervision3D で、3D平面をローカルPCの画像でCanvas に表示してクリックで移動し、マウス位置で回転
	● KMZ MQO DAE
	● 伝票入力
	● Zipfie
	● 手書きブログ用3D化コンテンツ

■ コマンドプロンプト
	● input.exe 作成
	コマンドプロンプト : 表示位置を指定できる locate.exe
	コマンドプロンプト : 初期値を設定できる行入力
	laylaClass バッチ処理支援パッケージ ( バッチ処理 )

■ ORACLE
	少しづつ Oracle
	● バックアップ
	エクスポート
	Oracle : スキーマエクスポート( expdp.hta ) : コマンドライン入力支援
	● インポート
	Oracle : 同一スキーマテーブルインポート : コマンドライン入力支援
	Oracle : 別スキーマテーブルデータインポート : コマンドライン入力支援
	Oracle : 別スキーマテーブル置き換えインポート : コマンドライン入力支援
	● PL/SQL

■ Win32API
	● lightbox.lib 内コード整備( C言語マテリアル )
	キー入力作成
	キー入力作成
	( Flash と連携 )
	● VB.NET
	構造体をファイルに書き込む 


■ サイト整備
	● XML サイドリンク更新
	● リンクページ用ポップアップメニュー作成

■ VB.NET
	● Filezilla 用ビュアー選択アプリ

■ VB.NET 2Dゲーム
	● SHOT クラス
	● BACKGROUND クラス
	VB.NET による EasyGame ( まずは基本クラスと初期処理のみ )

■ PHP
	● Zipfie

■ Ruby
	● mixi + Twitter
	mixi ボイス投稿

■ IE 拡張メニュー
	IE拡張メニュー

■ ブックマークレット
	JS : ブックマークレットのスケルトン
	Googleのドメイン内検索を任意のページで実行
	Seesaa(さくら)専用リンクデータ移行処理

■ Shell
	● ツールボックス
	デスクトップ整理 ( Shell 拡張 )
	◎ IE のツールメニューに応用可能か?


■ フリーソフト
	Google Chrome を使ったデトクトップ用HTMLドキュメント登録(OpenFileName)
	Apche 仮想ディレクトリ自動登録のテストと紹介
	VBScript + ADO : 汎用CSV出力

■ その他
	● sqlite 総合
	SQLite3 : 日本語販売管理データ
	Flex3 : AIR : SQLite のテーブル一覧
	PHP : SQLite3 を PDO の ODBC 経由で読み込み
	PHP : 5.3 / 5.2.11 用共用 sqlite3(日本語テーブル) 読み込み
	PHP : 5.3 / 5.2.11 共用 sqlite3 作成
	SQLite DBの作成と スキーマ情報取得と DataGrid へ一括ロード
	● Google ストリートビュー貼り付けまとめ
	Googleストリートビュー埋め込みコード取得

	bonurd.winofsql.jp のトップに総合メニューを作成




2009.10.31 Saturday | 09:49

  gd を c から ふるいむかし

ここにはソース長すぎるので。

gd を c から

LboxGd

if ( Commdlg->OpenFileName( FilePath ) ) {
	Dlg->EditSetText( IDC_READONLY, FilePath );
	if ( !(Gd->Load(FilePath)) ) {
		Dlg->MsgOk("ERR");
		break;
	}

	LboxString SavePath;
	Tool.ProgramDirectory( &SavePath );
	SavePath.AddBackslash();
	SavePath.operator += ("SAVE.PNG");

	LboxGd Gd2;

	Gd->Copy( &Gd2, 50 );

	Gd2.Save( &SavePath );
}


// *********************************************************
// 伸縮コピー
// 戻り値 : true 成功, false 失敗
// *********************************************************
BOOL LboxGd::Copy( LboxGd *objGD, int nRate )
{
	if ( this->lib == NULL ) {
		this->SetLibLoadErrorMessage();
		return false;
	}

	LPFUNC_gdImageCopyResampled Dll_gdImageCopyResampled;

	Dll_gdImageCopyResampled =
		(LPFUNC_gdImageCopyResampled)GetProcAddress(
			lib, "gdImageCopyResampled@40"
		);
	if ( Dll_gdImageCopyResampled == NULL ) {
		this->SetFuncLoadErrorMessage();
		return false;
	}

	int w,w2;
	int h,h2;

	this->GetImageSize( &w, &h );
	w2 = (double)w * ( (double)nRate / (double)100 );
	h2 = (double)h * ( (double)nRate / (double)100 );

	gdImagePtr im_in;
	gdImagePtr im_out;

	if ( !(objGD->Create( w2, h2 )) ) {
		return false;
	}

	im_in = (gdImagePtr)(this->gd);
	im_out = (gdImagePtr)(objGD->gd);

	Dll_gdImageCopyResampled(
		im_out,
		im_in,
		0, 0, 0, 0,
		w2, h2,
		w, h
	);

	return true;
}



2009.10.31 Saturday | 09:33

  SendMessage と PostMessage のフック ふるいむかし

こいつは dll である必要があります
// LboxHook.cpp : DLL アプリケーション用のエントリ ポイントを定義します。
//

#include "stdafx.h"
#include "LboxHook.h"
#include <lightbox.h>

HINSTANCE hInst;

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
	
	hInst = (HINSTANCE)hModule;

    return TRUE;
}


// これはエクスポートされた変数の例です。
LBOXHOOK_API int nLboxHook=0;

// これはエクスポートされた関数の例です。
LBOXHOOK_API int fnLboxHook(void)
{
	return 42;
}

// これはエクスポートされたクラスのコンストラクタです。
// クラスの定義については LboxHook.h を参照してください。
CLboxHook::CLboxHook()
{ 
	return; 
}

// SendMessge のフックハンドル
static HHOOK hhk = NULL;
// PostMessge のフックハンドル
static HHOOK hhkPost = NULL;

// *********************************************************
// SendMessge のフック処理
// *********************************************************
LRESULT CALLBACK CallWndRetProc(
  int nCode,
  WPARAM wParam,
  LPARAM lParam
)
{
	if ( nCode < 0 ) {
		return CallNextHookEx( hhk, nCode, wParam, lParam );
	}

	HANDLE hMutex;

	hMutex = OpenMutex(
		SYNCHRONIZE,
		false,
		"LboxHook"
	);
	if ( hMutex != NULL ) {
		WaitForSingleObject(hMutex, INFINITE);

		CWPRETSTRUCT *msg;
		char szClass[512];
		char szTitle[512];

		msg = (CWPRETSTRUCT *)lParam;
		if ( msg->message == WM_COMMAND ) {
			GetClassName( msg->hwnd, szClass, 512 );
			GetWindowText( msg->hwnd, szTitle, 512 );

			LboxInfo Info;
			LboxString LString;
			LboxTextFile Txt;

			Info.TempPath( &LString );
			LString.AddBackslash();
			LString.operator += ("LboxHook.log");

			if( Txt.AppendOpen( &LString ) ) {
				Info.Time( &LString );
				Txt.PutPrintf(
					"%s:"
					"SEND:WM_COMMAND:"
					"%lu:%u:%u:%lu:%s:%s\n",
					LString.szLboxString,
					msg->hwnd,
					LOWORD(msg->wParam),
					HIWORD(msg->wParam),
					lParam,
					szClass,
					szTitle
				);
				Txt.Close();
			}

		}
		ReleaseMutex(hMutex);
		CloseHandle(hMutex);
	}

	return CallNextHookEx( hhk, nCode, wParam, lParam );

}
// *********************************************************
// PostMessge のフック処理
// *********************************************************
LRESULT CALLBACK GetMsgProc(
  int nCode,
  WPARAM wParam,
  LPARAM lParam
)
{
	if ( nCode < 0 ) {
		return CallNextHookEx( hhkPost, nCode, wParam, lParam );
	}

	HANDLE hMutex;

	hMutex = OpenMutex(
		SYNCHRONIZE,
		false,
		"LboxHook"
	);
	if ( hMutex != NULL ) {
		WaitForSingleObject(hMutex, INFINITE);

		MSG *msg;
		char szClass[512];
		char szTitle[512];

		msg = (MSG *)lParam;
		if ( msg->message == WM_COMMAND ) {
			GetClassName( msg->hwnd, szClass, 512 );
			GetWindowText( msg->hwnd, szTitle, 512 );

			LboxInfo Info;
			LboxString LString;
			LboxTextFile Txt;

			Info.TempPath( &LString );
			LString.AddBackslash();
			LString.operator += ("LboxHook.log");

			if( Txt.AppendOpen( &LString ) ) {
				Info.Time( &LString );
				Txt.PutPrintf(
					"%s:"
					"POST:WM_COMMAND:"
					"%lu:%u:%u:%lu:%s:%s\n",
					LString.szLboxString,
					msg->hwnd,
					LOWORD(msg->wParam),
					HIWORD(msg->wParam),
					lParam,
					szClass,
					szTitle
				);
				Txt.Close();
			}

		}
		ReleaseMutex(hMutex);
		CloseHandle(hMutex);
	}

	return CallNextHookEx( hhk, nCode, wParam, lParam );

}

extern "C" { 
// *********************************************************
// システムフックのインストール
// *********************************************************
LBOXHOOK_API void Initialize( void )
{
	if ( hhk == NULL ) {
		// ミューテックス作成
		CreateMutex(
			NULL,
			false,
			"LboxHook"
		);

		// システムフックの実装
		hhk = SetWindowsHookEx(
			WH_CALLWNDPROCRET,
			CallWndRetProc,
			hInst,
			0				
		);
		hhkPost = SetWindowsHookEx(
			WH_GETMESSAGE,
			GetMsgProc,
			hInst,
			0				
		);
	}
}

// *********************************************************
// システムフック解放
// *********************************************************
LBOXHOOK_API void End( void )
{
	if ( hhk != NULL ) {
		UnhookWindowsHookEx( hhk );
		hhk = NULL;
	}
	if ( hhkPost != NULL ) {
		UnhookWindowsHookEx( hhkPost );
		hhkPost = NULL;
	}
}
}




2009.10.31 Saturday | 09:23

  DSN 作成 ( これは比較的新しい ) : 2006 ふるいむかし

システム DSN + MDB なんで、Tomacat 用に作った奴です。
#include "stdafx.h"

#include <windows.h>
#include <odbcinst.h>

int main( int argc, char *argv[] )
{
	// システム DSN 削除	
	SQLConfigDataSource(
		NULL,
		ODBC_REMOVE_SYS_DSN,
		"Microsoft Access Driver (*.mdb)",
		"DSN=jspMDBlightbox\0" 
	);

	char buff[4096];
	memset( buff, 0x00, 4096 );

	char *ptr;

	ptr = buff;
	strcpy( ptr, "DSN=jspMDBlightbox" );
	ptr += strlen( ptr ) + 1;
	strcpy( ptr, "DBQ=" );
	strcat( ptr, argv[1] );
	ptr += strlen( ptr ) + 1;
	strcpy( ptr, "MaxBufferSize=2048" );
	ptr += strlen( ptr ) + 1;
	strcpy( ptr, "PageTimeout=5" );
	ptr += strlen( ptr ) + 1;
	strcpy( ptr, "FIL=MS Access" );

	// システム DSN 作成	
	SQLConfigDataSource(
		NULL,
		ODBC_ADD_SYS_DSN,
		"Microsoft Access Driver (*.mdb)",
		buff
	);

	return 0;
}




2009.10.31 Saturday | 09:05

  MLOOP.H 利用サンプル ふるいむかし

要するに好きなループプロックを抜け出せるようにしていたんだっけ
たしか、while と for を統合していたような記憶もある・・・

MLOOP.H
//**********************************************************
//
//   複数ワイルドカード作成関数
//
//   wldline にセットされた複合ワイルドカードを、
//   単一のワイルドカードに分解し、chkwld でチェックする
//
//**********************************************************
extern
int
chkwldline( char *fname, char *wldline )
{

   int rtn;			// 戻り値

	char wldbase[128];		// トークン取り出し用のベースワーク
	int  basesw;			// strtok 用スイッチ
	int  basecnt;		// ベーストークン用カウンター
	char *baseptr[40];		// ベーストークンポインタ

	char *wldptr[40];		// 複合ワイルドカード(ファイルメイ)用トークンポインタ
	char *wldptr2[40];		// 複合ワイルドカード(カクチョウシ)用トークンポインタ
	int  wldcnt;			// ファイル名用カウンター	
	int  wldcnt2;		// 拡張子用カウンター
	char wlds[128];		// 複合ワイルドカード用ワーク
	int  wldsw;			// strtok 用スイッチ
	char *dptr;			// "." の次の文字列へのポインタ
	char *sts;			// "." の有無
	char chkstring[128];		// chkwld 用文字列エリア
	char ids[128];		// "." 以降のセーブエリア


//*********************************************************
//	初期設定
//*********************************************************
	rtn = -1;
	basesw = 0;
	strcpy( wldbase, wldline );
	AnsiUpper( wldbase );		// 小文字を大文字に変換


//*********************************************************
//	スペースを区切り文字として複合ワイルドカードの分解
//	し、ベーストークンを作成する
//*********************************************************
	basecnt = 0;
	MLOOP

		if ( basesw == 0 ) {
			baseptr[basecnt] = jstrtok( wldbase, " " );
			basesw = 1;
		}
		else {
			baseptr[basecnt] = jstrtok( NULL, " " );
		}

		if ( baseptr[basecnt] == NULL ) {
			BREAK(1)
		}

		basecnt++;
		if ( basecnt > 18 ) {
			baseptr[basecnt] = NULL;
			BREAK(1)
		}

	END


//*********************************************************
//	ベーストークンの繰り返し
//*********************************************************
	basecnt = 0;
	MLOOP

		if ( baseptr[basecnt] == NULL ) {		// 全く合致しなかった
			BREAK(1)
		}
						// ベーストークンをワークへ
		strcpy( wlds, baseptr[basecnt] );
		sts = strchr( wlds, '.' );		// "." の有無をチェツク
		if ( sts != NULL ) {
			dptr = jstrtok( wlds, "." );
			dptr = jstrtok( NULL, "." );		// dptr は拡張子の先頭を指す
		}

//*********************************************************
//	複合ワイルドカードに "." がない時
//*********************************************************
		if ( sts == NULL ) {

			wldsw = 0;
			wldcnt = 0;
			LOOP				// ファイル名の分解

				if ( wldsw == 0 ) {
					wldptr[wldcnt] = jstrtok( wlds, "/|" );
					wldsw = 1;
				}
				else {
					wldptr[wldcnt] = jstrtok( NULL, "/|" );
				}

				if ( wldptr[wldcnt] == NULL ) {
					BREAK(1)
				}

				wldcnt++;
				if ( wldcnt > 18 ) {
					 wldptr[wldcnt] = NULL;
					 BREAK(1)
				}

			ENDLOOP

			wldcnt = 0;
			LOOP				// チェックループ

				if ( wldptr[wldcnt] == NULL ) {
					BREAK(1)
				}

				rtn = chkwld( fname, wldptr[wldcnt] );
				if ( rtn == 1 ) {		// 一つでも合致するとOK
					BREAK(2)
				}
				wldcnt++;

			ENDLOOP

		}

//*********************************************************
//	複合ワイルドカードに "." がある時
//*********************************************************
		else {

			wldsw = 0;
			wldcnt = 0;
			LOOP				// ファイル名の分解

				if ( wldsw == 0 ) {
					wldptr[wldcnt] = jstrtok( wlds, "/|" );
					wldsw = 1;
				}
				else {
					wldptr[wldcnt] = jstrtok( NULL, "/|" );
				}

				if ( wldptr[wldcnt] == NULL ) {
					BREAK(1)
				}

				wldcnt++;
				if ( wldcnt > 18 ) {
					 wldptr[wldcnt] = NULL;
					 BREAK(1)
				}

			ENDLOOP

			wldcnt = 0;
			LOOP					// ファイル名のループ

				if ( wldptr[wldcnt] == NULL ) {
					BREAK(1)
				}

				wldsw = 0;
				wldcnt2 = 0;
				strcpy( ids, dptr );
				LOOP				// 拡張子の分解

					if ( wldsw == 0 ) {
						wldptr2[wldcnt2] = jstrtok( ids, "/|" );
						wldsw = 1;
					}
					else {
						wldptr2[wldcnt2] = jstrtok( NULL, "/|" );
					}

					if ( wldptr2[wldcnt2] == NULL ) {
						BREAK(1)
					}

					wldcnt2++;
					if ( wldcnt2 > 18 ) {
						wldptr2[wldcnt2] = NULL;
						BREAK(1)
					}

				ENDLOOP

				wldcnt2 = 0;
				LOOP				// チェックループ

					if ( wldptr2[wldcnt2] == NULL ) {
						BREAK(1)
					}
				// ファイル名と拡張子より wldchk 用文字列作成
					strcpy( chkstring, wldptr[wldcnt] );
					strcat( chkstring, "." );
					strcat( chkstring, wldptr2[wldcnt2] );

					rtn = chkwld( fname, chkstring );
					if ( rtn == 1 ) {	// 一つでも合致するとOK
						BREAK(3)
					}

					wldcnt2++;

				ENDLOOP

				wldcnt++;

			ENDLOOP

		}

		basecnt++;

	END

	return( rtn );

}




2009.10.31 Saturday | 08:58

  MLOOP.H ふるいむかし

loop 処理をマクロにしたものですが、
もう、良く覚えていません・・・・
利用サンプルを次の記事に貼ります
MLOOP.H 利用サンプル
#define MLOOP \
   { \
   while(1) { \
      static int sw_continue = 0; \
      if ( sw_continue >= 1 ) { \
         sw_continue = 0; \
         break; \
      } \
      if ( sw_continue <= -1 ) { \
         sw_continue = 0; \
         break; \
      } \

#define MLOOPX(p1,p2,p3) \
   { static int loop_dummy; \
   loop_dummy = 0; \
   while(1) { \
      static int sw_continue = 0; \
      if ( loop_dummy == 0 ) { \
         p1; \
         loop_dummy = 1; \
      } \
      else { \
         p3; \
      } \
      if ( sw_continue >= 1 ) { \
         sw_continue = 0; \
         break; \
      } \
      if ( sw_continue <= -1 ) { \
         sw_continue = 0; \
         break; \
      } \
      if ( (p2) == 0 ) { \
         break; \
      }

#define LOOP \
   { \
   while(1) { \
      if ( sw_continue >= 1 ) { \
         sw_continue--; \
         break; \
      } \
      if ( sw_continue <= -1 ) { \
         break; \
      } \

#define LOOPX(p1,p2,p3) \
   { static int loop_dummy; \
   loop_dummy = 0; \
   while(1) { \
      if ( loop_dummy == 0 ) { \
         p1; \
         loop_dummy = 1; \
      } \
      else { \
         p3; \
      } \
      if ( sw_continue >= 1 ) { \
         sw_continue--; \
         break; \
      } \
      if ( sw_continue <= -1 ) { \
         break; \
      } \
      if ( (p2) == 0 ) { \
         break; \
      }

#define CONTINUE(a) \
   sw_continue = -1 * a; \
   continue;

#define BREAK(a) \
   sw_continue = a; \
   continue;

#define END \
   }}

#define ENDMAIN \
   }}

#define ENDLOOP \
   } \
   if ( sw_continue >= 1 ) { \
      continue; \
   } \
   if ( sw_continue <= -1 ) { \
      sw_continue++; \
      continue; \
   }}




1/24 >>