<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Sat, 25 Nov 2006 01:47:36 +0000
From   : jgh@... (Jonathan Graham Harston)
Subject: Standard file extension for BASIC 2 style code?

>Message-ID: <198633893135471@...>
 
"Thomas Harte" <thomasharte@...> wrote:
> As a result, I am wondering if there is an accepted file extension for BBC
> BASIC typed out as ASCII? At the minute I'm just using .txt since the file
is
 
".bas".
See the Wiki article at http://beebwiki.jonripley.com/Format
   
BBC BASIC programs are stored in a tokenised format. Most of the
tokens used by different versions of BBC BASIC are the same, but
extended tokens are different, and different versions have
different line headers.
 
    Acorn/Wilson format BASIC is stored as:
      {<cr> <linehi> <linelo> <len> <text>} <cr> <ff>
    
    Russell format BASIC is stored as:
      {<len> <linelo> <linehi> <text> <cr>} <00> <ff> <ff>
    
    BASIC can also be stored as text, as:
      {[<text>] [<cr>|<lf>|<cr><lf>|<lf><cr>]}
 
It can be useful to be able to determine what format a BASIC file
is stored in. Different file formats have defined RISC OS
filetypes and DOS extensions:
 
    Format           RISC OS       File
                    filetype     extension
    Acorn/Wilson  &FFB "BASIC"     "."
    Russell       &1C7 "Basic8"    ".bbc"
    Text          &FFF "Text"      ".bas"
 
However, you should never assume a file's format from its filetype
or extension and you should never forbid input from a file based
on its filename, type or extension. The format can be easily
determined by looking at the *final* few bytes of the file as:
 
     <cr><00><ff><ff> - Russell format (Z80, 80x86)
      xx  xx <cr><ff> - Wilson/Acorn format (6502, 32000, ARM, PDP11)
      xx  xx <cr><lf> - text CR/LF terminated
      xx  xx <lf><cr> - text LF/CR terminated
      xx  xx  xx <lf> - text LF terminated
      xx  xx  xx <cr> - text CR terminated
      xx  xx  xx  xx  - unrecognised
 
The following bit of code will examine the last four bytes of an
open file and determine what format it is:
 
    PTR#in%=EXT#in%-4:FOR A%=0 TO 3:buffer%?A%=BGET#in%:NEXT
    type%=0                                       :REM unknown
    IFbuffer%?3=&0D                      :type%=7 :REM text cr
    IFbuffer%?3=&0A                      :type%=6 :REM text lf
    IF(!buffer% AND &FFFF0000)=&0D0A0000 :type%=5 :REM text lfcr
    IF(!buffer% AND &FFFF0000)=&0A0D0000 :type%=4 :REM text crlf
    IF(!buffer% AND &FFFF0000)=&FF0D0000 :type%=2 :REM 6502 format
    IF!buffer%=&FFFF000D                 :type%=1 :REM 80/86 format
 
This assumes that the BASIC program has not got any extra bytes
appended after the final terminator.
 
-- 
J.G.Harston - jgh@...                - mdfs.net/User/JGH
BBC BASIC for Windows and Internationalisation
  See http://mdfs.net/Software/BBCBasic/Windows/ProgTips
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>