Ir ao conteúdo

Posts recomendados

Postado

esse programa eu estou fazendo para criar um menu interativo, e estava testando uma parte dele quando vi esse "problema" (não é algo muito sério)

Spoiler

image.png.c3a1fd7f6359f97266d2123da57f3299.png

esse projeto apresenta problemas quando chega no fim da tela do terminal, alguma ideia de como arrumar?

meu código:

Spoiler
#include <stdlib.h>
#include <ncurses.h>    //libs
#include <math.h>

int main()
{
    char menu = ' ';   //vars

	initscr();   //inicio
    while (menu != 'x')
    {
	    menu = getch();   //pega tecla apertada
        switch (menu)   //e a joga aqui
        {
            case 'x':   //se for 'x' sai do programa
            break;
            default:
            printw(" - %d\n", menu);   //se nn for imprime
            refresh();
        }
    }
    printw("\n\n\n                           ADIOS :)\n\n");
    refresh();   //adios programa
	endwin();
}

 

só queria saber como fazer duas coisas: 1ª, fazer rolar a página conforme mais texto vai vindo, 2ª, limpar a tela toda

(note que é linux, só caso não tenha se ligado mesmo) :)

Postado
2 horas atrás, Um mero usuário disse:

1ª, fazer rolar a página conforme mais texto vai vindo, 2ª, limpar a tela toda

 

A bem da verdade essas duas coisas não existem no Linux (Unix).

 

scroll é o nome comum de "rolar a página conforme texto vai vindo"

 

scroll em Unix, Linux, MacOS, Android...

 

Esses sistemas todos são derivados do Unix, razão inicial para a criação de C.

 

Não há console no Unix. É importante entender isso e pode ser difícil para quem começou a usar um computador depois dos 80, com coisas como monitores de video e depois interfaces gráficas.

 

Inicialmente os terminais eram tty, teletype, apenas um teclado associado a uma impressora matricial

 

image.png.30ac39fb468565afbb6958c76fdee8e7.png

 

Como esse aqui à esquerda, um LA-36 da Digital. E a entrada e saída estavam aí, letra a letra: digitar o programa usando o editor de texto linha a linha, o texto saindo por letra na "console"..

 

Essa era a console. E não tinha como limpar ou voltar :) 

 

Os primeiros terminais de vídeo estão ainda bem presentes hoje porque nos sistemas modernos ainda se usam as mesmas sequências de comando, as tais VT-sequences. Inclusive no Windows 10.

 

Talvez o terminal de maior sucesso dessa época tenha sido o VT-100, da mesma marca Digital.  E era associado a um teclado e tinha uma tomada e tal.

 

image.png.2ed115725abbcea80f56cb87f99066dc.png

Esse à esquerda é um VT-100, o próprio.

 

E o paradigma era ainda tty. Você digita uma coisa, ela vai para a CPU e a CPU escreve na tela se for o caso uma letra, ou faz algo.

 

"Fazer algo" era o modo em que esses terminais entravam ao receber um comando, e isso era em geral algo a partir de um ESC, o escape, 033 na época porque era tudo octal.

 

Os computadores realmente grandes nos 70 tinham um só terminal e esse sim era chamado console, em geral um IBM 3278. E não eram usados via teclado ou monitores: a console era para operação apenas.

 

De volta ao tópico

 

Não existia a noção de tela, porque a CPU mandava linha a linha as coisas para o terminal. Os terminais na época nem tinham processadores. O VT-100 foi o primeiro a ter isso na verdade.

 

Então não existe a noção de rolar a tela porque a imagem dela não fica gravada em lugar nenhum.

 

E nem de limpar a tela.

 

O que se fazia então para limpar a tela era ver quantas linhas o terminal tinha e enviar tantos pares CRLF sim, o newline era um \r e um \n ainda lembrando dos tty: um CR (ox13) fazia o cursor voltar para o início da linha, e um LF (10) passava para a linha de baixo. carriage return + line feed.

 

Os terminais em geral tinham 24 linhas de 80 colunas então limpar a tela era enviar 24 CRLF e o hardware do terminal fazia o resto.

 

scroll não tinha como porque não havia memória. Ao chegar no fim da linha o texto subia e o cursor vinha para a primeira coluna da linha seguinte.

 

Os comandos não mudaram muito para a console, e o mesmo tput de hoje é o da época. Um tput reset era o equivalente a limpar a tela toda. E ainda existe HOJE no Linux. E na prática o mesmo que desligar e ligar o terminal, que nada tinha a ver com o micro. Um clear no Linux é basicamente enviar um tput reset para o tty associado ao processo. Hoje.

 

E por outro lado desligar e ligar o terminal não trazia o texto de volta, como acontece com o Windows e o Linux hoje.

 

Em alguns casos era importante poder limpar a tela ou ter a memória do que tinha nela, por exemplo para aplicações de texto ou painéis de controle, e para isso se programava isso, simplesmente mantendo na memória do programa uma imagem permanente da tela. 

 

Bibliotecas foram escritas para facilitar isso e uma chamada curses teve grande penetração e é até hoje distribuída com o nome de ncurses, como new curses

 

E é o que sugiro você usar em Linux hoje. É simples, rápida, segura, tem em todo Linux e tem muitos exemplos. E pode conseguir algum suporte a respeito. Usei por muitos anos curses. E tem muitas coisas nela além de simples telinhas.

 

A console no Windows é outra coisa, porque o sistema mantem memória de todas as consoles e é um subsistema na verdade. E por padrão tem 9001 linhas e por isso o scroll é tranquilo. E pode ser desabilitado, claro.

 

image.png.cf1683d297c1fc0dcd56ac6554b5d6bb.png

 

À esquerda o padrão do Windows 10, 9001 linhas de 120 caracteres.

 

scroll up e down estão disponíveis e o texto volta até o limite do que estiver armazenado, até por exemplo as 9001 linhas do padrão.

 

 

 

 

Esse tty na foto acho que é um LA-36. Usando o terminal estão Dennis Ritchie (+) , o co-criador de C, e Ken Thompson, o co-criador do Unix, dois dos maiores desenvolvedores de todos os (poucos) tempos em que se escreve software.

 

A foto tem em vários lugares e museus. De https://en.wikipedia.org/wiki/History_of_Unix 
 

ken and dennis.jpg

  • Obrigado 1
Postado
2 horas atrás, Um mero usuário disse:

tput reset

 

use man tput.

 

Se quer controlar scroll e a tela sem muito stress e sem interface gráfica, curses (nurses) é o caminho provável, pelas razões que te expliquei. Todo mundo fazia isso. E ainda faz em alguns casos.

 

scroll e limpar a tela não fazem parte do terminal Linux. Comece por man termio e vai entender.

 

Se quer ver exemplos de até onde dá pra ir com essas coisas veja os programas tmux e Screen

Note o quanto Linux é Unix: em 2021 man termio em Ubuntu 20.04 tem "System V" no título. :) System V era uma versão importante do Unix, da AT&T.

 

image.png.07d6138bd537700594537b84eee910a3.png

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!