        SUBT    High level Filing System interface. => &.Hdr.File
OldOpt  SETA    {OPT}
        OPT     OptNoList+OptNoP1List

; ***********************************
; ***    C h a n g e   L i s t    ***
; ***********************************

; Date       Name  Description
; ----       ----  -----------
; 12-Oct-87  SKS   Add OSGBPB_ReadDirEntriesCatInfo
; 06-Nov-87  SKS   Add offsets in ReadDirEntriesInfo
; 28-Jan-88  SKS   Add cc_rfs number
; 08-Feb-88  SKS   Add FSControl_FileTypeFromString
; 01-Mar-88  SKS   Add ramfs number
; 24-Mar-88  SKS   Add FSControl_FileInfo
; 25-Mar-88  SKS   Add FSControl_ReadFSName
; 26-May-88  SKS   Add FSControl_SetContexts
; 04-Jun-88  SKS   Add OSFile_MakeError
; 03-Aug-88  SKS   Add unixfs number
; 15-Sep-88  SKS   Add digitape_number

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Reason codes in r0b for OSFile
; ==============================

OSFile_Load      *      &FF     ; Uses File$Path
OSFile_Save      *      0
OSFile_WriteInfo *      1
OSFile_WriteLoad *      2
OSFile_WriteExec *      3
OSFile_WriteAttr *      4
OSFile_ReadInfo  *      5       ; Uses File$Path
OSFile_Delete    *      6
OSFile_Create    *      7
OSFile_CreateDir *      8
OSFile_SetStamp  *      9       ; These ops don't get passed to a Filing System
OSFile_SaveStamp *      10
OSFile_CreateStamp *    11
OSFile_LoadPath  *      12      ; Uses given path
OSFile_ReadPath  *      13      ; Uses given path
OSFile_LoadPathVar *    14      ; Uses given path variable
OSFile_ReadPathVar *    15      ; Uses given path variable
OSFile_LoadNoPath *     16      ; No nonsense load
OSFile_ReadNoPath *     17      ; No nonsense read
OSFile_SetType    *     18
OSFile_MakeError  *     19

load_at_given   *       0       ; Load at address given in r2
load_at_own     *       -1      ; Load at file's own address


; Object type (r0 in OSFile)

object_nothing   *      0
object_file      *      1
object_directory *      2


; Attribute bits (r5 in OSFile)

read_attribute          *       1 :SHL: 0
write_attribute         *       1 :SHL: 1
locked_attribute        *       1 :SHL: 3
public_read_attribute   *       1 :SHL: 4
public_write_attribute  *       1 :SHL: 5


; Reason codes in r0 for FSControl
; ================================

                             ^ 0
FSControl_Dir                # 1 ; 0
FSControl_Lib                # 1 ; 1
FSControl_StartApplication   # 1 ; 2
FSControl_RunType            # 1 ; 3
FSControl_Run                # 1 ; 4
FSControl_Cat                # 1 ; 5
FSControl_Ex                 # 1 ; 6
FSControl_LCat               # 1 ; 7
FSControl_LEx                # 1 ; 8
FSControl_Info               # 1 ; 9
FSControl_Opt                # 1 ; 10
FSControl_StarMinus          # 1 ; 11 - Was LIBFS run on PRB

FSControl_AddFS              # 1 ; 12 - Really new functions begin here
FSControl_LookupFS           # 1 ; 13
FSControl_SelectFS           # 1 ; 14
FSControl_BootupFS           # 1 ; 15
FSControl_RemoveFS           # 1 ; 16
FSControl_AddSecondaryFS     # 1 ; 17
FSControl_ReadFileType       # 1 ; 18
FSControl_RestoreCurrent     # 1 ; 19
FSControl_ReadModuleBase     # 1 ; 20
FSControl_ReadFSHandle       # 1 ; 21
FSControl_Shut               # 1 ; 22
FSControl_ShutDown           # 1 ; 23
FSControl_Access             # 1 ; 24
FSControl_Rename             # 1 ; 25
FSControl_Copy               # 1 ; 26
FSControl_Wipe               # 1 ; 27
FSControl_Count              # 1 ; 28
FSControl_CreateHandle       # 1 ; 29
FSControl_ReadSecondaryModuleBase # 1 ; 30
FSControl_FileTypeFromString # 1 ; 31
FSControl_FileInfo           # 1 ; 32
FSControl_ReadFSName         # 1 ; 33
FSControl_SetContexts        # 1 ; 34

; Aliases (to be removed)

FSControl_OPT                * FSControl_Opt       
FSControl_RUN                * FSControl_Run
FSControl_CAT                * FSControl_Cat
FSControl_SHUT               * FSControl_Shut


; Some useful reason codes in r0b for OSFind
; ==========================================

OSFind_OpenIn   *       open_read
OSFind_OpenOut  *       open_write
OSFind_OpenUp   *       open_update

