Buscar

Arvore de Huffman Em C - (palavras), Compacta/Descompacta arquivo texto com arvore de Huffman

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

LSMHuffman/.dep.inc
# This code depends on make tool being used
DEPFILES=$(wildcard $(addsuffix .d, ${OBJECTFILES}))
ifneq (${DEPFILES},)
include ${DEPFILES}
endif
LSMHuffman/Forms.h
/* 
 * File: Forms.h
 * Author: joao
 *
 * Created on 13 de Maio de 2016, 14:43
 */
#ifndef FORMS_H
#define	FORMS_H
#include"boxCurses.h"
#ifdef	__cplusplus
extern "C" {
#endif
 void telaPrincipal();
 void formArq();
 void infoFile(char fileName[],char cpFlag);
 /*------------------------------------------------------------------------*/
 void telaPrincipal() {
 char menu[8][56];
 int cont = 2;
 strcpy(menu[0], "*** Large Shit Maker Huffman File Compressor v.2.0 ***");
 strcpy(menu[1], "Main Menu");
 strcpy(menu[2], "Select File ");
 strcpy(menu[3], "Compress File ");
 strcpy(menu[4], "Restore File File");
 strcpy(menu[5], "Exit");
 strcpy(menu[6], "*** Copyleft (c) 2016 v2.0 By Joao Andre ***");
 int linha, coluna;
 getmaxyx(stdscr, linha, coluna);
 attron(COLOR_PAIR((1)));
 spc(coluna, 1);
 spc(coluna, 1);
 attron(COLOR_PAIR((7)));
 for (int i = 3; i < linha; i++) {
 spc(coluna, 1);
 }
 attron(COLOR_PAIR((1)));
 move(4, 3);
 spc(coluna - 8, 1);
 attron(COLOR_PAIR((9)));
 for (int i = 5; i < linha - 3; i++) {
 move(i, 3);
 spc(coluna - 8, 2);
 }
 attroff(A_BOLD);
 move(8, 36);
 attron(COLOR_PAIR((1)));
 spc(36, 2);
 attron(COLOR_PAIR((3)));
 for (int i = 9; i < 19; i++) {
 move(i, 36);
 spc(36, 2);
 }
 attron(COLOR_PAIR((1)));
 attron(A_BOLD);
 displayMsgCenter(0, menu[0]);
 displayMsgCenter(4, menu[1]);
 attroff(A_BOLD);
 for (int i = 8; i < 20; i += 3) {
 attron(COLOR_PAIR((1)));
 move(i, 5);
 spc(25, 1);
 move(i, 6);
 attron(A_BOLD);
 printw("%s", menu[cont++]);
 attroff(A_BOLD);
 attron(COLOR_PAIR((17)));
 move(i + 1, 6);
 spc(25, 1);
 move(i, 30);
 spc(1, 0);
 }
 attron(COLOR_PAIR((12)));
 move(8, 7);
 attron(A_BOLD);
 printw("%c", 'e');
 move(11, 9);
 printw("%c", 'p');
 move(14, 6);
 printw("%c", 'R');
 move(17, 7);
 printw("%c", 'x');
 attroff(A_BOLD);
 move(linha - 1, 0);
 attron(COLOR_PAIR((1)));
 spc(coluna, 1);
 attron(A_BOLD);
 displayMsgCenter(linha - 1, menu[6]);
 refresh();
 }
 void formArq() {
 char menu[8][56];
 int cont = 2;
 strcpy(menu[0], "*** Large Shit Maker Huffman File Compressor v.2.0 ***");
 strcpy(menu[1], "*** Copyleft (c) 2016 v2.0 By Joao Andre ***");
 int linha, coluna;
 getmaxyx(stdscr, linha, coluna);
 attron(COLOR_PAIR((1)));
 spc(coluna, 1);
 spc(coluna, 1);
 attron(COLOR_PAIR((7)));
 for (int i = 3; i < linha; i++) {
 spc(coluna, 1);
 }
 attron(COLOR_PAIR((1)));
 move(4, 3);
 spc(coluna - 8, 1);
 attron(COLOR_PAIR((9)));
 for (int i = 5; i < linha - 3; i++) {
 move(i, 3);
 spc(coluna - 8, 2);
 }
 attron(COLOR_PAIR((1)));
 move(linha - 1, 0);
 spc(coluna, 1);
 attroff(A_BOLD);
 attron(A_BOLD);
 displayMsgCenter(0, menu[0]);
 displayMsgCenter(linha - 1, menu[1]);
 attroff(A_BOLD);
 refresh();
 }
 void infoFile(char fileName[], char cpFlag) {
 FILE *arquivo = fopen(fileName, "rb");
 FILE *cpFile;
 char unidade[3],fileAux[25];
 int len = 0, lenCp = 0;
 strcpy(unidade, "Bytes");
 strcpy(fileAux,fileName);
 fseek(arquivo, 0, 2);
 len = ftell(arquivo);
 if (len > 1024) {
 len = len / 1024;
 strcpy(unidade, "KB");
 }
 if (cpFlag) {
 strcpy(unidade, "Bytes");
 strcat(fileName, ".PAC");
 cpFile = fopen(fileName, "rb");
 fseek(cpFile, 0, 2);
 lenCp = ftell(cpFile);
 if (lenCp > 1024) {
 lenCp = lenCp / 1024;
 strcpy(unidade, "KB");
 fclose(cpFile);
 }
 }
 fclose(arquivo);
 move(10, 36);
 attron(COLOR_PAIR((14)));
 attron(A_BOLD);
 printw("File:[%s]", fileAux);
 move(11, 36);
 printw("File Size:[%d] %s", len, unidade);
 if (cpFlag) {
 move(12, 36);
 printw("Compress File:[%s]", fileName);
 move(13, 36);
 printw("Compress File Size:[%d] %s", lenCp, unidade);
 move(14, 36);
 printw("Compress Rate:[%d] %s", len-lenCp, unidade);
 
 }
 attroff(A_BOLD);
 }
#ifdef	__cplusplus
}
#endif
#endif	/* FORMS_H */
LSMHuffman/Huffman.h
/* 
 * File: Huffman.h
 * Author: joao
 *
 * Created on 9 de Maio de 2016, 15:22
 */
#ifndef HUFFMAN_H
#define	HUFFMAN_H
#define TF 47
#include<string.h>
#ifdef	__cplusplus
extern "C" {
#endif
 /*Estrutura de dados------------------------------------------------------------
 * char[] - Palavra para a ser codificada
 * int - Frequencia da palavra no texto a ser codificado
 * *HuffNode - ponteiros para os nós filhos
 */
 struct HuffNode {
 char str[TF];
 double Fi;
 struct HuffNode *dir, *esq;
 };
 typedef struct HuffNode No;
 //------------------------------------------------------------------------------
 No* criaNo(char word[], double Fi);
 int isLeaf(No *no);
 char isEqual(No *xNo, No *yNo);
 void showTree(No *raiz, int y, int x, int dist);
 void init(No **raiz);
 //------------------------------------------------------------------------------
 /*retorna um novo no para arvore de huffman
 No* criaNo(char[],int)
 * @param word - string a ser codificada
 * @param Fi - Frequencia da string no texto a ser codificado
 * Retorna um ponteiro para um novo no contendo a strin e sua frequencia.
 */
 No* criaNo(char word[], double Fi) {
 No *novo = (No*) malloc(sizeof (No));
 strcpy(novo->str, word);
 novo->Fi = Fi;
 novo->dir = novo->esq = NULL;
 return novo;
 }
 //------------------------------------------------------------------------------
 /*Retorna true (1) se o parametro for uma folha
 char isLeaf(No*)
 * @param no - ponteiro para o no a ser comparado
 * Retorna true (1) se o parametro no for um no do tipo folha.
 */
 int isLeaf(No *no) {
 return (no->dir == NULL && no->esq == NULL);
 }
 //------------------------------------------------------------------------------
 /*Inicializa a raiz da arvore de huffman
 void init(No**)
 * @param raiz - ponteiro para raiz da arvore a ser inicializada
 */
 void init(No **raiz) {
 (*raiz) = NULL;
 }
 //------------------------------------------------------------------------------
 /*Compara dois ponteiros do tipo No* e reo=torna true se x==y
 char isEqual(No*, No*)
 * @param xNo - ponteiro para o no x a ser comparado
 * @param yNo - ponteiro para o no y a ser comparado
 * Retorna true (1) se o parametro x == y .
 */
 char isEqual(No *xNo, No *yNo) {
 return (strcmp(xNo->str, yNo->str) == 0 && xNo->Fi == yNo->Fi);
 }
 //------------------------------------------------------------------------------
void showTree(No *raiz, int y, int x, int dist) {
 if (raiz != NULL) {
 move(y, x);
 attron(COLOR_PAIR((23)));
 (raiz->str[0] == '*') ? printw("%.2f", raiz->Fi) : printw("%s", raiz->str);
 if (raiz->esq != NULL) {
 move(y + 1, x - dist / 2);
 printw("/");
 }
 if (raiz->dir != NULL) {
 move(y + 1, x + dist / 2);
 printw("\\");
 }
 showTree(raiz->esq, y + 2, x - dist, dist / 2);
 showTree(raiz->dir, y + 2, x + dist, dist / 2);
 }
 refresh();
 }
 /*------------------------------------------------------------------------*/
 /* DTMV (Dont move The Fucking Tuttle) 
 * void simbol(char [])
 * @param codigo - str a ser copiada para ela mesma
 */
 void simbol(char codigo[]) {
 char aux[21];
 int cont = 0;
 while (codigo[cont + 1] != '\0') {
 aux[cont] = codigo[cont];
 cont++;
 }
 aux[cont] = '\0';
 strcpy(codigo, aux);
 }
 /*------------------------------------------------------------------------*/
 /* Confirma se uma codigo contido em um str é uma folha 
 * na arvore de Huffman e caso positivo retorna a palavra contida na folha
 * void strToHuffman(No *, char [], char [], char [], char *)
 * @param raiz - raiz da arvore de huffman
 * @param chave - str com a chave a ser codificada
 * @param codigo str com o codigo de huffman equivalente a chave
 * @param vetor auxiliar para funcao (tf deve ser igual a codigo)
 * @param flag -flag interno da funcao inicialmente deve ser atribuido '0'
 */
 void strToHuffman(No *raiz, char chave[], char codigo[], char aux[], char *flag) {
 if (raiz != NULL) {
 if (isLeaf(raiz) && strcmp(chave, raiz->str) != 0) {
 } else if (!isLeaf(raiz)) {
 strcat(aux, "0");
 strToHuffman(raiz->esq, chave, codigo, aux, *&flag);
 simbol(aux);//DTMV
 strcat(aux, "1");
 strToHuffman(raiz->dir, chave, codigo, aux, *&flag);
 simbol(aux);//DTMV
 } else {
 if (*flag == '0') {
 strcpy(codigo, aux);
 *flag = '1';
 }
 }
 }
 }
 /*------------------------------------------------------------------------*/
 char huffmanTostr(No *raiz, char chave[], char str[]) {
 int i = 0;
 char flag = 0;
 while (raiz != NULL && chave[i] != '\0') {
 if (chave[i] == '0')
 raiz = raiz->esq;
 else
 raiz = raiz->dir;
 i++;
 }
 }
 /*------------------------------------------------------------------------*/
 /* Confirma se uma codigo contido em um str é uma folha 
 * na arvore de Huffman e caso positivo retorna a palavra contida na folha
 * char codigoEfolha(No*, char[], int, char[TF])
 * @param aux - raiz da arvore de huffman
 * @param code - str com o codigo binario
 * @param tl tamamnho logico do vetor code
 * @param palavra vetor para a palava contida na folha
 * retorna 0 ou 1 caso o codigo seja uma folha
 */
 int codigoEfolha(No *aux, char code[], int tl, char palavra[TF]) {
 char flag = 0;
 int cont = 0, st = 0;
 while (!flag&& cont<=tl) {
 if (aux->dir == NULL && aux->esq == NULL) {
 strcpy(palavra, aux->str);
 flag = 1;
 } else {
 if (code[cont] == '0')
 aux = aux->esq;
 else
 aux = aux->dir;
 }
 cont++;
 }
 return flag;
 }
 /*------------------------------------------------------------------------*/
#ifdef	__cplusplus
}
#endif
#endif	/* HUFFMAN_H */
LSMHuffman/HuffmanUtil.h
/* 
 * File: HuffmanUtil.h
 * Author: joao
 *
 * Created on 9 de Maio de 2016, 19:13
 */
#ifndef HUFFMANUTIL_H
#define	HUFFMANUTIL_H
#include "Huffman.h"
#include "NodeList.h"
#ifdef	__cplusplus
extern "C" {
#endif
 void fileTolist(char fileName[], list **l);
 char extrairPontuacao(char linha[], char palavra[], char ponto[]);
 void montarArvore(list *l, No **huffmanTree);
 void splitLine(char line[], char tokens[], char auxStr[10][TF], int *tl);
 void compactarArquivo(char nomeArq[], No *raiz);
 void recuperaNome(char nomeArq[], char nomeTabela[]);
 int getFileLenth(char fileName[]);
 /*------------------------------------------------------------------------*/
 /*Cria uma lista de Nos de huffman com as palavras do arquivo ordenadas pela sua Fi
 fileTolist(char[],list **)
 * @param fileName - nome do arquivo texto a ser lido
 * @param l - ponteiro para lista de nos 
 */
 void fileTolist(char fileName[], list **l) {
 char auxStr[TF], palavra[TF], ponto[2]; //auxiliar para palavra lida
 FILE *arquivo = fopen(fileName, "r"); //abrindo arquivo
 while (fscanf(arquivo, "%s", &auxStr) == 1) {//le o arquivo palavra a palavra
 if (extrairPontuacao(auxStr, palavra, ponto)) {
 if (!addFi(&(*l), palavra)) {
 enqueue(&(*l), criaNo(palavra, 1));
 }
 if (!addFi(&(*l), ponto)) {
 enqueue(&(*l), criaNo(ponto, 1));
 }
 } else {
 if (!addFi(&(*l), auxStr)) {
 enqueue(&(*l), criaNo(auxStr, 1));
 }
 }
 }
 fclose(arquivo);
 normalizaFi(&(*l));
 selecaoDireta(&(*l)); //Ordena a fila por Fi
 }
 /*------------------------------------------------------------------------*/
 void compactarArquivo(char nomeArq[], No *raiz) {
 char linha[TF], palavra[TF], ponto[2], codigo[21], aux[21], nnome[21], flag = '0';
 strcpy(nnome, nomeArq);
 strcat(nnome, ".PAC");
 FILE *arquivo = fopen(nnome, "wb+");
 FILE *fonte = fopen(nomeArq, "r");
 strcpy(codigo, "");
 strcpy(ponto, "");
 while (fscanf(fonte, "%s", &linha) == 1) {//le o arquivo palavra a palavra
 if (extrairPontuacao(linha, palavra, ponto)) {
 strToHuffman(raiz, palavra, codigo, aux, &flag);
 fputs(codigo, arquivo);
 /*----------------*/
 flag = '0';
 strcpy(codigo, "");
 strcpy(aux, "");
 /*----------------*/
 strToHuffman(raiz, ponto, codigo, aux, &flag);
 fputs(codigo, arquivo);
 } else {
 strToHuffman(raiz, linha, codigo, aux, &flag);
 fputs(codigo, arquivo);
 }
 /*----------------*/
 flag = '0';
 strcpy(codigo, "");
 strcpy(aux, "");
 /*----------------*/
 }
 fclose(fonte);
 fclose(arquivo);
 }
 /*------------------------------------------------------------------------*/
 void descompactarArquivo(char nomeArq[]) {
 int cont = 0, pos = 0, fileLen = getFileLenth(nomeArq);
 char nomeTabela[strlen(nomeArq) + 5], codigo[fileLen + 1], auxCod[16], palavra[TF], fl = '0', pte[TF], auxpte[TF];
 recuperaNome(nomeArq, nomeTabela);
 FILE *arquivoCom = fopen(nomeArq, "r");
 FILE *arquivoOri = fopen(nomeTabela, "wb");
 No *raiz = NULL;
 list *lista = NULL;
 strcpy(auxCod, "");
 strcpy(palavra, "");
 /*Recuperando tabela de Frequencias do arquivo*/
 strcat(nomeTabela, ".tab");
 recuperaLista(nomeTabela, &lista);
 selecaoDireta(&lista);
/*Montando arvore de Huffman*/
 montarArvore(lista, &raiz);
 showTree(raiz, 5, 36, 19);
 /*Obtendo codificação de huffman do arquivo compactado*/
 fread(codigo, fileLen, 1, arquivoCom);
 codigo[fileLen] = '\0';
 move(20, 3);
 printw("Codigo de huffman:[<%s>]", codigo);
 fclose(arquivoCom);
 /*Decodificando sequencia binaria e restaurando arquivo Original*/
 while (pos < fileLen) {
 auxCod[cont++] = codigo[pos];
 auxCod[cont] = '\0';
 if (codigoEfolha(raiz, auxCod, cont, palavra)) {
 strcat(palavra, " ");
 fputs(palavra, arquivoOri);
 strcpy(auxCod, "");
 strcpy(palavra, "");
 cont = 0;
 }
 pos++;
 }
 fclose(arquivoOri);
 pos = getch();
 }
 /*------------------------------------------------------------------------*/
 /*Monta a arvore de Huffman a partir da fila de frequencias ordenadas
 fileTolist(char[],list **)
 * @param fileName - nome do arquivo texto a ser lido
 * @param l - ponteiro para fila de nos ordenados
 */
 void montarArvore(list *l, No **huffmanTree) {
 list *tempList = l; //Lista temporaria
 No *newRoot = NULL; // no auxiliar
 while (tempList->prox != NULL) {
 newRoot = criaNo("*", tempList->info->Fi + tempList->prox->info->Fi); //soma das duas menores Fi
 deEnqueue(&tempList, &newRoot->esq); //Menor a esq
 deEnqueue(&tempList, &newRoot->dir); //Maior a dir
 enqueue(&tempList, newRoot); //insere o novo no na fila
 selecaoDireta(&tempList); //reordena a fila por Fi
 }
 deEnqueue(&tempList, &(*huffmanTree)); //Ultimo nó da fila resultante é a prorpia arvore de huffman
 }
 /*------------------------------------------------------------------------*/
 char extrairPontuacao(char linha[], char palavra[], char ponto[]) {
 int tam = strlen(linha), i = 0, k = 0;
 char auxStr[tam], auxP[2], pont[7], flag = 0;
 strcpy(pont, ".,;?!:");
 while (!flag && k < 6) {
 if (linha[tam - 1] == pont[k]) {
 flag = 1;
 }
 k++;
 }
 if (flag) {
 while (i < tam - 1) {
 auxStr[i] = linha[i];
 i++;
 }
 auxStr[i] = '\0';
 auxP[0] = pont[k - 1];
 auxP[1] = '\0';
 strcpy(palavra, auxStr);
 strcpy(ponto, auxP);
 }
 return flag;
 }
 /*------------------------------------------------------------------------*/
 void recuperaNome(char nomeArq[], char nomeTabela[]) {
 int len = strlen(nomeArq), i = 0;
 while (i < len - 4) {
 nomeTabela[i] = nomeArq[i];
 i++;
 }
 nomeTabela[i] = '\0';
 }
 /*------------------------------------------------------------------------*/
 int getFileLenth(char fileName[]) {
 FILE *arquivo = fopen(fileName, "rb");
 int tam;
 fseek(arquivo, 0, 2);
 tam = ftell(arquivo);
 fclose(arquivo);
 return tam;
 }
 /*------------------------------------------------------------------------*/
#ifdef	__cplusplus
}
#endif
#endif	/* HUFFMANUTIL_H */
LSMHuffman/Makefile
#
# There exist several targets which are by default empty and which can be 
# used for execution of your targets. These targets are usually executed 
# before and after some main targets. They are: 
#
# .build-pre: called before 'build' target
# .build-post: called after 'build' target
# .clean-pre: called before 'clean' target
# .clean-post: called after 'clean' target
# .clobber-pre: called before 'clobber' target
# .clobber-post: called after 'clobber' target
# .all-pre: called before 'all' target
# .all-post: called after 'all' target
# .help-pre: called before 'help' target
# .help-post: called after 'help' target
#
# Targets beginning with '.' are not intended to be called on their own.
#
# Main targets can be executed directly, and they are:
# 
# build build a specific configuration
# clean remove built files from a configuration
# clobber remove all built files
# all build all configurations
# help print help mesage
# 
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
# .help-impl are implemented in nbproject/makefile-impl.mk.
#
# Available make variables:
#
# CND_BASEDIR base directory for relative paths
# CND_DISTDIR default top distribution directory (build artifacts)
# CND_BUILDDIR default top build directory (object files, ...)
# CONF name of current configuration
# CND_PLATFORM_${CONF} platform name (current configuration)
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
#
# NOCDDL
# Environment 
MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
# build
build: .build-post
.build-pre:
# Add your pre 'build' code here...
.build-post: .build-impl
# Add your post 'build' code here...
# clean
clean: .clean-post
.clean-pre:
# Add your pre 'clean' code here...
.clean-post: .clean-impl
# Add your post 'clean' code here...
# clobber
clobber: .clobber-post
.clobber-pre:
# Add your pre 'clobber' code here...
.clobber-post: .clobber-impl
# Add your post 'clobber' code here...
# all
all: .all-post
.all-pre:
# Add your pre 'all' code here...
.all-post: .all-impl
# Add your post 'all' code here...
# build tests
build-tests: .build-tests-post
.build-tests-pre:
# Add your pre 'build-tests' code here...
.build-tests-post: .build-tests-impl
# Add your post 'build-tests' code here...
# run tests
test: .test-post
.test-pre: build-tests
# Add your pre 'test' code here...
.test-post: .test-impl
# Add your post 'test' code here...
# help
help: .help-post
.help-pre:
# Add your pre 'help' code here...
.help-post: .help-impl
# Add your post 'help' code here...
# include project implementation makefile
include nbproject/Makefile-impl.mk
# include project make variables
include nbproject/Makefile-variables.mk
LSMHuffman/NodeList.h
/* 
 * File: NodeList.h
 * Author: joao
 *
 * Created on 9 de Maio de 2016, 15:51
 */
