Tutorial

 

Difficulty: eXpert

Topic: Menu Structure by aZyWeRkz

 

My experience with g3nolite.

----------------------------

 

Ok! Ok! Ok!

Most information i have herein are gathered from posts of different members of NOKIAFree

specially from g3gg0. Thanx a lot guys.

 

The rest here is based on self discovery. I may be right, i maybe wrong. As far as im concerned, this is what i've learned from a couple of hours of playing with g3n0lite. Please feel free to add anything or make some corrections regarding this topic.

 

I'm not sure if this could also pass as a g3n0lite tutorial for dummies. :P

 

----------------------------

by aCe (aZyWeRks)

October 29, 2002

-----------------------------------

 

Apps used :

 

g3n0lite v1.2 by g3gg0

Hex Workshop 3.11 by BPSoft

PPMEdit 1.0A Cracked Edition by TNP (no offense)

Nokia PPM Manager Beta 0.91 by Vanov

 

Sample Flash :

 

3310 v5.57 Package F (has the least number of Languages as far as i know).

 

-----------------------------------

 

About Menu Structures

---------------------

 

For the uninitiated, this is what may have looked like a partial dump generated by g3n0lite.

Under language, just type ENGL for english. After clicking Read menustructure, if you don't get

the desired menu names (i.e. Phone book, Messages) you can alternatively tick Menu Description on or off.

I dunno much about it except that for me, sometimes it works with it, sometimes if without it. Just go figure.

 

[0x00783510] (0x0F) (0x10) (0x0101) [0x001113EE]

# --------------

[0x00000000] [0x00000000] [0x00000000] (0x0175) (0x00DC) (0x0000) (0x000D) (0x0100) (0x0024)

[0x00313ACD] [0x00000000] [0x00000000] (0x0053) (0x02C9) (0x0000) (0x003E) (0x0000) (0x0013) Phone book

[0x00313A67] [0x00000000] [0x00783490] (0x0057) (0x0387) (0x0000) (0x003E) (0x0000) (0x0014) Messages

[0x00783460] (0x0B) (0x80) (0x0101) [0x001113F6]

# --------------

[0x00313A67] [0x00000000] [0x00000000] (0x0175) (0x00DC) (0x0000) (0x000D) (0x0100) (0x0024) Messages

[0x00313BF6] [0x00000000] [0x00000021] (0x0175) (0x05E0) (0x0000) (0x0052) (0x0400) (0x0024) Write messages

[0x00313BBA] [0x00000000] [0x0000001E] (0x0175) (0x05E0) (0x0000) (0x0052) (0x0000) (0x0024) Inbox

[0x00313C17] [0x00000000] [0x0000001D] (0x0175) (0x05E0) (0x0000) (0x0052) (0x0000) (0x0024) Outbox

[0x00313656] [0x00000000] [0x0000008E] (0x0175) (0x05E0) (0x0000) (0x0052) (0x0000) (0x0024) Picture messages

 

For you to better understand this, i suggest that you have at least one instance of g3n0lite running.

 

Let's start with the topmost data.

----------------------------------

[0x00783510] (0x0F) (0x10) (0x0101) [0x001113EE]

 

As far as i know, you can ignore everything regarding this data except for (0x0F) and (0x10). It has got do with the number of root entries and sub entries respectively. This type of struct exists before any (sub) menu is created, kinda like amenu header.

 

On (0x0F), it is the number of root entries on your menu. If you are going to add or delete from the root entries,

then change the value of this entry accordingly. If its value is lesser than that of what you've changed, the last

unaccounted entry will be truncated. Conversely, if its higher, your app will generate an error upon writing.

Take note that counting starts with 0.

 

With (0x10), this is the value if the following entries below it are root entries (1st Level). On the next level menu(2nd),it'll be 0x80. On the 3nd level, it's 0xC0. I haven't really got the luxury to test all flash files regarding the value of these entries but in case its different, i think you'll still get the drift.

 

Next, the root entries.

-----------------------

[0x00000000] [0x00000000] [0x00000000] (0x0175) (0x00DC) (0x0000) (0x000D) (0x0100) (0x0024) [Null]

[0x00313ACD] [0x00000000] [0x00000000] (0x0053) (0x02C9) (0x0000) (0x003E) (0x0000) (0x0013) Phone book

 

I just ignored the first entry. I don't change it either. I call it a NULL entry. However, when making submenu entries, it is important that you make an entry such as this before making any other entry. Just clone this or any other submenu and change its entries accordingly. If used as a first null entry on a submenu, use the value of the first data of its parent menu entry. See illustration.

 

