PS3 [Research] LINK.XML information

This is a cool feature of XML that I didn't know. I will start using it from today's build.

It saves 96 bytes per line (I only could take off 2 lines due the "info" pair is variable).
So in 300 games it will save 28KB of memory and processing.
For the record... back in april 2018 i explained in this forum how the "include" works in XMBML files (post #6)
https://www.psx-place.com/threads/s...mb-items-partially-working.17313/#post-115487
And a couple of posts later (post #8) i wrote an example of how to implement it in webman
https://www.psx-place.com/threads/s...mb-items-partially-working.17313/#post-115495

But i think i mentioned it to you way before that date... i was thinking in it since the first time i realized about how the "include" works (months/years before i wrote the posts of the links, i was lucky to be given the files from some pre-retail firmwares lot of time before that thread)

Is nice you are going to use it finally, it allows to split the info in groups a lot, there are many ways to do it, actually i wonder if it can be made in "cascade"
Depending of how is made (and his restrictions), yeah, is going to shorten the xmbml files a lot :)
 
WOW :eek: This is an awesome discovery! Now we're in control of which plugin we can use in LINK.XML

I also was thinking webkit could be an attribute, but never thought about adding it to the tag <link>.

Thanks @DeViL303, @NewFile, @bguerville for your help.



These probably are used for internal validations during the parsing of the XML. I don't think they could provide any interest function.



I found something interesting here, at least for the generation of mygames.xml in wMM

The tags <String> and </String> can be reduced to <> and </> respectively like this:
Code:
<Table key="inc">
<Pair key="module_name"><>idle_plugin</></Pair>
<Pair key="bar_action"><>none</></Pair>
</Table>

This saves 12 bytes per pair or 48 bytes per game entry (each game is using 4 pairs).
With the include it saves 144 bytes per game entry. In 300 games it saves 42KB of memory and text processing.
Ah cool. Now between using "include", and "0" for localhost, and removing "string", we can make xmls much more optimized. Very nice.

Funny I had actually just recently been going through all the ultimate Toolbox xmls, and removing all extra whitespace, and making all queries be on a single line etc. Guess I need to do some more optimizing now. :D

This new LINK.XML discovery could have some interesting uses, for example HEN and HAN users could have enabler/installer icons that survive FW updates, making that process much simpler after it has been installed once.
 
Last edited:
include may be adding raw text instead of tags so worth a try

Code:
<Table key="pb">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>

<Table key="pm">
<String><String>/mount_ps3/dev_hdd0/PS2ISO/</String>
</Table>

<Table key="0043" include="pb">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_action" include="pm">Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
</Table>
Can someone post a few game entries from the mygames.xml generated by the actual webman ?, im trying to search for some samples in pastebin or something but i cant find any :/

What i mentioned about using the include in cascade requires to
1) make a complete list of all the <key>'s used by all the game formats (all posible keys)
2) identify the "dupe" <key>'s (commonly used by several game types)
3) try to imagine how to separate them in <table>'s that could be loaded by "game format", "game platform", etc...

So after the rebuilding of the xml structure we have the real <table> that contains only the info that is "unique" for that game (icon, title, path, and not much more)
And this <table> is loading other <table>... and the second <table> is loading a third <table> and so on... up to 3 or 4 levels
 
Last edited:
Can someone post a couple of game entries from the mygames.xml generated by the actual webman ?, im trying to search for some samples in pastebin or something but i cant find any :/

What i mentioned about using the include in cascade requires to
1) make a complete list of all the <key>'s used by all the game formats, etc (everything)
2) identify the "dupes" (or commonly used by several game types)
3) try to imagine how to separate them in "groups" (as dependencies of other groups)

So after the rebuilding of the xml structure we have the real entry, that contains only the info that is "unique" for that game (icon, title, path, etc...) and is loading an "include".. and that "include" is loading another "include", and so on
This post has a snippet taken from a mygames.xml https://www.psx-place.com/threads/research-link-xml-information.33031/#post-282227, but it is a little old now. I can not make a new one right now as i am in the middle of some HFW HEN tests and on plain HFW right now.

Here is one attached but its from 2019, I guess not much has changed. Its a little hard to read as there are no spaces or tabs.
 

Attachments

