Addon para el Bookmanager v3

Código:
include "x.inc"
include "lib2.asm"

org 0x15D7566E ;15EBEC6E
                       LDR     R3, off_15EBEC74
                       BX      R3
align 4
 off_15EBEC74    DCD loc_15E20CD0+1
loc_15EBEC78:

org 0x15D760B6 ;15EBF6BE
                       MOV     R1, 4

org 0x15D75FAA ;15EBF5B2
                       LDR     R3, off_15EBF5B8
                       BX      R3
align 4
 off_15EBF5B8    DCD loc_15E20CE0+1

org 0x15D76000 ;15EBF608
                       LDR     R3, off_15EBF60C
                       BX      R3
 off_15EBF60C    DCD loc_15E20D6E+1      
loc_15EBF610:

org 0x15D75EC2 ;15EBF4CA
                       LDR     R3, off_15EBF4D0
                       BX      R3
align 4
 off_15EBF4D0    DCD loc_15E20E88+1
loc_15EBF4D4:

;-------------------------------------

org 0x15d81470
loc_15E20CD0:                
                    
        ADD    R2, R0,    0
        BL    sub_15E20ECC
        ADD    R0, R5,    0
        LDR    R3, off_15E20D20
        BLX    R3
        LDR    R3, off_15E20D1C
        BX    R3


loc_15E20CE0:                
                    
        ADD    R4, R0,    0
        LDR    R5, [R0,8]
        LDR    R3, off_15E20D24
        BLX    R3        
        CMP    R0, 3
        BHI    loc_15E20D1A
        CMP    R0, 3
        BEQ    loc_15E20CF4
        LDR    R3, off_15E20D28
        BX    R3


loc_15E20CF4:                
        MOV    R0, 0
        PUSH    {R0}
        adr    R0, aElfSTabNumber 
        MOV    R1, 6
        LDR    R2, dword_15E20E28
        MOV    R3, 0
        LDR    R7, off_15E20E2C
        BLX    R7        
        ADD    SP, SP,    4
        ADD    R1, R0,    0
        ADD    R0, R4,    0
        LDR    R3, off_15E20D2C
        BLX    R3        
        BL    sub_15E20D34
        ADD    R1, R0,    0
        ADD    R0, R4,    0
        LDR    R3, off_15E20D30
        BLX    R3        

loc_15E20D1A:                
        POP    {R4-R7,PC}

off_15E20D1C    dw loc_15EBEC78+1    ;return
off_15E20D20    dw List_Insert+1    
off_15E20D24    dw GUIonMessage_GetCreatedItemIndex+1 
                    
off_15E20D28    dw 0x15D75FB6+1 ;loc_15EBF5BE+1    
off_15E20D2C    dw GUIonMessage_SetMenuItemText+1 
                    
off_15E20D30    dw GUIonMessage_SetMenuItemSecondLineText+1 
                    




sub_15E20D34:                
                    
        PUSH    {LR}
        MOV    R0, 0
        PUSH    {R0}
        BL    sub_15E20ECC
        CMP    R1, 0
        BEQ    loc_15E20D52
        CMP    R1, 1
        BEQ    loc_15E20D56
        CMP    R1, 2
        BEQ    loc_15E20D5A
        CMP    R1, 3
        BEQ    loc_15E20D5E
        adr    R0, aFifth    
        B    loc_15E20D60


loc_15E20D52:                
        adr    R0, aFirst    
        B    loc_15E20D60


loc_15E20D56:                
        adr    R0, aSecond    
        B    loc_15E20D60


loc_15E20D5A:                
        adr    R0, aThird    
        B    loc_15E20D60


loc_15E20D5E:                
        adr    R0, aFourth    

loc_15E20D60:                
                    
        MOV    R1, 6
        LDR    R2, dword_15E20E28
        MOV    R3, 0
        LDR    R7, off_15E20E2C
        BLX    R7        
        ADD    SP, SP,    4
        POP    {PC}




loc_15E20D6E:                
                    
        ADD    R4, R0,    0
        ADD    R0, R1,    0
        LDR    R3, off_15E20EB8
        BLX    R3        
        CMP    R0, 3
        BEQ    loc_15E20D7E
        LDR    R3, off_15E20E44
        BX    R3


loc_15E20D7E:                
        ADD    R7, R0,    0
        MOV    R1, 0x73
        STRB    R7, [R4,R1]
        ADD    R0, R4,    0
        LDR    R3, off_15E20E30
        BLX    R3        
        STR    R0, [R4,0x6C]
        MOV    R1, 9
        LDR    R3, off_15E20E34
        BLX    R3
        MOV    R0, 0
        PUSH    {R0}
        adr    R0, aElfSTabNumber 
        MOV    R1, 6
        LDR    R2, dword_15E20E28
        MOV    R3, 0
        LDR    R7, off_15E20E2C
        BLX    R7        
        ADD    SP, SP,    4
        ADD    R1, R0,    0
        LDR    R0, [R4,0x6C]
        LDR    R3, off_15E20E38
        BLX    R3        
        MOV    R0, 0
        PUSH    {R0}
        adr    R0, aFirst    
        MOV    R1, 6
        LDR    R2, dword_15E20E28
        MOV    R3, 0
        LDR    R7, off_15E20E2C
        BLX    R7        
        ADD    SP, SP,    4
        STR    R0, [SP]
        MOV    R0, 0
        PUSH    {R0}
        adr    R0, aSecond    
        MOV    R1, 6
        LDR    R2, dword_15E20E28
        MOV    R3, 0
        LDR    R7, off_15E20E2C
        BLX    R7        
        ADD    SP, SP,    4
        STR    R0, [SP,4]
        MOV    R0, 0
        PUSH    {R0}
        adr    R0, aThird    
        MOV    R1, 6
        LDR    R2, dword_15E20E28
        MOV    R3, 0
        LDR    R7, off_15E20E2C
        BLX    R7        
        ADD    SP, SP,    4
        STR    R0, [SP,8]
        MOV    R0, 0
        PUSH    {R0}
        adr    R0, aFourth    
        MOV    R1, 6
        LDR    R2, dword_15E20E28
        MOV    R3, 0
        LDR    R7, off_15E20E2C
        BLX    R7        
        ADD    SP, SP,    4
        STR    R0, [SP,0xC]
        MOV    R0, 0
        PUSH    {R0}
        adr    R0, aFifth    
        MOV    R1, 6
        LDR    R2, dword_15E20E28
        MOV    R3, 0
        LDR    R7, off_15E20E2C
        BLX    R7        
        ADD    SP, SP,    4
        STR    R0, [SP,0x10]
        LDR    R0, [R4,0x6C]
        MOV    R1, SP
        MOV    R2, 5
        LDR    R3, off_15E20E3C
        BLX    R3        
        BL    sub_15E20ECC
        LDR    R0, [R4,0x6C]
        LDR    R3, off_15E20E40
        BLX    R3        
        LDR    R3, off_15E20E48
        BX    R3

