Pouzil jsem prvni variantu (ale plati to i pro druhou variantu) pakovace z
http://busy.speccy.cz/download/lzxpack01.rar a k memu prekvapeni, nektere programy nesly ani zkompilovat.
Nektere jen s varovanim ze neodpovida pocet promennych v retezcich, nekdy to uplne selhalo ze je pouzita funkce jen pro windows a nekdy s desitkama chyb jako LzxPack, kde je hlavni problem ze ma problem se jmenem "index" a neni si jisty ktery ma autor na mysli.
Kód:
dworkin@dw-A15:~/Programovani/ZX/LZX_PACKER/lzxpack01_edit$ diff LzePack.cpp ../lzxpack01/LzePack.cpp
152c152
< if (DBG > 3) printf("%+6d %04X Detected sekvence at %+d Off:%d Len:%u => Set length: %u (max_loc: %i)\n",
---
> if (DBG > 3) printf("%+6d %04X Detected sekvence at %+d Off:%d Len:%u => Set length: %u\n",
470c470
< if (!len) {printf("\nError at +%6u %04X Offset:%u Len:%u\n",index,index,off,len);exit(4);}
---
> if (!len) {printf("\nError at %+6u 0x04X Offset:%u Len:%u\n",index,index,off,len);exit(4);}
475c475
< if (len > MAXSEK || off > MAXOFF) {printf("\nError at +%6u %04X Offset:%u Len:%u\n",index,index,off,len);exit(4);}
---
> if (len > MAXSEK || off > MAXOFF) {printf("\nError at %+6u 0x04X Offset:%u Len:%u\n",index,index,off,len);exit(4);}
515c515
< if (len > MAXSEK) {printf("\nError at +%6u %04X Offset:%u Len:%u\n",index,index,off,len);exit(4);}
---
> if (len > MAXSEK) {printf("\nError at %+6u 0x04X Offset:%u Len:%u\n",index,index,off,len);exit(4);}
547c547
< printf("Packed: %5u => %-5u Data: %-5u Overhead: %-5u\n",input_size,length_out,totdat,totove);
---
> printf("Packed: %5u => %-5u Data: %-5u Overhead: %-5u",input_size,length_out,totdat,totove);
dworkin@dw-A15:~/Programovani/ZX/LZX_PACKER/lzxpack01_edit$ diff LzmPack.cpp ../lzxpack01/LzmPack.cpp
151c151
< if (DBG > 3) printf("%+6d %04X Detected sekvence at %+d Off:%d Len:%u => Set length: %u (max_loc:%i)\n",
---
> if (DBG > 3) printf("%+6d %04X Detected sekvence at %+d Off:%d Len:%u => Set length: %u\n",
446,449c446
< if (!len) {
< printf("\nError at %5u %04X Len:0 Offset:%u\n",index,index,bufoff[index]);
< exit(4);
< }
---
> if (!len) {printf("\nError at %5u 0x04X Len:0 Offset:%u\n",index,index,bufoff[index]);exit(4);}
515c512
< printf("Packed: %5u => %-5u Data: %-5u Overhead: %-5u\n",input_size,length_out,totdat,totove);
---
> printf("Packed: %5u => %-5u Data: %-5u Overhead: %-5u",input_size,length_out,totdat,totove);
dworkin@dw-A15:~/Programovani/ZX/LZX_PACKER/lzxpack01_edit$ diff LzxList.cpp ../lzxpack01/LzxList.cpp
357c357
< if (name_length > 4 && !strcasecmp(packed_name + name_length - 4, ".lzm"))
---
> if (name_length > 4 && !_stricmp(packed_name + name_length - 4, ".lzm"))
363c363
< else if (name_length > 4 && !strcasecmp(packed_name + name_length - 4, ".lze"))
---
> else if (name_length > 4 && !_stricmp(packed_name + name_length - 4, ".lze"))
Kód:
dworkin@dw-A15:~/Programovani/ZX/LZX_PACKER/lzxpack01_edit$ diff LzxPack.cpp ../lzxpack01/LzxPack.cpp
55c55
< int int_index;
---
> int index;
392c392
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" %c", bit ? '1':'0');
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" %c", bit ? '1':'0');
410c410
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" (Val:%u B:%u)", value, bits);
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" (Val:%u B:%u)", value, bits);
417c417
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" (Eli:%u B:%u)", value, bits);
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" (Eli:%u B:%u)", value, bits);
432c432
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" 0x00");
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" 0x00");
461c461
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" %02X", (length << 1) | 0x01);
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" %02X", (length << 1) | 0x01);
469c469
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" %02X", length | 0x40);
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" %02X", length | 0x40);
476c476
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" %02X %02X", (length >> 8) | 0xC0, length & 0xFF);
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" %02X %02X", (length >> 8) | 0xC0, length & 0xFF);
483c483
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" (pack)");
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" (pack)");
515c515
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) printf(" -");
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) printf(" -");
757c757
< printf("ERROR: malloc(%lu) returns null\n", num * sizeof(int));
---
> printf("ERROR: malloc(%u) returns null\n", num * sizeof(int));
1156c1156
< for(int_index = 1; int_index < input_size; int_index++)
---
> for(index = 1; index < input_size; index++)
1159c1159
< int hash_index = input_data[int_index] | (input_data[int_index-1] << 8);
---
> int hash_index = input_data[index] | (input_data[index-1] << 8);
1161,1162c1161,1162
< bufnxt[int_index] = locate;
< hash_table[hash_index] = int_index;
---
> bufnxt[index] = locate;
> hash_table[hash_index] = index;
1164c1164
< if (ENACOM > 2 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 2 && index >= ENAZAC && index <= ENAEND)
1167c1167
< unsigned char byte = input_data[int_index];
---
> unsigned char byte = input_data[index];
1169c1169
< int_index,int_index,byte,
---
> index,index,byte,
1172c1172
< int nxt = bufnxt[int_index];
---
> int nxt = bufnxt[index];
1187,1189c1187,1189
< bufoff[int_index][comsel] = 0;
< buflen[int_index][comsel] = 0;
< buftax[int_index][comsel] = buftax[int_index - 1][comsel] + SetUnpackTax(comsel);
---
> bufoff[index][comsel] = 0;
> buflen[index][comsel] = 0;
> buftax[index][comsel] = buftax[index - 1][comsel] + SetUnpackTax(comsel);
1191c1191
< if (ENAUNP && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENAUNP && index >= ENAZAC && index <= ENAEND)
1195,1196c1195,1196
< int previous_tax = buftax[int_index - 1][comsel];
< int tax = buftax[int_index][comsel] - previous_tax;
---
> int previous_tax = buftax[index - 1][comsel];
> int tax = buftax[index][comsel] - previous_tax;
1277c1277
< int offset = int_index - locate;
---
> int offset = index - locate;
1281c1281
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1285c1285
< int_index, int_index, locate, locate, -offset, best_length);
---
> index, index, locate, locate, -offset, best_length);
1291c1291
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1295c1295
< int_index, int_index, locate, locate, -offset, maxloc);
---
> index, index, locate, locate, -offset, maxloc);
1301c1301
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1306c1306
< int_index, int_index, locate, locate, -offset,
---
> index, index, locate, locate, -offset,
1312c1312
< if (lstidx[locate-1] == int_index-1)
---
> if (lstidx[locate-1] == index-1)
1316c1316
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1319c1319
< int_index, int_index, int_index-1, lstlen[locate-1], length);
---
> index, index, index-1, lstlen[locate-1], length);
1326c1326
< int subsub = int_index-period;
---
> int subsub = index-period;
1329c1329
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1334c1334
< int_index, int_index, locate, period, replen[locate],
---
> index, index, locate, period, replen[locate],
1340c1340
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1343c1343
< int_index,int_index,
---
> index,index,
1345c1345
< int_index -length,input_data[int_index -length],
---
> index -length,input_data[index -length],
1349c1349
< if (input_data[locate-length] != input_data[int_index-length]) break;
---
> if (input_data[locate-length] != input_data[index-length]) break;
1356,1357c1356,1357
< maxloc = int_index - length + 1;
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> maxloc = index - length + 1;
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1360c1360
< int_index,int_index,limit,length,maxloc);
---
> index,index,limit,length,maxloc);
1364c1364
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1367c1367
< int_index,int_index,
---
> index,index,
1369c1369
< int_index-length,input_data[int_index-length],
---
> index-length,input_data[index-length],
1373c1373
< if (input_data[locate-length] != input_data[int_index-length]) break;
---
> if (input_data[locate-length] != input_data[index-length]) break;
1381c1381
< if (ENACOM > 4 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 4 && index >= ENAZAC && index <= ENAEND)
1384c1384
< int_index, int_index,
---
> index, index,
1386c1386
< int_index -length, input_data[int_index -length],
---
> index -length, input_data[index -length],
1390c1390
< if (input_data[locate-length] != input_data[int_index-length]) break;
---
> if (input_data[locate-length] != input_data[index-length]) break;
1394c1394
< lstidx[locate] = int_index;
---
> lstidx[locate] = index;
1397c1397
< if (ENACOM > 2 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 2 && index >= ENAZAC && index <= ENAEND)
1400c1400
< int_index, int_index, locate, -offset, length, repper[locate], replen[locate]);
---
> index, index, locate, -offset, length, repper[locate], replen[locate]);
1422c1422
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND)
1430c1430
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) printf("Skipped\n");
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) printf("Skipped\n");
1436c1436
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) printf("Skipped: Offset %u > MaxOff %u\n", offset, maxoff[comsel]);
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) printf("Skipped: Offset %u > MaxOff %u\n", offset, maxoff[comsel]);
1442c1442
< if (length < buflen[int_index][comsel])
---
> if (length < buflen[index][comsel])
1444c1444
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) printf("Skipped: Length %u < BufLen %u\n", length, buflen[int_index][comsel]);
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) printf("Skipped: Length %u < BufLen %u\n", length, buflen[index][comsel]);
1454c1454
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) printf(" %u", limoff[comsel][seloff]);
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) printf(" %u", limoff[comsel][seloff]);
1461c1461
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) printf(" Skipped: Offset %u > LimOff %u\n", offset, limoff[comsel][seloff - 1]);
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) printf(" Skipped: Offset %u > LimOff %u\n", offset, limoff[comsel][seloff - 1]);
1468c1468
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) printf(" o%u", limoff[comsel][seloff]);
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) printf(" o%u", limoff[comsel][seloff]);
1472c1472
< int bsttax = buftax[int_index][comsel];
---
> int bsttax = buftax[index][comsel];
1484c1484
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) printf(" (%u)%u-%u", cmptax, tstzac, tstend);
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) printf(" (%u)%u-%u", cmptax, tstzac, tstend);
1488c1488
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) printf(" %u(%u)", tstlen, buftax[int_index - tstlen][comsel]);
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) printf(" %u(%u)", tstlen, buftax[index - tstlen][comsel]);
1490c1490
< if (buftax[int_index - tstlen][comsel] < cmptax)
---
> if (buftax[index - tstlen][comsel] < cmptax)
1492c1492
< cmptax = buftax[int_index - tstlen][comsel];
---
> cmptax = buftax[index - tstlen][comsel];
1496c1496
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) putchar('*');
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) putchar('*');
1499c1499
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) putchar(' ');
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) putchar(' ');
1518,1520c1518,1520
< bufoff[int_index][comsel] = offset;
< buflen[int_index][comsel] = bstlen;
< buftax[int_index][comsel] = bsttax;
---
> bufoff[index][comsel] = offset;
> buflen[index][comsel] = bstlen;
> buftax[index][comsel] = bsttax;
1522c1522
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND)
1524c1524
< seloff, bstidx, buflen[int_index][comsel], buftax[int_index][comsel]);
---
> seloff, bstidx, buflen[index][comsel], buftax[index][comsel]);
1529c1529
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND)
1533c1533
< if (ENACPT && int_index >= ENAZAC && int_index <= ENAEND) putchar('\n');
---
> if (ENACPT && index >= ENAZAC && index <= ENAEND) putchar('\n');
1539,1540c1539,1540
< if (ENACOM > 3 && !needed && int_index >= ENAZAC && int_index <= ENAEND)
< printf("%+6d %04X Skip all next hashes (not needed to find next sekvences)\n", int_index, int_index);
---
> if (ENACOM > 3 && !needed && index >= ENAZAC && index <= ENAEND)
> printf("%+6d %04X Skip all next hashes (not needed to find next sekvences)\n", index, index);
1548,1549c1548,1549
< repper[int_index] = best_offset;
< replen[int_index] = best_length + best_offset;
---
> repper[index] = best_offset;
> replen[index] = best_length + best_offset;
1555,1556c1555,1556
< repper[int_index] = repe_period;
< replen[int_index] = repe_length;
---
> repper[index] = repe_period;
> replen[index] = repe_length;
1559c1559
< if (ENACOM > 1 && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENACOM > 1 && index >= ENAZAC && index <= ENAEND)
1561,1562c1561,1562
< unsigned char byte = input_data[int_index];
< printf("%+6d %04X ",int_index, int_index);
---
> unsigned char byte = input_data[index];
> printf("%+6d %04X ",index, index);
1569,1570c1569,1570
< int_index - best_offset, -best_offset, best_length,
< repper[int_index], replen[int_index],cmps);
---
> index - best_offset, -best_offset, best_length,
> repper[index], replen[index],cmps);
1574c1574
< if (ENASUM && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENASUM && index >= ENAZAC && index <= ENAEND)
1581,1583c1581,1583
< printf(" Index: %-5u TotalTax: %-5u ", int_index, buftax[int_index][comsel]);
< if (buflen[int_index][comsel])
< printf("Offset: %-5u Length: %-5u\n", bufoff[int_index][comsel], buflen[int_index][comsel]);
---
> printf(" Index: %-5u TotalTax: %-5u ", index, buftax[index][comsel]);
> if (buflen[index][comsel])
> printf("Offset: %-5u Length: %-5u\n", bufoff[index][comsel], buflen[index][comsel]);
1590,1591c1590,1591
< int_index, bufoff[int_index][SEKNUM], buflen[int_index][SEKNUM],
< buftax[int_index][SEKNUM], buftax[int_index][SEKNUM] - buftax[int_index - 1][SEKNUM]);
---
> index, bufoff[index][SEKNUM], buflen[index][SEKNUM],
> buftax[index][SEKNUM], buftax[index][SEKNUM] - buftax[index - 1][SEKNUM]);
1594c1594
< if (ENACOM > 1 && int_index >= ENAZAC && int_index <= ENAEND) printf("%+6d %04X End of file\n\n",input_size,input_size);
---
> if (ENACOM > 1 && index >= ENAZAC && index <= ENAEND) printf("%+6d %04X End of file\n\n",input_size,input_size);
1610c1610
< for (int_index = input_size - 1; int_index >= begin; int_index--)
---
> for (index = input_size - 1; index >= begin; index--)
1612c1612
< int length = buflen[int_index][comsel];
---
> int length = buflen[index][comsel];
1615,1618c1615,1618
< int offset = bufoff[int_index][comsel];
< int_index -= length - 1;
< buflen[int_index][comsel] = length;
< bufoff[int_index][comsel] = offset;
---
> int offset = bufoff[index][comsel];
> index -= length - 1;
> buflen[index][comsel] = length;
> bufoff[index][comsel] = offset;
1620c1620
< if (ENAREV && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENAREV && index >= ENAZAC && index <= ENAEND)
1622c1622
< int_index, int_index + length - 1, length, offset);
---
> index, index + length - 1, length, offset);
1626,1631c1626,1631
< int idxend = int_index;
< while (int_index >= begin && !buflen[int_index][comsel]) int_index--;
< int len = idxend - int_index;
< int_index++;
< bufoff[int_index][comsel] = 0;
< buflen[int_index][comsel] = len;
---
> int idxend = index;
> while (index >= begin && !buflen[index][comsel]) index--;
> int len = idxend - index;
> index++;
> bufoff[index][comsel] = 0;
> buflen[index][comsel] = len;
1635c1635
< if (ENAREV && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENAREV && index >= ENAZAC && index <= ENAEND)
1637c1637
< int_index, int_index + len - 1, len);
---
> index, index + len - 1, len);
1673c1673
< printf("Work Unp %5u..%-5u Len:%-5u\n", idxzac, idxend - 1, idxend - idxzac);
---
> printf("Work Unp % 5u..%-5u Len:%-5u\n", idxzac, idxend - 1, idxend - idxzac);
1699c1699
< printf("Join Unp %5u..%-5u Len:%-5u + Unp %5u..%-5u Len:%-5u => Unp %5u..%-5u Len:%-5u\n",
---
> printf("Join Unp % 5u..%-5u Len:%-5u + Unp % 5u..%-5u Len:%-5u => Unp % 5u..%-5u Len:%-5u\n",
1729c1729
< printf("Join Unp %5u..%-5u Len:%-5u + Unp %5u..%-5u Len:%-5u => Unp %5u..%-5u Len:%-5u\n",
---
> printf("Join Unp % 5u..%-5u Len:%-5u + Unp % 5u..%-5u Len:%-5u => Unp % 5u..%-5u Len:%-5u\n",
1920c1920
< int_index = 0;
---
> index = 0;
1934c1934
< int_index++;
---
> index++;
1937c1937
< while (int_index < input_size)
---
> while (index < input_size)
1939,1940c1939,1940
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND)
< printf("Data %+6d %04X Packed %+6d %04X ", int_index, int_index, packed_index, packed_index);
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND)
> printf("Data %+6d %04X Packed %+6d %04X ", index, index, packed_index, packed_index);
1942,1943c1942,1943
< int length = buflen[int_index][comsel];
< int offset = bufoff[int_index][comsel];
---
> int length = buflen[index][comsel];
> int offset = bufoff[index][comsel];
1946c1946
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND)
1954c1954
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND)
---
> if (ENAOUT && index >= ENAZAC && index <= ENAEND)
1957c1957
< PutUnpacked(comsel, int_index, length);
---
> PutUnpacked(comsel, index, length);
1960,1961c1960,1961
< int_index += length;
< if (ENAOUT && int_index >= ENAZAC && int_index <= ENAEND) putchar('\n');
---
> index += length;
> if (ENAOUT && index >= ENAZAC && index <= ENAEND) putchar('\n');
1963c1963
< if (ENAOUT) printf("Data %+6d %04X Packed %+6d %04X End mark ", int_index, int_index, packed_index, packed_index);
---
> if (ENAOUT) printf("Data %+6d %04X Packed %+6d %04X End mark ", index, index, packed_index, packed_index);
Udelal jsem tyhle rychle zmeny abych to zkompiloval.
Trosku jsem jeste tapal kdyz me po zbaleni a rozbaleni nesedel vstupni a vystupni soubor.
Pouzil jsem ale prikaz kde jsem oba binarni soubory prohnal prvne pres hex vypis a porovnal az ten a
diff -y <(xxd smaz.bin) <(xxd smaz.dep)
ukazlo to ze mam zacatek souboru prepsany nejakou hlavicku, ale pomohl nejaky parametr a hlavne asm rozbalovac funguje.. Diky Busy!