Interface grafica em C (Estilo Dos)

362 views
Skip to first unread message

Marcelo Correa

unread,
Jun 30, 2020, 1:16:29 PM6/30/20
to ccppbrasil
Fala galera!

Alguem pode me explicar ou indicar algum tutorial de como montar uma interface gráfica (linhas, bordas e formas geométricas) do estilo das imagens abaixo usando C? 
Curto pra caramba a estética dessas interfaces e gostaria de implentar em alguns projetos meus.

A interface gráfica do Htop eu tenho certeza que foi feito em C.

Vlw!

qh.gif (640×350) (With images) | Cobol, Retro graphics
Lean Mean Green Screens - IT Jungle
Green-screen dictionary definition | green-screen defined

htop – Wikipédia, a enciclopédia livre

Vinicius Souza

unread,
Jun 30, 2020, 1:32:23 PM6/30/20
to ccppb...@googlegroups.com
Pesquisa ncurses. 

--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------------------------
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~------------
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/ccppbrasil/c39c37e2-4dbe-4fbb-be65-8b7c77c92852o%40googlegroups.com.

Thiago Adams

unread,
Jun 30, 2020, 1:49:57 PM6/30/20
to ccppbrasil


On Tuesday, June 30, 2020 at 2:32:23 PM UTC-3, Vinicius Souza wrote:
Pesquisa ncurses. 


 
ncurses é para linux e você tem as funções para controlar o terminal.
Se quiser algo bem elaborado para linux ncurses é a recomendação.

Antigamente no turbo C, existia um header conio.h que continha algumas
funções simples para trabalhar no console.

Eu implementei um clone do conio.h do turbo C para ser usado
no windows e linux.


Esta lib permite escrever colorido no console limpar, perguntar tecla etc.
(não tem mouse)


Este conceito de terminal é muito antigo.  https://pt.wikipedia.org/wiki/VT100
O que o sistema operacional fazia e ainda faz é emular os terminais antigos como o VT100.

Para enviar os comandos para os terminais se usava(usa) sequencias de comandos
no printf mesmo.

O linux suportava isso a muito tempo mais o windows não. O windows 10 começou a suportar.

Isso quer dizer que para ambos os SO para enviar comandos do tipo mudar cor etc basta usar printf.
Isso torna a minha lib do conio.h desnecessária. Na verdade ela é necessária apenas porque ainda
podemos querer rodar em windows != 10.














Thiago Adams

unread,
Jun 30, 2020, 1:51:06 PM6/30/20
to ccppbrasil
Documentação:


Exemplo windows:

#include <stdio.h>
#include <wchar.h>
#include <windows.h>

int main()
{
    // Set output mode to handle virtual terminal sequences
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE)
    {
        return GetLastError();
    }

    DWORD dwMode = 0;
    if (!GetConsoleMode(hOut, &dwMode))
    {
        return GetLastError();
    }

    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    if (!SetConsoleMode(hOut, dwMode))
    {
        return GetLastError();
    }

    // Try some Set Graphics Rendition (SGR) terminal escape sequences
    wprintf(L"\x1b[31mThis text has a red foreground using SGR.31.\r\n");
    wprintf(L"\x1b[1mThis text has a bright (bold) red foreground using SGR.1 to affect the previous color setting.\r\n");
    wprintf(L"\x1b[mThis text has returned to default colors using SGR.0 implicitly.\r\n");
    wprintf(L"\x1b[34;46mThis text shows the foreground and background change at the same time.\r\n");
    wprintf(L"\x1b[0mThis text has returned to default colors using SGR.0 explicitly.\r\n");
    wprintf(L"\x1b[31;32;33;34;35;36;101;102;103;104;105;106;107mThis text attempts to apply many colors in the same command. Note the colors are applied from left to right so only the right-most option of foreground cyan (SGR.36) and background bright white (SGR.107) is effective.\r\n");
    wprintf(L"\x1b[39mThis text has restored the foreground color only.\r\n");
    wprintf(L"\x1b[49mThis text has restored the background color only.\r\n");

    return 0;
}

