Creando un gestor de archivos retro usando FoxBASE: Parte 2

Creando un gestor de archivos retro usando FoxBASE: Parte 2


Imagen creada usando Gemini


Introducción

En la primera parte de este texto, expuse la idea de desarrollar NC-FoxBASE, un gestor de archivos retro parecido a Norton Commander, a pesar de ser más básico en cuanto a sus funcionalidades.

El desarrollo se llevaría a cabo usando un entorno de programación de finales de los años 80 como lo es FoxBASE+, de modo estemos a tono con lo retro, un sistema éste bastante popular en esos años si bien limitado para esta tarea, utilizado para desarrollar programas de gestión de bases de datos en MS-DOS y otros sistemas operativos.

FoxBASE+ efectivamente no es la mejor opción para realizar esta idea, como es fácil de comprender por ser como se ha dicho un gestor de bases de datos, no obstante, usándolo nos encontraremos con más desafíos, y así el desarrollo podría resultar más interesante desde el punto de vista educativo, a costa de no poder completar algunas funcionalidades debido a las limitaciones mencionadas.

En adición a lo dicho, también comenté sobre el software necesario para comenzar a implementar el programa, en mi caso DosBOX y FoxBASE 2.10.

El desarrollo de este gestor de archivos se supone va a servirnos también para poner en práctica otra idea de ir haciendo otra implementación del programa denominada Cuban Commander, y desarrollada en FreeBASIC, además de un libro sobre todo el proceso seguido para implementar cada una de las distintas funcionalidades del software en dicho lenguaje.

FreeBASIC no es un entorno de programación de la época comentada, y por tanto no podemos considerarlo realmente retro, sin embargo, su uso nos permitirá superar las muchas limitaciones de FoxBASE, y crear un software más utilizable en un entorno DOS real y más moderno como FreeDOS.

Por otra parte, además de ser más potente en comparación con FoxBASE, FreeBASIC también es mucho más sencillo de entender si lo comparamos con otros lenguajes como C o Pascal, y eso es un punto a favor de usarlo para ese otro desarrollo con fines educativos.

En todo caso, tanto NC-FoxBASE como Cuban Commander serán publicados como software libre en GitHub, y por tanto todo su código estará disponible para ser estudiado o mejorado.

En esta parte del artículo, vamos a empezar a desarrollar NC-FoxBASE, y lo haremos por la interfaz de usuario en modo texto propia de Norton Commander, de manera podamos tener una referencia visual del funcionamiento del sistema desde el mismo comienzo del desarrollo.


Fundamentos de la pantalla en FoxBASE

El gestor de archivos Norton Commander disponía de una interfaz de usuario idónea para realizar su tarea, y en parte por eso fue un hito cuando fue lanzado en 1986; esta interfaz de usuario estaba basada en texto (TUI) debido a las limitaciones de las computadoras de la época, puesto eso la hacía más ligera en comparación con una GUI o intefaz gráfica de usuario.

La interfaz de usuario de Norton Commander con su doble panel característico.

En un momento cuando el entorno PC estaba dominado por la CLI o interfaz de línea de comandos, una TUI como la de Norton Commander permitió incrementar la productividad en el uso de la microcomputadora, y a la vez facilitar ese uso a los usuarios no especializados.

El entorno de programación FoxBASE no dispone de comandos para escribir pixeles en pantalla, es bastante limitado en cuando a sus capacidades gráficas, no obstante, como una TUI se crea escribiendo texto en pantalla como mismo lo hacen los programas basados en una CLI en vez de trazando líneas, por lo menos en ese aspecto FoxBASE no tiene limitaciones importantes.

En efecto, dibujar una TUI consiste solamente en escribir texto en la pantalla, con la particularidad de que además de texto normal, también se hace uso de los colores y de una serie de códigos ASCII extendidos, para conformar con ellos los recuadros y otras partes propias de esa clase de interfaz de usuario.

El comando @ SAY es utilizado en FoxBASE para escribir texto en la pantalla, y a continuación se muestra cómo colocar texto en una posición determinada de esta:

@ 5, 10 SAY "Bienvenidos a NC-FoxBASE"

La línea de código anterior muestra "Bienvenidos a NC-FoxBASE" en la fila 5, columna 10 de la pantalla en modo texto.

