/* * $Id$ * * Copyright (C) 2003-2015 JNode.org * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.jnode.test.fs.fat; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.net.URLConnection; import java.nio.ByteBuffer; import javax.naming.NameNotFoundException; import org.jnode.driver.block.FileDevice; import org.jnode.fs.FSDirectory; import org.jnode.fs.FSFile; import org.jnode.fs.FileSystemException; import org.jnode.fs.fat.BootSector; import org.jnode.fs.fat.FatDirectory; import org.jnode.fs.fat.FatFileSystem; import org.jnode.fs.fat.FatFileSystemType; import org.jnode.fs.fat.GrubFatFormatter; import org.jnode.fs.service.FileSystemService; import org.jnode.naming.InitialNaming; import org.jnode.util.FileUtils; /** * @author epr */ public class FatTest { public static void main(String[] args) throws Exception { PrintWriter out = new PrintWriter(System.out, true); /* * String fn; if (args.length == 0) { fn = "lib/floppy.img"; } else { fn = * args[0]; } printInfo(new File(fn), out); * * System.out.println("\nGenerating new floppy"); */ File f = new File("build/testfloppy.img"); createFloppy(f); printInfo(f, out); } public static void printInfo(File file, PrintWriter out) throws IOException, FileSystemException { FileDevice fd = new FileDevice(file, "r"); try { final FileSystemService fSS = InitialNaming.lookup(FileSystemService.NAME); FatFileSystemType type = fSS.getFileSystemType(FatFileSystemType.ID); FatFileSystem fs = new FatFileSystem(fd, false, type); try { BootSector bs = fs.getBootSector(); bs.read(fd); out.println("OEM name " + bs.getOemName()); out.println("bytes/sector " + bs.getBytesPerSector()); out.println("sectors/cluster " + bs.getSectorsPerCluster()); out.println("#reserved sectors " + bs.getNrReservedSectors()); out.println("#fats " + bs.getNrFats()); out.println("#rootdir entries " + bs.getNrRootDirEntries()); out.println("#logical sectors " + bs.getNrLogicalSectors()); out.println("Medium descriptor 0x" + Integer.toHexString(bs.getMediumDescriptor())); out.println("sectors/fat " + bs.getSectorsPerFat()); out.println("sectors/track " + bs.getSectorsPerTrack()); out.println("#heads " + bs.getNrHeads()); out.println("#hidden sectors " + bs.getNrHiddenSectors()); fs.getFat().printTo(out); fs.getRootDir().printTo(out); try { FatDirectory dir = (FatDirectory) fs.getRootEntry().getDirectory().getEntry("AAP") .getDirectory(); dir.printTo(out); } catch (FileNotFoundException ex) { out.println("No AAP directory"); } try { FatDirectory dir = (FatDirectory) fs.getRootEntry().getDirectory().getEntry("boot") .getDirectory(); dir.printTo(out); } catch (FileNotFoundException ex) { out.println("No boot directory"); } } finally { // fd.stop(); fd.close(); } } catch (NameNotFoundException e) { throw new FileSystemException(e); } } public static void createFloppy(File f) throws Exception { GrubFatFormatter ff = new GrubFatFormatter(0, null, null); FileDevice newFd = new FileDevice(f, "rw"); newFd.setLength(1440 * 1024); ff.format(newFd); // newFd.start(); final FileSystemService fSS = InitialNaming.lookup(FileSystemService.NAME); FatFileSystemType type = fSS.getFileSystemType(FatFileSystemType.ID); FatFileSystem fs = new FatFileSystem(newFd, false, type); FSDirectory dir = fs.getRootEntry().getDirectory(); FSDirectory bDir = dir.addDirectory("boot").getDirectory(); FSDirectory bgDir = bDir.addDirectory("grub").getDirectory(); URLConnection urlConn = FatTest.class.getClassLoader().getResource("menu.lst").openConnection(); //byte[] buf = new byte[urlConn.getContentLength()]; ByteBuffer buf = ByteBuffer.allocate(urlConn.getContentLength()); FileUtils.copy(urlConn.getInputStream(), buf.array()); final FSFile fh1 = dir.addFile("test.lst").getFile(); fh1.setLength(urlConn.getContentLength()); fh1.write(0, buf); final FSFile fh2 = bgDir.addFile("menu.lst").getFile(); fh2.setLength(urlConn.getContentLength()); fh2.write(0, buf); fs.flush(); //newFd.stop(); newFd.close(); } }