removed drv_disk from init file header
This commit is contained in:
parent
1a884f2e98
commit
4d2f27b3b2
@ -1,3 +1,4 @@
|
||||
use crate::drivers::drv_disk;
|
||||
use crate::{simulator::disk::SECTOR_SIZE, utility::bitmap::BitMap};
|
||||
pub const MAX_HEADER_SECTORS: i32 = 32;
|
||||
pub const DATAS_IN_FIRST_SECTOR: i32 = (SECTOR_SIZE - 5 * 8) /8 ;
|
||||
@ -19,13 +20,12 @@ pub struct FileHdr {
|
||||
data_sectors: Vec<i32>,
|
||||
num_header_sectors: i32,
|
||||
header_sectors: [i32; MAX_HEADER_SECTORS as usize],
|
||||
drv_disk: DrvDisk,
|
||||
}
|
||||
|
||||
impl FileHdr {
|
||||
|
||||
|
||||
pub fn init_file_hdr(drv_disk_: DrvDisk) -> FileHdr {
|
||||
pub fn init_file_hdr() -> FileHdr {
|
||||
FileHdr {
|
||||
is_dir: 0,
|
||||
num_bytes: 0,
|
||||
@ -33,7 +33,6 @@ impl FileHdr {
|
||||
data_sectors: Vec::new(),
|
||||
num_header_sectors: 0,
|
||||
header_sectors: [0;MAX_HEADER_SECTORS as usize],
|
||||
drv_disk: drv_disk_,
|
||||
}
|
||||
}
|
||||
|
||||
@ -102,7 +101,9 @@ impl FileHdr {
|
||||
}
|
||||
}
|
||||
|
||||
fn fetch_from(&mut self, sector: i32) {
|
||||
///Fetch contents of file header from disk.
|
||||
fn fetch_from(&mut self, sector: i32, drv_disk: &mut DrvDisk) {
|
||||
//temporary buffer
|
||||
let mut sector_img = vec![0; SECTOR_SIZE as usize / std::mem::size_of::<i32>() ];
|
||||
let mut data_sectors = vec![0; MAX_DATA_SECTORS as usize];
|
||||
|
||||
@ -111,7 +112,7 @@ impl FileHdr {
|
||||
|
||||
// Read the header from the disk
|
||||
// and put it in the temporary buffer
|
||||
DrvDisk::read_sector(&mut self.drv_disk, sector, &mut sector_img);
|
||||
DrvDisk::read_sector(&mut drv_disk, sector, &mut sector_img);
|
||||
|
||||
// Set up the memory image of the file header
|
||||
// from the newly read buffer
|
||||
@ -134,7 +135,7 @@ impl FileHdr {
|
||||
// Fill the temporary buffer with zeroes
|
||||
sector_img.fill(0);
|
||||
|
||||
DrvDisk::read_sector(&mut self.drv_disk, self.header_sectors[i], &mut sector_img);
|
||||
DrvDisk::read_sector(&mut drv_disk, self.header_sectors[i], &mut sector_img);
|
||||
|
||||
for j in 0..DATAS_IN_SECTOR as usize {
|
||||
data_sectors[DATAS_IN_FIRST_SECTOR as usize + i * DATAS_IN_SECTOR as usize + j] = sector_img[j];
|
||||
@ -148,8 +149,7 @@ impl FileHdr {
|
||||
|
||||
}
|
||||
|
||||
|
||||
fn write_back(&self, sector: i32) {
|
||||
fn write_back(&self, sector: i32, drv_disk: &mut DrvDisk) {
|
||||
let mut sector_img = vec![0; DATAS_IN_SECTOR as usize];
|
||||
|
||||
// Fills the temporary buffer with zeroes
|
||||
@ -170,7 +170,7 @@ impl FileHdr {
|
||||
// Write the first header sector into disk
|
||||
*FileHdr::next_header_sector(&mut sector_img) = self.header_sectors[0];
|
||||
let mut vec_u8: Vec<u8> = sector_img.iter().map(|&x| x as u8).collect();
|
||||
DrvDisk::write_sector(&mut self.drv_disk, sector, &mut vec_u8);
|
||||
DrvDisk::write_sector(&mut drv_disk, sector, &mut vec_u8);
|
||||
|
||||
// Write the following header sectors into disk
|
||||
for i in 0..self.num_header_sectors {
|
||||
@ -186,12 +186,12 @@ impl FileHdr {
|
||||
*FileHdr::next_header_sector(&mut sector_img) = 0;
|
||||
}
|
||||
let mut vec_u8: Vec<u8> = sector_img.iter().map(|&x| x as u8).collect();
|
||||
DrvDisk::write_sector(&mut self.drv_disk, self.header_sectors[i as usize], &mut vec_u8);
|
||||
DrvDisk::write_sector(&mut drv_disk, self.header_sectors[i as usize], &mut vec_u8);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn next_header_sector(hdr_sector: &mut [i32]) -> &mut i32 {
|
||||
let sector_size = SECTOR_SIZE as usize/ std::mem::size_of::<i32>();
|
||||
let sector_size = SECTOR_SIZE as usize / std::mem::size_of::<i32>();
|
||||
&mut hdr_sector[sector_size - 1]
|
||||
}
|
||||
|
||||
@ -213,7 +213,7 @@ impl FileHdr {
|
||||
return self.num_sectors * SECTOR_SIZE;
|
||||
}
|
||||
|
||||
pub fn print(&self) {
|
||||
pub fn print(&self, drv_disk: &mut DrvDisk) {
|
||||
let mut data = Vec::new();
|
||||
println!("FileHeader contents. File size: {}. File blocks:", self.num_bytes);
|
||||
for i in 0..self.num_sectors {
|
||||
@ -222,8 +222,6 @@ impl FileHdr {
|
||||
println!("\nFile contents:");
|
||||
let mut k = 0;
|
||||
for i in 0..self.num_sectors {
|
||||
let disk = Disk::init_disk();
|
||||
let mut drv_disk = DrvDisk::init_drv_disk(disk);
|
||||
drv_disk.read_sector(self.data_sectors[i as usize], &mut data);
|
||||
for j in 0..SECTOR_SIZE.min(self.num_bytes - k) {
|
||||
let c = data[j as usize];
|
||||
@ -252,9 +250,6 @@ impl FileHdr {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user