El comando anterior se utiliza en conjunto con otro como SET COLOR TO, encargado en este caso de especificar los mencionados colores de los caracteres ASCII, tanto el color de primer plano como del fondo de la pantalla.

En el caso de los colores, estos se establecen como se muestra a continuación, para definir los colores de fondo y de primer plano del texto a ser escrito del modo descrito antes:

SET COLOR TO <frente/fondo>

En tanto los colores estándar de DOS se especifican usando números, como se lista en la tabla expuesta abajo, en FoxBASE también podemos disponer de códigos de color no numéricos denotados en la misma tabla entre paréntesis:

Código

Frente o Fondo

0 (N)

Negro

1 (B)

Azul

2 (G)

Verde

3 (BG)

Cian

4 (R)

Rojo

5 (RB)

Magenta

6 (GR)

Marrón

7 (W)

Blanco

+8

Versión brillante (Frente)

Nota: En este contexto un asterisco (*) denota parpadeo, y un signo más (+) denota alta intensidad del color.

Los comandos de FoxBASE comentados hasta ahora, junto a los caracteres ASCII extendidos para conformar las líneas y los recuadros, es todo lo necesario para estar en posición de empezar a crear una TUI en dicho sistema.

Los códigos a utilizar para recrear la interfaz en modo texto de Norton Commander de entre los caracteres ASCII extendidos (códigos 128-255) se muestran a continuación:

Código

Caracter

187

188

201

200

179

196

182

199

186

205

193

209

Nota: FoxBASE usa la tabla de códigos Code Page 437 usada también por DOS.

Por último, sólo nos resta conocer cómo borrar la pantalla, o una sección de esta, lo cual se hace por medio del comando CLEAR en sus distintas variantes:

CLEAR * Limpia toda la pantalla
CLEAR ALL * Limpia memoria y variables
@ 0, 0 CLEAR * Limpia desde la posición 0,0

El procedimiento ShowPanel para mostrar un panel en pantalla

En este momento estamos en condiciones de escribir el código para dibujar un panel como los usados en Norton Commander para mostrar la lista de directorios y archivos en la pantalla.

El procedimiento listado a continuación hace esa tarea:

PROCEDURE ShowPanel
PARAMETER Which
PRIVATE Row, Col
DO CASE
    CASE Which = PANEL_LEFT
        Col = 0
    CASE Which = PANEL_RIGHT
        Col = 40
ENDCASE
SET COLOR TO BG+/B
@1,Col SAY "╔════════════╤═════════╤════════╤══════╗"
Row = 2
DO WHILE Row <= 12
    @Row,Col SAY "║            │         │        │      ║"
    Row = Row + 1
ENDDO
@13,Col SAY "╟────────────┴─────────┴────────┴──────╢"
@14,Col SAY "║                                      ║"
@15,Col SAY "╚══════════════════════════════════════╝"
SET COLOR TO
RETURN

En el código se han usado directamente los códigos ASCII extendidos expuestos en la tabla para dibujar los contornos del panel, en lugar de hacerlo por medio de una función como CHR y con los códigos numéricos, o usando otros métodos, puesto así podemos tener una idea de cómo se verá el panel en pantalla con sólo mirar el código fuente del programa.

El procedimiento estará contenido en un archivo nombrado TUI.PRG, donde se irán reuniendo todos los procedimientos relacionados con la interfaz de usuario del programa, y será llamado desde el bucle principal u otras partes del software contenido a su vez en el archivo NC-FOX.PRG.

En general el código estará distribuido en una serie de archivos o módulos, de modo esté más organizado, de lo cual vamos a comentar un poco a continuación.


Módulos principales del sistema NC-FoxBASE

Los módulos principales del gestor serán como se lista abajo, si bien esto podría cambiar un poco si después resulta más conveniente otro arreglo:

  • NC-FOX.PRG → programa principal, variables globales o constantes, inicialización, bucle principal y control de teclado.

  • PANEL.PRG → gestión de paneles.

  • FS.PRG → operaciones con archivos y directorios.

  • TUI.PRG → presentación de la interfaz de usuario en modo texto.

  • VIEWER.PRG → visor simple de archivos.

  • CONFIG.PRG → persistencia de preferencias (para más adelante).

En cada uno de esos archivos se implementarán las funciones para cada tarea relacionada con cada módulo tal como se especificó antes.

