Chameleon

Chameleon Commit Details

Date:2011-09-18 16:18:31 (12 years 7 months ago)
Author:JrCs
Commit:1529
Parents: 1528
Message:New Keylayout module
Changes:
A/trunk/i386/modules/Keylayout/Keylayout.c
A/trunk/i386/modules/Keylayout/Cconfig
A/trunk/i386/modules/Keylayout/Readme.txt
A/trunk/i386/modules/Keylayout/layouts/layouts-src/mac-de.slt
A/trunk/i386/modules/Keylayout/Keylayout.h
A/trunk/i386/modules/Keylayout/layouts/Makefile
A/trunk/i386/modules/Keylayout/Makefile
A/trunk/i386/modules/Keylayout/layouts/layouts-src/README
A/trunk/i386/modules/Keylayout/layouts/layouts-src
A/trunk/i386/modules/Keylayout/layouts/layouts-src/mac-es.slt
A/trunk/i386/modules/Keylayout/layouts/layouts-src/mac-fr.slt
A/trunk/i386/modules/Keylayout/layouts/layouts-src/mac-se.slt
A/trunk/i386/modules/Keylayout/layouts/cham-mklayout.c
A/trunk/i386/modules/Keylayout/layouts/layouts-src/pc-fr.slt
A/trunk/i386/modules/Keylayout/layouts
A/trunk/i386/modules/Keylayout
A/trunk/i386/modules/Keylayout/layouts/layouts-src/mac-it.slt
M/trunk/doc/BootHelp.txt
M/trunk/i386/modules/Cconfig
M/trunk/Makefile
M/trunk/i386/modules/Makefile
M/trunk/Chameleon.xcodeproj/project.pbxproj
M/trunk/i386/modules/MakeInc.dir

File differences

trunk/Chameleon.xcodeproj/project.pbxproj
679679
680680
681681
682
683682
684683
685684
......
878877
879878
880879
880
881
882
883
884
885
886
887
888
889
890
891
881892
882893
883894
......
23422353
23432354
23442355
2345
2356
2357
2358
2359
23462360
23472361
23482362
23492363
2350
2351
2352
2353
2354
2355
2356
2357
23582364
23592365
23602366
......
25872593
25882594
25892595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
25902620
25912621
25922622
A3561CAF1414024C00E9B51E /* HelloWorld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HelloWorld.cpp; sourceTree = "<group>"; };
A3561CB11414024C00E9B51E /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
A3561CB31414024C00E9B51E /* modules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = modules; sourceTree = "<group>"; };
A3561CB61414024D00E9B51E /* test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test; sourceTree = "<group>"; };
A3561CB81414024D00E9B51E /* __ashldi3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = __ashldi3.c; sourceTree = "<group>"; };
A3561CB91414024D00E9B51E /* __ashrdi3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = __ashrdi3.c; sourceTree = "<group>"; };
A3561CBA1414024D00E9B51E /* __clzsi2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = __clzsi2.c; sourceTree = "<group>"; };
A3561D7F1414024D00E9B51E /* utility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = utility.cpp; sourceTree = "<group>"; };
A3561D801414024D00E9B51E /* valarray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = valarray.cpp; sourceTree = "<group>"; };
A3561D811414024D00E9B51E /* vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector.cpp; sourceTree = "<group>"; };
A3561DA61414296600E9B51E /* Keylayout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Keylayout.c; sourceTree = "<group>"; };
A3561DA71414296600E9B51E /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
A3561DA81414296600E9B51E /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = "<group>"; };
A35D216F141A73B000969AC0 /* cham-mklayout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "cham-mklayout.c"; sourceTree = "<group>"; };
A35D2171141A73B000969AC0 /* mac-de.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-de.slt"; sourceTree = "<group>"; };
A35D2172141A73B000969AC0 /* mac-es.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-es.slt"; sourceTree = "<group>"; };
A35D2173141A73B000969AC0 /* mac-fr.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-fr.slt"; sourceTree = "<group>"; };
A35D2174141A73B000969AC0 /* mac-it.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-it.slt"; sourceTree = "<group>"; };
A35D2175141A73B000969AC0 /* mac-se.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-se.slt"; sourceTree = "<group>"; };
A35D2176141A73B000969AC0 /* pc-fr.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "pc-fr.slt"; sourceTree = "<group>"; };
A35D2177141A73B000969AC0 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
A35D2178141A753E00969AC0 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
A360AA7D14136C1A00084D3F /* Make.rules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Make.rules; sourceTree = "<group>"; };
B0056CE711F3868000754B65 /* boot0.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = boot0.s; sourceTree = "<group>"; };
B0056CE811F3868000754B65 /* chain0.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = chain0.s; sourceTree = "<group>"; };
A3561CB41414024C00E9B51E /* Keylayout */ = {
isa = PBXGroup;
children = (
A3561CB51414024C00E9B51E /* utils */,
A35D216E141A73B000969AC0 /* layouts */,
A3561DA81414296600E9B51E /* Cconfig */,
A3561DA61414296600E9B51E /* Keylayout.c */,
A3561DA71414296600E9B51E /* Makefile */,
);
path = Keylayout;
sourceTree = "<group>";
};
A3561CB51414024C00E9B51E /* utils */ = {
isa = PBXGroup;
children = (
A3561CB61414024D00E9B51E /* test */,
);
path = utils;
sourceTree = "<group>";
};
A3561CB71414024D00E9B51E /* klibc */ = {
isa = PBXGroup;
children = (
path = include;
sourceTree = "<group>";
};
A35D216E141A73B000969AC0 /* layouts */ = {
isa = PBXGroup;
children = (
A35D216F141A73B000969AC0 /* cham-mklayout.c */,
A35D2170141A73B000969AC0 /* layouts-src */,
A35D2177141A73B000969AC0 /* Makefile */,
);
path = layouts;
sourceTree = "<group>";
};
A35D2170141A73B000969AC0 /* layouts-src */ = {
isa = PBXGroup;
children = (
A35D2178141A753E00969AC0 /* README */,
A35D2171141A73B000969AC0 /* mac-de.slt */,
A35D2172141A73B000969AC0 /* mac-es.slt */,
A35D2173141A73B000969AC0 /* mac-fr.slt */,
A35D2174141A73B000969AC0 /* mac-it.slt */,
A35D2175141A73B000969AC0 /* mac-se.slt */,
A35D2176141A73B000969AC0 /* pc-fr.slt */,
);
path = "layouts-src";
sourceTree = "<group>";
};
B0056CE511F3868000754B65 /* i386 */ = {
isa = PBXGroup;
children = (
trunk/i386/modules/MakeInc.dir
77
88
99
10
1110
1211
1312
IMGSKELROOT = $(SRCROOT)/imgskel
CDBOOT = ${IMGROOT}/usr/standalone/i386/cdboot
ifeq ($(BUILT_IN),yes)
override OBJROOT = $(SRCROOT)/obj/i386/boot2_modules/$(DIR)
override SYMROOT = $(SRCROOT)/obj/i386/
trunk/i386/modules/Keylayout/layouts/layouts-src/mac-es.slt
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
# Keycode Normal Shift Alt Shift+Alt
# 1rst Row
keycode 0x02 = 1 VoidSymbol
keycode 0x03 = 2 !
keycode 0x04 = 3 #
keycode 0x05 = 4 $
keycode 0x06 = 5 % [
keycode 0x07 = 6 / \
keycode 0x08 = 7 & |
keycode 0x09 = 8 *
keycode 0x0a = 9 (
keycode 0x0b = 0 )
keycode 0x0c = minus underscore minus
keycode 0x0d = = +
keycode 0x0e = Backspace
# 2nd Row
keycode 0x0f = Tab
keycode 0x10 = q Q
keycode 0x11 = w W
keycode 0x12 = e E
keycode 0x13 = r R
keycode 0x14 = t T
keycode 0x15 = y Y
keycode 0x16 = u U
keycode 0x17 = i I ^
keycode 0x18 = o O
keycode 0x19 = p P
keycode 0x1a = VoidSymbol VoidSymbol
keycode 0x1b = ` VoidSymbol |
# 3rd Row
keycode 0x1e = a A
keycode 0x1f = s S
keycode 0x20 = d D
keycode 0x21 = f F
keycode 0x22 = g G @ ,
keycode 0x23 = h H
keycode 0x24 = j J
keycode 0x25 = k K
keycode 0x26 = l L
keycode 0x27 = VoidSymbol VoidSymbol ~
keycode 0x28 = ; :
keycode 0x2b = ' " ] }
# 4th Row
keycode 0x29 = < > [ {
keycode 0x2c = z Z
keycode 0x2d = x X
keycode 0x2e = c C
keycode 0x2f = v V
keycode 0x30 = b B
shift alt keycode 0x30 = <
keycode 0x31 = n N > >
keycode 0x32 = m M
keycode 0x33 = , VoidSymbol
keycode 0x34 = . ?
keycode 0x35 = VoidSymbol VoidSymbol
trunk/i386/modules/Keylayout/layouts/layouts-src/mac-fr.slt
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
# Keycode Normal Shift Alt Shift+Alt
# 1ère Ligne
keycode 0x02 = & 1
keycode 0x03 = VoidSymbol 2
keycode 0x04 = " 3
keycode 0x05 = ' 4
keycode 0x06 = ( 5 { [
keycode 0x07 = VoidSymbol 6
keycode 0x08 = VoidSymbol 7
keycode 0x09 = ! 8
keycode 0x0a = VoidSymbol 9
keycode 0x0b = VoidSymbol 0
keycode 0x0c = ) VoidSymbol } ]
keycode 0x0d = - _
keycode 0x0e = Backspace
# 2ème Ligne
keycode 0x0f = Tab
keycode 0x10 = a A
keycode 0x11 = z Z
keycode 0x12 = e E
keycode 0x13 = r R
keycode 0x14 = t T
keycode 0x15 = y Y
keycode 0x16 = u U
keycode 0x17 = i I
keycode 0x18 = o O
keycode 0x19 = p P
keycode 0x1a = ^ VoidSymbol
keycode 0x1b = $ *
# 3ème Ligne
keycode 0x1e = q Q
keycode 0x1f = s S
keycode 0x20 = d D
keycode 0x21 = f F
keycode 0x22 = g G
keycode 0x23 = h H
keycode 0x24 = j J
keycode 0x25 = k K
keycode 0x26 = l L
shift alt keycode 0x26 = |
keycode 0x27 = m M
keycode 0x28 = VoidSymbol %
keycode 0x2b = ` VoidSymbol @ #
# 4ème Ligne
keycode 0x29 = < >
keycode 0x2c = w W
keycode 0x2d = x X
keycode 0x2e = c C
keycode 0x2f = v V
keycode 0x30 = b B
keycode 0x31 = n N ~
keycode 0x32 = , ?
keycode 0x33 = ; .
keycode 0x34 = : /
shift alt keycode 0x34 = \
keycode 0x35 = = +
trunk/i386/modules/Keylayout/layouts/layouts-src/mac-se.slt
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
# Keycode Normal Shift Alt Shift+Alt
# 1rst Row
keycode 0x02 = 1 !
keycode 0x03 = 2 "
keycode 0x04 = 3 #
keycode 0x05 = 4 VoidSymbol $
keycode 0x06 = 5 %
keycode 0x07 = 6 &
keycode 0x08 = 7 / | \
keycode 0x09 = 8 ( [ {
keycode 0x0a = 9 ) ] }
keycode 0x0b = 0 =
keycode 0x0c = + ?
keycode 0x0d = VoidSymbol `
keycode 0x0e = Backspace
# 2nd Row
keycode 0x0f = Tab
keycode 0x10 = q Q
keycode 0x11 = w W
keycode 0x12 = e E
keycode 0x13 = r R
keycode 0x14 = t T
keycode 0x15 = y Y
keycode 0x16 = u U
keycode 0x17 = i I ^
keycode 0x18 = o O
keycode 0x19 = p P
keycode 0x1a = VoidSymbol VoidSymbol VoidSymbol
keycode 0x1b = VoidSymbol ^ ~ ^
# 3rd Row
keycode 0x1e = a A
keycode 0x1f = s S
keycode 0x20 = d D
keycode 0x21 = f F
keycode 0x22 = g G ,
keycode 0x23 = h H
keycode 0x24 = j J
keycode 0x25 = k K
keycode 0x26 = l L
keycode 0x27 = VoidSymbol VoidSymbol
keycode 0x28 = VoidSymbol VoidSymbol
keycode 0x2b = ' * @ '
# 4th Row
keycode 0x29 = < > [ {
keycode 0x2c = z Z
keycode 0x2d = x X
keycode 0x2e = c C
keycode 0x2f = v V
keycode 0x30 = b B
keycode 0x31 = n N
keycode 0x32 = m M
keycode 0x33 = , ;
keycode 0x34 = . :
keycode 0x35 = minus underscore
trunk/i386/modules/Keylayout/layouts/layouts-src/mac-de.slt
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
# Keycode Normal Shift Alt Shift+Alt
# 1rst Row
keycode 0x02 = 1 !
keycode 0x03 = 2 "
keycode 0x04 = 3 VoidSymbol
keycode 0x05 = 4 $
keycode 0x06 = 5 % [
keycode 0x07 = 6 & ]
keycode 0x08 = 7 / |
keycode 0x09 = 8 ( {
keycode 0x0a = 9 ) }
keycode 0x0b = 0 =
keycode 0x0c = VoidSymbol ?
keycode 0x0d = VoidSymbol VoidSymbol
keycode 0x0e = Backspace
# 2nd Row
keycode 0x0f = Tab
keycode 0x10 = q Q
keycode 0x11 = w W
keycode 0x12 = e E
keycode 0x13 = r R
keycode 0x14 = t T
keycode 0x15 = y Y
keycode 0x16 = u U
keycode 0x17 = i I
keycode 0x18 = o O
keycode 0x19 = p P
keycode 0x1a = VoidSymbol VoidSymbol
keycode 0x1b = + *
# 3rd Row
keycode 0x1e = a A
keycode 0x1f = s S
keycode 0x20 = d D
keycode 0x21 = f F
keycode 0x22 = g G
keycode 0x23 = h H
keycode 0x24 = j J
keycode 0x25 = k K
keycode 0x26 = l L
keycode 0x27 = VoidSymbol VoidSymbol
keycode 0x28 = VoidSymbol VoidSymbol
keycode 0x2b = # '
# 4th Row
keycode 0x29 = < >
keycode 0x2c = y Y
keycode 0x2d = x X
keycode 0x2e = c C
keycode 0x2f = v V
keycode 0x30 = b B
keycode 0x31 = n N
keycode 0x32 = m M
keycode 0x33 = , ;
keycode 0x34 = . :
keycode 0x35 = minus underscore
trunk/i386/modules/Keylayout/layouts/layouts-src/pc-fr.slt
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
# Keycode Normal Shift Alt Shift+Alt
# 1ère Ligne
keycode 0x29 = < >
keycode 0x02 = & 1
keycode 0x03 = VoidSymbol 2 ~
keycode 0x04 = " 3 #
keycode 0x05 = ' 4 {
keycode 0x06 = ( 5 [
keycode 0x07 = minus 6 |
keycode 0x08 = VoidSymbol 7 `
keycode 0x09 = underscore 8 \
keycode 0x0a = VoidSymbol 9 ^
keycode 0x0b = VoidSymbol 0 @
keycode 0x0c = ) VoidSymbol ]
keycode 0x0d = = + }
keycode 0x0e = Backspace
# 2ème Ligne
keycode 0x0f = Tab
keycode 0x10 = a A
keycode 0x11 = z Z
keycode 0x12 = e E
keycode 0x13 = r R
keycode 0x14 = t T
keycode 0x15 = y Y
keycode 0x16 = u U
keycode 0x17 = i I
keycode 0x18 = o O
keycode 0x19 = p P
keycode 0x1a = ^ VoidSymbol
keycode 0x1b = $ VoidSymbol
# 3ème Ligne
keycode 0x1e = q Q
keycode 0x1f = s S
keycode 0x20 = d D
keycode 0x21 = f F
keycode 0x22 = g G
keycode 0x23 = h H
keycode 0x24 = j J
keycode 0x25 = k K
keycode 0x26 = l L
keycode 0x27 = m M
keycode 0x28 = VoidSymbol %
keycode 0x2b = * VoidSymbol
# 4ème Ligne
keycode 0x2c = w W
keycode 0x2d = x X
keycode 0x2e = c C
keycode 0x2f = v V
keycode 0x30 = b B
keycode 0x31 = n N
keycode 0x32 = , ?
keycode 0x33 = ; .
keycode 0x34 = : /
keycode 0x35 = ! VoidSymbol
trunk/i386/modules/Keylayout/layouts/layouts-src/mac-it.slt
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
# Keycode Normal Shift Alt Shift+Alt
# Prima riga
keycode 0x02 = ampersand one
keycode 0x03 = quotedbl two
keycode 0x04 = apostrophe three grave
keycode 0x05 = parenleft four braceleft bracketleft
keycode 0x06 = VoidSymbol five
keycode 0x07 = VoidSymbol six
keycode 0x08 = parenright seven braceright bracketright
keycode 0x09 = VoidSymbol eight
keycode 0x0a = VoidSymbol nine
keycode 0x0b = VoidSymbol zero
keycode 0x0c = minus underscore
keycode 0x0d = equal plus
keycode 0x0e = Backspace
# Seconda riga
keycode 0x0f = Tab
keycode 0x10 = q Q
keycode 0x11 = z Z
keycode 0x12 = e E
keycode 0x13 = r R
keycode 0x14 = t T
keycode 0x15 = y Y
keycode 0x16 = u U
keycode 0x17 = i I
keycode 0x18 = o O
keycode 0x19 = p P
keycode 0x1a = VoidSymbol ^
keycode 0x1b = $ *
# Terza riga
keycode 0x1e = a A
keycode 0x1f = s S
keycode 0x20 = d D
keycode 0x21 = f F
keycode 0x22 = g G
keycode 0x23 = h H
keycode 0x24 = j J
keycode 0x25 = k K
keycode 0x26 = l L
keycode 0x27 = m M
keycode 0x28 = VoidSymbol %
keycode 0x2b = ` VoidSymbol @ #
# Quarta riga
keycode 0x29 = < >
keycode 0x2c = w W
keycode 0x2d = x X
keycode 0x2e = c C
keycode 0x2f = v V
keycode 0x30 = b B
keycode 0x31 = n N ~
keycode 0x32 = , ?
keycode 0x33 = ; .
shift alt keycode 0x33 = %
keycode 0x34 = : / | \
keycode 0x35 = VoidSymbol !
trunk/i386/modules/Keylayout/layouts/layouts-src/README
1
2
You can create your own keylayout file with the cham-mklayout command with a
source file (*.slt) as input.
trunk/i386/modules/Keylayout/layouts/cham-mklayout.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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
/*
* cham-mklayout.c
* Chameleon
*
* Created by JrCs on 30/08/11.
* Copyright 2011. All rights reserved.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
#include <errno.h>
#include "stdint.h"
#include "term.h"
#include "keylayout.h"
#define PACKAGE_NAME"chameleon"
#define PROGRAM_VERSION"1.0"
static struct keyboard_layout default_layout = {
.keyboard_map = {
/* 0x00 */ 0, KEY_ESC, '1', '2', '3', '4', '5', '6',
/* 0x08 */ '7', '8', '9', '0', '-', '=', KEY_BKSP, KEY_TAB,
/* 0x10 */ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
/* 0x18 */ 'o', 'p', '[', ']', KEY_ENTER, 0, 'a', 's',
/* 0x20 */ 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
/* 0x28 */ '\'', '`', 0, '\\', 'z', 'x', 'c', 'v',
/* 0x30 */ 'b', 'n', 'm', ',', '.', '/', 0, 0
},
.keyboard_map_shift = {
/* 0x00 */ 0, KEY_ESC, '!', '@', '#', '$', '%', '^',
/* 0x08 */ '&', '*', '(', ')', '_', '+', KEY_BKSP, 0,
/* 0x10 */ 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
/* 0x18 */ 'O', 'P', '{', '}', KEY_ENTER, 0, 'A', 'S',
/* 0x20 */ 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':',
/* 0x28 */ '"', '~', 0, '|', 'Z', 'X', 'C', 'V',
/* 0x30 */ 'B', 'N', 'M', '<', '>', '?', 0, 0,
},
.keyboard_map_alt = {
/* 0x00 */ 0, KEY_NOECHO, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, KEY_NOECHO, KEY_NOECHO,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, KEY_NOECHO,
/* 0x28 */ KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO,
},
};
const char* program_name;
static struct option options[] = {
{"input", required_argument, 0, 'i'},
{"output", required_argument, 0, 'o'},
{"keysyms", no_argument, 0, 'k'},
{"help", no_argument, 0, 'h'},
{"version", no_argument, 0, 'V'},
{0, 0, 0, 0}
};
struct hash
{
const char *keysym;
int code;
};
static struct hash keysym_to_code[] = {
{"BackSpace",KEY_BKSP},
{"Tab",KEY_TAB},
{"Linefeed",0x000a},
{"Space",0x0020},
{"Exclam",0x0021},
{"QuoteDbl",0x0022},
{"NumberSign",0x0023},
{"Dollar",0x0024},
{"Percent",0x0025},
{"Ampersand",0x0026},
{"Apostrophe",0x0027},
{"Parenleft",0x0028},
{"Parenright",0x0029},
{"Asterisk",0x002a},
{"Plus",0x002b},
{"Comma",0x002c},
{"Minus",0x002d},
{"Period",0x002e},
{"Slash",0x002f},
{"Zero",0x0030},
{"One",0x0031},
{"Two",0x0032},
{"Three",0x0033},
{"Four",0x0034},
{"Five",0x0035},
{"Six",0x0036},
{"Seven",0x0037},
{"Eight",0x0038},
{"Nine",0x0039},
{"Colon",0x003a},
{"SemiColon",0x003b},
{"Less",0x003c},
{"Equal",0x003d},
{"Greater",0x003e},
{"Question",0x003f},
{"At",0x0040},
{"BracketLeft", 0x005b},
{"Backslash",0x005c},
{"BracketRight",0x005d},
{"AsciiCircum", 0x005e},
{"Underscore",0x005f},
{"Grave",0x0060},
{"BraceLeft",0x007b},
{"Bar",0x007c},
{"BraceRight",0x007d},
{"AsciiTilde",0x007e},
{"Enter",KEY_ENTER},
{"Escape",KEY_ESC},
{"PrintScreen",KEY_PRTSC},
{"Left",KEY_LEFT},
{"Right",KEY_RIGHT},
{"Up",KEY_UP},
{"Down",KEY_DOWN},
{"Home",KEY_HOME},
{"End",KEY_END},
{"Center",KEY_CENTER},
{"Insert",KEY_INS},
{"Delete",KEY_DEL},
{"PageUp",KEY_PGUP},
{"PageDown",KEY_PGDN},
{"F1",KEY_F1},
{"F2",KEY_F2},
{"F3",KEY_F3},
{"F4",KEY_F4},
{"F5",KEY_F5},
{"F6",KEY_F6},
{"F7",KEY_F7},
{"F8",KEY_F8},
{"F9",KEY_F9},
{"F10",KEY_F10},
{"F11",KEY_F11},
{"F12",KEY_F12},
{"VoidSymbol",KEY_NOECHO},
{NULL, 0}
};
static void usage (int status) {
if (status)
fprintf (stderr, "Try `%s --help' for more information.\n", program_name);
else
printf ("\
Usage: %s [OPTIONS]\n\
-i, --inputset input filename.\n\
-o, --outputset output filename.\n\
-k, --keysymslist recognized keysyms.\n\
-h, --helpdisplay this message and exit.\n\
-V, --versionprint version information and exit.\n\
\n", program_name);
exit (status);
}
static void list_keysyms (void) {
int i;
for (i = 0; keysym_to_code[i].keysym != NULL; i++) {
printf("0x%04x\t %s\n", keysym_to_code[i].code, keysym_to_code[i].keysym);
}
}
static int hash_lookup (const char *keysym, unsigned int *code) {
int i;
for (i = 0; keysym_to_code[i].keysym != NULL; i++) {
if (strcasecmp (keysym, keysym_to_code[i].keysym) == 0) {
*code = keysym_to_code[i].code;
return 0;
}
}
return -1;
}
static int parse_keysym(const char* str, unsigned int *code) {
// Single character
if (strlen(str) == 1) {
*code=(unsigned char)(str[0]);
if (*code > ASCII_KEY_MASK)
return -1;
return 0;
}
// Hex character code
if (sscanf(str, "0x%x", code))
return 0;
// Keysym
if (hash_lookup(str, code) == 0)
return 0;
return -1;
}
int parse_scancode(int linenum, char* code, unsigned int* scancode) {
char* tmp;
errno = 0; // clear errno
float parse_value = strtof(code, &tmp);
int rest = strlen(code) - ((void*) tmp - (void*)code);
if (rest != 0 || errno != 0) {
printf("Ignoring line %d: invalid scancode `%s'\n", linenum, code);
return -1;
}
*scancode = parse_value;
// Only the first scancodes can be translated
if (*scancode >= KEYBOARD_MAP_SIZE) {
printf("Ignoring line %d: invalid scancode 0x%02x. Scancode must be <= 0x%02x.\n", linenum, *scancode,
KEYBOARD_MAP_SIZE);
return -1;
}
return 0;
}
void assign_keycode(int linenum, unsigned int scancode, const char* arg, uint16_t* map) {
unsigned int value;
if (parse_keysym(arg, &value) == -1) {
printf("Warning line %d (keycode 0x%02x): invalid symbol %s (must be a true ascii character)\n",
linenum, scancode, arg);
value = KEY_NOECHO; // VoidSymbol
}
map[scancode] = value;
}
struct keyboard_layout* create_keylayout(FILE* in) {
char line[128], code[sizeof(line)];
char arg1[sizeof(line)], arg2[sizeof(line)], arg3[sizeof(line)],
arg4[sizeof(line)];
int n, linenum = 0;
unsigned int scancode;
struct keyboard_layout* new_layout= malloc(sizeof(*new_layout));
if (!new_layout)
return NULL;
// Initialize new keybord layout
memcpy(new_layout, &default_layout, sizeof(*new_layout));
while(fgets(line, sizeof(line), in)) {
linenum++;
n = sscanf (line, "keycode %s = %s %s %s %s", code, arg1, arg2, arg3, arg4);
if (n > 1) {
if (parse_scancode(linenum, code, &scancode) == -1)
continue;
if (n >= 2)
assign_keycode(linenum, scancode, arg1,
new_layout->keyboard_map);
if (n >= 3)
assign_keycode(linenum, scancode, arg2,
new_layout->keyboard_map_shift);
if (n >= 4)
assign_keycode(linenum, scancode, arg3,
new_layout->keyboard_map_alt);
if (n >= 5)
assign_keycode(linenum, scancode, arg4,
new_layout->keyboard_map_shift_alt);
} else if (sscanf (line, "shift keycode %s = %s", code, arg1) == 2) {
if (parse_scancode(linenum, code, &scancode) == -1)
continue;
assign_keycode(linenum, scancode, arg1,
new_layout->keyboard_map_shift);
} else if (sscanf (line, "alt keycode %s = %s", code, arg1) == 2) {
if (parse_scancode(linenum, code, &scancode) == -1)
continue;
assign_keycode(linenum, scancode, arg1,
new_layout->keyboard_map_alt);
} else if (sscanf (line, "shift alt keycode %s = %s", code, arg1) == 2) {
if (parse_scancode(linenum, code, &scancode) == -1)
continue;
assign_keycode(linenum, scancode, arg1,
new_layout->keyboard_map_shift_alt);
}
}
return new_layout;
}
void write_layout(struct keyboard_layout* layout, FILE* out) {
// Create the header
uint32_t version = KEYBOARD_LAYOUTS_VERSION;
fwrite(KEYBOARD_LAYOUTS_MAGIC, KEYBOARD_LAYOUTS_MAGIC_SIZE, 1, out);
fwrite(&version, 1, sizeof(version), out);
// Seek to start of layout
fseek(out, KEYBOARD_LAYOUTS_MAP_OFFSET, SEEK_SET);
// Write layout
fwrite(layout, sizeof(*layout), 1, out);
}
void set_program_name(const char* arg) {
const char* last_slash;
last_slash = strrchr(arg, '/');
program_name = (last_slash != NULL) ? last_slash + 1 : arg;
}
int main (int argc, char *argv[]) {
int ch;
char *infile_name = NULL;
char *outfile_name = NULL;
FILE *in, *out;
set_program_name (argv[0]);
/* Check for options. */
while ((ch = getopt_long (argc, argv, "i:o:hkV", options, 0)) != -1) {
switch (ch) {
case 'h':
usage (0);
break;
case 'k':
list_keysyms();
exit(0);
break;
case 'i':
infile_name = optarg;
break;
case 'o':
outfile_name = optarg;
break;
case 'V':
printf ("%s v%s (%s)\n", program_name, PROGRAM_VERSION, PACKAGE_NAME);
return 0;
default:
usage (1);
break;
}
}
if (infile_name == NULL) {
fprintf(stderr, "You must specify an input file\n");
usage(1);
}
if (outfile_name == NULL) {
fprintf(stderr, "You must specify an output file\n");
usage(1);
}
in = fopen (infile_name, "r");
if (!in) {
fprintf(stderr, "Couldn't open input file `%s': %s\n",
infile_name, strerror (errno));
exit(1);
}
out = fopen (outfile_name, "wb");
if (!out) {
fprintf(stderr, "Couldn't open output file `%s': %s\n",
outfile_name, strerror (errno));
exit(1);
}
struct keyboard_layout* new_layout = create_keylayout(in);
if (new_layout)
write_layout(new_layout, out);
fclose(out);
fclose(in);
return 0;
}
trunk/i386/modules/Keylayout/layouts/Makefile
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
SRCROOT = $(abspath $(CURDIR)/../../../..)
OBJROOT = $(SRCROOT)/obj/i386/util
SYMROOT = $(SRCROOT)/sym/i386
DSTROOT = $(SRCROOT)/dst/i386
DOCROOT = $(SRCROOT)/doc
KEYMAPSROOT = $(SRCROOT)/Keymaps
INC = -I$(SRCROOT)/i386/libsaio/ -I. -I..
OBJS = cham-mklayout.o32 cham-mklayout.o64
OBJS := $(addprefix $(OBJROOT)/, $(OBJS))
MKLAYOUT = cham-mklayout
MKLAYOUT := $(addprefix $(SYMROOT)/, $(MKLAYOUT))
PROGRAMS = $(MKLAYOUT)
LAYOUTS_SRC_DIR = layouts-src
KEYBOARD_LAYOUTS = $(patsubst $(LAYOUTS_SRC_DIR)/%.slt, $(KEYMAPSROOT)/%.lyt, \
$(wildcard $(LAYOUTS_SRC_DIR)/*.slt))
DIRS_NEEDED = $(KEYMAPSROOT)
include ${SRCROOT}/Make.rules
all: $(DIRS_NEEDED) $(OBJROOT) $(SYMROOT) keymaps
$(PROGRAMS): $(OBJS)
@echo "\t[LD32] $(@F)_32"
@$(CC) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -arch i386 \
-o $(SYMROOT)/$(@F)_32 $(OBJROOT)/$(@F).o32
@echo "\t[LD64] $(@F)_64"
@$(CC) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -arch x86_64 \
-o $(SYMROOT)/$(@F)_64 $(OBJROOT)/$(@F).o64
@echo "\t[LIPO] $(@F)"
@lipo -create -arch i386 $(SYMROOT)/$(@F)_32 -arch x86_64 $(SYMROOT)/$(@F)_64 \
-output $(SYMROOT)/$(@F)
@$(RM) $(SYMROOT)/$(@F)_32 $(SYMROOT)/$(@F)_64
keymaps: $(KEYBOARD_LAYOUTS)
$(KEYMAPSROOT)/%.lyt: $(LAYOUTS_SRC_DIR)/%.slt $(MKLAYOUT)
@echo "\t[LAYOUT] Creating keyboard layout: $*"
@$(MKLAYOUT) -i $< -o $@
#.PHONY layouts
clean-local:
@for o in $(OBJS); do if [ -f "$${o}" ];then echo "\t[RM] $${o}"; fi; done
@for p in $(PROGRAMS); do if [ -f "$${p}" ];then echo "\t[RM] $${p}"; fi; done
@for k in $(KEYBOARD_LAYOUTS); do if [ -f "$${k}" ];then echo "\t[RM] $${k}"; fi; done
@$(RM) -f $(PROGRAMS) $(OBJS)
distclean-local:
@if [ -d "$(KEYMAPSROOT)" ];then echo "\t[RMDIR] $(KEYMAPSROOT)"; fi
@$(RM) -rf $(KEYMAPSROOT)
trunk/i386/modules/Keylayout/Keylayout.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
/*
* Keymapper.c
* Chameleon
*
* Created by JrCs on 28/08/11.
* Copyright 2011. All rights reserved.
*
*/
#include "libsaio.h"
#include "term.h"
#include "modules.h"
#include "Keylayout.h"
#include "bootstruct.h"
#define kKeyboardLayout "KeyboardLayout"
struct keyboard_layout *current_layout = NULL;
int getchar_replacement() {
int code = bgetc();
int status = readKeyboardShiftFlags();
uint8_t scancode = code >> 8;
// Special scancode sent when alt + some keys are pressed
if (scancode >= 0x78 && scancode <= 0x83)
scancode -= 0x76;
if (scancode < KEYBOARD_MAP_SIZE && !(status & (STATUS_LCTRL| STATUS_RCTRL))) {
int key;
if ((status & (STATUS_LALT|STATUS_RALT)) &&
(status & (STATUS_LSHIFT|STATUS_RSHIFT|STATUS_CAPS))) {
key=current_layout->keyboard_map_shift_alt[scancode];
}
else if (status & (STATUS_LSHIFT|STATUS_RSHIFT|STATUS_CAPS))
key=current_layout->keyboard_map_shift[scancode];
else if (status & (STATUS_LALT|STATUS_RALT))
key=current_layout->keyboard_map_alt[scancode];
else
key=current_layout->keyboard_map[scancode];
if (key != 0) // do the mapping
code = key;
}
if (ASCII_KEY(code) != 0) // if ascii not null return it
code = ASCII_KEY(code);
//printf("Code: %04x\n",code);
return (code);
}
static uint32_t load_keyboard_layout_file(const char *filename) {
int fd;
char magic[KEYBOARD_LAYOUTS_MAGIC_SIZE];
uint32_t version;
if ((fd = open_bvdev("bt(0,0)", filename, 0)) < 0) {
goto fail; // fail
}
if (read(fd, magic, sizeof(magic)) != sizeof(magic)) {
printf("Can't find magic in keyboard layout file: %s\n", filename);
goto fail;
}
if (memcmp (magic, KEYBOARD_LAYOUTS_MAGIC, KEYBOARD_LAYOUTS_MAGIC_SIZE) != 0) {
printf("Invalid magic code in keyboard layout file: %s\n", filename);
goto fail;
}
if (read(fd, (char*) &version, sizeof(version)) != sizeof(version)) {
printf("Can't get version of keyboard layout file: %s\n", filename);
goto fail;
}
if (version != KEYBOARD_LAYOUTS_VERSION) {
verbose("Bad version for keyboard layout file %s expected v%d found v%d\n",
filename, KEYBOARD_LAYOUTS_VERSION, version);
goto fail;
}
if (current_layout)
free(current_layout);
current_layout = malloc(sizeof(*current_layout));
if (!current_layout)
goto fail;
b_lseek(fd, KEYBOARD_LAYOUTS_MAP_OFFSET, 0);
if (read(fd, (char*) current_layout, sizeof(*current_layout)) != sizeof(*current_layout)) {
printf("Wrong keyboard layout file %s size\n", filename);
goto fail;
}
close(fd);
return 1;
fail:
if (current_layout) {
free(current_layout);
current_layout = NULL;
}
return 0;
}
void Keylayout_start()
{
char layoutPath[512];
const char*val;
intlen;
if (getValueForKey("KeyLayout", &val, &len, &bootInfo->chameleonConfig)) {
sprintf(layoutPath, "/Extra/Keymaps/%s", val);
// Add the extension if needed
if (len <= 4 || strcmp(val+len-4,".lyt") != 0)
strncat(layoutPath, ".lyt", sizeof(layoutPath));
if (!load_keyboard_layout_file(layoutPath)) {
printf("Can't load %s keyboard layout file. Keylayout will not be used !\n",
layoutPath);
sleep(2);
} else if (!replace_function("_getchar", &getchar_replacement)) {
printf("Can't replace function getchar: Keylayout module can't be used !\n");
sleep(2);
}
}
}
trunk/i386/modules/Keylayout/Cconfig
1
2
3
4
5
6
7
8
9
10
#
# Chameleon Modules
#
config KEYLAYOUT_MODULE
tristate "Keylayout Module"
default m
---help---
Say Y here if you want to enable the use of this module.
trunk/i386/modules/Keylayout/Readme.txt
1
2
3
Module:Keylayout
Description: This module permits the user to define the keyboard key mappings
Dependencies: none
trunk/i386/modules/Keylayout/Keylayout.h
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
/*
* Keylayout.h
* Chameleon
*
* Created by JrCs on 28/8/11.
* Copyright 2011. All rights reserved.
*
*/
#ifndef __KEYLAYOUT_H
#define __KEYLAYOUT_H
#define KEYBOARD_LAYOUTS_MAGIC "CHAMLAYT"
#define KEYBOARD_LAYOUTS_MAGIC_SIZE (sizeof(KEYBOARD_LAYOUTS_MAGIC) - 1)
#define KEYBOARD_LAYOUTS_VERSION 3
#define KEYBOARD_LAYOUTS_MAP_OFFSET 0x10 // 0x10 offset of the map in layout file
#define KEYBOARD_MAP_SIZE 0x38
struct keyboard_layout
{
uint16_t keyboard_map[KEYBOARD_MAP_SIZE];
uint16_t keyboard_map_shift[KEYBOARD_MAP_SIZE];
uint16_t keyboard_map_alt[KEYBOARD_MAP_SIZE];
uint16_t keyboard_map_shift_alt[KEYBOARD_MAP_SIZE];
};
#endif
trunk/i386/modules/Keylayout/Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
MODULE_NAME = Keylayout
MODULE_DESCRIPTION = This module provides keylayout functionality
MODULE_AUTHOR = "JrCs"
MODULE_VERSION = "1.2.0"
MODULE_COMPAT_VERSION = "1.2.0"
MODULE_START = $(MODULE_NAME)_start
MODULE_DEPENDENCIES =
DIR = Keylayout
SUBDIRS += layouts
MODULE_OBJS = Keylayout.o
include ../MakeInc.dir
trunk/i386/modules/Cconfig
77
88
99
10
10
11
source "i386/modules/klibc/Cconfig"
source "i386/modules/uClibcxx/Cconfig"
source "i386/modules/HelloWorld/Cconfig"
endmenu
source "i386/modules/Keylayout/Cconfig"
endmenu
trunk/i386/modules/Makefile
2929
3030
3131
32
33
34
35
3236
3337
3438
SUBDIRS += HelloWorld
endif
ifdef CONFIG_KEYLAYOUT_MODULE
SUBDIRS += Keylayout
endif
CFLAGS= -O3 $(MORECPP) -arch i386 -g -static
DEFINES=
CONFIG = hd
trunk/doc/BootHelp.txt
7272
7373
7474
75
76
77
7578
7679
7780
and /S/L/E/Extensions.mkext.
Default is No but Yes if you use Lion on a Raid partition.
KeyLayout=keymap Use to change the keyboard mapping of the bootloader
(e.g. KeyLayout=mac-fr)
GraphicsEnabler=Yes|No Automatic device-properties generation for gfx cards.
AtiConfig=<cardcfg> Use a different card config, e.g. AtiConfig=Megalodon.
AtiPorts=<value> Specify the number of ports, e.g. AtiPorts=2.
trunk/Makefile
8181
8282
8383
84
85
86
87
88
89
90
91
8492
8593
8694
ifdef CONFIG_BDMESG
@cp -f ${SYMROOT}/i386/bdmesg ${IMGROOT}/usr/bin
endif
ifdef CONFIG_KEYLAYOUT_MODULE
@cp -f ${SYMROOT}/i386/cham-mklayout ${IMGROOT}/usr/bin
@echo "\t[MKDIR] ${IMGROOT}/Extra/Keymaps"
@mkdir -p ${IMGROOT}/Extra/Keymaps
@echo "\t[CP] Keymaps ${IMGROOT}/Extra/Keymaps"
@cp -R -f "Keymaps"/* "${IMGROOT}/Extra/Keymaps/"
endif
@echo "\t[HDIUTIL] ${ISOIMAGE}"
@hdiutil makehybrid -iso -joliet -hfs -hfs-volume-name \
${CDLABEL} -eltorito-boot ${CDBOOT} -no-emul-boot -ov -o \

Archive Download the corresponding diff file

Revision: 1529