Absender: Frank Menzel
Datum: Mi, 13.10.2010 20:19:46
In-reply-to:
<09576064-BE2C-42E1-96DA-ABACB3B3E4F6@xxxxxxxxxxxxxxx>
References:
<096FD558C4D20046A1BABE72DFF0C6C33B3ED5A41C@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx><CE1FB7FF-4A39-47CE-80F6-316DD3A2D068@xxxxxxxxxxxxxxx><20100826195514.307630@xxxxxxx> <9FC1FC43-9D8F-4DF1-A899-DD2305A89771@xxxxxxxxxxxxxxx> <9DD5454FB74E49BABC1EAF57CD9B8505@FrankPC> <D077FF81-B44C-43D6-B5AE-DC12B2BE6714@xxxxxxxxxxxxxxx> <09576064-BE2C-42E1-96DA-ABACB3B3E4F6@xxxxxxxxxxxxxxx>
Hallo Timo, super:-) Ein Zeile einlesen wÃre, denke ich, aktuell am sinnvollsten. Angedacht ist aber auch, nicht mehr zeilenweise zu interpretieren sondern sogar zeichenweise. GruÃ, Frank -------- Original-Nachricht -------- > Datum: Wed, 13 Oct 2010 17:27:24 +0200 > Von: Timo Sandmann <mail@xxxxxxxxxxxxxxx> > An: Entwicklung rund Mailingliste c\'t-Bot <ct-bot-entwickler@xxxxxxxxxxxxxxxxx> > Betreff: Re: [ct-bot] Basic-Interpreter fÃr den Bot > Hallo Frank, > > ich habe meinen Code, mit dem der Bot Dateien (einheitlich auf MMC und in > der PC-Version) verwalten kann, mal auf den aktuellen SVN-Stand gebracht, > so dass er sich hoffentlich bald auch in Deinen Basic-Interpreter einbauen > lÃsst. Damit sollte es dann keinen Unterschied mehr machen, ob das Ganze > auf dem realen Bot oder in der Simulation ausgefÃhrt wird und es wird > mÃglich, uBasic-Programme von der MMC zu lesen und dorthin zu speichern. > Eine Frage ist da bei mir aufgetaucht: Wie ist es fÃr Dich bzw. den > uBasic-Interpreter am besten, auf eine Datei zuzugreifen? Im Moment lÃuft das > bei mir blockweise, also in 512 Byte groÃen BlÃcken, so wie sie von der > MMC kommen. DafÃr gibt es dann > > /*! > * Oeffnet eine Datei > * @param filename Dateiname > * @param *file Zeiger auf Datei-Deskriptor > * @param mode Modus, in dem die Datei geoeffnet wird > * @param *buffer Puffer fuer mindestens BOTFS_BLOCK_SIZE Byte > * @return 0, falls kein Fehler > */ > int8_t botfs_open(const char * filename, botfs_file_descr_t * file, > uint8_t mode, void * buffer); > > /*! > * Setzt den Dateizeiger an eine neue Position > * @param *file Zeiger auf Datei-Deskriptor > * @param offset Offset der Dateiposition, an die gesprungen werden soll, > in Bloecken > * @param origin SEEK_SET, SEEK_CUR oder SEEK_END > */ > void botfs_seek(botfs_file_descr_t * file, int16_t offset, uint8_t > origin); > > /*! > * Liest BOTFS_BLOCK_SIZE Bytes aus einer Datei in einen Puffer > * @param *file Zeiger auf Datei-Deskriptor > * @param *buffer Puffer fuer mindestens BOTFS_BLOCK_SIZE Byte, in die > Daten geschrieben werden > * @return 0, falls kein Fehler > */ > int8_t botfs_read(botfs_file_descr_t * file, void * buffer); > > > Das ist also auf unterster Ebene und z.B. fÃr die Map sinnvoll, weil die > auch in BlÃcken aufgebaut ist. FÃr Textdateien wie im Fall von > Basic-Programmen, kÃnnte ich mir vorstellen, dass es besser wÃre, eine Funktion zu > haben, die n Byte in einen Puffer liest, unabhÃngig von den BlÃcken und > Blockgrenzen. Eventuell wÃre vielleicht auch eine Funktion praktisch, die > genau eine Zeile einliest, also wie die bekannte Standard-Funktion > getline()? Dann braucht sich das uBasic-Verhalten nicht darum zu kÃmmern, ob die zu > lesende Zeile beispielsweise auf zwei verschiedene 512 Byte BlÃcke > verteilt ist. Und wenn anderer Code auch mal Dateien einlesen soll, braucht man > es dort nicht noch mal implementieren. > Was meinst Du, wÃre da fÃr Dein Verhalten am besten geeignet? Ich habe > nicht so dein Einblick, wie die Daten am einfachsten vom Basic-Interpreter > weiterverarbeitet werden kÃnnen. Daher erstmal die Frage an Dich, bevor ich > da etwas am Bedarf vorbei implementiere. > > GrÃÃe, > Timo > > > Am 10.09.2010 um 21:12 schrieb Timo Sandmann: > > Hallo Frank, > > > > sehr gut, erstmal ein paar grundsÃtzliche Anmerkungen (sind nur > Kleinigkeiten, aber machen das Leben leichter): > > - Bitte die Datei .cproject nicht mit in den Patch einschlieÃen, dann > wird der auch nicht so groÃ. > > - Patch nicht als Workspace-Patch, sondern als Projekt-Patch (kann man > in Eclipse auswÃhlen). > > - Die Datei "tokenizer.c" bitte in "ubasic_tokenizer.c" und > "include/tokenizer.h" in "include/ubasic_tokenizer.h" umbenennen, dann haben wir ein > einheitliches Namensschema fÃr alle Teile des Basic-Interpreters. > > - Beim Kopieren von Dateien bitte die Header-Informationen anpassen. In > behaviour_ubasic.h findet sich z.B. noch > > /*! > > * @file behaviour_delay.h > > * @brief Delay-Routinen als Verhalten > > * @author Benjamin Benz (bbe@xxxxxxxx) > > * @date 12.07.07 > > */ > > - In einige Dateien fehlt solch ein Header komplett, bitte ergÃnzen. > > - Ein Pfad wie "C:\" existiert nur unter Windows, ich denke ein > Unterverzeichnis im Bot-Projekt wÃre angebrachter, dann kann der Code einfach eine > relative Pfadangabe verwenden. Am besten ist die per #define an > Ãbersichtlicher Stelle einstellbar. > > - Ãber den Quellcode einmal die Auto-Formatierung von Eclipse laufen > lassen (Source -> Format), dann passt die Textformatierung grÃÃtenteils zum > vorhandenen Quellcode. > > > > Ich habe das Ganze jetzt gerade mal im Sim ausprobiert bzw. ausprobieren > wollen, allerdings beendet sich der Bot-Code, sobald ich auf Taste 1 > drÃcke: > > > > Thread 0 Crashed: Dispatch queue: com.apple.main-thread > > 0 libSystem.B.dylib 0x00007fff876ee3d6 __kill + 10 > > 1 libSystem.B.dylib 0x00007fff8778e913 __abort + 103 > > 2 libSystem.B.dylib 0x00007fff87783157 mach_msg_receive + > 0 > > 3 libSystem.B.dylib 0x00007fff876e2abf __strcat_chk + 40 > > 4 ct-Bot 0x000000010000c7b6 read_ubasic_src + > 102 (behaviour_ubasic.c:127) > > 5 ct-Bot 0x000000010000cce8 > ubasic_disp_key_handler + 179 (behaviour_ubasic.c:305) > > 6 ct-Bot 0x000000010000ce98 > drive_ubasic_display + 105 (behaviour_ubasic.c:367) > > 7 ct-Bot 0x0000000100006821 gui_display + 118 > (gui.c:225) > > 8 ct-Bot 0x0000000100001ab6 main + 206 > (ct-Bot.c:121) > > 9 ct-Bot 0x0000000100000f9c start + 52 > > > > Thread 1: > > 0 libSystem.B.dylib 0x00007fff876a1f02 read$NOCANCEL + 10 > > 1 libSystem.B.dylib 0x00007fff876f140f __sread + 16 > > 2 libSystem.B.dylib 0x00007fff876e914c _sread + 19 > > 3 libSystem.B.dylib 0x00007fff876e8fe2 __srefill + 41 > > 4 libSystem.B.dylib 0x00007fff876ff1a6 fgets + 105 > > 5 ct-Bot 0x0000000100007963 > read_command_thread + 77 (cmd-tools_pc.c:281) > > 6 libSystem.B.dylib 0x00007fff876d9456 _pthread_start + > 331 > > 7 libSystem.B.dylib 0x00007fff876d9309 thread_start + 13 > > > > Thread 0 crashed with X86 Thread State (64-bit): > > rax: 0x0000000000000000 rbx: 0x00007fff5fbff6b0 rcx: > 0x00007fff5fbff6a8 rdx: 0x0000000000000000 > > rdi: 0x00000000000048ec rsi: 0x0000000000000006 rbp: > 0x00007fff5fbff6d0 rsp: 0x00007fff5fbff6a8 > > r8: 0x0000000000000001 r9: 0x0000000100100e70 r10: > 0x00007fff876ea412 r11: 0xffffff80002e1680 > > r12: 0x0000000000000000 r13: 0x0000000000000000 r14: > 0x0000000000000000 r15: 0x0000000000000000 > > rip: 0x00007fff876ee3d6 rfl: 0x0000000000000202 cr2: > 0x00000001000c7000 > > > > > > Das passiert Ãbrigens auch, wenn ich den Pfad Ãndere (s.o.). Scheinbar > lÃuft in read_ubasic_src() irgendwas mit der String-Behandlung falsch > (PufferÃberlauf?), der Grund ist fÃr mich auf die Schnelle aber nicht > ersichtlich, ich habe jetzt nicht den ganzen Code durchgeschaut. > > Daher kann ich da im Moment leicht auch nicht mehr testen. > > > > Auf dem echten Bot habe ich es noch nicht getestet, dazu dann spÃter > mehr. > > > > GrÃÃe, > > Timo > > _______________________________________________ > ct-bot-entwickler Mailingliste > ct-bot-entwickler@xxxxxxxxxxxxxxxxx > http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler -- GRATIS! Movie-FLAT mit Ãber 300 Videos. Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome