Introdução ao Dark Basic

Novembro 2016


Introdução


Por que escolher DarkBASIC ao invés de uma linguagem POO?
DarkBASIC est simplifié, par rapport aux langages POO (Programmation Orientée Objet) et vous fera gagner un temps précieux, mais perd bien sûr grandement en flexibilité.
DarkBASIC é simplificado, em comparação com as linguagens POO (Programação Orientada a Objetos) e você vai economizar um tempo precioso mas, obviamente, perderá em flexibilidade.
Ele é quase semelhante ao Batch (para mostrar a simplicidade).
Concluindo, prefira uma linguagem POO que o DarkBASIC para trabalhar arduamente, mas com segurança; porém, prefira o DarkBASIC para obter uma abordagem da programação.

Como você deve saber, originalmente a linguagem DarkBASIC era utilizada para criar jogos.
Este tutorial não explica isso, porque existem ajudas disponíveis neste software para isso.
Este tutorial vai te explicar as bases sobre como usar o DarkBASIC como um verdadeiro software.
Este tutorial também requer uma boa base em programação.

1. O início do código


O início do código começa com a exibição da janela.
No arranque, um programa compilado em DarkBASIC iniciará em tela cheia e exigirá a d3drm.dll que é geralmente indisponível no Windows Vista.
Você já deverá ter uma ideia do que você quer que apareça na tela.
O DarkBASIC utiliza o rem (como em Batch) para postar um comentário.
Veja como fica o início do código EDPLN 2:
set window on 
set window layout 1,1,1 
set window title "Sistema de backup por cópia (1.1)" 
show window 
show mouse 
disable escapekey 
sync on 
gosub start 
end

Se você for forte o suficiente em Inglês ou em programação, você já entendeu do que se trata.
Estas funções também são explicadas na Ajuda.
Mas vou explicar assim mesmo:
Na inicialização, esse código exibirá uma janela com o título EDPLN 2 Freeware SE, exibirá o mouse e desativará a tecla Esc para sair do programa.
Quanto ao resto, você deve saber o que o seu programa vai fazer.

2. O corpo do código


Eu escolhi o melhor: Um programa que faz backup dos arquivos do PC em um disco removível.

2.1 Os menus


Então, como isso é software, o usuário deve ter um mínimo de escolha, como, por exemplo, um menu.
Este menu irá exibir essas opções como um script Batch: A para salvar, B para definir um filtro, C para selecionar o caminho de saída, Q para sair.
Para começar, este código vai precisar de um loop principal: aqui, é o Do/Loop.
Neste loop, vamos recuperar, em primeiro lugar, os dados (ações) do usuário, em seguida, usá-los para executar o programa.
Assim, teremos de recuperar as letras do teclado (entrada), analisá-los e usá-los.
Este código deverá ser escrito assim (sem esquecer de criar o começo do código antes):
start: 
rem Definição dos valores padrão 
access$="E:\" 
rem Início do loop principal 
do 
cls 0 

rem print Para exibir textos na tela (e não para imprimir) 
print "Utilitário de backup de arquivos." 
print " " 
print "A para salvar, B para definir um filtro, C para mudar o caminho de saída, Q para fechar." 

rem Solicita um valor ao usuário e o salva como key$ 
input "Escolha a ação a ser feita e pressione a tecla Enter > ",key$ 

rem Análise dos dados recebidos 
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 "Favor selecionar uma escolha válida": sleep 2000 : gosub start 
rem A linha anterior exibe uma mensagem de erro por 2 segundos e depois volte ao início, se a escolha for inválida. 
rem eu não me esqueci, na linha anterior, de analisar as maiúsculas e minúsculas.
rem Outra solução seria transformar key$ em maiúsculas minúsculas para encurtar o código.
rem Agora que a análise foi feita, use os dados.
rem Vamos começar vendo se a primeira escolha foi feita:

