Chameleon

Chameleon Commit Details

Date:2016-12-26 16:05:29 (3 years 11 months ago)
Author:Bungo
Commit:2839
Parents: 2838
Message:Some cleanup
Changes:
M/branches/Bungo/i386/libsaio/fdisk.h
M/branches/Bungo/i386/libsaio/exfat.c
M/branches/Bungo/Make.rules
M/branches/Bungo/i386/libsaio/vbe.c
M/branches/Bungo/CHANGES
M/branches/Bungo/i386/libsaio/ati.c
M/branches/Bungo/i386/libsaio/sys.c
M/branches/Bungo/i386/libsaio/pci_root.c
M/branches/Bungo/i386/libsaio/device_tree.c
M/branches/Bungo/i386/boot1/boot1h.s
M/branches/Bungo/i386/libsaio/hfs.c
M/branches/Bungo/i386/libsaio/biosfn.c
M/branches/Bungo/i386/libsaio/vbe.h
M/branches/Bungo/i386/boot2/drivers.c
M/branches/Bungo/i386/libsaio/saio_types.h
M/branches/Bungo/i386/boot0/boot0md.s
M/branches/Bungo/i386/libsaio/spd.c
M/branches/Bungo/i386/libsaio/cpu.c
M/branches/Bungo/i386/libsaio/md5c.c
M/branches/Bungo/i386/libsaio/fake_efi.c
M/branches/Bungo/i386/libsaio/smbios_getters.c
M/branches/Bungo/i386/libsa/zalloc.c
M/branches/Bungo/i386/boot2/lzvn.c
M/branches/Bungo/i386/libsaio/cpu.h
M/branches/Bungo/i386/libsa/prf.c
M/branches/Bungo/i386/boot2/Makefile
M/branches/Bungo/i386/libsaio/smbios_decode.c
M/branches/Bungo/i386/boot0/boot0.s
M/branches/Bungo/i386/libsaio/gma.c
M/branches/Bungo/i386/boot0/boot0hfs.s
M/branches/Bungo/i386/boot2/boot.c
M/branches/Bungo/i386/libsaio/bootstruct.c
M/branches/Bungo/i386/libsaio/ntfs_private.h
M/branches/Bungo/i386/libsaio/ntfs.c
M/branches/Bungo/i386/libsaio/nvidia.c
M/branches/Bungo/i386/boot2/modules.c
M/branches/Bungo/i386/boot2/boot.h
M/branches/Bungo/i386/libsaio/ext2fs.c
M/branches/Bungo/i386/libsaio/pci.c
M/branches/Bungo/i386/libsaio/bootstruct.h
M/branches/Bungo/i386/libsa/string.c
M/branches/Bungo/i386/libsaio/load.c
M/branches/Bungo/i386/libsaio/convert.c
M/branches/Bungo/i386/libsaio/acpi.h
M/branches/Bungo/i386/libsaio/acpi_patcher.c
M/branches/Bungo/Chameleon.xcodeproj/project.pbxproj
M/branches/Bungo/i386/libsaio/bootargs.h
M/branches/Bungo/i386/libsaio/msdos.c
M/branches/Bungo/i386/boot2/bmdecompress.c
M/branches/Bungo/i386/libsaio/state_generator.c
M/branches/Bungo/i386/boot2/gui.c
M/branches/Bungo/i386/libsaio/platform.h
M/branches/Bungo/i386/libsaio/disk.c
M/branches/Bungo/i386/libsaio/device_inject.c
M/branches/Bungo/i386/libsaio/state_generator.h
M/branches/Bungo/i386/libsaio/smbios.c
M/branches/Bungo/i386/boot2/options.c
M/branches/Bungo/CREDITS
M/branches/Bungo/i386/libsaio/console.c
M/branches/Bungo/i386/config/confdata.c
M/branches/Bungo/i386/boot2/graphics.c
M/branches/Bungo/doc/BootHelp.txt

File differences