So after the rebuilding of the xml structure we have the real <table> that contains only the info that is "unique" for that game (icon, title, path, and not much more)
And this <table> is loading other <table>... and the second <table> is loading a third <table> and so on... up to 3 or 4 levels
This issue I see with this, is that you can only include attributes from the same view id.

So really you can only have one include per folder, so 1 for PS2 games, 1 for PS1 games etc 1 for PS3 games. There can be a little bit of optimization done I guess, it would save a couple of lines.


So instead of this:
Code:
<View id="seg_wm_ps2_items">
<Attributes>
<Table key="h0">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>
<Table key="u0">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="info"><String>/dev_usb000/PS2ISO</String></Pair>
</Table>
<Table key="0043" include="h0">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
</Table>
<Table key="0044" include="h0">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Vice City.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Vice City</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Vice+City.ISO</String></Pair>
</Table>
<Table key="0045" include="u0">
<Pair key="icon"><String>/dev_usb000/PS2ISO/Grand Theft Auto III.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto III</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_usb000/PS2ISO/Grand+Theft+Auto+III.iso</String></Pair>
</Table>

you could have this:
Code:
<View id="seg_wm_ps2_items">
<Attributes>
<Table key="2">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
</Table>
<Table key="u0" include="2">
<Pair key="info"><String>/dev_usb000/PS2ISO</String></Pair>
</Table>
<Table key="h0" include="2">
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>
<Table key="0043" include="h0">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
</Table>
<Table key="0044" include="h0">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Vice City.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Vice City</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Vice+City.ISO</String></Pair>
</Table>
<Table key="0045" include="u0">
<Pair key="icon"><String>/dev_usb000/PS2ISO/Grand Theft Auto III.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto III</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_usb000/PS2ISO/Grand+Theft+Auto+III.iso</String></Pair>
</Table>

402 bytes down to 339 bytes for just the "include" attributes. so it is worth doing I guess.
 
Last edited:
This post has a snippet taken from a mygames.xml https://www.psx-place.com/threads/research-link-xml-information.33031/#post-282227, but it is a little old now. I can not make a new one right now as i am in the middle of some HFW HEN tests and on plain HFW right now.

Here is one attached but its from 2019, I guess not much has changed. Its a little hard to read as there are no spaces or tabs.
Thanks, i missed it, thats good enought to show what i mean, the point is we can repeat the "include" in cascade as many times we want. I think there is no problem about it because the "include" is processed by whatever library from the official firmware is doing the xmbml parsing
For even shorter xmls, you can do this too. Not sure if you are doing it already, I did mention it somewhere once before.

In XMBML, You can use the "include" tag, to have attributes added to every item without needing to duplicate them. so for example take this little snippet of mygames.xml
Code:
<View id="seg_wm_ps2_items">
<Attributes>
<Table key="0043">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>
<Table key="0044">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Vice City.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Vice City</String></Pair>
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Vice+City.ISO</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>
<Table key="0045">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto III.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto III</String></Pair>
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+III.iso</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>

That is the very same as this:
Code:
<View id="seg_wm_ps2_items">
<Attributes>
<Table key="ps2_base">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>
<Table key="0043" include="ps2_base">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
</Table>
<Table key="0044" include="ps2_base">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Vice City.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Vice City</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Vice+City.ISO</String></Pair>
</Table>
<Table key="0045" include="ps2_base">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto III.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto III</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+III.iso</String></Pair>
</Table>

So you can basically take 3 lines off every entry, and you only need to add those lines once at the top, and then use the "include="ps2_base" to have them automatically added to every entry.

Thats good, and it should be optimal for this small sample with just 3 games... but is better to push it even further this way:

Code:
<View id="seg_wm_ps2_items">
<Attributes>

<Table key="actions">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
</Table>

<Table key="ps2_base" include="actions">
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>

<Table key="0043" include="ps2_base">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
</Table>
<Table key="0044" include="ps2_base">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Vice City.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Vice City</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+-+Vice+City.ISO</String></Pair>
</Table>
<Table key="0045" include="ps2_base">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto III.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto III</String></Pair>
<Pair key="module_action"><String>/mount_ps3/dev_hdd0/PS2ISO/Grand+Theft+Auto+III.iso</String></Pair>
</Table>

