#ifndef LIBRARIES_DOS_H
#define LIBRARIES_DOS_H






#ifndef EXEC_TYPES_H
#include "exec/types.h"
#endif

#define  DOSNAME  "dos.library"




#define MODE_OLDFILE         1005   
#define MODE_NEWFILE         1006   


#define OFFSET_BEGINNING    -1      
#define OFFSET_CURRENT       0      
#define OFFSET_END           1      

#define OFFSET_BEGINING     OFFSET_BEGINNING  

#define BITSPERBYTE          8
#define BYTESPERLONG         4
#define BITSPERLONG          32
#define MAXINT               0x7FFFFFFF
#define MININT               0x80000000


#define SHARED_LOCK          -2     
#define ACCESS_READ          -2     
#define EXCLUSIVE_LOCK       -1     
#define ACCESS_WRITE         -1     

struct DateStamp {
   LONG  ds_Days;             
   LONG  ds_Minute;           
   LONG  ds_Tick;             
}; 
#define TICKS_PER_SECOND      50   


struct FileInfoBlock {
   LONG   fib_DiskKey;
   LONG   fib_DirEntryType;  
   char   fib_FileName[108]; 
   LONG   fib_Protection;    
   LONG   fib_EntryType;
   LONG   fib_Size;          
   LONG   fib_NumBlocks;     
   struct DateStamp fib_Date;
   char   fib_Comment[116];  
}; 



#define FIBB_READ      3
#define FIBB_WRITE     2
#define FIBB_EXECUTE   1
#define FIBB_DELETE    0
#define FIBF_READ      (1<<FIBB_READ)
#define FIBF_WRITE     (1<<FIBB_WRITE)
#define FIBF_EXECUTE   (1<<FIBB_EXECUTE)
#define FIBF_DELETE    (1<<FIBB_DELETE)



typedef long  BPTR;                 
typedef long  BSTR;                 
#define BADDR( bptr ) (bptr << 2)   



struct InfoData { 
   LONG   id_NumSoftErrors;   
   LONG   id_UnitNumber;      
   LONG   id_DiskState;       
   LONG   id_NumBlocks;       
   LONG   id_NumBlocksUsed;   
   LONG   id_BytesPerBlock;   
   LONG   id_DiskType;        
   BPTR   id_VolumeNode;      
   LONG   id_InUse;           
}; 


        
#define ID_WRITE_PROTECTED 80    
#define ID_VALIDATING      81    
#define ID_VALIDATED       82    

        
#define ID_NO_DISK_PRESENT (-1)
#define ID_UNREADABLE_DISK (('B'<<24) | ('A'<<16) | ('D'<<8))
#define ID_DOS_DISK        (('D'<<24) | ('O'<<16) | ('S'<<8))
#define ID_NOT_REALLY_DOS  (('N'<<24) | ('D'<<16) | ('O'<<8) | ('S))
#define ID_KICKSTART_DISK  (('K'<<24) | ('I'<<16) | ('C'<<8) | ('K'))


#define ERROR_NO_FREE_STORE               103
#define ERROR_NO_DEFAULT_DIR              201
#define ERROR_OBJECT_IN_USE               202
#define ERROR_OBJECT_EXISTS               203
#define ERROR_DIR_NOT_FOUND               204
#define ERROR_OBJECT_NOT_FOUND            205
#define ERROR_BAD_STREAM_NAME             206
#define ERROR_OBJECT_TOO_LARGE            207
#define ERROR_ACTION_NOT_KNOWN            209
#define ERROR_INVALID_COMPONENT_NAME      210
#define ERROR_INVALID_LOCK                211
#define ERROR_OBJECT_WRONG_TYPE           212
#define ERROR_DISK_NOT_VALIDATED          213
#define ERROR_DISK_WRITE_PROTECTED        214
#define ERROR_RENAME_ACROSS_DEVICES       215
#define ERROR_DIRECTORY_NOT_EMPTY         216
#define ERROR_TOO_MANY_LEVELS             217
#define ERROR_DEVICE_NOT_MOUNTED          218
#define ERROR_SEEK_ERROR                  219
#define ERROR_COMMENT_TOO_BIG             220   
#define ERROR_DISK_FULL                   221
#define ERROR_DELETE_PROTECTED            222
#define ERROR_WRITE_PROTECTED             223 
#define ERROR_READ_PROTECTED              224
#define ERROR_NOT_A_DOS_DISK              225
#define ERROR_NO_DISK                     226
#define ERROR_NO_MORE_ENTRIES             232



#define RETURN_OK                           0  
#define RETURN_WARN                         5  
#define RETURN_ERROR                       10  
#define RETURN_FAIL                        20  


#define SIGBREAKB_CTRL_C   12
#define SIGBREAKB_CTRL_D   13
#define SIGBREAKB_CTRL_E   14
#define SIGBREAKB_CTRL_F   15



#define SIGBREAKF_CTRL_C   (1<<SIGBREAKB_CTRL_C)
#define SIGBREAKF_CTRL_D   (1<<SIGBREAKB_CTRL_D)
#define SIGBREAKF_CTRL_E   (1<<SIGBREAKB_CTRL_E)
#define SIGBREAKF_CTRL_F   (1<<SIGBREAKB_CTRL_F)

#endif LIBRARIES_DOS_H
