#ifndef DOS_DOS_H
#define DOS_DOS_H

/*******************************************************************
 pOS / Amiga adapt
*******************************************************************/

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef __INC_POS_PDOS_DATE_H
#include <pDos/Date.h>
#endif
#ifndef __INC_POS_PDOS_DOSERRORS_H
#include <pDos/DosErrors.h>
#endif
#ifndef __INC_POS_PDOS_DOSSIG_H
#include <pDos/DosSig.h>
#endif
#ifndef __INC_POS_PDOS_DOSTYPES_H
#include <pDos/DosTypes.h>
#endif
#ifndef __INC_POS_PDOS_FIB_H
#include <pDos/FIB.h>
#endif
#ifndef __INC_POS_PDOS_FILES_H
#include <pDos/Files.h>
#endif
#ifndef __INC_POS_PDOS_LOCK_H
#include <pDos/Lock.h>
#endif
#ifndef __INC_POS_PDOS_INFODATA_H
#include <pDos/InfoData.h>
#endif


#ifndef __BCPL__
#define __BCPL__
 typedef long  BPTR;
 typedef long  BSTR;
#endif

#define  DOSNAME  "pdos.library"

#define DOSTRUE  (-1)
#define DOSFALSE (0)

#define MODE_OLDFILE    FILEHDMOD_Read
#define MODE_NEWFILE    FILEHDMOD_Write
#define MODE_READWRITE  FILEHDMOD_ReadWrite

#define OFFSET_BEGINNING FILEHDSEK_Begin
#define OFFSET_CURRENT   FILEHDSEK_Current
#define OFFSET_END       FILEHDSEK_End

#define OFFSET_BEGINING OFFSET_BEGINNING

#define SHARED_LOCK     FILELKACC_Shared
#define ACCESS_READ     FILELKACC_Shared
#define EXCLUSIVE_LOCK  FILELKACC_Exclusive
#define ACCESS_WRITE    FILELKACC_Exclusive

struct DateStamp
{
  ULONG  ds_Days;
  UWORD  ds_Minute;
  UWORD  ds_Tick;
};



#define TICKS_PER_SECOND  pOS_TICKS_PER_SECOND

/*----------------------------------
-----------------------------------*/
struct FileInfoBlock
{
  ULONG            fib_DiskKey[4];

  SBYTE            fib_DirEntryType;
  UBYTE            fib_Pad;

  dosname_t        fib_FileName[pOS_DosFileName_MAX];
  ULONG            fib_Protection;
  dossize_t        fib_Size;
  dossize_t        fib_NumBlocks;
  struct DateStamp fib_Date;
  dosname_t        fib_Comment[pOS_DosComment_MAX];

  UWORD            fib_OwnerUID;
  UWORD            fib_OwnerGID;

  UBYTE fib_Reserved[32];
};




#define FIBB_OTR_READ    FIBB_OTR_Read
#define FIBB_OTR_WRITE   FIBB_OTR_Write
#define FIBB_OTR_EXECUTE FIBB_OTR_Execute
#define FIBB_OTR_DELETE  FIBB_OTR_Delete
#define FIBB_GRP_READ    FIBB_GRP_Read
#define FIBB_GRP_WRITE   FIBB_GRP_Write
#define FIBB_GRP_EXECUTE FIBB_GRP_Execute
#define FIBB_GRP_DELETE  FIBB_GRP_Delete

#define FIBB_SCRIPT    FIBB_Script
#define FIBB_PURE      FIBB_Pure
#define FIBB_ARCHIVE   FIBB_Archive
#define FIBB_READ      FIBB_Read
#define FIBB_WRITE     FIBB_Write
#define FIBB_EXECUTE   FIBB_Execute
#define FIBB_DELETE    FIBB_Delete

#define FIBF_OTR_READ    FIBF_OTR_Read
#define FIBF_OTR_WRITE   FIBF_OTR_Write
#define FIBF_OTR_EXECUTE FIBF_OTR_Execute
#define FIBF_OTR_DELETE  FIBF_OTR_Delete
#define FIBF_GRP_READ    FIBF_GRP_Read
#define FIBF_GRP_WRITE   FIBF_GRP_Write
#define FIBF_GRP_EXECUTE FIBF_GRP_Execute
#define FIBF_GRP_DELETE  FIBF_GRP_Delete

#define FIBF_SCRIPT    FIBF_Script
#define FIBF_PURE      FIBF_Pure
#define FIBF_ARCHIVE   FIBF_Archive
#define FIBF_READ      FIBF_Read
#define FIBF_WRITE     FIBF_Write
#define FIBF_EXECUTE   FIBF_Execute
#define FIBF_DELETE    FIBF_Delete

#define FAULT_MAX       82

#ifdef __IGNORE_NOT_SUPPORTED__

 #define BADDR(x)        ((APTR) x )
 #define MKBADDR(x)      ((LONG) x )

#else  /** __IGNORE_NOT_SUPPORTED__ **/

#endif /** __IGNORE_NOT_SUPPORTED__ **/



/*----------------------------------
-----------------------------------*/
struct DosInfoData
{
  ULONG   id_NumSoftErrors;
  ULONG   id_DiskState;
  ULONG   id_DiskType;
  BPTR    id_Volume;
  APTR    id_Mount;
  ULONG   id_Flags;

  UBYTE id_Reserved1[32];
  dossize_t  id_NumBlocks;
  dossize_t  id_NumBlocksUsed;

  UBYTE id_Reserved2[32];
};

#define ID_WRITE_PROTECTED DOSIFDST_WriteProtected
#define ID_VALIDATING      DOSIFDST_Validating
#define ID_VALIDATED       DOSIFDST_Validated

