Subversion Repositories Kolibri OS

Rev

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

Rev 5078 Rev 5271
1
#include 
1
#include 
2
#include 
2
#include 
3
#include 
-
 
4
#include 
-
 
5
#include "radeon.h"
3
#include "radeon.h"
6
#include "radeon_object.h"
4
#include "radeon_object.h"
7
 
5
 
8
extern int radeon_benchmarking;
6
extern int radeon_benchmarking;
9
 
7
 
10
static int my_atoi(char **cmd)
8
static int my_atoi(char **cmd)
11
{
9
{
12
    char* p = *cmd;
10
    char* p = *cmd;
13
    int val = 0;
11
    int val = 0;
14
 
12
 
15
    for (;; *p++) {
13
    for (;; *p++) {
16
        switch (*p) {
14
        switch (*p) {
17
        case '0' ... '9':
15
        case '0' ... '9':
18
            val = 10*val+(*p-'0');
16
            val = 10*val+(*p-'0');
19
            break;
17
            break;
20
        default:
18
        default:
21
            *cmd = p;
19
            *cmd = p;
22
            return val;
20
            return val;
23
        }
21
        }
24
    }
22
    }
25
}
23
}
26
 
24
 
27
char* parse_mode(char *p, videomode_t *mode)
25
char* parse_mode(char *p, videomode_t *mode)
28
{
26
{
29
    char c;
27
    char c;
30
 
28
 
31
    while( (c = *p++) == ' ');
29
    while( (c = *p++) == ' ');
32
 
30
 
33
    if( c )
31
    if( c )
34
    {
32
    {
35
        p--;
33
        p--;
36
 
34
 
37
        mode->width = my_atoi(&p);
35
        mode->width = my_atoi(&p);
38
        if(*p == 'x') p++;
36
        if(*p == 'x') p++;
39
 
37
 
40
        mode->height = my_atoi(&p);
38
        mode->height = my_atoi(&p);
41
        if(*p == 'x') p++;
39
        if(*p == 'x') p++;
42
 
40
 
43
        mode->bpp = 32;
41
        mode->bpp = 32;
44
 
42
 
45
        mode->freq = my_atoi(&p);
43
        mode->freq = my_atoi(&p);
46
 
44
 
47
        if( mode->freq == 0 )
45
        if( mode->freq == 0 )
48
            mode->freq = 60;
46
            mode->freq = 60;
49
    }
47
    }
50
 
48
 
51
    return p;
49
    return p;
52
};
50
};
53
 
51
 
54
char* parse_path(char *p, char *log)
52
char* parse_path(char *p, char *log)
55
{
53
{
56
    char  c;
54
    char  c;
57
 
55
 
58
    while( (c = *p++) == ' ');
56
    while( (c = *p++) == ' ');
59
    p--;
57
    p--;
60
    while( (c = *log++ = *p++) && (c != ' '));
58
    while( (c = *log++ = *p++) && (c != ' '));
61
    *log = 0;
59
    *log = 0;
62
 
60
 
63
    return p;
61
    return p;
64
};
62
};
65
 
63
 
66
void parse_cmdline(char *cmdline, videomode_t *mode, char *log, int *kms)
64
void parse_cmdline(char *cmdline, videomode_t *mode, char *log, int *kms)
67
{
65
{
68
    char *p = cmdline;
66
    char *p = cmdline;
69
 
67
 
70
    char c = *p++;
68
    char c = *p++;
71
 
69
 
72
    while( c )
70
    while( c )
73
    {
71
    {
74
        if( c == '-')
72
        if( c == '-')
75
        {
73
        {
76
            switch(*p++)
74
            switch(*p++)
77
            {
75
            {
78
                case 'b':
76
                case 'b':
79
                    radeon_benchmarking = 1;
77
                    radeon_benchmarking = 1;
80
                    break;
78
                    break;
81
 
79
 
82
                case 'l':
80
                case 'l':
83
                    p = parse_path(p, log);
81
                    p = parse_path(p, log);
84
                    break;
82
                    break;
85
 
83
 
86
                case 'm':
84
                case 'm':
87
                    p = parse_mode(p, mode);
85
                    p = parse_mode(p, mode);
88
                    break;
86
                    break;
89
 
87
 
90
                case 'n':
88
                case 'n':
91
                    *kms = 0;
89
                    *kms = 0;
92
            };
90
            };
93
        };
91
        };
94
        c = *p++;
92
        c = *p++;
95
    };
93
    };
96
};
94
};