CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
run-ubasic.c-Dateireferenz
#include "versions.h"
#include "ubasic.h"
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
+ Include-Abhängigkeitsdiagramm für run-ubasic.c:

gehe zum Quellcode dieser Datei

Funktionen

int ubasic_init (const char *program, int is_ptp)
 
int ubasic_run (void)
 
int ubasic_linenumber ()
 
int main (int argc, char *argv[])
 

Variablen

static const char program_static []
 
int ubasic_error
 
const char * ubasic_errstrings []
 

Dokumentation der Funktionen

int main ( int  argc,
char *  argv[] 
)

Definiert in Zeile 63 der Datei run-ubasic.c.

64 {
65  char *program;
66  if (argc == 1) {
67  // buildin program
68  program = (char *) program_static;
69  } else {
70  assert(argc == 2);
71  FILE * f = fopen(argv[1], "rb");
72  if (!f) {
73  perror("Error opening file");
74  exit(-1);
75  }
76 
77  fseek(f,0, SEEK_END);
78  int sz = ftell(f);
79  fseek(f,0, SEEK_SET);
80  program = (char *) malloc(sz+3);
81  int szr = fread(program,1,sz, f);
82  fclose(f);
83  if (szr != sz) {
84  perror("Error reading program");
85  }
86  printf("size: %d, read: %d \n", sz, szr);
87  program[sz] = '\n';
88  program[sz+1] = 0;
89  }
90 
91  printf("Program:\n%s\n=====================================\n\n", program);
92  ubasic_init(program,0);
94  do {
95  running = ubasic_run();
96  } while(running == SCRIPT_RUN_RUNNING);
97 
98  if (ubasic_error){
99  const char *msg;
102  } else {
104  }
105  fprintf(stderr, "Ubasic error near Line %d: %s\n", ubasic_linenumber(), msg);
106  }
107 
108  return 0;
109 }
int ubasic_init ( const char *  program,
int  is_ptp 
)
int ubasic_linenumber ( )

Definiert in Zeile 173 der Datei ubasic.c.

174 {
175  return tokenizer_line_number();
176 }
int ubasic_run ( void  )

Definiert in Zeile 2740 der Datei ubasic.c.

2741 {
2742  unsigned start_tick = get_tick_count();
2743  unsigned lines = 0;
2744  flag_yield = 0;
2745 
2746  do
2747  {
2748  if ( ended || tokenizer_finished() )
2749  {
2750  DEBUG_PRINTF("uBASIC program finished\n");
2751  if (ubasic_error)
2752  {
2753  // Generate error message
2754  char buf[100];
2755  const char *msg;
2757  {
2759  }
2760  else
2761  {
2763  }
2764  sprintf(buf, "uBASIC:%d %s ", ubasic_linenumber(), msg);
2765  // Show error message
2766  script_console_add_error((long)buf);
2768  return SCRIPT_RUN_ERROR;
2769  }
2770  // Show 'Finished' message
2772  return SCRIPT_RUN_ENDED;
2773  }
2774 
2775  line_statement();
2776 
2777  // Return control to CHDK only if external processing required
2778  if ( flag_yield )
2779  return SCRIPT_RUN_RUNNING;
2780 
2781  lines++;
2782  } while (lines < yield_max_lines && get_tick_count() - start_tick < yield_max_ms);
2783 
2784  return SCRIPT_RUN_RUNNING;
2785 }

Variablen-Dokumentation

const char program_static[]
static
Initialisierung:
=
"sleep 1000\n\
if a<1 then let a=2\n\
if b<1 then let b=3\n\
for s=1 to a\n\
shoot\n\
gosub \"incEv\"\n\
next s\n\
shoot\n\
end\n\
\n\
:incEv \n\
\n\
for n=1 to b\n\
click \"right\"\n\
next n\n\
return\n"

Definiert in Zeile 37 der Datei run-ubasic.c.

int ubasic_error

Definiert in Zeile 148 der Datei ubasic.c.

const char* ubasic_errstrings[]

Definiert in Zeile 149 der Datei ubasic.c.