ibmpartitiontableentry.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 159 行
JAVA
159 行
/*
* $Id: IBMPartitionTableEntry.java,v 1.6 2004/01/24 23:43:40 gbin Exp $
*/
package org.jnode.fs.partitions.ibm;
import org.jnode.fs.partitions.PartitionTableEntry;
import org.jnode.fs.util.CHS;
import org.jnode.fs.util.DosUtils;
import org.jnode.util.NumberUtils;
/**
* @author epr
*/
public class IBMPartitionTableEntry implements PartitionTableEntry {
//private final int partNr;
private final byte[] bs;
private final int ofs;
public IBMPartitionTableEntry(byte[] bs, int partNr) {
this.bs = bs;
//this.partNr = partNr;
this.ofs = 446 + (partNr*16);
// THIS CHANGE BROKE THE BUILD. RUNNING IN VMWARE BROKE!
//this.ofs = 494 - (partNr*16);
}
public boolean isValid() {
return !isEmpty();
}
public boolean isEmpty() {
return (getSystemIndicator() == IBMPartitionTypes.PARTTYPE_EMPTY);
}
public boolean isExtended() {
final int id = getSystemIndicator();
//pgwiasda
//there are more than one type of extended Partitions
return (id == IBMPartitionTypes.PARTTYPE_WIN95_FAT32_EXTENDED ||
id == IBMPartitionTypes.PARTTYPE_LINUX_EXTENDED ||
id == IBMPartitionTypes.PARTTYPE_DOS_EXTENDED);
}
public boolean getBootIndicator() {
return (DosUtils.get8(bs, ofs+0) == 0x80);
}
public void setBootIndicator(boolean active) {
DosUtils.set8(bs, ofs+0, (active) ? 0x80 : 0);
}
public CHS getStartCHS() {
int v1 = DosUtils.get8(bs, ofs+1);
int v2 = DosUtils.get8(bs, ofs+2);
int v3 = DosUtils.get8(bs, ofs+3);
/*
* h = byte1;
* s = byte2 & 0x3f;
* c = ((byte2 & 0xc0) << 2) + byte3;
*/
return new CHS(((v2 & 0xc0) << 2) + v3, v1, v2 & 0x3f);
}
public void setStartCHS(CHS chs) {
DosUtils.set8(bs, ofs+1, Math.min(1023, chs.getHead()));
DosUtils.set8(bs, ofs+2, ((chs.getCylinder() >> 2) & 0xC0) + (chs.getSector() & 0x3f));
DosUtils.set8(bs, ofs+3, chs.getCylinder() & 0xFF);
}
public int getSystemIndicator() {
return DosUtils.get8(bs, ofs+4);
}
public void setSystemIndicator(int v) {
DosUtils.set8(bs, ofs+4, v);
}
public CHS getEndCHS() {
int v1 = DosUtils.get8(bs, ofs+5);
int v2 = DosUtils.get8(bs, ofs+6);
int v3 = DosUtils.get8(bs, ofs+7);
/*
* h = byte1;
* s = byte2 & 0x3f;
* c = ((byte2 & 0xc0) << 2) + byte3;
*/
return new CHS(((v2 & 0xc0) << 2) + v3, v1, v2 & 0x3f);
}
public void setEndCHS(CHS chs) {
DosUtils.set8(bs, ofs+5, chs.getHead());
DosUtils.set8(bs, ofs+6, ((chs.getCylinder() >> 2) & 0xC0) + (chs.getSector() & 0x3f));
DosUtils.set8(bs, ofs+7, chs.getCylinder() & 0xFF);
}
public long getStartLba() {
return DosUtils.get32(bs, ofs+8);
}
public void setStartLba(long v) {
DosUtils.set32(bs, ofs+8, v);
}
public long getNrSectors() {
return DosUtils.get32(bs, ofs+12);
}
public void setNrSectors(long v) {
DosUtils.set32(bs, ofs+12, v);
}
public void clear() {
for (int i = 0; i < 16; i++) {
DosUtils.set8(bs, ofs+i, 0);
}
}
public String dump() {
StringBuffer b = new StringBuffer();
for (int i = 0; i < 16; i++) {
b.append(NumberUtils.hex(DosUtils.get8(bs, ofs+i),2));
b.append(' ');
}
return b.toString();
}
/**
* @see java.lang.Object#toString()
*/
public String toString() {
StringBuffer b = new StringBuffer();
b.append('[');
b.append(getBootIndicator() ? "A" : " ");
b.append(' ');
b.append(NumberUtils.hex(getSystemIndicator(), 2));
b.append(' ');
b.append("s:"+getStartLba());
b.append(' ');
long tmp = getStartLba() + getNrSectors();
b.append("e:"+ tmp);
//b.append(NumberUtils.hex(getStartLba(), 8));
//b.append('+');
//b.append(NumberUtils.hex(getNrSectors(), 8));
//b.append(' ');
//b.append(getStartCHS());
//b.append('-');
//b.append(getEndCHS());
b.append(']');
return b.toString();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?