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

gehe zum Quellcode dieser Datei

Funktionen

stub_valuesnew_stub_values ()
 
static int read_line (FILE *f, char *buf)
 
static char * get_str (char *s, char *d)
 
static osigadd_sig (char *nm, char *val, osig **hdr, int is_comment)
 
osigfind_sig (osig *p, const char *nm)
 
osigfind_sig_val (osig *p, uint32_t val)
 
osigfind_sig_val_by_type (osig *p, uint32_t val, int typ)
 
osigfind_match (osig *p, const char *nm, uint32_t val)
 
void load_funcs (stub_values *sv, char *name)
 
static void load_stubs_file (char *name, int exclude_comments, osig **hdr)
 
void load_stubs (stub_values *sv, char *name, int exclude_comments)
 
void load_stubs_min (stub_values *sv)
 
void load_modemap (stub_values *sv)
 
void load_platform (stub_values *sv)
 
void load_propcases (stub_values *sv, char *fn)
 
void load_a_makefile (stub_values *sv, char *fn)
 
void load_makefile (stub_values *sv)
 

Dokumentation der Funktionen

static osig* add_sig ( char *  nm,
char *  val,
osig **  hdr,
int  is_comment 
)
static

Definiert in Zeile 75 der Datei stubs_load.c.

76 {
77  osig *p = malloc(sizeof(osig));
78  strcpy(p->nm, nm);
79  strcpy(p->sval, val);
80  p->pct = 0;
81  p->is_comment = is_comment;
82  p->type = 0;
83  p->nxt = *hdr;
84  *hdr = p;
85 
86  uint32_t v = 0, n = 0;
87  if ((strncmp(val,"0x",2) == 0) || (strncmp(val,"0X",2) == 0))
88  {
89  while (val)
90  {
91  sscanf(val,"%x",&n);
92  v += n;
93  val = strchr(val,'+');
94  if (val) val++;
95  }
96  }
97  else
98  {
99  sscanf(val,"%d",&v);
100  }
101 
102  p->val = v;
103  return p;
104 }
osig* find_match ( osig p,
const char *  nm,
uint32_t  val 
)

Definiert in Zeile 145 der Datei stubs_load.c.

146 {
147  p = find_sig(p, nm);
148  osig *f = p;
149  while (p)
150  {
151  if (p->val == val)
152  return p;
153  p = find_sig(p->nxt, nm);
154  }
155  return f;
156 }
osig* find_sig ( osig p,
const char *  nm 
)

Definiert in Zeile 109 der Datei stubs_load.c.

110 {
111  while (p)
112  {
113  if (strcmp(p->nm, nm) == 0) return p;
114  p = p->nxt;
115  }
116  return 0;
117 }
osig* find_sig_val ( osig p,
uint32_t  val 
)

Definiert in Zeile 120 der Datei stubs_load.c.

121 {
122  while (p)
123  {
124  if (p->val == val) return p;
125  p = p->nxt;
126  }
127  return 0;
128 }
osig* find_sig_val_by_type ( osig p,
uint32_t  val,
int  typ 
)

Definiert in Zeile 131 der Datei stubs_load.c.

132 {
133  while (p)
134  {
135  if ((p->val == val) && (p->type == typ)) return p;
136  p = p->nxt;
137  }
138  return 0;
139 }
static char* get_str ( char *  s,
char *  d 
)
static

Definiert in Zeile 50 der Datei stubs_load.c.

51 {
52  while ((*s == ' ') || (*s == '\t') || (*s == ',')) s++;
53  while (*s && (*s != ' ') && (*s != '\t') && (*s != ',') && (*s != '=') && (*s != ')'))
54  {
55  *d++ = *s++;
56  }
57  while (*s && (*s != ',') && (*s != '=') && (*s != ')'))
58  {
59  if (*s == '+')
60  {
61  *d++ = *s++;
62  while ((*s == ' ') || (*s == '\t') || (*s == ',')) s++;
63  while (*s && (*s != ' ') && (*s != '\t') && (*s != ',') && (*s != '=') && (*s != ')'))
64  {
65  *d++ = *s++;
66  }
67  }
68  else s++;
69  }
70  *d = 0;
71  return s;
72 }
void load_a_makefile ( stub_values sv,
char *  fn 
)

