Conio.h para Linux

Pessoal estou disponibilizando pra todos a conio.h para Linux, baseada na biblioteca ncurses. Ela possui algumas das principais funções da conio.h do DOS/Windows. Confiram.

[ Hits: 80.655 ]

Por: Jefferson dos Santos Felix em 20/04/2004


A conio.h



A conio.h que criei utiliza os recursos da biblioteca ncurses, portanto trata-se simplesmente de uma certa "tradução" da ncurses para algo semelhante a conio.h que vem com os compiladores do C/C++ para DOS/Windows.

Eis a conio.h para Linux:

// conio.h
// CONIO.H UTILIZANDO OS RECURSOS DA BIBLIOTECA NCURSES     //
// ----------------------------------------------------     //
//                                                          //
// DESENVOLVIDO POR: JEFFERSON DOS SANTOS FELIX, ABRIL 2004 //
//                                                          //

#ifndef __NCURSES_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 PINK        13
#define LIGHTCYAN   14
#define WHITE       15

#define DEFAULT_PAIR 57

int initconio(void);
int endconio(void);
int clrscr(void);
int textcolor(short color);
int textbackground(short color);
int gotoxy(int x, int y);
int wherex(void);
int wherey(void);

short cur_pair;
int cur_bold;

int initconio(void)
{
  int f, b;
  short p;
  initscr();
  start_color();
  p = 1;
  for(f = 0; f < 8; f++)
    for(b = 0; b < 8; b++, p++)
      init_pair(p, f%8, b%8);
  cur_pair = DEFAULT_PAIR;
  cur_bold = 0;
  bkgd(COLOR_PAIR(cur_pair));
  color_set(cur_pair, NULL);
  attr_off(A_BOLD, NULL);
  return 0;
}

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

int clrscr(void)
{
  bkgd(COLOR_PAIR(cur_pair));
  if(cur_bold == 1)
    attr_on(A_BOLD, NULL);
  else
    attr_off(A_BOLD, NULL);
  clear();
  return 0;
}

int textcolor(short color)
{
  short f, b, x, y;
  short p;
  pair_content(cur_pair, &f, &b);
  p = 1;
  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;
    attr_on(A_BOLD, NULL);
  }
  else
  {
    cur_bold = 0;
    attr_off(A_BOLD, NULL);
  }
  return 0;
}

int textbackground(short color)
{
  short f, b, x, y;
  short p;
  pair_content(cur_pair, &f, &b);
  p = 1;
  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 gotoxy(int x, int y)
{
   move(x - 1, y - 1);
   return 0;
}

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

int wherey(void)
{
   int x, y;
   getyx(stdscr, x, y);
   return y + 1;
}
    Próxima página

Páginas do artigo
   1. A conio.h
   2. Como funciona
   3. Conclusão
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

C - Include e Makefile

Tutorial OpenGL

LivreNFE - O emissor Nfe open source para Linux

Reprodução de arquivos WAV com SDL_mixer e linguagem C

Programando com uma granada de mão: uma visão da linguagem C

  
Comentários
[1] Comentário enviado por fabio em 20/04/2004 - 23:13h

Muito bacana seu conio.h, não programo muito em C, mas tô ligado que isso faz maior falta pra galera de faculdade, que no geral se amarra em chegar no laboratório com um programinha colorido e cheio de recursos de formatação de tela. :)

Uma dica: você podia enviar seu código-fonte como script para o site também, assim facilita o processo de download, pois ao invés de copiar e colar o cara já teria um botãozinho "Download" linkado com esse artigo.

[2] Comentário enviado por jose_maria em 21/04/2004 - 08:59h

Legal cara, me amarro nos artigos de programação.
Queria saber se alguem sabe de algo parecido com a CRT do Pascal, para Pascal mesmo.
Gostaria também que o Fabio criasse uma pasta PASCAL na seção de scripts. :D

[3] Comentário enviado por jeffestanislau em 22/04/2004 - 08:02h

Muito bo mesmo, pois já vi vários usuários correndo atrás dessa biblioteca par linux... muito boa a sua iniciativa!!!

[4] Comentário enviado por jeffestanislau em 22/04/2004 - 08:07h

Muito bom mesmo, pois já vi vários usuários correndo atrás dessa biblioteca par linux... muito boa a sua iniciativa!!!

[5] Comentário enviado por kashmir em 24/04/2004 - 00:33h

