diff --git a/src/baralho.h b/src/baralho.h
new file mode 100644
index 0000000000000000000000000000000000000000..a3276219c85ff8114e0987dca4e8e9add0e5e88d
--- /dev/null
+++ b/src/baralho.h
@@ -0,0 +1,61 @@
+#ifndef H_BARALHO_H
+#define H_BARALHO_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <time.h>
+
+#define NAIPES 4
+#define CARTAS 13
+#define MAGIC_LEN 4 /* 2 letras, 1 '\n', 1 '\0' */
+#define PPMEXT "ppm"
+
+static char vals[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'D', 'J', 'Q', 'K'};
+static char naipes[4] = {'P', 'C', 'E', 'O'};
+int load;
+
+FILE *ENTRADA;
+
+typedef struct {
+  unsigned char R, G, B;
+} Pixel;
+
+typedef struct {
+  char valor, naipe;
+  /* É necessário alocar o espaço da imagem.
+     img é um ponteiro para um vetor que guarda os dados
+     da carta (pixels), com exceção do cabeçalho. */
+  Pixel *img;
+} Carta;
+
+typedef struct {
+  char magic[MAGIC_LEN];
+  int w, h, maxval;
+} Cabecalho;
+
+/* Baralho é do tipo Carta**, o baralho é uma matriz de cartas.
+   É a imagem original com "recortes" nas cartas. */
+typedef Carta **Baralho;
+
+/* Enquanto Baralho é a imagem original "recortada", Monte são as
+   as cartas propriamente ditas empilhadas, porem sem a imagem. */
+typedef char  **Monte;
+
+typedef struct tm tm;
+
+Cabecalho cabeca;
+
+Carta NADA;
+
+Baralho init (char *imgFile, int cw,  int ch, char primCarta, char *ordNaipes);
+Baralho geraBaralho (Baralho cartas);
+Carta getCarta (char naipe, char valor, Baralho cartas);
+void geraCarta (char naipe, char valor, Baralho cartas);
+Monte criaMonte (int n);
+Carta tiraCarta (Monte deck, Baralho bar);
+Monte colocaCarta (int n, Carta c, Monte deck);
+void troca (Monte deck, int i, int ir);
+Monte embaralha (Monte deck);
+
+#endif
\ No newline at end of file