Introducción a Dark Basic

Noviembre 2016


Introducción


¿Por qué elegir DarkBASIC en lugar de un lenguaje POO?
DarkBASIC es más sencillo en relación a los lenguajes POO (Programación Orientada a Objetos) y te hará ganar un tiempo precioso, pero a costa de perder flexibilidad.
Es casi similar al Batch
En conclusión, utiliza mejor un lenguaje POO en lugar de DarkBASIC para un trabajo duro pero de forma segura, pero utiliza DarkBASIC para tener un acercamiento a la programación.

Por si no lo sabes inicialmente el lenguaje DarkBASIC se utilizaba para crear juegos.
Este tutorial no te explicará eso, ya que puedes utilizar ayuda al respecto en el programa. Lo que este tutorial te explicará son los conocimientos básicos para saber utilizar DarkBASIC como un verdadero programa.

Este tutorial requiere también buenas bases de programación.


1. El inicio del código


El inicio del código comienza con la visualización de la ventana.
Al iniciar, un programa compilado en DarkBASIC iniciara en pantalla completa y necesitará la d3drm.dll que por lo general no esta disponible en Windows Vista.
Por lo tanto, es necesario que ya tengas una idea de lo que deseas que aparezca en la pantalla.
DarkBASIC utiliza el rem (como en Bath) para mostrar un comentario.

A continuación puedes ver como es el inicio de código de EDPLN 2:
set window on
set window layout 1,1,1
set window title "Sistema de registro por copia (1.1)"
show window
show mouse
disable escapekey
sync on
gosub start
end


Si dominas inglés o programación, ya te habrás dado cuenta de que se trata. Estas funciones también están explicadas en la ayuda. Pero igual lo veremos aquí:

al iniciar, este código muestra una ventana con el titulo EDPLN 2 Freeware SE, mostrara el ratón y desactivara la tecla Echap para abandonar el programa.

A continuación, deberás saber lo que va a hacer el programa.

2. El cuerpo del código


He elegido algo ideal: Un programa que guarde los archivos del PC en un disco extraíble.

2.1 Los menús


Como este es un programa, es necesario que el usuario tenga un mínimo de opciones, como por ejemplo un menú.

Este menú mostrara estas opciones al igual que un script Batch: A para guardar, B para definir un filtro, C para elegir la ruta de salida, Q para salir.

Para comenzar este código necesitará un bucle principal: aquí, Do/Loop.
En este bucle, primero vamos a obtener los datos (actions) del usuario, luego utilizaremos estos para hacer funcionar el programa.
Entonces, necesitaremos obtener las letras del teclado (input) y analizarlas, luego utilizarlas.

Este código debería escribirse como sigue (sin olvidar crear el inicio del código):

start:
rem Definición de los valores predeterminados
access$="E:\"
rem Inicio del bucle principal
do
cls 0

rem print Para mostrar texto en pantalla (y no para imprimir)
print "Utilidad para guardar archivos."
print " "
print "A para guardar, B para definir un filtro, C para cambiar la ruta de salida, Q para salir."

rem Solicita un valor al usuario y lo registra en key$
input "Seleccione la acción a realizar y presione Enter > ",key$

rem Analises de datos recibidos
if key$<>"A" and key$<>"a" and key$<>"B" and key$<>"b" and key$<>"C" and key$<>"c" and key$<>"Q" and key$<>"q" then print "Elija una opcion valida." : sleep 2000 : gosub start
rem La línea anterior muestra un mensaje de error durante 2 segundos luego retorna al inicio si la opción no es valida.
rem No olvide en la línea anterior analizar las minúsculas y mayúsculas.
rem Otra solución habría sido transformar key$ en minúsculas/mayúsculas para reducir el código.

rem Ahora que el análisis ha sido hecho, necesitamos utilizar los datos.
rem Vamos a comenzar por ver si la primera opción ha sido hecha:

if key$="a" or key$="A" then gosub save
rem Si la opción fue A o a, entonces se guardara.

if key$="b" or key$="B" then gosub option1
rem Lo mismo para B, entramos al submenú opcion1

if key$="c" or key$="C" then gosub opcion2
rem Igualmente para C para entrar al submenú opcion2

if key$="q" or key$="Q" then end
rem Aquí, hemos visto que si la opción era salir, el programa saldrá sin avisar.

rem Ahora que las derivaciones han sido hechas, cerramos el bucle por medida de seguridad (lo que nos salvara, lo veras si ejecutas este código cuando hayamos terminado)
loop
return


Listo, tienes un menú simple que podrás cambiar, agregar opciones…
Pero quizás me digas, esto no funciona aquí…
Ya que aun no hemos creado las subfunciones.

Habrás visto durante el análisis de las opciones estos gosub, estos sirven para desplazarse hacia una subfunción.

Pero como nuestras subfunciones no existen, el compilador esta perdido…

Por lo tanto vamos a crear estas subfunciones.

2.2 Las subfunciones


En este código hay 4 subfunciones, entre estas una que ya la hemos hecho (al inicio del ultimo código evaluado aquí arriba…el famoso Start:)
Es necesario terminar de redactar las 3 últimas subfunciones.

Por lo tanto, ya tenemos la primera subfunción: opcion1 que será el lugar donde elegiremos los filtros.
Las subfunciones no se colocan en cualquier lugar, lo mejor es crearla al final del código. Esto puede ralentizar la ejecución del código, pero veremos al final como solucionarlo.

En esta subfunción, habrá el mismo principio que Start:
(Inicio del bucle, visualización de la interfaz, obtención de los datos, análisis de datos, ejecución final, fin del bucle)

En esta subfunción habrá también el uso de una tabla…como una base de datos.

