Conio.h para Linux (Nova versão)

Publicado por Jefferson dos Santos Felix 21/04/2004 (última atualização em 28/08/2012)

[ Hits: 27.876 ]

Download conio.h

Download 1333249348.conio.h (versão 2)

Download 1344828792.conio.h (versão 3)

Download gnuconio-0.1.7z (versão 4)




Ae galera que se amarra em programação C/C++ e tem saudades da conio.h do DOS/Windows estou disponibilizado para download a versao para linux. A  primeira versão (que coloquei nos Artigos) possuía alguns erros pois os programas que eram feitos para DOS/Windows não estavam ficando corretamente formatados no Linux. Agora tem também a função getch() e getche(). Até mais galera da comunidade!

Lembrando que para funcionar você deve ter a ncurses instalada!

  



Versões atualizadas deste script

Versão 2 - Enviado por Felipe Ruiz Peixoto em 31/03/2012

Changelog: Atualização da implementação criada por Jefferson.
Agora o mesmo código escrito para windows podera funcionar no linux sem modificar nada. Para inicializar e finalizar basta utilizar uma das funções desta implementação, recomendo o clrscr(). Os comandos printf e scanf são automaticamente redefinidos para printw e scanw.

Meu e-mail : felipeludo2011@gmail.com

Se o nome do arquivo estiver diferente de "conio.h", renomeie ele antes de usar.
Lembre-se: Precisa ter o ncurses instalado.

Download 1333249348.conio.h


Versão 3 - Enviado por Felipe Ruiz Peixoto em 13/08/2012

Changelog: Melhorias no código do getche() e do getch()

Download 1344828792.conio.h


Versão 4 - Enviado por Felipe Ruiz Peixoto em 27/08/2012

Changelog: Tambem pode ser baixado em
https://sourceforge.net/projects/gnulinuxconioh

Compativel com Windows e Linux, e sem precisar modificar o código que você fez no Windows para funcionar no Linux, seguindo apenas dois passos simples.

Download gnuconio-0.1.7z


Esconder código-fonte

#ifndef __CONIO_H
#define __CONIO_H

#ifndef __CURSES_H
#include <curses.h>
#endif

#define BLACK         0
#define RED           1
#define GREEN         2
#define BROWN         3
#define BLUE          4
#define MAGENTA       5
#define CYAN          6
#define LIGHTGRAY     7
#define DARKGRAY      8
#define LIGHTRED      9
#define LIGHTGREEN    10
#define YELLOW        11
#define LIGHTBLUE     12
#define LIGHTMAGENTA  13
#define LIGHTCYAN     14
#define WHITE         15

int initconio(void);
int endconio(void);
int clrscr(void);
int clreol(void);
int textcolor(int color);
int textbackground(int color);
int getche(void);
int wherex(void);
int wherey(void);
int gotoxy(int x, int y);
int newline(void);
short cur_pair, cur_bold;

int initconio(void)
{
  short f, b, p;
  initscr();
  start_color();
  noecho();
  p = 1;
  for(f = 0; f < 8; f++)
    for(b = 0; b < 8; b++, p++)
      init_pair(p, f, b);
  cur_pair = 57;
  cur_bold = 0;
  color_set(cur_pair, NULL);
  attroff(A_BOLD);
  return 0;
}

int endconio(void)
{
  endwin();
  return 0;
}

int clrscr(void)
{
  bkgdset(COLOR_PAIR(cur_pair));
  if(cur_bold == 0)
    attroff(A_BOLD);
  else
    attron(A_BOLD);
  clear();
  return 0;
}

int clreol(void)
{
  int cur_x, x, y, maxx;
  color_set(cur_pair, NULL);
  getmaxyx(stdscr, y, maxx);
  cur_x = wherex();
  gotoxy(1, wherey());
  for(x = 1; x <= maxx; x++)
    printw(" ");
  gotoxy(cur_x, wherey() - 1);
  return 0;
}

int textcolor(int color)
{
  short x, y, f, b, p = 1;
  pair_content(cur_pair, &f, &b);
  for(x = 0; x < 8; x++)
    for(y = 0; y < 8; y++, p++)
      if((x == (color%8))&&(y == b))
        cur_pair = p;
  color_set(cur_pair, NULL);
  if(color >= 8)
    cur_bold = 1;
  if(cur_bold == 0)
    attroff(A_BOLD);
  else
    attron(A_BOLD);
  return 0;
}

int textbackground(int color)
{
  short x, y, f, b, p = 1;
  pair_content(cur_pair, &f, &b);
  for(x = 0; x < 8; x++)
    for(y = 0; y < 8; y++, p++)
      if((x == f)&&(y == (color%8)))
        cur_pair = p;
  color_set(cur_pair, NULL);
  return 0;
}

