[Symbian Installation File] Colorize output.

This commit is contained in:
2025-08-26 20:47:51 +01:00
parent 7f1e6aa2be
commit d2bb3f86ac
4 changed files with 568 additions and 765 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -19,67 +19,67 @@
<value>Fichero de Instalación de Symbian</value>
</data>
<data name="Application_ID_0" xml:space="preserve">
<value>ID de aplicación: 0x{0:X8}</value>
<value>[bold][slateblue1]ID de aplicación:[/][/] [teal]0x{0:X8}[/]</value>
</data>
<data name="Capabilities" xml:space="preserve">
<value>Capacidades:</value>
<value>[bold][slateblue1]Capacidades:[/][/]</value>
</data>
<data name="CRC16_of_header_0" xml:space="preserve">
<value>CRC16 de la cabecera: 0x{0:X4}</value>
<value>[bold][slateblue1]CRC16 de la cabecera:[/][/] [teal]0x{0:X4}[/]</value>
</data>
<data name="File_contains_0_files_pointer_1" xml:space="preserve">
<value>El archivo contiene {0} ficheros (pointer: {1})</value>
<value>[bold][slateblue1]El archivo contiene [green]{0}[/] ficheros (puntero: [teal]{1}[/])[/][/]</value>
</data>
<data name="File_contains_0_languages" xml:space="preserve">
<value>El archivo contiene {0} idiomas:</value>
<value>[bold][slateblue1]El archivo contiene [teal]{0}[/] idiomas:[/][/]</value>
</data>
<data name="File_contains_0_requisites" xml:space="preserve">
<value>El archivo contiene {0} requisitos:</value>
<value>[slateblue1]El archivo contiene [teal]{0}[/] requisitos:[/]</value>
</data>
<data name="SIS_contains_an_application" xml:space="preserve">
<value>El archivo contiene una aplicación</value>
<value>[slateblue1]El archivo contiene una aplicación[/]</value>
</data>
<data name="Symbian_3_or_later" xml:space="preserve">
<value>SymbianOS 3 o superior</value>
<value>[green]SymbianOS 3 o superior[/]</value>
</data>
<data name="Symbian_6_or_later" xml:space="preserve">
<value>SymbianOS 6 o superior</value>
<value>[green]SymbianOS 6 o superior[/]</value>
</data>
<data name="Symbian_9_1_or_later" xml:space="preserve">
<value>SymbianOS 9.1 o superior</value>
<value>[green]SymbianOS 9.1 o superior[/]</value>
</data>
<data name="Symbian_Installation_File" xml:space="preserve">
<value>Fichero de Instalación de Symbian</value>
<value>[fuchsia]Fichero de Instalación de Symbian[/]</value>
</data>
<data name="UIDs_checksum_0" xml:space="preserve">
<value>Checksum de los UIDs: 0x{0:X8}</value>
<value>[bold][slateblue1]Checksum de los UIDs:[/][/] [teal]0x{0:X8}[/]</value>
</data>
<data name="Unknown_EPOC_magic_0" xml:space="preserve">
<value>Mágica EPOC 0x{0:X8} desconocida</value>
<value>[slateblue1]Mágica EPOC [teal]0x{0:X8}[/] desconocida[/]</value>
</data>
<data name="Component_name_for_language_with_code_0_1" xml:space="preserve">
<value>Nombre del componente para el idioma con código {0}: {1}</value>
<value>[bold][slateblue1]Nombre del componente para el idioma con código [rosybrown][italic]{0}[/][/]:[/][/] [green]{1}[/]</value>
</data>
<data name="Component_version_0_1" xml:space="preserve">
<value>Versión del componente: {0}.{1}</value>
<value>[bold][slateblue1]Versión del componente:[/][/] [teal]{0}.{1}[/]</value>
</data>
<data name="Files_for_0_language" xml:space="preserve">
<value>Ficheros para el idioma `{0}`:</value>
<value>[bold][slateblue1]Ficheros para el idioma [rosybrown][italic]`{0}`[/][/]:[/][/]</value>
</data>
<data name="Files_for_all_languages" xml:space="preserve">
<value>Ficheros para todos los idiomas:</value>
<value>[bold][slateblue1]Ficheros para todos los idiomas:[/]</value>
</data>
<data name="Required_UID_0_version_1_2" xml:space="preserve">
<value>Requerida {0} versión {1}.{2}</value>
<value>[bold][slateblue1]Requerida [rosybrown]{0}[/] versión [teal]{1}.{2}[/][/][/]</value>
</data>
<data name="Required_variant_0" xml:space="preserve">
<value>Variante requerida: {0}</value>
<value>[bold][slateblue1]Variante requerida:[/][/] [rosybrown]{0}[/]</value>
</data>
<data name="Requisite_0" xml:space="preserve">
<value>Requisito nº {0}:</value>
<value>[bold][slateblue1]Requisito [teal]nº {0}[/]:[/][/]</value>
</data>
<data name="Requisite_for_language_0_1" xml:space="preserve">
<value>Requisito para el idioma {0}: {1}</value>
<value>[bold][slateblue1]Requisito para el idioma [italic][rosybrown]{0}[/][/]:[/][/] [green]{1}[/]</value>
</data>
<data name="SIS_Platform_UID_Nokia_Belle" xml:space="preserve">
<value>Nokia Belle</value>
@@ -121,7 +121,7 @@
<value>UID 0x{0:X8}</value>
</data>
<data name="Archive_options_0" xml:space="preserve">
<value>Opciones del archivo: {0}</value>
<value>[bold][slateblue1]Opciones del archivo:[/][/] [blue]{0}[/]</value>
</data>
<data name="SIS_Platform_UID_UIQ_21" xml:space="preserve">
<value>UIQ v2.1</value>
@@ -232,9 +232,18 @@
<value>Nokia E61</value>
</data>
<data name="Option_0" xml:space="preserve">
<value>Opción {0}:</value>
<value>[bold][slateblue1]Opción [teal]{0}[/]:[/][/]</value>
</data>
<data name="Name_for_language_0_1" xml:space="preserve">
<value>Nombre para el idioma {0}: {1}</value>
<value>[bold][slateblue1]Nombre para el idioma [italic][rosybrown]{0}[/][/]: [green]{1}[/]</value>
</data>
<data name="Found_component_name_for_language_0_at_1_with_a_length_of_2_bytes" xml:space="preserve">
<value>[slateblue1]Encontrado nombre de componente para el idioma [italic][rosybrown]{0}[/][/] en [teal]{1}[/] con una longitud de [lime]{2}[/] bytes</value>
</data>
<data name="This_file_format_is_not_yet_implemented" xml:space="preserve">
<value>[red]Este formato todavía no está implementado, no se puede decodificar más información.[/]</value>
</data>
<data name="Conditions" xml:space="preserve">
<value>[bold][slateblue1]Condiciones:[/][/]</value>
</data>
</root>

