--- /dev/null
+
+#ifndef _BS_H_
+#define _BS_H_
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+typedef struct _bs_data_t_ {
+ unsigned long int pos_inicial;
+ unsigned long int pos_final;
+ unsigned long int pos_orden;
+ char ord; /* indica si esta ordenada */
+} t_BlockSortData;
+
+typedef struct _bs_t_ {
+ t_BlockSortData *array;
+ unsigned long int *ord;
+ unsigned long int len;
+} t_BlockSort;
+
+/** Inicializa un BlockSorting
+ *
+ * \param len Tamaño de página a utilizar
+ */
+t_BlockSort *bs_create(unsigned long int len);
+
+/** Libera un BlockSorting
+ *
+ * \param bs BlockSorting previamente inicializado.
+ */
+void bs_destroy(t_BlockSort *bs);
+
+/** Resuelve un BlockSorting
+ *
+ * \param in Array de bytes que se pretende procesar.
+ * \param out Array donde guardar la columna resultante.
+ * \param k Puntero donde guardar la posicion del array original.
+ * \oaram leido Tamaño de in (por si el tamaño de in es menor al de la pagina).
+ */
+void bs_solve(char *in, char *out, t_BlockSort *bs, unsigned long int *k, unsigned int leido);
+
+/** Obtiene el array original a partir de dst y k
+ *
+ * \param dst Array donde guardar el array original
+ * \param c Array generado opr bs_solve.
+ * \param k Valor retornado por bs_solve.
+ * \param len Tamaño de c
+ */
+void bs_restore(char *dst, char *c, unsigned long int k, unsigned long int len);
+
+#endif
+