Sunday, August 27, 2023

A starfield animation in C with SDL2

Starfields are one of my favourite pixel animations.

Hugo Elias once wrote a wonderful write-up tutorial about the intricacies of coding star field animations that should not fall into oblivion.

http://web.archive.org/web/20160114180422/http://freespace.virgin.net/hugo.elias/graphics/x_stars.htm

My implementation in C with SDL2:

https://github.com/velorek1/starfield



Sunday, April 9, 2023

A beautiful TUI periodic table for Linux Terminals coded in C - no extra dependencies

The periodic table, also known as the periodic table of the elements, is a rows and columns arrangement of the chemical elements. It is widely used in chemistry, physics, and other sciences, and is generally seen as an icon of chemistry. (WIKIPEDIA)

In my last project in C I wanted to compile everything I've learned with graphical text interfaces and create a retro-looking periodic table that looks nice :)

Though not my best or cleanest code, it is intended to be used as a "demo" for the Lynx TUI. Is is also made with a lot of love.

The explanation of all the modules below:

(Increasing in order of abstraction until you reach main.c)


LEVEL 0: (BASE)

  • rterm.c : With the ANSI escape sequences to color our output in the terminal
  • tm.c : Create a millisecond timer for animations

LEVEL 1: (LOW LEVEL ABSTRACTIONS)

  • keyb.c : Creates a small keyboard abstraction to read escaped keys \e on Linux
  • scbuf.c (1) : Creates an intermediate layer between the display and the terminal as a double screen buffer - listbox.c (2) : Creates a list with a selector with horizontal scroll

LEVEL 2: (HIGH LEVEL ABSTRACTIONS)

  • ui.c : Different tools like textbox and window for user interface
  • global.h and about.h : text messages and global variables

main.c: Main program elements.dat: Database of elements, most of the info generated with chatGPT.

(1) http://oldstuff286.blogspot.com/2017/09/a-very-simple-screen-double-buffer.html

(2) http://oldstuff286.blogspot.com/2018/07/segmentation-fault-c-pointers.html


Wednesday, November 9, 2022

Meneame en la Terminal (LINUX) - (Spanish)

En mi último proyecto en C he querido reunir todo lo que he aprendido con las interfaces gráficas de texto y darle uso conectándome a la API de meneame. Soy usuario de meneame desde sus inicios y éste es mi guiño personal por estar ahí durante todos estos años. 
Por ahora es una DEMO de lo que podría llegar a ser. El programa descarga las 100 noticias que aparecen en portada haciendo un CURL request a "https://meneame.net/api/list.php?status=published". 

Luego parsea la información recibida y la muestra en un programa con una interfaz de texto retro. 
No es mi mejor código, pero está hecho con mucho cariño :) 
Código en:

La explicación de todos los módulos a continuación: 

(Aumentando en orden de abstracción hasta llegar a main.c
________________

NIVEL 0: (BASE) 
- rterm.c : Con las secuencias de escape ANSI para dar color a nuestro output en la terminal 
- tm.c : Crea un timer de milisegundos para animaciones 
- fileop.c: Un módulo que ayuda para operaciones con archivos 
_______________

NIVEL 1: (DEPENDENCIAS) 
- download.c : Depende de libcurl. Hacemos la llamada a la API de meneame y guardamos su contenido en un fichero 
- parse.c : Parsea el contenido del fichero y lo volcamos a una array. Quitamos las secuencias de unicode y parsear acentps del español 
_______________

NIVEL 2: (ABSTACCIONES NIVEL BAJO) 
- keyb.c : Crea una pequeña abstracción del teclado para leer las teclas con secuencia de escape \e en Linux 
- scbuf.c (1) : Crea una capa intermedia entre el display y el terminal a modo de doble buffer de pantalla - listbox.c (2) : Crea una lista con un selector con scroll horizontal 
_______________

NIVEL 3: (ABSTACCIONES NIVEL ALTO) 
- ui.c : Diferentes herramientas como textbox y ventana para la interfaz de usuario 
- global.h y about.h : mensajes de texto y variables globales 
_______________

main.c: Programa principal


Sunday, February 27, 2022

C - WORDLE CLONE IN C

Inspired by the popular game, I set about coding my own version for the terminal. :)

This is the first playable version: https://github.com/velorek1/cwordle

It is only one file with code plus the dictionary files that can be changed or adapted as they are just regular text files.

I think it looks retro and cool and it is worth sharing. One of my most popular programs so far. :)