/* Copyright 1997 Ken Siders */ /* dos compatability types */ #define DOS_ATARI 1 #define DOS_MYDOS 2 #define DOS_SPARTADOS 3 #define DOS_LJK 4 #define MAX_ATARI_FILES 64 /* disk format types */ #define FORMAT_SD 1 #define FORMAT_ED 2 #define FORMAT_DD 3 #define FORMAT_SD_CUSTOM 4 #define FORMAT_DD_CUSTOM 5 #define FORMAT_DEFAULT 6 /* open modes */ #define ATARI_OPEN_READ 4 #define ATARI_OPEN_WRITE 8 #define ATARI_OPEN_DIR 6 /* these will be in variables later */ #define firstDirSector 361 #define lastDirSector 368 #define vtocSector 360 #define vtocSector2 0 #define dirEntrySize 16 #define dirEntriesPerSector 8 #define DELETED_FLAG 0x80 #define INUSE_FLAG 0x40 #define LOCKED_FLAG 0x20 #define MYDOSDIR_FLAG 0x10 #define OPENOUTPUT_FLAG 0x01 #define DOS25EXT_FLAGS 0x03 struct S_AtariDosDirEntry { char flag; unsigned short sectorCount; unsigned short startSector; char fileName[8]; char extender[3]; }; typedef struct S_AtariDosDirEntry AtariDosDirEntry; typedef AtariDosDirEntry *AtariDosDirEntryPtr; /* 20070518 bkw: Nothing actually uses this struct, and it's got endianness issues... */ #if 0 struct S_AtariDosLink { int fileNo:6; int nextSector:10; int shortSector:1; int bytesInSector:7; }; typedef struct S_AtariDosLink AtariDosLink; typedef AtariDosLink *AtariDosLinkPtr; #endif struct S_AtariVtoc { byte reserved[10]; byte vtoc[118]; }; struct S_AtariFile { AtrFilePtr atr; unsigned short startSector; unsigned short currentSector; unsigned short sectorSize; unsigned short numberOfSectors; /* no. of sectors in file */ unsigned long fileSize ; /* not used yet */ byte openFlag; byte eofFlag; short currentOffset; short bytesData; short sectorLinkOffset; short fileNo; unsigned char sectorBuffer[256]; }; typedef struct S_AtariFile AtariFile; typedef AtariFile * AtariFilePtr; struct S_AtariFileInfo { unsigned long fileSize; /* not implemented */ unsigned short startSector; unsigned short sectorCount; char fileName[13]; int locked; int attrib; /* internal */ int dirSector; /* internal */ int dirEntry; /* internal */ char *pattern; /* internal */ char *atrName; /* internal */ int dosType; short fileNo; int flag; /* from dos */ }; typedef struct S_AtariFileInfo AtariFileInfo; typedef AtariFileInfo *AtariFileInfoPtr; /* function prototypes */ void MakeFileName( char *result, char *fileName, char *extender ); int PatternMatch( char *pattern, char *fileName, char *extender); int AtariFindFirst( char *atrName, unsigned attrib, char *pattern, AtariFileInfoPtr fileInfo ); int AtariFindNext( AtariFileInfoPtr fileInfo ); AtariFilePtr OpenAtariFile( char *atrName, char *fileName, byte mode); int AtariDirectory( char *atrName, char *pattern); long ReadAtariFile( AtariFilePtr atFile, char *buffer, long bytes ); int CloseAtariFile( AtariFilePtr atFile ); int EofAtariFile( AtariFilePtr atFile ); long AtariFileSize( char *atrFile, char *fileName ); int FixAtariFileNo( char *atrName, char *fileName, int fileNo );