[Coco] Programming help needed

Arthur Flexser flexser at fiu.edu
Sun Dec 2 12:03:13 EST 2018


I think you may be mistaken about a string terminating with a zero.  The
string's length is conveyed by its descriptor byte in the variable table,
so there'd be no need for a special termination character.

Art

On Sun, Dec 2, 2018 at 6:24 AM tim franklinlabs.com <tim at franklinlabs.com>
wrote:

>    A string terminates with a zero. If there's a chr$(0) somewhere in the
>    midpoint of the string, BASIC would see that as an "End of String" and
>    stop processing. Only part of the string data would be saved. I haven't
>    verified this but that's what I would expect.
>
>      On December 2, 2018 at 1:19 AM William Astle <[1]lost at l-w.ca> wrote:
>      On 2018-12-01 5:59 p.m., Paul Shoemaker wrote:
>
>      Need some advice. I am trying to store to a disk file a 48x40
>      section from a PMODE 4 screen.
>      The method I am attempting to use is to peek the byte values using a
>      nested loop and save them as a string. For example, A$ = A$ + CHR$
>      (PEEK(&HE00+X+(Y*32))). Note I am storing the byte value as a CHR$
>      because doing so makes the completed string length only 240 bytes
>      long. Creating the string is working fine; I have validated that.
>      Saving the string to a disk file is not working, however. When I
>      execute a WRITE #1,A$ followed by a PUT #1,<record #>, Disk BASIC is
>      not saving entire contents of A$. I believe it is parsing the string
>      as it goes or something, as it seems to be ignoring or even stopping
>      on some "special" CHR$ codes.. like CHR$(0).
>      Is there a way around this?
>      Thanks!
>      -Paul
>
>      WRITE should be exactly equivalent to PRINT except that it will
>      surround
>      string data with quotes (and numeric data won't have quotes). I
>      assume
>      you're using READ or INPUT after a "GET" as a way to get the result
>      back. That *will* stop reading at a NUL byte since NULs terminate
>      parsing strings in the interpreter.
>      Basically, your problem is that you are using random files wrong.
>      What
>      you're doing is okay for text formatted records. However, it's not
>      binary safe. What you should be doing is:
>     1. Open the file with in random/direct mode with a specified record
>        length.
>
>     2. Use FIELD to set up variables for the record:
>
>      FIELD #1,<record size> AS F$
>     3. Put your data into F$ using LSET (or RSET if you want it right
>
>      justified). DO NOT simply assign to F$. In fact, don't assign to F$
>      at
>      all since it will disassociate it from the file record. For example:
>      LSET F$ = A$
>     4. Now use "PUT #1, <record #>"
>
>      Reading works the same but use "GET #1, <record number>" and then
>      access
>      the string variable specified in the FIELD command. Again, don't
>      assign
>      to that variable since that will break its association with the file
>      record.
>      The above *is* binary safe.
>      Obviously, it can be more complicated than that by having multiple
>      fields for a particular file. You can even have multiple record
>      structures using different variable names for the same file.
>      --
>      Coco mailing list
>      [2]Coco at maltedmedia.com
>      [3]https://pairlist5.pair.net/mailman/listinfo/coco
>
> References
>
>    1. mailto:lost at l-w.ca
>    2. mailto:Coco at maltedmedia.com
>    3. https://pairlist5.pair.net/mailman/listinfo/coco
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>


More information about the Coco mailing list