CHDK_DE Vorschauversion  Trunk Rev. 5663
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
find_levent.c-Dateireferenz
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include "dumputil.h"
+ Include-Abhängigkeitsdiagramm für find_levent.c:

gehe zum Quellcode dieser Datei

Funktionen

void usage ()
 
void dump_levent_table (dump_t *dump, unsigned index)
 
int process_dump (dump_t *dump)
 
int main (int argc, char **argv)
 

Variablen

int opt_def
 
int opt_full
 

Dokumentation der Funktionen

void dump_levent_table ( dump_t dump,
unsigned  index 
)

Definiert in Zeile 16 der Datei find_levent.c.

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 }
int main ( int  argc,
char **  argv 
)

Definiert in Zeile 71 der Datei find_levent.c.

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 }
int process_dump ( dump_t dump)

Definiert in Zeile 28 der Datei find_levent.c.

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  // find {char *->"PressRightButton,x,0}
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  // now work backwards to try to find start: p->"",0x800,
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 }
void usage ( void  )

Definiert in Zeile 10 der Datei find_levent.c.

11 {
12  fprintf(stderr,"find_levent [-full] [-def] <dumpfile.bin> <base address>\n");
13  exit(1);
14 }

Variablen-Dokumentation

int opt_def

Definiert in Zeile 7 der Datei find_levent.c.

int opt_full

Definiert in Zeile 8 der Datei find_levent.c.