concordo com o jeffestanislau, pois muita gente precisa desta biblioteca para linux valeu mesmo.

[6] Comentário enviado por ygorth em 25/04/2004 - 21:45h

muito legal!

[7] Comentário enviado por ron_lima em 23/05/2004 - 20:21h

Olá, Jefferson.

Já pensou em criar um projeto no source forge com essa biblioteca? Não só esse layer que você está criando para o I/O de console do windows, como também um projeto mais ambicioso, como portar a Win32 para utilizar alguma biblioteca unix, como motif, lesstiff, Qt+ ou coisa parecida. Acredito que será um projeto muito procurado pois tem muita gente querendo portar as coisas do Windows para o unix.

Abraço!

[8] Comentário enviado por engos em 23/06/2004 - 16:55h

Sou um dos que "não larga a mão de programar no modo texto" e ainda prefiro utilizar a ncurses diretamente, mesmo se for para migrar um programa do Ruindows...

Entretanto gostei de saber que existe uma opção a mais e com certeza isso vai ajudar bastante programadores.

Sua conio.h está bem elaborada, parabéns.

[9] Comentário enviado por arcanjo_mg em 05/10/2005 - 10:45h

Kra, mto bom isso, eu precisava mesmo de uma dessas, pois na faculdade usamos mto a conio.h e em ksa meu Linux tem que ter modificações pra roda meus programinhas.

[10] Comentário enviado por cientistamaluko em 21/11/2005 - 12:59h

Rapaz muito obrigado.....há um bom tempo eu estou atrás dessa biblioteca......será muito útil para nós. Vai ficar mais fácil conciliar meus trabalhos com dos meus colegas que usam Windows. Flws.

[11] Comentário enviado por djx em 06/04/2006 - 11:31h

Ola eu sewi q esse artigo eh bem antigo...
Eu nao gosto de programar apenas para win ou Linux mas diante desta divergencia gosto de programar para os 2...
Mas estava navegando e gostei desta lib...
Eu poderia utiliza no meu programa e distribui-la no meu codigo fonte?
Antecipadamente,
Vlw...

[12] Comentário enviado por klebervirgilio em 28/02/2009 - 11:57h

Amigo...

E as funções getch()... getche()???

[13] Comentário enviado por rodrigofariat em 11/03/2010 - 16:10h

Oi,

Eu uso o Ubuntu 9.10, onde tenho de colocar o arquivo para que seja reconhecida.
Tentei colocar no mesmo diretório do iostream.h.

cp conio.h /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/backward/
cp conio.h /usr/include/c++/4.2/backward/

Mesmo assim nao surgiu efeito.


[14] Comentário enviado por fabrizzio.soares em 06/08/2010 - 09:31h

Sei que estou postando bem atrasado.
Sua iniciativa ficou muito boa. Só para complementar. Não é recomendável que arquivos .h contenham codificação de funções. Deve conter somente declarações de variáveis, constantes, defines, structs, typedefs e protótipos de funções. O corpo de funções deve ficar em um arquivo .c que será compilado junto com o projeto que o utilizará. Baseado nisto pode-se criar uma lib sua.

rodrigofariat você pode colocar o arquivo no diretório do seu código fonte que ele encontrará.
Faça um #include "conio.h"

[15] Comentário enviado por rodrigofariat em 19/04/2012 - 16:29h

Beleza,

Eu estou usando o Ubuntu 10.10, coloquei o conio.h no /usr/include.

rodrigo@rodrigo-Calistoga-ICH7M-Chipset:~/c++$ g++ lab1final.cpp -o lab1final.cpp
lab1final.cpp: In member function ‘void Vetor::imprime()’:
lab1final.cpp:125: error: ‘cout’ was not declared in this scope
lab1final.cpp: In member function ‘void ApontadorInteiro::RetornaEndereco()’:
lab1final.cpp:158: error: ‘cout’ was not declared in this scope
lab1final.cpp: At global scope:
lab1final.cpp:162: error: ‘::main’ must return ‘int’
lab1final.cpp: In function ‘int main()’:
lab1final.cpp:165: error: ‘cout’ was not declared in this scope
lab1final.cpp:166: error: ‘endl’ was not declared in this scope
rodrigo@rodrigo-Calistoga-ICH7M-Chipset:~/c++$

Ainda o compilador não consegue achar a biblioteca conio, é preciso rodar o ldd, para que o conio.h seja reconhecido ?


Contribuir com comentário