Por lo tanto, vamos a hacer todo eso:p
 option1:
do
cls 0
print "Menu filtrado de archivos"
print " "
input "Entre un nombre de archivo a excluir o '/' para salir",next$
rem Aquí, vamos a crear una tabla llamada  exclude$ que puede contener 255x1 datos, es decir 255 :p
dim exclude$(255,1)

rem Analizamos los datos...
if next$="/\" or next$=chr$(34)+"/\"+chr$(34) then exit
rem Durante este análisis de datos, hemos hecho retornar al menú principal al usuario sobre su solicitud
rem saliendo del bucle con exit.
rem Ahora, rellenamos la tabla utilizando otro bucle: for, to, next

   for nb#=1 to 255

      rem Analizamos si el lugar esta libre
      if exclude$(nb#,1)="" then exclude$(nb#,1)=next$ : exit
      rem Rellenamos el lugar solo si esta libre luego salimos del bucle.

   next nb#
rem Pero... y si la tabla esta llena?
rem Ahora ya sabes como analizar datos, buena suerte.

rem Ahora cerramos el bucle
loop
rem E indicamos al compilador que la subfunción se detiene aquí, para que pueda retornar al menú principal.  
Return


Para la próxima subfunción, opcion2, será necesario comenzar mostrando la ruta de salida actual (por defecto) F:
Luego, se pregunta al usuario si desea realmente modificar el acceso.
Con un si, le hacemos entrar el nuevo valor explotado por access$
Con un no, retornamos al menú principal.

Esto no debería ser muy difícil :p
option2:
do
cls 0

print "Cambiar la salida de copia."
print " "
print "Ruta de salida actual: "+access$
input "Realmente desea cambiar la ruta de acceso? (s : si / n : no) >",choice$

if choice$<>"s" and choice$<>"S" and choice$<>"si" and choice$<>"Si" and choice$<>"SI" and choice$<>"n" and choice$<>"N" and choice$<>"no" and choice$<>"No" and choice$<>"NO"
   print "Elección invalida."
   sleep 2000
   gosub option2
endif

if choice$="s" or choice$="S" or choice$="si" or choice$="Si" or choice$="SI"
   input "Entre una nueva ruta de acceso >",access$
else
   exit
endif
loop
return


Y listo…todo fácil…No os he explicado ya que deberíais saber lo que pasa.
Por otro lado podéis crear vuestra propia subfunción que servirá para definir la/las ruta(s) de acceso a la fuente de la copia.

Pero aun no hemos terminado…

Aun nos falta la subfuncion fundamental al uso del código: sabe, que nos servirá para hacer copias de seguridad.

DarkBASIC permite copiar archivos pero no carpetas. Sin embargo podemos utilizar una sencilla técnica que consiste en utilizar otro código capaz de hacerlo, aquí utilizaremos el Batch.
Pero…quizás no conozcas el Batch…no hay problema, existen tutoriales en la web.

Por lo tanto utilizaremos DarkBASIC para escribir un archivo Batch y ejecutarlo luego.
Felizmente el Batch no requiere ser compilado para ser ejecutable.

Entonces procederemos como sigue:

save:
cls 0

print "Sistema de registro por copia"
print " "
print "Fuente: "+get dir$()
print "Destino: "+access$
print "Realmente desea copiar la carpeta"
input "en curso hacia "+access$+" ? (s : si / n : no)>",choice$

if choice$<>"s" and choice$<>"S" and choice$<>"si" and choice$<>"Si" and choice$<>"SI" and choice$<>"n" and choice$<>"N" and choice$<>"no" and choice$<>"No" and choice$<>"NO"
   print "Choix invalide."
   sleep 2000
   gosub save
endif

rem Cierre de un eventual archivo abierto.
if file open(1)=1 then close file 1

rem Eliminación de un eventual archivo del mismo nombre a uno existente.
if file exist("code.bat")=1 then delete file "code.bat"

rem Creación y abertura de un archivo Batch (.bat)
open to write 1,"codigo.bat"

rem Escritura de código.
write string 1,"@ echo off"
write string 1,"cd "+get dir$()
write string 1,"xcopy "+chr$(34)+get dir$()+chr$(34)+" "+chr$(34)+access$+chr$(34)+" /s /c /q /g /h /x /y"
write string 1,"exit"
close file 1

rem Ahora que el código esta creado, lo ejecutamos...

execute file get dir$()+"code.bat", "", get dir$(), 0

rem No hay 100% de seguridad que esta operación funcione :s
rem La aplicación va a esperar que la copia haya terminado antes de continuar.
rem Únicamente serán copiados los archivos y subcarpetas del directorio actual del codigo DarkBASIC.

print "Cuando la copia haya terminado, podrá continuar. Utilise CTRL+C en la ventana"
print "MS-BATCH (negro) para detener la ejecución."
sync

rem El siguiente bloque permite esperar una reacción del usuario.
while scancode=0
endwhile

rem Y listo, es el final del código...
return


Ahora haremos un resumen de todo lo que has aprendido.

3. Resumen


Has aprendido:
  • 1. El uso del algoritmo
  • 2. El llamado a una función del compilador (lógica)
  • 3. Hacer aparecer una ventana en la pantalla
  • 4. La creación de un menú principal compuesto de 3 submenús.
  • 5. El llamado a subfunciones
  • 6. El análisis de datos
  • 7 La obtención de datos
  • 8. El uso de una tabla
  • 9. La gestión de un archivo en forma segura.
  • 10. Un pequeño uso del Batch…


No obstante el código aun está incompleto…lo siento…

Consulta también :
El documento «Introducción a Dark Basic» de CCM (es.ccm.net) se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo siempre y cuando respetes las condiciones de dicha licencia y des crédito a CCM.