unit FileSystem;

INTERFACE
uses Exec, AmigaDOS;


type
	pFileSysEntry = ^tFileSysEntry;
	tFileSysEntry = record
		fse_Node: tNode;
		fse_DosType: long;
		fse_Version: long;
		fse_PatchFlags: long;
		fse_Type: long;
		fse_Task: long;
		fse_Lock: BPTR;
		fse_Handler: BSTR;
		fse_StackSize: long;
		fse_Priority: longint;
		fse_Startup: BPTR;
		fse_SegList: BPTR;
		fse_GlobalVec: BPTR;
		end;

	pFileSysResource = ^tFileSysResource;
	tFileSysResource = record
		fsr_Node: tNode;
		fsr_Creator: pbyte;
		fsr_FileSysEntries: tList;
		end;

	pPartitionBlock = ^tPartitionBlock;
	tPartitionBlock = record
		pb_ID: long;
		pb_SummedLongs: long;
		pb_ChkSum: longint;
		pb_HostID: long;
		pb_Next: long;
		pb_Flags: long;
		pb_Reserved1: array [0..1] of long;
		pb_DevFlags: long;
		pb_DriveName: array [0..31] of byte;
		pb_Reserved2: array [0..14] of long;
		pb_Environment: array [0..16] of long;
		pb_EReserved: array [0..14] of long;
		end;

	pBadBlockEntry = ^tBadBlockEntry;
	tBadBlockEntry = record
		bbe_BadBlock: long;
		bbe_GoodBlock: long;
		end;

	pBadBlockBlock = ^tBadBlockBlock;
	tBadBlockBlock = record
		bbb_ID: long;
		bbb_SummedLongs: long;
		bbb_ChkSum: longint;
		bbb_HostID: long;
		bbb_Next: long;
		bbb_Reserved: long;
		bbb_BlockPairs: array [0..60] of tBadBlockEntry;
		end;

	pLoadSegBlock = ^tLoadSegBlock;
	tLoadSegBlock = record
		lsb_ID: long;
		lsb_SummedLongs: long;
		lsb_ChkSum: longint;
		lsb_HostID: long;
		lsb_Next: long;
		lsb_LoadData: array [0..122] of long;
		end;

	pFileSysHeaderBlock = ^tFileSysHeaderBlock;
	tFileSysHeaderBlock = record
		fhb_ID: long;
		fhb_SummedLongs: long;
		fhb_ChkSum: longint;
		fhb_HostID: long;
		fhb_Next: long;
		fhb_Flags: long;
		fhb_Reserved1: array [0..1] of long;
		fhb_DosType: long;
		fhb_Version: long;
		fhb_PatchFlags: long;
		fhb_Type: long;
		fhb_Task: long;
		fhb_Lock: long;
		fhb_Handler: long;
		fhb_StackSize: long;
		fhb_Priority: longint;
		fhb_Startup: longint;
		fhb_SegListBlocks: longint;
		fhb_GlobalVec: longint;
		fhb_Reserved2: array [0..22] of long;
		fhb_Reserved3: array [0..20] of long;
		end;

	pRigidDiskBlock = ^tRigidDiskBlock;
	tRigidDiskBlock = record
		rdb_ID: long;
		rdb_SummedLongs: long;
		rdb_ChkSum: longint;
		rdb_HostID: long;
		rdb_BlockBytes: long;
		rdb_Flags: long;
		rdb_BadBlockList: long;
		rdb_PartitionList: long;
		rdb_FileSysHeaderList: long;
		rdb_DriveInit: long;
		rdb_Reserved1: array [0..5] of long;
		rdb_Cylinders: long;
		rdb_Sectors: long;
		rdb_Heads: long;
		rdb_Interleave: long;
		rdb_Park: long;
		rdb_Reserved2: array [0..2] of long;
		rdb_WritePreComp: long;
		rdb_ReducedWrite: long;
		rdb_StepRate: long;
		rdb_Reserved3: array [0..4] of long;
		rdb_RDBBlocksLo: long;
		rdb_RDBBlocksHi: long;
		rdb_LoCylinder: long;
		rdb_HiCylinder: long;
		rdb_CylBlocks: long;
		rdb_AutoParkSeconds: long;
		rdb_Reserved4: array [0..1] of long;
		rdb_DiskVendor: array [0..7] of byte;
		rdb_DiskProduct: array [0..15] of byte;
		rdb_DiskRevision: array [0..3] of byte;
		rdb_ControllerVendor: array [0..7] of byte;
		rdb_ControllerProduct: array [0..15] of byte;
		rdb_ControllerRevision: array [0..3] of byte;
		rdb_Reserved5: array [0..9] of long;
		end;

	pBootBlock = ^tBootBlock;
	tBootBlock = record
		bb_id: long;
		bb_chksum: longint;
		bb_dosblock: longint;
		end;



const
	IDNAME_PARTITION = $50415254;
	FSRNAME = 'FileSystem.resource';
	IDNAME_LOADSEG = $4C534547;
	PBFB_NOMOUNT = 1;
	PBFF_NOMOUNT = 2;
	BBNAME_DOS = $444F5300;
	RDBFB_LAST = 0;
	RDBFF_LAST = 1;
	PBFB_BOOTABLE = 0;
	BBID_KICK = $4B49434B;
	PBFF_BOOTABLE = 1;
	RDBFB_CTRLRID = 5;
	RDBFB_LASTTID = 2;
	RDBFF_CTRLRID = $20;
	RDBFF_LASTTID = 4;
	RDB_LOCATION_LIMIT = $10;
	IDNAME_BADBLOCK = $42414442;
	RDBFB_DISKID = 4;
	IDNAME_FILESYSHEADER = $46534844;
	IDNAME_RIGIDDISK = $5244534B;
	RDBFF_DISKID = $10;
	RDBFB_LASTLUN = 1;
	BOOTSECTS = 2;
	RDBFF_LASTLUN = 2;
	RDBFB_NORESELECT = 3;
	BBID_DOS = $444F5300;
	RDBFF_NORESELECT = 8;
	BBNAME_KICK = $4B49434B;


IMPLEMENTATION
end.
