Unit AmigaDOS;

Interface
Uses Timer, Exec;

Type
  tDateStamp = Record
		  ds_Days: LongInt;
		  ds_Minute: LongInt;
		  ds_Tick: LongInt;
		End;

  tRootNode = Record
		  rn_TaskArray: LongInt;
		  rn_ConsoleSegment: LongInt;
		  rn_Time: tDateStamp;
		  rn_RestartSeg: LongInt;
		  rn_Info: LongInt;
		  rn_FileHandlerSegment: LongInt;
		End;

  pMessage = ^tMessage;
  pMsgPort = ^tMsgPort;
  tDosPacket = Record
		  dp_Link: pMessage;
		  dp_Port: pMsgPort;
		  dp_Type: LongInt;
		  dp_Res1: LongInt;
		  dp_Res2: LongInt;
		  dp_Arg1: LongInt;
		  dp_Arg2: LongInt;
		  dp_Arg3: LongInt;
		  dp_Arg4: LongInt;
		  dp_Arg5: LongInt;
		  dp_Arg6: LongInt;
		  dp_Arg7: LongInt;
		End;

  tStandardPacket = Record
		  sp_Msg: tMessage;
		  sp_Pkt: tDosPacket;
		End;

  tDosLibrary = Record
		  dl_lib: tLibrary;
		  dl_Root: Pointer;
		  dl_GV: Pointer;
		  dl_A2: LongInt;
		  dl_A5: LongInt;
		  dl_A6: LongInt;
		End;

  tProcess = Record
		  pr_Task: tTask;
		  pr_MsgPort: tMsgPort;
		  pr_Pad: Integer;
		  pr_SegList: LongInt;
		  pr_StackSize: LongInt;
		  pr_GlobVec: Pointer;
		  pr_TaskNum: LongInt;
		  pr_StackBase: LongInt;
		  pr_Result2: LongInt;
		  pr_CurrentDir: LongInt;
		  pr_CIS: LongInt;
		  pr_COS: LongInt;
		  pr_ConsoleTask: Pointer;
		  pr_FileSystemTask: Pointer;
		  pr_CLI: LongInt;
		  pr_ReturnAddr: Pointer;
		  pr_PktWait: Pointer;
		  pr_WindowPtr: Pointer;
		End;

  tFileSysStartupMsg = Record
		  fssm_Unit: LongInt;
		  fssm_Device: LongInt;
		  fssm_Environ: LongInt;
		  fssm_Flags: LongInt;
		End;

  tFileInfoBlock = Record
		  fib_DiskKey: LongInt;
		  fib_DirEntryType: LongInt;
		  fib_FileName: Array [0..107] of ShortInt;
		  fib_Protection: LongInt;
		  fib_EntryType: LongInt;
		  fib_Size: LongInt;
		  fib_NumBlocks: LongInt;
		  fib_Date: tDateStamp;
		  fib_Comment: Array [0..79] of ShortInt;
		  fib_Reserved: Array [0..35] of ShortInt;
		End;

  tFileHandle = Record
		  fh_Link: pMessage;
		  fh_Port: pMsgPort;
		  fh_Type: pMsgPort;
		  fh_Buf: LongInt;
		  fh_Pos: LongInt;
		  fh_End: LongInt;
		  fh_Funcs: LongInt;
		  fh_Func2: LongInt;
		  fh_Func3: LongInt;
		  fh_Args: LongInt;
		  fh_Arg2: LongInt;
		End;

  tInfoData = Record
		  id_NumSoftErrors: LongInt;
		  id_UnitNumber: LongInt;
		  id_DiskState: LongInt;
		  id_NumBlocks: LongInt;
		  id_NumBlocksUsed: LongInt;
		  id_BytesPerBlock: LongInt;
		  id_DiskType: LongInt;
		  id_VolumeNode: LongInt;
		  id_InUse: LongInt;
		End;

  tFileLock = Record
		  fl_Link: LongInt;
		  fl_Key: LongInt;
		  fl_Access: LongInt;
		  fl_Task: pMsgPort;
		  fl_Volume: LongInt;
		End;

  tDeviceNode = Record
		  dn_Next: LongInt;
		  dn_Type: LongInt;
		  dn_Task: pMsgPort;
		  dn_Lock: LongInt;
		  dn_Handler: LongInt;
		  dn_StackSize: LongInt;
		  dn_Priority: LongInt;
		  dn_Startup: LongInt;
		  dn_SegList: LongInt;
		  dn_GlobalVec: LongInt;
		  dn_Name: LongInt;
		End;

  tDevInfo = Record
		  dvi_Next: LongInt;
		  dvi_Type: LongInt;
		  dvi_Task: Pointer;
		  dvi_Lock: LongInt;
		  dvi_Handler: LongInt;
		  dvi_StackSize: LongInt;
		  dvi_Priority: LongInt;
		  dvi_Startup: LongInt;
		  dvi_SegList: LongInt;
		  dvi_GlobVec: LongInt;
		  dvi_Name: LongInt;
		End;

  tDosInfo = Record
		  di_McName: LongInt;
		  di_DevInfo: LongInt;
		  di_Devices: LongInt;
		  di_Handlers: LongInt;
		  di_NetHand: Pointer;
		End;

  tDosEnvec = Record
		  de_TableSize: LongInt;
		  de_SizeBlock: LongInt;
		  de_SecOrg: LongInt;
		  de_Surfaces: LongInt;
		  de_SectorPerBlock: LongInt;
		  de_BlocksPerTrack: LongInt;
		  de_Reserved: LongInt;
		  de_PreAlloc: LongInt;
		  de_Interleave: LongInt;
		  de_LowCyl: LongInt;
		  de_HighCyl: LongInt;
		  de_NumBuffers: LongInt;
		  de_BufMemType: LongInt;
		  de_MaxTransfer: LongInt;
		  de_Mask: LongInt;
		  de_BootPri: LongInt;
		  de_DosType: LongInt;
		End;

  tCommandLineInterface = Record
		  cli_Result2: LongInt;
		  cli_SetName: LongInt;
		  cli_CommandDir: LongInt;
		  cli_ReturnCode: LongInt;
		  cli_CommandName: LongInt;
		  cli_FailLevel: LongInt;
		  cli_Prompt: LongInt;
		  cli_StandardInput: LongInt;
		  cli_CurrentInput: LongInt;
		  cli_CommandFile: LongInt;
		  cli_Interactive: LongInt;
		  cli_Background: LongInt;
		  cli_CurrentOutput: LongInt;
		  cli_DefaultStack: LongInt;
		  cli_StandardOutput: LongInt;
		  cli_Module: LongInt;
		End;

  tDeviceList = Record
		  dl_Next: LongInt;
		  dl_Type: LongInt;
		  dl_Task: pMsgPort;
		  dl_Lock: LongInt;
		  dl_VolumeDate: tDateStamp;
		  dl_LockList: LongInt;
		  dl_DiskType: LongInt;
		  dl_unused: LongInt;
		  dl_Name: LongInt;
		End;

  tDosList = Record
		  dol_Next: LongInt;
		  dol_Type: LongInt;
		  dol_Task: pMsgPort;
		  dol_Lock: LongInt;
		Case Integer of
		0: (
		  dol_handler: Record
		  dol_Handler: LongInt;
		  dol_StackSize: LongInt;
		  dol_Priority: LongInt;
		  dol_Startup: LongInt;
		  dol_SegList: LongInt;
		  dol_GlobVec: LongInt;
		  End;
		);
		1: (
		  dol_volume: Record
		  dol_VolumeDate: tDateStamp;
		  dol_LockList: LongInt;
		  dol_DiskType: LongInt;
		  End;
		  dol_Name: LongInt;
		);
		End;

  BPTR = LongInt;
  BSTR = LongInt;
  pDosPacket = ^tDosPacket;
  pFileInfoBlock = ^tFileInfoBlock;
  pDosList = ^tDosList;
  pDateStamp = ^tDateStamp;
  pProcess = ^tProcess;
  pCommandLineInterface = ^tCommandLineInterface;
  pInfoData = ^tInfoData;


