INCLUDES


  Quando o programa que criamos é muito grande, torna-se difícil de compreender todo o código armazenado em um mesmo arquivo. Dessa forma, é desejável que separemos as funcionalidades por temas (ou módulos), colocados em arquivos separados.
  Uma vez feito isso, podemos utilizar as funções de cada módulo em outros programas, apenas indicando o nome do módulo mais a função a ser utilizada.
  As principais vantagens da modularização de programas são:   O C fornece a opção de incluir novos módulos ao programa corrente, através da cláusula include.
  A inclusão de arquivos pode ser de vários arquivos ou até mesmo em cascata.

  O exemplo "modulo.c" a seguir, cria um módulo com uma rotina para calcular o produto de dois números.
double calculaProduto(double a, double b)
{
  return a*b;
}

  O programa "teste.c" a seguir irá incluir o módulo "modulo.c" e fará uso de sua função.
#include <stdio.h>
#include "modulo.c"

main()
{
  printf("O produto de 5x4 é: %.2f\n", calculaProduto(5,4));
}
  Saída:
  O produto de 5x4 é: 20.00

  Observe que no arquivo teste.c não há qualquer código que trate do produto entre dois números. Isto é responsabilidade do módulo "modulo.c".

  Observação importante:

  No Hi-Tech C, quando são utilizados pontos flutuantes (double, float), é obrigatória a indicação da biblioteca "libf" na compilação. No caso do exemplo acima, deve-se compilar assim:
A>c -lf teste

  Caso não seja usada a opção "-lf", um erro em tempo de link acontece:
undefined symbol:
flmul


  Bibliotecas

  Uma biblioteca é uma coleção de programas utilizados para auxiliar o desenvolvedor, geralmente empacotados em um arquivo, no qual os arquivos fonte já foram compilados.
  A biblioteca no C é um arquivo com extensão ".lib", no qual reune arquivos do tipo objeto (extensão ".o" ou ".obj"), que são arquivos fonte compilados. Cada bilioteca possui um ou mais arquivos do tipo header (extensão ".h"), que possui a declaração das variáveis, definições, constantes e funções encontradas na respectiva biblioteca ".lib".
  A principal vantagem do uso de bibliotecas é que os módulos já foram compilados, poupando tempo de compilação. No caso dos arquivos incluídos, cada vez que o programa é compilado, todos os módulos anexos também são compilados.
  Na linguagem C, temos as bibliotecas padrão e as bibliotecas do usuário.


  Bibliotecas Padrão

  O C é uma linguagem que não realiza por si só operações básicas como entrada e saída, cálculos matemáticos, acesso ao sistema etc. Para atingir tais fins, são utilizadas bibliotecas específicas, que acompanham o pacote da linguagem.
  As bibliotecas padrão são aquelas presente na maioria dos compiladores C, independente da plataforma. Dessa forma, um programa que utilize tais bibliotecas pode ser compilado tanto no MSX, como no PC utilizando Windows ou Linux.
  As principais bibliotecas são:
  Exemplo 1:
#include <stdio.h>

main()
{
  printf("Olá, mundo.\n");
}
  Saída:
  Olá, mundo.

  Neste exemplo, há a chamada a uma função de entrada e saida "printf", que é responsável por imprimir na tela do computador.


  Exemplo 2:
#include <stdio.h>
#include <stdlib.h>

main()
{
  char *p = (char *) malloc(6 * sizeof(char));

  p[0] = 'M';
  p[1] = 'a';
  p[2] = 'r';
  p[3] = 'M';
  p[4] = 'S';
  p[5] = 'X';

  printf("%s\n", p);  
}
  Saída:
  MarMSX.

  Obs: é possível chamar as bibliotecas padrão utilizando-se aspas em vez dos sinais de maior e menor. Ex:
#include "stdio.h"
  Entretanto, é uma convenção o uso dos sinais de de maior e menor para as bibliotecas padrão e aspas para as bibliotecas do usuário.


  Bibliotecas do Usuário

  São as bibliotecas criadas pelo usuário ou desenvolvedor de software, e geralmente são específicas para uma determinada plataforma.
  O arquivo da biblioteca possui extensão ".lib", no qual incluem módulos já compilados no formato objeto ou ".obj".

  Principais passos para criar uma biblioteca:

  1o. passo: criar o arquivo fonte.

  Vamos criar o arquivo "modulo.c".
double calculaProduto(double a, double b)
{
  return a*b;
}

  2o. passo: criar o arquivo header ".h".

  Vamos criar o arquivo "modulo.h".
double calculaProduto(double a, double b);

  3o. passo: compilar e gerar um arquivo objeto.

  No prompt do MSX-DOS, e com o compilador Hi-Tech C:
A>c -c modulo
  Resulta no arquivo objeto "modulo.o". Caso deseje, mude a extensão de ".o" para ".obj".


  4o. passo: criar a bilioteca.

  No prompt do MSX-DOS, e com o compilador Hi-tech C:
A>libr r libteste.lib modulo.obj
  Resulta no arquivo "libteste.lib".

  Obs: opções para o comando "libr":
  5o. passo: testar a biblioteca criada.

  O programa "teste.c" a seguir irá incluir o módulo "modulo.h" da biblioteca "libteste.lib".
#include <stdio.h>
#include "modulo.h"

main()
{
  printf("O produto de 5x4 é: %.2f\n", calculaProduto(5,4));
}
  Caso o programa "teste.c" seja compilado sem informar a biblioteca "libteste.lib", um erro acontece.
A>c teste
...
undefined symbol:
_calculaProduto
  Corrigindo:
A>c -lf -lteste teste


  Bibliotecas Gráficas

  O pacote do Hi-Tech C da funet (www.msxarchive.nl) acompanha uma biblioteca gráfica, que permite acessar os recursos gráficos do MSX como desenhos, sprites, modos de tela etc.
  O arquivo hitech-4.pma contém o pacote LIBG1193.PMA, no qual contém dois arquivos necessários: libg.lib e glib.h. Os arquivos restantes são os fontes da biblioteca em Assembly.
  Assim, deve-se copiar os arquivos libg.lib e glib.h para o disquete do Hi-Tech C.

  Para utilizar a bilioteca, adicione a seguinte linha ao seu programa:
#include <glib.h>

  As funções dessa biblioteca podem ser vistas aqui.

  O exemplo 1 irá desenhar figuras geométicas na screen 5.
#include <stdio.h>
#include <conio.h>
#include <glib.h>

char c;

main()
{
  screen(5);

  /* Desenha circulo */
  circle(128,95,50,13,0,32752,32768);
  paint(128,95,2,13);

  /* Desenha linha */
  line(10,10,80,80,15,PSET);

  /* Desenha caixa vazia */
  boxline(10,150,80,180,15,PSET);

  /* Espera pelo enter ser pressionado */
  c = getch();
  totext();
}

  Compile assim:
A>c -lg exemplo1
  Saída:

 


  O exemplo 2 irá escrever um texto na tela do MSX.
#include <stdio.h>
#include <conio.h>
#include <glib.h>

main()
{
  static int i;
  static char c;
  static char msg[] = "Texto na screen 5";

  screen(5);
  color(15,1,1);

  /* Escreve na tela */
  glocate(10,10);
  for (i=0; i<strlen(msg); i++)
    grpprt(msg[i], PSET);

  /* Espera pelo enter ser pressionado */
  c = getch();
  totext();
}


/MARMSX/CURSOS/C--