;    File              : $FDOS.EQU$
;
;    Description       :
;
;    Original Author   : DIGITAL RESEARCH
;
;    Last Edited By    : $CALDERA$
;
;-----------------------------------------------------------------------;
;    Copyright Work of Caldera, Inc. All Rights Reserved.
;      
;    THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL,
;    PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC.
;    ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES
;    WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF
;    THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO
;    HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE
;    AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE
;    AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED,
;    COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED,
;    CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST,
;    TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF
;    CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT
;    AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND
;    CIVIL LIABILITY.
;-----------------------------------------------------------------------;
;
;    *** Current Edit History ***
;    *** End of Current Edit History ***
;
;    $Log$
;
;    ENDLOG
;		   Structure of Buffer Control Blocks
;		   ----------------------------------
;	These BCBs immediately preceed the data buffers. BCBs are
;	always  shared  for all drives and therefore  must be big
;	enough for the largest drive.
;

BCB_NEXT	equ	word ptr  00h	; link to next buffer
BCB_PREV	equ	word ptr  02h	; link to previous buffer
BCB_DRV		equ	byte ptr  04h	; drive of this buffer or 0FFh
BCB_FLAGS	equ	byte ptr  05h	; buffer flags
BCB_REC		equ	word ptr  06h	; low 16 bits of sector address
BCB_REC2	equ	byte ptr  08h	; top 8 bits of record address
BCB_COPIES	equ	byte ptr  0Ah	; number of copies to write
BCB_SEPARATION	equ	word ptr  0Bh	; # sectors copies are apart
BCB_DDSC	equ	dword ptr 0Dh	; DWORD ptr to DDSC_
BCB_REMOTE	equ	word ptr  11h	; remote in-use count
BCB_DATA	equ	byte ptr  14h	; buffer data

BF_ISFAT	equ	0002h		; buffer marked as FAT sector
BF_ISDIR	equ	0004h		; buffer marked as Directory sector
BF_ISDAT	equ	0008h		; buffer marked as Data sector
BF_DIRTY	equ	0040h		; buffer marked as modified
BF_REMOTE	equ	0080h		; buffer is remote

MAX12		equ	0FF6h		; max. disk size w/ 12-bit media

;		     Structure of Hash Control Block
;		     -------------------------------
;	Each hash control  block refers  to the hash codes of one
;	disrectory cluster or a root directory.

HCB_LINK	equ	word ptr 0	; link to next control block
HCB_DRV		equ	byte ptr 2	; drive for this entry or 0FFh
HCB_CLU		equ	word ptr 4	; cluster number or 0000 if root
HCB_CNT		equ	word ptr 6	; number of hashed entries
HCB_DATA	equ	word ptr 8	; hash buffer data


;		      Structure of DOS FCB
;		      --------------------

MSF_EXTFLG	equ	byte ptr 0	; if this is 0xFF, skip 1st 7 byte
MSF_ATTRIB	equ	byte ptr 6	; file attributes if MSF_EXTFLG
MSF_DRIVE	equ	byte ptr 0	; 1st byte normally drive code
MSF_NAME	equ	byte ptr 1	; 8-bit ASCII file name, 11 characters
MSF_BLOCK	equ	word ptr 12	; current block number
MSF_RECSIZE	equ	word ptr 14	; current logical record size
MSF_SIZE	equ	word ptr 16	; 32-bit file size
MSF_DATE	equ	word ptr 20	; last date stamp
MSF_TIME	equ	word ptr 22	; last time stamp
MSF_IFN		equ	byte ptr 24	;; internal file number
MSF_IOCTL	equ	byte ptr 25	;; file status
MSF_BLOCK1	equ	word ptr 26	;; 1st block of file
MSF_DBLK	equ	word ptr 28	;; directory block
MSF_DEVPTR	equ	dword ptr 28	;; address of device driver
MSF_DCNT	equ	word ptr 30	;; directory count
MSF_CR		equ	byte ptr 32	; current sequential record
MSF_RR		equ	word ptr 33	; random record address (3 or 4 byte)
MSF_RR2		equ	byte ptr 35	; random record overflow


;		      Structure of DOS DPB
;		      --------------------

DDSC_UNIT	equ	byte ptr 0		; absolute drive number
DDSC_RUNIT	equ	byte ptr 1		; relative unit number
DDSC_SECSIZE	equ	word ptr 2		; sector size in bytes
DDSC_CLMSK	equ	byte ptr 4		; sectors/cluster - 1
DDSC_CLSHF	equ	byte ptr 5		; log2 (sectors/cluster)
DDSC_FATADDR	equ	word ptr 6		; sector address of FAT
DDSC_NFATS	equ	byte ptr 8		; # of FAT copies
DDSC_DIRENT	equ	word ptr 9		; size of root directory
DDSC_DATADDR	equ	word ptr 11		; sector address of cluster #2
DDSC_NCLSTRS	equ	word ptr 13		; # of clusters on disk
DDSC_NFATRECS	equ	word ptr 15		; # of sectors per FAT
DDSC_DIRADDR	equ	word ptr 17		; sector address of root dir
DDSC_DEVHEAD	equ	dword ptr 19		; device driver header
DDSC_DEVOFF	equ	word ptr 19
DDSC_DEVSEG	equ	word ptr 21
DDSC_MEDIA	equ	byte ptr 23		; current media byte
DDSC_FIRST	equ	byte ptr 24		; "drive never accessed" flag
DDSC_LINK	equ	dword ptr 25		; next drive's DDSC
DDSC_BLOCK	equ	word ptr 29		; next block to allocate
DDSC_FREE	equ	word ptr 31		; total free clusters on drive
DDSC_LEN	equ	33



;		DELWATCH hooks called by OS

DELW_RDMASK	equ	0			; delete dir search mask
DELW_DELETE	equ	2			; delete this dir entry
DELW_FREECLU	equ	3			; free some clusters
DELW_FREERD	equ	4			; free root dir entry
DELW_SPACE	equ	5			; add "deletes" to free space
DELW_NEWDISK	equ	7			; new disk logged in
DELW_PURGE	equ	14			; perge pd file
DELW_UNDEL	equ	15			; undelete pd file

; 		SuperStore hook called by OS

SSTOR_SPACE	equ	10h			; enquire # physical free space

;		Password hooks called by OS

PASSWD_CREAT	equ	20h			; initialise an entry
PASSWD_CHMOD	equ	21h			; change an entry
PASSWD_CHECK	equ	22h			; check an entry

;	Share hooks in PCMODE data segment
;
; These point to a stub which does a "STC, RETF"
;

NUM_SHARE_STUB_ENTRIES	equ	15

S_LOCKS		equ	DWORD*0		; share lock/unlock region
S_UPDATE	equ	DWORD*1		; update DHNDL from share
S_RECORD	equ	DWORD*2		; update share from DHNDL
S_FDOSRW	equ	DWORD*3		; validate proposed operation
S_DISCARD	equ	DWORD*4		; discard all files on drive
S_OPEN		equ	DWORD*5		; files is opening, remember it
S_CLOSE		equ	DWORD*6		; files is closing, forget it
S_OM_COMPAT	equ	DWORD*7		; check open mode compatible
S_CLOSE_IF_OPEN	equ	DWORD*8		; close if compat open, else deny
S_DENY_IF_OPEN	equ	DWORD*9		; deny if open shared/by others
S_GET_LIST_ENTRY equ	DWORD*10	; get open file list entry
S_CLOSE_FILES	equ	DWORD*11	; close all files for given PSP/UID

; struct dirfcb

DNAME		equ	byte ptr 0	;file name & type
DATTS       equ byte ptr 11 
  DA_RO		equ	01h		; 0x01 - read/only
  DA_HIDDEN	equ	02h		; 0x02 - hidden
  DA_SYSTEM	equ	04h		; 0x04 - system
  DA_VOLUME	equ	08h		; 0x08 - volume label
  DA_DIR	equ	10h		; 0x10 - sub-directory
  DA_ARCHIVE	equ	20h		; 0x20 - archive
  DA_CLUSTER	equ	80h		; 0x80 - return starting cluster from search (API extention)
  DA_DELWATCH	equ	80h		; 0x88 - return pending delete files
  DA_FIXED	equ	11011000b	; can't CHMOD label, dir, unused bits
  DA_CHANGE	equ	not DA_FIXED	; all others are changeable

;DATTS2		equ	12		;CP/M attributes
;					; 0x80 - f1' modify default open rules
;					; 0x40 - f2' partial close default
;					; 0x20 - f3' ignore close checksum errors
;					; 0x10 - f4' disable checksums
;					; 0x08 - (reserved)
;					; 0x04 - DELETE password
;					; 0x02 - WRITE password
;					; 0x01 - READ password
DUNDEL		equ	13		;1st letter of deleted file
DPWD		equ	word ptr 14	;16-bit password hash code
DMODTIME    	equ	word ptr 16	;delwatch time (hhhhhmmmmmmsssss)
DMODDATE    	equ	word ptr 18	;delwatch date (yyyyyyymmmmddddd)
;DRECSIZE	equ	16		;FlexOS record size
;DUSER		equ	18		;FlexOS user ID of creator
;DGROUP		equ	19		;FlexOS group ID of creator
DPWM		equ	word ptr 20	;FlexOS access rights
DTIME		equ	22		;time (hhhhhmmmmmmsssss)
DDATE		equ	24		;date (yyyyyyymmmmddddd)
DBLOCK1		equ	26		;first block in file
DSIZE		equ	28		;current file size

;		 DOS Media Password Definitions
;		 ------------------------------

PWM_OWNER	equ	000Fh			; PWD Owner mask
PWM_GROUP	equ	00F0h			; PWD Group mask
PWM_WORLD	equ	0F00h			; PWD World mask
PWM_R		equ	0888h			; PWD required for reading
PWM_W		equ	0444h			; PWD required for writing
PWM_E		equ	0222h			; PWD req'd for executing
PWM_D		equ	0111h			; PWD required for deleting
PWM_ANY		equ	PWM_R+PWM_W+PWM_D	; PWD required for anything


;	literal constants

FAT12		equ	00fffh		; 12 bit fat
FAT16		equ	0ffffh		; 16 bit fat

ENDDIR		equ	0ffffh		;end of directory

