;	SCCSID = @(#)cpmfcb.asm	1.1 85/04/10
;	SCCSID = @(#)cpmfcb.asm	1.1 85/04/10
BREAK <File Control Block definition>

;
; Field definition for FCBs
; The FCB has the following structure:
;
;	+---------------------------+
;	|   Drive indicator(byte)   |
;	+---------------------------+
;	|    Filename (8 chars)     |
;	+---------------------------+
;	|    Extension (3 chars)    |
;	+---------------------------+
;	|   Current Extent(word)    |
;	+---------------------------+
;	|    Record size (word)     |
;	+---------------------------+
;	|    File Size (2 words)    |
;	+---------------------------+
;	|	Date of write	    |
;	+---------------------------+
;	|	Time of write	    |
;	+---------------------------+
;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
;									   ;
;	+---------------------------+
;	|   8 bytes reserved	    |
;	+---------------------------+
;									   ;
;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
;	|    next record number     |
;	+---------------------------+
;	|   random record number    |
;	+---------------------------+
;

sys_fcb     STRUC
fcb_drive   DB	    ?
fcb_name    DB	    8 DUP (?)
fcb_ext     DB	    3 DUP (?)
fcb_EXTENT  DW	    ?
fcb_RECSIZ  DW	    ?			; Size of record (user settable)
fcb_FILSIZ  DW	    ?			; Size of file in bytes; used with the
					; following word
fcb_DRVBP   DW	    ?			; BP for SEARCH FIRST and SEARCH NEXT
fcb_FDATE   DW	    ?			; Date of last writing
fcb_FTIME   DW	    ?			; Time of last writing
;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
;									   ;
fcb_reserved DB      8 DUP (?)		 ; RESERVED
;									   ;
;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
fcb_NR	    DB	    ?			; Next record
fcb_RR	    DB	    4 DUP (?)		; Random record
sys_fcb     ENDS

FILDIRENT	= fcb_FILSIZ		; Used only by SEARCH FIRST and SEARCH
					; NEXT

fcb_sfn 	EQU	BYTE PTR fcb_reserved

; Note that fcb_net_handle, fcb_nsl_drive, fcb_nsld_drive and fcb_l_drive
; all must point to the same byte.  Otherwise, the FCBRegen will fail.
; NOTE about this byte (fcb_nsl_drive)
;   The high two bits of this byte are used as follows to indicate the FCB type
;	00 means a local file or device with sharing loaded
;	10 means a remote (network) file
;	01 means a local file with no sharing loaded
;	11 means a local device with no sharing loaded

;
; Network FCB
;
fcb_net_drive	EQU	BYTE PTR fcb_reserved+1
fcb_net_handle	EQU	WORD PTR fcb_reserved+2
fcb_netID	EQU	DWORD PTR fcb_reserved+4

;
; No sharing local file FCB
;
fcb_nsl_drive	EQU	BYTE PTR fcb_reserved+1
fcb_nsl_bits	EQU	BYTE PTR fcb_reserved+2
fcb_nsl_firclus EQU	WORD PTR fcb_reserved+3
fcb_nsl_dirsec	EQU	WORD PTR fcb_reserved+5
fcb_nsl_dirpos	EQU	BYTE PTR fcb_reserved+7

;
; No sharing local device FCB
;
fcb_nsld_drive	EQU	BYTE PTR fcb_reserved+1
fcb_nsld_drvptr EQU	DWORD PTR fcb_reserved+2

;
; Sharing local FCB
;
fcb_l_drive	EQU	BYTE PTR fcb_reserved+1
fcb_l_firclus	EQU	WORD PTR fcb_reserved+2
fcb_l_mfs	EQU	WORD PTR fcb_reserved+4
fcb_l_attr	EQU	BYTE PTR fcb_reserved+6

;
; Bogusness:  the four cases are:
;
;   local file	    00
;   local device    40
;   local sharing   C0
;   network	    80
;
; Since sharing and network collide, we cannot use a test instruction for
; deciding whether a network or a share check in involved
;
FCBDEVICE   EQU 040h
FCBNETWORK  EQU 080h
FCBSHARE    EQU 0C0h

; FCBSPECIAL must be able to mask off both net and share
FCBSPECIAL  EQU 080h
FCBMASK     EQU 0C0h