В качестве побочного эффекта разработки ZXTune родилась данная утилита.
Что она делает. Да просто анализирует файлы на входе и для каждого из них строит карту внутреннего содержимого.
Например, простой запуск:
Код:
xtractor ../Bugs/v14/K/KRLOVE.TRD
даст на выходе папку с дефолтным именем XTractor со следующим содержимым:
Код:
KRLOVE.TRD
KRLOVE.TRD/+0
KRLOVE.TRD/+0/TR-Dos disks image
KRLOVE.TRD/+0/TR-Dos disks image/$Track0
KRLOVE.TRD/+0/TR-Dos disks image/$Track0/+0
KRLOVE.TRD/+0/TR-Dos disks image/SYSTEM.C.C
KRLOVE.TRD/+0/TR-Dos disks image/SYSTEM.C.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/Cr_Love.B
KRLOVE.TRD/+0/TR-Dos disks image/Cr_Love.B/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+499
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+499/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+499/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+4663
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+4663/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+4663/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+13478
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+13478/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+13478/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+15865
KRLOVE.TRD/+0/TR-Dos disks image/MAIN.C.C
KRLOVE.TRD/+0/TR-Dos disks image/MAIN.C.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+11008
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+11008/Powerfull Code Decreaser v6.2
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+11008/Powerfull Code Decreaser v6.2/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+6803
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+256
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+256/Powerfull Code Decreaser 6.2
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+256/Powerfull Code Decreaser v6.2/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+10951
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+6912
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+6912/Hrum v3.x
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+6912/Hrum v3.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+14963
KRLOVE.TRD/+0/TR-Dos disks image/DEHRUST.C
KRLOVE.TRD/+0/TR-Dos disks image/DEHRUST.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/Cr_Love.W
KRLOVE.TRD/+0/TR-Dos disks image/Cr_Love.W/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+13827
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+13827/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+13827/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x/+51
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x/+51/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x/+51/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+14750
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+8915
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+8915/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+8915/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+10582
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+10582/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+10582/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+12076
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+12076/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+12076/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+16255
KRLOVE.TRD/+0/TR-Dos disks image/$Unallocated
KRLOVE.TRD/+0/TR-Dos disks image/$Unallocated/+0
KRLOVE.TRD/+0/TR-Dos disks image/!screen!
KRLOVE.TRD/+0/TR-Dos disks image/!screen!/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+15636
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+4085
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+4085/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+4085/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+11865
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+11865/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+11865/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+15025
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+15025/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+15025/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C/+4527
KRLOVE.TRD/+0/TR-Dos disks image/!music!
KRLOVE.TRD/+0/TR-Dos disks image/!music!/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C/+10058
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C/+0/Hrust v1.x/+0
Как видно, для входного файла создалась одноименная папка, внутри которой по полочкам разложены все блоки данных обнаруженных форматов.
Если на входе не исключены файлы с одинаковыми именами, то, с помощью специального ключа, имя папки может принимать значение полного пути к исходному файлу:
Код:
xtractor --target_dir FullPath --full_source_path ../Bugs/v14/K/KRLOVE.TRD
что даст на выходе вновьсозданную папку FullPath с содержимым:
Код:
.._Bugs_v14_K_KRLOVE.TRD/
...
дальнейшее содержимое аналогично папке KRLOVE.TRD из предыдущего примера
Если же на выходе нужен просто список файлов, а не полная иерархия, надо запустить следующим образом:
Код:
xtractor --target_dir FlatSubpath --flat_subpath ../Bugs/v14/K/KRLOVE.TRD
что даст на выходе новую папку FlatSubpath с содержимым:
Код:
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+13478_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+15865
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+4663_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+499_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+11865_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+15025_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+15636
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+4085_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#12.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#12.C_+10058
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+10582_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+12076_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+16255
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+8915_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#14.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#14.C_+0_Hrust v1.x_+51_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#14.C_+13827_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#14.C_+14750
KRLOVE.TRD_+0_TR-Dos disks image_BANK#16.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#16.C_+4527
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+0
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+10951
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+11008_Powerfull Code Decreaser v6.2_+0
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+14963
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+256_Powerfull Code Decreaser v6.2_+0
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+6803
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+6912_Hrum v3.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_Cr_Love.B_+0
KRLOVE.TRD_+0_TR-Dos disks image_Cr_Love.W_+0
KRLOVE.TRD_+0_TR-Dos disks image_DEHRUST.C_+0
KRLOVE.TRD_+0_TR-Dos disks image_MAIN.C.C_+0
KRLOVE.TRD_+0_TR-Dos disks image_!music!_+0
KRLOVE.TRD_+0_TR-Dos disks image_!screen!_+0
KRLOVE.TRD_+0_TR-Dos disks image_SYSTEM.C.C_+0
KRLOVE.TRD_+0_TR-Dos disks image_$Track0_+0
KRLOVE.TRD_+0_TR-Dos disks image_$Unallocated_+0
Поскольку результат может содержать в себе много мусора, предусмотрена пара опций для фильтровки:
--ignore_empty - блоки данных, состоящие из одинаковых байт, сохраняться не будут
--minimal_size N - не сохранять блоки данных с размером, меньшим N (в байтах)
Немного общих слов о возможностях и ограничениях:
- справку по опциям можно получить, запустив "xtractor --help"
- возможен многопоточный анализ
- возможен рекурсивный поиск файлов в папках
- программа еще не до конца оттестирована, так что возможны разного рода глюки
- прогресс не реализован
- анализ терминальных типов блоков (например чиптюнов) пока вырезан
Скачать версию для win64
Скачать версию для win32