int getche(void)
{
  char c;
  echo();
  c = getch();
  noecho();
  return c;
}

int wherex(void)
{
  int x, y;
  getyx(stdscr, y, x);
  return x + 1;
}

int wherey(void)
{
  int x, y;
  getyx(stdscr, y, x);
  return y + 1;
}

int gotoxy(int x, int y)
{
  move(y - 1, x - 1);
  return 0;
}

int newline(void)
{
  gotoxy(1, wherey() + 1);
  return 0;
}

#endif

Scripts recomendados

Calculo do número de Euler em C++

Função boa para ler string em C

Função para validação de datas

Inverte string usando NCURSES

Dark Star Math


  

Comentários
[1] Comentário enviado por christophervilla em 20/05/2004 - 15:45h

Achei muito interesante

[2] Comentário enviado por paulocesarsan em 07/11/2009 - 13:25h

e muito boa porem vc esqueceu de colocar com faz a instalacao da conio.h

[3] Comentário enviado por RuizBRX11 em 01/04/2012 - 00:10h

De uma forma bem resumida:
Para usar é só voce copiar para o diretório onde estão os headers, no meu computador é /usr/include, e colocar no séu programa a linha: #include <conio.h>.
Ou se preferir, copie para a pasta onde seu programa está, e escreva a seguinte linha nele: #include "conio.h".
Compile com o comando: gcc "meuprograma.c" -o "meuprograma" -lncurses.

[4] Comentário enviado por julio_hoffimann em 04/04/2012 - 17:55h

Um bom programador C/C++ utiliza somente headers cobertos pelo standard. Incentivar o uso de um header não portável não faz sentido, ainda mais em se tratando de um header Windows para desenvolvimento em Linux.

Esse problema de cultura é o mesmo que assola o uso do Dev-C++ no Linux.

[5] Comentário enviado por removido em 04/04/2012 - 23:53h

Certo... e para onde vai a portabilidade do código?

Esse problema de cultura é o mesmo que só faz serem usados manuais de C para aquele sisteminha feito lá no Condado de King, USA.
Nem falo o nome do lugar porque é sinônimo e já virou propaganda.

Mas se quer saber mesmo, pelo menos metade desse código aí se reescreve com sequências de escape e inline assembly.
Prá que ficar usando ncurses se ninguém vai poder ou querer instalá-la no sistema do concorrente?
E se o sistema não tiver ncurses? E se quem pegar nem souber o que é ncurses?

Resumindo em três termos: 1. Portabilidade; 2 Independência; 3. Concisão.

*** ADD ***

E o problema não é com o código, é com ninguém se interessar de querer solucionar essa pendência de não ter header.

Ou se inventa um header ou se reescreve tudo o que há de exemplo que foi feito até hoje e que é usado para fins escolares.

Porque o pessoal mesmo vai querer ir pro Java, C#, .Net etc. fazer catálogo de produtos, que é o que vende.

É por estas e outras que em pleno 2012 só se acha livro de Assembly para 286, 386 e ainda para DOS no mercado brasileiro.

Parabéns pela iniciativa, mas tente "implodir' este código com o que citei sobre sequências de escape e Assembly.

Tenho quase certeza de que dará certo, apesar de nunca ter visto e de nunca ter sabido de alguém tentar implementar.

*** /ADD ***

[6] Comentário enviado por jeffersonsfelix em 09/04/2012 - 00:16h

Quando escrevi este artigo, estava iniciando meus estudos em computação e visava atender colegas estudantes que utilizavam windows e estavam migrando para o Linux. Evidentemente não tinha o caráter de criação de sistemas comerciais, mas sim meramente educacionais e de portabilidade dos códigos dos trabalhos feitos no win para o linux. Nada de mais.
Lembro-me na época que consegui portar programas escolares escritos no windows com a conio.h para o linux com o mínimo de trabalho. E, por óbvio, se quisesse utilizar a ncurses diretamente, o fazia.
Assim, agradeço a todos que compreenderam o espírito da coisa e os que utilizaram estas funções, que pelo que verifiquei no google já foram copiados para muitos sites.
Atualmente não estou mais no meio acadêmico e não utilizo do C++, então, aqueles que dispuserem de tempo e quiserem aprimorá-lo, por favor, fiquem à vontade.
Quanto à ideia do Listeiro_037, se não me engano há alguns anos já vi uma header em algum site por aí utilizando somente escapes e Assembly, dispensando assim o ncurses, mas não me lembro onde vi isso.
É isso ae galera, um abraço a todos o VOL!

[7] Comentário enviado por luccas_freitas em 10/11/2017 - 15:00h

Ele pede esta biblioteca:
fatal error: _mingw.h: Arquivo ou diretório não encontrado
#include <_mingw.h>
^~~~~~~~~~
compilation terminated.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts