-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecodifica_lib.c
51 lines (43 loc) · 1.26 KB
/
decodifica_lib.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include "decodifica_lib.h"
/* Decodifica para @txtOut o texto em @txtCod com base no sistema passado em
* @cb */
void decodifica(struct cifrasBeale *cb, FILE *txtCod, FILE *txtOut)
{
wchar_t chave;
int num;
while (fscanf(txtCod, "%d", &num) != -1){
if (num == -1) {
fputc(L' ', txtOut);
} else if (num == -2){
fputc(L'\n', txtOut);
} else if (num == -3){
fputc(L'?', txtOut);
} else {
chave = buscaCifra(cb, num);
fputc(chave, txtOut);
}
}
}
/* Decodifica para @txtOut o texto em @txtCod com base em @textoBase.
* Salva o arquivo de cifras gerado caso @arqOutCifras nao seja NULL.*/
int decodComTxt(FILE *txtCod, FILE *txtOut, FILE *textoBase)
{
struct cifrasBeale *cb = montaChavesTxt(textoBase);
if (cb == NULL)
return 1;
decodifica(cb, txtCod, txtOut);
destroiCifras(cb);
return 0;
}
/* Decodifica para o stream @txtOut o texto em @txtCod com o sistema de cifras
* em @arqCifras.*/
int decodComCifras(FILE *txtCod, FILE *txtOut, FILE *arqCifras)
{
struct cifrasBeale *cb = leArqCifras(arqCifras);
if (cb == NULL)
return 1;
decodifica(cb, txtCod, txtOut);
destroiCifras(cb);
return 0;
}