#include <stdio.h>
#include <stdlib.h>
#define COR_BRANCA 1
#define COR_PRETA 0
#define VALOR_COR_BRANCA ' '
#define VALOR_COR_PRETA '#'
struct icone
{
unsigned char *pixels;
int tamanho;
};
struct icone
*cria_icone(int tamanho);
void
libera_icone(struct icone **ico);
void
limpa_icone(struct icone *ico, unsigned char cor);
void
icone_atribui(struct icone *ico, int linha, int coluna, unsigned char valor);
void
icone_mostra(struct icone *ico);
int main(void)
{
struct icone *ico = cria_icone(8);
if (ico == NULL) {
perror("nao foi possivel reservar memoria do sistema!");
exit(EXIT_FAILURE);
}
limpa_icone(ico, COR_BRANCA);
icone_atribui(ico, 0, 0, COR_PRETA);
icone_atribui(ico, 0, 7, COR_PRETA);
icone_atribui(ico, 7, 0, COR_PRETA);
icone_atribui(ico, 7, 7, COR_PRETA);
icone_atribui(ico, 4, 4, COR_PRETA);
icone_mostra(ico);
libera_icone(&ico);
return(0);
}
struct icone
*cria_icone(int tamanho)
{
struct icone *ico = malloc(sizeof(*ico));
if (ico != NULL) {
ico->pixels = malloc(sizeof(*ico->pixels)*tamanho*tamanho);
if (ico->pixels != NULL) {
ico->tamanho = tamanho;
return(ico);
}
free(ico);
}
return(NULL);
}
void
libera_icone(struct icone **ico)
{
if (*ico != NULL) {
if ((*ico)->pixels != NULL) {
free((*ico)->pixels);
(*ico)->pixels = NULL;
}
free(*ico);
*ico = NULL;
}
}
void
limpa_icone(struct icone *ico, unsigned char cor)
{
int linhas, colunas;
for (linhas = 0; linhas < ico->tamanho; linhas++) {
for (colunas = 0; colunas < ico->tamanho; colunas++) {
ico->pixels[linhas*ico->tamanho+colunas] = cor;
}
}
}
void
icone_atribui(struct icone *ico, int linha, int coluna, unsigned char valor)
{
if (linha < ico->tamanho && coluna < ico->tamanho) {
ico->pixels[linha*ico->tamanho+coluna] = valor;
}
}
void
icone_mostra(struct icone *ico)
{
int linhas, colunas;
for (linhas = 0; linhas < ico->tamanho; linhas++) {
for (colunas = 0; colunas < ico->tamanho; colunas++) {
if (ico->pixels[linhas*ico->tamanho+colunas] == COR_BRANCA) {
printf("%c", VALOR_COR_BRANCA);
} else {
printf("%c", VALOR_COR_PRETA);
}
}
printf("|\n");
}
for (colunas = 0; colunas <= ico->tamanho; colunas++) {
printf("-");
}
printf("\n");
}