- Add max rom id option support,

- Change duplicate rom naming: now the first OK and KO roms are not marked duplicate,
- Improve and fix statistics.
This commit is contained in:
agibert 2009-03-29 23:46:42 +00:00
parent dcc023872f
commit 17864a7329

192
nds2rm
View File

@ -5,9 +5,9 @@
# (C) 2009 Arnaud G. Gibert # (C) 2009 Arnaud G. Gibert
#----------------------------------------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------------------------------------
# $RCSfile: nds2rm,v $ # $RCSfile: nds2rm,v $
# $Revision: 1.7 $ # $Revision: 1.8 $
# $Name: $ # $Name: $
# $Date: 2009/03/26 09:16:35 $ # $Date: 2009/03/29 23:46:42 $
# $Author: agibert $ # $Author: agibert $
#----------------------------------------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------------------------------------
@ -79,12 +79,13 @@ function help_print()
echo "-D|--dsrom: dsrom.lst will be dumped" echo "-D|--dsrom: dsrom.lst will be dumped"
echo "-h|--help: print this help and exit" echo "-h|--help: print this help and exit"
echo "-V|--version: print the version and exit" echo "-V|--version: print the version and exit"
echo "-r|--rebuild: don't trust archive file name (test & correct mode), " echo "-r|--rebuild: don't trust archive file name (test & correct mode)"
echo " rebuild archives (correct mode)" echo " rebuild archives (correct mode)"
echo "-n|--renum: try to renumber archives," echo "-m|--max <id>: maximum rom id to load from dat file"
echo " --list_ok:" echo "-n|--renum: try to renumber archives"
echo " --list_ko:" echo " --list_ok: list roms with ok status"
echo " --list_miss:" echo " --list_ko: list roms with ko status"
echo " --list_miss: list missing roms"
echo "-v|--verbose: switch on verbosity" echo "-v|--verbose: switch on verbosity"
} }
@ -97,7 +98,6 @@ function help_print()
function args_parse() function args_parse()
{ {
mode="test" mode="test"
rebuild="no" rebuild="no"
renum="no" renum="no"
@ -105,8 +105,10 @@ function args_parse()
lko="no" lko="no"
lmiss="no" lmiss="no"
verbose="no" verbose="no"
max_idx=9999
tmp_args=$(getopt -o CTDhVrnv --long correct,test,dsrom,help,version,rebuild,renum,list_ok,list_ko,list_miss,verbose -n 'nds_rom_mng' -- "$@")
tmp_args=$(getopt -o CTDhVrm:nv --long correct,test,dsrom,help,version,rebuild,max:,renum,list_ok,list_ko,list_miss,verbose -n 'nds_rom_mng' -- "$@")
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
@ -115,18 +117,19 @@ function args_parse()
while true ; do while true ; do
case "$1" in case "$1" in
-C|--correct) mode="correct"; shift;; -C|--correct) mode="correct"; shift;;
-T|--test) mode="test"; shift;; -T|--test) mode="test"; shift;;
-D|--dsrom) mode="dsrom"; shift;; -D|--dsrom) mode="dsrom"; shift;;
-h|--help) mode="exit"; help_print; shift;; -h|--help) mode="exit"; help_print; shift;;
-V|--version) mode="exit"; version_print; shift;; -V|--version) mode="exit"; version_print; shift;;
-r|--rebuild) rebuild="yes"; shift;; -r|--rebuild) rebuild="yes"; shift;;
-n|--renum) renum="yes"; shift;; -m|--max) shift; max_idx="$1"; shift;;
--list_ok) lok="yes"; shift;; -n|--renum) renum="yes"; shift;;
--list_ko) lko="yes"; shift;; --list_ok) lok="yes"; shift;;
--list_miss) lmiss="yes"; shift;; --list_ko) lko="yes"; shift;;
-v|--verbose) verbose="yes"; shift;; --list_miss) lmiss="yes"; shift;;
--) shift; break;; -v|--verbose) verbose="yes"; shift;;
--) shift; break;;
*) echo "args_parse internal error [$1] !"; exit 1;; *) echo "args_parse internal error [$1] !"; exit 1;;
esac esac
done done
@ -143,7 +146,8 @@ function dat_load()
{ {
echo "loading dsrom.dat..." echo "loading dsrom.dat..."
IFS=';' loaded_cnt=0
IFS=';'
while read line while read line
do do
@ -175,6 +179,12 @@ function dat_load()
dat_dup[${idx}]="0" dat_dup[${idx}]="0"
loaded_cnt=$((${loaded_cnt} + 1)) loaded_cnt=$((${loaded_cnt} + 1))
if [[ ${loaded_cnt} -ge ${max_idx} ]]
then
echo "max rom id reached: skipping loading !"
break;
fi
fi fi
done < ${NDS_DAT} done < ${NDS_DAT}
} }
@ -349,19 +359,19 @@ function mask_get()
function dsrom_dump() function dsrom_dump()
{ {
i=1
i=1 while [[ ${i} -le ${loaded_cnt} ]]
while [[ ${i} -le ${loaded_cnt} ]] do
do if [[ ${dat_status[${i}]} != "?" ]]
if [[ ${dat_status[${i}]} != "?" ]] then
then mask=$(mask_get "${dat_save_type[${i}]}")
mask=$(mask_get "${dat_save_type[${i}]}")
echo "${dat_id[${i}]} ${dat_fp[${i}]}-0 $mask ${dat_title[${i}]} (${dat_region[${i}]}:${dat_lang[${i}]}) [${dat_status[${i}]}] {${dat_crc[${i}]}}" echo "${dat_id[${i}]} ${dat_fp[${i}]}-0 $mask ${dat_title[${i}]} (${dat_region[${i}]}:${dat_lang[${i}]}) [${dat_status[${i}]}] {${dat_crc[${i}]}}"
fi fi
i=$(( ${i} + 1 )) i=$(( ${i} + 1 ))
done done
} }
@ -660,6 +670,12 @@ function arc_proceed()
id=$1 id=$1
idx=${id/*(0)/} idx=${id/*(0)/}
if [[ ${idx} -gt ${loaded_cnt} ]]
then
echo "max rom id reached: skipping processing !"
break;
fi
# Get info from dat # Get info from dat
title=${dat_title[${idx}]} title=${dat_title[${idx}]}
@ -879,12 +895,15 @@ function suffix_mng()
{ {
echo "managing duplicate archives..." echo "managing duplicate archives..."
IFS=' ' IFS=' '
found_cnt=0 found_cnt=0
ok_cnt=0 ok_cnt=0
ko_cnt=0 ko_cnt=0
dup_cnt=0 dup_cnt=0
idx_old=0 ignored_cnt=0
idx_old=0
status_old=""
tmp_file=$(mktemp) tmp_file=$(mktemp)
@ -897,37 +916,43 @@ function suffix_mng()
id=$1 id=$1
idx=${id/*(0)/} idx=${id/*(0)/}
status=${file/* \[/}; status=${status/\] \{*/} if [[ ${idx} -gt ${loaded_cnt} ]]
crc=${file/*\] \{/}; crc=${crc/\} \<*/}
fp=${file/*\} \</}; fp=${fp/\>-*/}
dat_dup[${idx}]="${dup_id}"
if [[ ${idx} != ${idx_old} ]]
then then
idx_old=${idx} ignored_cnt=$((${ignored_cnt} + 1))
dup_id=0
file_name="${file/) \[*/}) [${status}] {${crc}} <${fp}>.zip"
dat_fp[${idx}]="${fp}"
dat_status[${idx}]="${status}"
if [[ "${status}" == "OK" ]]
then
ok_cnt=$((${ok_cnt} + 1))
else
ko_cnt=$((${ko_cnt} + 1))
fi
else else
dup_id=$((${dup_id} + 1)) status=${file/* \[/}; status=${status/\] \{*/}
file_name="${file/) \[*/}) [${status}] {${crc}} <${fp}>-${dup_id}.zip" crc=${file/*\] \{/}; crc=${crc/\} \<*/}
fp=${file/*\} \</}; fp=${fp/\>-*/}
dup_cnt=$((${dup_cnt} + 1)) dat_dup[${idx}]="${dup_id}"
if [[ ( ${idx} != ${idx_old} ) || ( "${status}" != "${status_old}" ) ]]
then
idx_old=${idx}
status_old=${status}
dup_id=0
file_name="${file/) \[*/}) [${status}] {${crc}} <${fp}>.zip"
dat_fp[${idx}]="${fp}"
dat_status[${idx}]="${status}"
if [[ "${status}" == "OK" ]]
then
ok_cnt=$((${ok_cnt} + 1))
else
ko_cnt=$((${ko_cnt} + 1))
fi
else
dup_id=$((${dup_id} + 1))
file_name="${file/) \[*/}) [${status}] {${crc}} <${fp}>-${dup_id}.zip"
dup_cnt=$((${dup_cnt} + 1))
fi
print_verbose "moving ${file} to ${file_name}"
arc_mv "${NDS_ROMS_OUT}/${file_name}" "${NDS_ROMS_OUT}/${file}" "${mode}"
fi fi
print_verbose "moving ${file} to ${file_name}"
arc_mv "${NDS_ROMS_OUT}/${file_name}" "${NDS_ROMS_OUT}/${file}" "${mode}"
found_cnt=$((${found_cnt} + 1)) found_cnt=$((${found_cnt} + 1))
printf "found: %4d" ${found_cnt} printf "found: %4d" ${found_cnt}
@ -1006,12 +1031,15 @@ function stats_update()
function stats_proceed() function stats_proceed()
{ {
ss_ok_cnt=0 ss_ok_cnt=0
ss_ko_cnt=0 ss_ko_cnt=0
cs_ok_cnt=0 cs_ok_cnt=0
cs_ko_cnt=0 cs_ko_cnt=0
ks_ok_cnt=0 ks_ok_cnt=0
ks_ko_cnt=0 ks_ko_cnt=0
proceeded_cnt=0
missing_cnt=0
while read file while read file
do do
@ -1026,8 +1054,20 @@ function stats_proceed()
\rm -f "${STATS_FILE}" \rm -f "${STATS_FILE}"
found_cnt=$((${ok_cnt} + ${ko_cnt})) found_cnt=$((${ok_cnt} + ${ko_cnt} + ${dup_cnt} + ${ignored_cnt}))
missing_cnt=$((${loaded_cnt} - ${found_cnt})) proceeded_cnt=$((${found_cnt} - ${ignored_cnt}))
i=1
while [[ ${i} -le ${loaded_cnt} ]]
do
if [[ ${dat_status[${i}]} == "?" ]]
then
missing_cnt=$((${missing_cnt} + 1))
fi
i=$(( ${i} + 1 ))
done
} }
@ -1053,6 +1093,8 @@ function stats_print()
echo echo
printf "%4d roms are in dsrom.dat\n" ${loaded_cnt} printf "%4d roms are in dsrom.dat\n" ${loaded_cnt}
printf "%4d roms are found\n" ${found_cnt} printf "%4d roms are found\n" ${found_cnt}
printf "%4d roms are ignored\n" ${ignored_cnt}
printf "%4d roms are proceeded\n" ${proceeded_cnt}
printf "%4d roms are renumbered\n" ${renum_cnt} printf "%4d roms are renumbered\n" ${renum_cnt}
printf "%4d roms are duplicated\n" ${dup_cnt} printf "%4d roms are duplicated\n" ${dup_cnt}
printf "%4d roms are missing\n" ${missing_cnt} printf "%4d roms are missing\n" ${missing_cnt}
@ -1080,6 +1122,11 @@ function dsrom_mode()
id=$1 id=$1
idx=${id/*(0)/} idx=${id/*(0)/}
if [[ ${idx} -gt ${loaded_cnt} ]]
then
break;
fi
# Get info from dat # Get info from dat
title=${dat_title[${idx}]} title=${dat_title[${idx}]}
@ -1169,7 +1216,6 @@ cd ${TMP_DIR}
# Initialise stats variables # Initialise stats variables
loaded_cnt=0
ok_cnt=0 ok_cnt=0
ko_cnt=0 ko_cnt=0
found_cnt=0 found_cnt=0