/* * DOS.H */ #include #include #include #include "/server/servers.h" #include "/dnet/channel.h" #include "/lib/dnetlib.h" #ifdef LATTICE #include #include #endif #ifdef NOTDEF #include "exec/types.h" #include "exec/memory.h" #include "libraries/dos.h" #include "libraries/dosextens.h" #include "libraries/filehandler.h" #endif NOTDEF /* * ACTIONS which do not exist in dosextens.h but which indeed exist on * the Amiga. */ #define ACTION_OPENRW 1004 #define ACTION_OPENOLD 1005 #define ACTION_OPENNEW 1006 #define ACTION_CLOSE 1007 #define ACTION_SEEK 1008 #define ACTION_RAWMODE 994 #define ACTION_MORECACHE 18 #define ACTION_FLUSH 27 #define DOS_FALSE 0 #define DOS_TRUE -1 typedef struct DosPacket PACKET; typedef struct DeviceNode DEVNODE; typedef struct DeviceList DEVLIST; typedef struct DosInfo DOSINFO; typedef struct RootNode ROOTNODE; typedef struct FileHandle FH; typedef struct DateStamp STAMP; typedef struct InfoData INFODATA; typedef struct DosLibrary DOSLIB; #define FILE_DIR 1 #define FILE_FILE -1 #define LOCKLINK struct _LOCKLINK #define HANDLE struct _HANDLE /* * We use this structure to link locks together in a list for internal * usage. I could have use the link field in the lock structure as a * real linked list, but didn't want to have to sequentially search the * list to remove a node. * * NOTE: You CANNOT simply extend the FileLock (LOCK) structure. Some * programs assume it is sizeof(LOCK) big and break. I found this out the * hard way. */ LOCKLINK { NODE Node; LOCK *Lock; }; /* * OPERATION STRUCTURES */ typedef struct { long DirHandle; /* relative to directory (0=root) */ uword Modes; /* open modes */ } OpOpen; typedef struct { long Handle; ulong Prot; long Type; long Size; STAMP Date; /* date stamp */ } RtOpen; typedef struct { long Handle; /* file handle to read from */ long Bytes; /* # of bytes to read */ } OpRead; typedef struct { long Bytes; /* < 0 == error */ } RtRead; typedef struct { long Handle; /* file handle to read from */ long Bytes; /* # of bytes to read */ } OpWrite; typedef struct { long Bytes; /* < 0 == error */ } RtWrite; typedef struct { long Handle; } OpClose; typedef struct { long Handle; long Offset; long How; } OpSeek; typedef struct { long OldOffset; long NewOffset; /* -1 = error */ } RtSeek; typedef struct { long Handle; } OpParent; typedef RtOpen RtParent; typedef struct { long DirHandle; } OpDelete; typedef struct { long Error; } RtDelete; typedef OpDelete OpCreateDir; typedef RtParent RtCreateDir; typedef struct { long Handle; } OpDup; typedef RtOpen RtDup; typedef struct { long Handle; /* oops, actually a directory handle */ long Index; } OpNextDir; typedef RtOpen RtNextDir; typedef struct { long DirHandle1; long DirHandle2; } OpRename; typedef struct { long Error; } RtRename; /* * Filehandle structure associated with an open file handle */ #define MAGIC 0x1AFB439C HANDLE { NODE Node; /* link node */ long Magic; LOCK *Lock; /* lock if any */ long Handle; /* remote handle */ short Type; /* file type */ ulong Prot; /* protection bits */ ulong Size; /* file size */ STAMP Date; /* date stamp */ char *Name; /* file name */ }; /* * (void *) in Aztec C means 'pointer to anything'. I use it * extensively. */ /* REMOVED extern void returnpacket(); extern void *GetLockForHandle(); extern HANDLE *GetHandleForLock(); extern void *AllocMem(), *RemHead(), *GetMsg(); extern void *FindTask(), *Open(), *OpenLibrary(); extern void *dosalloc(), *GetSucc(), *GetHead(); extern LOCK *ramlock(); extern char *bstos(); extern char *skipdevice(); extern HANDLE *getlockfile(); extern char *getpathelement(); extern char *typetostr(); */