OSFind_ReadFile *       open_read :OR: open_mustopen :OR: open_nodir


; Bits in r0b (open mode) for OSFind
; ==================================

open_write      *       2_10000000
open_read       *       2_01000000
open_update     *       open_write :OR: open_read

open_mustopen   *       2_00001000      ; Always give error if not found
open_nodir      *       2_00000100      ; Always give error if is a dir

open_default    *       2_00000000      ; Use File$Path
open_pathstring *       2_00000001      ; Use supplied path string
open_pathvar    *       2_00000010      ; Use supplied path variable
open_nopath     *       2_00000011      ; Don't use any path for lookup
open_pathbits   *       2_00000011

open_unused     *       2_00110000      ; Will give 'Bad Mode' error if used


; Reason codes in r0b for OSArgs stream operations
; ================================================

OSArgs_ReadPTR  *       0
OSArgs_SetPTR   *       1
OSArgs_ReadEXT  *       2
OSArgs_SetEXT   *       3
OSArgs_ReadSize *       4       ; New function. Maybe combine with ReadInfo ?
OSArgs_EOFCheck *       5       ; New function. Replaces FSCV(1) call
OSArgs_EnsureSize *     6       ; New function

OSArgs_ReadInfo *       &FE     ; New function
OSArgs_Flush    *       &FF


; Reason codes in r0b for OSGBPB
; ==============================

                        ^ 1     ; Perverse, eh ?

OSGBPB_WriteAtGiven     # 1 ; 1
OSGBPB_WriteAtPTR       # 1 ; 2
OSGBPB_ReadFromGiven    # 1 ; 3
OSGBPB_ReadFromPTR      # 1 ; 4

OSGBPB_ReadDiscName     # 1 ; 5
OSGBPB_ReadCSDName      # 1 ; 6
OSGBPB_ReadLIBName      # 1 ; 7
OSGBPB_ReadCSDEntries   # 1 ; 8

OSGBPB_ReadDirEntries   # 1 ; 9
OSGBPB_ReadDirEntriesInfo # 1 ; 10
OSGBPB_ReadDirEntriesCatInfo # 1 ; 11


                ^       0
RDE_load        #       4
RDE_exec        #       4
RDE_length      #       4
RDE_attr        #       4
RDE_type        #       4
RDE_name        #       0


; File type definitions (real defs in Documents.Allocation.DateDoc)
; =====================

Absolute_LoadAddr  * &FFFFF800
Sprite_LoadAddr    * &FFFFF900
BASIC_LoadAddr     * &FFFFFB00
Transient_LoadAddr * &FFFFFC00
Data_LoadAddr      * &FFFFFD00
Command_LoadAddr   * &FFFFFE00
Text_LoadAddr      * &FFFFFF00


; Filing System numbers - the definitive list
; ===========================================

;       0  No Filing System             1  1200 Baud cassette   (NS)
;       2  300 Baud cassette    (NS)    3  rom:
;       4  Acorn DFS            (NS)    5  net:
;       6  Teletext/Telesoft    (NS)    7  IEEE Filing System   (NS)
;       8  adfs:                        9  Unknown - but reserved
;       10 Acorn VFS            (NS)    11 Acorn WDFS           (NS)
;       12 netprint:                    13 null:
;       14 vdu:                         15 bbc:
;       16 Acacia RAM Filing System (?) 17 bbcb:
;       18 rawvdu:                      19 kbd:
;       20 rawkbd:                      21 deskfs:
;       22 ccrfs:                       23 ramfs:
;       24 unixfs:                      25 digitape:

fsnumber_none           *       0       ; No fs selected (valid state)
fsnumber_tape1200       *       1       ; NS
fsnumber_tape300        *       2       ; NS
fsnumber_rom            *       3
fsnumber_dfs            *       4       ; NS : Single density DFS
fsnumber_net            *       5
fsnumber_telesoft       *       6       ; ?
fsnumber_IEEE           *       7       ; ?
fsnumber_adfs           *       8
fsnumber_reserved       *       9       ; ?
fsnumber_vfs            *       10
fsnumber_wdfs           *       11      ; Reused by bbc: st. Modula works
fsnumber_netprint       *       12
fsnumber_null           *       13
fsnumber_printer        *       14
fsnumber_serial         *       15
fsnumber_acacia_ramfs   *       16
fsnumber_vdu            *       17
fsnumber_rawvdu         *       18
fsnumber_kbd            *       19
fsnumber_rawkbd         *       20
fsnumber_deskfs         *       21
fsnumber_cc_rfs         *       22      ; ComputerConcepts RFS
fsnumber_ramfs          *       23      ; Nick's RAMFS
fsnumber_unixfs         *       24      ; Jamie's UnixFS
fsnumber_digitape       *       25      ; Digital Services Tape Streamer

EOF_char * &FE                  ; Unfortunately, &1FE isn't an immediate value


        OPT     OldOpt
        END