Const
  ACTION_LOCATE_OBJECT = $8;
  ACTION_RENAME_OBJECT = $11;
  MODE_NEWFILE = $3EE;
  FIBF_DELETE = $1;
  DE_SIZEBLOCK = $1;
  ACTION_SET_PROTECT = $15;
  SIGBREAKB_CTRL_C = $C;
  ACCESS_READ = $FFFFFFFE;
  ID_KICKSTART_DISK = $4B49434B;
  SIGBREAKB_CTRL_D = $D;
  ERROR_LINE_TOO_LONG = $78;
  ERROR_OBJECT_TOO_LARGE = $CF;
  SIGBREAKB_CTRL_E = $E;
  DLT_DIRECTORY = $1;
  SIGBREAKB_CTRL_F = $F;
  ERROR_NO_FREE_STORE = $67;
  ERROR_DIR_NOT_FOUND = $CC;
  SIGBREAKF_CTRL_C = $1000;
  SIGBREAKF_CTRL_D = $2000;
  SIGBREAKF_CTRL_E = $4000;
  ERROR_BAD_STREAM_NAME = $CE;
  SIGBREAKF_CTRL_F = $8000;
  ACTION_GET_BLOCK = $2;
  ACTION_FREE_LOCK = $F;
  ID_NO_DISK_PRESENT = $FFFFFFFF;
  DOSNAME = 'dos.library';
  ERROR_INVALID_RESIDENT_LIBRARY = $7A;
  ACTION_FINDOUTPUT = $3EE;
  ACCESS_WRITE = $FFFFFFFF;
  BYTESPERLONG = $4;
  ACTION_READ = $52;
  ACTION_TIMER = $1E;
  OFFSET_BEGINING = $FFFFFFFF;
  ACTION_EVENT = $6;
  ACTION_FLUSH = $1B;
  ACTION_FINDINPUT = $3ED;
  ERROR_OBJECT_WRONG_TYPE = $D4;
  ACTION_WAIT_CHAR = $14;
  DE_NUMHEADS = $3;
  ERROR_OBJECT_NOT_FOUND = $CD;
  RETURN_OK = $0;
  SHARED_LOCK = $FFFFFFFE;
  ACTION_DISK_INFO = $19;
  DE_BLKSPERTRACK = $5;
  ACTION_WRITE = $57;
  DE_MASK = $E;
  ACTION_SEEK = $3F0;
  DE_RESERVEDBLKS = $6;
  ERROR_NO_DISK = $E2;
  FIBB_SCRIPT = $6;
  ERROR_FILE_NOT_OBJECT = $79;
  BITSPERLONG = $20;
  ACTION_INFO = $1A;
  TICKS_PER_SECOND = $32;
  FIBF_SCRIPT = $40;
  ERROR_DISK_WRITE_PROTECTED = $D6;
  ERROR_READ_PROTECTED = $E0;
  BITSPERBYTE = $8;
  ERROR_TASK_TABLE_FULL = $69;
  ACTION_CURRENT_VOLUME = $7;
  ID_UNREADABLE_DISK = $42414400;
  ID_NOT_REALLY_DOS = $4E444F53;
  ACTION_DIE = $5;
  ACTION_DISK_CHANGE = $21;
  ACTION_TRUNCATE = $3FE;
  DOSTRUE = $FFFFFFF6;
  ERROR_WRITE_PROTECTED = $DF;
  ACTION_DISK_TYPE = $20;
  ERROR_ACTION_NOT_KNOWN = $D1;
  ERROR_COMMENT_TOO_BIG = $DC;
  ACTION_SET_DATE = $22;
  FIBB_READ = $3;
  DLT_DEVICE = $0;
  ACTION_END = $3EF;
  ACTION_INHIBIT = $1F;
  RETURN_FAIL = $14;
  FIBF_READ = $8;
  ID_DOS_DISK = $444F5300;
  DE_UPPERCYL = $A;
  ERROR_DISK_NOT_VALIDATED = $D5;
  MODE_READWRITE = $3EC;
  ERROR_INVALID_COMPONENT_NAME = $D2;
  OFFSET_END = $1;
  FIBB_WRITE = $2;
  MININT = $80000000;
  DE_PREFAC = $7;
  RETURN_ERROR = $A;
  ACTION_EXAMINE_NEXT = $18;
  MAXINT = $7FFFFFFF;
  ERROR_NO_DEFAULT_DIR = $C9;
  ACTION_NIL = $0;
  ACTION_WRITE_PROTECT = $3FF;
  FIBF_WRITE = $4;
  ERROR_SEEK_ERROR = $DB;
  ACTION_RENAME_DISK = $9;
  ACTION_COPY_DIR = $13;
  ACTION_SCREEN_MODE = $3E2;
  ERROR_NO_MORE_ENTRIES = $E8;
  DE_MAXTRANSFER = $D;
  ID_VALIDATING = $51;
  DE_BOOTPRI = $F;
  ACTION_FINDUPDATE = $3EC;
  ACTION_MORE_CACHE = $12;
  ERROR_RENAME_ACROSS_DEVICES = $D7;
  ERROR_TOO_MANY_LEVELS = $D9;
  DE_SECSPERBLK = $4;
  ERROR_DEVICE_NOT_MOUNTED = $DA;
  DE_INTERLEAVE = $8;
  FIBB_ARCHIVE = $4;
  DE_SECORG = $2;
  DE_DOSTYPE = $10;
  EXCLUSIVE_LOCK = $FFFFFFFF;
  ERROR_DISK_FULL = $DD;
  RETURN_WARN = $5;
  ACTION_EXAMINE_OBJECT = $17;
  FIBB_PURE = $5;
  FIBF_ARCHIVE = $10;
  ID_VALIDATED = $52;
  ACTION_CREATE_DIR = $16;
  FIBF_PURE = $20;
  ACTION_SET_MAP = $4;
  ERROR_DELETE_PROTECTED = $DE;
  OFFSET_CURRENT = $0;
  ERROR_INVALID_LOCK = $D3;
  ACTION_READ_RETURN = $3E9;
  DOSFALSE = $0;
  DLT_VOLUME = $2;
  DE_NUMBUFFERS = $B;
  ERROR_OBJECT_EXISTS = $CB;
  DE_MEMBUFTYPE = $C;
  DE_BUFMEMTYPE = $C;
  ACTION_SET_COMMENT = $1C;
  ACTION_PARENT = $1D;
  MODE_OLDFILE = $3ED;
  ERROR_OBJECT_IN_USE = $CA;
  FIBB_EXECUTE = $1;
  ERROR_DIRECTORY_NOT_EMPTY = $D8;
  ERROR_NOT_A_DOS_DISK = $E1;
  ID_WRITE_PROTECTED = $50;
  OFFSET_BEGINNING = $FFFFFFFF;
  ACTION_DELETE_OBJECT = $10;
  FIBF_EXECUTE = $2;
  ACTION_WRITE_RETURN = $3EA;
  FIBB_DELETE = $0;
  DE_TABLESIZE = $0;
  DE_LOWCYL = $9;


