Leerstring oder chr$(0) ?

  • Moin,


    komme gerade irgendwie nicht weiter. Ich versuche über den Userport (Modem) etwas einzulesen und kann nicht unterscheiden, ob es sich dabei um einen leerstring oder chr$(0) handelt.


    Code
    1. 10 open2,2,2,chr$(6)+chr$(0)
    2. 20 get#2,a$:ifa$=""goto20
    3. 30 aa$=aa$+a$
    4. 40 ...


    Dabei wird chr$(0) als leer erkannt und er bleibt in Zeile 20, d.h. in aa$ fehlen dann die chr$(0) bzw. 0x00 einfach.
    Kann man das irgendwie sauber lösen?

  • Dabei wird chr$(0) als leer erkannt und er bleibt in Zeile 20, d.h. in aa$ fehlen dann die chr$(0) bzw. 0x00 einfach.
    Kann man das irgendwie sauber lösen?

    Nicht in Basic, soweit ich weiß. GET, INPUT und READ benutzen unterschiedliche Routinen für "hole/finde die Daten", verzweigen dann aber in ein- und dieselbe Routine für "weise die Daten der Variablen zu". Letztgenannte Routine erwartet ein Nullbyte als Terminator, daher wird das empfangene Nullbyte als "es sind gar keine Daten da" interpretiert.


    Allerdings kenne ich mich mit RS232-Betrieb nicht sonderlich aus, kann man da evtl. mit ST etwas machen? Also dass man nur GET A$ aufruft, wenn laut ST auch wirklich Daten da sind, so dass man dann den Leerstring "" immer als CHR$(0) interpretieren kann?


    Alternativ per SYS direkt die Kernalfunktionen CHKIN/GETIN/CLRCHN aufrufen, damit umgeht man den Variablenzuweisungskram.

  • ST war bei mir immer Null, hat mich nicht weitergebracht.

    Hast Du es mal nach dem GET# abgefragt? Laut Kernal-Listing müsste dann eigentlich "ST AND 8" funktionieren: 8 heißt "der Buffer war leer", bei 0 darf man den Nullstring durch ein Nullbyte ersetzen.

  • Laut Kernal-Listing müsste dann eigentlich "ST AND 8" funktionieren

    Tut es. Hab' es jetzt doch noch mal so versucht, da die vorherige "Lösung" ab ca.1200-1500 Bytes vereinzelte Lesefehler verursachte.
    Mit GET# und der richtigen Verwendung von ST waren 9KB kein Problem!


    Danke nochmal für Deine zielführende Hilfe!