De acordo com o enunciado, o conceito Caneta deverá ter as seguintes funcionalidades:

  • writePen(const char *str) - Apresenta ao utilizador a cadeia de caracteres que recebe como argumento;
  • newPen(const char*brand, const char *color) - É responsável por criar uma nova caneta. Deverá reservar memória suficiente para guardar os dados respeitantes à nova caneta e inicializar os campos da nova caneta (recebidos através dos argumentos desta função);
  • deletePen(Pen pen) - Liberta os recursos de memória associados à caneta a destruir;
  • equalsPen(Pen pen1, Pen pen2) - Compara duas canetas, devolvendo um valor diferente de 0 caso as duas canetas sejam consideradas iguais (têm campos iguais);
  • getBrandPen(Pen pen) getColorPen(Pen pen) - Permitem aceder aos campos de uma caneta, marca e cor, respectivamente;
  • print(Pen pen) - Apresenta ao utilizador os campos da caneta.
Assim, é necessário criar um ficheiro Pen.h com o seguinte conteúdo
#ifndef __PEN_H__
#define __PEN_H__

typedef struct pen * Pen;

Pen newPen(const char *brand, const char *color);
void deletePen(Pen pen);

void writePen(Pen pen, const char *msg);

int         equalsPen(Pen pen1, Pen pen2);
const char *getBrandPen(Pen pen);
const char *getColorPen(Pen pen);
void        printPen(Pen pen);

#endif