void print_occ_table (int *table)
{
- int i;
-
PRINTOUT ("Occurence table\n");
- for (i = 0; i < NB_BYTES; i++) {
+ for (int i = 0; i < NB_BYTES; i++) {
if (table[i]) {
PRINTOUT ("0x%02x '%c': %d\n", i, ((i < 32) || (i > 127)) ? '.' : i, table[i]);
}
{
static leaf_t *leafs[NB_BYTES + 1] = {0};
int nb_leafs = 0;
- int i, l;
VERBOSE (DEBUG, PRINTOUT ("start initiliazing forest\n"));
/* count number of leafs */
- for (i = 0; i < NB_BYTES; i++) {
+ for (int i = 0; i < NB_BYTES; i++) {
if (table[i] > 0) {
nb_leafs++;
}
}
/* initialize leafs */
- for (i = 0, l = 0; i < NB_BYTES; i++) {
+ for (int i = 0, l = 0; i < NB_BYTES; i++) {
if (table[i] > 0) {
leafs[l] = getleaf (1);
if (leafs[l] == NULL) {
leaf_t *branch = NULL;
int nb_leafs = 0;
int last = -1;
- int ante;
- int i, j;
VERBOSE (DEBUG, PRINTOUT ("start creating tree\n"));
}
/* create tree */
- for (j = 0; j < nb_leafs - 1; j++) {
+ for (int j = 0; j < nb_leafs - 1; j++) {
/* look for leatest occurence */
last = -1;
- for (i = 0; i < nb_leafs; i++) {
+ for (int i = 0; i < nb_leafs; i++) {
if (leafs[i] == NULL) {
continue;
}
}
/* look for ante leatest occurence */
- ante = -1;
- for (i = 0; i < nb_leafs; i++) {
+ int ante = -1;
+ for (int i = 0; i < nb_leafs; i++) {
if ((i == last) || (leafs[i] == NULL)) {
continue;
}
if ((root->left == NULL) && (root->right == NULL)) {
codcpy ((char *)(table + (int)(root->c)), sizeof (code_t), code);
}
- else {
+ else if ((root->left == NULL) || (root->right == NULL)) {
+ VERBOSE (WARNING, PRINTERR ("incoherent tree\n"));
+ } else {
codcpy (code + index, sizeof (code_t), "1");
explore_tree (table, root->left, code, index + 1);
codcpy (code + index, sizeof (code_t), "0");
void print_code_table (code_t *codes)
{
- char *code;
- int i;
-
PRINTOUT ("Code table\n");
- for (i = 0; i < NB_BYTES; i++) {
- code = (char *)(codes + i);
+ for (int i = 0; i < NB_BYTES; i++) {
+ char *code = (char *)(codes + i);
if (codlen (code) == 0) {
continue;
}
{
static byte_t buffer[NB_BYTES * (NB_BYTES - 1) / 2 / 8 + NB_BYTES + 6] = {0};
char bits[(NB_BYTES - 1) + 8 + 1] = {0};
- char *code;
byte_t *header = buffer;
- int i, j, length, mode;
- int nb = 0;
- int size = 0;
VERBOSE (DEBUG, PRINTOUT ("start encoding header and code table\n"));
/* mode 1 or 2 */
- for (i = 0; i < NB_BYTES; i++) {
- code = (char *)(codes + i);
+ int nb = 0;
+ int size = 0;
+ for (int i = 0; i < NB_BYTES; i++) {
+ char *code = (char *)(codes + i);
if (codlen (code) > 0) {
nb++;
size += codlen (code) * occ[i];
}
}
- mode = (NB_BYTES < 2 * nb + 1) ? 1 : 2;
+ int mode = (NB_BYTES < 2 * nb + 1) ? 1 : 2;
VERBOSE (DEBUG, PRINTOUT ("nb chars: %d\n", nb));
VERBOSE (DEBUG, PRINTOUT ("mode: %d\n", mode));
VERBOSE (DEBUG, PRINTOUT ("size: %d\n", size));
/* size */
switch (mode) {
case 1:
- for (i = 0; i < NB_BYTES; i++) {
- code = (char *)(codes + i);
+ for (int i = 0; i < NB_BYTES; i++) {
+ char *code = (char *)(codes + i);
*(header++) = (byte_t) codlen (code);
}
break;
case 2:
*(header++) = (byte_t)(nb - 1);
- for (i = 0; i < NB_BYTES; i++) {
- code = (char *)(codes + i);
+ for (int i = 0; i < NB_BYTES; i++) {
+ char *code = (char *)(codes + i);
if (codlen (code) > 0) {
*(header++) = (byte_t) i;
*(header++) = (byte_t) codlen (code);
}
/* bits */
- for (i = 0; i < NB_BYTES; i++) {
- code = (char *)(codes + i);
+ for (int i = 0; i < NB_BYTES; i++) {
+ char *code = (char *)(codes + i);
if (codlen (code) > 0) {
codcat (bits, sizeof (code_t), code);
while (codlen (bits) > (8 - 1)) {
- for (j = 0; j < 8; j++) {
+ for (int j = 0; j < 8; j++) {
*header <<= 1;
if (bits[j] == '1') {
(*header)++;
}
}
if (codlen (bits) > 0) {
- for (j = 0; j < (int)codlen (bits); j++) {
+ for (int j = 0; j < (int)codlen (bits); j++) {
*header <<= 1;
if (bits[j] == '1') {
(*header)++;
}
}
- for (j = (int)codlen (bits); j < 8; j++) {
+ for (int j = (int)codlen (bits); j < 8; j++) {
*header <<= 1;
}
header++;
}
/* length */
- length = (int)(header - buffer - 6);
+ int length = (int)(header - buffer - 6);
VERBOSE (DEBUG, PRINTOUT ("lengh: %d %02x %02x\n", length, length >> 8, length & 0xff));
buffer[3] = (byte_t)(length >> 8);
buffer[4] = (byte_t)(length & 0xff);
void print_header (byte_t *header)
{
- int length, i;
-
- length = (header[3] << 8) + header[4];
+ int length = (header[3] << 8) + header[4];
VERBOSE (DEBUG, PRINTOUT ("lengh: %d\n", length));
- for (i = 0; i < length + 6; i++) {
+ for (int i = 0; i < length + 6; i++) {
PRINTOUT ("%02x", header[i]);
}
PRINTOUT ("\n");
byte_t bufin[BUFFER_SIZE] = {0};
byte_t bufout[BUFFER_SIZE] = {0};
char bits[(NB_BYTES - 1) + 8 + 1] = {0};
- int fin, fout;
- int length = 0;
- int i, j, nbread, nbwrite;
- byte_t *pt;
VERBOSE (DEBUG, PRINTOUT ("start writting compressed file\n"));
/* open input file */
- fin = open (input, O_RDONLY|O_RAW);
+ int fin = open (input, O_RDONLY|O_RAW);
if (fin == -1) {
VERBOSE (ERROR, PRINTERR ("can't open file '%s' for reading\n", input));
return 1;
VERBOSE (INFO, PRINTOUT ("file '%s' opened\n", input));
/* open output file */
- fout = open (output, O_WRONLY|O_CREAT|O_RAW, 0700);
+ int fout = open (output, O_WRONLY|O_CREAT|O_RAW, 0700);
if (fout == -1) {
VERBOSE (ERROR, PRINTERR ("can't open file '%s' for writing\n", output));
close (fin);
VERBOSE (INFO, PRINTOUT ("file '%s' opened\n", output));
/* write header */
- length = (header[3] << 8) + header[4];
+ int length = (header[3] << 8) + header[4];
VERBOSE (DEBUG, PRINTOUT ("lengh: %d\n", length));
- nbwrite = write (fout, header, length + 6);
+ int nbwrite = write (fout, header, length + 6);
if (nbwrite != length + 6) {
VERBOSE (ERROR, PRINTERR ("can't write %d bytes in file '%s'\n", length + 6 - nbwrite, output));
close (fout);
/* write file */
- pt = bufout;
+ byte_t *pt = bufout;
+ int nbread;
while ((nbread = read (fin, bufin, BUFFER_SIZE)) > 0) {
VERBOSE (DEBUG, PRINTOUT ("nbread: %d\n", nbread));
- for (i = 0; i < nbread; i++) {
+ for (int i = 0; i < nbread; i++) {
codcat (bits, sizeof (code_t), (char *)(codes + bufin[i]));
while (codlen (bits) > (8 - 1)) {
- for (j = 0; j < 8; j++) {
+ for (int j = 0; j < 8; j++) {
*pt <<= 1;
if (bits[j] == '1') {
(*pt)++;
}
VERBOSE (DEBUG, PRINTOUT ("lastest bits : %d\n", codlen (bits)));
if (codlen (bits) > 0) {
- for (j = 0; j < (int)codlen (bits); j++) {
+ for (int j = 0; j < (int)codlen (bits); j++) {
*pt <<= 1;
if (bits[j] == '1') {
(*pt)++;
}
}
- for (j = (int)codlen (bits); j < 8; j++) {
+ for (int j = (int)codlen (bits); j < 8; j++) {
*pt <<= 1;
}
pt++;
code_t *read_header (char *filename) {
static code_t table[NB_BYTES] = {0};
byte_t buffer[NB_BYTES * (NB_BYTES - 1) / 2 / 8 + NB_BYTES + 6] = {0};
- byte_t *codes = NULL;
- byte_t cur;
int lengths[NB_BYTES] = {0};
- int fid;
- int mode = 0;
- int i, j, l, nb, size;
VERBOSE (DEBUG, PRINTOUT ("start reading header\n"));
/* open file */
- fid = open (filename, O_RDONLY|O_RAW);
+ int fid = open (filename, O_RDONLY|O_RAW);
if (fid == -1) {
VERBOSE (ERROR, PRINTERR ("can't open file '%s'\n", filename));
return NULL;
VERBOSE (INFO, PRINTOUT ("file '%s' opened\n", filename));
/* read magic number */
- nb = read (fid, buffer, 6);
+ int mode = 0;
+ int nb = read (fid, buffer, 6);
+ int size = 0;
VERBOSE (DEBUG, PRINTOUT ("nb, buffer: %d 0x%02x 0x%02x\n", nb, buffer[0], buffer[1]));
if ((nb == 6) && (buffer[0] == 'M') && (buffer[2] == 'Z')) {
mode = (buffer[1] == '1') ? 1 : (buffer[1] == '2') ? 2 : 0;
}
/* analyse header */
- codes = buffer;
+ byte_t *codes = buffer;
switch (mode) {
case 1:
- for (i = 0; i < NB_BYTES; i++) {
+ for (int i = 0; i < NB_BYTES; i++) {
lengths[i] = *(codes++);
}
break;
case 2:
nb = *(codes++) + 1;
VERBOSE (DEBUG, PRINTOUT ("nb codes: %d\n", nb));
- for (i = 0; i < nb; i++) {
- j = *(codes++);
+ for (int i = 0; i < nb; i++) {
+ int j = *(codes++);
lengths[j] = *(codes++);
}
break;
}
- VERBOSE (DEBUG, for (i = 0; i < NB_BYTES; i++) if (lengths[i]) PRINTOUT ("%d: %d\n", i, lengths[i]));
+ VERBOSE (DEBUG, for (int i = 0; i < NB_BYTES; i++) if (lengths[i]) PRINTOUT ("%d: %d\n", i, lengths[i]));
/* check lengths */
- for (i = 0, l = 0; i < NB_BYTES; i++) {
+ int l = 0;
+ for (int i = 0; i < NB_BYTES; i++) {
l += lengths[i];
}
if (((mode == 1) && (size - 256 != (l + 7) / 8)) ||
}
/* decode code */
- cur = *(codes++);
+ byte_t cur = *(codes++);
l = 8;
- for (i = 0; i < NB_BYTES; i++) {
+ for (int i = 0; i < NB_BYTES; i++) {
if (lengths[i] == 0) {
continue;
}
byte_t bufout[BUFFER_SIZE] = {0};
byte_t bufhea[MAX(NB_BYTES * (NB_BYTES - 1) / 2 / 8 + NB_BYTES + 6, BUFFER_SIZE)] = {0};
char bits[(NB_BYTES - 1) + 1] = {0};
- int fin, fout;
- int i, j, k, nb, size, nbwrite, rem;
- int is_found;
- int l = 0;
- byte_t *pt;
VERBOSE (DEBUG, PRINTOUT ("start writing decompressed file\n"));
/* open file for reading */
- fin = open (input, O_RDONLY|O_RAW);
+ int fin = open (input, O_RDONLY|O_RAW);
if (fin == -1) {
VERBOSE (ERROR, PRINTERR ("can't open file '%s' for reading\n", input));
return 1;
VERBOSE (INFO, PRINTOUT ("file '%s' opened\n", input));
/* read magic number */
- nb = read (fin, bufhea, 6);
+ int nb = read (fin, bufhea, 6);
if (nb != 6) {
VERBOSE (ERROR, PRINTERR ("can't read file\n"));
close (fin);
return 1;
}
- size = (bufhea[3] << 8) + bufhea[4];
+ int size = (bufhea[3] << 8) + bufhea[4];
VERBOSE (DEBUG, PRINTOUT ("table size: %d\n", size));
- rem = bufhea[5];
+ int rem = bufhea[5];
VERBOSE (DEBUG, PRINTOUT ("remainder: %d\n", rem));
nb = read (fin, bufhea, size);
if (nb != size) {
}
/* open file for writing */
- fout = open (output, O_WRONLY|O_CREAT|O_RAW, 0700);
+ int fout = open (output, O_WRONLY|O_CREAT|O_RAW, 0700);
if (fout == -1) {
VERBOSE (ERROR, PRINTERR ("can't open file '%s' for writing\n", output));
close (fin);
VERBOSE (INFO, PRINTOUT ("file '%s' opened\n", output));
/* write file */
- pt = bufout;
+ int l = 0;
+ int nbwrite = 0;
+ byte_t *pt = bufout;
while ((nb = read (fin, bufin, BUFFER_SIZE)) > 0) {
VERBOSE (DEBUG, PRINTOUT ("nbread: %d\n", nb));
- for (i = 0; i < nb; i++) {
- for (j = 0; j < 8; j++) {
+ for (int i = 0; i < nb; i++) {
+ for (int j = 0; j < 8; j++) {
codcat (bits, sizeof (bits), ((bufin[i] & 0x80) == 0) ? "0" : "1");
bufin[i] <<= 1;
l++;
VERBOSE (DEBUG, PRINTOUT ("bits: %d - %s\n", codlen (bits), bits));
/* look for correct code */
- is_found = 0;
- for (k = 0; (k < NB_BYTES) && (!is_found); k++) {
+ int is_found = 0;
+ for (int k = 0; (k < NB_BYTES) && (!is_found); k++) {
if (codcmp ((char *)(codes + k), bits) == 0) {
is_found = 1;
VERBOSE (DEBUG, PRINTOUT ("found: %d\n", k));