1 #include "dragonfail.h"
2 #include "dragonfail_private.h"
3 #include "dragonfail_error.h"
4 
5 #ifdef DRAGONFAIL_BASIC_LOG
6 #include <stdio.h>
7 #endif
8 
9 #ifdef DRAGONFAIL_ABORT
10 #include <stdlib.h>
11 #endif
12 
13 // extern
14 struct dgn dgn;
15 
dgn_init()16 inline char** dgn_init()
17 {
18 	#ifndef DRAGONFAIL_SKIP
19 		dgn.error = DGN_OK;
20 		return dgn.log;
21 	#else
22 		return NULL;
23 	#endif
24 }
25 
dgn_reset()26 inline void dgn_reset()
27 {
28 	#ifndef DRAGONFAIL_SKIP
29 		dgn.error = DGN_OK;
30 	#endif
31 }
32 
dgn_basic_log()33 inline void dgn_basic_log()
34 {
35 	#ifdef DRAGONFAIL_BASIC_LOG
36 	#ifndef DRAGONFAIL_SKIP
37 		if (dgn.error < DGN_SIZE)
38 		{
39 			fprintf(stderr, "%s\n", dgn.log[dgn.error]);
40 		}
41 		else
42 		{
43 			fprintf(stderr, "%s\n", dgn.log[0]);
44 		}
45 	#endif
46 	#endif
47 }
48 
dgn_output_log()49 inline char* dgn_output_log()
50 {
51 	if (dgn.error < DGN_SIZE)
52 	{
53 		return dgn.log[dgn.error];
54 	}
55 	else
56 	{
57 		return dgn.log[0];
58 	}
59 }
60 
dgn_output_code()61 enum dgn_error dgn_output_code()
62 {
63 	return dgn.error;
64 }
65 
dgn_throw(enum dgn_error new_code)66 inline void dgn_throw(enum dgn_error new_code)
67 {
68 	#ifndef DRAGONFAIL_SKIP
69 		dgn.error = new_code;
70 
71 		#ifdef DRAGONFAIL_THROW_BASIC_LOG
72 		#ifdef DRAGONFAIL_BASIC_LOG
73 			dgn_basic_log();
74 		#endif
75 		#endif
76 
77 		#ifdef DRAGONFAIL_ABORT
78 			abort();
79 		#endif
80 	#endif
81 }
82 
dgn_catch()83 inline char dgn_catch()
84 {
85 	#ifndef DRAGONFAIL_SKIP
86 		return (dgn.error != DGN_OK);
87 	#else
88 		return 0;
89 	#endif
90 }
91