-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmysakLib.c
142 lines (130 loc) · 5.5 KB
/
mysakLib.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include "mysakLib.h"
#include "internals.h"
#include <stdarg.h>
#include <time.h>
bool_t MysakLib_initialize()
{
return MysakLib_initialize_li(M_LOGLEVEL_INFO, M_LOGLEVEL_WARNING);
}
bool_t MysakLib_initialize_l(int logLevel)
{
return MysakLib_initialize_li(logLevel, M_LOGLEVEL_WARNING);
}
bool_t MysakLib_initialize_li(int logLevel, int internalLoglevel)
{
MysakLib_internals_initialized = TRUE;
MysakLib_internals_mlib.randSeed = time(NULL);
MysakLib_internals_mlib.startTime = time(NULL);
MysakLib_internals_mlib.loglevel = logLevel;
MysakLib_internals_mlib.internalLoglevel = internalLoglevel;
MysakLib_internals_mlib.logfile = fopen(M_LOGFILE_NAME, "w");
if (MysakLib_internals_mlib.logfile == NULL) {
MysakLib_internals_logWarning("Failed to open logfile");
}
#if defined INTERACTIVE && !defined _WIN
tcgetattr(STDIN_FILENO, &(MysakLib_internals_mlib.oldTerminos));
tcgetattr(STDIN_FILENO, &(MysakLib_internals_mlib.newTerminos));
MysakLib_internals_mlib.newTerminos.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
MysakLib_internals_mlib.newTerminos.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
MysakLib_internals_mlib.newTerminos.c_cflag &= ~(CSIZE | PARENB);
MysakLib_internals_mlib.newTerminos.c_cflag |= CS8;
makeRawConsole();
#endif
MysakLib_internals_logDebug("MysakLib: initialized");
return TRUE;
}
void MysakLib_delete()
{
MysakLib_internals_assertInitialized();
MysakLib_internals_logDebug("MysakLib: delete");
if (MysakLib_internals_mlib.logfile != NULL)
fclose(MysakLib_internals_mlib.logfile);
MysakLib_internals_initialized = FALSE;
MysakLib_internals_mlib.logfile = NULL;
makeNormalConsole();
}
ulong_t MysakLib_randUInt(ulong_t min, ulong_t max)
{
MysakLib_internals_assertInitialized();
ulong_t oldSeed = MysakLib_internals_mlib.randSeed;
MysakLib_internals_mlib.randSeed = ((1103515245ULL * MysakLib_internals_mlib.randSeed) + 12345ULL) % (1ULL << 31);
MysakLib_internals_logInfo("randUInt %lu -> %lu %lu~%lu = %lu", oldSeed, MysakLib_internals_mlib.randSeed, min, max, (MysakLib_internals_mlib.randSeed % (max - min)) + min);
return (MysakLib_internals_mlib.randSeed % (max - min)) + min;
}
long MysakLib_randInt(long min, long max)
{
MysakLib_internals_assertInitialized();
ulong_t oldSeed = MysakLib_internals_mlib.randSeed;
MysakLib_internals_mlib.randSeed = ((1103515245ULL * MysakLib_internals_mlib.randSeed) + 12345ULL) % (1ULL << 31);
MysakLib_internals_logInfo("ranUInt %lu -> %lu %ld~%ld = %ld", oldSeed, MysakLib_internals_mlib.randSeed, min, max, (MysakLib_internals_mlib.randSeed % (max - min)) + min);
return (MysakLib_internals_mlib.randSeed % (max - min)) + min;
}
bool_t m_prob(ulong_t probability)
{
MysakLib_internals_assertInitialized();
ulong_t oldSeed = MysakLib_internals_mlib.randSeed;
MysakLib_internals_mlib.randSeed = ((1103515245ULL * MysakLib_internals_mlib.randSeed) + 12345ULL) % (1ULL << 31);
bool_t result = (MysakLib_internals_mlib.randSeed % 100) < probability ? TRUE : FALSE;
MysakLib_internals_logInfo("prob (%lu%%) %lu -> %lu (%lu%%) = %s", probability, oldSeed, MysakLib_internals_mlib.randSeed, (MysakLib_internals_mlib.randSeed % 100), result ? "true" : "false");
return result;
}
void MysakLib_logError(const char* format, ...)
{
char buffer[1025];
va_list args;
MysakLib_internals_assertInitialized();
va_start(args, format);
vsnprintf(buffer, 1024, format, args);
if (MysakLib_internals_mlib.loglevel >= M_LOGLEVEL_ERROR) {
buffer[1024] = '\0';
fprintf(MysakLib_internals_mlib.logfile != NULL ? MysakLib_internals_mlib.logfile : stderr, "%5ld ERROR %s\n", time(NULL) - MysakLib_internals_mlib.startTime, buffer);
}
va_end(args);
if (MysakLib_internals_mlib.logfile != NULL)
fflush(MysakLib_internals_mlib.logfile);
}
void MysakLib_logWarning(const char* format, ...)
{
char buffer[1025];
va_list args;
MysakLib_internals_assertInitialized();
va_start(args, format);
vsnprintf(buffer, 1024, format, args);
if (MysakLib_internals_mlib.loglevel >= M_LOGLEVEL_WARNING) {
buffer[1024] = '\0';
fprintf(MysakLib_internals_mlib.logfile != NULL ? MysakLib_internals_mlib.logfile : stderr, "%5ld WARN %s\n", time(NULL) - MysakLib_internals_mlib.startTime, buffer);
}
va_end(args);
if (MysakLib_internals_mlib.logfile != NULL)
fflush(MysakLib_internals_mlib.logfile);
}
void MysakLib_logInfo(const char* format, ...)
{
char buffer[1025];
va_list args;
MysakLib_internals_assertInitialized();
va_start(args, format);
vsnprintf(buffer, 1024, format, args);
if (MysakLib_internals_mlib.loglevel >= M_LOGLEVEL_INFO) {
buffer[1024] = '\0';
fprintf(MysakLib_internals_mlib.logfile != NULL ? MysakLib_internals_mlib.logfile : stderr, "%5ld INFO %s\n", time(NULL) - MysakLib_internals_mlib.startTime, buffer);
}
va_end(args);
if (MysakLib_internals_mlib.logfile != NULL)
fflush(MysakLib_internals_mlib.logfile);
}
void MysakLib_logDebug(const char* format, ...)
{
char buffer[1025];
va_list args;
MysakLib_internals_assertInitialized();
va_start(args, format);
vsnprintf(buffer, 1024, format, args);
if (MysakLib_internals_mlib.loglevel >= M_LOGLEVEL_DEBUG) {
buffer[1024] = '\0';
fprintf(MysakLib_internals_mlib.logfile != NULL ? MysakLib_internals_mlib.logfile : stderr, "%5ld DEBUG %s\n", time(NULL) - MysakLib_internals_mlib.startTime, buffer);
}
va_end(args);
if (MysakLib_internals_mlib.logfile != NULL)
fflush(MysakLib_internals_mlib.logfile);
}