branches/Bungo/Chameleon.xcodeproj/project.pbxproj
111111
112112
113113
114
115
114116
115117
116118
......
175177
176178
177179
180
181
182
183
184
185
186
187
188
178189
179190
180191
......
189200
190201
191202
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
364203
365204
366205
......
1006845
1007846
1008847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
1009864
1010865
1011866
......
12461101
12471102
12481103
1104
1105
12491106
1107
1108
1109
1110
1111
1112
12501113
12511114
12521115
......
13341197
13351198
13361199
1200
1201
13371202
13381203
13391204
......
13921257
13931258
13941259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
13951327
13961328
13971329
......
14301362
14311363
14321364
1365
1366
1367
1368
14331369
14341370
14351371
......
14501386
14511387
14521388
1453
1389
14541390
14551391
14561392
......
14591395
14601396
14611397
1462
1398
14631399
14641400
1465
1466
1467
1401
14681402
1469
1403
14701404
14711405
1472
1406
14731407
14741408
1475
1476
1477
1478
1409
1410
1411
1412
1413
1414
14791415
1480
1416
14811417
14821418
1483
1419
14841420
14851421
1486
1422
14871423
1488
1424
1425
14891426
14901427
1491
1428
14921429
14931430
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1431
15091432
1510
1433
1434
15111435
15121436
1513
1437
15141438
15151439
1516
1517
1440
1441
15181442
1519
1443
1444
15201445
15211446
1522
1447
15231448
15241449
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1450
1451
1452
15381453
1539
1454
15401455
15411456
1542
1457
15431458
15441459
1545
1460
1461
1462
1463
15461464
1547
1465
15481466
15491467
1550
1468
15511469
15521470
1553
1471
15541472
1555
1473
15561474
15571475
1558
1476
15591477
15601478
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1479
1480
1481
1482
1483
1484
15861485
1587
1486
15881487
15891488
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
18001489
18011490
18021491
......
28962585
28972586
28982587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
28992618
29002619
29012620
......
32402959
32412960
32422961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
32433008
32443009
32453010
......
35533318
35543319
35553320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
35563341
35573342
35583343
......
37653550
37663551
37673552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
37683665
37693666
37703667
......
38093706
38103707
38113708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
38123736
38133737
38143738
......
38763800
38773801
38783802
3879
38803803
38813804
38823805
......
38873810
38883811
38893812
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
39633813
39643814
39653815
39663816
3967
3817
39683818
39693819
39703820
......
39793829
39803830
39813831
3982
3832
39833833
39843834
39853835
......
39913841
39923842
39933843
3994
3844
39953845
39963846
3997
3847
39983848
39993849
40003850
......
40033853
40043854
40053855
4006
3856
40073857
40083858
4009
3859
40103860
40113861
40123862
360A04CC1861F48F0091F464 /* vbe.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vbe.h; sourceTree = "<group>"; };
360A04CD1861F48F0091F464 /* xml.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = xml.c; sourceTree = "<group>"; };
360A04CE1861F48F0091F464 /* xml.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xml.h; sourceTree = "<group>"; };
361BC70214BD977700236488 /* Changes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Changes.txt; sourceTree = "<group>"; };
361BC70B14BD97C800236488 /* pkg.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; name = pkg.zip; path = Icons/pkg.zip; sourceTree = "<group>"; };
369689D014BD0AF10013D77F /* BLOCKERS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BLOCKERS; sourceTree = "<group>"; };
369689D114BD0AF10013D77F /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = "<group>"; };
369689D214BD0B470013D77F /* version */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = version; sourceTree = "<group>"; };
36AB75DB14BD0866005B8045 /* text_scroll_prev.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = text_scroll_prev.png; sourceTree = "<group>"; };
36AB75DC14BD0866005B8045 /* theme.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = theme.plist; sourceTree = "<group>"; };
36AB75DD14BD0866005B8045 /* thumb.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = thumb.png; sourceTree = "<group>"; };
36AB75E114BD091C005B8045 /* InstallLog.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = InstallLog.sh; sourceTree = "<group>"; };
36AB75E314BD0925005B8045 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = "<group>"; };
36AB75E414BD092D005B8045 /* preinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = preinstall; sourceTree = "<group>"; };
36AB75E514BD095E005B8045 /* Control.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Control.txt; path = OptionalSettings/Control.txt; sourceTree = "<group>"; };
36AB75E614BD095E005B8045 /* General.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = General.txt; path = OptionalSettings/General.txt; sourceTree = "<group>"; };
36AB75E714BD095E005B8045 /* KernelFlags.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = KernelFlags.txt; path = OptionalSettings/KernelFlags.txt; sourceTree = "<group>"; };
36AB75E814BD095E005B8045 /* PowerManagement.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PowerManagement.txt; path = OptionalSettings/PowerManagement.txt; sourceTree = "<group>"; };
36AB75E914BD095E005B8045 /* Resolution.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Resolution.txt; path = OptionalSettings/Resolution.txt; sourceTree = "<group>"; };
36AB75EA14BD095E005B8045 /* Video.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Video.txt; path = OptionalSettings/Video.txt; sourceTree = "<group>"; };
36AE6E5716D644BC00D083A6 /* Cconfig */ = {isa = PBXFileReference; lastKnownFileType = text; name = Cconfig; path = KernelPatcher/Cconfig; sourceTree = "<group>"; };
36AE6E5816D644BC00D083A6 /* KernelPatcher.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = KernelPatcher.dylib; path = KernelPatcher/KernelPatcher.dylib; sourceTree = "<group>"; };
36AE6E5916D644BC00D083A6 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; name = Makefile; path = KernelPatcher/Makefile; sourceTree = "<group>"; };
6648DC1B1A5AA2AE00A7BB54 /* device_hfsraid_yos_o.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = device_hfsraid_yos_o.png; sourceTree = "<group>"; };
6648DC1C1A5AA2AE00A7BB54 /* device_hfsraid_yos.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = device_hfsraid_yos.png; sourceTree = "<group>"; };
6648DC1D1A5AA2D600A7BB54 /* lzvn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lzvn.c; sourceTree = "<group>"; };
667B35931A5EF2B400FD5ED9 /* clean_po_headers.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = clean_po_headers.sh; sourceTree = "<group>"; };
667B35951A5EF2B400FD5ED9 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = "<group>"; };
667B35991A5EF2B400FD5ED9 /* BibTeX.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = BibTeX.pm; sourceTree = "<group>"; };
667B359A1A5EF2B400FD5ED9 /* Chooser.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Chooser.pm; sourceTree = "<group>"; };
667B359B1A5EF2B400FD5ED9 /* Common.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Common.pm; sourceTree = "<group>"; };
667B359C1A5EF2B400FD5ED9 /* Debconf.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Debconf.pm; sourceTree = "<group>"; };
667B359D1A5EF2B400FD5ED9 /* Dia.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Dia.pm; sourceTree = "<group>"; };
667B359E1A5EF2B400FD5ED9 /* Docbook.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Docbook.pm; sourceTree = "<group>"; };
667B359F1A5EF2B400FD5ED9 /* Guide.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Guide.pm; sourceTree = "<group>"; };
667B35A01A5EF2B400FD5ED9 /* Halibut.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Halibut.pm; sourceTree = "<group>"; };
667B35A11A5EF2B400FD5ED9 /* Html.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Html.pm; sourceTree = "<group>"; };
667B35A21A5EF2B400FD5ED9 /* Ini.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Ini.pm; sourceTree = "<group>"; };
667B35A31A5EF2B400FD5ED9 /* KernelHelp.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = KernelHelp.pm; sourceTree = "<group>"; };
667B35A41A5EF2B400FD5ED9 /* LaTeX.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = LaTeX.pm; sourceTree = "<group>"; };
667B35A51A5EF2B400FD5ED9 /* Man.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Man.pm; sourceTree = "<group>"; };
667B35A61A5EF2B400FD5ED9 /* NewsDebian.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = NewsDebian.pm; sourceTree = "<group>"; };
667B35A71A5EF2B400FD5ED9 /* Po.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Po.pm; sourceTree = "<group>"; };
667B35A81A5EF2B400FD5ED9 /* Pod.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Pod.pm; sourceTree = "<group>"; };
667B35A91A5EF2B400FD5ED9 /* Prop.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Prop.pm; sourceTree = "<group>"; };
667B35AA1A5EF2B400FD5ED9 /* Sgml.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Sgml.pm; sourceTree = "<group>"; };
667B35AB1A5EF2B400FD5ED9 /* TeX.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = TeX.pm; sourceTree = "<group>"; };
667B35AC1A5EF2B400FD5ED9 /* Texinfo.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Texinfo.pm; sourceTree = "<group>"; };
667B35AD1A5EF2B400FD5ED9 /* Text.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Text.pm; sourceTree = "<group>"; };
667B35AE1A5EF2B400FD5ED9 /* TransTractor.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = TransTractor.pm; sourceTree = "<group>"; };
667B35AF1A5EF2B400FD5ED9 /* Wml.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Wml.pm; sourceTree = "<group>"; };
667B35B01A5EF2B400FD5ED9 /* Xhtml.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Xhtml.pm; sourceTree = "<group>"; };
667B35B11A5EF2B400FD5ED9 /* Xml.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Xml.pm; sourceTree = "<group>"; };
667B35B21A5EF2B400FD5ED9 /* MANIFEST */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MANIFEST; sourceTree = "<group>"; };
667B35B31A5EF2B400FD5ED9 /* NEWS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NEWS; sourceTree = "<group>"; };
667B35B41A5EF2B400FD5ED9 /* po4a */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = po4a; sourceTree = "<group>"; };
667B35B51A5EF2B400FD5ED9 /* po4a-gettextize */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-gettextize"; sourceTree = "<group>"; };
667B35B61A5EF2B400FD5ED9 /* po4a-normalize */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-normalize"; sourceTree = "<group>"; };
667B35B71A5EF2B400FD5ED9 /* po4a-translate */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-translate"; sourceTree = "<group>"; };
667B35B81A5EF2B400FD5ED9 /* po4a-updatepo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-updatepo"; sourceTree = "<group>"; };
667B35B91A5EF2B400FD5ED9 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
667B35BA1A5EF2B400FD5ED9 /* README.maintainers */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.maintainers; sourceTree = "<group>"; };
667B35BB1A5EF2B400FD5ED9 /* README.tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.tests; sourceTree = "<group>"; };
667B35BC1A5EF2B400FD5ED9 /* README.translators */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.translators; sourceTree = "<group>"; };
667B35BD1A5EF2B400FD5ED9 /* builddmg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = builddmg.sh; sourceTree = "<group>"; };
667B35BE1A5EF2B400FD5ED9 /* buildpkg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = buildpkg.sh; sourceTree = "<group>"; };
667B35BF1A5EF2B400FD5ED9 /* Changes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Changes.txt; sourceTree = "<group>"; };
667B35C01A5EF2B400FD5ED9 /* Distribution */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Distribution; sourceTree = "<group>"; };
667B35C21A5EF2B400FD5ED9 /* pkg.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = pkg.zip; sourceTree = "<group>"; };
667B35C41A5EF2B400FD5ED9 /* Audio.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Audio.txt; sourceTree = "<group>"; };
667B35C51A5EF2B400FD5ED9 /* Control.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Control.txt; sourceTree = "<group>"; };
667B35C61A5EF2B400FD5ED9 /* General.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = General.txt; sourceTree = "<group>"; };
667B35C71A5EF2B400FD5ED9 /* HDAULayout.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HDAULayout.txt; sourceTree = "<group>"; };
667B35C81A5EF2B400FD5ED9 /* HDEFLayout.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HDEFLayout.txt; sourceTree = "<group>"; };
667B35C91A5EF2B400FD5ED9 /* IntelAzul.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IntelAzul.txt; sourceTree = "<group>"; };
667B35CA1A5EF2B400FD5ED9 /* IntelCapri.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IntelCapri.txt; sourceTree = "<group>"; };
667B35CB1A5EF2B400FD5ED9 /* KernelFlags.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = KernelFlags.txt; sourceTree = "<group>"; };
667B35CC1A5EF2B400FD5ED9 /* PowerManagement.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PowerManagement.txt; sourceTree = "<group>"; };
667B35CD1A5EF2B400FD5ED9 /* Resolution.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Resolution.txt; sourceTree = "<group>"; };
667B35CE1A5EF2B400FD5ED9 /* Video.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Video.txt; sourceTree = "<group>"; };
667B35D01A5EF2B400FD5ED9 /* ar.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ar.po; sourceTree = "<group>"; };
667B35D11A5EF2B400FD5ED9 /* bg.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bg.po; sourceTree = "<group>"; };
667B35D21A5EF2B400FD5ED9 /* bs.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bs.po; sourceTree = "<group>"; };
667B35D31A5EF2B400FD5ED9 /* ca.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.po; sourceTree = "<group>"; };
667B35D41A5EF2B400FD5ED9 /* chameleon.pot */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = chameleon.pot; sourceTree = "<group>"; };
667B35D51A5EF2B400FD5ED9 /* cs.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cs.po; sourceTree = "<group>"; };
667B35D61A5EF2B400FD5ED9 /* de.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = de.po; sourceTree = "<group>"; };
667B35D71A5EF2B400FD5ED9 /* el.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = el.po; sourceTree = "<group>"; };
667B35D81A5EF2B400FD5ED9 /* en.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = en.po; sourceTree = "<group>"; };
667B35D91A5EF2B400FD5ED9 /* es.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = es.po; sourceTree = "<group>"; };
667B35DA1A5EF2B400FD5ED9 /* fa.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = fa.po; sourceTree = "<group>"; };
667B35DB1A5EF2B400FD5ED9 /* fr.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = fr.po; sourceTree = "<group>"; };
667B35DC1A5EF2B400FD5ED9 /* he.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = he.po; sourceTree = "<group>"; };
667B35DD1A5EF2B400FD5ED9 /* hr.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hr.po; sourceTree = "<group>"; };
667B35DE1A5EF2B400FD5ED9 /* hu.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hu.po; sourceTree = "<group>"; };
667B35DF1A5EF2B400FD5ED9 /* id.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = id.po; sourceTree = "<group>"; };
667B35E01A5EF2B400FD5ED9 /* it.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = it.po; sourceTree = "<group>"; };
667B35E11A5EF2B400FD5ED9 /* ja.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ja.po; sourceTree = "<group>"; };
667B35E21A5EF2B400FD5ED9 /* ko.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ko.po; sourceTree = "<group>"; };
667B35E31A5EF2B400FD5ED9 /* mk.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mk.po; sourceTree = "<group>"; };
667B35E41A5EF2B400FD5ED9 /* nl.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = nl.po; sourceTree = "<group>"; };
667B35E51A5EF2B400FD5ED9 /* pl.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pl.po; sourceTree = "<group>"; };
667B35E61A5EF2B400FD5ED9 /* pt-BR.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "pt-BR.po"; sourceTree = "<group>"; };
667B35E71A5EF2B400FD5ED9 /* pt-PT.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "pt-PT.po"; sourceTree = "<group>"; };
667B35E81A5EF2B400FD5ED9 /* pt.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pt.po; sourceTree = "<group>"; };
667B35E91A5EF2B400FD5ED9 /* ro.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ro.po; sourceTree = "<group>"; };
667B35EA1A5EF2B400FD5ED9 /* ru.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ru.po; sourceTree = "<group>"; };
667B35EB1A5EF2B400FD5ED9 /* sr.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sr.po; sourceTree = "<group>"; };
667B35EC1A5EF2B400FD5ED9 /* zh_CN.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = zh_CN.po; sourceTree = "<group>"; };
667B35ED1A5EF2B400FD5ED9 /* zh_TW.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = zh_TW.po; sourceTree = "<group>"; };
667B35EE1A5EF2B400FD5ED9 /* po4a-chameleon.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-chameleon.cfg"; sourceTree = "<group>"; };
667B35F11A5EF2B400FD5ED9 /* ar */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ar; path = ar.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B35F31A5EF2B400FD5ED9 /* ar */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ar; path = ar.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B35F41A5EF2B400FD5ED9 /* bg */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = bg; path = bg.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B35F51A5EF2B400FD5ED9 /* bg */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = bg; path = bg.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B35F61A5EF2B400FD5ED9 /* bs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = bs; path = bs.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B35F71A5EF2B400FD5ED9 /* bs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = bs; path = bs.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B35F81A5EF2B400FD5ED9 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ca; path = ca.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B35F91A5EF2B400FD5ED9 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ca; path = ca.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B35FB1A5EF2B400FD5ED9 /* License.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = License.rtf; sourceTree = "<group>"; };
667B35FC1A5EF2B400FD5ED9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = cs; path = cs.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B35FD1A5EF2B400FD5ED9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = cs; path = cs.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B35FE1A5EF2B400FD5ED9 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = de; path = de.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B35FF1A5EF2B400FD5ED9 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = de; path = de.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36011A5EF2B400FD5ED9 /* background.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = background.tiff; sourceTree = "<group>"; };
667B36021A5EF2B400FD5ED9 /* el */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = el; path = el.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36031A5EF2B400FD5ED9 /* el */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = el; path = el.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36041A5EF2B400FD5ED9 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = en; path = en.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36051A5EF2B400FD5ED9 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = en; path = en.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36061A5EF2B400FD5ED9 /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = es; path = es.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36071A5EF2B400FD5ED9 /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = es; path = es.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36081A5EF2B400FD5ED9 /* fa */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = fa; path = fa.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36091A5EF2B400FD5ED9 /* fa */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = fa; path = fa.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B360A1A5EF2B400FD5ED9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = fr; path = fr.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B360B1A5EF2B400FD5ED9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = fr; path = fr.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B360C1A5EF2B400FD5ED9 /* he */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = he; path = he.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B360D1A5EF2B400FD5ED9 /* he */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = he; path = he.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B360E1A5EF2B400FD5ED9 /* hr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = hr; path = hr.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B360F1A5EF2B400FD5ED9 /* hr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = hr; path = hr.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36101A5EF2B400FD5ED9 /* hu */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = hu; path = hu.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36111A5EF2B400FD5ED9 /* hu */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = hu; path = hu.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36121A5EF2B400FD5ED9 /* id */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = id; path = id.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36131A5EF2B400FD5ED9 /* id */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = id; path = id.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36141A5EF2B400FD5ED9 /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = it; path = it.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36151A5EF2B400FD5ED9 /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = it; path = it.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36161A5EF2B400FD5ED9 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ja; path = ja.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36171A5EF2B400FD5ED9 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ja; path = ja.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36181A5EF2B400FD5ED9 /* ko */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ko; path = ko.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36191A5EF2B400FD5ED9 /* ko */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ko; path = ko.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B361A1A5EF2B400FD5ED9 /* mk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = mk; path = mk.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B361B1A5EF2B400FD5ED9 /* mk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = mk; path = mk.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B361C1A5EF2B400FD5ED9 /* nl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = nl; path = nl.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B361D1A5EF2B400FD5ED9 /* nl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = nl; path = nl.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B361E1A5EF2B400FD5ED9 /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = pl; path = pl.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B361F1A5EF2B400FD5ED9 /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = pl; path = pl.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36201A5EF2B400FD5ED9 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-BR"; path = "pt-BR.lproj/Conclusion.rtfd"; sourceTree = "<group>"; };
667B36211A5EF2B400FD5ED9 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-BR"; path = "pt-BR.lproj/Welcome.rtfd"; sourceTree = "<group>"; };
667B36221A5EF2B400FD5ED9 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-PT"; path = "pt-PT.lproj/Conclusion.rtfd"; sourceTree = "<group>"; };
667B36231A5EF2B400FD5ED9 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-PT"; path = "pt-PT.lproj/Welcome.rtfd"; sourceTree = "<group>"; };
667B36241A5EF2B400FD5ED9 /* ro */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ro; path = ro.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36251A5EF2B400FD5ED9 /* ro */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ro; path = ro.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36261A5EF2B400FD5ED9 /* ru */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ru; path = ru.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36271A5EF2B400FD5ED9 /* ru */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ru; path = ru.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36281A5EF2B400FD5ED9 /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = sr; path = sr.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36291A5EF2B400FD5ED9 /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = sr; path = sr.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B362B1A5EF2B400FD5ED9 /* Conclusion.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Conclusion.html; sourceTree = "<group>"; };
667B362C1A5EF2B400FD5ED9 /* Description.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Description.html; sourceTree = "<group>"; };
667B362D1A5EF2B400FD5ED9 /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = "<group>"; };
667B362E1A5EF2B400FD5ED9 /* Welcome.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Welcome.html; sourceTree = "<group>"; };
667B362F1A5EF2B400FD5ED9 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = zh_CN; path = zh_CN.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36301A5EF2B400FD5ED9 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = zh_CN; path = zh_CN.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36311A5EF2B400FD5ED9 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = zh_TW; path = zh_TW.lproj/Conclusion.rtfd; sourceTree = "<group>"; };
667B36321A5EF2B400FD5ED9 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = zh_TW; path = zh_TW.lproj/Welcome.rtfd; sourceTree = "<group>"; };
667B36361A5EF2B500FD5ED9 /* ESPpostinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = ESPpostinstall; sourceTree = "<group>"; };
667B36371A5EF2B500FD5ED9 /* Standardpostinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = Standardpostinstall; sourceTree = "<group>"; };
667B36391A5EF2B500FD5ED9 /* CheckDiskMicrocode.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckDiskMicrocode.sh; sourceTree = "<group>"; };
667B363A1A5EF2B500FD5ED9 /* CheckFatType.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckFatType.sh; sourceTree = "<group>"; };
667B363B1A5EF2B500FD5ED9 /* CheckGRUBLinuxLoader.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckGRUBLinuxLoader.sh; sourceTree = "<group>"; };
667B363C1A5EF2B500FD5ED9 /* CheckPartitionScheme.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckPartitionScheme.sh; sourceTree = "<group>"; };
667B363D1A5EF2B500FD5ED9 /* CheckPreviousChameleon.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckPreviousChameleon.sh; sourceTree = "<group>"; };
667B363E1A5EF2B500FD5ED9 /* CheckProceed.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckProceed.sh; sourceTree = "<group>"; };
667B363F1A5EF2B500FD5ED9 /* CheckWindowsDiskSignature.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckWindowsDiskSignature.sh; sourceTree = "<group>"; };
667B36401A5EF2B500FD5ED9 /* MountESP.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = MountESP.sh; sourceTree = "<group>"; };
667B36411A5EF2B500FD5ED9 /* patch */ = {isa = PBXFileReference; lastKnownFileType = file; path = patch; sourceTree = "<group>"; };
667B36421A5EF2B500FD5ED9 /* SetActivePartition.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = SetActivePartition.sh; sourceTree = "<group>"; };
667B36431A5EF2B500FD5ED9 /* UnMountEFIvolumes.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = UnMountEFIvolumes.sh; sourceTree = "<group>"; };
667B36441A5EF2B500FD5ED9 /* WriteChameleonStage0.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = WriteChameleonStage0.sh; sourceTree = "<group>"; };
667B36451A5EF2B500FD5ED9 /* WriteChameleonStage1.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = WriteChameleonStage1.sh; sourceTree = "<group>"; };
667B36461A5EF2B500FD5ED9 /* WriteChameleonStage2.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = WriteChameleonStage2.sh; sourceTree = "<group>"; };
667B36491A5EF2B500FD5ED9 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = "<group>"; };
667B364B1A5EF2B500FD5ED9 /* InstallLog.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = InstallLog.sh; sourceTree = "<group>"; };
667B364D1A5EF2B500FD5ED9 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = "<group>"; };
667B364F1A5EF2B500FD5ED9 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = "<group>"; };
667B36511A5EF2B500FD5ED9 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = "<group>"; };
667B36531A5EF2B500FD5ED9 /* clean_bootplist.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = clean_bootplist.pl; sourceTree = "<group>"; };
667B36541A5EF2B500FD5ED9 /* preinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = preinstall; sourceTree = "<group>"; };
667B36551A5EF2B500FD5ED9 /* slimpkg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = slimpkg.sh; sourceTree = "<group>"; };
667B36561A5EF2B500FD5ED9 /* smbios.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = smbios.plist; sourceTree = "<group>"; };
668C4D6A1A19F9AF0098C523 /* device_hfsfusion_mav_o.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = device_hfsfusion_mav_o.png; sourceTree = "<group>"; };
668C4D6B1A19F9AF0098C523 /* device_hfsfusion_mav.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = device_hfsfusion_mav.png; sourceTree = "<group>"; };
668C4D6C1A19F9AF0098C523 /* device_hfsplus_mav_o.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = device_hfsplus_mav_o.png; sourceTree = "<group>"; };
6DBAFFC413B0D4590047ED33 /* unistd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unistd.h; sourceTree = "<group>"; };
6DBAFFC513B0D4590047ED33 /* unwind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unwind.h; sourceTree = "<group>"; };
A31301A71503CB9900E8C718 /* README.translators */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.translators; sourceTree = "<group>"; };
A354B6271495124F00D81AA5 /* ESPpostinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = ESPpostinstall; sourceTree = "<group>"; };
A354B62A1495124F00D81AA5 /* Standardpostinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = Standardpostinstall; sourceTree = "<group>"; };
A354B62C149514DE00D81AA5 /* CheckDiskMicrocode.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckDiskMicrocode.sh; sourceTree = "<group>"; };
A354B62D149514DE00D81AA5 /* CheckFatType.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckFatType.sh; sourceTree = "<group>"; };
A354B62E149514DE00D81AA5 /* CheckGRUBLinuxLoader.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckGRUBLinuxLoader.sh; sourceTree = "<group>"; };
A354B62F149514DE00D81AA5 /* CheckPartitionScheme.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckPartitionScheme.sh; sourceTree = "<group>"; };
A354B630149514DE00D81AA5 /* CheckPreviousChameleon.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckPreviousChameleon.sh; sourceTree = "<group>"; };
A354B631149514DE00D81AA5 /* CheckProceed.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckProceed.sh; sourceTree = "<group>"; };
A354B632149514DE00D81AA5 /* CheckWindowsDiskSignature.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = CheckWindowsDiskSignature.sh; sourceTree = "<group>"; };
A354B634149514DE00D81AA5 /* MountESP.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = MountESP.sh; sourceTree = "<group>"; };
A354B635149514DE00D81AA5 /* patch */ = {isa = PBXFileReference; lastKnownFileType = text; path = patch; sourceTree = "<group>"; };
A354B636149514DE00D81AA5 /* SetActivePartition.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = SetActivePartition.sh; sourceTree = "<group>"; };
A354B637149514DE00D81AA5 /* UnMountEFIvolumes.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = UnMountEFIvolumes.sh; sourceTree = "<group>"; };
A354B638149514DE00D81AA5 /* WriteChameleonStage0.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = WriteChameleonStage0.sh; sourceTree = "<group>"; };
A354B639149514DE00D81AA5 /* WriteChameleonStage1.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = WriteChameleonStage1.sh; sourceTree = "<group>"; };
A354B63A149514DE00D81AA5 /* WriteChameleonStage2.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = WriteChameleonStage2.sh; sourceTree = "<group>"; };
A3561C731413FD7800E9B51E /* auto.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = auto.c; sourceTree = "<group>"; };
A3561C741413FD7800E9B51E /* auto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auto.h; sourceTree = "<group>"; };
A3561C751413FD7800E9B51E /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; 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>"; };
A35D2187141A75DC00969AC0 /* slimpkg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = slimpkg.sh; sourceTree = "<group>"; };
A35D2188141A75DC00969AC0 /* buildpkg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = buildpkg.sh; sourceTree = "<group>"; };
A360AA7D14136C1A00084D3F /* Make.rules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Make.rules; sourceTree = "<group>"; };
A396E2CC150247630025A245 /* License.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = License.rtf; sourceTree = "<group>"; };
A396E2CE150247630025A245 /* background.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = background.tiff; sourceTree = "<group>"; };
A396E2D1150247630025A245 /* Description.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Description.html; sourceTree = "<group>"; };
A396E2D2150247630025A245 /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = "<group>"; };
A396E35915028C9C0025A245 /* Welcome.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Welcome.html; sourceTree = "<group>"; };
A396E5821502D3320025A245 /* Conclusion.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Conclusion.html; sourceTree = "<group>"; };
A3F1F267141B9B3B00DDA709 /* Readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.txt; sourceTree = "<group>"; };
AB1DE71815B6E2D00088E06B /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = "<group>"; };
AB1DE71A15B6E2D00088E06B /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
B0056D8011F3868000754B65 /* coding_standards.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = coding_standards.txt; sourceTree = "<group>"; };
B0056D8111F3868000754B65 /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGES; sourceTree = "<group>"; };
B0056D8211F3868000754B65 /* APPLE_LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = APPLE_LICENSE; sourceTree = "<group>"; };
B0056D8511F3868000754B65 /* Distribution */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Distribution; sourceTree = "<group>"; };
B0056DB911F3868000754B65 /* smbios.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = smbios.plist; sourceTree = "<group>"; };
B0056DBD11F3868000754B65 /* background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = background.png; sourceTree = "<group>"; };
B0056DBE11F3868000754B65 /* boot.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = boot.png; sourceTree = "<group>"; };
B0056DBF11F3868000754B65 /* device_cdrom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = device_cdrom.png; sourceTree = "<group>"; };
B0056E1A11F3868000754B65 /* Users_Guide0.5.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = Users_Guide0.5.pdf; sourceTree = "<group>"; };
B0146EFF11FDEF550010765C /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
B0146F0011FDEFB90010765C /* GPL_V2_LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GPL_V2_LICENSE; sourceTree = "<group>"; };
B4118C63153EFEC200C8D926 /* clean_po_headers.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = clean_po_headers.sh; sourceTree = "<group>"; };
B4118C65153EFEC200C8D926 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = "<group>"; };
B4118C69153EFEC200C8D926 /* BibTeX.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = BibTeX.pm; sourceTree = "<group>"; };
B4118C6A153EFEC200C8D926 /* Chooser.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Chooser.pm; sourceTree = "<group>"; };
B4118C6B153EFEC200C8D926 /* Common.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Common.pm; sourceTree = "<group>"; };
B4118C6C153EFEC200C8D926 /* Debconf.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Debconf.pm; sourceTree = "<group>"; };
B4118C6D153EFEC200C8D926 /* Dia.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Dia.pm; sourceTree = "<group>"; };
B4118C6E153EFEC200C8D926 /* Docbook.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Docbook.pm; sourceTree = "<group>"; };
B4118C6F153EFEC200C8D926 /* Guide.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Guide.pm; sourceTree = "<group>"; };
B4118C70153EFEC200C8D926 /* Halibut.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Halibut.pm; sourceTree = "<group>"; };
B4118C71153EFEC200C8D926 /* Html.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Html.pm; sourceTree = "<group>"; };
B4118C72153EFEC200C8D926 /* Ini.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Ini.pm; sourceTree = "<group>"; };
B4118C73153EFEC200C8D926 /* KernelHelp.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = KernelHelp.pm; sourceTree = "<group>"; };
B4118C74153EFEC200C8D926 /* LaTeX.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = LaTeX.pm; sourceTree = "<group>"; };
B4118C75153EFEC200C8D926 /* Man.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Man.pm; sourceTree = "<group>"; };
B4118C76153EFEC200C8D926 /* NewsDebian.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = NewsDebian.pm; sourceTree = "<group>"; };
B4118C77153EFEC200C8D926 /* Po.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Po.pm; sourceTree = "<group>"; };
B4118C78153EFEC200C8D926 /* Pod.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Pod.pm; sourceTree = "<group>"; };
B4118C79153EFEC200C8D926 /* Prop.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Prop.pm; sourceTree = "<group>"; };
B4118C7A153EFEC200C8D926 /* Sgml.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Sgml.pm; sourceTree = "<group>"; };
B4118C7B153EFEC200C8D926 /* TeX.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = TeX.pm; sourceTree = "<group>"; };
B4118C7C153EFEC200C8D926 /* Texinfo.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Texinfo.pm; sourceTree = "<group>"; };
B4118C7D153EFEC200C8D926 /* Text.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Text.pm; sourceTree = "<group>"; };
B4118C7E153EFEC200C8D926 /* TransTractor.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = TransTractor.pm; sourceTree = "<group>"; };
B4118C7F153EFEC200C8D926 /* Wml.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Wml.pm; sourceTree = "<group>"; };
B4118C80153EFEC200C8D926 /* Xhtml.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Xhtml.pm; sourceTree = "<group>"; };
B4118C81153EFEC200C8D926 /* Xml.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = Xml.pm; sourceTree = "<group>"; };
B4118C82153EFEC200C8D926 /* MANIFEST */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MANIFEST; sourceTree = "<group>"; };
B4118C83153EFEC200C8D926 /* NEWS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NEWS; sourceTree = "<group>"; };
B4118C84153EFEC200C8D926 /* po4a */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = po4a; sourceTree = "<group>"; };
B4118C85153EFEC200C8D926 /* po4a-gettextize */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-gettextize"; sourceTree = "<group>"; };
B4118C86153EFEC200C8D926 /* po4a-normalize */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-normalize"; sourceTree = "<group>"; };
B4118C87153EFEC200C8D926 /* po4a-translate */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-translate"; sourceTree = "<group>"; };
B4118C88153EFEC200C8D926 /* po4a-updatepo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-updatepo"; sourceTree = "<group>"; };
B4118C89153EFEC200C8D926 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
B4118C8A153EFEC200C8D926 /* README.maintainers */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.maintainers; sourceTree = "<group>"; };
B4118C8B153EFEC200C8D926 /* README.tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.tests; sourceTree = "<group>"; };
B4118C8C153EFEC200C8D926 /* README.translators */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.translators; sourceTree = "<group>"; };
B4118C8F153EFF3300C8D926 /* ar.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ar.po; sourceTree = "<group>"; };
B4118C90153EFF3300C8D926 /* bg.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bg.po; sourceTree = "<group>"; };
B4118C91153EFF3300C8D926 /* bs.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bs.po; sourceTree = "<group>"; };
B4118C92153EFF3300C8D926 /* ca.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.po; sourceTree = "<group>"; };
B4118C93153EFF3300C8D926 /* chameleon.pot */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = chameleon.pot; sourceTree = "<group>"; };
B4118C94153EFF3300C8D926 /* cs.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cs.po; sourceTree = "<group>"; };
B4118C95153EFF3300C8D926 /* de.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = de.po; sourceTree = "<group>"; };
B4118C96153EFF3300C8D926 /* el.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = el.po; sourceTree = "<group>"; };
B4118C97153EFF3300C8D926 /* en.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = en.po; sourceTree = "<group>"; };
B4118C98153EFF3300C8D926 /* es.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = es.po; sourceTree = "<group>"; };
B4118C99153EFF3300C8D926 /* fa.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = fa.po; sourceTree = "<group>"; };
B4118C9A153EFF3300C8D926 /* fr.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = fr.po; sourceTree = "<group>"; };
B4118C9B153EFF3300C8D926 /* he.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = he.po; sourceTree = "<group>"; };
B4118C9C153EFF3300C8D926 /* hr.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hr.po; sourceTree = "<group>"; };
B4118C9D153EFF3300C8D926 /* hu.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hu.po; sourceTree = "<group>"; };
B4118C9E153EFF3300C8D926 /* id.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = id.po; sourceTree = "<group>"; };
B4118C9F153EFF3300C8D926 /* it.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = it.po; sourceTree = "<group>"; };
B4118CA0153EFF3300C8D926 /* ko.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ko.po; sourceTree = "<group>"; };
B4118CA1153EFF3300C8D926 /* mk.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mk.po; sourceTree = "<group>"; };
B4118CA2153EFF3300C8D926 /* nl.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = nl.po; sourceTree = "<group>"; };
B4118CA3153EFF3300C8D926 /* pl.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pl.po; sourceTree = "<group>"; };
B4118CA4153EFF3300C8D926 /* pt-BR.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "pt-BR.po"; sourceTree = "<group>"; };
B4118CA5153EFF3300C8D926 /* pt-PT.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "pt-PT.po"; sourceTree = "<group>"; };
B4118CA6153EFF3300C8D926 /* ro.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ro.po; sourceTree = "<group>"; };
B4118CA7153EFF3300C8D926 /* ru.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ru.po; sourceTree = "<group>"; };
B4118CA8153EFF3300C8D926 /* sr.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sr.po; sourceTree = "<group>"; };
B4118CA9153EFF3300C8D926 /* zh_CN.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = zh_CN.po; sourceTree = "<group>"; };
B4118CAA153EFF3300C8D926 /* zh_TW.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = zh_TW.po; sourceTree = "<group>"; };
B4118CAB153EFF3D00C8D926 /* po4a-chameleon.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "po4a-chameleon.cfg"; sourceTree = "<group>"; };
B41899FB14BFBE2400ED5B0B /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = "<group>"; };
B41899FD14BFBE4500ED5B0B /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = "<group>"; };
B41899FE14BFBE5200ED5B0B /* boot0md.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = boot0md.s; sourceTree = "<group>"; };
B4189A2114BFBF1C00ED5B0B /* zconf.tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zconf.tab.c; path = config/zconf.tab.c; sourceTree = "<group>"; };
B4189A2214BFBF5600ED5B0B /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = "<group>"; };
B4189A2414BFBFD100ED5B0B /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = "<group>"; };
B4AABE5914C3B8B90055ECD1 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = "<group>"; };
B4AABE5B14C3B8C70055ECD1 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = "<group>"; };
B4AABE5D14C3B8D70055ECD1 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = "<group>"; };
B4AABE5E14C3B8EF0055ECD1 /* clean_bootplist.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = clean_bootplist.pl; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXGroup section */
A360AA7D14136C1A00084D3F /* Make.rules */,
B0056D7D11F3868000754B65 /* Makefile */,
019DFBAF11FB94090013E8CC /* MEMTEST86_LICENSE */,
667B35911A5EF2B400FD5ED9 /* package */,
B0056D8311F3868000754B65 /* package */,
B0146EFF11FDEF550010765C /* README */,
A31301A71503CB9900E8C718 /* README.translators */,
B0056D7C11F3868000754B65 /* TODO */,
name = Chameleon;
sourceTree = "<group>";
};
36AE6E5616D6449A00D083A6 /* KernelPatcher */ = {
361BC70414BD979700236488 /* Icons */ = {
isa = PBXGroup;
children = (
36AE6E5716D644BC00D083A6 /* Cconfig */,
36AE6E5816D644BC00D083A6 /* KernelPatcher.dylib */,
36AE6E5916D644BC00D083A6 /* Makefile */,
361BC70B14BD97C800236488 /* pkg.zip */,
);
name = KernelPatcher;
name = Icons;
sourceTree = "<group>";
};
36AE6E5A16D644CB00D083A6 /* FileNVRAM */ = {
364E0DDF14BCFB6600F55E58 /* Scripts.templates */ = {
isa = PBXGroup;
children = (
36AE6E5D16D644F300D083A6 /* Cconfig */,
36AE6E5E16D644F300D083A6 /* FileNVRAM.dylib */,
36AE6E5B16D644DB00D083A6 /* include */,
36AE6E5F16D644F300D083A6 /* Makefile */,
B4AABE5814C3B8B90055ECD1 /* AddOption */,
364E0DE114BCFB7A00F55E58 /* InstallerLog */,
B4AABE5A14C3B8C70055ECD1 /* InstallModule */,
B4AABE5C14C3B8D70055ECD1 /* InstallTheme */,
364E0DE314BCFB7A00F55E58 /* Post */,
364E0DE514BCFB7A00F55E58 /* Pre */,
);
name = FileNVRAM;
name = Scripts.templates;
sourceTree = "<group>";
};
36AE6E5B16D644DB00D083A6 /* include */ = {
364E0DE114BCFB7A00F55E58 /* InstallerLog */ = {
isa = PBXGroup;
children = (
36AE6E5C16D644E800D083A6 /* FileNVRAM.h */,
36AB75E114BD091C005B8045 /* InstallLog.sh */,
);
name = include;
name = InstallerLog;
path = Scripts.templates/InstallerLog;
sourceTree = "<group>";
};
667B35911A5EF2B400FD5ED9 /* package */ = {
364E0DE314BCFB7A00F55E58 /* Post */ = {
isa = PBXGroup;
children = (
667B35921A5EF2B400FD5ED9 /* bin */,
667B35BD1A5EF2B400FD5ED9 /* builddmg.sh */,
667B35BE1A5EF2B400FD5ED9 /* buildpkg.sh */,
667B35BF1A5EF2B400FD5ED9 /* Changes.txt */,
667B35C01A5EF2B400FD5ED9 /* Distribution */,
667B35C11A5EF2B400FD5ED9 /* Icons */,
667B35C31A5EF2B400FD5ED9 /* OptionalSettings */,
667B35CF1A5EF2B400FD5ED9 /* po */,
667B35EE1A5EF2B400FD5ED9 /* po4a-chameleon.cfg */,
667B35EF1A5EF2B400FD5ED9 /* Resources */,
667B36331A5EF2B400FD5ED9 /* Resources.old */,
667B36341A5EF2B400FD5ED9 /* Scripts */,
667B36471A5EF2B500FD5ED9 /* Scripts.templates */,
667B36551A5EF2B500FD5ED9 /* slimpkg.sh */,
667B36561A5EF2B500FD5ED9 /* smbios.plist */,
36AB75E314BD0925005B8045 /* postinstall */,
);
path = package;
name = Post;
path = Scripts.templates/Post;
sourceTree = "<group>";
};
667B35921A5EF2B400FD5ED9 /* bin */ = {
364E0DE514BCFB7A00F55E58 /* Pre */ = {
isa = PBXGroup;
children = (
667B35931A5EF2B400FD5ED9 /* clean_po_headers.sh */,
667B35941A5EF2B400FD5ED9 /* po4a */,
B4AABE5E14C3B8EF0055ECD1 /* clean_bootplist.pl */,
36AB75E414BD092D005B8045 /* preinstall */,
);
path = bin;
name = Pre;
path = Scripts.templates/Pre;
sourceTree = "<group>";
};
667B35941A5EF2B400FD5ED9 /* po4a */ = {
36AE6E5616D6449A00D083A6 /* KernelPatcher */ = {
isa = PBXGroup;
children = (
667B35951A5EF2B400FD5ED9 /* COPYING */,
667B35961A5EF2B400FD5ED9 /* lib */,
667B35B21A5EF2B400FD5ED9 /* MANIFEST */,
667B35B31A5EF2B400FD5ED9 /* NEWS */,
667B35B41A5EF2B400FD5ED9 /* po4a */,
667B35B51A5EF2B400FD5ED9 /* po4a-gettextize */,
667B35B61A5EF2B400FD5ED9 /* po4a-normalize */,
667B35B71A5EF2B400FD5ED9 /* po4a-translate */,
667B35B81A5EF2B400FD5ED9 /* po4a-updatepo */,
667B35B91A5EF2B400FD5ED9 /* README */,
667B35BA1A5EF2B400FD5ED9 /* README.maintainers */,
667B35BB1A5EF2B400FD5ED9 /* README.tests */,
667B35BC1A5EF2B400FD5ED9 /* README.translators */,
36AE6E5716D644BC00D083A6 /* Cconfig */,
36AE6E5816D644BC00D083A6 /* KernelPatcher.dylib */,
36AE6E5916D644BC00D083A6 /* Makefile */,
);
path = po4a;
name = KernelPatcher;
sourceTree = "<group>";
};
667B35961A5EF2B400FD5ED9 /* lib */ = {
36AE6E5A16D644CB00D083A6 /* FileNVRAM */ = {
isa = PBXGroup;
children = (
667B35971A5EF2B400FD5ED9 /* Locale */,
36AE6E5D16D644F300D083A6 /* Cconfig */,
36AE6E5E16D644F300D083A6 /* FileNVRAM.dylib */,
36AE6E5B16D644DB00D083A6 /* include */,
36AE6E5F16D644F300D083A6 /* Makefile */,
);
path = lib;
name = FileNVRAM;
sourceTree = "<group>";
};
667B35971A5EF2B400FD5ED9 /* Locale */ = {
36AE6E5B16D644DB00D083A6 /* include */ = {
isa = PBXGroup;
children = (
667B35981A5EF2B400FD5ED9 /* Po4a */,
36AE6E5C16D644E800D083A6 /* FileNVRAM.h */,
);
path = Locale;
name = include;
sourceTree = "<group>";
};
667B35981A5EF2B400FD5ED9 /* Po4a */ = {
36B43E8114BCE91300D29461 /* OptionalSettings */ = {
isa = PBXGroup;
children = (
667B35991A5EF2B400FD5ED9 /* BibTeX.pm */,
667B359A1A5EF2B400FD5ED9 /* Chooser.pm */,
667B359B1A5EF2B400FD5ED9 /* Common.pm */,
667B359C1A5EF2B400FD5ED9 /* Debconf.pm */,
667B359D1A5EF2B400FD5ED9 /* Dia.pm */,
667B359E1A5EF2B400FD5ED9 /* Docbook.pm */,
667B359F1A5EF2B400FD5ED9 /* Guide.pm */,
667B35A01A5EF2B400FD5ED9 /* Halibut.pm */,
667B35A11A5EF2B400FD5ED9 /* Html.pm */,
667B35A21A5EF2B400FD5ED9 /* Ini.pm */,
667B35A31A5EF2B400FD5ED9 /* KernelHelp.pm */,
667B35A41A5EF2B400FD5ED9 /* LaTeX.pm */,
667B35A51A5EF2B400FD5ED9 /* Man.pm */,
667B35A61A5EF2B400FD5ED9 /* NewsDebian.pm */,
667B35A71A5EF2B400FD5ED9 /* Po.pm */,
667B35A81A5EF2B400FD5ED9 /* Pod.pm */,
667B35A91A5EF2B400FD5ED9 /* Prop.pm */,
667B35AA1A5EF2B400FD5ED9 /* Sgml.pm */,
667B35AB1A5EF2B400FD5ED9 /* TeX.pm */,
667B35AC1A5EF2B400FD5ED9 /* Texinfo.pm */,
667B35AD1A5EF2B400FD5ED9 /* Text.pm */,
667B35AE1A5EF2B400FD5ED9 /* TransTractor.pm */,
667B35AF1A5EF2B400FD5ED9 /* Wml.pm */,
667B35B01A5EF2B400FD5ED9 /* Xhtml.pm */,
667B35B11A5EF2B400FD5ED9 /* Xml.pm */,
36AB75E514BD095E005B8045 /* Control.txt */,
36AB75E614BD095E005B8045 /* General.txt */,
36AB75E714BD095E005B8045 /* KernelFlags.txt */,
36AB75E814BD095E005B8045 /* PowerManagement.txt */,
36AB75E914BD095E005B8045 /* Resolution.txt */,
36AB75EA14BD095E005B8045 /* Video.txt */,
);
path = Po4a;
name = OptionalSettings;
sourceTree = "<group>";
};
667B35C11A5EF2B400FD5ED9 /* Icons */ = {
isa = PBXGroup;
children = (
667B35C21A5EF2B400FD5ED9 /* pkg.zip */,
);
path = Icons;
sourceTree = "<group>";
};
667B35C31A5EF2B400FD5ED9 /* OptionalSettings */ = {
isa = PBXGroup;
children = (
667B35C41A5EF2B400FD5ED9 /* Audio.txt */,
667B35C51A5EF2B400FD5ED9 /* Control.txt */,
667B35C61A5EF2B400FD5ED9 /* General.txt */,
667B35C71A5EF2B400FD5ED9 /* HDAULayout.txt */,
667B35C81A5EF2B400FD5ED9 /* HDEFLayout.txt */,
667B35C91A5EF2B400FD5ED9 /* IntelAzul.txt */,
667B35CA1A5EF2B400FD5ED9 /* IntelCapri.txt */,
667B35CB1A5EF2B400FD5ED9 /* KernelFlags.txt */,
667B35CC1A5EF2B400FD5ED9 /* PowerManagement.txt */,
667B35CD1A5EF2B400FD5ED9 /* Resolution.txt */,
667B35CE1A5EF2B400FD5ED9 /* Video.txt */,
);
path = OptionalSettings;
sourceTree = "<group>";
};
667B35CF1A5EF2B400FD5ED9 /* po */ = {
isa = PBXGroup;
children = (
667B35D01A5EF2B400FD5ED9 /* ar.po */,
667B35D11A5EF2B400FD5ED9 /* bg.po */,
667B35D21A5EF2B400FD5ED9 /* bs.po */,
667B35D31A5EF2B400FD5ED9 /* ca.po */,
667B35D41A5EF2B400FD5ED9 /* chameleon.pot */,
667B35D51A5EF2B400FD5ED9 /* cs.po */,
667B35D61A5EF2B400FD5ED9 /* de.po */,
667B35D71A5EF2B400FD5ED9 /* el.po */,
667B35D81A5EF2B400FD5ED9 /* en.po */,
667B35D91A5EF2B400FD5ED9 /* es.po */,
667B35DA1A5EF2B400FD5ED9 /* fa.po */,
667B35DB1A5EF2B400FD5ED9 /* fr.po */,
667B35DC1A5EF2B400FD5ED9 /* he.po */,
667B35DD1A5EF2B400FD5ED9 /* hr.po */,
667B35DE1A5EF2B400FD5ED9 /* hu.po */,
667B35DF1A5EF2B400FD5ED9 /* id.po */,
667B35E01A5EF2B400FD5ED9 /* it.po */,
667B35E11A5EF2B400FD5ED9 /* ja.po */,
667B35E21A5EF2B400FD5ED9 /* ko.po */,
667B35E31A5EF2B400FD5ED9 /* mk.po */,
667B35E41A5EF2B400FD5ED9 /* nl.po */,
667B35E51A5EF2B400FD5ED9 /* pl.po */,
667B35E61A5EF2B400FD5ED9 /* pt-BR.po */,
667B35E71A5EF2B400FD5ED9 /* pt-PT.po */,
667B35E81A5EF2B400FD5ED9 /* pt.po */,
667B35E91A5EF2B400FD5ED9 /* ro.po */,
667B35EA1A5EF2B400FD5ED9 /* ru.po */,
667B35EB1A5EF2B400FD5ED9 /* sr.po */,
667B35EC1A5EF2B400FD5ED9 /* zh_CN.po */,
667B35ED1A5EF2B400FD5ED9 /* zh_TW.po */,
);
path = po;
sourceTree = "<group>";
};
667B35EF1A5EF2B400FD5ED9 /* Resources */ = {
isa = PBXGroup;
children = (
667B35F01A5EF2B400FD5ED9 /* Conclusion.rtfd */,
667B35F21A5EF2B400FD5ED9 /* Welcome.rtfd */,
667B35FA1A5EF2B400FD5ED9 /* common */,
667B36001A5EF2B400FD5ED9 /* distribution */,
667B362A1A5EF2B400FD5ED9 /* templates */,
);
path = Resources;
sourceTree = "<group>";
};
667B35FA1A5EF2B400FD5ED9 /* common */ = {
isa = PBXGroup;
children = (
667B35FB1A5EF2B400FD5ED9 /* License.rtf */,
);
path = common;
sourceTree = "<group>";
};
667B36001A5EF2B400FD5ED9 /* distribution */ = {
isa = PBXGroup;
children = (
667B36011A5EF2B400FD5ED9 /* background.tiff */,
);
path = distribution;
sourceTree = "<group>";
};
667B362A1A5EF2B400FD5ED9 /* templates */ = {
isa = PBXGroup;
children = (
667B362B1A5EF2B400FD5ED9 /* Conclusion.html */,
667B362C1A5EF2B400FD5ED9 /* Description.html */,
667B362D1A5EF2B400FD5ED9 /* Localizable.strings */,
667B362E1A5EF2B400FD5ED9 /* Welcome.html */,
);
path = templates;
sourceTree = "<group>";
};
667B36331A5EF2B400FD5ED9 /* Resources.old */ = {
isa = PBXGroup;
children = (
);
path = Resources.old;
sourceTree = "<group>";
};
667B36341A5EF2B400FD5ED9 /* Scripts */ = {
isa = PBXGroup;
children = (
667B36351A5EF2B500FD5ED9 /* Main */,
667B36381A5EF2B500FD5ED9 /* Sub */,
);
path = Scripts;
sourceTree = "<group>";
};
667B36351A5EF2B500FD5ED9 /* Main */ = {
isa = PBXGroup;
children = (
667B36361A5EF2B500FD5ED9 /* ESPpostinstall */,
667B36371A5EF2B500FD5ED9 /* Standardpostinstall */,
);
path = Main;
sourceTree = "<group>";
};
667B36381A5EF2B500FD5ED9 /* Sub */ = {
isa = PBXGroup;
children = (
667B36391A5EF2B500FD5ED9 /* CheckDiskMicrocode.sh */,
667B363A1A5EF2B500FD5ED9 /* CheckFatType.sh */,
667B363B1A5EF2B500FD5ED9 /* CheckGRUBLinuxLoader.sh */,
667B363C1A5EF2B500FD5ED9 /* CheckPartitionScheme.sh */,
667B363D1A5EF2B500FD5ED9 /* CheckPreviousChameleon.sh */,
667B363E1A5EF2B500FD5ED9 /* CheckProceed.sh */,
667B363F1A5EF2B500FD5ED9 /* CheckWindowsDiskSignature.sh */,
667B36401A5EF2B500FD5ED9 /* MountESP.sh */,
667B36411A5EF2B500FD5ED9 /* patch */,
667B36421A5EF2B500FD5ED9 /* SetActivePartition.sh */,
667B36431A5EF2B500FD5ED9 /* UnMountEFIvolumes.sh */,
667B36441A5EF2B500FD5ED9 /* WriteChameleonStage0.sh */,
667B36451A5EF2B500FD5ED9 /* WriteChameleonStage1.sh */,
667B36461A5EF2B500FD5ED9 /* WriteChameleonStage2.sh */,
);
path = Sub;
sourceTree = "<group>";
};
667B36471A5EF2B500FD5ED9 /* Scripts.templates */ = {
isa = PBXGroup;
children = (
667B36481A5EF2B500FD5ED9 /* AddOption */,
667B364A1A5EF2B500FD5ED9 /* InstallerLog */,
667B364C1A5EF2B500FD5ED9 /* InstallModule */,
667B364E1A5EF2B500FD5ED9 /* InstallTheme */,
667B36501A5EF2B500FD5ED9 /* Post */,
667B36521A5EF2B500FD5ED9 /* Pre */,
);
path = Scripts.templates;
sourceTree = "<group>";
};
667B36481A5EF2B500FD5ED9 /* AddOption */ = {
isa = PBXGroup;
children = (
667B36491A5EF2B500FD5ED9 /* postinstall */,
);
path = AddOption;
sourceTree = "<group>";
};
667B364A1A5EF2B500FD5ED9 /* InstallerLog */ = {
isa = PBXGroup;
children = (
667B364B1A5EF2B500FD5ED9 /* InstallLog.sh */,
);
path = InstallerLog;
sourceTree = "<group>";
};
667B364C1A5EF2B500FD5ED9 /* InstallModule */ = {
isa = PBXGroup;
children = (
667B364D1A5EF2B500FD5ED9 /* postinstall */,
);
path = InstallModule;
sourceTree = "<group>";
};
667B364E1A5EF2B500FD5ED9 /* InstallTheme */ = {
isa = PBXGroup;
children = (
667B364F1A5EF2B500FD5ED9 /* postinstall */,
);
path = InstallTheme;
sourceTree = "<group>";
};
667B36501A5EF2B500FD5ED9 /* Post */ = {
isa = PBXGroup;
children = (
667B36511A5EF2B500FD5ED9 /* postinstall */,
);
path = Post;
sourceTree = "<group>";
};
667B36521A5EF2B500FD5ED9 /* Pre */ = {
isa = PBXGroup;
children = (
667B36531A5EF2B500FD5ED9 /* clean_bootplist.pl */,
667B36541A5EF2B500FD5ED9 /* preinstall */,
);
path = Pre;
sourceTree = "<group>";
};
6DBAFD1713B0D4590047ED33 /* include */ = {
isa = PBXGroup;
children = (
path = ufs;
sourceTree = "<group>";
};
A354B6261495124F00D81AA5 /* Main */ = {
isa = PBXGroup;
children = (
A354B6271495124F00D81AA5 /* ESPpostinstall */,
A354B62A1495124F00D81AA5 /* Standardpostinstall */,
);
path = Main;
sourceTree = "<group>";
};
A354B62B149514DE00D81AA5 /* Sub */ = {
isa = PBXGroup;
children = (
A354B62C149514DE00D81AA5 /* CheckDiskMicrocode.sh */,
A354B62D149514DE00D81AA5 /* CheckFatType.sh */,
A354B62E149514DE00D81AA5 /* CheckGRUBLinuxLoader.sh */,
A354B62F149514DE00D81AA5 /* CheckPartitionScheme.sh */,
A354B630149514DE00D81AA5 /* CheckPreviousChameleon.sh */,
A354B631149514DE00D81AA5 /* CheckProceed.sh */,
A354B632149514DE00D81AA5 /* CheckWindowsDiskSignature.sh */,
A354B634149514DE00D81AA5 /* MountESP.sh */,
A354B635149514DE00D81AA5 /* patch */,
A354B636149514DE00D81AA5 /* SetActivePartition.sh */,
A354B637149514DE00D81AA5 /* UnMountEFIvolumes.sh */,
A354B638149514DE00D81AA5 /* WriteChameleonStage0.sh */,
A354B639149514DE00D81AA5 /* WriteChameleonStage1.sh */,
A354B63A149514DE00D81AA5 /* WriteChameleonStage2.sh */,
);
path = Sub;
sourceTree = "<group>";
};
A3561C721413FD7800E9B51E /* fdisk */ = {
isa = PBXGroup;
children = (
path = "layouts-src";
sourceTree = "<group>";
};
A396E2CA150247630025A245 /* Resources */ = {
isa = PBXGroup;
children = (
A396E2CB150247630025A245 /* common */,
A396E2CD150247630025A245 /* distribution */,
A396E2CF150247630025A245 /* templates */,
);
path = Resources;
sourceTree = "<group>";
};
A396E2CB150247630025A245 /* common */ = {
isa = PBXGroup;
children = (
A396E2CC150247630025A245 /* License.rtf */,
);
path = common;
sourceTree = "<group>";
};
A396E2CD150247630025A245 /* distribution */ = {
isa = PBXGroup;
children = (
A396E2CE150247630025A245 /* background.tiff */,
);
path = distribution;
sourceTree = "<group>";
};
A396E2CF150247630025A245 /* templates */ = {
isa = PBXGroup;
children = (
A396E35915028C9C0025A245 /* Welcome.html */,
A396E2D1150247630025A245 /* Description.html */,
A396E5821502D3320025A245 /* Conclusion.html */,
A396E2D2150247630025A245 /* Localizable.strings */,
);
path = templates;
sourceTree = "<group>";
};
A3F1F20D141B9B0D00DDA709 /* Scripts */ = {
isa = PBXGroup;
children = (
A354B6261495124F00D81AA5 /* Main */,
A354B62B149514DE00D81AA5 /* Sub */,
);
path = Scripts;
sourceTree = "<group>";
};
AB1DE71715B6E2D00088E06B /* Sata */ = {
isa = PBXGroup;
children = (
path = util;
sourceTree = "<group>";
};
B0056D8311F3868000754B65 /* package */ = {
isa = PBXGroup;
children = (
B4118C62153EFEC200C8D926 /* bin */,
A35D2188141A75DC00969AC0 /* buildpkg.sh */,
361BC70214BD977700236488 /* Changes.txt */,
B0056D8511F3868000754B65 /* Distribution */,
361BC70414BD979700236488 /* Icons */,
36B43E8114BCE91300D29461 /* OptionalSettings */,
B4118C8E153EFF3300C8D926 /* po */,
B4118CAB153EFF3D00C8D926 /* po4a-chameleon.cfg */,
A396E2CA150247630025A245 /* Resources */,
A3F1F20D141B9B0D00DDA709 /* Scripts */,
364E0DDF14BCFB6600F55E58 /* Scripts.templates */,
A35D2187141A75DC00969AC0 /* slimpkg.sh */,
B0056DB911F3868000754B65 /* smbios.plist */,
);
path = package;
sourceTree = "<group>";
};
B0056DBA11F3868000754B65 /* artwork */ = {
isa = PBXGroup;
children = (
path = User_Guide_src;
sourceTree = "<group>";
};
B4118C62153EFEC200C8D926 /* bin */ = {
isa = PBXGroup;
children = (
B4118C63153EFEC200C8D926 /* clean_po_headers.sh */,
B4118C64153EFEC200C8D926 /* po4a */,
);
path = bin;
sourceTree = "<group>";
};
B4118C64153EFEC200C8D926 /* po4a */ = {
isa = PBXGroup;
children = (
B4118C65153EFEC200C8D926 /* COPYING */,
B4118C66153EFEC200C8D926 /* lib */,
B4118C82153EFEC200C8D926 /* MANIFEST */,
B4118C83153EFEC200C8D926 /* NEWS */,
B4118C84153EFEC200C8D926 /* po4a */,
B4118C85153EFEC200C8D926 /* po4a-gettextize */,
B4118C86153EFEC200C8D926 /* po4a-normalize */,
B4118C87153EFEC200C8D926 /* po4a-translate */,
B4118C88153EFEC200C8D926 /* po4a-updatepo */,
B4118C89153EFEC200C8D926 /* README */,
B4118C8A153EFEC200C8D926 /* README.maintainers */,
B4118C8B153EFEC200C8D926 /* README.tests */,
B4118C8C153EFEC200C8D926 /* README.translators */,
);
path = po4a;
sourceTree = "<group>";
};
B4118C66153EFEC200C8D926 /* lib */ = {
isa = PBXGroup;
children = (
B4118C67153EFEC200C8D926 /* Locale */,
);
path = lib;
sourceTree = "<group>";
};
B4118C67153EFEC200C8D926 /* Locale */ = {
isa = PBXGroup;
children = (
B4118C68153EFEC200C8D926 /* Po4a */,
);
path = Locale;
sourceTree = "<group>";
};
B4118C68153EFEC200C8D926 /* Po4a */ = {
isa = PBXGroup;
children = (
B4118C69153EFEC200C8D926 /* BibTeX.pm */,
B4118C6A153EFEC200C8D926 /* Chooser.pm */,
B4118C6B153EFEC200C8D926 /* Common.pm */,
B4118C6C153EFEC200C8D926 /* Debconf.pm */,
B4118C6D153EFEC200C8D926 /* Dia.pm */,
B4118C6E153EFEC200C8D926 /* Docbook.pm */,
B4118C6F153EFEC200C8D926 /* Guide.pm */,
B4118C70153EFEC200C8D926 /* Halibut.pm */,
B4118C71153EFEC200C8D926 /* Html.pm */,
B4118C72153EFEC200C8D926 /* Ini.pm */,
B4118C73153EFEC200C8D926 /* KernelHelp.pm */,
B4118C74153EFEC200C8D926 /* LaTeX.pm */,
B4118C75153EFEC200C8D926 /* Man.pm */,
B4118C76153EFEC200C8D926 /* NewsDebian.pm */,
B4118C77153EFEC200C8D926 /* Po.pm */,
B4118C78153EFEC200C8D926 /* Pod.pm */,
B4118C79153EFEC200C8D926 /* Prop.pm */,
B4118C7A153EFEC200C8D926 /* Sgml.pm */,
B4118C7B153EFEC200C8D926 /* TeX.pm */,
B4118C7C153EFEC200C8D926 /* Texinfo.pm */,
B4118C7D153EFEC200C8D926 /* Text.pm */,
B4118C7E153EFEC200C8D926 /* TransTractor.pm */,
B4118C7F153EFEC200C8D926 /* Wml.pm */,
B4118C80153EFEC200C8D926 /* Xhtml.pm */,
B4118C81153EFEC200C8D926 /* Xml.pm */,
);
path = Po4a;
sourceTree = "<group>";
};
B4118C8E153EFF3300C8D926 /* po */ = {
isa = PBXGroup;
children = (
B4118C8F153EFF3300C8D926 /* ar.po */,
B4118C90153EFF3300C8D926 /* bg.po */,
B4118C91153EFF3300C8D926 /* bs.po */,
B4118C92153EFF3300C8D926 /* ca.po */,
B4118C93153EFF3300C8D926 /* chameleon.pot */,
B4118C94153EFF3300C8D926 /* cs.po */,
B4118C95153EFF3300C8D926 /* de.po */,
B4118C96153EFF3300C8D926 /* el.po */,
B4118C97153EFF3300C8D926 /* en.po */,
B4118C98153EFF3300C8D926 /* es.po */,
B4118C99153EFF3300C8D926 /* fa.po */,
B4118C9A153EFF3300C8D926 /* fr.po */,
B4118C9B153EFF3300C8D926 /* he.po */,
B4118C9C153EFF3300C8D926 /* hr.po */,
B4118C9D153EFF3300C8D926 /* hu.po */,
B4118C9E153EFF3300C8D926 /* id.po */,
B4118C9F153EFF3300C8D926 /* it.po */,
B4118CA0153EFF3300C8D926 /* ko.po */,
B4118CA1153EFF3300C8D926 /* mk.po */,
B4118CA2153EFF3300C8D926 /* nl.po */,
B4118CA3153EFF3300C8D926 /* pl.po */,
B4118CA4153EFF3300C8D926 /* pt-BR.po */,
B4118CA5153EFF3300C8D926 /* pt-PT.po */,
B4118CA6153EFF3300C8D926 /* ro.po */,
B4118CA7153EFF3300C8D926 /* ru.po */,
B4118CA8153EFF3300C8D926 /* sr.po */,
B4118CA9153EFF3300C8D926 /* zh_CN.po */,
B4118CAA153EFF3300C8D926 /* zh_TW.po */,
);
path = po;
sourceTree = "<group>";
};
B4189A0314BFBED900ED5B0B /* config */ = {
isa = PBXGroup;
children = (
name = lxdialog;
sourceTree = "<group>";
};
B4AABE5814C3B8B90055ECD1 /* AddOption */ = {
isa = PBXGroup;
children = (
B4AABE5914C3B8B90055ECD1 /* postinstall */,
);
name = AddOption;
path = Scripts.templates/AddOption;
sourceTree = "<group>";
};
B4AABE5A14C3B8C70055ECD1 /* InstallModule */ = {
isa = PBXGroup;
children = (
B4AABE5B14C3B8C70055ECD1 /* postinstall */,
);
name = InstallModule;
path = Scripts.templates/InstallModule;
sourceTree = "<group>";
};
B4AABE5C14C3B8D70055ECD1 /* InstallTheme */ = {
isa = PBXGroup;
children = (
B4AABE5D14C3B8D70055ECD1 /* postinstall */,
);
name = InstallTheme;
path = Scripts.templates/InstallTheme;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXLegacyTarget section */
vi,
zh_CN,
zh_TW,
fa,
);
mainGroup = 08FB7794FE84155DC02AAC07 /* Chameleon */;
projectDirPath = "";
};
/* End PBXProject section */
/* Begin PBXVariantGroup section */
667B35F01A5EF2B400FD5ED9 /* Conclusion.rtfd */ = {
isa = PBXVariantGroup;
children = (
667B35F11A5EF2B400FD5ED9 /* ar */,
667B35F41A5EF2B400FD5ED9 /* bg */,
667B35F61A5EF2B400FD5ED9 /* bs */,
667B35F81A5EF2B400FD5ED9 /* ca */,
667B35FC1A5EF2B400FD5ED9 /* cs */,
667B35FE1A5EF2B400FD5ED9 /* de */,
667B36021A5EF2B400FD5ED9 /* el */,
667B36041A5EF2B400FD5ED9 /* en */,
667B36061A5EF2B400FD5ED9 /* es */,
667B36081A5EF2B400FD5ED9 /* fa */,
667B360A1A5EF2B400FD5ED9 /* fr */,
667B360C1A5EF2B400FD5ED9 /* he */,
667B360E1A5EF2B400FD5ED9 /* hr */,
667B36101A5EF2B400FD5ED9 /* hu */,
667B36121A5EF2B400FD5ED9 /* id */,
667B36141A5EF2B400FD5ED9 /* it */,
667B36161A5EF2B400FD5ED9 /* ja */,
667B36181A5EF2B400FD5ED9 /* ko */,
667B361A1A5EF2B400FD5ED9 /* mk */,
667B361C1A5EF2B400FD5ED9 /* nl */,
667B361E1A5EF2B400FD5ED9 /* pl */,
667B36201A5EF2B400FD5ED9 /* pt-BR */,
667B36221A5EF2B400FD5ED9 /* pt-PT */,
667B36241A5EF2B400FD5ED9 /* ro */,
667B36261A5EF2B400FD5ED9 /* ru */,
667B36281A5EF2B400FD5ED9 /* sr */,
667B362F1A5EF2B400FD5ED9 /* zh_CN */,
667B36311A5EF2B400FD5ED9 /* zh_TW */,
);
name = Conclusion.rtfd;
sourceTree = "<group>";
};
667B35F21A5EF2B400FD5ED9 /* Welcome.rtfd */ = {
isa = PBXVariantGroup;
children = (
667B35F31A5EF2B400FD5ED9 /* ar */,
667B35F51A5EF2B400FD5ED9 /* bg */,
667B35F71A5EF2B400FD5ED9 /* bs */,
667B35F91A5EF2B400FD5ED9 /* ca */,
667B35FD1A5EF2B400FD5ED9 /* cs */,
667B35FF1A5EF2B400FD5ED9 /* de */,
667B36031A5EF2B400FD5ED9 /* el */,
667B36051A5EF2B400FD5ED9 /* en */,
667B36071A5EF2B400FD5ED9 /* es */,
667B36091A5EF2B400FD5ED9 /* fa */,
667B360B1A5EF2B400FD5ED9 /* fr */,
667B360D1A5EF2B400FD5ED9 /* he */,
667B360F1A5EF2B400FD5ED9 /* hr */,
667B36111A5EF2B400FD5ED9 /* hu */,
667B36131A5EF2B400FD5ED9 /* id */,
667B36151A5EF2B400FD5ED9 /* it */,
667B36171A5EF2B400FD5ED9 /* ja */,
667B36191A5EF2B400FD5ED9 /* ko */,
667B361B1A5EF2B400FD5ED9 /* mk */,
667B361D1A5EF2B400FD5ED9 /* nl */,
667B361F1A5EF2B400FD5ED9 /* pl */,
667B36211A5EF2B400FD5ED9 /* pt-BR */,
667B36231A5EF2B400FD5ED9 /* pt-PT */,
667B36251A5EF2B400FD5ED9 /* ro */,
667B36271A5EF2B400FD5ED9 /* ru */,
667B36291A5EF2B400FD5ED9 /* sr */,
667B36301A5EF2B400FD5ED9 /* zh_CN */,
667B36321A5EF2B400FD5ED9 /* zh_TW */,
);
name = Welcome.rtfd;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
1DEB919008733D9F0010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = NO;
DEBUGGING_SYMBOLS = YES;
GCC_DYNAMIC_NO_PIC = NO;
1DEB919108733D9F0010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = YES;
ONLY_ACTIVE_ARCH = NO;
OTHER_CFLAGS = "";
1DEB919408733D9F0010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = NO;
MACOSX_DEPLOYMENT_TARGET = 10.9;
MACOSX_DEPLOYMENT_TARGET = 10.6;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
1DEB919508733D9F0010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = NO;
MACOSX_DEPLOYMENT_TARGET = 10.9;
MACOSX_DEPLOYMENT_TARGET = 10.6;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = macosx;
};
branches/Bungo/i386/libsaio/console.c
6969
7070
7171
72
73
74
75
76
77
78
72
73
74
75
76
77
78
7979
8080
8181
......
100100
101101
102102
103
104
105
103
104
105
106106
107
108
109
110
111
112
113
114
107
108
109
110
111
112
113
114
115115
116
116
117117
118
119
120
121
122
123
118
119
120
121
122
123
124124
125125
126126
......
129129
130130
131131
132
133
132
133
134134
135135
136136
......
138138
139139
140140
141
141
142
142143
143144
144145
145
146
147
146148
147149
148150
......
152154
153155
154156
155
156
157
158
157159
158160
159161
160162
161
163
164
162165
163166
164167
......
215218
216219
217220
218
221
219222
220223
221224
......
299302
300303
301304
302
303
305
306
304307
305308
306309
307
308
310
311
309312
310313
311314
312
313
315
316
314317
315
316
317
318
318
319
320
321
319322
320323
321324
......
344347
345348
346349
347
348
350
351
349352
350
353
354
351355
352
356
357
358
353359
354360
355361
356362
357
363
358364
359
365
360366
// Bungo:
typedef struct {
uint16_t year;
uint8_t mon;
uint8_t day;
uint8_t hour;
uint8_t mins;
uint8_t secs;
uint8_t dlight;
uint16_t year;
uint8_t mon;
uint8_t day;
uint8_t hour;
uint8_t mins;
uint8_t secs;
uint8_t dlight;
} datetime_t;
static datetime_t datetime;
uint64_t getRTCdatetime() // 0xYYYYMMDDHHMMSS0L in decimal
{
biosBuf_t bb;
bb.intno = 0x1a;
biosBuf_t bb;
bb.intno = 0x1a;
bb.eax.r.h = 0x04; // get RTC date
//bb.flags.cf = 0;
bios(&bb);
if (bb.flags.cf) return 0;
datetime.year = (bb.ecx.r.h >> 4) * 1000 + (bb.ecx.r.h & 0x0F) * 100 + (bb.ecx.r.l >> 4) * 10 + (bb.ecx.r.l & 0x0F) * 1;
datetime.mon = (bb.edx.r.h >> 4) * 10 + (bb.edx.r.h & 0x0F) * 1;
datetime.day = (bb.edx.r.l >> 4) * 10 + (bb.edx.r.l & 0x0F) * 1;
bb.intno = 0x1a;
//bb.flags.cf = 0;
bios(&bb);
if (bb.flags.cf) return 0;
datetime.year = (bb.ecx.r.h >> 4) * 1000 + (bb.ecx.r.h & 0x0F) * 100 + (bb.ecx.r.l >> 4) * 10 + (bb.ecx.r.l & 0x0F) * 1;
datetime.mon = (bb.edx.r.h >> 4) * 10 + (bb.edx.r.h & 0x0F) * 1;
datetime.day = (bb.edx.r.l >> 4) * 10 + (bb.edx.r.l & 0x0F) * 1;
bb.intno = 0x1a;
bb.eax.r.h = 0x02; // get RTC time
//bb.flags.cf = 0;
//bb.flags.cf = 0;
bios(&bb);
if (bb.flags.cf) return 0;
datetime.dlight = bb.edx.r.l & 0x0F;
datetime.hour = (bb.ecx.r.h >> 4) * 10 + (bb.ecx.r.h & 0x0F) * 1;
datetime.mins = (bb.ecx.r.l >> 4) * 10 + (bb.ecx.r.l & 0x0F) * 1;
datetime.secs = (bb.edx.r.h >> 4) * 10 + (bb.edx.r.h & 0x0F) * 1;
return *(uint64_t *)&datetime;
if (bb.flags.cf) return 0;
datetime.dlight = bb.edx.r.l & 0x0F;
datetime.hour = (bb.ecx.r.h >> 4) * 10 + (bb.ecx.r.h & 0x0F) * 1;
datetime.mins = (bb.ecx.r.l >> 4) * 10 + (bb.ecx.r.l & 0x0F) * 1;
datetime.secs = (bb.edx.r.h >> 4) * 10 + (bb.edx.r.h & 0x0F) * 1;
return *(uint64_t *)&datetime;
}
void initBooterLog(void)
bzero(msgbuf, BOOTER_LOG_SIZE);
cursor = msgbuf;
verbose("%s\n", "Chameleon v" I386BOOT_CHAMELEONVERSION " (Bungo branch) r" I386BOOT_CHAMELEONREVISION " [" I386BOOT_BUILDDATE "]");
getRTCdatetime();
verbose("Logging started: %04d/%02d/%02d, %02d:%02d:%02d (+/- offset)\n", datetime.year, datetime.mon, datetime.day, datetime.hour, datetime.mins, datetime.secs);
getRTCdatetime();
verbose("Logging started: %04d/%02d/%02d, %02d:%02d:%02d (+/- offset)\n", datetime.year, datetime.mon, datetime.day, datetime.hour, datetime.mins, datetime.secs);
}
int msglog(const char * fmt, ...)
va_list ap;
struct putc_info pi;
if (!msgbuf) {
if (!msgbuf)
{
return 0;
}
if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE))) {
if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE)))
{
return 0;
}
prf(fmt, ap, sputc, &pi);
va_end(ap);
cursor += strlen((char *)cursor);
return 0;
return 0;
}
void setupBooterLog(void)
{
if (!msgbuf) {
if (!msgbuf)
{
return;
}
int printf(const char * fmt, ...)
{
va_list ap;
va_start(ap, fmt);
if (bootArgs->Video.v_display == VGA_TEXT_MODE)
{
vprf(fmt, ap);
}
// Kabyl: BooterLog
struct putc_info pi;
// Kabyl: BooterLog
struct putc_info pi;
if (!msgbuf)
{
return 0;
}
return 0;
}
if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE)))
{
return 0;
}
return 0;
}
pi.str = cursor;
pi.last_str = 0;
prf(fmt, ap, sputc, &pi);
cursor += strlen((char *)cursor);
pi.str = cursor;
pi.last_str = 0;
prf(fmt, ap, sputc, &pi);
cursor += strlen((char *)cursor);
va_end(ap);
return(0);
/** Print user message and a "Press a key to continue..." message and wait for a key press. */
void pause(const char * fmt, ...) // replace getchar() by pause() were useful.
{
va_list ap;
va_list ap;
va_start(ap, fmt);
if (bootArgs->Video.v_display == VGA_TEXT_MODE) {
if (bootArgs->Video.v_display == VGA_TEXT_MODE)
{
prf(fmt, ap, putchar, 0);
} else {
}
else
{
vprf(fmt, ap);
}
va_end(ap);
printf("Press a key to continue...");
printf("Press a key to continue...");
getchar();
printf("\n");
printf("\n");
}
branches/Bungo/i386/libsaio/exfat.c
4848
4949
5050
51
5251
53
54
52
5553
5654
5755
......
240238
241239
242240
243
241
244242
245243
246244
......
870868
871869
872870
873
871
874872
875873
876874
......
888886
889887
890888
891
889
892890
893891
894892
......
927925
928926
929927
930
928
931929
932930
933931
......
957955
958956
959957
960
958
959
960
961961
962962
963963
......
967967
968968
969969
970
971
970
971
972
973
972974
973975
974976
......
979981
980982
981983
982
983
984
985
984
985
986
987
986988
987
988
989
990
991
992
993
994
989
990
991
992
993
994
995
996
995997
996
998
997999
998
999
1000
1001
1000
1001
1002
1003
10021004
1003
1005
10041006
10051007
1006
1008
10071009
10081010
10091011
1010
1012
10111013
10121014
1013
1015
10141016
10151017
10161018
10171019
1018
1019
1020
1021
10201022
10211023
10221024
10231025
1024
1026
10251027
1026
1028
10271029
1028
1029
1030
1031
10301032
1031
1032
1033
1034
10331035
1034
1036
10351037
1036
1038
10371039
1038
1040
10391041
#if DEBUG_EXFAT
#define DBG(x...)printf(x)
#define PAUSE()getchar()
#else
#define DBG(x...)
#define PAUSE()
#define DBG(x...)msglog(x)
#endif
#defineEXFAT_BBID&gExfatID[0]
}
if (invalidate)
{
gCachedFATBlockAddress = INVALID_FAT_ADDRESS;
gCachedFATBlockAddress = INVALID_FAT_ADDRESS;
}
return 0;
}
int loopControl = 0;
DBG("EXFAT: start %x:%x\n", ih->biosdev, ih->part_no);
buf = (char *)malloc(MAX_BLOCK_SIZE);
if (buf == 0)
{
// take our boot structure
boot = (struct exfatbootfile *) buf;
/*
* The first three bytes are an Intel x86 jump instruction. I assume it
* can be the same forms as DOS FAT:
DBG("EXFAT: invalid sectors per cluster shift (%d)\n", spcs);
goto error;
}
// calculate root dir cluster offset
rdirOffset = OSSwapLittleToHostInt32(boot->bf_cloff) + ((long long) (OSSwapLittleToHostInt32(boot->bf_rdircl) - 2) << spcs);
DBG("EXFAT: rdirOffset=%d\n", (int) rdirOffset);
DBG("EXFAT: label=%s\n", str);
free(buf);
PAUSE();
#if DEBUG_EXFAT
pause("\n[DEBUG_EXFAT] ");
#endif
return;
error:
}
DBG("EXFAT: error\n");
PAUSE();
return;
#if DEBUG_EXFAT
pause("\n[DEBUG_EXFAT] ");
#endif
return;
}
/**
long EXFATGetUUID(CICell ih, char *uuidStr)
{
uint32_t volsn;
struct exfatbootfile *boot;
void *buf = malloc(MAX_BLOCK_SIZE);
if ( !buf )
return -1;
struct exfatbootfile *boot;
void *buf = malloc(MAX_BLOCK_SIZE);
if ( !buf )
return -1;
/*
* Read the boot sector, check signatures, and do some minimal
* sanity checking. NOTE: the size of the read below is intended
* to be a multiple of all supported block sizes, so we don't
* have to determine or change the device's block size.
*/
Seek(ih, 0);
Read(ih, (long)buf, MAX_BLOCK_SIZE);
/*
* Read the boot sector, check signatures, and do some minimal
* sanity checking. NOTE: the size of the read below is intended
* to be a multiple of all supported block sizes, so we don't
* have to determine or change the device's block size.
*/
Seek(ih, 0);
Read(ih, (long)buf, MAX_BLOCK_SIZE);
boot = (struct exfatbootfile *) buf;
boot = (struct exfatbootfile *) buf;
/*
* Check the "EXFAT " signature.
*/
if (memcmp((const char *)boot->bf_sysid, EXFAT_BBID, EXFAT_BBIDLEN) != 0)
/*
* Check the "EXFAT " signature.
*/
if (memcmp((const char *)boot->bf_sysid, EXFAT_BBID, EXFAT_BBIDLEN) != 0)
{
return -1;
return -1;
}
// Check for non-null volume serial number
// Check for non-null volume serial number
volsn = OSSwapLittleToHostInt32(boot->bf_volsn);
if( !volsn )
{
return -1;
return -1;
}
// Use UUID like the one you get on Windows
// Use UUID like the one you get on Windows
sprintf(uuidStr, "%04X-%04X", (unsigned short)(volsn >> 16) & 0xFFFF,
(unsigned short)volsn & 0xFFFF);
DBG("EXFATGetUUID: %x:%x = %s\n", ih->biosdev, ih->part_no, uuidStr);
return 0;
}
return 0;
}
/**
* Returns true if given buffer is the boot rec of the EXFAT volume.
*/
bool EXFATProbe(const void *buffer)
bool EXFATProbe(const void * buffer)
{
bool result = false;
bool result = false;
// boot sector structure
const struct exfatbootfile*boot = buffer;
// boot sector structure
const struct exfatbootfile* boot = buffer;
// Looking for EXFAT signature.
if (memcmp((const char *)boot->bf_sysid, EXFAT_BBID, EXFAT_BBIDLEN) == 0)
// Looking for EXFAT signature.
if (memcmp((const char *)boot->bf_sysid, EXFAT_BBID, EXFAT_BBIDLEN) == 0)
{
result = true;
result = true;
}
DBG("EXFATProbe: %d\n", result ? 1 : 0);
return result;
return result;
}
branches/Bungo/i386/libsaio/bootstruct.c
4545
4646
4747
48
48
4949
5050
51
51
5252
5353
5454
......
8383
8484
8585
86
87
88
86
87
88
8989
90
91
92
93
94
90
91
92
93
94
9595
9696
97
97
9898
9999
100100
101
101
102102
103103
104104
......
144144
145145
146146
147
147
148148
149149
150150
......
154154
155155
156156
157
158
159
160
161
157
158
159
160
161
162162
163163
164164
......
184184
185185
186186
187
188
189
190
187
188
189
190
191191
192192
193193
......
224224
225225
226226
227
227
228228
229229
230230
* the kernel by the booter.
*/
boot_args*bootArgs;
boot_args*bootArgs;
boot_args_pre_lion*bootArgsPreLion;
PrivateBootInfo_t*bootInfo;
Node*gMemoryMapNode;
Node*gMemoryMapNode;
static char platformName[64];
// BIOS did not provide a memory map, systems with
// discontiguous memory or unusual memory hole locations
// may have problems.
bootInfo->convmem = getConventionalMemorySize();
bootInfo->extmem = getExtendedMemorySize();
bootInfo->convmem= getConventionalMemorySize();
bootInfo->extmem= getExtendedMemorySize();
}
bootInfo->configEnd = bootInfo->config;
bootArgs->Video.v_display = VGA_TEXT_MODE;
// DeviceTree init
bootInfo->configEnd= bootInfo->config;
bootArgs->Video.v_display= VGA_TEXT_MODE;
// DeviceTree init
//DT__Initialize();
//node = DT__FindNode("/", true);
node = DT__Initialize();
node = DT__Initialize();
if (node == 0) {
stop("Couldn't create root node");
}
getPlatformName(platformName);
nameLen = strlen(platformName) + 1;
DT__AddProperty(node, "compatible", nameLen, platformName);
EfiMemoryRange *memoryMap;
MemoryRange *range;
int memoryMapCount = bootInfo->memoryMapCount;
if (memoryMapCount == 0)
{
// XXX could make a two-part map here
// convert memory map to boot_args memory map
memoryMap = (EfiMemoryRange *)AllocateKernelMemory(sizeof(EfiMemoryRange) * memoryMapCount);
bootArgs->MemoryMap = (uint32_t)memoryMap;
bootArgs->MemoryMapSize = sizeof(EfiMemoryRange) * memoryMapCount;
bootArgs->MemoryMapDescriptorSize = sizeof(EfiMemoryRange);
bootArgs->MemoryMapDescriptorVersion = 0;
bootArgs->MemoryMap= (uint32_t)memoryMap;
bootArgs->MemoryMapSize= sizeof(EfiMemoryRange) * memoryMapCount;
bootArgs->MemoryMapDescriptorSize= sizeof(EfiMemoryRange);
bootArgs->MemoryMapDescriptorVersion= 0;
for (i = 0; i < memoryMapCount; i++, memoryMap++)
{
range = &bootInfo->memoryMap[i];
break;
}
memoryMap->PhysicalStart = range->base;
memoryMap->VirtualStart = range->base;
memoryMap->NumberOfPages = range->length >> I386_PGSHIFT;
memoryMap->Attribute = 0;
memoryMap->PhysicalStart= range->base;
memoryMap->VirtualStart= range->base;
memoryMap->NumberOfPages= range->length >> I386_PGSHIFT;
memoryMap->Attribute= 0;
}
// copy bootFile into device tree
bootArgsPreLion->kaddr = bootArgs->kaddr;
bootArgsPreLion->ksize = bootArgs->ksize;
bootArgsPreLion->efiRuntimeServicesPageStart = bootArgs->efiRuntimeServicesPageStart;
bootArgsPreLion->efiRuntimeServicesPageCount = bootArgs->efiRuntimeServicesPageCount;
bootArgsPreLion->efiSystemTable = bootArgs->efiSystemTable;
branches/Bungo/i386/libsaio/ntfs_private.h
7474
7575
7676
77
78
79
80
81
77
78
79
80
8281
8382
8483
......
108107
109108
110109
111
112
113
110
111
112
114113
115
116
117
118
114
115
116
117
119118
120119
121120
......
140139
141140
142141
143
142
144143
145144
146145
......
150149
151150
152151
153
154
155
156
152
153
154
155
157156
158
157
159158
160159
161
160
162161
163162
164163
......
179178
180179
181180
182
181
183182
184183
185184
......
221220
222221
223222
224
223
225224
226225
227226
......
244243
245244
246245
247
248
246
247
249248
250249
251250
......
257256
258257
259258
260
259
261260
262261
263262
......
270269
271270
272271
273
272
274273
275274
276
277
275
276
278277
279278
280279
281280
282
283
281
282
284283
285
284
286285
287
286
288287
289288
290289
......
303302
304303
305304
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
321320
322321
323322
324323
325324
326
325
327326
328327
329
330
328
329
331330
332331
333332
334333
335334
336335
337
338
339
340
341
342
343
344
345
336
337
338
339
340
341
342
343
344
346345
347
346
348347
349
348
350349
351350
352351
typedef u_int16_t wchar;
#pragma pack(1)
#define BBSIZE 1024
#defineBBOFF ((off_t)(0))
#defineBBLOCK ((daddr_t)(0))
#defineNTFS_MFTINO 0
#define BBSIZE1024
#defineBBOFF((off_t)(0))
#defineBBLOCK((daddr_t)(0))
#defineNTFS_MFTINO0
#defineNTFS_VOLUMEINO3
#defineNTFS_ATTRDEFINO4
#defineNTFS_ROOTINO5
u_int16_t a_index;
};
#define NTFS_A_STD 0x10
#define NTFS_A_ATTRLIST 0x20
#define NTFS_A_NAME 0x30
#define NTFS_A_STD0x10
#define NTFS_A_ATTRLIST0x20
#define NTFS_A_NAME0x30
#define NTFS_A_VOLUMENAME0x60
#define NTFS_A_DATA 0x80
#defineNTFS_A_INDXROOT 0x90
#defineNTFS_A_INDX 0xA0
#define NTFS_A_INDXBITMAP 0xB0
#define NTFS_A_DATA0x80
#defineNTFS_A_INDXROOT0x90
#defineNTFS_A_INDX0xA0
#define NTFS_A_INDXBITMAP0xB0
#define NTFS_MAXATTRNAME255
} a_S_nr;
} a_S;
};
#define a_r a_S.a_S_r
#define a_ra_S.a_S_r
#define a_nra_S.a_S_nr
typedef struct {
u_int64_t t_access;
} ntfs_times_t;
#define NTFS_FFLAG_RDONLY 0x01LL
#define NTFS_FFLAG_HIDDEN 0x02LL
#define NTFS_FFLAG_SYSTEM 0x04LL
#define NTFS_FFLAG_ARCHIVE 0x20LL
#define NTFS_FFLAG_RDONLY0x01LL
#define NTFS_FFLAG_HIDDEN0x02LL
#define NTFS_FFLAG_SYSTEM0x04LL
#define NTFS_FFLAG_ARCHIVE0x20LL
#define NTFS_FFLAG_COMPRESSED0x0800LL
#define NTFS_FFLAG_DIR 0x10000000LL
#define NTFS_FFLAG_DIR0x10000000LL
struct attr_name {
u_int32_t n_pnumber;/* Parent ntnode */
u_int32_tn_pnumber;/* Parent ntnode */
u_int32_t reserved;
ntfs_times_t n_times;
u_int64_t n_size;
u_int32_t ir_datalen;/* (total size of index enties?) sizeof something */
u_int32_t ir_allocated;/* (allocated size of index entries?) */
u_int8_t ir_flag;/* 1=index allocation needed (large index) */
u_int8_t ir_pad1;/* padding */
u_int8_tir_pad1;/* padding */
u_int16_t ir_pad2;/* padding */
};
u_int64_t ie_fallocated;
u_int64_t ie_fsize;
u_int32_t ie_fflag;
u_int32_t unknown3;/* used by reparse points and external attributes? */
u_int32_tunknown3;/* used by reparse points and external attributes? */
u_int8_t ie_fnamelen;
u_int8_t ie_fnametype;
wchar ie_fname[NTFS_MAXFILENAME];
};
#defineNTFS_ATTRNAME_MAXLEN0x40
#defineNTFS_ADFLAG_NONRES 0x0080/* Attrib can be non resident */
#defineNTFS_ADFLAG_INDEX 0x0002/* Attrib can be indexed */
#defineNTFS_ADFLAG_NONRES0x0080/* Attrib can be non resident */
#defineNTFS_ADFLAG_INDEX0x0002/* Attrib can be indexed */
struct attrdef {
wcharad_name[NTFS_ATTRNAME_MAXLEN];
u_int32_tad_type;
struct ntvattrdef {
charad_name[0x40];
int ad_namelen;
intad_namelen;
u_int32_tad_type;
};
u_int8_t bf_spc;/* sectors per cluster */
u_int8_t reserved2[7];/* unused (zeroed) */
u_int8_t bf_media;/* media desc. (0xF8) */
u_int8_t reserved3[2]; /* always 0 */
u_int8_t reserved3[2];/* always 0 */
u_int16_t bf_spt;/* sectors per track */
u_int16_t bf_heads;/* number of heads */
u_int32_t bf_hidsecs; /* hidden sectors */
u_int8_t reserver4[8]; /* not used by NTFS (0x00000000) */
u_int32_t bf_hidsecs;/* hidden sectors */
u_int8_t reserver4[8];/* not used by NTFS (0x00000000) */
u_int64_t bf_spv;/* sectors per volume (total) */
cn_t bf_mftcn;/* $MFT cluster number */
cn_t bf_mftmirrcn;/* $MFTMirr cn */
u_int8_t bf_mftrecsz;/* MFT record size (clust) */
/* 0xF6 inducates 1/4 */
u_int8_t reserved5[3];
/* 0xF6 inducates 1/4 */
u_int8_t reserved5[3];
u_int8_t bf_ibsz;/* index buffer size */
u_int8_t reserved6[3]; /* not used by NTFS (0x000000) */
u_int8_t reserved6[3];/* not used by NTFS (0x000000) */
u_int64_t bf_volsn;/* volume ser. num. */
u_int32_t bf_crc32; /* checksum */
u_int32_t bf_crc32;/* checksum */
};
/*
#defineNTFS_SYSNODESNUM0x0B
struct ntfsmount {
struct mount *ntm_mountp;/* filesystem vfs structure */
struct bootfile ntm_bootfile;
dev_t ntm_dev;/* device mounted */
struct vnode *ntm_devvp;/* block device mounted vnode */
struct vnode *ntm_sysvn[NTFS_SYSNODESNUM];
u_int32_t ntm_bpmftrec;
uid_t ntm_uid;
gid_t ntm_gid;
mode_t ntm_mode;
u_long ntm_flag;
cn_t ntm_cfree;
struct ntvattrdef *ntm_ad;/* attribute names are stored in native byte order */
int ntm_adnum;
wchar * ntm_82u;/* 8bit to Unicode */
char ** ntm_u28;/* Unicode to 8 bit */
struct mount *ntm_mountp;/* filesystem vfs structure */
struct bootfile ntm_bootfile;
dev_t ntm_dev;/* device mounted */
struct vnode *ntm_devvp;/* block device mounted vnode */
struct vnode *ntm_sysvn[NTFS_SYSNODESNUM];
u_int32_t ntm_bpmftrec;
uid_t ntm_uid;
gid_t ntm_gid;
mode_t ntm_mode;
u_long ntm_flag;
cn_tntm_cfree;
struct ntvattrdef *ntm_ad;/* attribute names are stored in native byte order */
intntm_adnum;
wchar *ntm_82u;/* 8bit to Unicode */
char **ntm_u28;/* Unicode to 8 bit */
#ifdef APPLE
struct netexport ntm_export;/* NFS export information */
#endif
};
#define ntm_mftcn ntm_bootfile.bf_mftcn
#define ntm_mftcnntm_bootfile.bf_mftcn
#define ntm_mftmirrcnntm_bootfile.bf_mftmirrcn
#definentm_mftrecszntm_bootfile.bf_mftrecsz
#definentm_spc ntm_bootfile.bf_spc
#definentm_bps ntm_bootfile.bf_bps
#definentm_spcntm_bootfile.bf_spc
#definentm_bpsntm_bootfile.bf_bps
#pragma pack()
#defineNTFS_NEXTREC(s, type) ((type)(((caddr_t) s) + le16toh((s)->reclen)))
/* Convert mount ptr to ntfsmount ptr. */
#define VFSTONTFS(mp) ((struct ntfsmount *)((mp)->mnt_data))
#define VTONT(v) FTONT(VTOF(v))
#defineVTOF(v) ((struct fnode *)((v)->v_data))
#defineFTOV(f) ((f)->f_vp)
#defineFTONT(f) ((f)->f_ip)
#define ntfs_cntobn(cn) ((daddr_t)(cn) * (ntmp->ntm_spc))
#define ntfs_cntob(cn) ((off_t)(cn) * (ntmp)->ntm_spc * (ntmp)->ntm_bps)
#define ntfs_btocn(off) (cn_t)((off) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
#define ntfs_btocl(off) (cn_t)((off + ntfs_cntob(1) - 1) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
#define VFSTONTFS(mp)((struct ntfsmount *)((mp)->mnt_data))
#define VTONT(v)FTONT(VTOF(v))
#defineVTOF(v)((struct fnode *)((v)->v_data))
#defineFTOV(f)((f)->f_vp)
#defineFTONT(f)((f)->f_ip)
#define ntfs_cntobn(cn)((daddr_t)(cn) * (ntmp->ntm_spc))
#define ntfs_cntob(cn)((off_t)(cn) * (ntmp)->ntm_spc * (ntmp)->ntm_bps)
#define ntfs_btocn(off)(cn_t)((off) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
#define ntfs_btocl(off)(cn_t)((off + ntfs_cntob(1) - 1) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
#define ntfs_btocnoff(off)(off_t)((off) % ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
#define ntfs_bntob(bn) (daddr_t)((bn) * (ntmp)->ntm_bps)
#define ntfs_bntob(bn)(daddr_t)((bn) * (ntmp)->ntm_bps)
#definentfs_bpbl (daddr_t)((ntmp)->ntm_bps)
#definentfs_bpbl(daddr_t)((ntmp)->ntm_bps)
#ifdef MALLOC_DECLARE
MALLOC_DECLARE(M_NTFSMNT);
branches/Bungo/i386/libsaio/ext2fs.c
3737
3838
3939
40
40
4141
4242
4343
}
str[strMaxLen]=0;
strncpy (str, buf+0x478, MIN(strMaxLen, 16));
//verbose("EXT2: label=%s\n", str);
//verbose("EXT2: label=%s\n", str);
free (buf);
}
branches/Bungo/i386/libsaio/vbe.c
268268
269269
270270
271
272
273
271
272
273
274274
275275
276
277
278
279
280
276
277
278
279
280
281281
282282
283283
284284
285285
286286
287
288
289
290
291
292
293
294
295
287
288
289
290
291
292
293
294
295
296296
297297
298298
299299
300300
301301
302
303
304
305
306
307
308
309
310
302
303
304
305
306
307
308
309
310
311311
312312
313313
314314
315315
316316
317
318
319
320
321
317
318
319
320
321
322322
323323
324324
325325
326326
327327
328
329
330
331
332
333
334
335
328
329
330
331
332
333
334
335
336336
337337
338338
339339
340340
341341
342
343
344
342
343
344
345345
346
347
348
349
350
346
347
348
349
350
351351
uint8_t setVBEMode(unsigned short mode, const VBECRTCInfoBlock * timing)
{
bb.intno = 0x10;
bb.eax.rr = funcSetMode;
bb.ebx.rr = mode;
bb.intno = 0x10;
bb.eax.rr = funcSetMode;
bb.ebx.rr = mode;
if (timing)
{
bb.es = SEG(timing);
bb.edi.rr = OFF(timing);
}
bios(&bb);
return(bb.eax.r.h);
bb.es = SEG(timing);
bb.edi.rr = OFF(timing);
}
bios(&bb);
return(bb.eax.r.h);
}
//==============================================================================
uint8_t setVBEPalette(void *palette)
{
bb.intno = 0x10;
bb.eax.rr = funcGetSetPaletteData;
bb.ebx.r.l = subfuncSet;
bb.ecx.rr = 256;
bb.edx.rr = 0;
bb.es = SEG(palette);
bb.edi.rr = OFF(palette);
bios(&bb);
return(bb.eax.r.h);
bb.intno = 0x10;
bb.eax.rr = funcGetSetPaletteData;
bb.ebx.r.l = subfuncSet;
bb.ecx.rr = 256;
bb.edx.rr = 0;
bb.es = SEG(palette);
bb.edi.rr = OFF(palette);
bios(&bb);
return(bb.eax.r.h);
}
//==============================================================================
uint8_t getVBEPalette(void *palette)
{
bb.intno = 0x10;
bb.eax.rr = funcGetSetPaletteData;
bb.ebx.r.l = subfuncGet;
bb.ecx.rr = 256;
bb.edx.rr = 0;
bb.es = SEG(palette);
bb.edi.rr = OFF(palette);
bios(&bb);
return(bb.eax.r.h);
bb.intno = 0x10;
bb.eax.rr = funcGetSetPaletteData;
bb.ebx.r.l = subfuncGet;
bb.ecx.rr = 256;
bb.edx.rr = 0;
bb.es = SEG(palette);
bb.edi.rr = OFF(palette);
bios(&bb);
return(bb.eax.r.h);
}
//==============================================================================
uint8_t getVBECurrentMode(unsigned short *mode)
{
bb.intno = 0x10;
bb.eax.rr = funcGetCurrentMode;
bios(&bb);
*mode = bb.ebx.rr;
return(bb.eax.r.h);
bb.intno = 0x10;
bb.eax.rr = funcGetCurrentMode;
bios(&bb);
*mode = bb.ebx.rr;
return(bb.eax.r.h);
}
//==============================================================================
uint8_t getVBEPixelClock(unsigned short mode, unsigned long * pixelClock)
{
bb.intno = 0x10;
bb.eax.rr = funcGetSetPixelClock;
bb.ebx.r.l = 0;
bb.ecx.rx = *pixelClock;
bb.edx.rr = mode;
bios(&bb);
*pixelClock = bb.ecx.rx;
return(bb.eax.r.h);
bb.intno = 0x10;
bb.eax.rr = funcGetSetPixelClock;
bb.ebx.r.l = 0;
bb.ecx.rx = *pixelClock;
bb.edx.rr = mode;
bios(&bb);
*pixelClock = bb.ecx.rx;
return(bb.eax.r.h);
}
//==============================================================================
uint8_t getVBEEDID(void *edidBlock)
{
bzero(&bb, sizeof(bb));
bb.intno = 0x10;
bb.eax.rr = 0x4F15;
bzero(&bb, sizeof(bb));
bb.intno = 0x10;
bb.eax.rr = 0x4F15;
bb.ebx.r.l = 0x01;
//bb.edx.rr = 0x01;
bb.es = SEG(edidBlock);
bb.edi.rr = OFF(edidBlock);
bios(&bb);
return(bb.eax.r.h);
//bb.edx.rr = 0x01;
bb.es = SEG(edidBlock);
bb.edi.rr = OFF(edidBlock);
bios(&bb);
return(bb.eax.r.h);
}
branches/Bungo/i386/libsaio/bootstruct.h
4747
4848
4949
50
50
5151
5252
5353
......
7474
7575
7676
77
78
79
80
77
78
79
80
81
82
8183
8284
8385
......
9092
9193
9294
93
94
95
96
97
95
96
97
98
99
100
98101
99102
100103
/*
* Maximum number of boot drivers that can be loaded.
*/
#define NDRIVERS 500
#define NDRIVERS500
#define CONFIG_SIZE (40 * 4096)
unsigned char BIOSPresent;
} PCI_bus_info_t;
typedef struct {
unsigned long address; // address where driver was loaded
unsigned long size; // number of bytes
unsigned long type; // driver type
typedef struct
{
unsigned long address;// address where driver was loaded
unsigned long size;// number of bytes
unsigned long type;// driver type
} driver_config_t;
/*
/*
* ACPI defined memory range types.
*/
enum {
kMemoryRangeUsable = 1, // RAM usable by the OS.
kMemoryRangeReserved = 2, // Reserved. (Do not use)
kMemoryRangeACPI = 3, // ACPI tables. Can be reclaimed.
kMemoryRangeNVS = 4, // ACPI NVS memory. (Do not use)
enum
{
kMemoryRangeUsable= 1,// RAM usable by the OS.
kMemoryRangeReserved= 2,// Reserved. (Do not use)
kMemoryRangeACPI= 3,// ACPI tables. Can be reclaimed.
kMemoryRangeNVS= 4,// ACPI NVS memory. (Do not use)
/* Undefined types should be treated as kMemoryRangeReserved */
};
branches/Bungo/i386/libsaio/device_tree.c
8282
8383
8484
85
86
85
8786
8887
8988
......
143142
144143
145144
146
147
145
148146
149147
150148
......
206204
207205
208206
209
210
207
211208
212209
213210
......
215212
216213
217214
218
219
215
220216
221217
222218
......
224220
225221
226222
227
228
223
229224
230
231
232
233
234
235
236
237
238
239
240
241
242
243
225
226
227
228
229
230
231
232
233
234
235
236
237
238
244239
245240
246241
247242
248
249
243
250244
251
245
252246
253247
254248
255249
256250
257251
258
259
252
260253
261254
262255
......
265258
266259
267260
268
261
269262
270263
271264
......
289282
290283
291284
292
293
285
294286
295287
296288
297289
298290
299291
300
292
293
301294
302295
303296
......
334327
335328
336329
337
338
330
339331
340332
341333
......
343335
344336
345337
346
338
339
347340
348341
349342
......
387380
388381
389382
390
391
383
392384
393385
394386
......
409401
410402
411403
412
413
404
414405
415406
416407
......
427418
428419
429420
430
431
421
432422
433423
434424
......
456446
457447
458448
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
488478
489479
490480
......
495485
496486
497487
498
499
488
500489
501490
502491
......
533522
534523
535524
536
537
525
538526
539527
540528
......
548536
549537
550538
551
552
539
553540
554541
555542
......
557544
558545
559546
560
561
547
562548
563549
564550
......
589575
590576
591577
592
593
578
594579
595580
596581
......
611596
612597
613598
614
615
599
616600
617601
618602
619603
620604
621605
622
623
606
624607
625608
626609
//==============================================================================
Property *
DT__AddProperty(Node *node, const char *name, uint32_t length, void *value)
Property *DT__AddProperty(Node *node, const char *name, uint32_t length, void *value)
{
Property *prop;
//==============================================================================
Node *
DT__AddChild(Node *parent, const char *name)
Node *DT__AddChild(Node *parent, const char *name)
{
Node *node;
//==============================================================================
void
DT__FreeProperty(Property *prop)
void DT__FreeProperty(Property *prop)
{
prop->next = freeProperties;
freeProperties = prop;
//==============================================================================
void
DT__FreeNode(Node *node)
void DT__FreeNode(Node *node)
{
node->next = freeNodes;
freeNodes = node;
//==============================================================================
Node *
DT__Initialize(void)
Node *DT__Initialize(void)
{
//DPRINTF("DT__Initialize\n");
freeNodes = 0;
allocedNodes = 0;
freeProperties = 0;
allocedProperties = 0;
DTInfo.numNodes = 0;
DTInfo.numProperties = 0;
DTInfo.totalPropertySize = 0;
rootNode = DT__AddChild(NULL, "/");
DPRINTF("DT__Initialize: done\n");
return rootNode;
//DPRINTF("DT__Initialize\n");
freeNodes = 0;
allocedNodes = 0;
freeProperties = 0;
allocedProperties = 0;
DTInfo.numNodes = 0;
DTInfo.numProperties = 0;
DTInfo.totalPropertySize = 0;
rootNode = DT__AddChild(NULL, "/");
DPRINTF("DT__Initialize: done\n");
return rootNode;
}
//==============================================================================
Node *
DT__GetRootNode(void)
Node *DT__GetRootNode(void)
{
return rootNode;
return rootNode;
}
//==============================================================================
/*
* Free up memory used by in-memory representation of device tree.
*/
void
DT__Finalize(void)
void DT__Finalize(void)
{
Node *node;
Property *prop;
for (prop = allocedProperties; prop != NULL; prop = prop->next)
{
free((void *)(prop->name));
free((void *)(prop->name));
free(prop->value);
}
//==============================================================================
static void *
FlattenNodes(Node *node, void *buffer)
static void *FlattenNodes(Node *node, void *buffer)
{
Property *prop;
DeviceTreeNode *flatNode;
DeviceTreeNodeProperty *flatProp;
int count;
if (node == 0) {
if (node == 0)
{
return buffer;
}
* To use your own buffer, call with *result = &buffer.
*/
void
DT__FlattenDeviceTree(void **buffer_p, uint32_t *length)
void DT__FlattenDeviceTree(void **buffer_p, uint32_t *length)
{
uint32_t totalSize;
void * buf;
DPRINTF("DT__FlattenDeviceTree(0x%x, 0x%x)\n", buffer_p, length);
#if DEBUG
if (buffer_p) {
if (buffer_p)
{
DT__PrintTree(rootNode);
}
#endif
//==============================================================================
char *
DT__GetName(Node *node)
char *DT__GetName(Node *node)
{
Property *prop;
//==============================================================================
// Bungo
Property *
DT__GetProperty(Node *node, const char *name)
Property *DT__GetProperty(Node *node, const char *name)
{
Property *prop;
//==============================================================================
Node *
DT__FindNode(const char *path, bool createIfMissing)
Node *DT__FindNode(const char *path, bool createIfMissing)
{
Node *node, *child;
DTPropertyNameBuf nameBuf;
}
*bp = '\0';
if (nameBuf[0] == '\0')
{
// last path entry
break;
}
DPRINTF("DT__FindNode: Node '%s'\n", nameBuf);
for (child = node->children; child != 0; child = child->next)
{
DPRINTF("DT__FindNode: Child 0x%x\n", child);
if (strcmp(DT__GetName(child), nameBuf) == 0)
{
break;
}
}
if (child == 0 && createIfMissing)
{
char *str = malloc(strlen(nameBuf) + 1);
// XXX this will leak
strcpy(str, nameBuf);
child = DT__AddChild(node, str);
DPRINTF("DT__FindNode: Creating node: %s\n", str);
}
if (nameBuf[0] == '\0')
{
// last path entry
break;
}
DPRINTF("DT__FindNode: Node '%s'\n", nameBuf);
for (child = node->children; child != 0; child = child->next)
{
DPRINTF("DT__FindNode: Child 0x%x\n", child);
if (strcmp(DT__GetName(child), nameBuf) == 0)
{
break;
}
}
if (child == 0 && createIfMissing)
{
char *str = malloc(strlen(nameBuf) + 1);
// XXX this will leak
strcpy(str, nameBuf);
child = DT__AddChild(node, str);
DPRINTF("DT__FindNode: Creating node: %s\n", str);
}
node = child;
}
//==============================================================================
void
DT__PrintNode(Node *node, int level)
void DT__PrintNode(Node *node, int level)
{
char spaces[10], *cp = spaces;
Property *prop;
//==============================================================================
static void
_PrintTree(Node *node, int level)
static void _PrintTree(Node *node, int level)
{
DT__PrintNode(node, level);
//==============================================================================
void
DT__PrintTree(Node *node)
void DT__PrintTree(Node *node)
{
if (node == 0) node = rootNode;
_PrintTree(node, 0);
//==============================================================================
void
DT__PrintFlattenedNode(DTEntry entry, int level)
void DT__PrintFlattenedNode(DTEntry entry, int level)
{
char spaces[10], *cp = spaces;
DTPropertyIterator propIter;
//==============================================================================
static void
_PrintFlattenedTree(DTEntry entry, int level)
static void _PrintFlattenedTree(DTEntry entry, int level)
{
DTEntryIterator entryIter;
//==============================================================================
void
DT__PrintFlattenedTree(DTEntry entry)
void DT__PrintFlattenedTree(DTEntry entry)
{
_PrintFlattenedTree(entry, 0);
}
//==============================================================================
int
main(int argc, char **argv)
int main(int argc, char **argv)
{
DTEntrydtEntry;
DTPropertyIteratorpropIter;
branches/Bungo/i386/libsaio/hfs.c
443443
444444
445445
446
446
447447
448448
449449
......
460460
461461
462462
463
463
464464
465465
466466
if (HFSInitPartition(ih) == -1)
{
verbose("HFSGetDescription: Init partition failed");
verbose("HFSGetDescription: Init partition failed");
return;
}
strncpy(str, name, strMaxLen);
str[strMaxLen] = '\0';
//verbose("HFS: label=%s\n", str);
//verbose("HFS: label=%s\n", str);
}
//==============================================================================
branches/Bungo/i386/libsaio/vbe.h
5858
5959
6060
61
62
63
61
62
63
6464
65
65
6666
6767
6868
*/
enum {
funcGetControllerInfo= 0x4F00,
funcGetModeInfo = 0x4F01,
funcSetMode = 0x4F02,
funcGetCurrentMode = 0x4F03,
funcGetModeInfo= 0x4F01,
funcSetMode= 0x4F02,
funcGetCurrentMode= 0x4F03,
funcSaveRestoreState= 0x4F04,
funcWindowControl = 0x4F05,
funcWindowControl= 0x4F05,
funcGetSetScanLineLength= 0x4F06,
funcGetSetDisplayStart= 0x4F07,
funcGetSetPaletteFormat= 0x4F08,
branches/Bungo/i386/libsaio/acpi_patcher.c
2828
2929
3030
31
32
31
32
3333
3434
3535
......
5454
5555
5656
57
58
59
57
58
59
6060
6161
6262
6363
64
64
6565
6666
67
67
6868
6969
70
71
72
70
71
72
7373
7474
7575
7676
77
78
79
77
78
79
8080
8181
8282
83
84
85
86
87
83
84
85
86
87
8888
8989
90
90
9191
9292
93
94
95
93
94
95
9696
9797
9898
......
102102
103103
104104
105
106
105
106
107107
108108
109109
110110
111
111
112112
113113
114
114
115115
116116
117
118
119
117
118
119
120120
121121
122122
123123
124
125
126
124
125
126
127127
128128
129129
130
131
132
133
134
135
136
137
138
139
140
141
130
131
132
133
134
135
136
137
138
139
140
141
142142
143143
144
145
146
144
145
146
147147
148148
149149
......
157157
158158
159159
160
161
160
161
162162
163163
164164
165165
166166
167167
168
169
168
169
170170
171171
172
173
172
173
174174
175175
176
177
176
177
178178
179179
180
181
182
183
180
181
182
183
184184
185185
186186
......
214214
215215
216216
217
218
217
218
219219
220220
221221
......
228228
229229
230230
231
231
232232
233233
234234
235235
236236
237
238
237
239238
240239
241240
......
267266
268267
269268
270
269
271270
272271
273272
......
278277
279278
280279
281
282
283
284
285
286
287
288
289
290
291
292
293
280
281
282
283
284
285
286
287
288
289
290
291
292
294293
295
294
296295
297
296
298297
299298
300299
301300
302
303
304
305
306
307
308
309
310
301
302
303
304
305
306
307
308
309
310
311
311312
312313
313314
314315
315
316
317
318
319
320
321
316
317
318
319
320
321
322
322323
323324
324325
325326
326327
327
328
329
330
331
328
329
330
331
332
332333
333334
334
335
335336
336337
337338
338
339
339
340
340341
341342
342
343
343344
344345
345
346
346347
347348
348
349
349
350
350351
351352
352353
353
354
355
354
355
356
356357
357358
358359
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
376381
377
382
383
378384
379385
380
386
387
381388
382
389
383390
384
391
385392
386
393
387394
388395
389396
390397
391
398
392399
393400
394401
......
419426
420427
421428
422
429
423430
424431
425432
426
427
428
429
430
431
432
433
434
435
436
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
437450
438
439
440
441
442
443
444
451
452
453
454
455
456
457
458
459
460
445461
446462
447
463
464
448465
449
466
467
468
450469
451470
452471
......
454473
455474
456475
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
473498
474499
475500
476501
477
502
503
478504
479
505
480506
481
482
483
484
485
486
487
507
508
509
510
511
512
513
514
515
516
488517
489518
490519
491520
492
521
493522
494523
495
496
497
498
524
525
526
527
499528
500529
501530
502531
503532
504533
505
534
506535
507536
508
509
510537
538
539
511540
512541
513542
514543
515544
516
517
518
519
545
546
547
548
520549
521550
522551
523
524
525
552
553
554
555
556
526557
527
558
559
560
528561
529562
530
531
563
564
532565
533566
534567
535
568
536569
537570
538571
......
546579
547580
548581
549
550
551
582
583
584
585
552586
553587
554588
......
558592
559593
560594
561
562
563
564
565
566
567
568
569
595
596
597
598
599
600
601
602
603
604
605
570606
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
596638
597639
598
599
600
601
640
641
642
643
644
645
602646
603647
604648
605649
606650
607
608
609
610
611
612
613
651
652
653
654
655
656
657
658
614659
615
616
617
618
619
660
661
662
663
664
665
620666
621667
622
623
668
669
670
671
624672
625673
626674
627
675
628676
629677
630678
631679
632680
633
681
682
634683
635684
636685
637686
638687
639688
640
689
690
641691
642692
643693
644694
645695
646696
647
648
649
697
698
699
650700
651
652
653
654
701
702
703
704
705
706
655707
656
657
708
709
710
711
712
658713
659
714
660715
661716
662717
......
664719
665720
666721
667
668
669
670
671
672
722
723
724
725
726
727
728
729
673730
674731
675732
......
679736
680737
681738
682
739
740
741
683742
684743
685744
686745
687
688
689746
690
747
748
749
750
751
752
691753
692754
693
755
694756
695
696
757
758
759
697760
698761
699762
700763
701764
702765
703
766
767
704768
705769
706
707
708
709
710
711
712
713
770
771
772
773
774
775
776
777
778
779
714780
715781
716
717
718
719
720
721782
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
783
784
785
786
787
747788
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
789
790
791
792
793
794
768795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
769821
770
771
772
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
773841
774
775
776
777
778
779
842
843
844
845
846
847
780848
781
782
783
784
785
786
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
787868
788869
789
790
791
870
871
872
792873
793
794
795
796
797
798
799
874
875
876
877
878
879
880
881
882
883
884
800885
801886
802887
803
888
804889
805890
806891
807892
808893
809
810
811
812
894
895
896
897
898
813899
814
900
901
815902
816903
817904
818
905
819906
820907
821
822
823
824
825
908
909
910
911
912
913
914
826915
827916
828917
829
918
830919
831920
832
833
921
922
923
924
834925
835926
836927
......
839930
840931
841932
842
933
934
843935
936
844937
845938
846939
847
848
849
940
941
942
943
944
850945
851
946
947
852948
853
854
949
950
855951
856
952
953
954
857955
858956
859957
860
861
958
959
862960
863
961
864962
865
866
867
963
868964
869
965
870966
871967
872968
873969
874970
875
876
971
972
877973
878
879
880
881
882
883
974
975
976
977
978
979
980
981
884982
885983
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
9101030
9111031
<
#endif
// Bungo:
void *new_dsdt = NULL,
*new_ecdt = NULL;
void *new_dsdt = NULL;
void *new_ecdt = NULL;
// Slice: New signature compare function
boolean_t tableSign(void *table, const char *sgn)
static struct acpi_2_rsdp *getAddressOfAcpiTable()
{
/* Before searching the BIOS space we are supposed to search the first 1K of the EBDA */
EBDA_RANGE_START = /* (uint32_t)swapUint16(*(uint16_t *)BDA_EBDA_START) << 4 */ EBDA_RANGE_MIN;
verbose("ACPIpatcher: scanning EBDA [%08X-%08X] for RSDP 1.0... ", EBDA_RANGE_START, EBDA_RANGE_END);
void *acpi_addr = (void*)EBDA_RANGE_START;
EBDA_RANGE_START = /* (uint32_t)swapUint16(*(uint16_t *)BDA_EBDA_START) << 4 */ EBDA_RANGE_MIN;
verbose("ACPIpatcher: scanning EBDA [%08X-%08X] for RSDP 1.0... ", EBDA_RANGE_START, EBDA_RANGE_END);
void *acpi_addr = (void*)EBDA_RANGE_START;
for (; acpi_addr < (void*)EBDA_RANGE_END; acpi_addr++)
{
if (*(uint64_t *)acpi_addr == ACPI_SIGNATURE_UINT64_LE)
{
break;
break;
}
}
if (acpi_addr >= (void*)EBDA_RANGE_END)
{
verbose("Nothing found.\n");
verbose("ACPIpatcher: scanning BIOS area [%08X-%08X] for RSDP 1.0...\n", ACPI_RANGE_START, ACPI_RANGE_END);
acpi_addr = (void*)ACPI_RANGE_START;
verbose("Nothing found.\n");
verbose("ACPIpatcher: scanning BIOS area [%08X-%08X] for RSDP 1.0...\n", ACPI_RANGE_START, ACPI_RANGE_END);
acpi_addr = (void*)ACPI_RANGE_START;
for (; acpi_addr < (void*)ACPI_RANGE_END; acpi_addr += 16)
{
if (*(uint64_t *)acpi_addr == ACPI_SIGNATURE_UINT64_LE)
{
break;
}
}
break;
}
}
}
else
{
verbose("\n");
}
uint8_t csum = checksum8(acpi_addr, 20);
verbose("\n");
}
uint8_t csum = checksum8(acpi_addr, 20);
if (csum == 0)
{
// Only return the table if it is a true version 1.0 table (Revision 0)
// Only return the table if it is a true version 1.0 table (Revision 0)
if(((struct acpi_2_rsdp*)acpi_addr)->Revision == 0)
{
return acpi_addr;
}
}
return acpi_addr;
}
}
return NULL;
}
{
/* Before searching the BIOS space we are supposed to search the first 1K of the EBDA */
EBDA_RANGE_START = /* (uint32_t)swapUint16(*(uint16_t *)BDA_EBDA_START) << 4 */ EBDA_RANGE_MIN;
verbose("ACPIpatcher: scanning EBDA [%08X-%08X] for RSDP 2.0 or newer... ", EBDA_RANGE_START, EBDA_RANGE_END);
void *acpi_addr = (void *)EBDA_RANGE_START;
verbose("ACPIpatcher: scanning EBDA [%08X-%08X] for RSDP 2.0 or newer... ", EBDA_RANGE_START, EBDA_RANGE_END);
void *acpi_addr = (void *)EBDA_RANGE_START;
for (; acpi_addr < (void *)EBDA_RANGE_END; acpi_addr++)
{
if (*(uint64_t *)acpi_addr == ACPI_SIGNATURE_UINT64_LE)
{
break;
break;
}
}
if (acpi_addr >= (void *)EBDA_RANGE_END)
{
verbose("Nothing found.\n");
verbose("ACPIpatcher: scanning BIOS area [%08X-%08X] for RSDP 2.0 or newer...\n", ACPI_RANGE_START, ACPI_RANGE_END);
acpi_addr = (void *)ACPI_RANGE_START;
verbose("Nothing found.\n");
verbose("ACPIpatcher: scanning BIOS area [%08X-%08X] for RSDP 2.0 or newer...\n", ACPI_RANGE_START, ACPI_RANGE_END);
acpi_addr = (void *)ACPI_RANGE_START;
for (; acpi_addr <= (void *)ACPI_RANGE_END; acpi_addr += 16)
{
if(*(uint64_t *)acpi_addr == ACPI_SIGNATURE_UINT64_LE)
{
break;
}
}
break;
}
}
}
else
{
verbose("\n");
}
uint8_t csum = checksum8(acpi_addr, 20);
/* Only assume this is a 2.0 or better table if the revision is greater than 0
* NOTE: ACPI 3.0 spec only seems to say that 1.0 tables have revision 1
* and that the current revision is 2.. I am going to assume that rev > 0 is 2.0.
*/
if(csum == 0 && (((struct acpi_2_rsdp*)acpi_addr)->Revision > 0)) {
uint8_t csum2 = checksum8(acpi_addr, sizeof(struct acpi_2_rsdp));
verbose("\n");
}
uint8_t csum = checksum8(acpi_addr, 20);
/* Only assume this is a 2.0 or better table if the revision is greater than 0
* NOTE: ACPI 3.0 spec only seems to say that 1.0 tables have revision 1
* and that the current revision is 2.. I am going to assume that rev > 0 is 2.0.
*/
if(csum == 0 && (((struct acpi_2_rsdp*)acpi_addr)->Revision > 0)) {
uint8_t csum2 = checksum8(acpi_addr, sizeof(struct acpi_2_rsdp));
if(csum2 == 0)
{
return acpi_addr;
}
}
return acpi_addr;
}
}
return NULL;
}
// Try finding 'filename' in the usual places
// Start searching any potential location for ACPI Table
snprintf(dirSpec, sizeof(dirSpec), "%s", filename);
fd = open(dirSpec, 0);
snprintf(dirSpec, sizeof(dirSpec), "%s", filename);
fd = open(dirSpec, 0);
if (fd < 0)
{
snprintf(dirSpec, sizeof(dirSpec), "/Extra/%s", filename);
fd = open(dirSpec, 0);
if (fd < 0)
{
snprintf(dirSpec, sizeof(dirSpec), "/Extra/Acpi/%s", filename);
fd = open(dirSpec, 0);
snprintf(dirSpec, sizeof(dirSpec), "/Extra/Acpi/%s", filename);
fd = open(dirSpec, 0);
if (fd < 0)
{
snprintf(dirSpec, sizeof(dirSpec), "bt(0,0)/Extra/%s", filename);
fd = open(dirSpec, 0);
snprintf(dirSpec, sizeof(dirSpec), "bt(0,0)/Extra/%s", filename);
fd = open(dirSpec, 0);
if (fd < 0)
{
snprintf(dirSpec, sizeof(dirSpec), "bt(0,0)/Extra/Acpi/%s", filename);
fd = open(dirSpec, 0);
snprintf(dirSpec, sizeof(dirSpec), "bt(0,0)/Extra/Acpi/%s", filename);
fd = open(dirSpec, 0);
if (fd < 0)
{
// NOT FOUND:
dirSpec[0] = 0;
}
}
// NOT FOUND:
dirSpec[0] = 0;
}
}
}
}
}
}
close(fd);
verbose("loadACPITable: Couldn't allocate memory for table: %s.\n", dirspec);
}
}
return NULL;
}
bool fix_restart = false;
bool fix_restart_ps2 = false;
int value = 1;
static bool ver_20 = false;
static bool ver_20 = false;
// Restart Fix
if (Platform.CPU.Vendor == CPUID_VENDOR_INTEL) { // Intel=0x756E6547
fix_restart = true;
fix_restart_ps2 = false;
if ( getBoolForKey(kPS2RestartFix, &fix_restart_ps2, &bootInfo->chameleonConfig) && fix_restart_ps2)
{
if ( getBoolForKey(kPS2RestartFix, &fix_restart_ps2, &bootInfo->chameleonConfig) && fix_restart_ps2) {
fix_restart = true;
}
else
fadt_mod = (struct acpi_2_fadt *)AllocateKernelMemory(fadt->Length);
memcpy(fadt_mod, fadt, fadt->Length);
}
verbose("\tNew FACP loaded @%08X, length=%d\n", (uint32_t)fadt_mod, fadt_mod->Length);
verbose("\tNew FACP loaded @%08X, length=%d\n", (uint32_t)fadt_mod, fadt_mod->Length);
// Bungo: Determine PM Profile
verbose("\tPM Profile=0x%02X", fadt_mod->PM_Profile);
}
else
{
switch (fadt_mod->PM_Profile) { // check if PM Profile is correct (1..3)
case 1:
case 2:
case 3:
verbose(": using.\n");
break;
default:
// use SMBIOS chassisType to determine PM Profile (saved previously for us)
verbose(", expected value: 1, 2 or 3, setting to 0x%02X.\n", Platform.Type);
fadt_mod->PM_Profile = Platform.Type; // take care of modified FACP's PM Profile entry
break;
}
}
switch (fadt_mod->PM_Profile) { // check if PM Profile is correct (1..3)
case 1:
case 2:
case 3:
verbose(": using.\n");
break;
default:
// use SMBIOS chassisType to determine PM Profile (saved previously for us)
verbose(", expected value: 1, 2 or 3, setting to 0x%02X.\n", Platform.Type);
fadt_mod->PM_Profile = Platform.Type; // take care of modified FACP's PM Profile entry
break;
}
}
Platform.Type = fadt_mod->PM_Profile; // Save fixed PM Profile (system-type)
/* Bungo: Moved into fake_efi.c
// Setup system-type: We now have to write the systemm-type in ioregs: we cannot do it before in setupDeviceTree()
// Setup system-type: We now have to write the systemm-type in ioregs: we cannot do it before in setupDeviceTree()
// because we need to take care of FACP original content, if it is correct.
setupSystemType();
*/
// Patch FACP to fix restart
if (fix_restart) {
if (fix_restart_ps2) {
fadt_mod->Flags|= 0x400; // Reset register supported
fadt_mod->Reset_SpaceID= 0x01; // System I/O
fadt_mod->Reset_BitWidth= 0x08; // 1 byte
fadt_mod->Reset_BitOffset= 0x00; // Offset 0
fadt_mod->Reset_AccessWidth= 0x01; // Byte access
fadt_mod->Reset_Address= 0x64; // Address of the register
fadt_mod->Reset_Value= 0xfe; // Value to write to reset the system
if (fix_restart)
{
if (fix_restart_ps2)
{
fadt_mod->Flags|= 0x400;// Reset register supported
fadt_mod->Reset_SpaceID= 0x01;// System I/O
fadt_mod->Reset_BitWidth= 0x08;// 1 byte
fadt_mod->Reset_BitOffset= 0x00;// Offset 0
fadt_mod->Reset_AccessWidth= 0x01;// Byte access
fadt_mod->Reset_Address= 0x64;// Address of the register
fadt_mod->Reset_Value= 0xfe;// Value to write to reset the system
verbose("\tFACP PS2 Restart Fix applied!\n");
}
else
{
fadt_mod->Flags|= 0x400; // Reset register supported
fadt_mod->Reset_SpaceID= 0x01; // System I/O
fadt_mod->Reset_BitWidth= 0x08; // 1 byte
fadt_mod->Reset_BitOffset= 0x00; // Offset 0
fadt_mod->Reset_AccessWidth= 0x01; // Byte access
fadt_mod->Reset_Address= 0x0cf9; // Address of the register
fadt_mod->Reset_Value= 0x06; // Value to write to reset the system
fadt_mod->Flags|= 0x400;// Reset register supported
fadt_mod->Reset_SpaceID= 0x01;// System I/O
fadt_mod->Reset_BitWidth= 0x08;// 1 byte
fadt_mod->Reset_BitOffset= 0x00;// Offset 0
fadt_mod->Reset_AccessWidth= 0x01;// Byte access
fadt_mod->Reset_Address= 0x0cf9;// Address of the register
fadt_mod->Reset_Value= 0x06;// Value to write to reset the system
verbose("\tFACP Restart Fix applied!\n");
}
}
else
{
//verbose("\tRestart Fix: No.\n");
}
// Bungo: FACS table fix and load
verbose("\tOEM table FACS@%08X, length=%d: ", fadt_mod->FACS, ((struct acpi_2_facs *)fadt_mod->FACS)->Length);
//verbose("\tRestart Fix: No.\n");
}
// Bungo: FACS table fix and load
verbose("\tOEM table FACS@%08X, length=%d: ", fadt_mod->FACS, ((struct acpi_2_facs *)fadt_mod->FACS)->Length);
if ((fadt_mod->FACS > 0) && (fadt_mod->FACS < 0xFFFFFFFF) && (((struct acpi_2_facs *)fadt_mod->FACS)->Length >= 64))
{
verbose("using.\n");
verbose("using.\n");
}
else
{
verbose(" incorrect!\n");
}
verbose(" incorrect!\n");
}
if (ver_20 && (((uint32_t)(&(fadt_mod->X_FACS)) - (uint32_t)fadt_mod + 8) <= fadt_mod->Length))
{
verbose("\tOEM table X_FACS@%08X%08X, length=%d: ", (uint32_t)(fadt_mod->X_FACS >> 32), (uint32_t)(fadt_mod->X_FACS & 0xFFFFFFFF), ((struct acpi_2_facs *)fadt_mod->X_FACS)->Length);
verbose("\tOEM table X_FACS@%08X%08X, length=%d: ", (uint32_t)(fadt_mod->X_FACS >> 32), (uint32_t)(fadt_mod->X_FACS & 0xFFFFFFFF), ((struct acpi_2_facs *)fadt_mod->X_FACS)->Length);
if (fadt_mod->FACS != fadt_mod->X_FACS)
{
verbose("differes from FACS - fixing");
verbose("differes from FACS - fixing");
if ((fadt_mod->X_FACS > 0) && (fadt_mod->X_FACS < 0xFFFFFFFF) && (((struct acpi_2_facs *)(uint32_t)fadt_mod->X_FACS)->Length >= 64))
{
// Bungo: in my case only from X_FACS loading correct table (64 bytes) into IOReg
fadt_mod->FACS = (uint32_t)fadt_mod->X_FACS;
// Bungo: in my case only from X_FACS loading correct table (64 bytes) into IOReg
fadt_mod->FACS = (uint32_t)fadt_mod->X_FACS;
}
else
{
fadt_mod->X_FACS = (uint64_t)fadt_mod->FACS;
}
verbose(" \tUsing FACS@%08X = X_FACS@%08X\n", fadt_mod->FACS, (uint32_t)fadt_mod->X_FACS);
fadt_mod->X_FACS = (uint64_t)fadt_mod->FACS;
}
verbose(" \tUsing FACS@%08X = X_FACS@%08X\n", fadt_mod->FACS, (uint32_t)fadt_mod->X_FACS);
}
else
{
verbose("using.\n");
}
}
// Bungo: Save Hardware Signature (machine-signature)
if ((fadt_mod->FACS > 0) && (fadt_mod->FACS < 0xFFFFFFFF) && (((struct acpi_2_facs *)fadt_mod->FACS)->Length >= 64)) {
Platform.HWSignature = ((struct acpi_2_facs *)fadt_mod->FACS)->HWSignature;
verbose("\tHardware Signature=0x%08X: using.\n", Platform.HWSignature);
} else {
Platform.HWSignature = 0;
verbose("\tFixing Hardware Signature=0x%08X.\n", Platform.HWSignature);
}
verbose("\tOEM table DSDT@%08X, length=%d: %susing.\n", fadt_mod->DSDT, ((struct acpi_2_dsdt *)fadt_mod->DSDT)->Length, new_dsdt ? "not " : "");
if (ver_20 && (((uint32_t)(&(fadt_mod->X_DSDT)) - (uint32_t)fadt_mod + 8) <= fadt_mod->Length)) {
verbose("\tOEM table X_DSDT@%08X%08X, length=%d: %susing.\n", (uint32_t)(fadt_mod->X_DSDT >> 32), (uint32_t)(fadt_mod->X_DSDT & 0xFFFFFFFF), ((struct acpi_2_dsdt *)fadt_mod->X_DSDT)->Length, new_dsdt ? "not " : "");
}
verbose("using.\n");
}
}
// Bungo: Save Hardware Signature (machine-signature)
if ((fadt_mod->FACS > 0) && (fadt_mod->FACS < 0xFFFFFFFF) && (((struct acpi_2_facs *)fadt_mod->FACS)->Length >= 64))
{
Platform.HWSignature = ((struct acpi_2_facs *)fadt_mod->FACS)->HWSignature;
verbose("\tHardware Signature=0x%08X: using.\n", Platform.HWSignature);
}
else
{
Platform.HWSignature = 0;
verbose("\tFixing Hardware Signature=0x%08X.\n", Platform.HWSignature);
}
verbose("\tOEM table DSDT@%08X, length=%d: %susing.\n", fadt_mod->DSDT, ((struct acpi_2_dsdt *)fadt_mod->DSDT)->Length, new_dsdt ? "not " : "");
if (ver_20 && (((uint32_t)(&(fadt_mod->X_DSDT)) - (uint32_t)fadt_mod + 8) <= fadt_mod->Length))
{
verbose("\tOEM table X_DSDT@%08X%08X, length=%d: %susing.\n", (uint32_t)(fadt_mod->X_DSDT >> 32), (uint32_t)(fadt_mod->X_DSDT & 0xFFFFFFFF), ((struct acpi_2_dsdt *)fadt_mod->X_DSDT)->Length, new_dsdt ? "not " : "");
}
// Patch DSDT address if we have loaded DSDT.aml
if (new_dsdt) {
if (new_dsdt)
{
fadt_mod->DSDT = (uint32_t)new_dsdt;
verbose("\tFACP uses custom DSDT@%08X", fadt_mod->DSDT);
if (ver_20 && (((uint32_t)(&(fadt_mod->X_DSDT)) - (uint32_t)fadt_mod + 8) <= fadt_mod->Length)) {
if (ver_20 && (((uint32_t)(&(fadt_mod->X_DSDT)) - (uint32_t)fadt_mod + 8) <= fadt_mod->Length))
{
fadt_mod->X_DSDT = (uint64_t)new_dsdt;
verbose(" / X_DSDT@%08X%08X", (uint32_t)(fadt_mod->X_DSDT >> 32), (uint32_t)(fadt_mod->X_DSDT & 0xFFFFFFFF));
verbose(" / X_DSDT@%08X%08X", (uint32_t)(fadt_mod->X_DSDT >> 32), (uint32_t)(fadt_mod->X_DSDT & 0xFFFFFFFF));
}
verbose(", length=%d\n", ((struct acpi_2_dsdt *)fadt_mod->DSDT)->Length);
verbose(", length=%d\n", ((struct acpi_2_dsdt *)fadt_mod->DSDT)->Length);
}
// Correct the checksum
fadt_mod->Checksum=0;
fadt_mod->Checksum=256-checksum8(fadt_mod, fadt_mod->Length);
ver_20 = TRUE;
ver_20 = TRUE;
return fadt_mod;
}
// Bung: Unused
const char *filename;
char dirSpec[128];
int len = 0;
// always reset cpu count to 0 when injecting new acpi
acpi_cpu_count = 0;
verbose("\nACPIpatcher: Start patching...\n");
if (new_dsdt != NULL) {
verbose("ACPIpatcher: custom table DSDT already loaded @%08X, length=%d: using.\n", new_dsdt, ((struct acpi_2_header *)new_dsdt)->Length);
} else {
// Try using the file specified with the DSDT option
if (getValueForKey(kDSDT, &filename, &len, &bootInfo->chameleonConfig) && len) {
snprintf(dirSpec, sizeof(dirSpec), filename);
} else {
sprintf(dirSpec, "DSDT.aml");
}
verbose("\nACPIpatcher: Start patching...\n");
if (new_dsdt != NULL)
{
verbose("ACPIpatcher: custom table DSDT already loaded @%08X, length=%d: using.\n", new_dsdt, ((struct acpi_2_header *)new_dsdt)->Length);
}
else
{
// Try using the file specified with the DSDT option
if (getValueForKey(kDSDT, &filename, &len, &bootInfo->chameleonConfig) && len)
{
snprintf(dirSpec, sizeof(dirSpec), filename);
}
else
{
sprintf(dirSpec, "DSDT.aml");
}
verbose("ACPIpatcher: attempting to load custom table DSDT...\n", dirSpec);
if ((new_dsdt = loadACPITable(dirSpec))) {
verbose("ACPIpatcher: custom table DSDT loaded @%08X, length=%d.\n", new_dsdt, ((struct acpi_2_header *)new_dsdt)->Length);
} else {
//verbose("ACPIpatcher: custom DSDT not found!.\n");
}
}
verbose("ACPIpatcher: attempting to load custom table DSDT...\n", dirSpec);
if ((new_dsdt = loadACPITable(dirSpec)))
{
verbose("ACPIpatcher: custom table DSDT loaded @%08X, length=%d.\n", new_dsdt, ((struct acpi_2_header *)new_dsdt)->Length);
}
else
{
//verbose("ACPIpatcher: custom DSDT not found!.\n");
}
}
/* Try using the file specified with the DSDT option
if (getValueForKey(kDSDT, &filename, &len, &bootInfo->chameleonConfig)) {
if (getValueForKey(kDSDT, &filename, &len, &bootInfo->chameleonConfig))
{
snprintf(dirSpec, sizeof(dirSpec), filename);
} else {
}
else
{
sprintf(dirSpec, "DSDT.aml");
//DBG("dirSpec, DSDT.aml");
}
// Load replacement DSDT
new_dsdt = loadACPITable(dirSpec);
*/
// Load ECDT table
if (new_ecdt != NULL) {
verbose("ACPIpatcher: custom table ECDT already loaded @%08X, length=%d: using.\n", new_ecdt, ((struct acpi_2_header *)new_ecdt)->Length);
} else {
sprintf(dirSpec, "ECDT.aml");
filename = "ECDT.aml";
verbose("ACPIpatcher: attempting to load custom table ECDT...\n");
if ((new_ecdt = loadACPITable(filename))) {
verbose("ACPIpatcher: custom table ECDT loaded @%08X, length=%d.\n", new_ecdt, ((struct acpi_2_header *)new_ecdt)->Length);
} else {
//verbose("ACPIpatcher: custom ECDT not found!.\n");
}
}
// Mozodojo: Load additional SSDTs
// Load ECDT table
if (new_ecdt != NULL)
{
verbose("ACPIpatcher: custom table ECDT already loaded @%08X, length=%d: using.\n", new_ecdt, ((struct acpi_2_header *)new_ecdt)->Length);
}
else
{
sprintf(dirSpec, "ECDT.aml");
filename = "ECDT.aml";
verbose("ACPIpatcher: attempting to load custom table ECDT...\n");
if ((new_ecdt = loadACPITable(filename)))
{
verbose("ACPIpatcher: custom table ECDT loaded @%08X, length=%d.\n", new_ecdt, ((struct acpi_2_header *)new_ecdt)->Length);
}
else
{
//verbose("ACPIpatcher: custom ECDT not found!.\n");
}
}
// Mozodojo: Load additional SSDTs
struct acpi_2_ssdt *new_ssdt[32]; // 26 custom + 4 subssdt + 2 for pss & cst
int ssdtotal_number = 0;
{
int i;
for (i = 0; i < 26; i++) {
for (i = 0; i < 26; i++)
{
//char filename[512];
sprintf(dirSpec, (i > 0)? "SSDT-%d.aml":"SSDT.aml", i);
if ((new_ssdt[ssdtotal_number] = loadACPITable(dirSpec))) {
verbose("ACPIpatcher: custom table %s loaded @%08X, length=%d\n", dirSpec, new_ssdt[ssdtotal_number], new_ssdt[ssdtotal_number]->Length);
ssdtotal_number++;
} else {
//verbose("ACPIpatcher: custom table '%s' not found.\n", filename);
// Bungo: load up to 26 custom tables enabled now
if ((new_ssdt[ssdtotal_number] = loadACPITable(dirSpec)))
{
verbose("ACPIpatcher: custom table %s loaded @%08X, length=%d\n", dirSpec, new_ssdt[ssdtotal_number], new_ssdt[ssdtotal_number]->Length);
ssdtotal_number++;
}
else
{
//verbose("ACPIpatcher: custom table '%s' not found.\n", filename);
// Bungo: load up to 26 custom tables enabled now
//break;
}
}
}
// Mozodojo: going to patch FACP and load SSDTs even if DSDT.aml is not present
/*if (!new_dsdt)
{
return setupAcpiNoMod();
}*/
{
return setupAcpiNoMod();
}*/
// SSDT options
bool drop_ssdt = false, generate_pstates = false, generate_cstates = false;
getBoolForKey(kDropSSDT, &drop_ssdt, &bootInfo->chameleonConfig);
getBoolForKey(kGeneratePStates, &generate_pstates, &bootInfo->chameleonConfig);
getBoolForKey(kGenerateCStates, &generate_cstates, &bootInfo->chameleonConfig);
verbose("ACPIpatcher: drop SSDT tables: %s.\n", drop_ssdt ? "Yes" : "No");
verbose("ACPIpatcher: drop SSDT tables: %s.\n", drop_ssdt ? "Yes" : "No");
verbose("ACPIpatcher: generate P-States: %s.\n", generate_pstates ? "Yes" : "No");
verbose("ACPIpatcher: generate C-States: %s.\n", generate_cstates ? "Yes" : "No");
bool getSubSSDT = !generate_pstates && !generate_cstates;
bool getSubSSDT = !generate_pstates && !generate_cstates;
// Do the same procedure for both versions of ACPI
for (version = 0; version < 2; version++)
{
struct acpi_2_rsdp *rsdp, *rsdp_mod;
struct acpi_2_rsdt *rsdt, *rsdt_mod;
struct acpi_2_xsdt *xsdt, *xsdt_mod;
struct acpi_2_fadt *fadt_mod;
uint32_t *rsdt_entries;
uint64_t *xsdt_entries;
struct acpi_2_xsdt *xsdt, *xsdt_mod;
struct acpi_2_fadt *fadt_mod;
uint32_t *rsdt_entries;
uint64_t *xsdt_entries;
// Find original rsdp
rsdp = (struct acpi_2_rsdp *)(version ? getAddressOfAcpi20Table() : getAddressOfAcpiTable());
if (!rsdp) {
/*
if (version) {
if (!rsdp)
{
/*
if (version)
{
addConfigurationTable(&gEfiAcpi20TableGuid, NULL, "ACPI_20");
} else {
}
else
{
addConfigurationTable(&gEfiAcpiTableGuid, NULL, "ACPI");
}
*/
verbose("ACPIpatcher: ACPI version %d.0 not found. Not patching.\n", version + 1);
*/
verbose("ACPIpatcher: ACPI version %d.0 not found. Not patching.\n", version + 1);
continue;
}
int rsdplength = version ? rsdp->Length : 20;
int rsdplength = version ? rsdp->Length : 20;
int l = version ? 20 : 0;
verbose("ACPIpatcher: OEM table RSDP@%08X, length=%d. ACPI version %d.0: patching.\n", rsdp, rsdplength, version + 1);
rsdt = (struct acpi_2_rsdt *)rsdp->RsdtAddress;
verbose("ACPIpatcher: OEM table RSDT@%08X, length=%d: ", rsdp->RsdtAddress, rsdt->Length);
if ((rsdp->RsdtAddress > 0) && (rsdp->RsdtAddress < 0xFFFFFFFF) && (rsdt->Length < 0x10000)) {
verbose("using.\n");
if ((rsdp->RsdtAddress > 0) && (rsdp->RsdtAddress < 0xFFFFFFFF) && (rsdt->Length < 0x10000))
{
verbose("using.\n");
int rsdt_entries_num;
int dropoffset = 0, i, j;
rsdp_mod->RsdtAddress = (uint32_t)rsdt_mod;
rsdt_entries_num = (rsdt_mod->Length - sizeof(struct acpi_2_rsdt)) / 4;
rsdt_entries = (uint32_t *)(rsdt_mod + 1);
for (i = 0; i < rsdt_entries_num; i++) {
struct acpi_2_header *oemTable = (struct acpi_2_header *)rsdt_entries[i];
verbose("ACPIpatcher: OEM table %c%c%c%c@%08X, length=%d: ", oemTable->Signature[0], oemTable->Signature[1], oemTable->Signature[2], oemTable->Signature[3], oemTable, oemTable->Length);
if (!(rsdt_entries[i] > 0) || !(rsdt_entries[i] < 0xFFFFFFFF)) {
verbose("incorrect! Dropping.\n");
dropoffset++;
continue;
for (i = 0; i < rsdt_entries_num; i++)
{
struct acpi_2_header *oemTable = (struct acpi_2_header *)rsdt_entries[i];
verbose("ACPIpatcher: OEM table %c%c%c%c@%08X, length=%d: ", oemTable->Signature[0], oemTable->Signature[1], oemTable->Signature[2], oemTable->Signature[3], oemTable, oemTable->Length);
if (!(rsdt_entries[i] > 0) || !(rsdt_entries[i] < 0xFFFFFFFF))
{
verbose("incorrect! Dropping.\n");
dropoffset++;
continue;
}
if (tableSign(oemTable, "SSDT")) {
if (drop_ssdt) {
verbose("dropping.\n");
dropoffset++;
} else {
verbose("using.\n");
rsdt_entries[i-dropoffset] = rsdt_entries[i];
// get rest of ssdt tables from inside ssdt_pmref
if (getSubSSDT) { // prevent from extracting originals if user choosed generatind PSS and/or CSS tables
struct ssdt_pmref *subSSDT = (struct ssdt_pmref *)(rsdt_entries[i] + sizeof(struct acpi_2_header) + 15);
uint8_t tabNum = *((uint8_t *)subSSDT - 2) / 3; // e.g Name (SSDT, Package (0x0C) -> 0x0C / 3 = number of sub SSDTs
for (j = 0; (j < tabNum) && (ssdtotal_number < 30); j++) {
verbose("ACPIpatcher: OEM table SSDT_%s@%08X, length=%d: ", ((struct acpi_2_ssdt *)subSSDT[j].addr)->OEMTableId, subSSDT[j].addr, ((struct acpi_2_ssdt *)subSSDT[j].addr)->Length);
if (!(subSSDT[j].addr > 0) || !(subSSDT[j].addr < 0xFFFFFFFF)) {
verbose("incorrect! Dropping.\n");
continue;
}
verbose("using.\n");
new_ssdt[ssdtotal_number] = (struct acpi_2_ssdt *)subSSDT[j].addr;
ssdtotal_number++;
}
}
}
continue;
if (tableSign(oemTable, "SSDT"))
{
if (drop_ssdt)
{
verbose("dropping.\n");
dropoffset++;
}
else
{
verbose("using.\n");
rsdt_entries[i-dropoffset] = rsdt_entries[i];
// get rest of ssdt tables from inside ssdt_pmref
if (getSubSSDT) { // prevent from extracting originals if user choosed generatind PSS and/or CSS tables
struct ssdt_pmref *subSSDT = (struct ssdt_pmref *)(rsdt_entries[i] + sizeof(struct acpi_2_header) + 15);
uint8_t tabNum = *((uint8_t *)subSSDT - 2) / 3; // e.g Name (SSDT, Package (0x0C) -> 0x0C / 3 = number of sub SSDTs
for (j = 0; (j < tabNum) && (ssdtotal_number < 30); j++)
{
verbose("ACPIpatcher: OEM table SSDT_%s@%08X, length=%d: ", ((struct acpi_2_ssdt *)subSSDT[j].addr)->OEMTableId, subSSDT[j].addr, ((struct acpi_2_ssdt *)subSSDT[j].addr)->Length);
if (!(subSSDT[j].addr > 0) || !(subSSDT[j].addr < 0xFFFFFFFF))
{
verbose("incorrect! Dropping.\n");
continue;
}
verbose("using.\n");
new_ssdt[ssdtotal_number] = (struct acpi_2_ssdt *)subSSDT[j].addr;
ssdtotal_number++;
}
}
}
continue;
}
/* Bungo: According to ACPI Spec. no DSDT in RSDT, so what this for?
if (tableSign(oemTable, "DSDT")) {
if (new_dsdt) {
/* Bungo: According to ACPI Spec. no DSDT in RSDT, so what this for?
if (tableSign(oemTable, "DSDT"))
{
if (new_dsdt)
{
rsdt_entries[i-dropoffset] = (uint32_t)new_dsdt;
verbose("custom table added.\n");
}
continue;
}
So, suggest to drop, it should be in FACP */
if (tableSign(oemTable, "DSDT")) {
verbose("dropping.\n");
dropoffset++;
continue;
So, suggest to drop, it should be in FACP */
if (tableSign(oemTable, "DSDT"))
{
verbose("dropping.\n");
dropoffset++;
continue;
}
if (tableSign(oemTable, "ECDT") && new_ecdt) {
verbose("dropping.\n");
dropoffset++;
continue;
if (tableSign(oemTable, "ECDT") && new_ecdt)
{
verbose("dropping.\n");
dropoffset++;
continue;
}
if (tableSign(oemTable, "FACP")) {
if (oemTable->Length > 0x10000) {
if (tableSign(oemTable, "FACP"))
{
if (oemTable->Length > 0x10000)
{
verbose("incorrect. Not modifying.\n");
continue;
}
verbose("patching.\n");
fadt_mod = patch_fadt((struct acpi_2_fadt *)oemTable, new_dsdt);
rsdt_entries[i-dropoffset] = (uint32_t)fadt_mod;
// Generate _CST SSDT
if (generate_cstates && (new_ssdt[ssdtotal_number] = generate_cst_ssdt(fadt_mod))) {
if (generate_cstates && (new_ssdt[ssdtotal_number] = generate_cst_ssdt(fadt_mod)))
{
verbose("\tC-States generated.\n");
generate_cstates = false; // Generate SSDT only once!
ssdtotal_number++;
}
// Generating _PSS SSDT
if (generate_pstates && (new_ssdt[ssdtotal_number] = generate_pss_ssdt((void*)fadt_mod->DSDT))) {
if (generate_pstates && (new_ssdt[ssdtotal_number] = generate_pss_ssdt((void*)fadt_mod->DSDT)))
{
verbose("\tP-States generated.\n");
generate_pstates = false; // Generate SSDT only once!
ssdtotal_number++;
}
continue;
}
verbose("using.\n");
rsdt_entries[i-dropoffset] = rsdt_entries[i];
verbose("using.\n");
rsdt_entries[i-dropoffset] = rsdt_entries[i];
}
// For moded rsdt calculate new lenght
if (new_ecdt)
rsdt_mod->Length += 4*ssdtotal_number - 4*dropoffset + 4; // custom - dropped + ECDT
// For moded rsdt calculate new lenght
if (new_ecdt)
{
rsdt_mod->Length += 4*ssdtotal_number - 4*dropoffset + 4; // custom - dropped + ECDT
}
else
rsdt_mod->Length += 4*ssdtotal_number - 4*dropoffset;
// Allocate moded rsdt in Kernel memory area
{
rsdt_mod->Length += 4*ssdtotal_number - 4*dropoffset;
}
// Allocate moded rsdt in Kernel memory area
struct acpi_2_rsdt *rsdt_copy = (struct acpi_2_rsdt *)AllocateKernelMemory(rsdt_mod->Length);
memcpy(rsdt_copy, rsdt_mod, rsdt_mod->Length); // should be rsdt_mod->Length - 4*ssdtotal_number - 4 but don't care
memcpy(rsdt_copy, rsdt_mod, rsdt_mod->Length); // should be rsdt_mod->Length - 4*ssdtotal_number - 4 but don't care
free(rsdt_mod);
rsdt_mod = rsdt_copy;
rsdp_mod->RsdtAddress = (uint32_t)rsdt_mod;
rsdt_entries = (uint32_t *)(rsdt_mod + 1);
// Mozodojo: Insert additional SSDTs into RSDT
for (j = 0; j < ssdtotal_number; j++) {
rsdt_entries[i-dropoffset+j] = (uint32_t)new_ssdt[j];
}
verbose("ACPIpatcher: added %d custom SSDT table%s into RSDT.\n", ssdtotal_number, (ssdtotal_number != 1) ? "s" : "");
if (new_ecdt) {
for (j = 0; j < ssdtotal_number; j++)
{
rsdt_entries[i-dropoffset+j] = (uint32_t)new_ssdt[j];
}
verbose("ACPIpatcher: added %d custom SSDT table%s into RSDT.\n", ssdtotal_number, (ssdtotal_number != 1) ? "s" : "");
if (new_ecdt)
{
rsdt_entries[i - dropoffset + j] = (uint32_t)new_ecdt;
verbose("ACPIpatcher: added custom table %s @%08X into RSDT.\n", "ECDT", new_ecdt);
}
rsdt_mod->Checksum=0;
rsdt_mod->Checksum=256-checksum8(rsdt_mod,rsdt_mod->Length);
verbose("new=%d.\n", rsdt_mod->Checksum);
} else {
}
else
{
rsdp_mod->RsdtAddress = 0;
verbose("not found or incorrect!\n");
}
verbose("\n");
if (gVerboseMode) pause("");
if (version) {
#if DEBUG_ACPI
pause("\n[DEBUG_ACPI] ");
#endif
if (version)
{
// FIXME: handle 64-bit address correctly
xsdt = (struct acpi_2_xsdt *)(uint32_t)rsdp->XsdtAddress;
verbose("ACPIpatcher: OEM table XSDT@%08X%08X, length=%d: ", (uint32_t)(rsdp->XsdtAddress >> 32), (uint32_t)(rsdp->XsdtAddress & 0xFFFFFFFF), xsdt->Length);
verbose("ACPIpatcher: OEM table XSDT@%08X%08X, length=%d: ", (uint32_t)(rsdp->XsdtAddress >> 32), (uint32_t)(rsdp->XsdtAddress & 0xFFFFFFFF), xsdt->Length);
if ((rsdp->XsdtAddress > 0) && (rsdp->XsdtAddress < 0xFFFFFFFF) && (xsdt->Length < 0x10000)) {
verbose("using.\n");
if ((rsdp->XsdtAddress > 0) && (rsdp->XsdtAddress < 0xFFFFFFFF) && (xsdt->Length < 0x10000))
{
verbose("using.\n");
int xsdt_entries_num, i, j;
int dropoffset = 0;
// mozo: using malloc cos I didn't found how to free already allocated kernel memory
xsdt_mod = (struct acpi_2_xsdt *)malloc(xsdt->Length);
memcpy(xsdt_mod, xsdt, xsdt->Length);
rsdp_mod->XsdtAddress = (uint64_t)xsdt_mod;
rsdp_mod->XsdtAddress = (uint64_t)xsdt_mod;
xsdt_entries_num = (xsdt_mod->Length - sizeof(struct acpi_2_xsdt)) / 8;
xsdt_entries = (uint64_t *)(xsdt_mod + 1);
for (i = 0; i < xsdt_entries_num; i++) {
struct acpi_2_header *oemTable = (struct acpi_2_header *)(uint32_t)xsdt_entries[i];
verbose("ACPIpatcher: OEM table %c%c%c%c@%08X%08X, length=%d", oemTable->Signature[0], oemTable->Signature[1], oemTable->Signature[2], oemTable->Signature[3], (uint32_t)(xsdt_entries[i] >> 32), (uint32_t)(xsdt_entries[i] & 0xFFFFFFFF), oemTable->Length);
if (!(xsdt_entries[i] > 0) || !(xsdt_entries[i] < 0xFFFFFFFF)) {
verbose(": incorrect! Dropping.\n");
dropoffset++;
for (i = 0; i < xsdt_entries_num; i++)
{
struct acpi_2_header *oemTable = (struct acpi_2_header *)(uint32_t)xsdt_entries[i];
verbose("ACPIpatcher: OEM table %c%c%c%c@%08X%08X, length=%d", oemTable->Signature[0], oemTable->Signature[1], oemTable->Signature[2], oemTable->Signature[3], (uint32_t)(xsdt_entries[i] >> 32), (uint32_t)(xsdt_entries[i] & 0xFFFFFFFF), oemTable->Length);
if (!(xsdt_entries[i] > 0) || !(xsdt_entries[i] < 0xFFFFFFFF))
{
verbose(": incorrect! Dropping.\n");
dropoffset++;
continue;
}
bool inRSDT = (uint32_t)oemTable == ((uint32_t *)(rsdt + 1))[i]; // check if already in RSDT
if (inRSDT) {
verbose(" (already in RSDT)");
}
if (tableSign(oemTable, "SSDT") && !inRSDT) {
if (drop_ssdt) {
verbose(": dropping.\n");
dropoffset++;
} else {
verbose(": using.\n");
xsdt_entries[i - dropoffset] = xsdt_entries[i];
// Get rest of ssdts from ssdt_pmref
if (getSubSSDT) {
struct ssdt_pmref *subSSDT = (struct ssdt_pmref *)((uint32_t)xsdt_entries[i - dropoffset] + sizeof(struct acpi_2_header) + 15);
uint8_t tabNum = *((uint8_t *)subSSDT - 2) / 3; // e.g: Name (SSDT, Package (0x0C) -> 0x0C / 3 = 4 is number of sub SSDTs
for (j = 0; (j < tabNum) && (ssdtotal_number < 30); j++) {
verbose("ACPIpatcher: OEM table SSDT_%s@%08X, length=%d", ((struct acpi_2_ssdt *)subSSDT[j].addr)->OEMTableId, subSSDT[j].addr, ((struct acpi_2_ssdt *)subSSDT[j].addr)->Length);
if (!(subSSDT[j].addr > 0) || !(subSSDT[j].addr < 0xFFFFFFFF)) {
verbose(": incorrect! Dropping.\n");
continue;
}
new_ssdt[ssdtotal_number] = (struct acpi_2_ssdt *)subSSDT[j].addr;
ssdtotal_number++;
verbose(": using.\n");
}
}
}
continue;
}
bool inRSDT = (uint32_t)oemTable == ((uint32_t *)(rsdt + 1))[i]; // check if already in RSDT
if (inRSDT)
{
verbose(" (already in RSDT)");
}
// Bungo: According to ACPI Spec. no DSDT in RSDT, so what this for?
/*
if (tableSign(oemTable, "DSDT")) {
if (new_dsdt) {
xsdt_entries[i-dropoffset] = (uint64_t)new_dsdt;
verbose("custom table added.\n");
}
continue;
}
*/
// Suggest to drop, it should be in FACP
if (tableSign(oemTable, "DSDT") && !inRSDT) {
verbose(": dropping.\n");
dropoffset++;
continue;
}
if (tableSign(oemTable, "FACP") && !inRSDT) {
if (oemTable->Length > 0x10000) {
goto drop_xsdt;
if (tableSign(oemTable, "SSDT") && !inRSDT)
{
if (drop_ssdt)
{
verbose(": dropping.\n");
dropoffset++;
}
else
{
verbose(": using.\n");
xsdt_entries[i - dropoffset] = xsdt_entries[i];
// Get rest of ssdts from ssdt_pmref
if (getSubSSDT)
{
struct ssdt_pmref *subSSDT = (struct ssdt_pmref *)((uint32_t)xsdt_entries[i - dropoffset] + sizeof(struct acpi_2_header) + 15);
uint8_t tabNum = *((uint8_t *)subSSDT - 2) / 3; // e.g: Name (SSDT, Package (0x0C) -> 0x0C / 3 = 4 is number of sub SSDTs
for (j = 0; (j < tabNum) && (ssdtotal_number < 30); j++)
{
verbose("ACPIpatcher: OEM table SSDT_%s@%08X, length=%d", ((struct acpi_2_ssdt *)subSSDT[j].addr)->OEMTableId, subSSDT[j].addr, ((struct acpi_2_ssdt *)subSSDT[j].addr)->Length);
if (!(subSSDT[j].addr > 0) || !(subSSDT[j].addr < 0xFFFFFFFF))
{
verbose(": incorrect! Dropping.\n");
continue;
}
new_ssdt[ssdtotal_number] = (struct acpi_2_ssdt *)subSSDT[j].addr;
ssdtotal_number++;
verbose(": using.\n");
}
}
}
continue;
}
verbose(": patching.\n");
fadt_mod = patch_fadt((struct acpi_2_fadt *)oemTable, new_dsdt);
xsdt_entries[i - dropoffset] = (uint64_t)fadt_mod;
// Bungo: According to ACPI Spec. no DSDT in RSDT, so what this for?
/*
if (tableSign(oemTable, "DSDT"))
{
if (new_dsdt)
{
xsdt_entries[i-dropoffset] = (uint64_t)new_dsdt;
verbose("custom table added.\n");
}
continue;
}
*/
// Suggest to drop, it should be in FACP
if (tableSign(oemTable, "DSDT") && !inRSDT)
{
verbose(": dropping.\n");
dropoffset++;
continue;
}
// Generate _CST SSDT
if (generate_cstates && (new_ssdt[ssdtotal_number] = generate_cst_ssdt(fadt_mod))) {
verbose("\tC-States generated\n");
generate_cstates = false; // Generate SSDT only once!
ssdtotal_number++;
}
if (tableSign(oemTable, "FACP") && !inRSDT)
{
if (oemTable->Length > 0x10000)
{
goto drop_xsdt;
}
// Generating _PSS SSDT
if (generate_pstates && (new_ssdt[ssdtotal_number] = generate_pss_ssdt((void *)fadt_mod->DSDT))) {
verbose("\tP-States generated\n");
generate_pstates = false; // Generate SSDT only once!
ssdtotal_number++;
}
verbose(": patching.\n");
fadt_mod = patch_fadt((struct acpi_2_fadt *)oemTable, new_dsdt);
xsdt_entries[i - dropoffset] = (uint64_t)fadt_mod;
// Generate _CST SSDT
if (generate_cstates && (new_ssdt[ssdtotal_number] = generate_cst_ssdt(fadt_mod)))
{
verbose("\tC-States generated\n");
generate_cstates = false; // Generate SSDT only once!
ssdtotal_number++;
}
// Generating _PSS SSDT
if (generate_pstates && (new_ssdt[ssdtotal_number] = generate_pss_ssdt((void *)fadt_mod->DSDT)))
{
verbose("\tP-States generated\n");
generate_pstates = false; // Generate SSDT only once!
ssdtotal_number++;
}
continue;
}
verbose(": using.\n");
xsdt_entries[i - dropoffset] = xsdt_entries[i];
verbose(": using.\n");
xsdt_entries[i - dropoffset] = xsdt_entries[i];
}
// For moded xsdt calculate new lenght
if (new_ecdt)
xsdt_mod->Length += 8*ssdtotal_number - 8*dropoffset + 8; // custom - dropped + ECDT
else
xsdt_mod->Length += 8*ssdtotal_number - 8*dropoffset;
// Allocate xsdt in Kernel memory area
// For moded xsdt calculate new lenght
if (new_ecdt)
{
xsdt_mod->Length += 8*ssdtotal_number - 8*dropoffset + 8; // custom - dropped + ECDT
}
else
{
xsdt_mod->Length += 8*ssdtotal_number - 8*dropoffset;
}
// Allocate xsdt in Kernel memory area
struct acpi_2_xsdt *xsdt_copy = (struct acpi_2_xsdt *)AllocateKernelMemory(xsdt_mod->Length);
memcpy(xsdt_copy, xsdt_mod, xsdt_mod->Length); // should be: rsdt_mod->Length - 8*ssdtotal_number - 8 but don't care
free(xsdt_mod);
xsdt_mod = xsdt_copy;
xsdt_mod = xsdt_copy;
rsdp_mod->XsdtAddress = (uint64_t)xsdt_mod;
xsdt_entries_num = (xsdt_mod->Length - sizeof(struct acpi_2_xsdt)) / 8;
xsdt_entries = (uint64_t *)(xsdt_mod + 1);
// Mozodojo: Insert additional SSDTs into XSDT
for (j = 0; j < ssdtotal_number; j++) {
xsdt_entries[i-dropoffset+j] = (uint64_t)new_ssdt[j];
}
verbose("ACPIpatcher: added %d custom SSDT table%s into XSDT.\n", ssdtotal_number, (ssdtotal_number != 1) ? "s" : "");
for (j = 0; j < ssdtotal_number; j++)
{
xsdt_entries[i-dropoffset+j] = (uint64_t)new_ssdt[j];
}
verbose("ACPIpatcher: added %d custom SSDT table%s into XSDT.\n", ssdtotal_number, (ssdtotal_number != 1) ? "s" : "");
if (new_ecdt) {
if (new_ecdt)