## 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

- Antworten:
  - Re: [ct-bot] Basic-Interpreter für den Bot
    - From: Timo Sandmann

- Referenzen:
  - [ct-bot] Basic-Interpreter für den Bot
    - From: Menzel, Frank IT-OS
  - Re: [ct-bot] Basic-Interpreter für den Bot
    - From: Timo Sandmann
  - Re: [ct-bot] Basic-Interpreter für den Bot
    - From: Frank Menzel
  - Re: [ct-bot] Basic-Interpreter für den Bot
    - From: Timo Sandmann
  - Re: [ct-bot] Basic-Interpreter für den Bot
    - From: Frank Menzel
  - Re: [ct-bot] Basic-Interpreter für den Bot
    - From: Timo Sandmann
  - Re: [ct-bot] Basic-Interpreter für den Bot
    - From: Timo Sandmann

- Voriger (Datum): Re: [ct-bot] Basic-Interpreter für den Bot, Timo Sandmann
- Nächster (Datum): Re: [ct-bot] Basic-Interpreter für den Bot, Timo Sandmann
- Voriger (Thread): Re: [ct-bot] Basic-Interpreter für den Bot, Timo Sandmann
- Nächster (Thread): Re: [ct-bot] Basic-Interpreter für den Bot, Timo Sandmann
- Indizes:
  - Datum
  - Thread