#define ID_NO_DISK_PRESENT      DOSIFDTYP_NoDiskPresent
#define ID_UNREADABLE_DISK      DOSIFDTYP_UnreadableDisk
#define ID_DOS_DISK             DOSIFDTYP_DosDisk
#define ID_FFS_DISK             DOSIFDTYP_FFSDisk
#define ID_INTER_DOS_DISK       DOSIFDTYP_InterDOSDisk
#define ID_INTER_FFS_DISK       DOSIFDTYP_InterFFSDisk
#define ID_FASTDIR_DOS_DISK     DOSIFDTYP_FastDirDOSDisk
#define ID_FASTDIR_FFS_DISK     DOSIFDTYP_FastDirFFSDisk
#define ID_NOT_REALLY_DOS       DOSIFDTYP_NotReallyDos
#define ID_KICKSTART_DISK       DOSIFDTYP_KickstartDisk
#define ID_MSDOS_DISK           DOSIFDTYP_MSDOSDisk

#define ERROR_NO_FREE_STORE               DOSERR_NoMem
#define ERROR_TASK_TABLE_FULL             DOSERR_Unknown
#define ERROR_BAD_TEMPLATE                DOSERR_BadTemplate1
#define ERROR_BAD_NUMBER                  DOSERR_Unknown
#define ERROR_REQUIRED_ARG_MISSING        DOSERR_RequiredArgMissing
#define ERROR_KEY_NEEDS_ARG               DOSERR_KeyNeedsArg
#define ERROR_TOO_MANY_ARGS               DOSERR_TooManyArgs
#define ERROR_UNMATCHED_QUOTES            DOSERR_BadTemplate1
#define ERROR_LINE_TOO_LONG               DOSERR_NameToLong
#define ERROR_FILE_NOT_OBJECT             DOSERR_FileIsNotLoadModul
#define ERROR_INVALID_RESIDENT_LIBRARY    DOSERR_Unknown
#define ERROR_NO_DEFAULT_DIR              DOSERR_Unknown
#define ERROR_OBJECT_IN_USE               DOSERR_ObjectInUse
#define ERROR_OBJECT_EXISTS               DOSERR_ObjectExists
#define ERROR_DIR_NOT_FOUND               DOSERR_DirNotFound
#define ERROR_OBJECT_NOT_FOUND            DOSERR_ObjectNotFound
#define ERROR_BAD_STREAM_NAME             DOSERR_Unknown
#define ERROR_OBJECT_TOO_LARGE            DOSERR_Unknown
#define ERROR_ACTION_NOT_KNOWN            DOSERR_NotImplemented
#define ERROR_INVALID_COMPONENT_NAME      DOSERR_Unknown
#define ERROR_INVALID_LOCK                DOSERR_Unknown
#define ERROR_OBJECT_WRONG_TYPE           DOSERR_WrongObjectType
#define ERROR_DISK_NOT_VALIDATED          DOSERR_DiskNotValidated
#define ERROR_DISK_WRITE_PROTECTED        DOSERR_DiskWriteProtected
#define ERROR_RENAME_ACROSS_DEVICES       DOSERR_RenameAcrossDevices
#define ERROR_DIRECTORY_NOT_EMPTY         DOSERR_DirectoryNotEmpty
#define ERROR_TOO_MANY_LEVELS             DOSERR_Unknown
#define ERROR_DEVICE_NOT_MOUNTED          DOSERR_DeviceNotMounted
#define ERROR_SEEK_ERROR                  DOSERR_SeekFailure
#define ERROR_COMMENT_TOO_BIG             DOSERR_CommentTooLong
#define ERROR_DISK_FULL                   DOSERR_DiskFull
#define ERROR_DELETE_PROTECTED            DOSERR_DeleteProtected
#define ERROR_WRITE_PROTECTED             DOSERR_WriteProtected
#define ERROR_READ_PROTECTED              DOSERR_ReadProtected
#define ERROR_NOT_A_DOS_DISK              DOSERR_NotDosDisk
#define ERROR_NO_DISK                     DOSERR_NoDiskInDrive
#define ERROR_NO_MORE_ENTRIES             DOSERR_NoMoreEntries

#define ERROR_IS_SOFT_LINK                DOSERR_Unknown
#define ERROR_OBJECT_LINKED               DOSERR_Unknown
#define ERROR_BAD_HUNK                    DOSERR_Unknown
#define ERROR_NOT_IMPLEMENTED             DOSERR_Unknown
#define ERROR_RECORD_NOT_LOCKED           DOSERR_Unknown
#define ERROR_LOCK_COLLISION              DOSERR_Unknown
#define ERROR_LOCK_TIMEOUT                DOSERR_Unknown
#define ERROR_UNLOCK_ERROR                DOSERR_Unknown

#define RETURN_OK       DOSFAIL_OK
#define RETURN_WARN     DOSFAIL_WARN
#define RETURN_ERROR    DOSFAIL_ERROR
#define RETURN_FAIL     DOSFAIL_FAIL

#define SIGBREAKB_CTRL_C DOSSIGB_CTRL_C
#define SIGBREAKB_CTRL_D DOSSIGB_CTRL_D
#define SIGBREAKB_CTRL_E DOSSIGB_CTRL_E
#define SIGBREAKB_CTRL_F DOSSIGB_CTRL_F

#define SIGBREAKF_CTRL_C DOSSIGF_CTRL_C
#define SIGBREAKF_CTRL_D DOSSIGF_CTRL_D
#define SIGBREAKF_CTRL_E DOSSIGF_CTRL_E
#define SIGBREAKF_CTRL_F DOSSIGF_CTRL_F

#define DOS_FIB DOSOBJ_FIB
#define DOS_CLI DOSOBJ_Shell

#endif  /* DOS_DOS_H */
