#!/usr/bin/php $o) if ($l($o)) $v[$k] = $o; return $v; } function map($l, $arr) { $v = array(); foreach($arr as $k => $o) $v[$k] = $l($o); return $v; } function combine($v1, $v2, $l) { $vc = array(); while(!empty($v1) && !empty($v2)) $vc[] = $l(array_pop($v1), array_pop($v2)); return $vc; } function file_ext($fname) { return substr($fname, 1+strrpos($fname, ".")); } function get_files($dir) { $dp = opendir($dir); $v = array(); while(false !== ($fname = readdir($dp))) $v[] = $fname; return $v; } function get_cue_file($dir) { $l = create_function('$f', 'return (file_ext($f) == "cue");'); return array_pop(filter($l, get_files($dir))); } function get_lines_array($file) { return explode("\n", file_get_contents($file)); } function is_title($line) { return (false !== strpos($line, "TITLE")); } function filter_titles2($line) { return substr($line, 1+strpos($line, '"')); } function filter_titles($line) { return substr(filter_titles2($line), 0, -2); } function is_track($line) { return (false !== strpos($line, "TRACK")); } function filter_tracks2($line) { return substr($line, strlen("TRACK") + strpos($line, "TRACK")); } function filter_tracks($line) { return substr(filter_tracks2($line), 1, 2); } function get_track_fnames_from($cue_fname) { $cue = get_lines_array($cue_fname); $titles = map('filter_titles', filter('is_title', $cue)); $tracks = map('filter_tracks', filter('is_track', $cue)); return combine($tracks, $titles, create_function('$a, $b', 'return $a." - ".$b;')); } function create_search_match_for($new_name) { $num = substr($new_name, 0, 2); return create_function('$a', "return (false !== strpos(\$a, '$num'));"); } function pair_cue_files_in($dir) { $files = get_files($dir); $v = array(); foreach(get_track_fnames_from(get_cue_file($dir)) as $k => $nfn) $v[array_pop(filter(create_search_match_for($nfn), $files))] = $nfn; return $v; } function invalid_rename_rules($list) { foreach($list as $old => $new) { if ($old == "") return "Can't match $new"; if ($new == "") return "Can't match $old"; if (file_exists($new)) return "File $new already exists"; } return NULL; } function prnt($old, $new){ echo "$old => $new\n"; } function do_rename($list, $preview=true) { $l = ($preview)? 'prnt' : 'rename'; foreach($list as $old => $new) $l($old, $new.".".file_ext($old)); } $list = pair_cue_files_in("."); if (($msg = invalid_rename_rules($list))) die($msg); do_rename($list, false); ?>