Package org.jnode.test.fs.fat

Source Code of org.jnode.test.fs.fat.FatTest

/*
* $Id$
*
* Copyright (C) 2003-2014 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();
    }
}
TOP

Related Classes of org.jnode.test.fs.fat.FatTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.