if key$="a" or key$="A" then gosub save 
rem Se a escolha for A ou a, vamos salvá-la. 

if key$="b" or key$="B" then gosub opção1 
rem Idem para o B, vamos chegar no submenu opção 1 

if key$="c" or key$="C" then gosub opção2
rem Idem para o C para chegar no submenu opção2

if key$="q" or key$="Q" then end 
rem Aqui, vimos que, se a escolha for Fechar, o programa fechará sem aviso prévio. 

remAgora que as derivações foram feitas, fechamos o ciclo por segurança (o que vai nos salvar, você o verá caso execute esse código no final).
loop 
return

Pronto, você tem um menu simples que você poderá mudar em sua casa, adicionar escolhas, etc, etc...
Mas você vai me dizer: não funciona aqui?!? Bem, não...
Porque nós ainda não criamos as subfunções (sub- functions).
... ainda não entendeu? bom, você já viu, durante a análise das escolhas esses gosub, eles servem para mover para uma sub-função.
Mas como as nossas sub-funções não existem, o compilador está perdido...

Então, vamos criar estas subfunções.

2.2 As subfunções


Neste código, há quatro sub-funções, incluindo uma que já foi feita (logo no início do último código avaliado acima ... a famosa start:)
Devemos acabar de escrever as 3últimas sub-funções.
Então, já tem a primeira subfunção: opção1 que será o local onde você escolherá os filtros.
As subfunções não se colocam em qualquer lugar, o melhor é criar no final do código. Isso pode retardar a execução do código, mas veremos no final como corrigí-lo.
Neste subfunção, haverá o mesmo princípio que o start:
(Início do loop, exibição da interface, recuperação dos dados, análise dos dados, execução final, final do loop).
Nesta subfunção também será usada uma tabela... como um banco de dados.

Então, vamos fazer tudo isso :p
opção1: 
do 
cls 0 
print "Menu de filtragem de arquivos" 
print " " 
input "Favor entrar um  nome de arquivos a serem excluídos ou '/' para fechar",next$ 
rem Aqui, vamos criar uma tabela chamada exclude$ podendo conter 255x1 dados, seja 255 :p 
dim exclude$(255,1) 

