domingo, 9 de outubro de 2016
Introdução a ncurses em C !
às
18:07
Postado por
mundounix
Intrudução ( hmm... ) a ncurses em C ... bom logo na imagem acima você vera um exemplo de um "menu" feito em ncurses ... ncurses é uma biblioteca que lhe fornece um API pare desenvolvimento de interfaces em modo texto ... é muito usado na maioria dos scripts para linux hoje em dia ...
Um bom exemplo é as man-pages do linux .
PS : O'que sera apresentado nesse texto foi testado nas distribuições manjaro e ubuntu usando o compilador gcc ... o procedimento dependendo da sua distribuição podera mudar um pouco ( somente na instalação da biblioteca ncurses )
PS/2 : Esse post tem próposito de apenas passar conhecimento , as explicações contidas aqui seram focadas principalmente em tentar alcançar a todos os leitores, fontes para estudos e links estarão no final do post!
Bom, para programar algo usando ncurses primeiramente tera que instalar a biblioteca ncurses no seu sistema caso não tenha instalada...
OBS : Algo importante , ao compilar um programa que utiliza essa biblioteca caso você use o gcc , tera que utilizar o parametro "-lncurses" como no exemplo abaixo :
gcc prog.c -o prog -lncurses
Bom , vamos aos nossos primeiros passos com essa excelente biblioteca tendo em mente que você ja tenha tudo instalado e pronto ...
Primeiramente e algo que é bem obvío , tera que adicionar ao seu script o header ncurses.h no caso #include <ncurses.h>
Bom ... para iniciar o modo "curses" ( inciar a lib ) teremos que usar a função
initscr();
Logo para fechar a lib , teremos que usar a função endwin();
O nósso codigo devera ficar entre essas duas funções ... vamos a um classico hello world utilizando essa lib...
<-- code
#include <ncurses.h>
int main(void){
initscr();
printw("Hello world");
endwin();
}
--- >code
Não parece tão dificil certo ? quase a mesma coisa que programar em C ! bem , ao compilar esse codigo , no caso gcc prog.c -o prog -lncurses ... você não vera quase nada ... porque ?
Bem, porquê o programa ira executar em uma velocidade alta ... teremos que interromper o programa para podermos ver claramente o hello world ... podemos usar a função getch(); pra isso...
O'que getch(); faz ? ele interrompe a execução do programa e vira esperando você digitar um tecla , sem a necessidade de você apertar ENTER ( creio que alguns pensaram em montar "keyloggers" agora haha ) ...
Bem , o nósso código ficara da seguinte forma...
<---code
#include <ncurses.h>
int main(void){
initscr();
printw("Hello world");
getch();
endwin();
}
-->code
Vamos a uma breve print a quem está aqui apenas para a prender e não tem os requesitos para testar ...
Perceberam que todo o espaço do terminal está reservado para o'que imprimirmos na tela ? bom , por várias vantagens que essa lib traz tem pessoas que criam até jogos encima dela ( eu ja fui um desses ) , é realmente bem bacana... mas continuando ...
Existe tambem uma função muito legal que você pode imprimir um ou mais caracters em uma determinada "posição" do terminal baseda em altura e largura...
essa função é semalhante a printw e se chama mvprintw();
Sua sintaxe é mvprintw(altura,largura,"sua frase ou caracter");
vamos a um exemplo de como ficaria com um print de resultado ...
<---code
#include <ncurses.h>
int main(void){
initscr();
mvprintw(10,10,"Hello world, Aqui eh da Mundo Unix!");
getch();
endwin();
}
-->code
Olhem o resultado abaixo !
Outra função interessante ... é chamada noecho(); se você ja usou a função getch(); mais de uma vez no mesmo script , percebeu que ao digitar uma tecla , ela ira aparecer na tela ... mas caso você não queira isso ? queira apenas que o script pegue a tecla digitada ? ae entra a utilidade da função noecho(); basta usar ela antes da função getch(); que o caracter não sera imprimido!
Bom , mas, vamos partir então para o sistema de coloração ... digamos que você queira selecionar cores expecificas para letra e fundo do terminal , como fica ?
Bem , veremos isso então !
primeiramente para iniciar o sistema do cores da biblioteca ncurses, você devera usar a função start_color();
logo depois para selecionar as cores que você quer aplicar ira usar a função init_pair(); e sua sintaxe é :
init_pair(short pair, cor da letras, cor de fundo);
short pair ? o'que diabos é isso ? vamos chamar de id então...
Digamos que a função init_pair(); possa ser usada várias vezes ... por exemplo...
init_pair(1,COLOR_RED,COLOR_GREEN);
init_pair(2,COLOR_GREEN,COLOR_BLACK);
init_pair(3,COLOR_BLUE,COLOR_BLACK);
E você pode selecionar qualquer um desses esquemas de cores apenas pelo seu id , utilizando a função attron();
a sua sintaxe é attron(id);
esse id é o id do init_pair(); que você quer ... se lembra que tinhamos definidos 3 ? e cada um tinha um numero como 1,2,3 ? então , podemos escolher qualquer um desses esquemas de cores para aplicar ...
vamos escolher um no caso... então por exemplo ficaria...
attron(COLOR_PAIR(1));
Lembrando que attron(COLOR_PAIR(1)); só ira aplicar cor as legras e ao cursos ...
Para aplicar cor ao fundo, usamos a função bkgd(COLOR_PAIR(1));
E agora veremos como o codigo ficaria !
<--code
#include <ncurses.h>
int main(void){
initscr();
start_color();
init_pair(1,COLOR_RED,COLOR_GREEN);
init_pair(2,COLOR_GREEN,COLOR_BLACK);
init_pair(3,COLOR_BLUE,COLOR_BLACK);
attron(COLOR_PAIR(1));
bkgd(COLOR_PAIR(1));
mvprintw(10,10,"Hello world, Aqui eh da Mundo Unix!");
getch();
endwin();
}
-->code
Print do resultado abaixo !
Bom , algumas utilidades agora ... existem 2 macros bem uteis que determinam o tamanho e largura da janela do terminal ...
Essas macros são LINES ( altura ) , COLS ( largura )...
Para medir o tamanho da janela do nosso terminal poderiamos usar o essas macros da seguinte forma !
<--code
#include <ncurses.h>
int main(void){
initscr();
start_color();
mvprintw(2,5,"Altura : %i",LINES);
mvprintw(3,5,"Largura : %i",COLS);
getch();
endwin();
}
-->
O resultado abaixo :
Como pode ver ele me retornou o valor altura 34 e o valor de largura 40 ...
Essas macros são bem uteis caso você queira criar janelas usando ncurses ou até mesmo centralizar algo na tela ...
Logo com o seguinte codigo : int algura = LINES / 2; int largura = COLS / 2;
Você tem o os valores de altura e largura correspondentes ao centro da tela :)
Bem , eu vou parando por aqui ... lembrando que essa é apenas uma introdução , em proximos post's pretendo trazer mais conteudo sobre essa biblioteca , como a criação de janelas, menus e até uns exemplos de alguns jogos utilizando ncurses =)
Fontes para estudo --
Link1 ( ingles ) : http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/
Link2 ( pt-br ) : https://www.vivaolinux.com.br/artigo/Utilizando-a-biblioteca-NCURSES-Parte-I
Link3 ( ingles ) : http://pubs.opengroup.org/onlinepubs/7908799/xcurses/curses.h.html
Notou algo errado ou incorreto nesse post ? Nos informe -> Aqui!
Obrigado a todos que leram até aqui .
Assinar:
Postar comentários (Atom)
Tecnologia do Blogger.
Popular Posts
-
Intrudução ( hmm... ) a ncurses em C ... bom logo na imagem acima você vera um exemplo de um "menu" feito em ncurses ... ncurs...
-
Falae pessoal , dessa vez eu não vim aqui explicar algo e sim mostrar algo que eu até uns tempos não conhecia e achei que seria legal...
-
Ofuscação de código C #1 : Trígrafos Eae pessoal ! tudo na paz ? bom faz alguns dias...
-
CyberSecurity 1 -Criação de Shellcode/payload /* * Obrigado a todos que estiveram comigo até aqui. * S4n1 ...
-
/* Um código que funciona nem sempre é um bom código , essa é a essencia da falta de segurança hoje em dia ... */ Hello !!! sou eu de n...
-
Fala ae pessoal, para os que acompanham ou não isso aqui ... ta vendo aquilo la encima ? la encima do post ? sim o "part.1" ,...
-
Mundo-unix & Extreme Fall - Parceria ... PS : Primeiramente desculpem por passar alguns dias OFF se...
-
Canal irc da mundo-unix Bom pra quem nos visita aqui na mundo-unix todo dia , talvez tenha no...
-
Bem , vim introduzir ( hmm ... ) a mundo unix e falar um pouco a respeito do blog para quem é novo aqui, e para quem acompanha ou tem...
-
Desenvolvimento de backdoors com PHP Putsss eu juro que ia escrever sobre outra coisa ! esse artigo era...





0 comentários:
Postar um comentário