summaryrefslogtreecommitdiff
path: root/org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/BaseBlock.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/BaseBlock.java')
-rw-r--r--org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/BaseBlock.java179
1 files changed, 179 insertions, 0 deletions
diff --git a/org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/BaseBlock.java b/org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/BaseBlock.java
new file mode 100644
index 0000000..68c2d94
--- /dev/null
+++ b/org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/BaseBlock.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2007 innoSysTec (R) GmbH, Germany. All rights reserved.
+ * Original author: Edmund Wagner
+ * Creation date: 22.05.2007
+ *
+ * Source: $HeadURL$
+ * Last changed: $LastChangedDate$
+ *
+ *
+ * the unrar licence applies to all junrar source and binary distributions
+ * you are not allowed to use this source to re-create the RAR compression algorithm
+ *
+ * Here some html entities which can be used for escaping javadoc tags:
+ * "&": "&" or "&"
+ * "<": "&#060;" or "&lt;"
+ * ">": "&#062;" or "&gt;"
+ * "@": "&#064;"
+ */
+package com.github.junrar.rarfile;
+
+import com.github.junrar.io.Raw;
+
+
+
+/**
+ * Base class of all rar headers
+ *
+ * @author $LastChangedBy$
+ * @version $LastChangedRevision$
+ */
+public class BaseBlock{
+
+ //Log //logger = LogFactory.getLog(BaseBlock.class.getName());
+
+ public static final short BaseBlockSize = 7;
+
+ //TODO move somewhere else
+
+ public static final short MHD_VOLUME = 0x0001;
+ public static final short MHD_COMMENT = 0x0002;
+ public static final short MHD_LOCK = 0x0004;
+ public static final short MHD_SOLID = 0x0008;
+ public static final short MHD_PACK_COMMENT = 0x0010;
+ public static final short MHD_NEWNUMBERING = 0x0010;
+ public static final short MHD_AV = 0x0020;
+ public static final short MHD_PROTECT = 0x0040;
+ public static final short MHD_PASSWORD = 0x0080;
+ public static final short MHD_FIRSTVOLUME = 0x0100;
+ public static final short MHD_ENCRYPTVER = 0x0200;
+
+
+ public static final short LHD_SPLIT_BEFORE = 0x0001;
+ public static final short LHD_SPLIT_AFTER = 0x0002;
+ public static final short LHD_PASSWORD = 0x0004;
+ public static final short LHD_COMMENT = 0x0008;
+ public static final short LHD_SOLID = 0x0010;
+
+ public static final short LHD_WINDOWMASK = 0x00e0;
+ public static final short LHD_WINDOW64 = 0x0000;
+ public static final short LHD_WINDOW128 = 0x0020;
+ public static final short LHD_WINDOW256 = 0x0040;
+ public static final short LHD_WINDOW512 = 0x0060;
+ public static final short LHD_WINDOW1024 = 0x0080;
+ public static final short LHD_WINDOW2048 = 0x00a0;
+ public static final short LHD_WINDOW4096 = 0x00c0;
+ public static final short LHD_DIRECTORY = 0x00e0;
+
+ public static final short LHD_LARGE = 0x0100;
+ public static final short LHD_UNICODE = 0x0200;
+ public static final short LHD_SALT = 0x0400;
+ public static final short LHD_VERSION = 0x0800;
+ public static final short LHD_EXTTIME = 0x1000;
+ public static final short LHD_EXTFLAGS = 0x2000;
+
+ public static final short SKIP_IF_UNKNOWN = 0x4000;
+ public static final short LONG_BLOCK = -0x8000;
+
+ public static final short EARC_NEXT_VOLUME = 0x0001;
+ public static final short EARC_DATACRC = 0x0002;
+ public static final short EARC_REVSPACE = 0x0004;
+ public static final short EARC_VOLNUMBER = 0x0008;
+
+
+ protected long positionInFile;
+
+ protected short headCRC = 0;
+ protected byte headerType = 0;
+ protected short flags = 0;
+ protected short headerSize = 0 ;
+
+ /**
+ *
+ */
+ public BaseBlock(){
+
+ }
+
+ public BaseBlock(BaseBlock bb){
+ this.flags = bb.getFlags();
+ this.headCRC = bb.getHeadCRC();
+ this.headerType = bb.getHeaderType().getHeaderByte();
+ this.headerSize = bb.getHeaderSize();
+ this.positionInFile = bb.getPositionInFile();
+ }
+ public BaseBlock(byte[] baseBlockHeader){
+
+ int pos = 0;
+ this.headCRC = Raw.readShortLittleEndian(baseBlockHeader, pos);
+ pos+=2;
+ this.headerType |= baseBlockHeader[pos]&0xff;
+ pos++;
+ this.flags = Raw.readShortLittleEndian(baseBlockHeader, pos);
+ pos+=2;
+ this.headerSize = Raw.readShortLittleEndian(baseBlockHeader, pos);
+ }
+
+
+ public boolean hasArchiveDataCRC(){
+ return (this.flags & EARC_DATACRC)!=0;
+ }
+
+ public boolean hasVolumeNumber(){
+ return (this.flags & EARC_VOLNUMBER)!=0;
+ }
+
+ public boolean hasEncryptVersion(){
+ return (flags & MHD_ENCRYPTVER)!=0;
+ }
+
+ /**
+ * @return is it a sub block
+ */
+ public boolean isSubBlock()
+ {
+ if (UnrarHeadertype.SubHeader.equals(headerType)){
+ return(true);
+ }
+ if (UnrarHeadertype.NewSubHeader.equals(headerType) && (flags & LHD_SOLID)!=0)
+ {
+ return(true);
+ }
+ return(false);
+
+ }
+
+ public long getPositionInFile() {
+ return positionInFile;
+ }
+
+ public short getFlags() {
+ return flags;
+ }
+
+ public short getHeadCRC() {
+ return headCRC;
+ }
+
+ public short getHeaderSize() {
+ return headerSize;
+ }
+
+ public UnrarHeadertype getHeaderType() {
+ return UnrarHeadertype.findType(headerType);
+ }
+
+ public void setPositionInFile(long positionInFile) {
+ this.positionInFile = positionInFile;
+ }
+
+ public void print(){
+ StringBuilder str =new StringBuilder();
+ str.append("HeaderType: " + getHeaderType());
+ str.append("\nHeadCRC: "+Integer.toHexString(getHeadCRC()));
+ str.append("\nFlags: "+Integer.toHexString(getFlags()));
+ str.append("\nHeaderSize: "+getHeaderSize());
+ str.append("\nPosition in file: "+getPositionInFile());
+ //logger.info(str.toString());
+ }
+}