MCPcopy Create free account
hub / github.com/p2r3/convert / writeFileHeader

Method writeFileHeader

src/handlers/lzh/encoder.ts:40–113  ·  view source on GitHub ↗
(file: LHAFileInput)

Source from the content-addressed store, hash-verified

38 }
39
40 private writeFileHeader(file: LHAFileInput): void {
41 const timestamp = file.timestamp || new Date();
42 const method = "-lh0-"; // Store method (no compression)
43 const compressedData = file.data;
44 const originalSize = file.data.length;
45 const compressedSize = compressedData.length;
46 const crc = this.calculateCRC16(file.data);
47
48 // Prepare filename (ensure it's not too long)
49 const filenameBytes = new TextEncoder().encode(file.filename);
50 const filenameLength = Math.min(filenameBytes.length, 255);
51
52 // Calculate header size (level 0)
53 // 2 (header size + checksum) + 5 (method) + 4 (comp size) + 4 (orig size) +
54 // 2 (time) + 2 (date) + 1 (attr) + 1 (level) + 1 (name len) + name + 2 (crc)
55 const baseHeaderSize = 2 + 5 + 4 + 4 + 2 + 2 + 1 + 1 + 1 + filenameLength + 2;
56 const headerSize = baseHeaderSize - 2; // Size doesn't include the size byte itself and checksum
57
58 const header = new Uint8Array(baseHeaderSize);
59 let offset = 0;
60
61 // Header size
62 header[offset++] = headerSize;
63
64 // Header checksum (calculate later)
65 const checksumOffset = offset;
66 header[offset++] = 0;
67
68 // Method
69 const methodBytes = new TextEncoder().encode(method);
70 header.set(methodBytes, offset);
71 offset += 5;
72
73 // Compressed size
74 this.writeDWord(header, offset, compressedSize);
75 offset += 4;
76
77 // Original size
78 this.writeDWord(header, offset, originalSize);
79 offset += 4;
80
81 // MS-DOS timestamp
82 const dosTime = this.dateToDosTime(timestamp);
83 this.writeWord(header, offset, dosTime.time);
84 offset += 2;
85 this.writeWord(header, offset, dosTime.date);
86 offset += 2;
87
88 // Attributes (0x20 = archive bit)
89 header[offset++] = 0x20;
90
91 // Level (0)
92 header[offset++] = 0x00;
93
94 // Filename length
95 header[offset++] = filenameLength;
96
97 // Filename

Callers 1

createMethod · 0.95

Calls 5

calculateCRC16Method · 0.95
writeDWordMethod · 0.95
dateToDosTimeMethod · 0.95
writeWordMethod · 0.95

Tested by

no test coverage detected