This source file includes following definitions.
- usage
- dump_levent_table
- process_dump
- main
1 #include <stdio.h>
2 #include <stdint.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include "dumputil.h"
6
7 int opt_def;
8 int opt_full;
9
10 void usage()
11 {
12 fprintf(stderr,"find_levent [-full] [-def] <dumpfile.bin> <base address>\n");
13 exit(1);
14 }
15
16 void dump_levent_table(dump_t *dump,unsigned index)
17 {
18 unsigned i;
19 printf("id hex, id dec, name, param\n");
20 for(i=index; i < dump->words - 3 && dump->pw[i]; i+=3) {
21 printf("0x%04x, %5d, %s, %d\n",dump->pw[i+1],
22 dump->pw[i+1],
23 (*(deref_string_ptr(dump,i*4)))?deref_string_ptr(dump,i*4):"(none)",
24 dump->pw[i+2]);
25 }
26 }
27
28 int process_dump(dump_t *dump)
29 {
30 const char *sig_str="PressRightButton";
31 unsigned mark_offset=0;
32 unsigned mark_addr=0;
33 unsigned i,j;
34 while(find_cstring(dump,&mark_offset,sig_str)) {
35 mark_addr=offset_to_ptr(dump,mark_offset);
36
37 i=0;
38 while(find_word_aligned(dump,&i,mark_addr)) {
39 if( dump->pw[i+1] > 0x800 &&
40 dump->pw[i+1] < 0xFFFF &&
41 dump->pw[i+2] == 0) {
42
43 for (j=i; j > 3; j-=3) {
44 if(dump->pw[j+1]==0x800 && deref_byte_ptr(dump,j*4) == 0 ) {
45 if(opt_def) {
46 printf("DEF(levent_table,0x%X)\n",j*4+dump->base);
47 }
48 else {
49 printf("levent_table 0x%X\n",j*4+dump->base);
50 }
51 if(opt_full) {
52 dump_levent_table(dump,j);
53 }
54 return 1;
55 }
56 }
57 }
58 i++;
59 }
60 mark_offset += strlen(sig_str);
61 }
62 if(!mark_offset) {
63 fprintf(stderr,"error: \"%s\" not found\n",sig_str);
64 }
65 else {
66 fprintf(stderr,"error: event table not found\n");
67 }
68 return 0;
69 }
70
71 int main(int argc, char **argv)
72 {
73
74 dump_t dump;
75 int i;
76 const char *dumpname=NULL;
77 const char *base=NULL;
78
79 for(i = 1; i < argc; i++) {
80 if ( strcmp(argv[i],"-def") == 0 ) {
81 opt_def = 1;
82 }
83 else if (strcmp(argv[i],"-full") == 0 ) {
84 opt_full = 1;
85 }
86 else if ( argv[i][0] == '-' ) {
87 fprintf(stderr,"%s unknown option %s\n",argv[0],argv[i]);
88 usage();
89 }
90 else {
91 if (!dumpname) {
92 dumpname=argv[i];
93 } else if(!base) {
94 base=argv[i];
95 } else {
96 fprintf(stderr,"%s unexpected %s\n",argv[0],argv[i]);
97 usage();
98 }
99 }
100 }
101 if(!dumpname || !base) {
102 usage();
103 }
104
105 if(!load_dump(dumpname,base,&dump))
106 return 1;
107
108 if(!process_dump(&dump))
109 return 1;
110
111 return 0;
112 }