dword_15E20E28    dw 0xFFFF        
                    
off_15E20E2C    dw Str2ID+1        
                    
                    
off_15E20E30    dw CreateOneOfMany+1    
                    
off_15E20E34    dw GUIObject_SetStyle+1 
off_15E20E38    dw GUIObject_SetTitleText+1 
                    
off_15E20E3C    dw OneOfMany_SetTexts+1 
                    
off_15E20E40    dw OneOfMany_SetChecked+1 
                    
off_15E20E44    dw loc_15EBF610+1    ;return
off_15E20E48    dw 0x15D76072+1 ;loc_15EBF67A+1    ;addon
aElfSTabNumber    db "Elf's tab number:",0 
                    
        align 4
aFirst        db "First",0           
                    
        align 4
aSecond        db "Second",0          
                    
        db 0xFF
aThird        db "Third",0           
                    
        align 4
aFourth        db "Fourth",0          
                    
        db 0xFF
aFifth        db "Fifth",0           
                    
        align 4


loc_15E20E88:                
                    
        ADD    R4, R0,    0
        ADD    R0, R1,    0
        MOV    R6, 0x73
        LDRB    R7, [R4,R6]
        CMP    R7, 3
        BEQ    loc_15E20E9E
        LDR    R3, off_15E20EB8
        BLX    R3        
        ADD    R7, R0,    0
        LDR    R3, off_15E20EC4
        BX    R3


loc_15E20E9E:                
        LDR    R3, off_15E20EBC
        BLX    R3        
        BL    sub_15E20EF8
        BL    sub_15E20D34
        ADD    R2, R0,    0
        MOV    R1, 3
        LDR    R0, [R4,0x68]
        LDR    R3, off_15E20EC0
        BLX    R3        
        LDR    R3, off_15E20EC8
        BX    R3

off_15E20EB8    dw ListMenu_GetSelectedItem+1 
                    
                    
off_15E20EBC    dw OneOfMany_GetSelected+1 
                    
off_15E20EC0    dw ListMenu_SetSecondLineText+1 
                    
off_15E20EC4    dw loc_15EBF4D4+1    ;return
off_15E20EC8    dw 0x15D75F48+1 ;loc_15EBF550+1    ;addon




sub_15E20ECC:                
                    

var_28        = -0x28
var_C        = -0xC



        PUSH    {R0,R2-R5,LR}
        MOV    R0, 0
        PUSH    {R0}
        MOV    R3, 0xFF
        ADD    R3, 0x81
        MOV    R2, 1
        adr    R1, aElfstabnum_bin 
        LDR    R0, off_15E20F28
        LDR    R4, off_15E20F2C
        BLX    R4        
        ADD    R5, R0,    0
        MOV    R2, 4
        MOV    R1, SP
        LDR    R4, off_15E20F30
        BLX    R4        
        ADD    R0, R5,    0
        LDR    R4, off_15E20F38
        BLX    R4
        LDR    R1, [SP,0x28+var_28]
        ADD    SP, SP,    4
        POP    {R0,R2-R5,PC}



        align 4




sub_15E20EF8:                

var_20        = -0x20

        PUSH    {R0-R5,LR}
        SUB    SP, SP,    4
        STR    R0, [SP,0x20+var_20]
        MOV    R0, 0
        PUSH    {R0}
        MOV    R3, 0xFF
        ADD    R3, 0x81
        MOV    R2, 2
        adr    R1, aElfstabnum_bin 
        LDR    R0, off_15E20F28
        LDR    R4, off_15E20F2C
        BLX    R4        
        ADD    SP, SP,    4
        ADD    R5, R0,    0
        MOV    R2, 4
        MOV    R1, SP
        LDR    R4, off_15E20F34
        BLX    R4        
        ADD    R0, R5,    0
        LDR    R4, off_15E20F38
        BLX    R4
        ADD    SP, SP,    4
        POP    {R0-R5,PC}



        align 4
off_15E20F28    dw 0x15A62418 ;aTpaSystemSetti    15B9DA00
                    
                    
off_15E20F2C    dw _fopen+1        
                    
                    
off_15E20F30    dw fread+1        
                    
off_15E20F34    dw fwrite+1        
                    
off_15E20F38    dw fclose+1        
                    
aElfstabnum_bin    du    "ElfsTabNum.bin",0