...

 

Since our main concern is from the first visible root entry down to its branches (i.e. Phone book....).

So let us take the Phone book entry into consideration.

 

Note : I'll try to explain whatever it is that i know of each values presented. Btw, the same structure is used

regardless if it is a root entry or a sub entry. Just some values differ.

 

[0x00313ACD] -> This is important. This is a particular address in your flash of which the data is the language entry id of your flash of which in this case is "Phone book."

 

To be more specific, use a hex editor and open the flash file you are editing, mine is the above mentioned.

0x00313ACD is a location in our flash. Since our phones start at address 0x00200000, subtracting this value, we get 0x00113ACD. On our hex editor, we then go to this particular address and we get the following values, 040403. If we pay attention, the entries around it seem to be ID's each indicated by 04 as the beginning.

But of what?

 

Using PPM Manager, create a text dump(chunk) of the said flash file. Open the text chunk.

Now back to the value, 040403, just disregard the first byte 04, all we really want is 0403 which

when converted to decimal is equivalent to 1027.

Back to our text chunk, the 1027th entry is "Phone book."

 

Illustration:

 

1025 ENGL Silent

1026 ENGL Phone book

1027 ENGL Phone book

1028 ENGL Clock\x0Asettings

1029 ENGL Phone\x0Asecurity

1030 ENGL Off

 

So it is now safe to assume that this entry points to the text value of this menu. Hence, it is very

important. If you want your menu point to a different entry, just change the value accordingly.

 

As a tip, if you are planning to add a new menu, try using entry 13 under COMM coz its empty.

Just write your menu text into it. Project-Z pointed it's menu to this entry, You could also try using a more obscure entry to replace.

 

[0x00000000] -> I just ignored these values (the second and the third). When making a new menu, all i did was fill this value with [0x00000000]. For existing ones, I just leave them as is. As far as i know, g3n0lite will figure out what value to put on these parts upon writing. Hehehe.

 

(0x0053) -> I'm not so sure about this but I think this is the bitmap ID. Using PPMEdit, entry 53 on your bitmaps

is actually your phonebook menu animation sequence. On some models though, there is a 1 byte difference

between this value and the bitmap ID. I dunno, maybe its a bug with PPMEdit or I just missed the whole point.

 

When creating new root menu's, it'll look funny if you don't have a bitmap with it. So if i'm adding one,

i point my bitmaps to one of the existing menu's. Just use the value for this entry and that of the last byte

entry (0x0013) of the menu whose bitmap were going to clone.

 

Take note that on submenus, the value of this one is either 0x175, 0x12D, etc. Just follow whatever

convention is used on the menu structure you are editing. I think its a lot more safe. I also noticed that

if you make a root menu into a sub menu of one of the entries and you don't change the original value of this

entry (and the rest that matters) the menu animation would actually show on your sub-menu. I dunno if

this would cause any problems coz i haven't fully tested it yet. So far, it worked ok for me.

 

(0x02C9) -> I've noticed that on sub-menus, the value for this part is usually constant (i.e 0x05E0, 0x0BBA). So when I make sub menu entries out of other entries, i just changed the values to either one of these.

 

When making menu's (root or otherwise), and if that entry is going to be a sub menu, then its value must

be 0x0387. And make sure that the next thing that follows it is a sub menu, otherwise you'll have a

buggy menu.

 

 

(0x0000) -> Ignored.

 

(0x003E) -> On making new menu's i just use whatever is common on the flash file i'm editing. Take note that on null menu's their values are different from that of the rest of the entries. Usually, on making my own submenu

I make all their values uniform except for the NULL one of which I use what is common on that flash.

 

(0x0000) -> Ignored. I place 0x0000 as entry on my new menu. The rest, i just let it be the same.

 

(0x0013) -> Don't know how important this one is but i change the values of this one on submenu entries to what is common. On root menu entry i've created, if i don't use the value of my cloned bitmap to my entry, a

different menu graphic will show. So basically, i cloned an existing root menu and just changed the rest

of the essential values.

 

There you go.

 

You can also change the menu tree order by just moving data entries up and down, but i guess everybody knows that. hehehe

 

 

 

 

Internet Explorer 6 or above recommended and macromedia flash 6 plugin for best result

© 2001 - 2004 SmaRkieS Interactive

For comments and suggestions email to [email protected]

 

Hosted by www.Geocities.ws

1