rem Vamos analisar os dados... 
if next$="/\" or next$=chr$(34)+"/\"+chr$(34) then exit 
rem Nesta análise de dados, fazemos o usuário voltar ao menu principal, a seu pedido
rem saindo do loop com sucesso. 
remAgora, preenchemos a tabela com outro loop: for, to, next.

   for nb#=1 to 255 

      rem Vamos analisar se o lugar está livre 
      if exclude$(nb#,1)="" then exclude$(nb#,1)=next$ : exit 
      remSó preenchemos o lugar se ele estiver livre, depois saimos do loop. 
      next nb# 
      rem Mas... e se a tabela estiver cheia?!? 
     rem Agora você já sabe como analisar dados, boa sorte^^ 
      rem Então, agora vamos fechar o loop 
      loop 
     rem E vamos assinalar ao compilador que a subfunção para aqui, para que ele possa voltar ao  menu principal. 
     return

Para a próxima subfunção, opção2, começaremos exibindo o caminho de saída em curso (por padrão) F:\
Depois, perguntaremos ao usuário se ele realmente quer modificar o acesso.
Com um sim, entramos o novo valor usado pelo Access$
Com um não, voltamos ao menu principal.

Não deverá ser muito difícil :p
opção2: 
do 
cls 0 

print "Mudar a saída da cópia." 
print " " 
print "Caminho de saída em curso: "+access$ 
input " Você realmente quer mudar o caminho de acesso? (s : sim / n : não) >",choice$ 

if choice$<>"s" and choice$<>"S" and choice$<>"sim" and choice$<>"Sim" and choice$<>"SIM" and choice$<>"n" and choice$<>"N" and choice$<>"não" and choice$<>"Não" and choice$<>"NÃO" 
   print "Escolha inválida." 
   sleep 2000 
   gosub option2 
endif 

if choice$="s" or choice$="S" or choice$="sim" or choice$="Sim" or choice$="SIM" 
   input "Favor entrar outro caminho de acesso >",access$ 
  else 
   exit 
  endif 
  loop 
  return


Prontinho... bem simples... eu acho que não preciso explicar pois você deve saber do que se trata.
Aliás, eu acho que poderá criar a sua própria subfunção, que servirá para definir o/os caminho(s) de acesso da fonte da cópia.

Mais... não fique aliviado tão rápido: ainda não acabou... :-/

Ainda falta a subfunção fundamental para o uso do código: "save", que vai nos ajudar a fazer cópias de segurança.
É o mestre, o gigante ... a Rainha...
Bom, chega de "brincadeira": vamos terminar este código.

Mas ... me diga... o DarkBASIC não permite copiar arquivos? não ... arquivos sim, mas pastas não...
Ho não ... é o apocalipse, o fim do mundo! Mas como vamos fazer?!?
Uma técnica simples consiste na utilização de outro código capaz de fazê-lo, aqui usaremos o Batch.
Mas ... você não conhece necessariamente o Batch ... mas não importa, existem tutoriais no mundo da Internet.
Então, vamos usar o DarkBASIC para gravar um arquivo Batch e executá-lo mais tarde.
Felizmente, para nós que o Batch não precisa ser compilado para ser executável^^

Vamos, portanto, proceder da seguinte forma:
save: 
cls 0 

print "Sistema de backup por cópia" 
print " " 
print "Fonte : "+get dir$() 
print "Destino: "+access$ 
print "Você realmente quer copiar a pasta" 
input "em curso para "+access$+" ? (s : sim / n : não)>",choice$ 

if choice$<>"s" and choice$<>"S" and choice$<>"sim" and choice$<>"Sim" and choice$<>"SIM" and choice$<>"n" and choice$<>"N" and choice$<>"não" and choice$<>"Não" and choice$<>"NÃO" 
   print "Escolha inválida." 
   sleep 2000 
   gosub save 
endif 

rem Fechamento de qualquer arquivo aberto. 
if file open(1)=1 then close file 1 

rem Remoção de qualquer arquivo já  existente com o mesmo nome. 
if file exist("code.bat")=1 then delete file "code.bat" 

rem Criação e abertura de um arquivo Batch (.bat) 
open to write 1,"code.bat" 

rem Gravação do 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 Agora que o código foi criado, vamos executá-lo... 

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

rem não é 100% certo de que esta operação funcione :s
rem Nossa aplicação vai esperar a cópia terminar para continuar.
rem Só serão copiados os arquivos e subpastas do diretório atual do código DarkBASIC.

print "Quando a cópia terminar, você poderá continuar. Utilize CTRL+C na janela" 
print "MS-BATCH (preto) para parar sua execução corretamente". 
sync 

rem O bloco seguinte permitirá esperar uma reação da parte do usuário. 
while scancode=0 
endwhile 

rem E pronto, é o fim do código... 
return


Agora vamos ver tudo o que você aprendeu aqui :p

3. Resumindo


Então você "aprendeu" :
  • 1) O uso do agoritmo (de uma certa maneira)
  • 2) A chamada de uma função do compilador (lógica)
  • 3) Fazer aparecer uma janela na tela.
  • 4) A criação de um menu principal com 3 submenus.
  • 5) A chamada das cubfunções (sub-functions)
  • 6) A análise de dados.
  • 7) A recuperação de dados.
  • 8) O uso de uma tabela (visto rapidamente, confesso)
  • 9) A gestão de um arquivo com segurança.
  • 10) Uma pequena utilização do Batch ...


Você deve ter notado que o código está incompleto ... desculpe ...


Tradução feita por Lucia Maurity y Nouira

Veja também :
Este documento, intitulado « Introdução ao Dark Basic »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.