Function Open
		 (name: String;
		  accessMode: LongInt): LongInt;

Procedure Close_ (file_: LongInt);
Function Read_
		 (file_: LongInt;
		  buffer: Pointer;
		  length: LongInt): LongInt;

Function Write_
		 (file_: LongInt;
		  buffer: Pointer;
		  length: LongInt): LongInt;

Function Input_: LongInt;
Function Output_: LongInt;
Function Seek_
		 (file_: LongInt;
		  position: LongInt;
		  offset: LongInt): LongInt;

Function DeleteFile (name: String): Boolean;
Function Rename_
		 (oldName: String;
		  newName: String): Boolean;

Function Lock
		 (name: String;
		  type_: LongInt): LongInt;

Procedure UnLock (lock: LongInt);
Function DupLock (lock: LongInt): LongInt;
Function Examine
		 (lock: LongInt;
		  fileInfoBlock: pFileInfoBlock): Boolean;

Function ExNext
		 (lock: LongInt;
		  fileInfoBlock: pFileInfoBlock): Boolean;

Function Info
		 (lock: LongInt;
		  parameterBlock: pInfoData): Boolean;

Function CreateDir (name: String): LongInt;
Function CurrentDir (lock: LongInt): LongInt;
Function IoErr: LongInt;
Function CreateProc
		 (name: pShortInt;
		  pri: LongInt;
		  segList: LongInt;
		  stackSize: LongInt): pMsgPort;

Procedure Exit_ (returnCode: LongInt);
Function LoadSeg (fileName: String): LongInt;
Function UnLoadSeg (segment: LongInt): Boolean;
Function DeviceProc (name: String): pMsgPort;
Function SetComment
		 (name: String;
		  comment: String): Boolean;

Function SetProtection
		 (name: String;
		  mask: LongInt): Boolean;

Function DateStamp (date: pDateStamp): pDateStamp;
Procedure Delay (timeout: LongInt);
Function WaitForChar
		 (file_: LongInt;
		  timeout: LongInt): Boolean;

Function ParentDir (lock: LongInt): LongInt;
Function IsInteractive (file_: LongInt): Boolean;
Function Execute
		 (string_: String;
		  file_: LongInt;
		  file_: LongInt): Boolean;



Function BADDR (bval: BPTR): APTR;
Function MKBADDR (addr: Pointer): BPTR;


End.