En cuanto a la estructura de directorios, FoxBASE no permite utilizar con facilidad archivos .prg distribuidos en distintos directorios, por lo cual todos los archivos de esa índole estarán en un mismo directorio, incluso cuando exitirá una estructura para separar distintos archivos para otros usos.


El módulo principal NC-FOX.PRG

Por fin nada más nos resta escribir un poco de código en NC-FOX.PRG, desde donde como se ha dicho llamaremos a ShowPanel para mostrar los paneles en pantalla.

El código en dicho módulo se lista a continuación, si bien como es natural, allí se agregará más código a medida se desarrolle el software:

SET STATUS OFF
SET SCOREBOARD OFF
SET TALK OFF
SET COLOR TO
CLEAR
*Declaración de variables globales (usadas como constantes)
*Identificador de panel
PUBLIC PANEL_LEFT
PUBLIC PANEL_RIGHT
*Identificador de teclas de función
PUBLIC KEY_F10

*Declaraci¢n de variables de módulo
PRIVATE Char

*Inicializando variables globales
PANEL_LEFT = 1
PANEL_RIGHT = 2

KEY_F10 = -9

*Dibujando los paneles 
SET PROCEDURE TO TUI
DO ShowPanel WITH (PANEL_LEFT)
DO ShowPanel WITH (PANEL_RIGHT)
CLOSE PROCEDURE

*Bucle principal del programa
DO WHILE .T.
    Char = INKEY(0)
    DO CASE 
        CASE Char = KEY_F10
            EXIT
    ENDCASE
ENDDO

CLEAR
@12,35 SAY "GOOD BYE"
WAIT
CLEAR ALL
SET COLOR TO
SET TALK ON
SET SCOREBOARD ON
SET STATUS ON
RETURN

El código listado primeramente establece algunos parámetros de configuración del entorno por medio de comandos SET, luego declara algunas variables globales a ser usadas como constantes dado FoxBASE no dispone de estas, y después entra en el bucle principal de donde sólo se saldrá cuando se detecte que se presionó la tecla F10.

El resultado de correr este programa será poder ver en pantalla los paneles propios de Norton Commander como se muestra en la captura expuesta a continuación:

Los paneles de la interfaz de usuario en modo texto de NC-FoxBASE.

En entregas posteriores completaremos la interfaz de usuario en modo texto agregando lo faltante, como es el caso de los menús, la entrada de comandos de DOS, y de la barra inferior con las teclas de función para realizar las distintas operaciones del gestor de archivos.


¿Qué te ha parecido esta parte del artículo?

Tú participación aportando ideas, dando sugerencias, o expresando tu crítica constructiva a través de tus comentarios, es importante para lograr nuestro objetivo de recrear un gestor de archivos retro estilo Norton Commander.

También es importante tu voto si crees vale la pena concederlo.

Me despido deseándoles lo mejor hasta la próxima entrega de esta serie de artículos.

¡Nos vemos en la siguiente parte de este texto!



0
0
0.000
3 comments
avatar

¡Felicitaciones!


Has sido votado por @entropia

Estás participando para optar a la mención especial que se efectuará el domingo 21 de junio del 2026 a las 8:00 pm (hora de Venezuela), gracias a la cual el autor del artículo seleccionado recibirá la cantidad de 1 HIVE transferida a su cuenta.

¡También has recibido 1 ENTROKEN! El token del PROYECTO ENTROPÍA impulsado por la plataforma Steem-Engine.


1. Invierte en el PROYECTO ENTROPÍA y recibe ganancias semanalmente. Entra aquí para más información.

2. Contáctanos en Discord: https://discord.gg/hkCjFeb

3. Suscríbete a nuestra COMUNIDAD y apoya al trail de @Entropia y así podrás ganar recompensas de curación de forma automática. Entra aquí para más información sobre nuestro trail.

4. Visita nuestro canal de Youtube.

Atentamente

El equipo de curación del PROYECTO ENTROPÍA

0
0
0.000
avatar

Thanks for your contribution to the STEMsocial community. Feel free to join us on discord to get to know the rest of us!

Please consider delegating to the @stemsocial account (85% of the curation rewards are returned).

Consider setting @stemsocial as a beneficiary of this post's rewards if you would like to support the community and contribute to its mission of promoting science and education on Hive. 
 

0
0
0.000
avatar

Congratulations @retrotech-cuba! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s)

You received more than 3000 upvotes.
Your next target is to reach 3250 upvotes.

You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

0
0
0.000