View File

@@ -27,67 +27,67 @@
<value>Symbian Installation File</value>
</data>
<data name="Symbian_Installation_File" xml:space="preserve">
<value>Symbian Installation File</value>
<value>[fuchsia]Symbian Installation File[/]</value>
</data>
<data name="Symbian_9_1_or_later" xml:space="preserve">
<value>SymbianOS 9.1 or later</value>
<value>[green]SymbianOS 9.1 or later[/]</value>
</data>
<data name="Application_ID_0" xml:space="preserve">
<value>Application ID: 0x{0:X8}</value>
<value>[bold][slateblue1]Application ID:[/][/] [teal]0x{0:X8}[/]</value>
</data>
<data name="UIDs_checksum_0" xml:space="preserve">
<value>UIDs checksum: 0x{0:X8}</value>
<value>[bold][slateblue1]UIDs checksum:[/][/] [teal]0x{0:X8}[/]</value>
</data>
<data name="Symbian_3_or_later" xml:space="preserve">
<value>SymbianOS 3 or later</value>
<value>[green]SymbianOS 3 or later[/]</value>
</data>
<data name="Symbian_6_or_later" xml:space="preserve">
<value>SymbianOS 6 or later</value>
<value>[green]SymbianOS 6 or later[/]</value>
</data>
<data name="Unknown_EPOC_magic_0" xml:space="preserve">
<value>Unknown EPOC magic 0x{0:X8}</value>
<value>[slateblue1]Unknown EPOC magic [teal]0x{0:X8}[/][/]</value>
</data>
<data name="CRC16_of_header_0" xml:space="preserve">
<value>CRC16 of header: 0x{0:X4}</value>
<value>[bold][slateblue1]CRC16 of header:[/][/] [teal]0x{0:X4}[/]</value>
</data>
<data name="SIS_contains_an_application" xml:space="preserve">
<value>SIS contains an application</value>
<value>[slateblue1]SIS contains an application[/]</value>
</data>
<data name="File_contains_0_languages" xml:space="preserve">
<value>Archive contains {0} languages:</value>
<value>[bold][slateblue1]Archive contains [teal]{0}[/] languages:[/][/]</value>
</data>
<data name="File_contains_0_files_pointer_1" xml:space="preserve">
<value>Archive contains {0} files (pointer: {1})</value>
<value>[bold][slateblue1]Archive contains [green]{0}[/] files (pointer: [teal]{1}[/])[/][/]</value>
</data>
<data name="File_contains_0_requisites" xml:space="preserve">
<value>Archive contains {0} requisites</value>
<value>[slateblue1]Archive contains [teal]{0}[/] requisites[/]</value>
</data>
<data name="Capabilities" xml:space="preserve">
<value>Capabilities:</value>
<value>[bold][slateblue1]Capabilities:[/][/]</value>
</data>
<data name="Component_version_0_1" xml:space="preserve">
<value>Component version: {0}.{1}</value>
<value>[bold][slateblue1]Component version:[/][/] [teal]{0}.{1}[/]</value>
</data>
<data name="Component_name_for_language_with_code_0_1" xml:space="preserve">
<value>Component name for language with code {0}: {1}</value>
<value>[bold][slateblue1]Component name for language with code [rosybrown][italic]{0}[/][/]:[/][/] [green]{1}[/]</value>
</data>
<data name="Files_for_all_languages" xml:space="preserve">
<value>Files for all languages:</value>
<value>[bold][slateblue1]Files for all languages:[/][/]</value>
</data>
<data name="Files_for_0_language" xml:space="preserve">
<value>Files for `{0}` language:</value>
<value>[bold][slateblue1]Files for [rosybrown][italic]`{0}`[/][/] language:[/][/]</value>
</data>
<data name="Requisite_0" xml:space="preserve">
<value>Requisite #{0}:</value>
<value>[bold][slateblue1]Requisite [teal]#{0}[/]:[/][/]</value>
</data>
<data name="Required_UID_0_version_1_2" xml:space="preserve">
<value>Required {0} version {1}.{2}</value>
<value>[bold][slateblue1]Required [rosybrown]{0}[/] version [teal]{1}.{2}[/][/][/]</value>
</data>
<data name="Required_variant_0" xml:space="preserve">
<value>Required variant: {0}</value>
<value>[bold][slateblue1]Required variant:[/][/] [rosybrown]{0}[/]</value>
</data>
<data name="Requisite_for_language_0_1" xml:space="preserve">
<value>Requisite for language {0}: {1}</value>
<value>[bold][slateblue1]Requisite for language [italic][rosybrown]{0}[/][/]:[/][/] [green]{1}[/][/]</value>
</data>
<data name="SIS_Platform_UID_Series_60_1st_Edition" xml:space="preserve">
<value>Series 60 1st Edition</value>
@@ -129,7 +129,7 @@
<value>UID 0x{0:X8}</value>
</data>
<data name="Archive_options_0" xml:space="preserve">
<value>Archive options: {0}</value>
<value>[bold][slateblue1]Archive options:[/][/] [blue]{0}[/]</value>
</data>
<data name="SIS_Platform_UID_UIQ_21" xml:space="preserve">
<value>UIQ v2.1</value>
@@ -240,9 +240,18 @@
<value>Nokia E61</value>
</data>
<data name="Option_0" xml:space="preserve">
<value>Option {0}:</value>
<value>[bold][slateblue1]Option [teal]{0}[/]:[/][/]</value>
</data>
<data name="Name_for_language_0_1" xml:space="preserve">
<value>Name for language {0}: {1}</value>
<value>[bold][slateblue1]Name for language [italic][rosybrown]{0}[/][/]:[/][/] [green]{1}[/]</value>
</data>
<data name="This_file_format_is_not_yet_implemented" xml:space="preserve">
<value>[red]This file format is not yet implemented, no more information can be decoded.[/]</value>
</data>
<data name="Found_component_name_for_language_0_at_1_with_a_length_of_2_bytes" xml:space="preserve">
<value>[slateblue1]Found component name for language [italic][rosybrown]{0}[/][/] at [teal]{1}[/] with a length of [lime]{2}[/] bytes[/]</value>
</data>
<data name="Conditions" xml:space="preserve">
<value>[bold][slateblue1]Conditions:[/][/]</value>
</data>
</root>

