/* * ***************************************************************** * * * * * Copyright (c) Fast Corporation, 1997 * * * * * * All Rights Reserved. Unpublished rights reserved under * * * the copyright laws of the Japan. * * * * * * The software contained on this media is proprietary to * * * and embodies the confidential technology of Fast * * * Corporation. Possession, use, duplication or * * * dissemination of the software and media is authorized only * * * pursuant to a valid written license from Fast Corporation. * * * * * ***************************************************************** */ /* CSC90X ファイル削除ツール filedel.c */ /*[作成者]Y.Hori */ /* 目的: 関数: 履歴: Ver 1.0 00/05/17 注記: */ /***********************************************************/ /*** ファイル削除ツール ver.1.00 ***/ /***********************************************************/ /*****************************************/ /* ソース FILEDEL.C */ /* ヘッダーファイル なし */ /* 実行File FILEDEL.BIN, FILEDEL.EXE */ /* FILEDEL.903, FILEDEL.904 */ /* バージョン 1.00 */ /*****************************************/ /*************************************************************************** ** ヘッダーファイル ** ***************************************************************************/ #include #include "f_video.h" /* ビデオ入力ヘッダーファイル */ #include "f_graph.h" /* グラフィック表示ヘッダーファイル */ #include "f_stdlib.h" /* メモリ領域割当ヘッダファイル */ #include "f_gui.h" /* パッド関連ヘッダーファイル */ #include "f_pinf.h" /* システムパラメータ取得ヘッダーファイル */ #include "f_file.h" /* ファイル関連ヘッダーファイル */ #include "f_stdio.h" /* 標準入出力ヘッダーファイル */ #include "f_time.h" /* 時間計測ヘッダーファイル */ #include "m_menu.h" #define FSIZE 0x01 #define FEXT 0x02 /*************************************************************************** ** 構造体定義 ** ***************************************************************************/ typedef struct { int wNo; char baName[14]; unsigned long ulFileSize; int wRead; int wWrite; int wRandom; int wCheck; }FILE_INFO; typedef struct { int wNo; char baName[14]; char baExt[5]; unsigned long ulFileSize; int wCheck; }FILE_INFO2; /*************************************************************************** ** プロトタイプ宣言 ** ***************************************************************************/ static void fnMainMenu( void ); /* メインメニュー */ static void fnFileSize( void ); /* ファイルサイズによる削除 */ static int fnFileSize_delete( unsigned long ); /* ファイルサイズによる削除(実行)*/ static void fnFileExtension( void ); /* 拡張子による削除 */ static int fnFileExtension_delete( char * ); /* 拡張子による削除(実行)*/ static void fnFileSizeExt( void ); /* サイズと拡張子による削除 */ static int fnFileSizeExt_delete( unsigned long, char *, int ); /* サイズと拡張子による削除(実行)*/ static int fnGetFileParam( int, FILE_INFO * ); /* ファイル情報の取得 */ static int fnFileDel( char * ); /* ファイルパス */ static int fnFileNameCheck( char *, char * ); /* ファイル名のチェック */ static void fnSpaceCut( char * ); /* スペースの削除 */ static void fnFileSlct_main( void ); /* ファイル一覧からの選択(メイン)*/ static void fnFileSlct_disp( void ); /* 表示を行なう */ static fnName_disp( int, FILE_INFO2 *, int ); /* ファイル名称の表示 */ static void fnName_conv( int , FILE_INFO *, FILE_INFO2 * ); /* ファイル名称・サイズの変換 */ static void fnGetNameExt( char *, char *, char * ); /* 名称・拡張子の取得 */ static void fnSorting( int, FILE_INFO2 *, FILE_INFO2 *, int, int ); /* ソート */ static void fnNameSort( int, FILE_INFO2 *, FILE_INFO2 * ); /* 名称ソート */ static void fnExtSort( int, FILE_INFO2 *, FILE_INFO2 * ); /* 拡張子ソート */ static void fnSizeSort( int, FILE_INFO2 *, FILE_INFO2 * ); /* サイズソート */ static int fnCompare( char *, char *, int ); /* 文字列の比較 */ static void fnInsert( FILE_INFO2, FILE_INFO2 *, int, int ); /* 代入 */ static void fnReverse( int, FILE_INFO2 * ); /* 反転 */ static void fnRunMode( int, FILE_INFO2 *, FILE_INFO2 *, FILE_INFO * ); /* 動作処理 */ static int fnFileCheck( int, int, int, int ); /* カーソルがファイル名称上にあるかチェック */ static void fnDrawBox( int, int ); /* 枠の表示 */ static void fnDisplay_comment( int, int, char * ); /* 枠つき文字列 */ static void fnInit_info2( int, FILE_INFO2 * ); /* 初期化 */ extern int message_note ( void ); /*************************************************************************** ** グローバル変数 ** ***************************************************************************/ unsigned long ulFileSize; char baExtension[4]; int wDelTerms; /*************************************************************************** ** メイン関数 ** ***************************************************************************/ void main( void ) { int dx, dy; /* 初期メッセージ表示 */ if( NORMAL_RETURN != message_note() ) return; /* デフォルト値の代入 */ ulFileSize = 245760; strcpy( baExtension, "IMG" ); wDelTerms = 0; /* 画面サイズの取得 */ dx = Lib_get_dx_size(); dy = Lib_get_dy_size(); /* 背景を黒に */ Lib_view( 0, 0, dx-1, dy-1, GRAPH_ERAS ); /* メインメニュー */ fnMainMenu(); /* 背景を戻す */ Lib_view( 0, 0, dx-1, dy-1, GRAPH_DRAW ); /* パッド表示文字数の設定 */ Lib_set_pad_maxstring( 10 ); } /*************************************************************************** ** メインメニュー ** ***************************************************************************/ static char *bpaMainMenu_menu[] = { "ファイルサイズ指定による削除", "拡張子指定による削除 ", "サイズ&拡張子による削除 ", "ファイル一覧からの削除" }; static char *bpaMainMenu_title[] = { "ファイル削除ツール" }; static void fnMainMenu( void ) { int wPad_level; int wWidth, wHeight; int wNo, i; /* パッド表示文字数の設定 */ Lib_set_pad_maxstring( 22 ); /* メニューサイズの取得 */ Lib_get_standard_key_size( &wWidth, &wHeight ); /* パッドのオープン */ wPad_level = Lib_view_open( ); /* パッドのタイトル */ Lib_view_set_title( wPad_level, bpaMainMenu_title[0] ); /* メニューの登録 */ for( i=0; i<4; i++ ) Lib_view_set_null( wPad_level, 10, 10+(10+wHeight)*i, bpaMainMenu_menu[i], i ); /* パッドの表示位置 */ Lib_view_set_size( wPad_level, 100, 100, 10, 10 ); /* パッドの表示 */ Lib_draw_command( wPad_level ); for( ;; ) { if( ERROR_RETURN != ( wNo = Lib_process_command( wPad_level )) ) { if( PAD_QUIT != wNo ) { Lib_erase_command( wPad_level ); if( 0 == wNo ) fnFileSize(); else if( 1 == wNo ) fnFileExtension(); else if( 2 == wNo ) fnFileSizeExt(); else fnFileSlct_main(); Lib_draw_command( wPad_level ); } else break; } else { Lib_display_message( 150, 150, "ERROR", "Command Pad Error" ); break; } } Lib_erase_command( wPad_level ); /* コマンドパッドを消す */ Lib_view_close( wPad_level ); /* パッドのクローズ */ } /*************************************************************************** ** ファイルサイズによる削除 ** ***************************************************************************/ static void fnFileSize( void ) { PVAL tMpad_value[1]; int wPad_level; int wWidth,wHeight; int wXs, wYs; int wNo; int wBkMaxstring; /* パッド表示文字数の設定 */ wBkMaxstring = Lib_get_pad_maxstring(); Lib_set_pad_maxstring( 14 ); /* メニューサイズの取得 */ Lib_get_standard_key_size( &wWidth, &wHeight ); /* パッドのオープン */ wPad_level = Lib_view_open( ); /* パッドのタイトル */ Lib_view_set_title( wPad_level,"ファイルサイズによる削除" ); /* メニューの登録 */ Lib_view_set_uniq_numeral( wPad_level, 10, 10, "ファイルサイズ", (int)ulFileSize, 1, 9999999, 0 ); /* パラダイムの登録 */ /* パッドの表示位置 */ Lib_get_start_pad( wPad_level, &wXs, &wYs ); Lib_view_set_size( wPad_level, wXs, wYs, 10, 10 ); /* パッドの表示 */ Lib_draw_menu2( wPad_level ); if( ERROR_RETURN != ( wNo = Lib_process_menu2( wPad_level, tMpad_value )) ) { switch(wNo) { /* 実行ボタンが押されたとき */ case 101: ulFileSize = (unsigned long)tMpad_value[0].value_type; fnFileSize_delete( ulFileSize ); break; /* 終了ボタンが押されたとき */ case 102: break; } } else Lib_display_message( 150, 150, "ERROR", "Menu Pad Error" ); Lib_erase_menu( wPad_level ); /* メニューパッドを消す */ Lib_view_close( wPad_level ); /* パッドのクローズ */ Lib_set_pad_maxstring( wBkMaxstring ); } /*************************************************************************** ** ファイルの削除(ファイルサイズ) ** ** 引 数:ファイルサイズ(バイト) ** ** 戻り値:-1 ERROR_RETURN; エラー ** ** else 削除したファイル数 ** ***************************************************************************/ static int fnFileSize_delete( ulSize ) unsigned long ulSize; /* 削除するファイルサイズ */ { int i, wCount; int wRtn = NORMAL_RETURN; int wFileNum; char baPath[64], baStr[64]; FILE_INFO *tFileInfo; /* ファイル数の取得 */ wFileNum = Lib_get_reg_files( "FS0" ); if( 0 < wFileNum ) { /* メモリの確保 */ if( 0 == ( tFileInfo = ( FILE_INFO * )Lib_mlalloc( sizeof( FILE_INFO ) * wFileNum )) ) { /* エラー処理 */ Lib_display_message( 110, 100, "ERROR", "メモリ不足が発生しました" ); wRtn = ERROR_RETURN; } else { if( NORMAL_RETURN == ( wRtn = fnGetFileParam( wFileNum, tFileInfo )) ) { for( i=0, wCount=0; i wLen2 ) { for( i=wLen-wLen2, j=0; i= wFileNum ) { wFlag = 1; break; } for( k=0, m=0; 0x00!=tFileInfo2[i+PAGE_LINE*j+wStart].baName[k]; k++, m++ ) baStr[m]=tFileInfo2[i+PAGE_LINE*j+wStart].baName[k]; for( k=0, m=10; 0x00!=tFileInfo2[i+PAGE_LINE*j+wStart].baExt[k]; k++, m++ ) baStr[m]=tFileInfo2[i+PAGE_LINE*j+wStart].baExt[k]; Lib_sprintf( &baStr[19], "%7d", tFileInfo2[i+PAGE_LINE*j+wStart].ulFileSize ); if( 2 == tFileInfo2[i+PAGE_LINE*j+wStart].wCheck ) Lib_kanjishift( REVERSE_FONT, NORMAL_FONT, 0, 20+236*j+12, 80+18*(i+1), baStr ); else Lib_kanjishift( NORMAL_FONT, NORMAL_FONT, 0, 20+236*j+12, 80+18*(i+1), baStr ); for( k=0; k<40; k++ ) baStr[k] = 0x20; } if( 1 == wFlag ) break; } wLastPage = wFileNum / PAGE_LINE; wAmari = wFileNum % PAGE_LINE; if( 0 == wAmari ){ wLastPage--; wAmari = PAGE_LINE; } if( wPage+1 < wLastPage ) Lib_display_key( 445, 453, ">>", 1 ); if( wPage > 0 ) Lib_display_key( 20, 453, "<<", 1 ); /* ページ番号表示 */ if( 0 == wLastPage ) Lib_sprintf( baStr, "Page %d,%d / %d", wPage+1, wPage+2, wLastPage+2 ); else Lib_sprintf( baStr, "Page %d,%d / %d", wPage+1, wPage+2, wLastPage+1 ); Lib_kanjishift( NORMAL_FONT, NORMAL_FONT, 0, 400, 50, baStr ); Lib_sprintf( baStr, "P.%d", wPage+1 ); Lib_kanjishift( NORMAL_FONT, NORMAL_FONT, 0, 140, 470, baStr ); Lib_sprintf( baStr, "P.%d", wPage+2 ); Lib_kanjishift( NORMAL_FONT, NORMAL_FONT, 0, 350, 470, baStr ); } /*************************************************************************** ** ファイル名称・サイズの変換 ** ***************************************************************************/ static void fnName_conv( int wFileNum, FILE_INFO *tFileInfo, FILE_INFO2 *tConvInfo ) { int i; for( i=0; i= 0 ) { if( '.' == bpFullName[i] ) { wFlag = i; break; } } else break; } if( 0 != wFlag ) { for( i=wFlag+1, j=0; i ( wRtn = fnCompare( tFile_info_base[i].baName, tFile_info_sort[j].baName, 9 )) ) { fnInsert( tFile_info_base[i], tFile_info_sort, j, wMax ); wMax++; break; } else if( 0 == wRtn ) { if( 0 >= fnCompare( tFile_info_base[i].baExt, tFile_info_sort[j].baExt, 4 )) { fnInsert( tFile_info_base[i], tFile_info_sort, j, wMax ); wMax++; break; } } } } } } /*************************************************************************** ** 拡張子ソート ** ***************************************************************************/ static void fnExtSort( wFileNum, tFile_info_base, tFile_info_sort ) int wFileNum; /* ファイル数 */ FILE_INFO2 *tFile_info_base, *tFile_info_sort; /* ソート前、ソート後 */ { int i, j, wMax; int wRtn; wMax = 0; for( i=0; i ( wRtn = fnCompare( tFile_info_base[i].baExt, tFile_info_sort[j].baExt, 4 )) ) { fnInsert( tFile_info_base[i], tFile_info_sort, j, wMax ); wMax++; break; } else if( 0 == wRtn ) { if( 0 >= fnCompare( tFile_info_base[i].baName, tFile_info_sort[j].baName, 9 )) { fnInsert( tFile_info_base[i], tFile_info_sort, j, wMax ); wMax++; break; } } } } } } /*************************************************************************** ** ファイルサイズソート ** ***************************************************************************/ static void fnSizeSort( wFileNum, tFile_info_base, tFile_info_sort ) int wFileNum; FILE_INFO2 *tFile_info_base, *tFile_info_sort; { int i, j, wMax; int wRtn; wMax = 0; for( i=0; i ( wRtn = fnCompare( tFile_info_base[i].baName, tFile_info_sort[j].baName, 9 )) ) { fnInsert( tFile_info_base[i], tFile_info_sort, j, wMax ); wMax++; break; } else if( 0 == wRtn ) { if( 0 >= fnCompare( tFile_info_base[i].baExt, tFile_info_sort[j].baExt, 4 )) { fnInsert( tFile_info_base[i], tFile_info_sort, j, wMax ); wMax++; break; } } } } } } } /*************************************************************************** ** 文字列の比較 ** ***************************************************************************/ static int fnCompare( baFileName1, baFileName2, wNum ) char *baFileName1, *baFileName2; int wNum; { int i; int d; int wRtn; for( i=0, d=0; i=wNum; i-- ) tFile_info_sort[i+1] = tFile_info_sort[i]; tFile_info_sort[wNum] = tFile_info_base; } /*************************************************************************** ** 反転 ** ***************************************************************************/ static void fnReverse( int wFileNum, FILE_INFO2 *tFile_info2 ) { FILE_INFO2 tTemp; int i; for( i=0; i 0 ) { Lib_display_key( 20, 453, "<<", 1 ); wPage--; /* 画面消去 */ Lib_cls( CHAR_PLANE | LINE_PLANE, BLACK_COLOR ); /* 枠線表示 */ fnFileSlct_disp(); /* 名称表示 */ fnName_disp( wFileNum, tFile_info_sort, wPage ); } } if( 0 == wFlag ) { if( wWidth9*3+20 <= x && x < wWidth9*3+20+wWidth10 && 0 <= y && y < wHeight ) { Lib_display_key( wWidth9*3+20, 0, " 削除実行 ", 2 ); /* 削除ファイル存在の確認 */ for( i=0, wCount=0, wCount2=0; i 0 ) { if( PAD_EXECUTE == Lib_display_message2( 110, 130, "確認", "ファイルを削除してよろしいですか?" ) ) { for( i=0; i