#ifndef NODELIST_H
#define	NODELIST_H
#include"Huffman.h"
#include "HuffmanUtil.h"
#ifdef	__cplusplus
extern "C" {
#endif
 //------------------------------------------------------------------------------
 struct ListNo {
 No *info;
 struct ListNo *prox;
 };
 typedef struct ListNo list;
 //-----------------------------------------------------------------------------
 void deEnqueue(list **llist, No **node);
 void enqueue(list **ll, No *info);
 void exibeLista(list *ll);
 void selecaoDireta(list **l);
 void normalizaFi(list **l);
 void gravaLista(char fileName[], list *l);
 char addFi(list **l, char str[]);
 int getLenght(list *l);
 double contaPalavras(list *l);
 list* criaCaixa(No *info);
 void splitLine(char line[],
char tokens[], char auxStr[2][TF], int *tl);
 //-----------------------------------------------------------------------------
 list* criaCaixa(No *info) {
 list *nc = (list*) malloc(sizeof (list));
 nc->info = info;
 nc->prox = NULL;
 return nc;
 }
 //-----------------------------------------------------------------------------
 void exibeLista(list *ll) {
 while (ll != NULL) {
 printw("[%s] - Fi[%.2f]\n", ll->info->str, ll->info->Fi);
 ll = ll->prox;
 }
 refresh();
 }
 //-----------------------------------------------------------------------------
 void enqueue(list **ll, No *info) {
 list *aux, *nc;
 if (*ll == NULL) {
 *ll = criaCaixa(info);
 } else {
 aux = *ll;
 nc = criaCaixa(info);
 while (aux->prox != NULL) {
 aux = aux->prox;
 }
 aux->prox = nc;
 }
 }
 //-----------------------------------------------------------------------------
 char addFi(list **l, char str[]) {
 list *aux = *l;
 while (aux != NULL && strcmp(aux->info->str, str) != 0) {
 aux = aux->prox;
 }
 if (aux != NULL && strcmp(aux->info->str, str) == 0) {
 aux->info->Fi += 1;
 }
 return (aux != NULL);
 }
 //-----------------------------------------------------------------------------
 int getLenght(list *l) {
 int cont = 0;
 while (l != NULL) {
 cont++;
 l = l->prox;
 }
 return cont;
 }
 //-----------------------------------------------------------------------------
 void selecaoDireta(list **l) {
 list *i = *l, *j = NULL;
 No *menor = NULL;
 while (i->prox != NULL) {
 menor = i->info;
 j = i->prox;
 while (j != NULL) {
 if (j->info->Fi < menor->Fi) {
 menor = j->info;
 j->info = i->info;
 i->info = menor;
 }
 j = j->prox;
 }
 i = i->prox;
 }
 }
 //-----------------------------------------------------------------------------
 void deEnqueue(list **llist, No **node) {
 list *ant = NULL;
 if ((*llist) != NULL) {
 (*node) = (*llist)->info;
 ant = (*llist);
 (*llist) = (*llist)->prox;
 free(ant);
 } else
 (*node) = NULL;
 }
 //----------------------------------------------------------------------------------------------------------------------------------------------
 void normalizaFi(list **l) {
 list *aux = *l;
 double normFi = 0, nPalavras = contaPalavras(aux);
 while (aux != NULL) {
 aux->info->Fi = ((aux->info->Fi * 100) / nPalavras) / 100;
 aux = aux->prox;
 }
 }
 //----------------------------------------------------------------------------------------------------------------------------------------------
 double contaPalavras(list *l) {
 double nPalavras = 0;
 while (l != NULL) {
 nPalavras += l->info->Fi;
 l = l->prox;
 }
 return nPalavras;
 }
 //----------------------------------------------------------------------------------------------------------------------------------------------
 void gravaLista(char fileName[], list *l) {
 FILE *arquivo = fopen(fileName, "wb+");
 while (l != NULL) {
 fprintf(arquivo, "%s;%.2f\n", l->info->str, l->info->Fi);
 l = l->prox;
 }
 fclose(arquivo);
 }
 //-----------------------------------------------------------------------------
 void recuperaLista(char fileName[], list **l) {
 FILE *arquivo = fopen(fileName, "r");
 char auxStr[2][TF], palavra[TF];
 double Fi;
 int tl = 0;
 fscanf(arquivo, "%s;%f\n", palavra, &Fi);
 splitLine(palavra, ";", auxStr, &tl);
 strcpy(palavra, auxStr[0]);
 Fi = atof(auxStr[1]);
 while (!feof(arquivo)) {
 enqueue(&(*l), criaNo(palavra, Fi));
 fscanf(arquivo, "%s;%f\n", palavra, &Fi);
 splitLine(palavra, ";", auxStr, &tl);
 strcpy(palavra, auxStr[0]);
 Fi = atof(auxStr[1]);
 }
 fclose(arquivo);
 }
 void splitLine(char line[], char tokens[], char auxStr[2][TF], int *tl) {
 char *lineAux, *strBroke;
 int cont = 0;
 lineAux = line;
 strBroke = strtok(lineAux, tokens);
 while (strBroke != NULL) {
 strcpy(auxStr[cont++], strBroke);
 strBroke = strtok(NULL, tokens);
 }
 *tl = cont;
 }
#ifdef	__cplusplus
}
#endif
#endif	/* NODELIST_H */
LSMHuffman/balada.txt
eu já lavei o meu carro, regulei o som
já tá tudo preparado, vem que o reggae é bom
menina fica à vontade, entre e faça a festa
me liga mais tarde, vou adorar, vamos nessa
gata, me liga, mais tarde tem balada
quero curtir com você na madrugada
dançar, pular até o Sol raiar
gata, me liga, mais tarde tem balada
quero curtir com você na madrugada
dançar, pular que hoje vai rolar
tchê tchererê tchê tchê
tchererê tchê tchê
tchererê tchê tchê
tchereretchê
tchê, tchê, tchê
Gusttavo Lima e você
tchê tchererê tchê tchê
tchererê tchê tchê
tchererê tchê tchê
tchereretchê
tchê, tchê, tchê
Gusttavo Lima e você
se você me olhar, vou querer te pegar
e depois namorar, curtição
que hoje vai rolar
gata, me liga, mais tarde tem balada
quero curtir com você na madrugada
dançar, pular até o Sol raiar
gata, me liga, mais tarde tem balada
quero curtir com você na madrugada
dançar, pular que hoje vai rolar
tchê tchererê tchê tchê
tchererê tchê tchê
tchererê tchê tchê
tchereretchê
tchê, tchê, tchê,
Gusttavo Lima e você
tchê tchererê tchê tchê
tchererê tchê tchê
tchererê tchê tchê
tchereretchê
tchê, tchê, tchê
Gusttavo Lima e você
gata, me liga, mais tarde tem balada
quero curtir com você na madrugada
dançar, pular que hoje vai rolar
gata, me liga, mais tarde tem balada
quero curtir com você na madrugada
dançar, pular que hoje vai rolar
tem Gusttavo Lima até de madrugada
tchê tchererê tchê tchê
tchererê tchê tchê
tchererê tchê tchê
tchereretchê
tchê, tchê, tchê
Gusttavo Lima e você
tchê tchererê tchê tchê
tchererê tchê tchê
tchererê tchê tchê
tchereretchê
tchê, tchê, tchê
Gusttavo Lima e você
se você me olhar vou querer te pegar
e depois namorar, curtição
que hoje vai rolar
gata, me liga, mais tarde tem balada
quero curtir com você na madrugada
dançar, pular até o Sol raiar
gata, me liga, mais tarde tem balada
quero curtir com você na madrugada
dançar, pular que hoje vai rolar
tchê tchererê tchê tchê
tchererê tchê tchê
tchererê tchê tchê
tchereretchê
tchê, tchê, tchê
Gusttavo Lima e você
tchê tchererê tchê tchê
tchererê tchê tchê
tchererê tchê tchê
tchereretchê
tchê, tchê, tchê
Gusttavo Lima e você
LSMHuffman/bb.txt
vilégio que então redigi, chamei a atenção do governo para 
esse resultado, verdadeiramente cristão. Todavia, não neguei 
aos amigos as vantagens pecuniárias que deviam resultar da 
distribuição de um produto de tamanhos e tão profundos efei- 
tos. Agora, porém, que estou cá do outro lado da vida, posso 
confessar tudo: o que me influiu principalmente foi o gosto 
de ver impressas nos jornais, mostradores, folhetos, esquinas, 
e enfim nas caixinhas do remédio, estas três palavras: Emplasto 
Brás Cubas. Para que negá-lo? Eu tinha a paixão do arruído, 
do cartaz, do foguete de lágrimas. Talvez os modestos me ar- 
guam esse defeito; fio, porém, que esse talento me hão de re- 
conhecer os hábeis; "...e eu era hábil." Assim,
a minha idéia 
trazia duas faces, como as medalhas, uma virada para o públi- 
co, outra para mim. De um lado, filantropia e lucro; de outro 
lado, sede de nomeada. Digamos: -- amor da glória. 
 Um tio meu, cônego de prebenda inteira, costumava di- 
zer que o amor da glória temporal era a perdição das almas, 
que só devem cobiçar a glória eterna. Ao que retorquia outro 
tio, oficial de um dos antigos terços de infantaria, que o amor 
da glória era a coisa mais verdadeiramente humana que há 
no homem, e, conseguintemente, a sua mais genuína feição. 
 Decida o leitor entre o militar e o cônego; eu volto ao 
emplasto. 
CAPÍTULO 3 
Genealogia 
 Mas, já que falei nos meus dois tios, deixem-me fazer aqui 
um curto esboço genealógico. 
 O fundador de minha família foi um certo Damião Cu- 
bas, que floresceu na primeira metade do século XVIII. Era 
tanoeiro de ofício, natural do Rio de Janeiro, onde teria 
morrido na penúria e na obscuridade, se somente exercesse a 
tanoaria. Mas não; fez-se lavrador, plantou, colheu, permu- 
tou o seu produto por boas e honradas patacas, até que mor- 
reu, deixando grosso cabedal a um filho, o licenciado Luís 
Cubas. Neste rapaz é que verdadeiramente começa a série de 
meus avós -- dos avós que a minha família sempre confessou 
- porque o Damião Cubas era afinal de contas um tanoeiro, 
e talvez mau tanoeiro, ao passo que o Luís Cubas estudou em 
Coimbra, primou no Estado, e foi um dos amigos particulares 
do vice-rei conde da Cunha. 
 Como este apelido de Cubas lhe cheirasse excessivamen- 
te a tanoaria, alegava meu pai, bisneto do Damião, que o dito 
apelido fora dado a um cavaleiro, herói nas jornadas da Afri- 
ca, em prêmio da façanha que praticou arrebatando trezen- 
tas cubas ao mouros. Meu pai era homem de imaginação; es- 
capou à tanoaria nas asas de um calembour. Era um bom cará- 
ter, meu pai, varão digno e leal como poucos. Tinha, é verda- 
de, uns fumos de pacholice; mas quem não é um pouco 
pachola nesse mundo? Releva notar que ele não recorreu à 
inventiva senão depois de experimentar a falsificação; primei- 
ramente, entroncou-se na família daquele meu famoso homô- 
nimo, o capitão-mor Brás Cubas, que fundou a vila de São 
Vicente, onde morreu em 1592, e por esse motivo é que me 
deu o nome de Brás. Opôs-se-lhe, porém, a família do capi- 
tão-mor, e foi então que ele imaginou as trezentas cubas 
mouriscas. 
 Vivem ainda alguns membros de minha família, minha 
sobrinha Venância, por exemplo, o lírio-do-vale, que é a flor 
das damas do seu tempo; vive o pai, o Cotrim, um sujeito que... 
Mas não antecipemos os sucessos; acabemos de uma vez com 
o nosso emplasto. 
CAPÍTULO 4 
A Idéia Fixa 
 A minha idéia, depois de tantas cabriolas, constituíra-se 
idéia fixa. Deus te livre, leitor, de uma idéia fixa; antes um 
argueiro, antes uma trave no olho. Vê o Cavour; foi a idéia 
fixa da unidade italiana que o matou. Verdade é que Bismarck 
não morreu; mas cumpre advertir que a natureza é uma gran- 
de caprichosa e a história uma eterna loureira. Por exemplo, 
Suetônio deu-nos um Cláudio, que era um "verdadeiro bana- 
na", -- ou "uma abóbora" como lhe chamou Sêneca, e um 
Tito, que mereceu ser as delícias de Roma. Veio moder- 
namente um professor e achou meio de demonstrar que am- 
bos esses conceitos eram errôneos e abstrusos, e que dos dois 
césares, o delicioso, o verdadeiramente delicioso, foi o "abó- 
bora" de Sêneca. E tu, madama Lucrécia, flor dos Bórgias, se 
um poeta te pintou como a Messalina católica, apareceu um 
Gregorovius incrédulo que te apagou muito essa qualidade, 
e, se não vieste a lírio, também não ficaste pântano. Eu dei- 
xo-me estar entre o poeta e o sábio. 
 Viva pois a história, a volúvel história que dá para tudo; 
e, tomando à idéia fixa, direi que é ela a que faz os varões 
fortes e os doidos; a idéia móbil, vaga ou furta-cor é a que faz 
os Cláudios, -- formula Suetônio. 
 Era fixa a minha idéia, fixa como... Não me ocorre nada 
que seja assaz fixo nesse mundo: talvez a lua, talvez as pirâmi- 
des do Egito, talvez a finada dieta germânica. Veja o leitor a 
comparação que melhor lhe quadrar, veja-a e não esteja daí a 
torcer-me o nariz, só porque ainda não chegamos à parte nar- 
rativa destas memórias. Lá iremos. Creio que prefere a ane- 
dota à reflexão, como os outros leitores, seus confrades, e acho 
que faz muito bem. Pois lá iremos. Todavia, importa dizer que 
este livro é escrito com pachorra, com a pachorra de um.
LSMHuffman/boxCurses.h
/* 
 * File: boxCurses.h
 * Author: joao
 *
 * Created on 12 de Maio de 2016, 19:20
 */
#ifndef BOXCURSES_H
#define	BOXCURSES_H
#include<ncurses.h>
#include<string.h>
#ifdef	__cplusplus
extern "C" {
#endif
//--------------------
void initSetup();
void exitWin();
void makeWindow(int rowStart,int lineStart,int rowEnd,int lineEnd,int color);
void displayMsgCenter(int line,char mesg[]);
void spc(register int nSpcs,register int typeBlock);
//---------------------------------------------------------------------------
void displayMsgCenter(int line,char mesg[]){
 int row,col;
 getmaxyx(stdscr,row,col);
 move(line,(col-strlen(mesg))/2);
 printw("%s",mesg);
 refresh();
}
//----------------------------------------------------------------------------
void makeWindow(int rowStart,int lineStart,int rowEnd,int lineEnd,int color){
 attron(COLOR_PAIR((color)));
 move(lineStart,rowStart);
 addch(ACS_ULCORNER);
 move(lineStart,rowEnd);
 addch(ACS_URCORNER);
 move(lineEnd,rowStart);
 addch(ACS_LLCORNER);
 move(lineEnd,rowEnd);
 addch(ACS_LRCORNER);
 for(int i=lineStart+1;i<lineEnd;i++){
 move(i,rowStart);
 addch(ACS_VLINE);
 move(i,rowEnd);
 addch(ACS_VLINE);
 }
 for(int i=rowStart+1;i<rowEnd;i++){
 move(lineStart,i);
 addch(ACS_HLINE);
 move(lineEnd,i);
 addch(ACS_HLINE);
 }
 refresh();
}
//--------------------
void spc(register int nSpcs,register int typeBlock){
 for(register int i=0;i<nSpcs;i++)
 if (typeBlock==0)
 addch(ACS_CKBOARD);
 else
 printw(" ");
refresh();
}
//--------------------
void initSetup(){
 initscr();
 start_color();
 use_default_colors();
 init_pair(1,COLOR_WHITE,COLOR_BLUE);
 init_pair(2,COLOR_BLUE,COLOR_WHITE);
 init_pair(3,COLOR_BLUE,COLOR_BLACK);
 init_pair(4,COLOR_BLUE,COLOR_BLUE);
 init_pair(5,COLOR_CYAN,COLOR_BLUE);
 init_pair(6,COLOR_BLUE,COLOR_CYAN);
 init_pair(7,COLOR_CYAN,COLOR_CYAN);
 init_pair(8,COLOR_BLACK,COLOR_WHITE);
 init_pair(9,COLOR_WHITE,COLOR_WHITE);
 init_pair(10,COLOR_WHITE,COLOR_BLACK);
 init_pair(11,COLOR_WHITE,COLOR_RED);
 init_pair(12,COLOR_RED,COLOR_BLUE);
 init_pair(13,COLOR_RED,COLOR_BLACK);
 init_pair(14,COLOR_GREEN,COLOR_BLACK);
 init_pair(15,COLOR_YELLOW,COLOR_BLACK);
 init_pair(16,COLOR_GREEN,COLOR_BLUE);
 init_pair(17,COLOR_BLACK,COLOR_BLACK);
 init_pair(18,COLOR_RED,COLOR_RED);
 init_pair(19,COLOR_YELLOW,COLOR_RED);
 init_pair(20,COLOR_YELLOW,COLOR_BLUE);
 init_pair(21,COLOR_YELLOW,COLOR_BLACK);
 init_pair(22,COLOR_BLACK,COLOR_YELLOW);
 init_pair(23,COLOR_RED,COLOR_WHITE);
 
}
//--------------------
void exitWin(){
 endwin();
}
#ifdef	__cplusplus
}
#endif
#endif	/* BOXCURSES_H */
LSMHuffman/bras.txt
 Algum tempo hesitei se devia abrir estas memórias pelo 
princípio ou pelo fim, isto é, se poria em primeiro lugar o meu 
nascimento ou a minha morte. Suposto o uso vulgar seja co- 
meçar pelo nascimento, duas considerações me levaram a 
adotar diferente método: a primeira é que
eu não sou propria- 
mente um autor defunto, mas um defunto autor, para quem a 
campa foi outro berço; a segunda é que o escrito ficaria assim 
mais galante e mais novo. Moisés, que também contou a sua 
morte, não a pôs no intróito, mas no cabo; diferença radical 
entre este livro e o Pentateuco. 
 Dito isto, expirei às duas horas da tarde de uma sexta-fei- 
ra do mês de agosto de 1869, na minha bela chácara de 
Catumbi. Tinha uns sessenta e quatro anos, rijos e prósperos, 
era solteiro, possuía cerca de trezentos contos e fui acompa- 
nhado ao cemitério por onze amigos. Onze amigos! Verdade 
é que não houve cartas nem anúncios. Acresce que chovia 
- peneirava - uma chuvinha miúda, triste e constante, tão 
constante e tão triste, que levou um daqueles fiéis da última 
hora a intercalar esta engenhosa idéia no discurso que profe- 
riu à beira de minha cova: -- "Vós, que o conhecestes, meus 
senhores, vós podeis dizer comigo que a natureza parece es- 
tar chorando a perda irreparável de um dos mais belos carac- 
teres que tem honrado a humanidade. Este ar sombrio, estas 
gotas do céu, aquelas nuvens escuras que cobrem o azul como 
um crepe funéreo, tudo isso é a dor crua e má que lhe rói à 
natureza as mais íntimas entranhas; tudo isso é um sublime 
louvor ao nosso ilustre finado." 
 Bom e fiel amigo! Não, não me arrependo das vinte apó- 
lices que lhe deixei. E foi assim que cheguei à cláusula dos 
meus dias; foi assim que me encaminhei para o undiscovered 
country de Hamlet, sem as ânsias nem as dúvidas do moço 
príncipe, mas pausado e trôpego, como quem se retira tarde 
do espetáculo. Tarde e aborrecido. Viram-me ir umas nove ou 
dez pessoas, entre elas três senhoras, -- minha irmã Sabina, 
casada com o Cotrim, -- a filha, um lírio-do-vale, -- e... Te- 
nham paciência! daqui a pouco lhes direi quem era a terceira 
senhora. Contentem-se de saber que essa anônima, ainda que 
não parenta, padeceu mais do que as parentas. É verdade, 
padeceu mais. Não digo que se carpisse, não digo que se dei- 
xasse rolar pelo chão, epiléptica. Nem o meu óbito era coisa 
altamente dramática... Um solteirão que expira aos sessenta 
e quatro anos, não parece que reúna em si todos os elemen- 
tos de uma tragédia. E dado que sim, o que menos convinha 
a essa anônima era aparentá-lo. De pé, à cabeceira da cama, 
com os olhos estúpidos, a boca entreaberta, a triste senhora 
mal podia crer na minha extinção. 
 - Morto! morto! dizia consigo. 
 E a imaginação dela, como as cegonhas que um ilustre 
viajante viu desferirem o vôo desde o Ilisso às ribas africanas, 
sem embargo das ruínas e dos tempos, -- a imaginação dessa 
senhora também voou por sobre os destroços presentes até às 
ribas de uma África juvenil... Deixá-la ir; lá iremos mais tar- 
de; lá iremos quando eu me restituir aos primeiros anos. Ago- 
ra, quero morrer tranqüilamente, metodicamente, ouvindo os 
soluços das damas, as falas baixas dos homens, a chuva que 
tamborila nas folhas de tinhorão da chácara, e o som estrídulo 
de uma navalha que um amolador está afiando lá fora, à por- 
ta de um correeiro. Juro-lhes que essa orquestra da morte foi 
muito menos triste do que podia parecer. De certo ponto em 
diante chegou a ser deliciosa. A vida estrebuchava-me no 
peito, com uns ímpetos de vaga marinha, esvaía-se-me a cons- 
ciência, eu descia à imobilidade física e moral, e o corpo fa- 
zia-se-me planta, e pedra, e lodo, e coisa nenhuma. 
 Morri de uma pneumonia; mas se lhe disser que foi menos a 
pneumonia, do que uma idéia grandiosa e útil, a causa da minha 
morte, é possível que o leitor me não creia, e todavia é verdade. 
Vou expor-lhe sumariamente o caso. Julgue-o por si mesmo. 
LSMHuffman/build/Debug/GNU-Linux-x86/main.o
LSMHuffman/build/Debug/GNU-Linux-x86/main.o.d
build/Debug/GNU-Linux-x86/main.o: main.cpp boxCurses.h HuffmanUtil.h \
 Huffman.h NodeList.h Forms.h
boxCurses.h:
HuffmanUtil.h:
Huffman.h:
NodeList.h:
Forms.h:
LSMHuffman/dist/Debug/GNU-Linux-x86/lsmhuffman
LSMHuffman/dist/Debug/GNU-Linux/lsmhuffman
LSMHuffman/main.cpp
/* 
 * File: main.cpp
 * Author: joao
 *
 * Created on 9 de Maio de 2016, 15:21
 */
#include <cstdlib>
#include <stdio.h>
#include <dirent.h>
#include"boxCurses.h"
#include "HuffmanUtil.h"
#include"Forms.h"
using namespace std;
/*
 * 
 */
/*----------------------------------------------------------------------------*/
void menuPrincipal();
char* listArq();
/*----------------------------------------------------------------------------*/
int main(int argc, char** argv) {
 //------------------
 initSetup();
 noecho();
 keypad(stdscr, TRUE);
 //------------------
 menuPrincipal();
 
}
void menuPrincipal() {
 list *listaNos = NULL;
 No *huffmanTree = NULL;
 char op, nomeArq[20], nomeTab[25],codigo[21],aux[21], *nomeAux, flag = 0,hFlag='0',cp=0;
 
 strcpy(codigo,"");
 strcpy(aux,"");
 do {
 telaPrincipal();
 if (flag)
 infoFile(nomeArq,cp);
 flushinp();
 op = getch();
 switch (op) {
 case'e':
 formArq();
 nomeAux = listArq();
 strcpy(nomeArq, nomeAux);
 strcpy(nomeTab, nomeAux);
 strcat(nomeTab, ".tab");
 flag = 1;
 break;
 case'p':
 fileTolist(nomeArq,&listaNos);
 gravaLista(nomeTab, listaNos);
 montarArvore(listaNos, &huffmanTree);
 compactarArquivo(nomeArq,huffmanTree);
 cp=1;
 break;
 case'r':
 formArq();
 nomeAux = listArq();
 strcpy(nomeArq, nomeAux);
 formArq();
 descompactarArquivo(nomeArq);
 break;
 case'x':
 
 exitWin();
 break;
 }
 refresh();
 } while (op != 'x');
}
//------------------------------------------------------------------------------
char* listArq() {
 struct dirent **listaArq;
 char nameFile[20];
 int n = scandir(".", &listaArq, 0, alphasort);
 int cont = 0, nArq = 0, lado = 0;
 attron(A_BOLD);
 attron(COLOR_PAIR((23)));
 move(5, 3);
 while (n--) {
 move(5 + cont++, 3 + lado);
 printw("[%d]-[%s]", n, listaArq[n]->d_name);
 if (cont % 16 == 0) {
 cont = 0;
 lado = lado + 25;
 }
 }
 move(22, 3);
 printw("Type the file number: ");
 scanw("%d", &nArq);
 attroff(A_BOLD);
 return listaArq[nArq]->d_name;
 free(listaArq);
}
LSMHuffman/moleque.txt
Paparazzi ta de olho em nós
Boa fase, pré, ao vivo e pós
Tumultuou tudo e de novo passou batido
Ah os moleque é liso
A história começou assim
Vi os vida louca contando dindim
Um rapper gringo embrasar no plim plim
Vou escrever uma história pra mim assim
Vou visitar esse shopping, adquirir umas peças da Oakley
Lançar um carro nome Amarok, um tênis Nike de modelo
Shox
Adquirir Calvin Klein, a Tommy, a Lacoste e as nota que vai
E antes que o bronze sai, o ouro e a prata e a benção do
pai
Anota aí, pode escrever, os humilhados sempre vão
vencer
E se você paga pra ver, estou ao vivo aqui pra te dizer
Paparazzi ta de olho em nós
Boa fase, pré, ao vivo e pós
Tumultuou tudo e de novo passou batido
Ah os moleque é liso
A história começou assim
Vi os vida louca nadar no dindim
Um rapper gringo embrasar no plim plim
Vou escrever uma história pra mim assim
Vou visitar esse shopping, adquirir umas peças da Oakley
Lançar um carro nome Amarok, um tênis Nike de modelo
Shox
Adquirir Calvin
Klein, a Tommy, a Lacoste é as nota que vai
Quando o dj soltar no akai, rebola gatona no colo do pai
Anota aí, pode escrever, onde nós cola faz o fuzuê
E no final eu e você, do baile funk lá pro meu apê
Paparazzi tá de olho em nós
Boa fase, pré, ao vivo e pós
Tumultuou tudo e de novo passou batido
Ah, os moleque é liso
LSMHuffman/nbproject/Makefile-Debug.mk
#
# Generated Makefile - do not edit!
#
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a -pre and a -post target defined where you can add customized code.
#
# This makefile implements configuration specific macros and targets.
# Environment
MKDIR=mkdir
CP=cp
GREP=grep
NM=nm
CCADMIN=CCadmin
RANLIB=ranlib
CC=gcc
CCC=g++
CXX=g++
FC=gfortran
AS=as
# Macros
CND_PLATFORM=GNU-Linux-x86
CND_DLIB_EXT=so
CND_CONF=Debug
CND_DISTDIR=dist
CND_BUILDDIR=build
# Include project Makefile
include Makefile
# Object Directory
OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}
# Object Files
OBJECTFILES= \
	${OBJECTDIR}/main.o