Vinicius Souza

unread,
Jun 30, 2020, 1:56:53 PM6/30/20
to ccppb...@googlegroups.com
Com MinGW e WSL às vezes até esqueço que existem libs que não rodam nativamente no windows.

-- Vinicius

--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------------------------
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~------------
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.

Thiago Adams

unread,
Jun 30, 2020, 2:03:37 PM6/30/20
to ccppbrasil


On Tuesday, June 30, 2020 at 2:56:53 PM UTC-3, Vinicius Souza wrote:
Com MinGW e WSL às vezes até esqueço que existem libs que não rodam nativamente no windows.



Eu considero partida ganha do linux sobre o windows. Agora é uma questão 
de tempo. Pelo menos no que diz respeito a APIs.
O que eu faço atualmente é implementar POSIX no windows quando quero deixar o código mais 
independente de plataforma ou linux.
Exemplo é a strdup.


O windows tem um warning chato e usa um underscore _strdup. _mkdir tb etc.



Thiago Adams

unread,
Jun 30, 2020, 2:22:52 PM6/30/20
to ccppbrasil


On Tuesday, June 30, 2020 at 2:49:57 PM UTC-3, Thiago Adams wrote:
 
Este conceito de terminal é muito antigo.  https://pt.wikipedia.org/wiki/VT100
O que o sistema operacional fazia e ainda faz é emular os terminais antigos como o VT100.


Outra coisa interessante é a emulação de terminais no browser.



 

DQ

unread,
Jul 1, 2020, 5:54:01 AM7/1/20
to ccppbrasil
Na época do DOS a gente usava o BIOS para posicionar o cursor e escrever na tela (para maior performance escrevia na memória de vídeo, mas isto era mais complexo no caso da CGA original).

No Windows não precisa usar sequências ESC, tem funções para isso (lembro de ter estudado isso no livro Advanced Windows).

https://docs.microsoft.com/en-us/windows/console/console-functions

Estas coisas são baixo nível, provavelmente existiam bibliotecas para isso mas eu sempre fiz na raça.

Daniel

angelo

unread,
Jul 1, 2020, 11:27:48 AM7/1/20
to ccppb...@googlegroups.com
boa tarde pessoal, 

Daniel, vc lembrou 
Epoca do DOS.. programacao baixo nivel,  faz lembrar  interrupção 0x21h  ? ou entao a  0x18h  chamando de dentro do turbo C++

e ainda podia controlar o mouse (quando existia um instalado), lidando com os registradores dentro do codigo em C
tinha uma biblioteca feita pra usar junto com compilador Clipper, telas com menuzinho controlado pelo mouse... era sofisticado.. rs

Ou então colocar aplicativo modo residente ( terminate and stay residente ), tinha até um livro só disso o autor brasileiro
igual aquele aplicativo que existia antigamente:  Sidekick (vulgo SK, que apertava control + alt)  e abria o editor de textos .. época de Dos 6.2 boa época

O problema de falar dessas tecnologias é que acaba denunciando a idade de muita gente.. isso são coisas de primeira metade dos anos 90 pra lá...kkkkk

[]s angelo


--
Antes de enviar um e-mail para o grupo leia:
                     http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------------------------
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~------------
---
Você está recebendo esta mensagem porque se inscreveu no grupo "ccppbrasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.

Carlos Henrique - CH

unread,
Jul 1, 2020, 12:02:17 PM7/1/20
to ccppb...@googlegroups.com
Saudades dessa época !!!

Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.

Virgilio Fornazin