This way we can load the <Table key="actions"> with other game formats (just incase the <key>'s i moved to the "actions" table are generic for PS1, PS2, PS3, PSP... im not sure about it)

Anyway... in this sample there are like 3 levels of dependencies because im moving the most critical keys to the most deeper level of this "include" hierarchy and im not so sure if this ones are going to be a bit problematic
But i think it can be made with other <key>'s that are not critical, like the string displayed at bottom of the game icons for the <info> are generic but specific for the game type


Edit: I converted the sample mygames.xml from your post to "human readable" format and uploaded it here: https://pastebin.com/6E5nudn0
 
Yeah it will save a few bytes per game genre. But each game genre is in its own folder, and also each <table> entry has its own overheads so the saving is not as big as you might think.

My example above saves 63 bytes, but this is a one off saving. Not like 63 bytes for every game. Still worth it though if it works, every byte counts.

I just optimized Ultimate Toolbox by removing the word "string" from all xmls.

79,500 instances x 6 bytes, not bad. :D

Now I need to see how much using "include" could save here.
 
Last edited:
Yeah it will save a few bytes per game genre. But each game genre is in its own folder, and also each <table> entry has its own overheads so the saving is not as big as you might think.

My example above saves 63 bytes, but this is a one off saving. Not like 63 bytes for every game. Still worth it though if it works, every byte counts.
But the contents of the <info> string indicates the device path and are variable (it could be dev_hdd0 or dev_usb***), so is posible to separate this <key> into 2 tables and load them when needed

Im talking in general... im not sure if the amount of info displayed from webman has been improved in the latest versions... the only sample i have is the one you uploaded
 
But the contents of the <info> string indicates the device path and are variable (it could be dev_hdd0 or dev_usb***), so is posible to separate this <key> into 2 tables and load them when needed

Im talking in general... im not sure if the amount of info displayed from webman has been improved in the latest versions... the only sample i have is the one you uploaded
Yeah, see my example in post #45, that is what I did.
 
Yeah, see my example in post #45, that is what I did.
Is not the same, the table you made named "ps2_base" is hardcoded for dev_hdd0... so it cant be loaded when the game is in USB

The only solutions for that are:
1) Rename your table "ps2_base" to "ps2_base_hdd" and create a duplicated one named "ps2_base_usb" where the only difference is going to be the "info" string
2) Isolate the problematic "info" string in the way im suggesting :)
 
Is not the same, the table you made named "ps2_base" is hardcoded for dev_hdd0... so it cant be loaded when the game is in USB

The only solutions for that are:
1) Rename your table "ps2_base" to "ps2_base_hdd" and create a duplicated one named "ps2_base_usb" where the only difference is going to be the "info" string
2) Isolate the problematic "info" string in the way im suggesting :)

No, i think you must be looking at the before, check the second example, its the after. Its basically the same as what you did. I just used shorter names.

@aldostools If you really wanted to save a tiny bit more per game, instead of 0001, 0002 etc as labels, you could use a0 to z9 for first 260 games. This will save another 6 bytes per game. :)
 
Last edited:
No, i think you must be looking at the before, check the second example, its the after. Its basically the same as what you did. I just used shorter names.
Yeah sorry, i missed your post #45 when i was writing post #46 is the same concept :encouragement:

Just a detail that worths to be mentioned, not sure if you tryed it already but we dont know if the include can be used this way, repeatedly in the same line
Code:
<Table key="0001" include="xxx" include="yyy" include="zzz">
 
Yeah sorry, i missed your post #45 when i was writing post #46 is the same concept :encouragement:

Just a detail that worths to be mentioned, not sure if you tryed it already but we dont know if the include can be used this way, repeatedly in the same line
Code:
<Table key="0001" include="xxx" include="yyy" include="zzz">
Yeah, I was thinking about trying that. I did not yet as it seems like it would have to be include1 include2 as normally things can not have the same label, but it is possible that this works. So I will test it out.

BTW, not sure if you saw post #20, but something else new I learned yesterday that I never knew before, we can set priority in sub menus, also you can use a different attr than the key. but only when reading child=segment type links.

So this works fine to make an item other than the top one take priority for focus when the sub menu is opened.

