217 lines
8.3 KiB
C
217 lines
8.3 KiB
C
//
|
|
// This file is executed when a PalmPilot program is loaded.
|
|
// You may customize it as you wish.
|
|
//
|
|
// TODO:
|
|
// - decompilation of various resource types
|
|
// (we don't have any information on the formats)
|
|
//
|
|
|
|
#include <idc.idc>
|
|
|
|
//-----------------------------------------------------------------------
|
|
//
|
|
// Process each resource and make some routine tasks
|
|
//
|
|
static process_segments()
|
|
{
|
|
auto ea,segname,prefix;
|
|
|
|
for ( ea=get_first_seg(); ea != BADADDR; ea=get_next_seg(ea) )
|
|
{
|
|
segname = get_segm_name(ea);
|
|
prefix = substr(segname,0,4);
|
|
if ( segname == "data0000" )
|
|
{
|
|
if ( get_wide_dword(ea) == 0xFFFFFFFF )
|
|
{
|
|
create_dword(ea);
|
|
set_cmt(ea,"Loader stores SysAppInfoPtr here", 0);
|
|
}
|
|
continue;
|
|
}
|
|
if ( prefix == "TRAP" )
|
|
{
|
|
create_word(ea);
|
|
op_hex(ea,0);
|
|
set_cmt(ea,"System trap function code", 0);
|
|
continue;
|
|
}
|
|
if ( prefix == "tSTR" )
|
|
{
|
|
create_strlit(ea,get_segm_end(ea));
|
|
set_cmt(ea,"String resource", 0);
|
|
continue;
|
|
}
|
|
if ( prefix == "tver" )
|
|
{
|
|
create_strlit(ea,get_segm_end(ea));
|
|
set_cmt(ea,"Version number string", 0);
|
|
continue;
|
|
}
|
|
if ( prefix == "tAIN" )
|
|
{
|
|
create_strlit(ea,get_segm_end(ea));
|
|
set_cmt(ea,"Application icon name", 0);
|
|
continue;
|
|
}
|
|
if ( prefix == "pref" )
|
|
{
|
|
auto flags,cmt;
|
|
flags = get_wide_word(ea);
|
|
create_word(ea); op_hex(ea,0); set_name(ea,"flags");
|
|
#define sysAppLaunchFlagNewThread 0x0001
|
|
#define sysAppLaunchFlagNewStack 0x0002
|
|
#define sysAppLaunchFlagNewGlobals 0x0004
|
|
#define sysAppLaunchFlagUIApp 0x0008
|
|
#define sysAppLaunchFlagSubCall 0x0010
|
|
cmt = "";
|
|
if ( flags & sysAppLaunchFlagNewThread ) cmt = cmt + "sysAppLaunchFlagNewThread\n";
|
|
if ( flags & sysAppLaunchFlagNewStack ) cmt = cmt + "sysAppLaunchFlagNewStack\n";
|
|
if ( flags & sysAppLaunchFlagNewGlobals) cmt = cmt + "sysAppLaunchFlagNewGlobals\n";
|
|
if ( flags & sysAppLaunchFlagUIApp ) cmt = cmt + "sysAppLaunchFlagUIApp\n";
|
|
if ( flags & sysAppLaunchFlagSubCall ) cmt = cmt + "sysAppLaunchFlagSubCall";
|
|
set_cmt(ea,cmt, 0);
|
|
ea = ea + 2;
|
|
create_dword(ea); op_hex(ea,0); set_name(ea,"stack_size");
|
|
ea = ea + 4;
|
|
create_dword(ea); op_hex(ea,0); set_name(ea,"heap_size");
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
//
|
|
// Create a enumeration with system action codes
|
|
//
|
|
static make_actions()
|
|
{
|
|
auto id;
|
|
id = add_enum(-1,"SysAppLaunchCmd",FF_0NUMD);
|
|
if ( id != -1 )
|
|
{
|
|
set_enum_cmt(id,"Action codes",0);
|
|
add_enum_member(id, "sysAppLaunchCmdNormalLaunch", 0, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdFind", 1, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdGoTo", 2, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdSyncNotify", 3, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdTimeChange", 4, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdSystemReset", 5, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdAlarmTriggered", 6, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdDisplayAlarm", 7, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdCountryChange", 8, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdSyncRequest", 9, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdSaveData", 10, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdInitDatabase", 11, -1);
|
|
add_enum_member(id, "sysAppLaunchCmdSyncCallApplication", 12, -1);
|
|
set_enum_member_cmt(get_enum_member(id, 0, 0, -1), "Normal Launch", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 1, 0, -1), "Find string", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 2, 0, -1), "Launch and go to a particular record", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 3, 0, -1),
|
|
"Sent to apps whose databases changed\n"
|
|
"during HotSync after the sync has\n"
|
|
"been completed", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 4, 0, -1), "The system time has changed", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 5, 0, -1), "Sent after System hard resets", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 6, 0, -1), "Schedule next alarm", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 7, 0, -1), "Display given alarm dialog", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 8, 0, -1), "The country has changed", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 9, 0, -1), "The \"HotSync\" button was pressed", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 10, 0, -1),
|
|
"Sent to running app before\n"
|
|
"sysAppLaunchCmdFind or other\n"
|
|
"action codes that will cause data\n"
|
|
"searches or manipulation", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 11, 0, -1),
|
|
"Initialize a database; sent by\n"
|
|
"DesktopLink server to the app whose\n"
|
|
"creator ID matches that of the database\n"
|
|
"created in response to the \"create db\" request", 1);
|
|
set_enum_member_cmt(get_enum_member(id, 12, 0, -1),
|
|
"Used by DesktopLink Server command\n"
|
|
"\"call application\"", 1);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
//
|
|
// Create a enumeration with event codes
|
|
//
|
|
static make_events()
|
|
{
|
|
auto id;
|
|
id = add_enum(-1,"events",FF_0NUMD);
|
|
if ( id != -1 )
|
|
{
|
|
set_enum_cmt(id,"Event codes",0);
|
|
add_enum_member(id, "nilEvent", 0, -1);
|
|
add_enum_member(id,"penDownEvent", 1, -1);
|
|
add_enum_member(id,"penUpEvent", 2, -1);
|
|
add_enum_member(id,"penMoveEvent", 3, -1);
|
|
add_enum_member(id,"keyDownEvent", 4, -1);
|
|
add_enum_member(id,"winEnterEvent", 5, -1);
|
|
add_enum_member(id,"winExitEvent", 6, -1);
|
|
add_enum_member(id,"ctlEnterEvent", 7, -1);
|
|
add_enum_member(id,"ctlExitEvent", 8, -1);
|
|
add_enum_member(id,"ctlSelectEvent", 9, -1);
|
|
add_enum_member(id,"ctlRepeatEvent", 10, -1);
|
|
add_enum_member(id,"lstEnterEvent", 11, -1);
|
|
add_enum_member(id,"lstSelectEvent", 12, -1);
|
|
add_enum_member(id,"lstExitEvent", 13, -1);
|
|
add_enum_member(id,"popSelectEvent", 14, -1);
|
|
add_enum_member(id,"fldEnterEvent", 15, -1);
|
|
add_enum_member(id,"fldHeightChangedEvent", 16, -1);
|
|
add_enum_member(id,"fldChangedEvent", 17, -1);
|
|
add_enum_member(id,"tblEnterEvent", 18, -1);
|
|
add_enum_member(id,"tblSelectEvent", 19, -1);
|
|
add_enum_member(id,"daySelectEvent", 20, -1);
|
|
add_enum_member(id,"menuEvent", 21, -1);
|
|
add_enum_member(id,"appStopEvent", 22, -1);
|
|
add_enum_member(id,"frmLoadEvent", 23, -1);
|
|
add_enum_member(id,"frmOpenEvent", 24, -1);
|
|
add_enum_member(id,"frmGotoEvent", 25, -1);
|
|
add_enum_member(id,"frmUpdateEvent", 26, -1);
|
|
add_enum_member(id,"frmSaveEvent", 27, -1);
|
|
add_enum_member(id,"frmCloseEvent", 28, -1);
|
|
add_enum_member(id,"tblExitEvent", 29, -1);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
static main()
|
|
{
|
|
process_segments();
|
|
make_actions();
|
|
make_events();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
#ifdef __undefined_symbol__
|
|
// WE DO NOT USE IDC HOTKEYS, JUST SIMPLE KEYBOARD MACROS
|
|
// (see IDA.CFG, macro Alt-5 for mc68k)
|
|
//-----------------------------------------------------------------------
|
|
//
|
|
// Register Ctrl-R as a hotkey for "make offset from A5" command
|
|
// (not used, simple keyboard macro is used instead, see IDA.CFG)
|
|
//
|
|
// There is another (manual) way to convert an operand to an offset:
|
|
// - press Ctrl-R
|
|
// - enter "A5BASE"
|
|
// - press Enter
|
|
//
|
|
static setup_pilot()
|
|
{
|
|
auto h0,h1;
|
|
h0 = "Alt-1";
|
|
h1 = "Alt-2";
|
|
add_idc_hotkey(h0,"a5offset0");
|
|
add_idc_hotkey(h1,"a5offset1");
|
|
msg("Use %s to convert the first operand to an offset from A5\n",h0);
|
|
msg("Use %s to convert the second operand to an offset from A5\n",h1);
|
|
}
|
|
|
|
static a5offset0(void) { op_plain_offset(get_screen_ea(),0,get_name_ea_simple("A5BASE")); }
|
|
static a5offset1(void) { op_plain_offset(get_screen_ea(),1,get_name_ea_simple("A5BASE")); }
|
|
|
|
#endif // 0
|