unread,
Jul 1, 2020, 12:07:00 PM7/1/20
to ccppb...@googlegroups.com
Final dos 80... DOS 3.3 ja fazia milagre...
Ainda tinha o MSX
CP/M (antes do DOS)
Os Apple ][ ...

<dino_mode_off>

Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.

Josue Andrade Gomes

unread,
Jul 1, 2020, 12:14:53 PM7/1/20
to ccppb...@googlegroups.com
Há uma certa nostalgia sim mas não tenho saudades. Computadores lentos, pouca memória, etc.

Cheguei a criar uma tabela ASCII residente escrita em C.
Só sobrou o código fonte mas consegui recompilar no FreeDOS.



Francisco Lopes

unread,
Jul 1, 2020, 2:12:31 PM7/1/20
to ccppbrasil

Não necessariamente em C. De uns tempos pra cá está havendo um número crescente de aplicações terminal e TUI em Rust, eu uso várias, desde do emulador de terminal (Alacritty), a utilitários como fd, que substitui o find, ripgrep, que substitui o grep, bat, que substitui o cat, etc, perdi a conta.

Dá uma olhada nesta lib e nos programas sendo feitos com ela:

Dependendo do backend que você escolher, crossterm por exemplo, o suporte é multiplataforma.

Marcelo Correa [30/06/2020 09:25 -09]:

Thiago Adams

unread,
Jul 1, 2020, 3:18:20 PM7/1/20
to ccppbrasil


On Wednesday, July 1, 2020 at 3:12:31 PM UTC-3, Francisco Lopes wrote:

Não necessariamente em C. De uns tempos pra cá está havendo um número crescente de aplicações terminal e TUI em Rust, eu uso várias, desde do emulador de terminal (Alacritty), a utilitários como fd, que substitui o find, ripgrep, que substitui o grep, bat, que substitui o cat, etc, perdi a conta.

Dá uma olhada nesta lib e nos programas sendo feitos com ela:


Eu queria fazer uma tela com atualizar rápida (tipo esta ai que tem no link)
mas nao consegui fazer rapido no windows, pois ao limpar a tela era demorado.
 Talvez tenha alguma manha.

Entao eu desitir e deixei como um programa grafico ao inves de console.


 

Francisco Lopes

unread,
Jul 1, 2020, 11:17:03 PM7/1/20
to ccppbrasil

Outra coisa interessante neste tema são as fontes.

Esse site é bem legal:

Inclusive uso a BigBlue Terminal como a minha fonte base de terminal (com uns truques de fontconfig pra não ficar sem itálico/negrito):

Se você edita código com Vim/NeoVim recente agora também dá até pra emular esses menus das antigas nele:

Francisco Lopes [01/07/2020 15:01 -03]:

m0f0r

unread,
Jun 2, 2023, 4:33:08 PM6/2/23
to ccppbrasil
De uma olhada nisso brother

m0f0r

unread,
Jun 2, 2023, 4:33:24 PM6/2/23
to ccppbrasil
Achei mais algumas.

Em terça-feira, 30 de junho de 2020 às 14:16:29 UTC-3, Marcelo Correa escreveu:

Fabiano Salles

unread,
Jun 2, 2023, 6:16:26 PM6/2/23
to ccppb...@googlegroups.com
Fala m0f0r, beleza?

Cara, porque você não utiliza a própria ncurses?
Ela é escrita em C, bem estabelecida e fácil de usar.
Dá uma olhada...
image.png

Tem até jogo escrito pro terminal usando ela:
image.png

image.png


Se o inglês tá em dia, tem play list muito boa aqui: 

Aqui tem um bom tutorial em português:

Agora, falando de estética, você pode se aventurar e implementar um framework básico com SLD2 e uma fonto mono space, mais ou menos como o time do TIS-100 fez.
Se liga:



 
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.


--
Fabiano Sales 
fabiano...@gmail.com

m0f0r

unread,
Jun 2, 2023, 8:04:35 PM6/2/23
to ccppbrasil
https://pdcurses.org/ funciona em plataforma Windows entre outras
https://invisible-island.net/ncurses/announce.html - projeto oficial de interface gráfica em modo terminal.

Ambas foram escritas em C e C++  a NCurses tem mais wrappers para linguangens script python, node, go, etc    pdcurses é menor em questão de codigo mas tem as mesmas coisas do ncurses.

Boa diversão!

Em terça-feira, 30 de junho de 2020 às 14:16:29 UTC-3, Marcelo Correa escreveu:
Reply all
Reply to author
Forward
0 new messages