Code:
<View id="seg_install_package">
<Attributes>
<Table key="focus">
<Pair key="focus_priority"><>-80</></Pair>
</Table>
</Attributes>
<Items>
<Query class="type:x-xmb/folder-pixmap" key="hdd0_install" src="#seg_install_files_hdd0"/>
<Query class="type:x-xmb/folder-pixmap" key="usb_install" attr="focus" src="#seg_install_files_usb"/>
<Query class="type:x-xmb/folder-pixmap" key="og_install" src="#seg_install_files_og"/>
</Items>
</View>
Kind of interesting. I have learned loads of new XMBML stuff recently. :)

My idea was that it could be used in webman xmls so it remembers the last game you mounted, and opens on that one again even after a reboot, but it has other uses. I can make menus in Ultimate Toolbox open in the middle, so less clicks needed to get to every item and stuff like that.

Also can have menus open on the most used item, without needing to move it to the top like before. Sometimes it does not suit to move the most used item to the top, for example if you want stuff in alphabetical order.
 
Last edited:
Btw @DeViL303 for PS3 is more tricky because as far i remember webman indicates the <info> path "dev_ntfs" (or "dev_usb") based in the filesystem of the usb device (and maybe another name for network device ?)
Also, the directory names of the paths are dependant of the game format too (folder "PS3ISO" for ISO format... or folder "GAMES" for JB format)

Thats something tricky, at this point the best who knows how is the best way to group them is @aldostools
 
Last edited:
BTW, not sure if you saw post #20, but something else new I learned yesterday that I never knew before, we can set priority in sub menus, also you can use a different attr than the key. but only when reading child=segment type links.

So this works fine to make an item other than the top one take priority for focus when the sub menu is opened.

Code:
<View id="seg_install_package">
<Attributes>
<Table key="focus">
<Pair key="focus_priority"><>-80</></Pair>
</Table>
</Attributes>
<Items>
<Query class="type:x-xmb/folder-pixmap" key="hdd0_install" src="#seg_install_files_hdd0"/>
<Query class="type:x-xmb/folder-pixmap" key="usb_install" attr="focus" src="#seg_install_files_usb"/>
<Query class="type:x-xmb/folder-pixmap" key="og_install" src="#seg_install_files_og"/>
</Items>
</View>
Kind of interesting. I have learned loads of new XMBML stuff recently. :)

My idea was that it could be used in webman xmls so it remembers the last game you mounted, and opens on that one again even after a reboot, but it has other uses. I can make menus in Ultimate Toolbox open in the middle, so less clicks needed to get to every item and stuff like that.

Also can have menus open on the most used item, without needing to move it to the top like before. Sometimes it does not suit to move the most used item to the top, for example if you want stuff in alphabetical order.
Im reading it again, yep this is used mostly on the top level of main XMB, and i never imagined what means the values of "focus_priority" but i made a list with all the valid values found in official firmwares, all this ones "should" work
"-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5", "6". "-50", "-49", "-48", "-47", "-46". "-80"
The other keys named "focus_detect" and "focus" i guess should be very related

---------------------
Btw, i guess the attribute tables are "available" for being loaded by the other childrens located at lower levels of the xmbml hierarchy
I mean.... eventually it could be handy in the xmbml mods to move some of the <Items> "one level down" of the hierarchy just to locate an attribute table common for all them in a higher level of the hierarchy
Dunno, just chilling, but this speculation could be related with what we was talking about the xmbml hierarchy of mygames.xml used by webman
 
Last edited:
Code:
<View id="seg_install_package">
<Attributes>
<Table key="focus">
<Pair key="focus_priority"><>-80</></Pair>
</Table>
</Attributes>
<Items>
<Query class="type:x-xmb/folder-pixmap" key="hdd0_install" src="#seg_install_files_hdd0"/>
<Query class="type:x-xmb/folder-pixmap" key="usb_install" attr="focus" src="#seg_install_files_usb"/>
<Query class="type:x-xmb/folder-pixmap" key="og_install" src="#seg_install_files_og"/>
</Items>
</View>
An small detail that worths to be mentioned, sorry for being so picky :)
The way how you are using the word "focus" in this sample is a bit problematic, i mean... "focus" is an official codename intended to be used this way, as a key of a <Pair> (not as a key of a <Table>)
Code:
<Pair key="focus"><>last</></Pair>
Only valid value found in official firmwares for the "focus" pair key was the string "last"... but based in it probably the string "first" is valid too
For the <Table> key is better to use custom names:
Code:
<Table key="custom_name">
And this in the line where is loaded:
Code:
<Query class="type:x-xmb/folder-pixmap" key="usb_install" attr="custom_name" src="#seg_install_files_usb"/>

