You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.1 KiB
156 lines
5.1 KiB
|
|
/*
|
|
* $Log: V:/Flite/archives/TrueFFS5/Src/DOSFORMT.H_V $
|
|
*
|
|
* Rev 1.2 Feb 19 2002 20:59:22 oris
|
|
* Moved fltl.h include directive to the head of the file.
|
|
*
|
|
* Rev 1.1 Apr 01 2001 07:45:06 oris
|
|
* Updated copywrite notice
|
|
*
|
|
* Rev 1.0 Feb 02 2001 13:51:48 oris
|
|
* Initial revision.
|
|
*/
|
|
|
|
/***********************************************************************************/
|
|
/* M-Systems Confidential */
|
|
/* Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2001 */
|
|
/* All Rights Reserved */
|
|
/***********************************************************************************/
|
|
/* NOTICE OF M-SYSTEMS OEM */
|
|
/* SOFTWARE LICENSE AGREEMENT */
|
|
/* */
|
|
/* THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE */
|
|
/* AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT */
|
|
/* FOR THE SPECIFIC TERMS AND CONDITIONS OF USE, */
|
|
/* OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE: */
|
|
/* E-MAIL = [email protected] */
|
|
/***********************************************************************************/
|
|
|
|
#ifndef DOSFORMT_H
|
|
#define DOSFORMT_H
|
|
|
|
#include "flformat.h"
|
|
#include "fltl.h"
|
|
|
|
/* The BIOS parameter block (a part of the boot sector) */
|
|
/* Note that this is NOT the customary definition of the BPB */
|
|
/* (customary is to start it on 'bytesPerSector'). To avoid the */
|
|
/* nuisance of a structure that starts at an odd offset, we add */
|
|
/* the first 11 bytes of the boot sector here. */
|
|
typedef struct {
|
|
unsigned char jumpInstruction[3];
|
|
char OEMname[8];
|
|
Unaligned bytesPerSector;
|
|
unsigned char sectorsPerCluster;
|
|
LEushort reservedSectors;
|
|
unsigned char noOfFATS;
|
|
Unaligned rootDirectoryEntries;
|
|
Unaligned totalSectorsInVolumeDOS3;
|
|
unsigned char mediaDescriptor;
|
|
LEushort sectorsPerFAT;
|
|
LEushort sectorsPerTrack;
|
|
LEushort noOfHeads;
|
|
LEulong noOfHiddenSectors;
|
|
LEulong totalSectorsInVolume;
|
|
} BPB;
|
|
|
|
|
|
typedef struct {
|
|
BPB bpb;
|
|
unsigned char physicalDriveNo;
|
|
char reserved0;
|
|
char extendedBootSignature;
|
|
char volumeId[4];
|
|
char volumeLabel[11];
|
|
char systemId[8];
|
|
char bootstrap[448];
|
|
LEushort signature;
|
|
} DOSBootSector;
|
|
|
|
|
|
typedef struct {
|
|
char name[11];
|
|
unsigned char attributes; /* mapped below */
|
|
unsigned char reserved[10];
|
|
LEushort updateTime;
|
|
/* The date field is encoded as follows: */
|
|
/* bit 0-4: Day of month (1-31) */
|
|
/* bit 5-8: Month (1-12) */
|
|
/* bit 9-15: Year relative to 1980 */
|
|
LEushort updateDate;
|
|
/* The DOS time field is encoded as follows: */
|
|
/* bit 0-4: seconds divided by 2 (0-29) */
|
|
/* bit 5-10: minutes (0-59) */
|
|
/* bit 11-15: hours (0-23) */
|
|
LEushort startingCluster;
|
|
LEulong fileSize;
|
|
} DirectoryEntry;
|
|
|
|
|
|
/* Directory entry attribute bits */
|
|
|
|
#define ATTR_READ_ONLY 1
|
|
#define ATTR_HIDDEN 2
|
|
#define ATTR_SYSTEM 4
|
|
#define ATTR_VOL_LABEL 8
|
|
#define ATTR_DIRECTORY 0x10
|
|
#define ATTR_ARCHIVE 0x20
|
|
|
|
#define DIRECTORY_ENTRY_SIZE sizeof(DirectoryEntry)
|
|
|
|
#define DIRECTORY_ENTRIES_PER_SECTOR (SECTOR_SIZE / DIRECTORY_ENTRY_SIZE)
|
|
|
|
#define NEVER_USED_DIR_ENTRY 0
|
|
#define DELETED_DIR_ENTRY ((char) 0xe5)
|
|
|
|
/* FAT definitions */
|
|
|
|
#define FAT_FREE 0
|
|
#define FAT_BAD_CLUSTER 0xfff7
|
|
#define FAT_LAST_CLUSTER 0xffff /* actually any of 0xfff8-0xffff */
|
|
|
|
/* Partition table definitions */
|
|
|
|
#define PARTITION_SIGNATURE 0xaa55
|
|
|
|
#define CYLINDER_SECTOR(cylinder,sector) ((sector) + ((cylinder & 0xff) << 8) + ((cylinder & 0x300) >> 2))
|
|
|
|
#define FAT12_PARTIT 0x01
|
|
#define FAT16_PARTIT 0x04
|
|
#define EX_PARTIT 0x05
|
|
#define DOS4_PARTIT 0x06
|
|
#define MAX_PARTITION_DEPTH 8
|
|
|
|
typedef struct {
|
|
/* First partition entry starts here. We do not map it as a */
|
|
/* separate structure because it is not longword aligned */
|
|
unsigned char activeFlag; /* 80h = bootable */
|
|
unsigned char startingHead;
|
|
LEushort startingCylinderSector;
|
|
char type;
|
|
unsigned char endingHead;
|
|
LEushort endingCylinderSector;
|
|
Unaligned4 startingSectorOfPartition;
|
|
Unaligned4 sectorsInPartition;
|
|
/* Partition entries 2,3 and 4 are structured as the 1st partition */
|
|
} Partition;
|
|
|
|
typedef struct {
|
|
char reserved1[0x1A6];
|
|
Unaligned4 passwordInfo[3]; /* M-Systems proprietary */
|
|
char reserved2[0xC]; /* NT4 or NT5 signature place */
|
|
|
|
/* First partition entry starts here. We do not map it as a */
|
|
/* separate structure because it is not longword aligned */
|
|
Partition ptEntry[4];
|
|
LEushort signature; /* = PARTITION_SIGNATURE */
|
|
} PartitionTable;
|
|
|
|
#ifdef FORMAT_VOLUME
|
|
|
|
extern FLStatus flDosFormat(TL *, BDTLPartitionFormatParams FAR1 *formatParams);
|
|
|
|
#endif /* FORMAT_VOLUME */
|
|
|
|
#endif /* DOSFORMT_H */
|