use core::panic; use std::io; use std::io::BufReader; use std::io::prelude::*; use std::fs::File; use std::io::SeekFrom; use libc::close; pub const SECTORS_PER_TRACK : i32 = 32; pub const NUM_TRACKS : i32 = 64; pub const NUM_SECTORS : i32 = SECTORS_PER_TRACK * NUM_TRACKS; pub const SECTOR_SIZE : i32 = 128; pub struct Disk { pub last_selector : i32, pub active : bool } impl Disk { pub fn init_disk() -> Disk { Disk { last_selector : 0, active : false } } pub fn read_request(disk : &mut Disk, sector_number : i32, data : &mut Vec) -> io::Result<()> { if disk.active { panic!("Only one request at time"); } if sector_number < 0 || sector_number >= NUM_SECTORS { panic!("sector_number isn't right"); } let mut f = File::open("test/disk")?; f.seek(SeekFrom::Start((sector_number * SECTOR_SIZE) as u64))?; let mut reader = BufReader::new(f); match reader.read(data) { Ok(_) => println!("Data has been read successfully"), Err(e) => println!("{:?}", e), _ => () } Ok(()) } pub fn write_request(disk : &mut Disk, sector_number : i32, data : &mut Vec) -> io::Result<()> { if disk.active { panic!("Only one request at time"); } if sector_number < 0 || sector_number >= NUM_SECTORS { panic!("sector_number isn't right"); } let mut f = File::create("test/disk")?; f.seek(SeekFrom::Start((sector_number * SECTOR_SIZE) as u64))?; let res = f.write(data); match res { Ok(_) => println!("Data written successfully"), Err(e) => println!("{:?}", e), _ => () } Ok(()) } }