I guess you tryed and is working, but you know... it looks a bit weird and could be a bit confusing for other people trying to make sense of all that names

Im also mentioning this detail because maybe you are unlocking some kind of black magic. I mean... maybe you are confusing firmware into doing something unexpected by sony developers (but handy for us) :D
 
Last edited:
ah yeah. no magic involved :)

I get your point but my intention was more so it would be more intuitive for noobs, when only one item on a big list has the attr="focus" its is very clear what that attr is doing. If that one item just have the attr that matches its key, it is harder for a noob to figure out what is going on and how to change it.

for example here:
Code:
<Items>
<Query class="type:x-xmb/folder-pixmap" key="p" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/Power_Options.xml#power_options"/>
<Query class="type:x-xmb/folder-pixmap" key="b" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/Backup_Utility.xml#seg_backup_utility"/>
<Query class="type:x-xmb/folder-pixmap" key="e" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/File_Manager.xml#seg_file_manager_items"/>
<Query class="type:x-xmb/folder-pixmap" key="f" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/Firmware_Settings.xml#seg_firmware_settings"/>
<Query class="type:x-xmb/folder-pixmap" key="m" attr="focus" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/Package_Manager.xml#seg_ultimate_package_manager"/>
<Query class="type:x-xmb/folder-pixmap" key="d" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/modules/Downloader_Module/Demo_Downloader.xml#seg_demo_main"/>
<Query class="type:x-xmb/folder-pixmap" key="v" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/Visual_Customisation.xml#seg_visual_customisation"/>
<Query class="type:x-xmb/folder-pixmap" key="s" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/Toolbox_Settings.xml#seg_toolbox_settings"/>
<Query class="type:x-xmb/folder-pixmap" key="a" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/Built_In_Apps.xml#built_in_apps"/>
</Items>

This makes it very easy to see what the attr is doing, it also makes it very easy to move that attr to any other item if you want to change the focus, rather than editing it to match the key, and then editing the table at the top too.

but it could be changed to something else generic, like "open_menu_on_this_item"
 
Last edited:
Well, what im going to say is a long string, but just for being explicit, what is doing is to add the key "focus_priority" with the value -80, so it could be made with the name "focus_priority-80" (or just "focus80")
Code:
<Query class="type:x-xmb/folder-pixmap" key="m" attr="focus_priority-80" src="xmb://localhost/dev_hdd0/game/ULTOOLBOX/USRDIR/xmls/Package_Manager.xml#seg_ultimate_package_manager"/>

This is a personal preference, but lets say... im trying to be preventive with this names just incase the other values of "focus_priority" comes in handy at some point... by now i dont really know how that values works other than yeah... it seems the -80 attracts the dualshock cursor for some reason, but the others should not be much different, i bet all them does some magic with the dualshock cursor so most probably are going to be handy too
Also, the pair keys "focus_detect" and simply "focus" could be as much handy too


Edit:
Is just we dont know well how they works by now... but eventually you could find yourself with 5 or 6 different ways to move the dualshock around and you are going to need to label them with different custom names
In that case the name "focus" you used is not going to be good enought, and as mentioned before is problematic because is an official codename
 
Last edited:
Well "focus" is only a problem if you have an issue with it, it works fine and it is as intuitive as it gets. I think seeing as no one has ever used the focus strings in 15 years except me and Sony, it will be ok.
 
@aldostools : with the shortening xmls thing. Guess what?

Turns out none of the tags really matter at all. :) We can shorten every one to just one letter :D

This:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<XMBML version="1.0">
    <View id="root">
        <Attributes>
            <Table key="seg_dlna_scan">
                <Pair key="focus_priority"><>4</></Pair>
            </Table>
            <Table key="seg_screenshot">
                <Pair key="focus_priority"><>3</></Pair>
            </Table>
            <Table key="gameDir">
                <Pair key="focus_priority"><>2</></Pair>
            </Table>
            <Table key="seg_dlna_device">
                <Pair key="focus_priority"><>1</></Pair>
            </Table>
            <Table key="seg_data_device">
                <Pair key="focus_priority"><>-50</></Pair>
            </Table>
            <Table key="seg_playlist_mgmt">
                <Pair key="focus_priority"><>3</></Pair>
            </Table>
            <Table key="seg_hdd_contents">
                <Pair key="focus_priority"><>0</></Pair>
            </Table>
        </Attributes>
        <Items>
            <Query
                class="type:x-xmb/folder-pixmap"
                key="seg_dlna_scan"
                attr="seg_dlna_scan"
                src="sel://localhost/isdlna?category_photo.xml#seg_dlna_scan"
                />
            <Query
                class="type:x-xmb/folder-pixmap"
                key="seg_screenshot"
                attr="seg_screenshot"
                src="sel://localhost/screenshot?category_photo.xml#seg_screenshot"
                />
            <Query
                class="type:x-xmb/folder-pixmap"
                key="seg_gameexit"
                src="sel://localhost/ingame?path=category_photo.xml#seg_gameexit&type=photo"
                />
            <Query
                class="type:x-xmb/folder-pixmap"
                key="gameDir"
                attr="gameDir"
                src="xcb://localhost/query?limit=2048&table=MMS_MEDIA_TYPE_HDD&sort=+Game:Common.stat.rating+Game:Common.timeCreated&cond=Aa+Game:Common.title+Ae+Game:Game.category AP"
                />
            <Query
                class="type:x-xmb/folder-pixmap"
                key="seg_dlna_device"
                attr="seg_dlna_device"
                src="xcb://localhost/query?table=MMS_MEDIA_TYPE_SYSTEM&genre=Photo&sort=+StorageMedia:Common.titleForSort&cond=Ae+StorageMedia:StorageMedia.type %xCB_MEDIA_TYPE_DLNA"
                />
            <Query
                class="type:x-xmb/folder-pixmap"
                key="seg_data_device"
                attr="seg_data_device"
                src="xcb://localhost/query?table=MMS_MEDIA_TYPE_SYSTEM&genre=Photo&sort=+StorageMedia:StorageMedia.sortOrder+StorageMedia:StorageMedia.timeInserted&cond=Ae+StorageMedia:StorageMedia.stat.mediaStatus %xCB_MEDIA_INSERTED+Ae+StorageMedia:StorageMedia.mediaFormat %xCB_MEDIA_FORMAT_DATA+AGL+StorageMedia:StorageMedia.type %xCB_MEDIA_TYPE_BDROM %xCB_MEDIA_TYPE_WM"
                />
            <Query
                class="type:x-xmb/folder-pixmap"
                key="seg_playlist_mgmt"
                attr="seg_playlist_mgmt"
                src="#seg_playlist_mgmt"
                />
            <Query
                class="type:x-xmb/folder-pixmap"
                key="seg_hdd_contents"
                attr="seg_hdd_contents"
                src="sel://localhost/ex?root.view_selected.photo"
                />
        </Items>
    </View>
    <View id="seg_dlna_scan">
        <Attributes>
            <Table key="scan">
                <Pair key="icon_rsc"><>item_tex_dlna_scan</></Pair>
                <Pair key="icon_notation"><>WNT_XmbItemMediaServerSearch</></Pair>
                <Pair key="title_rsc"><>msg_scan_mediaserver</></Pair>
                <Pair key="module_name"><>dlna_plugin</></Pair>
                <Pair key="module_action"><>dlna_scan</></Pair>
                <Pair key="bar_action"><>hide</></Pair>
             </Table>
        </Attributes>
        <Items>
            <Item
                class="type:x-xmb/module-action"
                key="scan"
                attr="scan"
            />
        </Items>
    </View>
    <View id="seg_playlist_mgmt">
        <Attributes>
            <Table key="mgmt">
                <Pair key="mode"><>playlistmgmt</></Pair>
                <Pair key="type"><>photo</></Pair>
            </Table>
        </Attributes>
        <Items>
            <Item class="type:x-xmb/xmlplaylist" key="mgmt" attr="mgmt" />
        </Items>
    </View>
    <View id="seg_playlist_mgmt_psp">
        <Attributes>
            <Table key="mgmt">
                <Pair key="mode"><>playlistmgmtpsp</></Pair>
                <Pair key="type"><>photo</></Pair>
            </Table>
        </Attributes>
        <Items>
            <Item class="type:x-xmb/xmlplaylist" key="mgmt" attr="mgmt" />
        </Items>
    </View>
    <View id="seg_playlist_fixed_items">
        <Attributes>
            <Table key="make_new_playlist">
                <Pair key="icon_rsc"><>tex_add_playlist</></Pair>
                <Pair key="title_rsc"><>msg_create_new_playlist</></Pair>
                <Pair key="icon_notation"><>WNT_XmbItemPlaylistAdd</></Pair>
                <Pair key="module_name"><>playlist_plugin</></Pair>
                <Pair key="module_action"><>make_new_playlist_photo</></Pair>
                <Pair key="bar_action"><>hide</></Pair>
             </Table>
        </Attributes>
        <Items>
            <Item class="type:x-xmb/module-action" key="make_new_playlist" attr="make_new_playlist" />
        </Items>
    </View>
    <View id="seg_playlist_empty">
        <Attributes>
            <Table key="empty">
                <Pair key="mode"><>playlistempty</></Pair>
                <Pair key="id"><></></Pair>
                <Pair key="path"><></></Pair>
            </Table>
        </Attributes>
        <Items>
            <Item class="type:x-xmb/xmlplaylist" key="empty" attr="empty" />
        </Items>
    </View>
    <View id="seg_hakoniwa">
        <Items>
            <Item class="type:x-xmb/xmlhakoniwa" key="hakoniwa"    attr="hakoniwa" />
        </Items>
    </View>
    <View id="seg_screenshot">
        <Items>
            <Item class="type:x-xmb/xmlscreenshot" key="screenshot" />
        </Items>
    </View>
    <View id="seg_gameexit">
        <Items>
            <Item class="type:x-xmb/xmlgameexit" key="gameexit" />
        </Items>
    </View>
