home *** CD-ROM | disk | FTP | other *** search
- /*
-
- FIPS - the First nondestructive Interactive Partition Splitting program
-
-
-
- Module logdr_st.h
-
-
-
- RCS - Header:
-
- $Header: c:/daten/fips/source/main/RCS/logdr_st.h 1.4 1995/01/19 00:01:27 schaefer Exp $
-
-
-
- Copyright (C) 1993 Arno Schaefer
-
-
-
- This program is free software; you can redistribute it and/or modify
-
- it under the terms of the GNU General Public License as published by
-
- the Free Software Foundation; either version 2 of the License, or
-
- (at your option) any later version.
-
-
-
- This program is distributed in the hope that it will be useful,
-
- but WITHOUT ANY WARRANTY; without even the implied warranty of
-
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-
- GNU General Public License for more details.
-
-
-
- You should have received a copy of the GNU General Public License
-
- along with this program; if not, write to the Free Software
-
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-
-
-
-
- Report problems and direct all questions to:
-
-
-
- schaefer@rbg.informatik.th-darmstadt.de
-
- */
-
-
-
- #ifndef LOGDR_ST_H
-
- #define LOGDR_ST_H
-
-
-
- #include "types.h"
-
- #include "disk_io.h"
-
-
-
-
-
- /* ----------------------------------------------------------------------- */
-
- /* Class boot_sector - derived from structure sector */
-
- /* Must be initialized with pointer to logical drive object */
-
- /* Read() and write() read/write sector 0 of logical drive */
-
- /* ----------------------------------------------------------------------- */
-
-
-
- class boot_sector:public sector
-
- {
-
- class logical_drive *logical_drive;
-
- public:
-
- // constructor
-
-
-
- boot_sector (class logical_drive *logical_drive)
-
- { boot_sector::logical_drive = logical_drive; }
-
-
-
-
-
- // functions
-
-
-
- int read (void);
-
- int write (void);
-
- };
-
-
-
-
-
- /* ------------------------------------------------------------------------ */
-
- /* Bios Parameter Block structure */
-
- /* This is not exactly the BPB as understood by DOS, because it contains */
-
- /* the additional fields that are in the boot_sector like jump_instruction, */
-
- /* oem_name etc. Get() extracts info from the boot_sector, put() writes the */
-
- /* info back into the boot_sector buffer. */
-
- /* ------------------------------------------------------------------------ */
-
-
-
- struct bios_parameter_block
-
- {
-
- byte jump_instruction[3]; // EB xx 90 or E9 xx xx
-
- char oem_name[9];
-
- word bytes_per_sector; // usually 512
-
- byte sectors_per_cluster; // may differ
-
- word reserved_sectors; // usually 1 (boot_sector)
-
- byte no_of_fats; // usually 2
-
- word no_of_rootdir_entries; // usually 512 for HDs (?), 224 for
-
- // HD-Floppies, 112 for DD-Floppies
-
- word no_of_sectors; // 0 on BIGDOS partitions
-
- byte media_descriptor; // usually F8h
-
- word sectors_per_fat; // depends on partition size
-
- word sectors_per_track; // depends on drive
-
- word drive_heads; // dto.
-
- dword hidden_sectors; // first sector of partition or 0 for FDs
-
- dword no_of_sectors_long; // number of sectors on BIGDOS partitions
-
- byte phys_drive_no; // usually 80h
-
- byte signature; // usually 29h
-
- dword serial_number; // random
-
- char volume_label[12];
-
- char file_system_id[9];
-
-
-
- void get (boot_sector *boot_sector);
-
- void put (boot_sector *boot_sector);
-
- };
-
-
-
-
-
- /* ----------------------------------------------------------------------- */
-
- /* Some miscellaneous figures about the drive */
-
- /* Get() extracts this info from the BPB */
-
- /* ----------------------------------------------------------------------- */
-
-
-
- struct logical_drive_info
-
- {
-
- dword start_fat1;
-
- dword start_fat2;
-
- dword start_rootdir;
-
- dword start_data;
-
- dword no_of_clusters;
-
-
-
- virtual void get (const bios_parameter_block &bpb);
-
- };
-
-
-
-
-
- /* ----------------------------------------------------------------------- */
-
- /* Abstract Class logical_drive. This can be any DOS drive that allows */
-
- /* direct reading and writing of sectors, like Harddisk Partitions, Floppy */
-
- /* disks or Ramdisks */
-
- /* ----------------------------------------------------------------------- */
-
-
-
- class logical_drive
-
- {
-
- // private data
-
-
-
- struct bios_parameter_block pr_bpb;
-
- struct logical_drive_info pr_info;
-
-
-
- public:
-
-
-
- // public data
-
-
-
- class boot_sector *boot_sector;
-
-
-
- // member access functions
-
-
-
- virtual bios_parameter_block &bpb() { return pr_bpb; }
-
- virtual logical_drive_info &info() { return pr_info; }
-
-
-
- // functions
-
-
-
- virtual int read_sector (dword number,sector *sector) = 0;
-
- virtual int write_sector (dword number,sector *sector) = 0;
-
- // pure virtual functions
-
-
-
- int read_boot_sector (void) { return (boot_sector->read ()); }
-
- int write_boot_sector (void) { return (boot_sector->write ()); }
-
-
-
- void get_bpb (void) { bpb().get (boot_sector); }
-
- void put_bpb (void) { bpb().put (boot_sector); }
-
-
-
- void get_info (void) { info().get (bpb ()); }
-
- };
-
-
-
-
-
- /* ----------------------------------------------------------------------- */
-
- /* Function to read boot_sector from logical drive */
-
- /* It must be in the header file because it is inline */
-
- /* ----------------------------------------------------------------------- */
-
-
-
- inline int boot_sector::read (void)
-
- {
-
- return logical_drive->read_sector (0,this);
-
- }
-
-
-
-
-
- /* ----------------------------------------------------------------------- */
-
- /* Function to write boot_sector to logical drive */
-
- /* ----------------------------------------------------------------------- */
-
-
-
- inline int boot_sector::write (void)
-
- {
-
- return logical_drive->write_sector (0,this);
-
- }
-
-
-
- #endif
-
-