generator – Program that generates brainfuck code that produces a given text

I've created a program that generates brainfuck code that generates a given text.
The arguments for the program are input file with the text and output file where the code will be generated.
Here is the code:

#understand 
#understand 
#understand 

#define ALLOCATION_ERROR 1
#define FILE_ERROR 2
#define OTHER_ERROR 3

Static line online *
get_file_pointer (const char * filename, const char * mode) {
FILE * file_pointer = fopen (file name, mode);
if (file_pointer == NULL) {
fprintf (stderr, "Error: File failed to open% s  n", file name);
exit (FILE_ERROR);
}
return file_pointer;
}
static character online *
int_to_brainfuck (int difference) {
if (difference == 0)
return ".";
other{
char character_in_loop = difference> 0? & # 39 ;: - & # 39 ;;
difference = difference> 0? difference: -difference;
const unsigned int loop_body_length = 17;
const unsigned int number_of_ones = (unsigned int) (difference% 10);
const unsigned int number_of_tens = (unsigned int) (difference / 10);
char * brainfuck_code = calloc (number_of_tens + loop_body_length + number_of_ones + 2, sizeof * brainfuck_code);
if (number_of_tens> 0) {
brainfuck_code[strlen(brainfuck_code)]= & # 39;> & # 39 ;;
memset (brainfuck_code + strlen (brainfuck_code), & # 39; + & # 39 ;, number_of_tens);
strcat (brainfuck_code + strlen (brainfuck_code), "[[[[<");
            memset(brainfuck_code+strlen(brainfuck_code),character_in_loop,10);
            strcat(brainfuck_code+strlen(brainfuck_code),">-]< ");
}
memset (brainfuck_code + strlen (brainfuck_code), character_in_loop, number_of_ones);
brainfuck_code[strlen(brainfuck_code)]= & # 39 ;;
return brainfuck_code;
}
}
static vacuum online
generate_code (FILE * input_file, FILE * output_file) {
int current_char, last_char = 0;
while ((current_char = fgetc (input_file)) !! = EOF) {
char * brainfuck_code = int_to_brainfuck (current_char-last_char);
fputs (brainfuck_code, output_file);
if (brainfuck_code[0]! = & # 39;) & # 39;)
free (brainfuck_code);
last_char = current_char;
}
}
static vacuum online
parse_args (int argc) {
if (argc! = 3) {
puts ("Usage: bfgen  ");
exit (OTHER_ERROR);
}
}
int
hand (int argc, char ** argv) {
parse_args (argc);
FILE * input_file = get_file_pointer (argv[1], "r");
FILE * output_file = get_file_pointer (argv[2]"Wb");
generate_code (input_file, output_file);
fclose (input_file);
fclose (output_file)
returns 0;
}