public function __construct($settings, $records, $textRecords, $textLength, $images)
{
$this->elements = new FileElement(array('compression' => new FileShort(), 'unused' => new FileShort(), 'textLength' => new FileInt(), 'recordCount' => new FileShort(), 'recordSize' => new FileShort(), 'encryptionType' => new FileShort(), 'unused2' => new FileShort(), 'mobiIdentifier' => new FileString('MOBI', 4), 'mobiHeaderLength' => new FileInt(), 'mobiType' => new FileInt(), 'textEncoding' => new FileInt(), 'uniqueID' => new FileInt(), 'fileVersion' => new FileInt(), 'reserved' => new FileString(40), 'firstNonBookIndex' => new FileInt(), 'fullNameOffset' => new FileInt(), 'fullNameLength' => new FileInt(), 'locale' => new FileInt(), 'inputLanguage' => new FileInt(), 'outputLanguage' => new FileInt(), 'minimumVersion' => new FileInt(), 'firstImageIndex' => new FileInt(), 'huffmanRecordOffset' => new FileInt(), 'huffmanRecordCount' => new FileInt(), 'unused3' => new FileString(8), 'exthFlags' => new FileInt(0x40), 'unknown' => new FileString(32), 'drmOffset' => new FileInt(0xffffffff), 'drmCount' => new FileShort(0xffffffff), 'drmSize' => new FileShort(), 'drmFlags' => new FileInt(), 'mobiFiller' => new FileString(72), 'exthIdentifier' => new FileString('EXTH', 4), 'exthHeaderLength' => new FileInt(), 'exthRecordCount' => new FileInt(), 'exthRecords' => new FileElement(), 'exthPadding' => new FileString(), 'fullName' => new FileString()));
//Set values from the info block
foreach ($settings->values as $name => $val) {
//echo $name.", ";
if ($this->elements->exists($name)) {
$this->elements->get($name)->set($settings->get($name));
}
}
$els = $settings->values;
$exthElems = new FileElement();
$i = 0;
$l = 0;
foreach ($els as $name => $val) {
$type = EXTHHelper::textToType($name);
if ($type !== false) {
$type = new FileInt($type);
$length = new FileInt(8 + strlen($val));
$data = new FileString($val);
$l += 8 + strlen($val);
$exthElems->add('type' . $i, $type);
$exthElems->add('length' . $i, $length);
$exthElems->add('data' . $i, $data);
++$i;
}
}
if ($images > 0) {
$this->elements->get('firstImageIndex')->set($textRecords + 1);
}
$this->elements->get('firstNonBookIndex')->set($textRecords + 2 + $images);
$this->elements->get('reserved')->set(str_pad('', 40, chr(255), STR_PAD_RIGHT));
$this->elements->get('exthRecordCount')->set($i);
$this->elements->set('exthRecords', $exthElems);
$pad = $l % 4;
$pad = (4 - $pad) % 4;
$this->elements->get('exthPadding')->set(str_pad('', $pad, "", STR_PAD_RIGHT));
$this->elements->get('exthHeaderLength')->set(12 + $l + $pad);
$this->elements->get('recordCount')->set($textRecords);
$this->elements->get('fullNameOffset')->set($this->elements->offsetToEntry('fullName'));
$this->elements->get('fullNameLength')->set(strlen($settings->get('title')));
$this->elements->get('fullName')->set($settings->get('title'));
$this->elements->get('textLength')->set($textLength);
}