Muitas vezes, uma boa opção é dividir um programa em módulos (biblitotecas/libs) que podem ser acessadas por qualquer outro programa prisma. Isso diminui a complexidade de um grande projeto.
Módulos ou bibliotecas são arquivos que contém funções para ser compartilhadas pelos programas que as chamam.
Os módulos podem ser acessados com o comando inclua’nome’;
Assim como fazemos com o igbr: inclua “igbr”; e após isso as funções do módulo igbr.pris estão disponíveis para o programa que o chamou.
Vamos começar então!
Crie dois arquivos com o prismacod ou geany, ou qualquer outro editor de sua preferência, na mesma pasta:
programa.prisma e minhalib.pris
em minhalib.pris cole o seguinte código:
1 2 3 4 5 |
funcao bemvindo() imprima"Bem vindo ao módulo minhalib"; fim |
Salve. Agora em programa.prisma cole outro código:
1 2 3 4 5 |
inclua"minhalib"; //o parâmetro é o nome de sua lib sem a extensão .pris bemvindo(); leia(); |
Simples não é? Ao colocar o comando inclua’minhalib’ o interpretador prisma procura nos diretórios padrões /clibs e /plibs como não encontra ele passa a procurar na mesma pasta do programa.prisma sendo executado. Assim prisma carrega a lib e a função passa a ser acessada pelo programa.prisma.
USANDO NAME SPACES; (MÉTODOS)
Lembra dos comandos ig ? ( ig.botao , ig.janela ). Vamos fazer o mesmo com a lib anterior, vamos colocar a função em uma tabela, veja:
Altere os programas anteriores:
minhalib.pris :
1 2 3 4 5 6 7 8 |
local mlib = {}; //criando a tabela local funcao mlib.bemvindo() // colocando a função como um campo da tabela usando o ponto imprima"Bem vindo ao módulo minhalib"; fim retorne mlib; //retornando a tabela, uma biblioteca é como uma função, retorna valores. |
programa.prisma
1 2 3 4 5 |
blib = inclua"minhalib"; //carrega na variavel blib o retorno de minhalib.pris blib.bemvindo(); leia(); |
Note que criando uma tabela local na biblioteca ela não é acessada diretamente pelo programa que a chama, precisa ser carregada em uma variável.
Se não quiser que isso aconteça retire a palavra chave local na criação da tabela na biblioteca:
1 2 3 4 5 6 7 8 |
mlib = {}; //criando a tabela global funcao mlib.bemvindo() // colocando a função como um campo da tabela usando o ponto imprima"Bem vindo ao módulo minhalib"; fim retorne mlib; //retornando a tabela, uma biblioteca é como uma função, retorna valores. |
programa.prisma
1 2 3 4 5 |
inclua"minhalib"; //carrega na variavel blib o retorno de minhalib.pris mlib.bemvindo(); leia(); |
Dicas:
1 – O caminho padrão para as bibliotecas prisma são:
C:\Prisma\1.0\bin\plibs\ ( No Windows)
/usr/local/share/prisma/1.0/plibs (No linux)
As bibliotecas em C trataremos adiante, usamos o mesmo comando inclua para elas, mas o processo é diferente.
Logo basta colocar sua biblioteca nesta pasta que qualquer outro programa prisma poderá ter acesso a ela.
2 – As extensões que são reconhecidas pelo comando inclua são:
*.pris — tanto no Windows quanto no Linux
*_pris.dll — no Windows;
*_pris.so — no Linux;
Basta compilar normalmente com o prismac.exe, usando prismacod ou geany. E depois renomear para estas extensões.
Geany tem a opção no menu construir -> COMPILAR_LIB_PRISMA que gera um arquivo _pris.dll no Windows ou _pris.so no linux.
4 – Se você usar o Auto interpretador (prismaAuto)
Você deve copiar as pastas clibs e plibs para o mesmo local do auto interpretador se seu programa usa as libs padrões Prisma.
5 – Você pode mudar o caminho padrão de busca das bibliotecas modificando duas variáveis predefinidas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//salvando as variáveis antigas se caso precisar delas depois: local plib_antigo = pacote.path; local clib_antigo = pacote.cpath; //caminho para os modulos na linguagem C; //modificando: pacote.path = "Caminho/novo/?.pris"; //o sinal ? simboliza o nome do arquivo sem extensão. pacote.cpath = "Caminho/novo/?.dll;Caminho/novo/?.so"; //mais de um caminho separe por ponte-e-vírgula //teste: inclua'naoexiste'; |
Atenção, se você estiver no Windows, user barras invertidas:
1 |
"Caminho\\novo\\?.dll;Caminho\\novo\\?.dll" |
saídas :
stdin:1: module ‘naoexiste’ not found:
no field package.preload[‘naoexiste’]
no file ‘Caminho/novo/naoexiste.pris’
no file ‘Caminho/novo/naoexiste.dll’
no file ‘Caminho/novo/naoexiste.so’
stack traceback:
[C]: in funcao ‘inclua’
stdin:1: in trecho de codigo principal
[C]: in ?
No teste incluímos uma lib que não existe só para ver os caminhos na mensagem de erro.