Definiert in Zeile 371 der Datei stubs_load.c.

372 {
373  FILE *f = fopen(fn, "rb");
374 
375  if (f == NULL) return;
376 
377  char line[500];
378  char nm[100];
379  char val[100];
380  char *s;
381 
382  while (read_line(f,line))
383  {
384  s = strstr(line, "=");
385  if (s != 0)
386  {
387  char *c = strstr(line, "#");
388  if ((c == 0) || (c > s))
389  {
390  if (c) *c = 0;
391  s = get_str(line,nm);
392  get_str(s+1,val);
393  add_sig(nm, val, &sv->makevals, 0);
394  }
395  }
396  }
397  fclose(f);
398 }
void load_funcs ( stub_values sv,
char *  name 
)

Definiert in Zeile 162 der Datei stubs_load.c.

163 {
164  FILE *f = fopen(name, "rb");
165 
166  if (f == NULL) return;
167 
168  char line[500];
169  char nm[100];
170  char val[100];
171  char *s;
172 
173  while (read_line(f,line))
174  {
175  s = get_str(line,val);
176  get_str(s,nm);
177  osig *p = add_sig(nm, val, &sv->stubs, 1);
178  p->type = TYPE_NHSTUB;
179  continue;
180  }
181  fclose(f);
182 }
void load_makefile ( stub_values sv)

Definiert in Zeile 400 der Datei stubs_load.c.

401 {
402  load_a_makefile(sv, "../../makefile.inc"); // new in CHDK 1.4
403  load_a_makefile(sv, "makefile.inc");
404 }
void load_modemap ( stub_values sv)

Definiert in Zeile 240 der Datei stubs_load.c.

241 {
242  FILE *f = fopen("../../shooting.c", "rb");
243 
244  if (f == NULL) return;
245 
246  char line[500];
247  char nm[100];
248  char val[12];
249  int found_modemap = 0;
250  char *s;
251 
252  while (read_line(f,line))
253  {
254  if (found_modemap)
255  {
256  s = strstr(line, "};");
257  if (s != 0) return;
258  s = strstr(line, "MODE_");
259  if (s != 0)
260  {
261  char *c = strstr(line, "//");
262  if ((c == 0) || (c > s))
263  {
264  s = get_str(s,nm);
265  get_str(s,val);
266  add_sig(nm, val, &sv->modemap, 0);
267  }
268  }
269  }
270  else
271  {
272  s = strstr(line, "modemap[");
273  if (s != 0) found_modemap = 1;
274  }
275  }
276 }
void load_platform ( stub_values sv)

Definiert in Zeile 279 der Datei stubs_load.c.

280 {
281  FILE *f = fopen("../../platform_camera.h", "rb");
282 
283  if (f == NULL) return;
284 
285  char line[500];
286  char val[12];
287  char div[12];
288  int v, d;
289  char *s;
290 
291  while (read_line(f,line))
292  {
293  s = strstr(line, "CAM_DNG_LENS_INFO");
294  if (s != 0)
295  {
296  char *c = strstr(line, "//");
297  if ((c == 0) || (c > s))
298  {
299  s = strstr(line,"{")+1;
300  s = get_str(s,val);
301  s = get_str(s,div);
302  v = atoi(val);
303  d = atoi(div);
304  sv->min_focus_len = (v * 1000) / d;
305  s = get_str(s,val);
306  s = get_str(s,div);
307  v = atoi(val);
308  d = atoi(div);
309  sv->max_focus_len = (v * 1000) / d;
310  }
311  }
312  s = strstr(line, "CAM_PROPSET");
313  if (s != 0)
314  {
315  char *c = strstr(line, "//");
316  if ((c == 0) || (c > s))
317  {
318  s = s + strlen("CAM_PROPSET");
319  s = get_str(s,val);
320  v = atoi(val);
321  sv->propset = v;
322  }
323  }
324  }
325  fclose(f);
326 }
void load_propcases ( stub_values sv,
char *  fn 
)

Definiert in Zeile 329 der Datei stubs_load.c.

330 {
331  FILE *f = fopen(fn, "rb");
332 
333  if (f == NULL) return;
334 
335  char line[500];
336  char *s;
337 
338  while (read_line(f,line))
339  {
340  s = strstr(line, "#define");
341  if (s == 0)
342  {
343  continue;
344  }
345  char *c = strstr(line, "//");
346  if (c && c < s)
347  {
348  continue;
349  }
350  char *nm = strtok(s+strlen("#define")," \t");
351  if(!nm)
352  {
353  continue;
354  }
355  if(strncmp(nm,"PROPCASE_",9) != 0)
356  {
357  continue;
358  }
359  char *val = strtok(NULL," \t");
360  if(!val)
361  {
362  continue;
363  }
364 
365  add_sig(nm, val, &sv->propcases, 0);
366  }
367  fclose(f);
368 }
void load_stubs ( stub_values sv,
char *  name,
int  exclude_comments 
)

Definiert in Zeile 228 der Datei stubs_load.c.

229 {
230  load_stubs_file(name, exclude_comments, &sv->stubs);
231 }
static void load_stubs_file ( char *  name,
int  exclude_comments,
osig **  hdr 
)
static

Definiert in Zeile 187 der Datei stubs_load.c.

188 {
189  FILE *f = fopen(name, "rb");
190 
191  if (f == NULL) return;
192 
193  char line[500];
194  char nm[100];
195  char val[100];
196  char *s;
197 
198  while (read_line(f,line))
199  {
200  int typ = TYPE_NHSTUB;
201  int off = 7;
202  s = strstr(line, "NHSTUB(");
203  if (s == 0) { off = 8; s = strstr(line, "NHSTUB2("); } // note may want to flag dif from NHSTUB
204  if (s == 0) { off = 7; s = strstr(line, "IGNORE("); typ = TYPE_IGNORE; }
205  if (s == 0) { off = 6; s = strstr(line, "NSTUB("); }
206  if (s == 0) { off = 4; s = strstr(line, "DEF("); typ = TYPE_DEF; }
207  if (s == 0) { off = 10; s = strstr(line, "DEF_CONST("); typ = TYPE_CONST; }
208  if (s != 0)
209  {
210  char *c = strstr(line, "//");
211  if ((exclude_comments == 0) || (c == 0) || (c > s))
212  {
213  s = get_str(s+off,nm);
214  if (typ != TYPE_IGNORE)
215  get_str(s,val);
216  else
217  val[0] = 0;
218  osig *p = add_sig(nm, val, hdr, ((c != 0) && (c <= s)) ? 1 : 0);
219  p->type = typ;
220  continue;
221  }
222  }
223  }
224  fclose(f);
225 }
void load_stubs_min ( stub_values sv)

Definiert in Zeile 234 der Datei stubs_load.c.

235 {
236  load_stubs_file("stubs_min.S", 1, &sv->stubs_min);
237 }
stub_values* new_stub_values ( )

Definiert in Zeile 17 der Datei stubs_load.c.

18 {
19  stub_values *p = malloc(sizeof(stub_values));
20  p->stubs = 0;
21  p->stubs_min = 0;
22  p->modemap = 0;
23  p->makevals = 0;
24  p->min_focus_len = 0;
25  p->max_focus_len = 0;
26  p->propcases = 0;
27  p->propset = 0;
28  return p;
29 }
static int read_line ( FILE f,
char *  buf 
)
static

Definiert in Zeile 35 der Datei stubs_load.c.

36 {
37  int eof = 0;
38  int len = 0;
39  while (1)
40  {
41  if (fread(buf,1,1,f) != 1) { eof = 1; break; }
42  if ((*buf == 0x0A) || (*buf == 0x0D)) break;
43  len++;
44  buf++;
45  }
46  *buf = 0;
47  return (eof == 0) || (len > 0);
48 }