Artifact Content

Not logged in

Artifact f3a830d4992fbcda67b50125da78c6f3dfaa2800


     1  //--- K.I.LIB ---
     2  // kl_carc.h : handling "common archivers' dll"
     3  
     4  #ifndef AFX_KIARCDLLRAW_H__C94DE2A0_4292_49CE_8471_2CAA1340D216__INCLUDED_
     5  #define AFX_KIARCDLLRAW_H__C94DE2A0_4292_49CE_8471_2CAA1340D216__INCLUDED_
     6  
     7  /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
     8  // 統合アーカイバDLL共通の定義
     9  
    10  // FNAME_MAX
    11  #if !defined(FNAME_MAX32)
    12  #define FNAME_MAX32	512
    13  #define	FNAME_MAX	FNAME_MAX32
    14  #else
    15  #if !defined(FNAME_MAX)
    16  #define	FNAME_MAX	128
    17  #endif
    18  #endif
    19  
    20  // CHECKARCHIVE
    21  #if !defined(CHECKARCHIVE_RAPID)
    22  #define	CHECKARCHIVE_RAPID		0
    23  #define	CHECKARCHIVE_BASIC		1
    24  #define	CHECKARCHIVE_FULLCRC	2
    25  #endif
    26  
    27  // ISARC
    28  #if !defined(ISARC_FUNCTION_START)
    29  #define ISARC_FUNCTION_START			0
    30  #define ISARC							0
    31  #define ISARC_GET_VERSION				1
    32  #define ISARC_GET_CURSOR_INTERVAL		2
    33  #define ISARC_SET_CURSOR_INTERVAL		3
    34  #define ISARC_GET_BACK_GROUND_MODE		4
    35  #define ISARC_SET_BACK_GROUND_MODE		5
    36  #define ISARC_GET_CURSOR_MODE			6
    37  #define ISARC_SET_CURSOR_MODE			7
    38  #define ISARC_GET_RUNNING				8
    39  
    40  #define ISARC_CHECK_ARCHIVE				16
    41  #define ISARC_CONFIG_DIALOG				17
    42  #define ISARC_GET_FILE_COUNT			18
    43  #define ISARC_QUERY_FUNCTION_LIST		19
    44  #define ISARC_HOUT						20
    45  #define ISARC_STRUCTOUT					21
    46  #define ISARC_GET_ARC_FILE_INFO			22
    47  
    48  #define ISARC_OPEN_ARCHIVE				23
    49  #define ISARC_CLOSE_ARCHIVE				24
    50  #define ISARC_FIND_FIRST				25
    51  #define ISARC_FIND_NEXT					26
    52  #define ISARC_EXTRACT					27
    53  #define ISARC_ADD						28
    54  #define ISARC_MOVE						29
    55  #define ISARC_DELETE					30
    56  #define ISARC_SETOWNERWINDOW			31
    57  #define ISARC_CLEAROWNERWINDOW			32
    58  #define ISARC_SETOWNERWINDOWEX			33
    59  #define ISARC_KILLOWNERWINDOWEX			34
    60  
    61  #define ISARC_GET_ARC_FILE_NAME			40
    62  #define ISARC_GET_ARC_FILE_SIZE			41
    63  #define ISARC_GET_ARC_ORIGINAL_SIZE		42
    64  #define ISARC_GET_ARC_COMPRESSED_SIZE	43
    65  #define ISARC_GET_ARC_RATIO				44
    66  #define ISARC_GET_ARC_DATE				45
    67  #define ISARC_GET_ARC_TIME				46
    68  #define ISARC_GET_ARC_OS_TYPE			47
    69  #define ISARC_GET_ARC_IS_SFX_FILE		48
    70  #define ISARC_GET_ARC_WRITE_TIME_EX		49
    71  #define ISARC_GET_ARC_CREATE_TIME_EX	50
    72  #define	ISARC_GET_ARC_ACCESS_TIME_EX	51
    73  #define	ISARC_GET_ARC_CREATE_TIME_EX2	52
    74  #define ISARC_GET_ARC_WRITE_TIME_EX2	53
    75  #define ISARC_GET_FILE_NAME				57
    76  #define ISARC_GET_ORIGINAL_SIZE			58
    77  #define ISARC_GET_COMPRESSED_SIZE		59
    78  #define ISARC_GET_RATIO					60
    79  #define ISARC_GET_DATE					61
    80  #define ISARC_GET_TIME					62
    81  #define ISARC_GET_CRC					63
    82  #define ISARC_GET_ATTRIBUTE				64
    83  #define ISARC_GET_OS_TYPE				65
    84  #define ISARC_GET_METHOD				66
    85  #define ISARC_GET_WRITE_TIME			67
    86  #define ISARC_GET_CREATE_TIME			68
    87  #define ISARC_GET_ACCESS_TIME			69
    88  #define ISARC_GET_WRITE_TIME_EX			70
    89  #define ISARC_GET_CREATE_TIME_EX		71
    90  #define ISARC_GET_ACCESS_TIME_EX		72
    91  #define ISARC_SET_ENUM_MEMBERS_PROC		80
    92  #define ISARC_CLEAR_ENUM_MEMBERS_PROC	81
    93  
    94  #define ISARC_FUNCTION_END				81
    95  #endif
    96  
    97  // ERROR
    98  #if !defined(ERROR_START)
    99  #define ERROR_START				0x8000
   100  	// warning
   101  #define ERROR_DISK_SPACE		0x8005
   102  #define ERROR_READ_ONLY			0x8006
   103  #define ERROR_USER_SKIP			0x8007
   104  #define ERROR_UNKNOWN_TYPE		0x8008
   105  #define ERROR_METHOD			0x8009
   106  #define ERROR_PASSWORD_FILE		0x800A
   107  #define ERROR_VERSION			0x800B
   108  #define ERROR_FILE_CRC			0x800C
   109  #define ERROR_FILE_OPEN			0x800D
   110  #define ERROR_MORE_FRESH		0x800E
   111  #define ERROR_NOT_EXIST			0x800F
   112  #define ERROR_ALREADY_EXIST		0x8010
   113  
   114  #define ERROR_TOO_MANY_FILES	0x8011
   115  	// error
   116  #define ERROR_MAKEDIRECTORY		0x8012
   117  #define ERROR_CANNOT_WRITE		0x8013
   118  #define ERROR_HUFFMAN_CODE		0x8014
   119  #define ERROR_COMMENT_HEADER	0x8015
   120  #define ERROR_HEADER_CRC		0x8016
   121  #define ERROR_HEADER_BROKEN		0x8017
   122  #define ERROR_ARC_FILE_OPEN		0x8018
   123  #define ERROR_NOT_ARC_FILE		0x8019
   124  #define ERROR_CANNOT_READ		0x801A
   125  #define ERROR_FILE_STYLE		0x801B
   126  #define ERROR_COMMAND_NAME		0x801C
   127  #define ERROR_MORE_HEAP_MEMORY	0x801D
   128  #define ERROR_ENOUGH_MEMORY		0x801E
   129  #if !defined(ERROR_ALREADY_RUNNING)
   130  #define ERROR_ALREADY_RUNNING	0x801F
   131  #endif
   132  #define ERROR_USER_CANCEL		0x8020
   133  #define ERROR_HARC_ISNOT_OPENED	0x8021
   134  #define ERROR_NOT_SEARCH_MODE	0x8022
   135  #define ERROR_NOT_SUPPORT		0x8023
   136  #define ERROR_TIME_STAMP		0x8024
   137  #define ERROR_TMP_OPEN			0x8025
   138  #define ERROR_LONG_FILE_NAME	0x8026
   139  #define ERROR_ARC_READ_ONLY		0x8027
   140  #define ERROR_SAME_NAME_FILE	0x8028
   141  #define ERROR_NOT_FIND_ARC_FILE 0x8029
   142  #define ERROR_RESPONSE_READ		0x802A
   143  #define ERROR_NOT_FILENAME		0x802B
   144  #define ERROR_TMP_COPY			0x802C
   145  #define ERROR_EOF				0x802D
   146  #define ERROR_ADD_TO_LARC		0x802E
   147  #define ERROR_TMP_BACK_SPACE	0x802F
   148  #define ERROR_SHARING			0x8030
   149  #define ERROR_NOT_FIND_FILE		0x8031
   150  #define ERROR_LOG_FILE			0x8032
   151  #define	ERROR_NO_DEVICE			0x8033
   152  #define ERROR_GET_ATTRIBUTES	0x8034
   153  #define ERROR_SET_ATTRIBUTES	0x8035
   154  #define ERROR_GET_INFORMATION	0x8036
   155  #define ERROR_GET_POINT			0x8037
   156  #define ERROR_SET_POINT			0x8038
   157  #define ERROR_CONVERT_TIME		0x8039
   158  #define ERROR_GET_TIME			0x803a
   159  #define ERROR_SET_TIME			0x803b
   160  #define ERROR_CLOSE_FILE		0x803c
   161  #define ERROR_HEAP_MEMORY		0x803d
   162  #define ERROR_HANDLE			0x803e
   163  #define ERROR_TIME_STAMP_RANGE	0x803f
   164  #define ERROR_MAKE_ARCHIVE		0x8040
   165  
   166  #define ERROR_END	ERROR_MAKE_ARCHIVE
   167  #define ERROR_BUF_TOO_SMALL		0x8041 /**/
   168  #endif
   169  
   170  // CONFIG
   171  #if !defined(UNPACK_CONFIG_MODE)
   172  #define	UNPACK_CONFIG_MODE	1
   173  #define	PACK_CONFIG_MODE	2
   174  #endif
   175  
   176  // OPENARCHIVE
   177  #if !defined(EXTRACT_FOUND_FILE)
   178  #define M_INIT_FILE_USE			0x00000001L
   179  #define M_REGARDLESS_INIT_FILE	0x00000002L
   180  #define M_NO_BACKGROUND_MODE	0x00000004L
   181  #define M_NOT_USE_TIME_STAMP	0x00000008L
   182  #define M_EXTRACT_REPLACE_FILE	0x00000010L
   183  #define M_EXTRACT_NEW_FILE		0x00000020L
   184  #define M_EXTRACT_UPDATE_FILE	0x00000040L
   185  #define M_CHECK_ALL_PATH		0x00000100L
   186  #define M_CHECK_FILENAME_ONLY	0x00000200L
   187  #define M_CHECK_DISK_SIZE		0x00000400L
   188  #define M_REGARDLESS_DISK_SIZE	0x00000800L
   189  #define M_USE_DRIVE_LETTER		0x00001000L
   190  #define M_NOT_USE_DRIVE_LETTER	0x00002000L
   191  #define M_INQUIRE_DIRECTORY		0x00004000L
   192  #define M_NOT_INQUIRE_DIRECTORY 0x00008000L
   193  #define M_INQUIRE_WRITE			0x00010000L
   194  #define M_NOT_INQUIRE_WRITE		0x00020000L
   195  #define M_CHECK_READONLY		0x00040000L
   196  #define M_REGARDLESS_READONLY	0x00080000L
   197  #define M_REGARD_E_COMMAND		0x00100000L
   198  #define M_REGARD_X_COMMAND		0x00200000L
   199  #define M_ERROR_MESSAGE_ON		0x00400000L
   200  #define M_ERROR_MESSAGE_OFF		0x00800000L
   201  #define M_BAR_WINDOW_ON			0x01000000L
   202  #define M_BAR_WINDOW_OFF		0x02000000L
   203  #define M_CHECK_PATH			0x04000000L
   204  #define M_RECOVERY_ON			0x08000000L
   205  
   206  #define M_MAKE_INDEX_FILE		0x10000000L
   207  #define M_NOT_MAKE_INDEX_FILE	0x20000000L
   208  #define EXTRACT_FOUND_FILE		0x40000000L
   209  #define EXTRACT_NAMED_FILE		0x80000000L
   210  #endif
   211  
   212  // ATTRIBUTE
   213  #ifndef FA_RDONLY
   214  #define FA_RDONLY       0x01
   215  #define FA_HIDDEN       0x02
   216  #define FA_SYSTEM       0x04
   217  #define FA_LABEL        0x08
   218  #define FA_DIREC        0x10
   219  #define FA_ARCH         0x20
   220  #endif
   221  #ifndef FA_ENCRYPTED
   222  #define FA_ENCRYPTED    0x40
   223  #endif
   224  
   225  // STRUCTURES
   226  #if defined(__BORLANDC__)
   227  #pragma option -a-
   228  #else
   229  #pragma pack(1)
   230  #endif
   231  
   232  typedef	HGLOBAL	HARCHIVE;
   233  
   234  #ifndef ARC_DECSTRACT
   235  #define ARC_DECSTRACT
   236  typedef	HGLOBAL	HARC;
   237  
   238  typedef struct {
   239  	DWORD	dwOriginalSize;
   240  	DWORD	dwCompressedSize;
   241  	DWORD	dwCRC;
   242  	UINT	uFlag;
   243  	UINT	uOSType;
   244  	WORD	wRatio;
   245  	WORD	wDate;
   246  	WORD	wTime;
   247  	char	szFileName[FNAME_MAX32 + 1];
   248  	char	dummy1[3];
   249  	char	szAttribute[8];
   250  	char	szMode[8];
   251  } INDIVIDUALINFO, FAR *LPINDIVIDUALINFO;
   252  
   253  typedef struct {
   254  	DWORD	dwFileSize;
   255  	DWORD	dwWriteSize;
   256  	char	szSourceFileName[FNAME_MAX32 + 1];
   257  	char	dummy1[3];
   258  	char	szDestFileName[FNAME_MAX32 + 1];
   259  	char	dummy[3];
   260  } EXTRACTINGINFO, FAR *LPEXTRACTINGINFO;
   261  
   262  typedef struct {
   263  	EXTRACTINGINFO exinfo;
   264  	DWORD dwCompressedSize;
   265  	DWORD dwCRC;
   266  	UINT  uOSType;
   267  	WORD  wRatio;
   268  	WORD  wDate;
   269  	WORD  wTime;
   270  	char  szAttribute[8];
   271  	char  szMode[8];
   272  } EXTRACTINGINFOEX, *LPEXTRACTINGINFOEX;
   273  #endif
   274  
   275  #if !defined(__BORLANDC__)
   276  #pragma pack()
   277  #else
   278  #pragma option -a.
   279  #endif
   280  
   281  #if !defined(__BORLANDC__)
   282  #define	_export
   283  #endif
   284  
   285  // WindowsMessage
   286  #ifndef WM_ARCEXTRACT
   287  #define	WM_ARCEXTRACT	"wm_arcextract"
   288  #define	ARCEXTRACT_BEGIN		0
   289  #define	ARCEXTRACT_INPROCESS	1
   290  #define	ARCEXTRACT_END			2
   291  #define ARCEXTRACT_OPEN			3
   292  #define ARCEXTRACT_COPY			4
   293  typedef BOOL CALLBACK ARCHIVERPROC(HWND,UINT,UINT,LPEXTRACTINGINFOEX);
   294  typedef ARCHIVERPROC *LPARCHIVERPROC;
   295  #endif
   296  
   297  /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
   298  // 統合アーカイバDLLを非常に薄く覆うレイヤ
   299  
   300  class kiArcDLLRaw  
   301  {
   302  public: //-- 外向きインターフェイス --------------------------
   303  
   304  	// DLL名で初期化。
   305  	kiArcDLLRaw( const char* dllname );
   306  	kiPath& name()
   307  		{ return m_DllPath; }
   308  
   309  	// DLLが生きているかどうか。
   310  	bool isAlive();
   311  
   312  	// API のラッパ [ DLLやAPIが無いときの返値 ]
   313  
   314  		// バージョンx100 [ 0 ]
   315  		WORD getVer();
   316  		// バージョンサブx100 [ 0 ]
   317  		WORD getVerSub();
   318  		// コマンド送り [ ERROR_NOT_SUPPORT ]
   319  		int command( const HWND wnd, LPCSTR cmd, LPSTR buf, const DWORD siz );
   320  		// 書庫チェック [ FALSE ]
   321  		BOOL check( LPCSTR filename, const int mode );
   322  		// 書庫の種類 [ 0 ]
   323  		int getArcType( LPCSTR filename );
   324  
   325  		// 開く [ NULL ]
   326  		HARC openArc( const HWND wnd, LPCSTR arcname, const DWORD flag );
   327  		// 閉じる
   328  		void closeArc( HARC arc );
   329  		// 一つ目を検索 [ ERROR_NOT_SUPPORT ]
   330  		int findfirst( HARC arc, LPCSTR wildname, INDIVIDUALINFO* inf );
   331  		// 二つ目以降を検索 [ ERROR_NOT_SUPPORT ]
   332  		int findnext( HARC arc, INDIVIDUALINFO* inf );
   333  		// 属性取得 [ 0 ]
   334  		int getAttr( HARC arc );
   335  
   336  		// オーナー指定 [ FALSE ]
   337  		BOOL setOwner( HWND wnd );
   338  		// オーナー解除 [ FALSE ]
   339  		BOOL clearOwner();
   340  
   341  	// ※load系は呼ばなくても内部で何とかするのでできれば使わないこと。
   342  	bool load();
   343  	void unload();
   344  
   345  private: //-- 内部処理 -----------------------------------
   346  
   347  	HINSTANCE m_hDLL;
   348  	bool not_loaded_yet;
   349  
   350  	kiPath m_DllPath;
   351  	kiStr m_DllNameBody;
   352  	FARPROC getProc( const char* procname );
   353  
   354  	FARPROC m_Proc[ ISARC_FUNCTION_END ];
   355  	FARPROC f_VSb;
   356  #define f_Cmd m_Proc[ ISARC ]
   357  #define f_Chk m_Proc[ ISARC_GET_VERSION ]
   358  #define f_Gat m_Proc[ 13 ]
   359  #define f_Ver m_Proc[ ISARC_CHECK_ARCHIVE ]
   360  #define f_Opn m_Proc[ ISARC_OPEN_ARCHIVE ]
   361  #define f_Cls m_Proc[ ISARC_CLOSE_ARCHIVE ]
   362  #define f_Ffs m_Proc[ ISARC_FIND_FIRST ]
   363  #define f_Fnx m_Proc[ ISARC_FIND_NEXT ]
   364  #define f_GAr m_Proc[ ISARC_GET_ATTRIBUTE ]
   365  #define f_SOw m_Proc[ ISARC_SETOWNERWINDOW ]
   366  #define f_COw m_Proc[ ISARC_CLEAROWNERWINDOW ]
   367  
   368  public:
   369  	virtual ~kiArcDLLRaw();
   370  };
   371  
   372  #endif