1 |
/* |
2 |
* messages.c |
3 |
*/ |
4 |
|
5 |
#include "gui.h" |
6 |
|
7 |
|
8 |
/* |
9 |
* gui_messages_read |
10 |
*/ |
11 |
|
12 |
char **gui_messages_read(const char *file_name) |
13 |
{ |
14 |
char *data; |
15 |
char **table; |
16 |
unsigned int size = 0, count = 0, pos = 0, i, len; |
17 |
int c; |
18 |
FILE *file; |
19 |
|
20 |
file = fopen(file_name, "rb"); |
21 |
if (file == NULL) gui_raise_error("unable to open file"); |
22 |
|
23 |
while ((c = fgetc(file)) != EOF) |
24 |
{ |
25 |
size++; |
26 |
if (c == '\n') count++; |
27 |
} |
28 |
size++; |
29 |
|
30 |
data = malloc(size); |
31 |
if (data == NULL) gui_raise_error("out of memory"); |
32 |
table = calloc(count, sizeof(char *)); |
33 |
if (table == NULL) gui_raise_error("out of memory"); |
34 |
|
35 |
if (fseek(file, 0, SEEK_SET)) gui_raise_error("file seek failed"); |
36 |
|
37 |
for (i = 0; i < count; i++) |
38 |
{ |
39 |
if (!fgets(data + pos, size - pos, file)) gui_raise_error("fgets failed"); |
40 |
len = strlen(data + pos); |
41 |
data[pos + len - 1] = '\0'; |
42 |
table[i] = data + pos; |
43 |
pos += len; |
44 |
} |
45 |
|
46 |
fclose(file); |
47 |
|
48 |
return table; |
49 |
} |