More ... | hspcmp:packfile.cpackfile.c
/*-------------------------------------------------------- packfile proc 1997/10 onitama --------------------------------------------------------*/ #include <windows.h> #include <windowsx.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <direct.h> static char szCDir[_MAX_PATH]; static char szDefDir[_MAX_PATH]; static char szFilt[128]; static int enc_mode; // 暗号化モード(1=normal/2=encode) typedef struct PFDIR { // PackFile directory list structure // int flag; char fname[128]; char pname[_MAX_PATH]; } PFDIR; #define pfmax 2048 static PFDIR *mem_pf; static PFDIR *pf; int pid; // // PackFile manager routines // void pf_ini( void ) { int a; mem_pf = (PFDIR *)malloc(sizeof(PFDIR)*pfmax); for( a = 0; a < pfmax; a++) { pf = &mem_pf[a]; pf->flag = 0; pf->fname[0] = 0; pf->pname[0] = 0; } pid = 0; enc_mode = 1; } void pf_bye( void ) { free( mem_pf ); } void pf_add( char *fname, char *pname ) { int a, i; char nam[128]; if ( *fname == 0 ) return; if ( pname[strlen( pname ) - 1] != '\\' ) strcat( pname, "\\" ); a = 0; if ( pid ) { for( i = 0; i < pid; i++ ) { pf = &mem_pf[i]; if ( strcmp( pf->fname, fname ) == 0 ) a++; } } if ( a ) { /* #ifdef JPMSG MessageBox ( hDlg, "すでに登録されているファイル名です。", "packfile warning", MB_OK | MB_ICONEXCLAMATION); #else MessageBox ( hDlg, "Already in use.", "packfile warning", MB_OK | MB_ICONEXCLAMATION); #endif */ return; } pf = &mem_pf[pid]; pf->flag = enc_mode; strcpy( pf->fname, fname ); strcpy( pf->pname, pname ); pid++; if ( enc_mode == 1 ) { strcpy( nam, fname ); } else { strcpy( nam, "+" ); strcat( nam, fname ); } // SendDlgItemMessage( hDlg,IDC_LIST3, LB_ADDSTRING,-1,(LPARAM)nam ); } int pf_find( char *fname ) { int a, sel; char *p; if (pid == 0) return -1; sel = -1; p = fname; if ( *p == '+' ) p++; for( a = 0; a < pid; a++ ) { pf = &mem_pf[a]; if ( strcmp( pf->fname, p ) == 0) sel = a; } return sel; } void pf_del( int id ) { int a, i; i = id; if ( pid <= 0 ) return; while( 1 ) { a = i + 1; mem_pf[i].flag = mem_pf[a].flag; strcpy( mem_pf[i].fname, mem_pf[a].fname ); strcpy( mem_pf[i].pname, mem_pf[a].pname ); i++; if (i >= pid) break; } pid--; } int pf_save( void ) { char szNow[_MAX_PATH]; char szDir[_MAX_PATH]; char stt[256]; FILE *fp; int a, l; strcpy( szNow, szDefDir ); if ( szNow[strlen( szNow ) - 1] != '\\') strcat( szNow, "\\" ); fp = fopen( "packfile", "wb" ); if ( fp == NULL ) return -1; wsprintf( stt, "; packfile list for DPM\r\n" ); fputs( stt, fp ); // wsprintf( stt,"; Current dir is [%s]\r\n",szNow ); // fputs( stt,fp ); if ( pid ) { for( a = 0; a < pid; a++ ) { pf = &mem_pf[a]; if ( pf->flag ) { strcpy( szDir, pf->pname ); l = strlen( szNow ); if ( strncmp( szNow, szDir, l ) == 0) { strcpy( szDir, szDir + l ); } if ( pf->flag == 1 ) { wsprintf( stt, "%s%s\r\n", szDir, pf->fname ); } else { wsprintf( stt, "+%s%s\r\n", szDir, pf->fname ); } fputs( stt, fp ); } } } fclose( fp ); return 0; } int pf_load( HWND hDlg ) { char s0[256]; char s1[256]; char s2[256]; char a1; FILE *fp; int a, b; int enc_bak; enc_bak = enc_mode; fp = fopen( "packfile", "rb" ); if ( fp == NULL ) return -1; while( 1 ) { if ( fgets( s0, 256, fp ) == NULL ) break; a1 = *s0; if (( a1 != ';' ) && ( a1 != 0 )) { if ( a1 == '+' ) { enc_mode = 2; strcpy( s1, s0 + 1 ); } else { enc_mode = 1; strcpy( s1, s0 ); } b = -1; for( a = 0; a < (int)strlen( s1 ); a++) { a1 = s1[a]; if ( a1 < 32 ) s1[a] = 0; if (a1 == 0x5c ) b = a; } if ( b == -1 ) { strcpy( s2, szDefDir ); // pf_add( hDlg,s1,s2 ); pf_add( s1, s2 ); } else { strcpy( s2, s1 + b + 1 ); s1[b] = 0; // pf_add( hDlg,s2,s1 ); pf_add( s2, s1 ); } } } fclose( fp ); enc_mode = enc_bak; return 0; } // // Dialog proc // /* void set_dirlist( HWND hDlg ) { HWND h; getcwd( szCDir, _MAX_PATH ) ; h=GetDlgItem( hDlg,IDC_CDIR );SetWindowText( h,szCDir ); SendDlgItemMessage( hDlg,IDC_LIST1,LB_RESETCONTENT, 0, 0L ); SendDlgItemMessage( hDlg,IDC_LIST2,LB_RESETCONTENT, 0, 0L ); SendDlgItemMessage( hDlg,IDC_LIST1,LB_DIR,DDL_READWRITE,(LPARAM)szFilt ); SendDlgItemMessage( hDlg,IDC_LIST2, LB_DIR,DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE,(LPARAM)"*.*" ); } */ /* BOOL CALLBACK PlistDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { HWND h; char szText[128]; int ctrl_id, i, j; switch (message) { case WM_INITDIALOG: h=GetDlgItem( hDlg,IDC_EDIT1 ); strcpy( szFilt,"*.*" ); SetWindowText( h,szFilt ); getcwd( szDefDir, 128 ) ; set_dirlist( hDlg ); pf_ini(); pf_load( hDlg ); return TRUE ; case WM_CLOSE: chdir( szDefDir ); pf_bye(); EndDialog (hDlg, 0); return TRUE; case WM_COMMAND: ctrl_id=LOWORD (wParam); if (HIWORD (wParam) == LBN_DBLCLK ) { i=SendDlgItemMessage( hDlg,ctrl_id, LB_GETCURSEL,0,0L ); SendDlgItemMessage( hDlg,ctrl_id, LB_GETTEXT,i,(LPARAM)szText ); if ( ctrl_id==IDC_LIST2 ) { szText[strlen(szText)-1]=0; if (szText[1]=='-') { szText[3]=':';chdir(szText+2); } else chdir(szText + 1); set_dirlist( hDlg ); } if ( ctrl_id==IDC_LIST1 ) { // pf_add( hDlg,szText,szCDir ); pf_add( szText,szCDir ); } break; } if ( ctrl_id==IDC_EDIT1 ) { GetDlgItemText( hDlg,IDC_EDIT1,szFilt,128 ); set_dirlist( hDlg ); break; } if ( ctrl_id==IDC_CHECK1 ) { enc_mode = 1; if ( IsDlgButtonChecked( hDlg,IDC_CHECK1 )==BST_CHECKED ) enc_mode=2; break; } switch (wParam) { case IDCM_ADD: h=GetDlgItem( hDlg,IDC_LIST1 ); j=SendMessage( h,LB_GETCOUNT,0,0L ); if (j==0) break; for(i=0;i<j;i++) { if ( SendMessage( h,LB_GETSEL,i,0L ) ) { SendMessage( h, LB_GETTEXT,i,(LPARAM)szText ); // pf_add( hDlg,szText,szCDir ); pf_add( szText,szCDir ); } } break; case IDCM_ALLSEL: h=GetDlgItem( hDlg,IDC_LIST1 ); j=SendMessage( h,LB_GETCOUNT,0,0L ); if (j==0) break; for(i=0;i<j;i++) { SendMessage( h, LB_GETTEXT,i,(LPARAM)szText ); // pf_add( hDlg,szText,szCDir ); pf_add( szText,szCDir ); } break; case IDCM_DEL: i=SendDlgItemMessage( hDlg,IDC_LIST3, LB_GETCURSEL,0,0L ); if (i>=0) { SendDlgItemMessage( hDlg,IDC_LIST3, LB_GETTEXT,i,(LPARAM)szText ); SendDlgItemMessage( hDlg,IDC_LIST3, LB_DELETESTRING,i,0L ); i=pf_find( szText ); pf_del( i ); } break; case IDCM_CLR: SendDlgItemMessage( hDlg,IDC_LIST3,LB_RESETCONTENT, 0, 0L ); pf_bye(); pf_ini(); break; case IDOK: chdir( szDefDir ); pf_save(); pf_bye(); EndDialog (hDlg, 0); return TRUE; case IDCANCEL: chdir( szDefDir ); pf_bye(); EndDialog (hDlg, 0); return TRUE; } break ; } return FALSE ; } */ |