</XMBML>
is read exactly the same as this:

Code:
<X version="1.0">
    <V id="root">
        <A>
            <T key="seg_dlna_scan">
                <P key="focus_priority"><>4</></P>
            </T>
            <T key="seg_screenshot">
                <P key="focus_priority"><>3</></P>
            </T>
            <T key="gameDir">
                <P key="focus_priority"><>2</></P>
            </T>
            <T key="seg_dlna_device">
                <P key="focus_priority"><>1</></P>
            </T>
            <T key="seg_data_device">
                <P key="focus_priority"><>-50</></P>
            </T>
            <T key="seg_playlist_mgmt">
                <P key="focus_priority"><>3</></P>
            </T>
            <T key="seg_hdd_contents">
                <P key="focus_priority"><>0</></P>
            </T>
        </A>
        <I>
            <Q
                class="type:x-xmb/folder-pixmap"
                key="seg_dlna_scan"
                attr="seg_dlna_scan"
                src="sel://localhost/isdlna?category_photo.xml#seg_dlna_scan"
                />
            <Q
                class="type:x-xmb/folder-pixmap"
                key="seg_screenshot"
                attr="seg_screenshot"
                src="sel://localhost/screenshot?category_photo.xml#seg_screenshot"
                />
            <Q
                class="type:x-xmb/folder-pixmap"
                key="seg_gameexit"
                src="sel://localhost/ingame?path=category_photo.xml#seg_gameexit&type=photo"
                />
            <Q
                class="type:x-xmb/folder-pixmap"
                key="gameDir"
                attr="gameDir"
                src="xcb://localhost/query?limit=2048&table=MMS_MEDIA_TYPE_HDD&sort=+Game:Common.stat.rating+Game:Common.timeCreated&cond=Aa+Game:Common.title+Ae+Game:Game.category AP"
                />
            <Q
                class="type:x-xmb/folder-pixmap"
                key="seg_dlna_device"
                attr="seg_dlna_device"
                src="xcb://localhost/query?table=MMS_MEDIA_TYPE_SYSTEM&genre=Photo&sort=+StorageMedia:Common.titleForSort&cond=Ae+StorageMedia:StorageMedia.type %xCB_MEDIA_TYPE_DLNA"
                />
            <Q
                class="type:x-xmb/folder-pixmap"
                key="seg_data_device"
                attr="seg_data_device"
                src="xcb://localhost/query?table=MMS_MEDIA_TYPE_SYSTEM&genre=Photo&sort=+StorageMedia:StorageMedia.sortOrder+StorageMedia:StorageMedia.timeInserted&cond=Ae+StorageMedia:StorageMedia.stat.mediaStatus %xCB_MEDIA_INSERTED+Ae+StorageMedia:StorageMedia.mediaFormat %xCB_MEDIA_FORMAT_DATA+AGL+StorageMedia:StorageMedia.type %xCB_MEDIA_TYPE_BDROM %xCB_MEDIA_TYPE_WM"
                />
            <Q
                class="type:x-xmb/folder-pixmap"
                key="seg_playlist_mgmt"
                attr="seg_playlist_mgmt"
                src="#seg_playlist_mgmt"
                />
            <Q
                class="type:x-xmb/folder-pixmap"
                key="seg_hdd_contents"
                attr="seg_hdd_contents"
                src="sel://localhost/ex?root.view_selected.photo"
                />
        </I>
    </V>
    <V id="seg_dlna_scan">
        <A>
            <T key="scan">
                <P key="icon_rsc"><>item_tex_dlna_scan</></P>
                <P key="icon_notation"><>WNT_XmbItemMediaServerSearch</></P>
                <P key="title_rsc"><>msg_scan_mediaserver</></P>
                <P key="module_name"><>dlna_plugin</></P>
                <P key="module_action"><>dlna_scan</></P>
                <P key="bar_action"><>hide</></P>
             </T>
        </A>
        <I>
            <I
                class="type:x-xmb/module-action"
                key="scan"
                attr="scan"
            />
        </I>
    </V>
    <V id="seg_playlist_mgmt">
        <A>
            <T key="mgmt">
                <P key="mode"><>playlistmgmt</></P>
                <P key="type"><>photo</></P>
            </T>
        </A>
        <I>
            <I class="type:x-xmb/xmlplaylist" key="mgmt" attr="mgmt" />
        </I>
    </V>
    <V id="seg_playlist_mgmt_psp">
        <A>
            <T key="mgmt">
                <P key="mode"><>playlistmgmtpsp</></P>
                <P key="type"><>photo</></P>
            </T>
        </A>
        <I>
            <I class="type:x-xmb/xmlplaylist" key="mgmt" attr="mgmt" />
        </I>
    </V>
    <V id="seg_playlist_fixed_items">
        <A>
            <T key="make_new_playlist">
                <P key="icon_rsc"><>tex_add_playlist</></P>
                <P key="title_rsc"><>msg_create_new_playlist</></P>
                <P key="icon_notation"><>WNT_XmbItemPlaylistAdd</></P>
                <P key="module_name"><>playlist_plugin</></P>
                <P key="module_action"><>make_new_playlist_photo</></P>
                <P key="bar_action"><>hide</></P>
             </T>
        </A>
        <I>
            <I class="type:x-xmb/module-action" key="make_new_playlist" attr="make_new_playlist" />
        </I>
    </V>
    <V id="seg_playlist_empty">
        <A>
            <T key="empty">
                <P key="mode"><>playlistempty</></P>
                <P key="id"><></></P>
                <P key="path"><></></P>
            </T>
        </A>
        <I>
            <I class="type:x-xmb/xmlplaylist" key="empty" attr="empty" />
        </I>
    </V>
    <V id="seg_hakoniwa">
        <I>
            <I class="type:x-xmb/xmlhakoniwa" key="hakoniwa"    attr="hakoniwa" />
        </I>
    </V>
    <V id="seg_screenshot">
        <I>
            <I class="type:x-xmb/xmlscreenshot" key="screenshot" />
        </I>
    </V>
    <V id="seg_gameexit">
        <I>
            <I class="type:x-xmb/xmlgameexit" key="gameexit" />
        </I>
    </V>
</X>

I just saved about 1MB on Ultimate Toolbox by applying these patches. From 5.9MB of XMBML down to 4.89MB of XMBML.
 
Last edited:
Back
Top