$save
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; itable.inc
;    I/O System File-Driver Configuration Include file.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Define environment.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

code    segment  er     public
        extrn    nucerror:far
code             ends

bios_code        segment    er   public         
        extrn    rqaiosinittask: near
        extrn    nullfdinit: near
        extrn    noattdev: near
        extrn    nullupdate: near
        extrn    noattach: near
        extrn    illegalfunct: near
        extrn    cpyrt: near
bios_code        ends

bios_data        segment    rw   public 
bios_data        ends

true        equ    0FFH
false        equ    000H
configured   equ    001H
notconfigured equ   003H			; notsupported equates to 2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Define macro for declaring a constant data variable.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

%*define(const(symbol,decl,value)) (%'
bios_code        segment
%symbol        %decl    %value
        public    %symbol
bios_code        ends
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Define macros for creating file-driver global data.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

%*define(attach_device_task_prio(value))
    (%const(attachdevicetaskprio,db,%value))

%*define(conn_job_delete_task_prio(value))
    (%const(connjobdeletetaskprio,db,%value))

%*define(timer_task_data(priority,ticks_per_sec))
    (%const(timertaskprio,db,%priority)
     %const(num_ticks_per_sec,dw,%ticks_per_sec))

%*define(num_file_drivers(value))
    (%const(numfiledriver,dw,%value))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Define feature-configuration macros.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

%*define(DSfeature(sym)) (%'
bios_data        segment
        extrn    %sym: byte
bios_data        ends
)

%*define(CSfeature(sym)) (%'
bios_code        segment
        extrn    %sym: near
bios_code        ends
)

%*define(dummy_timer) (%DSfeature(dummy_timer))

%*define(no_create_false) (%CSfeature(realcreatenamedfile))

%*define(no_truncate) (%DSfeature(no_truncate))

%*define(no_allocate) (%DSfeature(no_allocate))

%SET(sys_mgr_flag,0FFH)
%*define(no_system_manager_user_id) (%SET(sys_mgr_flag,00H))

;
; %'sparse_files configures in named-file-driver sparse-file simulation.
;    (causes inmwrf: write$file to come from ioopt1.lib)
;
;*define(sparse_files) (CSfeature(writefile))
;
; %'move_directories configures in named-file-drivers rename ability to
;    move directories (causes irenam: real$nam$rename to come from ioopt1.lib)
;
;*define(move_directories) (CSfeature(realnamrename))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Define file-driver information structure, and segment to put it in.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

file_driver_info    struc
        db    ?        ; file-driver uses user objects ??
        dw    ?        ; connection size (words)
        dw    ?        ; attach-device-stack size (words)
        dw    ?        ; device-descriptor size (bytes)
file_driver_info    ends

;
; Define file-driver information macro.  One of these declared for each
; file-driver (in file-driver order).
;
%*define(def_system_manager)
    (%const(system_manager_id,db,%sys_mgr_flag))

%*define(file_driver_info(user,conn_entries,att_dev_stack_size,dev_desc)) (%'
bios_code               segment
            file_driver_info<%user,%conn_entries,%att_dev_stack_size,%dev_desc>
bios_code            ends
)
;
; Define file-driver request table (synchronous), 
;
; Defaults give unsupported support-option. ICU will override supported
; operations with configured/not-configured values.
;
req_file_driver    struc
        db    2        ; rq$a$create$file
        db    2        ; rq$a$attach$file
        db    2        ; rq$a$delete$connection
        db    2        ; rq$a$create$directory
        db    2        ; rq$a$delete$file
        db    2        ; rq$a$rename$file
        db    2        ; rq$a$change$access
        db    2        ; rq$a$open
        db    2        ; rq$a$close
        db    2        ; rq$a$read
        db    2        ; rq$a$write
        db    2        ; rq$a$seek
        db    2        ; rq$a$truncate
        db    2        ; rq$a$special
        db    2        ; rq$a$get$connection$status
        db    2        ; rq$a$get$file$status
        db    2        ; rq$a$get$path$component
        db    2        ; rq$a$get$directory$entry
        db    2        ; rq$a$get$extension$data
        db    2        ; rq$a$set$extension$data
        db    2        ; rq$a$update
req_file_driver    ends

;
; Define file-driver service table structure (asynchronous)
;
; Defaults give unsupported support-option.
;

ios_file_driver    struc
        dd    nullfdinit      ; File-driver init
        dd    0               ; I/O (connection) Task
        dd    nullupdate      ; Update File
        dd    noattach        ; Attach File
        dd    noattach        ; Create File
        dd    noattach        ; Change Access (non-null path)
        dd    noattach        ; Delete (non-null path)
        dd    illegalfunct    ; Read
        dd    illegalfunct    ; Write
        dd    illegalfunct    ; Seek
        dd    illegalfunct    ; Special
        dd    noattdev        ; Attach Device
        dd    0               ; Detach Device
        dd    illegalfunct    ; Open
        dd    illegalfunct    ; Close
        dd    illegalfunct    ; Get Connection Status
        dd    illegalfunct    ; Get File Status
        dd    illegalfunct    ; Get Extension Data
        dd    illegalfunct    ; Set Extension Data
        dd    illegalfunct    ; Change Access (null path)
        dd    illegalfunct    ; Delete (null path)
        dd    illegalfunct    ; Rename
        dd    illegalfunct    ; Get Path Component
        dd    illegalfunct    ; Get Directory Entry
        dd    illegalfunct    ; Truncate
        dd    illegalfunct    ; Detach File
ios_file_driver    ends

$restore
$genonly
