Subversion Repositories Kolibri OS

Rev

Rev 5238 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5238 Rev 5248
1
#include "config.h"
1
#include "config.h"
2
 
2
 
3
#pragma pack(push,1)
3
#pragma pack(push,1)
4
 
4
 
5
typedef struct {
5
typedef struct {
6
    __u32 func;
6
    __u32 func;
7
    __u32 l_off;
7
    __u32 l_off;
8
    __u32 h_off_flags;
8
    __u32 h_off_flags;
9
    __u32 size;
9
    __u32 size;
10
    char* data;
10
    char* data;
11
    char  null;
11
    char  null;
12
    char* name;
12
    char* name;
13
} fs_info;
13
} fs_info;
14
 
14
 
15
#pragma pack(pop)
15
#pragma pack(pop)
16
 
16
 
17
char path[] = "/sys/games/2048.dat";
17
char path[] = "/sys/games/2048.dat";
18
 
18
 
19
__u32 config_load_highscore()
19
__u8 config_load(config_state* st)
20
{
-
 
21
    __u32 highscore = 0;
-
 
22
 
20
{
23
    fs_info cfg = {0};
21
    fs_info cfg = {0};
24
    cfg.func = 0;
22
    cfg.func = 0;
25
    cfg.size = sizeof(__u32);
23
    cfg.size = sizeof(config_state);
26
    cfg.data = (char*)&highscore;
24
    cfg.data = (char*)st;
27
    cfg.name = path;
25
    cfg.name = path;
28
 
26
 
29
    __u32 ret = 0;
27
    __u32 ret = 0;
30
    __u32 rnum = 0;
28
    __u32 rnum = 0;
31
 
29
 
32
    __asm__ __volatile__("int $0x40":"=a"(ret),"=b"(rnum):
30
    __asm__ __volatile__("int $0x40":"=a"(ret),"=b"(rnum):
33
                         "a"(70),
31
                         "a"(70),
34
                         "b"((__u32)(&cfg)):
32
                         "b"((__u32)(&cfg)):
35
                         "memory");
33
                         "memory");
36
 
34
 
37
    if (ret || (rnum != 4)) highscore = 0;
-
 
38
 
-
 
39
    return highscore;
35
    return !ret || (rnum == cfg.size);
40
}
36
}
41
 
37
 
42
void config_save_highscore(__u32 score)
38
__u8 config_save(config_state* st)
43
{
39
{
44
    fs_info cfg = {0};
40
    fs_info cfg = {0};
45
    cfg.func = 2;
41
    cfg.func = 2;
46
    cfg.size = sizeof(__u32);
42
    cfg.size = sizeof(config_state);
47
    cfg.data = (char*)&score;
43
    cfg.data = (char*)st;
48
    cfg.name = path;
44
    cfg.name = path;
49
 
45
 
50
    __u32 ret = 0;
46
    __u32 ret = 0;
51
    __u32 wnum = 0;
47
    __u32 wnum = 0;
52
 
48
 
53
    __asm__ __volatile__("int $0x40":"=a"(ret),"=b"(wnum):
49
    __asm__ __volatile__("int $0x40":"=a"(ret),"=b"(wnum):
54
                         "a"(70),
50
                         "a"(70),
55
                         "b"((__u32)(&cfg)):
51
                         "b"((__u32)(&cfg)):
56
                         "memory");
52
                         "memory");
-
 
53
 
-
 
54
    return !ret || (wnum == cfg.size);
57
}
55
}