# Progreso ## Estado actual - **Fase 2** — Buffer dinámico. (Fase 1 cerrada en Fedora; falta probar en Windows.) - Paso actual: 2.2, escpos_buffer_append_byte con realloc y duplicado de capacidad. - Entorno activo: Fedora 42 nativo (gcc 15.2, clang 20, make 4.4, gdb 17, valgrind 3.26). ## Hecho - `include/escpos.h` + `src/escpos.c` con `escpos_version()`, y `hello.c` que la usa. Compila y enlaza a mano en Windows y en Fedora. - `samples/hello_world.bin`: ESC @, texto, LF, ESC d 5, GS V 0. - Emulador ESC/POS en Go (`emulator/`) para probar sin gastar papel. ## Conceptos de C aprendidos - Etapas de compilación, unidades de traducción, cabeceras, *include guards*, `static` para encapsular, `nm` y errores del enlazador. - Cadenas terminadas en `'\0'`, `const char *`. - Memoria virtual de un proceso, modo usuario y modo núcleo. - Make: reglas, dependencias por fechas, variables, regla patrón con $@ $< $^, .PHONY. - Pila y montón, malloc/free, NULL, propiedad de punteros, tipo opaco, typedef, `->`, uint8_t/size_t, Valgrind. ## Decisiones de diseño - Prefijo `escpos_` para toda la API pública. - `escpos_buffer` es un tipo opaco: declarado en `escpos.h`, definido en `src/buffer.c`. Campos `uint8_t *data`, `size_t len`, `size_t cap`. - Estilo: nombres en `snake_case` y llave de apertura en línea aparte (estilo Allman) en funciones, structs y bloques. Aplicarlo a todo el proyecto, también a `escpos.c`. - Lo generado va en `build/`, que se crea en las recetas con `mkdir -p` y no se versiona. ## Pendiente / puntos débiles - `.gitignore` creado. Siguen versionados `emulator/escpos-emu.exe` y `goruntime/goruntime.exe`. - Ficheros sin salto de línea final: corregido; editor configurado. - Make: costó entender que va hacia atrás desde el objetivo, y que una regla patrón es una plantilla. Repasar con la sección de docs/06-make.md. - Punteros: le cuesta saber cuándo hace falta `*` y cuándo no (también le pasaba en Go). Reforzar con ejemplos de su propio código. - Impresoras físicas: sin registrar marca y modelo.