|
Packit |
5e46da |
/*
|
|
Packit |
5e46da |
* This file is part of libbluray
|
|
Packit |
5e46da |
* Copyright (C) 2014 Petri Hintukainen <phintuka@users.sourceforge.net>
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* This library is free software; you can redistribute it and/or
|
|
Packit |
5e46da |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
5e46da |
* License as published by the Free Software Foundation; either
|
|
Packit |
5e46da |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
5e46da |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
5e46da |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
5e46da |
* Lesser General Public License for more details.
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
5e46da |
* License along with this library. If not, see
|
|
Packit |
5e46da |
* <http://www.gnu.org/licenses/>.
|
|
Packit |
5e46da |
*/
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include "bdj/bdjo_data.h"
|
|
Packit |
5e46da |
#include "bluray.h"
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include <stdio.h>
|
|
Packit |
5e46da |
#include <string.h>
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static const char *_yes_no(int i)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
return i > 0 ? "yes" : i < 0 ? "unknown" : "no";
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static const char *_binding_str(int i)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
switch (i) {
|
|
Packit |
5e46da |
case 0: return "unbound";
|
|
Packit |
5e46da |
case 1: return "disc bound";
|
|
Packit |
5e46da |
case 3: return "title bound";
|
|
Packit |
5e46da |
default: return "???";
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static const char *_visibility_str(int i)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
switch (i) {
|
|
Packit |
5e46da |
case 0: return "none";
|
|
Packit |
5e46da |
case 1: return "applications";
|
|
Packit |
5e46da |
case 2: return "user";
|
|
Packit |
5e46da |
default: return "???";
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _terminal_info_print(const BDJO_TERMINAL_INFO *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
printf("Terminal Info:\n");
|
|
Packit |
5e46da |
printf(" Default AWT font : %s\n", p->default_font);
|
|
Packit |
5e46da |
printf(" initial HaVi config : %d\n", p->initial_havi_config_id);
|
|
Packit |
5e46da |
printf(" Menu call mask : %d\n", p->menu_call_mask);
|
|
Packit |
5e46da |
printf(" Title search mask : %d\n", p->menu_call_mask);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _app_cache_item_print(const BDJO_APP_CACHE_ITEM *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
printf(" %3.3s: %s%s\n",
|
|
Packit |
5e46da |
p->lang_code, p->ref_to_name,
|
|
Packit |
5e46da |
p->type == 1 ? ".jar" : p->type == 2 ? "/" : " (unknown type)");
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _app_cache_info_print(const BDJO_APP_CACHE_INFO *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
unsigned ii;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
printf("Application cache info:\n");
|
|
Packit |
5e46da |
for (ii = 0; ii < p->num_item; ii++) {
|
|
Packit |
5e46da |
_app_cache_item_print(&p->item[ii]);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _accessible_playlists_print(const BDJO_ACCESSIBLE_PLAYLISTS *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
unsigned ii;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
printf("Accessible playlists:\n");
|
|
Packit |
5e46da |
printf(" Access to all : %s\n", _yes_no(p->access_to_all_flag));
|
|
Packit |
5e46da |
printf(" Autostart first : %s\n", _yes_no(p->autostart_first_playlist_flag));
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (p->num_pl) {
|
|
Packit |
5e46da |
printf(" Playlists : %d\n", p->num_pl);
|
|
Packit |
5e46da |
for (ii = 0; ii < p->num_pl; ii++) {
|
|
Packit |
5e46da |
printf(" %s.mpls\n", p->pl[ii].name);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _app_profile_print(BDJO_APP_PROFILE *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
printf(" Profile %d Version %d.%d.%d\n",
|
|
Packit |
5e46da |
p->profile_number, p->major_version, p->minor_version, p->micro_version);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _app_print(const BDJO_APP *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
unsigned ii;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
printf(" Control code: : %d (%s)\n", p->control_code,
|
|
Packit |
5e46da |
p->control_code == 1 ? "autostart" : p->control_code == 2 ? "present" : "???");
|
|
Packit |
5e46da |
printf(" Type : %d (%s)\n", p->type,
|
|
Packit |
5e46da |
p->type == 1 ? "BD-J App" : "???");
|
|
Packit |
5e46da |
printf(" Organization ID : %08X\n", p->org_id);
|
|
Packit |
5e46da |
printf(" Application ID : %04X\n", p->app_id);
|
|
Packit |
5e46da |
printf(" Priority : %d\n", p->priority);
|
|
Packit |
5e46da |
printf(" Binding : %d (%s)\n", p->binding, _binding_str(p->binding));
|
|
Packit |
5e46da |
printf(" Visibility : %d (%s)\n", p->visibility, _visibility_str(p->visibility));
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (p->num_profile) {
|
|
Packit |
5e46da |
printf(" Profiles:\n");
|
|
Packit |
5e46da |
for (ii = 0; ii < p->num_profile; ii++) {
|
|
Packit |
5e46da |
_app_profile_print(&p->profile[ii]);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (p->num_name) {
|
|
Packit |
5e46da |
printf(" Names:\n");
|
|
Packit |
5e46da |
for (ii = 0; ii < p->num_name; ii++) {
|
|
Packit |
5e46da |
printf(" %s: %s\n", p->name[ii].lang, p->name[ii].name);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
printf(" Base directory : %s\n", p->base_dir);
|
|
Packit |
5e46da |
printf(" Icon locator : %s\n", p->icon_locator);
|
|
Packit |
5e46da |
printf(" Icon flags : 0x%04x\n", p->icon_flags);
|
|
Packit |
5e46da |
printf(" Classpath extension : %s\n", p->classpath_extension);
|
|
Packit |
5e46da |
printf(" Initial class : %s\n", p->initial_class);
|
|
Packit |
5e46da |
printf(" Parameters : ");
|
|
Packit |
5e46da |
for (ii = 0; ii < p->num_param; ii++) {
|
|
Packit |
5e46da |
printf("%s ", p->param[ii].param);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
printf("\n");
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _app_management_table_print(const BDJO_APP_MANAGEMENT_TABLE *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
unsigned ii;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
for (ii = 0; ii < p->num_app; ii++) {
|
|
Packit |
5e46da |
printf("Application %u:\n", ii);
|
|
Packit |
5e46da |
_app_print(&p->app[ii]);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _key_interest_table_print(const BDJO_KEY_INTEREST_TABLE *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
unsigned int v;
|
|
Packit |
5e46da |
memcpy(&v, p, sizeof(unsigned int));
|
|
Packit |
5e46da |
if (v) {
|
|
Packit |
5e46da |
printf("Key interest table:\n");
|
|
Packit |
5e46da |
printf(" %s%s%s%s%s%s%s%s%s%s%s\n",
|
|
Packit |
5e46da |
p->vk_play ? "VK_PLAY " : "",
|
|
Packit |
5e46da |
p->vk_stop ? "VK_STOP " : "",
|
|
Packit |
5e46da |
p->vk_ffw ? "VK_FFW " : "",
|
|
Packit |
5e46da |
p->vk_rew ? "VK_REW " : "",
|
|
Packit |
5e46da |
p->vk_track_next ? "VK_TRACK_NEXT " : "",
|
|
Packit |
5e46da |
p->vk_track_prev ? "VK_TRACK_PREV " : "",
|
|
Packit |
5e46da |
p->vk_pause ? "VK_PAUSE " : "",
|
|
Packit |
5e46da |
p->vk_still_off ? "VK_STILL_OFF " : "",
|
|
Packit |
5e46da |
p->vk_sec_audio_ena_dis ? "VK_SEC_AUDIO " : "",
|
|
Packit |
5e46da |
p->vk_sec_video_ena_dis ? "VK_SEC_VIDEO " : "",
|
|
Packit |
5e46da |
p->pg_textst_ena_dis ? "VK_PG_TEXTST " : "");
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _file_access_info_print(const BDJO_FILE_ACCESS_INFO *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
printf("File access info:\n %s\n", p->path);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void _bdjo_print(const BDJO *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
_terminal_info_print(&p->terminal_info);
|
|
Packit |
5e46da |
_app_cache_info_print(&p->app_cache_info);
|
|
Packit |
5e46da |
_accessible_playlists_print(&p->accessible_playlists);
|
|
Packit |
5e46da |
_app_management_table_print(&p->app_table);
|
|
Packit |
5e46da |
_key_interest_table_print(&p->key_interest_table);
|
|
Packit |
5e46da |
_file_access_info_print(&p->file_access_info);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
int main(int argc, const char *argv[])
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
if (argc < 2) {
|
|
Packit |
5e46da |
fprintf(stderr, "usage: %s <bdjo_file>\n", argv[0]);
|
|
Packit |
5e46da |
return 1;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
int cnt;
|
|
Packit |
5e46da |
for (cnt = 1; cnt < argc; cnt++) {
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
printf("%s\n", argv[cnt]);
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
BDJO *bdjo = bd_read_bdjo(argv[cnt]);
|
|
Packit |
5e46da |
if (bdjo) {
|
|
Packit |
5e46da |
_bdjo_print(bdjo);
|
|
Packit |
5e46da |
bd_free_bdjo(bdjo);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
printf("\n");
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
return 0;
|
|
Packit |
5e46da |
}
|