* Standard assembler header for Amiga DOS on the MC68000   

   IFND LIBRARIES_DOS_I
LIBRARIES_DOS_I SET 1

*      IFND EXEC_TYPES_I
*      INCLUDE "exec/types.i"
*      ENDC


DOSNAME     MACRO
      DC.B  'dos.library',0
      ENDM

DOSTRUE         EQU     -1
DOSFALSE        EQU     0

* Predefined Amiga DOS global constants 

* Mode parameter to Open() 
MODE_OLDFILE         EQU   1005   * Open existing file read/write 
*                                 * positioned at beginning of file. 
MODE_NEWFILE         EQU   1006   * Open freshly created file (delete 
*                                 * old file) read/write            

* Relative position to Seek() 
OFFSET_BEGINNING     EQU   -1     * relative to Beginning Of File 
OFFSET_CURRENT       EQU    0     * relative to Current file position 
OFFSET_END           EQU    1     * relative to End Of File    

OFFSET_BEGINING     EQU   OFFSET_BEGINNING     * Ancient compatibility

BITSPERBYTE          EQU   8
BYTESPERLONG         EQU   4
BITSPERLONG          EQU   32
MAXINT               EQU   $7FFFFFFF
MININT               EQU   $80000000

* Passed as type to Lock() 
SHARED_LOCK          EQU   -2   ; File is readable by others 
ACCESS_READ          EQU   -2   ; Synonym
EXCLUSIVE_LOCK       EQU   -1   ; No other access allowed    
ACCESS_WRITE         EQU   -1   ; Synonym


 STRUCTURE DateStamp,0 
   LONG  ds_Days                ; Number of days since Jan. 1, 1978
   LONG  ds_Minute              ; Number of minutes past midnight 
   LONG  ds_Tick                ; Number of ticks past minute 
   LABEL ds_SIZEOF              ; DateStamp 
TICKS_PER_SECOND EQU 50         ; Number of ticks in one second 

* Returned by Examine() and ExInfo() 
 STRUCTURE FileInfoBlock,0
   LONG   fib_DiskKey
   LONG   fib_DirEntryType      ; Type of Directory. If < 0, then a plain file.
                                ; If > 0 a directory 
   STRUCT fib_FileName,108      ; Null terminated. Max 30 chars used for now 
   LONG   fib_Protection        ; bit mask of protection, rwxd are 3-0.      
   LONG   fib_EntryType
   LONG   fib_Size              ; Number of bytes in file 
   LONG   fib_NumBlocks         ; Number of blocks in file 
   STRUCT fib_DateStamp,ds_SIZEOF ; Date file last changed.
   STRUCT fib_Comment,80        ; Null terminated. Comment associated with file 
   STRUCT fib_padding,36        ; need pad bytes to 116 so as not to break the dos
   LABEL  fib_SIZEOF            ; FileInfoBlock 

* FIB stands for FileInfoBlock 
* FIBB are bit definitions, FIBF are field definitions 
   BITDEF   FIB,ARCHIVE,4       ; cleared whenever file is changed
   BITDEF   FIB,READ,3          ; ignored by the system
   BITDEF   FIB,WRITE,2         ; ignored by the system
   BITDEF   FIB,EXECUTE,1       ; ignored by the system
   BITDEF   FIB,DELETE,0        ; prevent file from being deleted


* All BCPL data must be long word aligned.  BCPL pointers are the long word
* address (i.e byte address divided by 4 (>>2))

* Macro to indicate BCPL pointers
BPTR     MACRO                      * Long word pointer
         LONG     \1
         ENDM
BSTR     MACRO                      * Long word pointer to BCPL string.
         LONG     \1
         ENDM

* #define BADDR( bptr ) (bptr << 2) * Convert BPTR to byte addressed pointer

* BCPL strings have a length in the first byte and then the characters.
* For example:  s[0]=3 s[1]=S s[2]=Y s[3]=S

* returned by Info() 
 STRUCTURE InfoData,0
   LONG id_NumSoftErrors        * number of soft errors on disk 
   LONG id_UnitNumber           * Which unit disk is (was) mounted on 
   LONG id_DiskState            * See defines below 
   LONG id_NumBlocks            * Number of blocks on disk 
   LONG id_NumBlocksUsed        * Number of block in use 
   LONG id_BytesPerBlock   
   LONG id_DiskType             * Disk Type code
   BPTR id_VolumeNode           * BCPL pointer to volume node
   LONG id_InUse                * Flag, zero if not in use
   LABEL id_SIZEOF              * InfoData 

* ID stands for InfoData 
*            Disk states
ID_WRITE_PROTECTED      EQU     80      * Disk is write protected 
ID_VALIDATING           EQU     81      * Disk is currently being validated 
ID_VALIDATED            EQU     82      * Disk is consistent and writeable 
*          Disk types 
ID_NO_DISK_PRESENT      EQU -1
ID_UNREADABLE_DISK      EQU  ('B'<<24)!('A'<<16)!('D'<<8)
ID_NOT_REALLY_DOS       EQU  ('N'<<24)!('D'<<16)!('O'<<8)!('S')
ID_DOS_DISK             EQU  ('D'<<24)!('O'<<16)!('S'<<8)
ID_KICKSTART_DISK       EQU  ('K'<<24)!('I'<<16)!('C'<<8)!('K')

* Errors from IoErr(), etc. 
ERROR_NO_FREE_STORE               EQU  103
ERROR_TASK_TABLE_FULL             EQU  105
ERROR_LINE_TOO_LONG               EQU  120
ERROR_FILE_NOT_OBJECT             EQU  121
ERROR_INVALID_RESIDENT_LIBRARY    EQU  122
ERROR_OBJECT_IN_USE               EQU  202
ERROR_OBJECT_EXISTS               EQU  203
ERROR_OBJECT_NOT_FOUND            EQU  205
ERROR_ACTION_NOT_KNOWN            EQU  209
ERROR_INVALID_COMPONENT_NAME      EQU  210
ERROR_INVALID_LOCK                EQU  211
ERROR_OBJECT_WRONG_TYPE           EQU  212
ERROR_DISK_NOT_VALIDATED          EQU  213
ERROR_DISK_WRITE_PROTECTED        EQU  214
ERROR_RENAME_ACROSS_DEVICES       EQU  215
ERROR_DIRECTORY_NOT_EMPTY         EQU  216
ERROR_DEVICE_NOT_MOUNTED          EQU  218
ERROR_SEEK_ERROR                  EQU  219
ERROR_COMMENT_TOO_BIG             EQU  220   
ERROR_DISK_FULL                   EQU  221
ERROR_DELETE_PROTECTED            EQU  222
ERROR_WRITE_PROTECTED             EQU  223 
ERROR_READ_PROTECTED              EQU  224
ERROR_NOT_A_DOS_DISK              EQU  225
ERROR_NO_DISK                     EQU  226
ERROR_NO_MORE_ENTRIES             EQU  232

* These are the return codes used by convention by AmigaDOS commands 
* See FAILAT and IF for relvance to EXECUTE files                    
RETURN_OK                         EQU    0  * No problems, success 
RETURN_WARN                       EQU    5  * A warning only 
RETURN_ERROR                      EQU   10  * Something wrong 
RETURN_FAIL                       EQU   20  * Complete or severe failure

* Bit numbers that signal you that a user has issued a break
        BITDEF  SIGBREAK,CTRL_C,12
        BITDEF  SIGBREAK,CTRL_D,13
        BITDEF  SIGBREAK,CTRL_E,14
        BITDEF  SIGBREAK,CTRL_F,15

   ENDC LIBRARIES_DOS_I