View File

@@ -39,6 +39,7 @@ using System.Text;
using Aaru.CommonTypes.Interfaces;
using Aaru.Helpers;
using Aaru.Logging;
using Spectre.Console;
using Marshal = Aaru.Helpers.Marshal;
namespace Aaru.Archives;
@@ -83,35 +84,35 @@ public sealed partial class Symbian
stream.EnsureRead(buffer, 0, buffer.Length);
SymbianHeader sh = Marshal.ByteArrayToStructureLittleEndian<SymbianHeader>(buffer);
AaruLogging.Debug(MODULE_NAME, "sh.uid1 = {0}", sh.uid1);
AaruLogging.Debug(MODULE_NAME, "sh.uid2 = {0}", sh.uid2);
AaruLogging.Debug(MODULE_NAME, "sh.uid3 = {0}", sh.uid3);
AaruLogging.Debug(MODULE_NAME, "sh.uid4 = {0}", sh.uid4);
AaruLogging.Debug(MODULE_NAME, "sh.crc16 = {0}", sh.crc16);
AaruLogging.Debug(MODULE_NAME, "sh.languages = {0}", sh.languages);
AaruLogging.Debug(MODULE_NAME, "sh.files = {0}", sh.files);
AaruLogging.Debug(MODULE_NAME, "sh.requisites = {0}", sh.requisites);
AaruLogging.Debug(MODULE_NAME, "sh.inst_lang = {0}", sh.inst_lang);
AaruLogging.Debug(MODULE_NAME, "sh.inst_files = {0}", sh.inst_files);
AaruLogging.Debug(MODULE_NAME, "sh.inst_drive = {0}", sh.inst_drive);
AaruLogging.Debug(MODULE_NAME, "sh.capabilities = {0}", sh.capabilities);
AaruLogging.Debug(MODULE_NAME, "sh.inst_version = {0}", sh.inst_version);
AaruLogging.Debug(MODULE_NAME, "sh.options = {0}", sh.options);
AaruLogging.Debug(MODULE_NAME, "sh.type = {0}", sh.type);
AaruLogging.Debug(MODULE_NAME, "sh.major = {0}", sh.major);
AaruLogging.Debug(MODULE_NAME, "sh.minor = {0}", sh.minor);
AaruLogging.Debug(MODULE_NAME, "sh.variant = {0}", sh.variant);
AaruLogging.Debug(MODULE_NAME, "sh.lang_ptr = {0}", sh.lang_ptr);
AaruLogging.Debug(MODULE_NAME, "sh.files_ptr = {0}", sh.files_ptr);
AaruLogging.Debug(MODULE_NAME, "sh.reqs_ptr = {0}", sh.reqs_ptr);
AaruLogging.Debug(MODULE_NAME, "sh.certs_ptr = {0}", sh.certs_ptr);
AaruLogging.Debug(MODULE_NAME, "sh.comp_ptr = {0}", sh.comp_ptr);
AaruLogging.Debug(MODULE_NAME, "sh.sig_ptr = {0}", sh.sig_ptr);
AaruLogging.Debug(MODULE_NAME, "sh.caps_ptr = {0}", sh.caps_ptr);
AaruLogging.Debug(MODULE_NAME, "sh.instspace = {0}", sh.instspace);
AaruLogging.Debug(MODULE_NAME, "sh.maxinsspc = {0}", sh.maxinsspc);
AaruLogging.Debug(MODULE_NAME, "sh.reserved1 = {0}", sh.reserved1);
AaruLogging.Debug(MODULE_NAME, "sh.reserved2 = {0}", sh.reserved2);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.uid1[/] = [teal]{0}[/]", sh.uid1);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.uid2[/] = [teal]{0}[/]", sh.uid2);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.uid3[/] = [teal]{0}[/]", sh.uid3);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.uid4[/] = [teal]{0}[/]", sh.uid4);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.crc16[/] = [teal]{0}[/]", sh.crc16);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.languages[/] = [teal]{0}[/]", sh.languages);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.files[/] = [teal]{0}[/]", sh.files);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.requisites[/] = [teal]{0}[/]", sh.requisites);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.inst_lang[/] = [teal]{0}[/]", sh.inst_lang);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.inst_files[/] = [teal]{0}[/]", sh.inst_files);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.inst_drive[/] = [teal]{0}[/]", sh.inst_drive);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.capabilities[/] = [teal]{0}[/]", sh.capabilities);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.inst_version[/] = [teal]{0}[/]", sh.inst_version);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.options[/] = [teal]{0}[/]", sh.options);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.type[/] = [teal]{0}[/]", sh.type);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.major[/] = [teal]{0}[/]", sh.major);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.minor[/] = [teal]{0}[/]", sh.minor);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.variant[/] = [teal]{0}[/]", sh.variant);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.lang_ptr[/] = [teal]{0}[/]", sh.lang_ptr);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.files_ptr[/] = [teal]{0}[/]", sh.files_ptr);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.reqs_ptr[/] = [teal]{0}[/]", sh.reqs_ptr);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.certs_ptr[/] = [teal]{0}[/]", sh.certs_ptr);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.comp_ptr[/] = [teal]{0}[/]", sh.comp_ptr);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.sig_ptr[/] = [teal]{0}[/]", sh.sig_ptr);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.caps_ptr[/] = [teal]{0}[/]", sh.caps_ptr);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.instspace[/] = [teal]{0}[/]", sh.instspace);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.maxinsspc[/] = [teal]{0}[/]", sh.maxinsspc);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.reserved1[/] = [teal]{0}[/]", sh.reserved1);
AaruLogging.Debug(MODULE_NAME, "[navy]sh.reserved2[/] = [teal]{0}[/]", sh.reserved2);
_release6 = false;
@@ -123,7 +124,7 @@ public sealed partial class Symbian
_release6 = true;
description.AppendLine();
description.AppendLine("This file format is not yet implemented, no more information can be decoded.");
description.AppendLine(Localization.This_file_format_is_not_yet_implemented);
information = description.ToString();
@@ -188,7 +189,7 @@ public sealed partial class Symbian
for(int i = 0; i < sh.languages; i++)
{
AaruLogging.Debug(MODULE_NAME,
"Found component name for language {0} at {1} with a length of {2} bytes",
Localization.Found_component_name_for_language_0_at_1_with_a_length_of_2_bytes,
languages[i],
componentRecord.namesPointers[i],
componentRecord.namesLengths[i]);
@@ -230,7 +231,7 @@ public sealed partial class Symbian
for(int i = 0; i < languages.Count; i++)
{
if(i > 0) description.Append(", ");
description.Append($"{languages[i]}");
description.Append($"[italic][rosybrown]{languages[i]}[/][/]");
}
description.AppendLine();
@@ -240,7 +241,7 @@ public sealed partial class Symbian
{
description.AppendFormat(Localization.Component_name_for_language_with_code_0_1,
languages[i],
componentRecord.names[i])
Markup.Escape(componentRecord.names[i]))
.AppendLine();
}
@@ -276,7 +277,7 @@ public sealed partial class Symbian
description.AppendFormat(Localization.Requisite_0, r).AppendLine();
description.AppendFormat("\t" + Localization.Required_UID_0_version_1_2,
DecodePlatformUid(requisiteRecord.uid),
Markup.Escape(DecodePlatformUid(requisiteRecord.uid)),
requisiteRecord.majorVersion,
requisiteRecord.minorVersion)
.AppendLine();
@@ -292,7 +293,7 @@ public sealed partial class Symbian
description.AppendFormat("\t" + Localization.Requisite_for_language_0_1,
languages[i],
_encoding.GetString(buffer))
Markup.Escape(_encoding.GetString(buffer)))
.AppendLine();
}
@@ -342,7 +343,7 @@ public sealed partial class Symbian
description.AppendLine(Localization.Files_for_all_languages);
foreach(DecodedFileRecord file in _files.Where(t => t.language is null))
description.AppendLine($"{file.destinationName}");
description.AppendLine($"[green]{Markup.Escape(file.destinationName)}[/]");
description.AppendLine();
}
@@ -354,7 +355,7 @@ public sealed partial class Symbian
description.AppendFormat(Localization.Files_for_0_language, lang).AppendLine();
foreach(DecodedFileRecord file in _files.Where(t => t.language == lang))
description.AppendLine($"{file.destinationName}");
description.AppendLine($"[green]{Markup.Escape(file.destinationName)}[/]");
description.AppendLine();
}
@@ -369,7 +370,9 @@ public sealed partial class Symbian
foreach(KeyValuePair<string, string> kvp in option.names)
{
description.AppendFormat("\t" + Localization.Name_for_language_0_1, kvp.Key, kvp.Value)
description.AppendFormat("\t" + Localization.Name_for_language_0_1,
kvp.Key,
Markup.Escape(kvp.Value))
.AppendLine();
}
}
@@ -379,8 +382,8 @@ public sealed partial class Symbian
if(_conditions.Count > 0)
{
description.AppendLine("Conditions:");
foreach(string condition in _conditions) description.AppendLine(condition);
description.AppendLine(Localization.Conditions);
foreach(string condition in _conditions) description.AppendLine(Markup.Escape($"[green]{condition}[/]"));
}
information = description.ToString();