c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] Basic-Interpreter für den Bot

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