# C Compiler Flags
CFLAGS=-lcurses
# CC Compiler Flags
CCFLAGS=-lcurses
CXXFLAGS=-lcurses
# Fortran Compiler Flags
FFLAGS=
# Assembler Flags
ASFLAGS=
# Link Libraries and Options
LDLIBSOPTIONS=
# Build Targets
.build-conf: ${BUILD_SUBPROJECTS}
	"${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman
${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman: ${OBJECTFILES}
	${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}
	${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman ${OBJECTFILES} ${LDLIBSOPTIONS}
${OBJECTDIR}/main.o: main.cpp 
	${MKDIR} -p ${OBJECTDIR}
	${RM} "$@.d"
	$(COMPILE.cc) -g -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp
# Subprojects
.build-subprojects:
# Clean Targets
.clean-conf: ${CLEAN_SUBPROJECTS}
	${RM} -r ${CND_BUILDDIR}/${CND_CONF}
	${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman
# Subprojects
.clean-subprojects:
# Enable dependency checking
.dep.inc: .depcheck-impl
include .dep.inc
LSMHuffman/nbproject/Makefile-Release.mk
#
# Generated Makefile - do not edit!
#
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a -pre and a -post target defined where you can add customized code.
#
# This makefile implements configuration specific macros and targets.
# Environment
MKDIR=mkdir
CP=cp
GREP=grep
NM=nm
CCADMIN=CCadmin
RANLIB=ranlib
CC=gcc
CCC=g++
CXX=g++
FC=gfortran
AS=as
# Macros
CND_PLATFORM=GNU-Linux-x86
CND_DLIB_EXT=so
CND_CONF=Release
CND_DISTDIR=dist
CND_BUILDDIR=build
# Include project Makefile
include Makefile
# Object Directory
OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}
# Object Files
OBJECTFILES= \
	${OBJECTDIR}/main.o
# C Compiler Flags
CFLAGS=
# CC Compiler Flags
CCFLAGS=
CXXFLAGS=
# Fortran Compiler Flags
FFLAGS=
# Assembler Flags
ASFLAGS=
# Link Libraries and Options
LDLIBSOPTIONS=
# Build Targets
.build-conf: ${BUILD_SUBPROJECTS}
	"${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman
${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman: ${OBJECTFILES}
	${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}
	${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman ${OBJECTFILES} ${LDLIBSOPTIONS}
${OBJECTDIR}/main.o: main.cpp 
	${MKDIR} -p ${OBJECTDIR}
	${RM} "$@.d"
	$(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp
# Subprojects
.build-subprojects:
# Clean Targets
.clean-conf: ${CLEAN_SUBPROJECTS}
	${RM} -r ${CND_BUILDDIR}/${CND_CONF}
	${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman
# Subprojects
.clean-subprojects:
# Enable dependency checking
.dep.inc: .depcheck-impl
include .dep.inc
LSMHuffman/nbproject/Makefile-impl.mk
# 
# Generated Makefile - do not edit! 
# 
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a pre- and a post- target defined where you can add customization code.
#
# This makefile implements macros and targets common to all configurations.
#
# NOCDDL
# Building and Cleaning subprojects are done by default, but can be controlled with the SUB
# macro. If SUB=no, subprojects will not be built or cleaned. The following macro
# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf
# and .clean-reqprojects-conf unless SUB has the value 'no'
SUB_no=NO
SUBPROJECTS=${SUB_${SUB}}
BUILD_SUBPROJECTS_=.build-subprojects
BUILD_SUBPROJECTS_NO=
BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}}
CLEAN_SUBPROJECTS_=.clean-subprojects
CLEAN_SUBPROJECTS_NO=
CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}}
# Project Name
PROJECTNAME=LSMHuffman
# Active Configuration
DEFAULTCONF=Debug
CONF=${DEFAULTCONF}
# All Configurations
ALLCONFS=Debug Release 
# build
.build-impl: .build-pre .validate-impl .depcheck-impl
	@#echo "=> Running $@... Configuration=$(CONF)"
	"${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf
# clean
.clean-impl: .clean-pre .validate-impl .depcheck-impl
	@#echo "=> Running $@... Configuration=$(CONF)"
	"${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf
# clobber 
.clobber-impl: .clobber-pre .depcheck-impl
	@#echo "=> Running $@..."
	for CONF in ${ALLCONFS}; \
	do \
	 "${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf; \
	done
# all 
.all-impl: .all-pre .depcheck-impl
	@#echo "=> Running $@..."
	for CONF in ${ALLCONFS}; \
	do \
	 "${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf; \
	done
# build tests
.build-tests-impl: .build-impl .build-tests-pre
	@#echo "=> Running $@... Configuration=$(CONF)"
	"${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-tests-conf
# run tests
.test-impl: .build-tests-impl .test-pre
	@#echo "=> Running $@... Configuration=$(CONF)"
	"${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .test-conf
# dependency checking support
.depcheck-impl:
	@echo "# This code depends on make tool being used" >.dep.inc
	@if [ -n "${MAKE_VERSION}" ]; then \
	 echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \
	 echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \
	 echo "include \$${DEPFILES}" >>.dep.inc; \
	 echo "endif" >>.dep.inc; \
	else \
	 echo ".KEEP_STATE:" >>.dep.inc; \
	 echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \
	fi
# configuration validation
.validate-impl:
	@if [ ! -f nbproject/Makefile-${CONF}.mk ]; \
	then \
	 echo ""; \
	 echo "Error: can not find the makefile for configuration '${CONF}' in project ${PROJECTNAME}"; \
	 echo "See 'make help' for details."; \
	 echo "Current directory: " `pwd`; \
	 echo ""; \
	fi
	@if [ ! -f nbproject/Makefile-${CONF}.mk ]; \
	then \
	 exit 1; \
	fi
# help
.help-impl: .help-pre
	@echo "This makefile supports the following configurations:"
	@echo " ${ALLCONFS}"
	@echo ""
	@echo "and the following targets:"
	@echo " build (default target)"
	@echo " clean"
	@echo " clobber"
	@echo " all"
	@echo " help"
	@echo ""
	@echo "Makefile Usage:"
	@echo " make [CONF=<CONFIGURATION>] [SUB=no] build"
	@echo " make [CONF=<CONFIGURATION>] [SUB=no] clean"
	@echo " make [SUB=no] clobber"
	@echo " make [SUB=no] all"
	@echo " make help"
	@echo ""
	@echo "Target 'build' will build a specific configuration and, unless 'SUB=no',"
	@echo " also build subprojects."
	@echo "Target 'clean' will clean a specific configuration and, unless 'SUB=no',"
	@echo " also clean subprojects."
	@echo "Target 'clobber' will remove all built
files from all configurations and,"
	@echo " unless 'SUB=no', also from subprojects."
	@echo "Target 'all' will will build all configurations and, unless 'SUB=no',"
	@echo " also build subprojects."
	@echo "Target 'help' prints this message."
	@echo ""
LSMHuffman/nbproject/Makefile-variables.mk
#
# Generated - do not edit!
#
# NOCDDL
#
CND_BASEDIR=`pwd`
CND_BUILDDIR=build
CND_DISTDIR=dist
# Debug configuration
CND_PLATFORM_Debug=GNU-Linux-x86
CND_ARTIFACT_DIR_Debug=dist/Debug/GNU-Linux-x86
CND_ARTIFACT_NAME_Debug=lsmhuffman
CND_ARTIFACT_PATH_Debug=dist/Debug/GNU-Linux-x86/lsmhuffman
CND_PACKAGE_DIR_Debug=dist/Debug/GNU-Linux-x86/package
CND_PACKAGE_NAME_Debug=lsmhuffman.tar
CND_PACKAGE_PATH_Debug=dist/Debug/GNU-Linux-x86/package/lsmhuffman.tar
# Release configuration
CND_PLATFORM_Release=GNU-Linux-x86
CND_ARTIFACT_DIR_Release=dist/Release/GNU-Linux-x86
CND_ARTIFACT_NAME_Release=lsmhuffman
CND_ARTIFACT_PATH_Release=dist/Release/GNU-Linux-x86/lsmhuffman
CND_PACKAGE_DIR_Release=dist/Release/GNU-Linux-x86/package
CND_PACKAGE_NAME_Release=lsmhuffman.tar
CND_PACKAGE_PATH_Release=dist/Release/GNU-Linux-x86/package/lsmhuffman.tar
#
# include compiler specific variables
#
# dmake command
ROOT:sh = test -f nbproject/private/Makefile-variables.mk || \
	(mkdir -p nbproject/private && touch nbproject/private/Makefile-variables.mk)
#
# gmake command
.PHONY: $(shell test -f nbproject/private/Makefile-variables.mk || (mkdir -p nbproject/private && touch nbproject/private/Makefile-variables.mk))
#
include nbproject/private/Makefile-variables.mk
LSMHuffman/nbproject/Package-Debug.bash
#!/bin/bash -x
#
# Generated - do not edit!
#
# Macros
TOP=`pwd`
CND_PLATFORM=GNU-Linux-x86
CND_CONF=Debug
CND_DISTDIR=dist
CND_BUILDDIR=build
CND_DLIB_EXT=so
NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging
TMPDIRNAME=tmp-packaging
OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman
OUTPUT_BASENAME=lsmhuffman
PACKAGE_TOP_DIR=lsmhuffman/
# Functions
function checkReturnCode
{
 rc=$?
 if [ $rc != 0 ]
 then
 exit $rc
 fi
}
function makeDirectory
# $1 directory path
# $2 permission (optional)
{
 mkdir -p "$1"
 checkReturnCode
 if [ "$2" != "" ]
 then
 chmod $2 "$1"
 checkReturnCode
 fi
}
function copyFileToTmpDir
# $1 from-file path
# $2 to-file path
# $3 permission
{
 cp "$1" "$2"
 checkReturnCode
 if [ "$3" != "" ]
 then
 chmod $3 "$2"
 checkReturnCode
 fi
}
# Setup
cd "${TOP}"
mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package
rm -rf ${NBTMPDIR}
mkdir -p ${NBTMPDIR}
# Copy files and create directories and links
cd "${TOP}"
makeDirectory "${NBTMPDIR}/lsmhuffman/bin"
copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755
# Generate tar file
cd "${TOP}"
rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/lsmhuffman.tar
cd ${NBTMPDIR}
tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/lsmhuffman.tar *
checkReturnCode
# Cleanup
cd "${TOP}"
rm -rf ${NBTMPDIR}
LSMHuffman/nbproject/Package-Release.bash
#!/bin/bash -x
#
# Generated - do not edit!
#
# Macros
TOP=`pwd`
CND_PLATFORM=GNU-Linux-x86
CND_CONF=Release
CND_DISTDIR=dist
CND_BUILDDIR=build
CND_DLIB_EXT=so
NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging
TMPDIRNAME=tmp-packaging
OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/lsmhuffman
OUTPUT_BASENAME=lsmhuffman
PACKAGE_TOP_DIR=lsmhuffman/
# Functions
function checkReturnCode
{
 rc=$?
 if [ $rc != 0 ]
 then
 exit $rc
 fi
}
function makeDirectory
# $1 directory path
# $2 permission (optional)
{
 mkdir -p "$1"
 checkReturnCode
 if [ "$2" != "" ]
 then
 chmod $2 "$1"
 checkReturnCode
 fi
}
function copyFileToTmpDir
# $1 from-file path
# $2 to-file path
# $3 permission
{
 cp "$1" "$2"
 checkReturnCode
 if [ "$3" != "" ]
 then
 chmod $3 "$2"
 checkReturnCode
 fi
}
# Setup
cd "${TOP}"
mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package
rm -rf ${NBTMPDIR}
mkdir -p ${NBTMPDIR}
# Copy files and create directories and links
cd "${TOP}"
makeDirectory "${NBTMPDIR}/lsmhuffman/bin"
copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755
# Generate tar file
cd "${TOP}"
rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/lsmhuffman.tar
cd ${NBTMPDIR}
tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/lsmhuffman.tar *
checkReturnCode
# Cleanup
cd "${TOP}"
rm -rf ${NBTMPDIR}
LSMHuffman/nbproject/configurations.xml
 
 
 
 Forms.h
 Huffman.h
 HuffmanUtil.h
 NodeList.h
 boxCurses.h
 
 
 main.cpp
 
 
 
 
 
 
 Makefile
 
 
 Makefile
 
 
 
 default
 true
 false
 
 
 
 -lcurses
 
 
 -lcurses
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 default
 true
 false
 
 
 
 5
 
 
 5
 
 
 5
 
 
 5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
LSMHuffman/nbproject/private/Makefile-variables.mk
#
# Generated - do not edit!
#
# NOCDDL
#
# Debug configuration
# Release configuration
LSMHuffman/nbproject/private/configurations.xml
 
 Makefile
 
 
 
 localhost
 2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 gdb
 
 
 
 "${OUTPUT_PATH}"
 
 "${OUTPUT_PATH}"
 
 true
 1
 2
 0
 
 
 
 
 
 
 localhost
 2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 gdb
 
 
 
 "${OUTPUT_PATH}"
 
 "${OUTPUT_PATH}"
 
 true
 0
 0
 
 
 
 
 
LSMHuffman/nbproject/private/launcher.properties
# Launchers File syntax:
#
# [Must-have property line] 
# launcher1.runCommand=<Run Command>
# [Optional extra properties] 
# launcher1.displayName=<Display Name, runCommand by default>
# launcher1.buildCommand=<Build Command, Build Command specified in project properties by default>
# launcher1.runDir=<Run Directory, ${PROJECT_DIR} by default>
# launcher1.symbolFiles=<Symbol Files loaded by debugger, ${OUTPUT_PATH} by default>
# launcher1.env.<Environment variable KEY>=<Environment variable VALUE>
# (If this value is quoted with ` it is handled as a native command which execution result will become the value)
# [Common launcher properties]
# common.runDir=<Run Directory>
# (This value is overwritten by a launcher specific runDir value if the latter exists)
# common.env.<Environment variable KEY>=<Environment variable VALUE>
# (Environment variables from common launcher are merged with launcher specific variables)
# common.symbolFiles=<Symbol Files loaded by debugger>
# (This value is overwritten by a launcher specific symbolFiles value if the latter exists)
#
# In runDir, symbolFiles and env fields you can use these macroses:
# ${PROJECT_DIR} - project directory absolute path
# ${OUTPUT_PATH} - linker output
path (relative to project directory path)
# ${OUTPUT_BASENAME}- linker output filename
# ${TESTDIR} - test files directory (relative to project directory path)
# ${OBJECTDIR} - object files directory (relative to project directory path)
# ${CND_DISTDIR} - distribution directory (relative to project directory path)
# ${CND_BUILDDIR} - build directory (relative to project directory path)
# ${CND_PLATFORM} - platform name
# ${CND_CONF} - configuration name
# ${CND_DLIB_EXT} - dynamic library extension
#
# All the project launchers must be listed in the file!
#
# launcher1.runCommand=...
# launcher2.runCommand=...
# ...
# common.runDir=...
# common.env.KEY=VALUE
# launcher1.runCommand=<type your run command here>
LSMHuffman/nbproject/private/private.xml
 
 
 1
 0
 
 
 
 
 
LSMHuffman/nbproject/project.xml
 
 org.netbeans.modules.cnd.makeproject
 
 
 LSMHuffman
 
 cpp
 h
 UTF-8
 
 
 
 
 Debug
 1
 
 
 Release
 1
 
 
 
 false
 
 
 
LSMHuffman/padre.txt
O padre tem pouca capa , porque pouca capa compra . 
LSMHuffman/padre.txt.PAC
11101111000101110001010101110011100
LSMHuffman/padre.txt.tab
O;0.09
padre;0.09
tem;0.09
,;0.09
porque;0.09
compra;0.09
.;0.09
pouca;0.18
capa;0.18
LSMHuffman/perrita.txt
El perrito de Rita me irrita.
Si el perrito de Rita te irrita
dile, a Rita que cambie
el perrito por una perrita.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais