-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
157 lines (136 loc) · 6.72 KB
/
main.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*********************************************
/ DESCRIPCIÓN:
/ Este programa se ejecuta desde la terminal,
/ recibe un input de 6 teclas simultáneas que
/ interpreta como una entrada de signo braille
/ en una máquina Perkins (ver 'signos.c').
/ En la parte superior de la terminal muestra los
/ signos braille y en la inferior su equivalente
/ en texto español. Permite guardar los signos
/ braille escritos en un documento de texto.
/ También se pueden borrar los últimos signos de
/ ambas partes (texto y braille), con ciertas
/ consideraciones especiales.
/ De momento no funciona en Windows debido a
/ la codificación de las terminales, habrá que
/ hacer una interfaz gráfica (GTK3?).
/ Asegúrate de que tu editor esté configurado
/ con codificación UTF-8.
/
/ Compilar en GCC:
/ >$ make
/
/ Oliver Almaraz
**********************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <locale.h>
#include "modules.h"
int main() {
setlocale(LC_ALL, "");
char input[8]; // 6 puntos + \n y el pilón
char *textoBrai = (char*)calloc(3500, sizeof(char)); // Tamaño = 1 byte por char, cada letra braille contiene 3 bytes.
char *texto = (char*)calloc(1000, sizeof(char));
bool MAYUS = false;
bool NUMERAL = false;
while (true) {
system("clear");
char *flag = (NUMERAL||MAYUS)? (NUMERAL?"NUMS":"MAYUS") : "\0";
printf(
"╔═════════════════════════════════════════════════════════════════════════════════╗\n"
"║⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿ 𝐁𝐑𝐀𝐈𝐋𝐋𝐄 ⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿║\n"
"╚═════════════════════════════════════════════════════════════════════════════════╝\n"
"%s\n\n\n"
"╔═════════════════════════════════════════════════════════════════════════════════╗\n"
"║⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿ 𝐓𝐄𝐗𝐓𝐎 ⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿║\n"
"╚═════════════════════════════════════════════════════════════════════════════════╝\n"
"%s\n\n\n\n%s\n"
"╔═════════════════════════════════════════════════════════════════════════════════╗\n"
"║ Usa tu teclado Qwerty como Perkins para ingresar 𝐮𝐧 𝐬𝐢𝐠𝐧𝐨 𝐚 𝐥𝐚 𝐯𝐞𝐳 y presiona ║\n"
"║ '𝐞𝐧𝐭𝐞𝐫', también puedes ingresar espacios, tabulaciones y saltos de linea. ║\n"
"║ F = punto 1, D=2, S=3 J=4, K=5, L=6. ║\n"
"╟─────────────────────────────────────────────────────────────────────────────────╢\n"
"║ '𝐛' = 𝐁𝐎𝐑𝐑𝐀𝐑 último elemento de ambas partes (𝐭𝐞𝐱𝐭𝐨 𝐲 𝐛𝐫𝐚𝐢𝐥𝐥𝐞). ║\n"
"║ '𝐰' = 𝐆𝐔𝐀𝐑𝐃𝐀𝐑 el texto braille completo en un documento. ║\n"
"║ '𝐬𝐚𝐥𝐢𝐫' = 𝐒𝐀𝐋𝐈𝐑 sin guardar. ║\n"
"╚═════════════════════════════════════════════════════════════════════════════════╝\n", textoBrai, texto, flag);
fgets(input, 8, stdin);
/******************************************************
* Los saltos de línea y tabulaciones se pasan tal cual
*******************************************************/
if (! strcmp(input, "\n")) {
strcat(textoBrai, "\n");
strcat(texto, "\n");
NUMERAL = false;
continue;
} else if (! strcmp(input, "\t\n")) {
strcat(textoBrai, "\t");
strcat(texto, "\t");
NUMERAL = false;
continue;
} else if (! strcmp(input, " \n")) { // Si es un espacio
strcat(textoBrai, "⠀");
strcat(texto, " ");
NUMERAL = false;
continue;
}
/********************************************************
* input == "B" borra el último elemento de ambas partes
*********************************************************/
else if (! strcmp(input, "b\n") || ! strcmp(input, "B\n")) {
borrar(textoBrai, texto, &NUMERAL, &MAYUS);
}
/*****************************************************************
* input == "W" crea un documento y guarda el texto braille en él
******************************************************************/
else if (! strcmp(input, "w\n") || ! strcmp(input, "W\n")) {
guardar(input, textoBrai, texto);
}
/***********
* 'SALIR'
************/
else if (! strcmp(input, "salir\n") || ! strcmp(input, "SALIR\n")) {
free(texto);
free(textoBrai);
return 0;
}
/*************************
* SI ES UN SIGNO BRAILLE
**************************/
input[strcspn(input, "\n")] = '\0'; // Se elimina el \n
// Se ordena alfabéticamente el input
char temp;
register int i, j;
int n = strlen(input);
for (i = 0; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (input[i] > input[j]) {
temp = input[i];
input[i] = input[j];
input[j] = temp;
}
}
}
if ( ! strcmp(input, "jl")) { // Signo de mayúscula
MAYUS = true;
NUMERAL = false;
strcat(textoBrai, "⠨");
continue;
} else if ( ! strcmp(input, "jkls")) { // Numeral
NUMERAL = true;
MAYUS = false; // Previene un error del usuario
strcat(textoBrai, "⠼");
continue;
}
/***********************************
* SI ES UNA LETRA O NÚMERO BRAILLE
************************************/
añadir(
input, textoBrai, texto,
&NUMERAL, &MAYUS
);
}
}