Run dos2unix on all files:
find . -type f| grep -v svn | xargs dos2unix Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4250 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
committed by
Stefan Reinauer
parent
a0dbddff17
commit
88e71e8859
@ -1,234 +1,234 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="256px" height="640px" viewBox="0 0 256 640" enable-background="new 0 0 256 640" xml:space="preserve">
|
width="256px" height="640px" viewBox="0 0 256 640" enable-background="new 0 0 256 640" xml:space="preserve">
|
||||||
<font horiz-adv-x="1000">
|
<font horiz-adv-x="1000">
|
||||||
<font-face font-family="MyriadPro-Regular" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
|
<font-face font-family="MyriadPro-Regular" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
|
||||||
<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
|
<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
|
||||||
<glyph unicode="A" horiz-adv-x="612" d="M424,212l72,-212l93,0l-230,674l-104,0l-230,-674l90,0l70,212M203,280l66,195C283,516 293,558 303,597l2,0C315,558 325,518 340,474l67,-194z"/>
|
<glyph unicode="A" horiz-adv-x="612" d="M424,212l72,-212l93,0l-230,674l-104,0l-230,-674l90,0l70,212M203,280l66,195C283,516 293,558 303,597l2,0C315,558 325,518 340,474l67,-194z"/>
|
||||||
<glyph unicode="B" horiz-adv-x="542" d="M76,2C105,-2 151,-6 211,-6C321,-6 397,14 443,57C478,89 501,134 501,192C501,292 426,345 362,360l0,3C432,388 476,445 476,511C476,564 454,604 419,630C378,664 322,679 235,679C175,679 114,673 76,664M163,606C177,609 200,612 240,612C328,612 387,580 387,502C387,437 333,388 242,388l-79,0M163,323l72,0C330,323 409,284 409,193C409,95 326,62 236,62C205,62 181,63 163,66z"/>
|
<glyph unicode="B" horiz-adv-x="542" d="M76,2C105,-2 151,-6 211,-6C321,-6 397,14 443,57C478,89 501,134 501,192C501,292 426,345 362,360l0,3C432,388 476,445 476,511C476,564 454,604 419,630C378,664 322,679 235,679C175,679 114,673 76,664M163,606C177,609 200,612 240,612C328,612 387,580 387,502C387,437 333,388 242,388l-79,0M163,323l72,0C330,323 409,284 409,193C409,95 326,62 236,62C205,62 181,63 163,66z"/>
|
||||||
<glyph unicode="C" horiz-adv-x="580" d="M529,91C494,74 440,63 386,63C223,63 128,168 128,334C128,511 233,612 391,612C447,612 494,600 526,584l22,71C525,667 471,685 388,685C179,685 36,543 36,331C36,109 178,-11 368,-11C450,-11 515,5 546,21z"/>
|
<glyph unicode="C" horiz-adv-x="580" d="M529,91C494,74 440,63 386,63C223,63 128,168 128,334C128,511 233,612 391,612C447,612 494,600 526,584l22,71C525,667 471,685 388,685C179,685 36,543 36,331C36,109 178,-11 368,-11C450,-11 515,5 546,21z"/>
|
||||||
<glyph unicode="D" horiz-adv-x="666" d="M76,2C120,-3 171,-6 234,-6C365,-6 469,28 533,91C595,153 630,243 630,353C630,462 595,540 534,595C475,649 386,679 261,679C192,679 129,673 76,664M163,601C186,606 220,610 265,610C449,610 539,509 538,350C538,168 438,64 251,64C217,64 185,65 163,68z"/>
|
<glyph unicode="D" horiz-adv-x="666" d="M76,2C120,-3 171,-6 234,-6C365,-6 469,28 533,91C595,153 630,243 630,353C630,462 595,540 534,595C475,649 386,679 261,679C192,679 129,673 76,664M163,601C186,606 220,610 265,610C449,610 539,509 538,350C538,168 438,64 251,64C217,64 185,65 163,68z"/>
|
||||||
<glyph unicode="E" horiz-adv-x="492" d="M424,388l-261,0l0,213l277,0l0,73l-365,0l0,-674l380,0l0,73l-292,0l0,243l261,0z"/>
|
<glyph unicode="E" horiz-adv-x="492" d="M424,388l-261,0l0,213l277,0l0,73l-365,0l0,-674l380,0l0,73l-292,0l0,243l261,0z"/>
|
||||||
<glyph unicode="F" horiz-adv-x="487" d="M75,0l88,0l0,305l254,0l0,72l-254,0l0,224l275,0l0,73l-363,0z"/>
|
<glyph unicode="F" horiz-adv-x="487" d="M75,0l88,0l0,305l254,0l0,72l-254,0l0,224l275,0l0,73l-363,0z"/>
|
||||||
<glyph unicode="H" horiz-adv-x="652" d="M75,674l0,-674l88,0l0,316l326,0l0,-316l88,0l0,674l-88,0l0,-282l-326,0l0,282z"/>
|
<glyph unicode="H" horiz-adv-x="652" d="M75,674l0,-674l88,0l0,316l326,0l0,-316l88,0l0,674l-88,0l0,-282l-326,0l0,282z"/>
|
||||||
<glyph unicode="I" horiz-adv-x="239" d="M75,674l0,-674l88,0l0,674z"/>
|
<glyph unicode="I" horiz-adv-x="239" d="M75,674l0,-674l88,0l0,674z"/>
|
||||||
<glyph unicode="L" horiz-adv-x="472" d="M75,0l376,0l0,73l-288,0l0,601l-88,0z"/>
|
<glyph unicode="L" horiz-adv-x="472" d="M75,0l376,0l0,73l-288,0l0,601l-88,0z"/>
|
||||||
<glyph unicode="M" horiz-adv-x="804" d="M660,0l86,0l-42,674l-111,0l-120,-326C443,263 419,189 401,121l-2,0C381,191 359,265 331,348l-115,326l-111,0l-47,-674l83,0l18,289C165,391 170,503 172,587l2,0C193,507 219,421 251,325l110,-321l66,0l119,327C580,424 607,509 631,587l2,0C633,504 639,390 644,296z"/>
|
<glyph unicode="M" horiz-adv-x="804" d="M660,0l86,0l-42,674l-111,0l-120,-326C443,263 419,189 401,121l-2,0C381,191 359,265 331,348l-115,326l-111,0l-47,-674l83,0l18,289C165,391 170,503 172,587l2,0C193,507 219,421 251,325l110,-321l66,0l119,327C580,424 607,509 631,587l2,0C633,504 639,390 644,296z"/>
|
||||||
<glyph unicode="N" horiz-adv-x="658" d="M158,0l0,288C158,400 157,481 152,566l3,1C188,494 233,417 280,342l214,-342l88,0l0,674l-82,0l0,-282C500,287 502,205 510,115l-3,-1C476,183 436,254 387,333l-215,341l-96,0l0,-674z"/>
|
<glyph unicode="N" horiz-adv-x="658" d="M158,0l0,288C158,400 157,481 152,566l3,1C188,494 233,417 280,342l214,-342l88,0l0,674l-82,0l0,-282C500,287 502,205 510,115l-3,-1C476,183 436,254 387,333l-215,341l-96,0l0,-674z"/>
|
||||||
<glyph unicode="O" horiz-adv-x="689" d="M348,686C168,686 36,546 36,332C36,128 160,-11 339,-11C511,-11 652,113 652,344C652,545 533,686 348,686M345,615C490,615 560,475 560,340C560,187 482,60 344,60C206,60 128,189 128,334C128,481 200,615 345,615z"/>
|
<glyph unicode="O" horiz-adv-x="689" d="M348,686C168,686 36,546 36,332C36,128 160,-11 339,-11C511,-11 652,113 652,344C652,545 533,686 348,686M345,615C490,615 560,475 560,340C560,187 482,60 344,60C206,60 128,189 128,334C128,481 200,615 345,615z"/>
|
||||||
<glyph unicode="P" horiz-adv-x="532" d="M76,0l87,0l0,270C183,265 207,264 233,264C318,264 392,289 439,338C473,373 491,421 491,482C491,542 468,591 432,623C392,659 329,679 243,679C173,679 118,673 76,666M163,603C178,607 207,610 245,610C340,610 404,567 404,477C404,386 340,334 235,334C206,334 182,336 163,341z"/>
|
<glyph unicode="P" horiz-adv-x="532" d="M76,0l87,0l0,270C183,265 207,264 233,264C318,264 392,289 439,338C473,373 491,421 491,482C491,542 468,591 432,623C392,659 329,679 243,679C173,679 118,673 76,666M163,603C178,607 207,610 245,610C340,610 404,567 404,477C404,386 340,334 235,334C206,334 182,336 163,341z"/>
|
||||||
<glyph unicode="Q" horiz-adv-x="689" d="M657,-26C600,-16 527,0 460,17l0,4C572,61 652,171 652,345C652,544 533,686 349,686C167,686 36,547 36,331C36,113 172,-5 333,-11C346,-11 359,-16 374,-21C452,-48 541,-75 632,-99M344,60C206,60 128,189 128,333C128,479 200,615 347,615C490,615 560,476 560,340C560,187 482,60 344,60z"/>
|
<glyph unicode="Q" horiz-adv-x="689" d="M657,-26C600,-16 527,0 460,17l0,4C572,61 652,171 652,345C652,544 533,686 349,686C167,686 36,547 36,331C36,113 172,-5 333,-11C346,-11 359,-16 374,-21C452,-48 541,-75 632,-99M344,60C206,60 128,189 128,333C128,479 200,615 347,615C490,615 560,476 560,340C560,187 482,60 344,60z"/>
|
||||||
<glyph unicode="R" horiz-adv-x="538" d="M76,0l87,0l0,292l82,0C324,289 361,254 381,161C399,77 414,20 425,0l90,0C501,26 485,91 463,185C447,255 416,303 365,321l0,3C435,348 491,407 491,495C491,548 471,594 438,624C397,661 336,679 243,679C184,679 120,673 76,665M163,604C178,608 207,611 249,611C341,611 404,573 404,486C404,409 345,358 252,358l-89,0z"/>
|
<glyph unicode="R" horiz-adv-x="538" d="M76,0l87,0l0,292l82,0C324,289 361,254 381,161C399,77 414,20 425,0l90,0C501,26 485,91 463,185C447,255 416,303 365,321l0,3C435,348 491,407 491,495C491,548 471,594 438,624C397,661 336,679 243,679C184,679 120,673 76,665M163,604C178,608 207,611 249,611C341,611 404,573 404,486C404,409 345,358 252,358l-89,0z"/>
|
||||||
<glyph unicode="S" horiz-adv-x="493" d="M42,33C78,9 149,-11 214,-11C373,-11 449,80 449,184C449,283 392,338 278,382C185,418 144,449 144,512C144,558 179,613 271,613C332,613 377,594 398,581l24,71C393,669 342,685 274,685C143,685 56,607 56,502C56,408 124,350 234,310C325,276 361,239 361,177C361,109 309,62 220,62C160,62 104,81 65,106z"/>
|
<glyph unicode="S" horiz-adv-x="493" d="M42,33C78,9 149,-11 214,-11C373,-11 449,80 449,184C449,283 392,338 278,382C185,418 144,449 144,512C144,558 179,613 271,613C332,613 377,594 398,581l24,71C393,669 342,685 274,685C143,685 56,607 56,502C56,408 124,350 234,310C325,276 361,239 361,177C361,109 309,62 220,62C160,62 104,81 65,106z"/>
|
||||||
<glyph unicode="T" horiz-adv-x="497" d="M204,0l88,0l0,600l206,0l0,74l-499,0l0,-74l205,0z"/>
|
<glyph unicode="T" horiz-adv-x="497" d="M204,0l88,0l0,600l206,0l0,74l-499,0l0,-74l205,0z"/>
|
||||||
<glyph unicode="U" horiz-adv-x="647" d="M75,674l0,-397C75,67 179,-11 317,-11C463,-11 572,73 572,280l0,394l-88,0l0,-400C484,126 419,60 320,60C230,60 163,124 163,274l0,400z"/>
|
<glyph unicode="U" horiz-adv-x="647" d="M75,674l0,-397C75,67 179,-11 317,-11C463,-11 572,73 572,280l0,394l-88,0l0,-400C484,126 419,60 320,60C230,60 163,124 163,274l0,400z"/>
|
||||||
<glyph unicode="a" horiz-adv-x="482" d="M413,297C413,393 377,494 229,494C168,494 109,477 69,452l20,-59C123,416 170,429 216,429C315,430 326,357 326,318l0,-10C139,309 35,245 35,128C35,58 85,-11 183,-11C252,-11 304,23 331,61l3,0l7,-61l79,0C415,33 413,74 413,116M328,163C328,155 327,145 324,135C310,94 269,54 205,54C161,54 123,80 123,138C123,232 232,249 328,247z"/>
|
<glyph unicode="a" horiz-adv-x="482" d="M413,297C413,393 377,494 229,494C168,494 109,477 69,452l20,-59C123,416 170,429 216,429C315,430 326,357 326,318l0,-10C139,309 35,245 35,128C35,58 85,-11 183,-11C252,-11 304,23 331,61l3,0l7,-61l79,0C415,33 413,74 413,116M328,163C328,155 327,145 324,135C310,94 269,54 205,54C161,54 123,80 123,138C123,232 232,249 328,247z"/>
|
||||||
<glyph unicode="b" horiz-adv-x="569" d="M73,125C73,82 71,33 69,0l75,0l5,79l2,0C188,16 244,-11 314,-11C422,-11 532,75 532,248C532,394 448,494 327,494C249,494 193,460 162,406l-2,0l0,304l-87,0M160,280C160,294 162,306 165,317C183,383 239,425 298,425C393,425 443,342 443,245C443,134 389,59 296,59C232,59 180,101 164,162C161,172 160,183 160,194z"/>
|
<glyph unicode="b" horiz-adv-x="569" d="M73,125C73,82 71,33 69,0l75,0l5,79l2,0C188,16 244,-11 314,-11C422,-11 532,75 532,248C532,394 448,494 327,494C249,494 193,460 162,406l-2,0l0,304l-87,0M160,280C160,294 162,306 165,317C183,383 239,425 298,425C393,425 443,342 443,245C443,134 389,59 296,59C232,59 180,101 164,162C161,172 160,183 160,194z"/>
|
||||||
<glyph unicode="c" horiz-adv-x="448" d="M403,83C378,72 345,60 295,60C199,60 127,129 127,241C127,341 187,424 298,424C346,424 379,412 400,401l20,67C396,481 350,494 298,494C140,494 38,385 38,236C38,88 133,-11 279,-11C344,-11 395,6 418,17z"/>
|
<glyph unicode="c" horiz-adv-x="448" d="M403,83C378,72 345,60 295,60C199,60 127,129 127,241C127,341 187,424 298,424C346,424 379,412 400,401l20,67C396,481 350,494 298,494C140,494 38,385 38,236C38,88 133,-11 279,-11C344,-11 395,6 418,17z"/>
|
||||||
<glyph unicode="," horiz-adv-x="207" d="M78,-117C106,-70 150,41 174,126l-98,-10C65,43 38,-64 16,-124z"/>
|
<glyph unicode="," horiz-adv-x="207" d="M78,-117C106,-70 150,41 174,126l-98,-10C65,43 38,-64 16,-124z"/>
|
||||||
<glyph unicode="d" horiz-adv-x="564" d="M403,710l0,-289l-2,0C379,459 330,494 255,494C138,494 37,396 38,235C38,88 129,-11 246,-11C325,-11 383,30 409,84l3,0l4,-84l78,0C492,33 490,82 490,125l0,585M403,203C403,189 402,177 399,165C383,100 329,60 270,60C176,60 127,141 127,239C127,345 181,425 272,425C338,425 386,379 399,324C402,313 403,298 403,287z"/>
|
<glyph unicode="d" horiz-adv-x="564" d="M403,710l0,-289l-2,0C379,459 330,494 255,494C138,494 37,396 38,235C38,88 129,-11 246,-11C325,-11 383,30 409,84l3,0l4,-84l78,0C492,33 490,82 490,125l0,585M403,203C403,189 402,177 399,165C383,100 329,60 270,60C176,60 127,141 127,239C127,345 181,425 272,425C338,425 386,379 399,324C402,313 403,298 403,287z"/>
|
||||||
<glyph unicode="e" horiz-adv-x="501" d="M462,226C464,236 465,249 465,267C465,356 424,494 265,494C124,494 38,380 38,234C38,88 127,-11 276,-11C353,-11 407,6 438,20l-16,63C390,69 351,58 288,58C199,58 124,107 122,226M123,289C130,350 168,431 258,431C357,431 381,344 380,289z"/>
|
<glyph unicode="e" horiz-adv-x="501" d="M462,226C464,236 465,249 465,267C465,356 424,494 265,494C124,494 38,380 38,234C38,88 127,-11 276,-11C353,-11 407,6 438,20l-16,63C390,69 351,58 288,58C199,58 124,107 122,226M123,289C130,350 168,431 258,431C357,431 381,344 380,289z"/>
|
||||||
<glyph unicode="h" horiz-adv-x="555" d="M73,0l88,0l0,292C161,308 162,321 167,334C184,381 228,421 285,421C368,421 397,356 397,278l0,-278l88,0l0,288C485,454 381,494 316,494C283,494 252,485 226,470C199,455 177,432 163,407l-2,0l0,303l-88,0z"/>
|
<glyph unicode="h" horiz-adv-x="555" d="M73,0l88,0l0,292C161,308 162,321 167,334C184,381 228,421 285,421C368,421 397,356 397,278l0,-278l88,0l0,288C485,454 381,494 316,494C283,494 252,485 226,470C199,455 177,432 163,407l-2,0l0,303l-88,0z"/>
|
||||||
<glyph unicode="-" horiz-adv-x="307" d="M30,302l0,-64l247,0l0,64z"/>
|
<glyph unicode="-" horiz-adv-x="307" d="M30,302l0,-64l247,0l0,64z"/>
|
||||||
<glyph unicode="i" horiz-adv-x="234" d="M161,0l0,484l-88,0l0,-484M117,675C84,675 62,650 62,620C62,590 83,566 115,566C150,566 171,590 171,620C171,651 149,675 117,675z"/>
|
<glyph unicode="i" horiz-adv-x="234" d="M161,0l0,484l-88,0l0,-484M117,675C84,675 62,650 62,620C62,590 83,566 115,566C150,566 171,590 171,620C171,651 149,675 117,675z"/>
|
||||||
<glyph unicode="k" horiz-adv-x="469" d="M160,710l-87,0l0,-710l87,0l0,182l45,50l166,-232l108,0l-213,285l186,199l-105,0l-143,-167C190,300 174,279 162,262l-2,0z"/>
|
<glyph unicode="k" horiz-adv-x="469" d="M160,710l-87,0l0,-710l87,0l0,182l45,50l166,-232l108,0l-213,285l186,199l-105,0l-143,-167C190,300 174,279 162,262l-2,0z"/>
|
||||||
<glyph unicode="l" horiz-adv-x="236" d="M73,0l88,0l0,710l-88,0z"/>
|
<glyph unicode="l" horiz-adv-x="236" d="M73,0l88,0l0,710l-88,0z"/>
|
||||||
<glyph unicode="m" horiz-adv-x="834" d="M73,0l86,0l0,291C159,306 161,322 166,334C180,378 221,422 275,422C342,422 376,367 376,290l0,-290l86,0l0,299C462,315 465,330 469,343C485,385 523,422 574,422C644,422 679,367 679,273l0,-273l86,0l0,284C765,452 670,494 605,494C559,494 528,482 499,460C479,445 459,425 444,397l-2,0C421,454 371,494 306,494C225,494 180,451 153,405l-3,0l-4,79l-77,0C71,444 73,404 73,353z"/>
|
<glyph unicode="m" horiz-adv-x="834" d="M73,0l86,0l0,291C159,306 161,322 166,334C180,378 221,422 275,422C342,422 376,367 376,290l0,-290l86,0l0,299C462,315 465,330 469,343C485,385 523,422 574,422C644,422 679,367 679,273l0,-273l86,0l0,284C765,452 670,494 605,494C559,494 528,482 499,460C479,445 459,425 444,397l-2,0C421,454 371,494 306,494C225,494 180,451 153,405l-3,0l-4,79l-77,0C71,444 73,404 73,353z"/>
|
||||||
<glyph unicode="n" horiz-adv-x="555" d="M73,0l88,0l0,291C161,306 163,321 167,332C183,381 228,422 285,422C368,422 397,357 397,279l0,-279l88,0l0,288C485,454 381,494 314,494C234,494 178,449 154,404l-2,0l-5,80l-78,0C72,444 73,404 73,353z"/>
|
<glyph unicode="n" horiz-adv-x="555" d="M73,0l88,0l0,291C161,306 163,321 167,332C183,381 228,422 285,422C368,422 397,357 397,279l0,-279l88,0l0,288C485,454 381,494 314,494C234,494 178,449 154,404l-2,0l-5,80l-78,0C72,444 73,404 73,353z"/>
|
||||||
<glyph unicode="o" horiz-adv-x="549" d="M278,494C145,494 38,399 38,238C38,85 140,-11 270,-11C386,-11 511,67 511,246C511,393 417,494 278,494M276,428C380,428 421,325 421,243C421,134 358,55 274,55C188,55 128,135 128,241C128,332 173,428 276,428z"/>
|
<glyph unicode="o" horiz-adv-x="549" d="M278,494C145,494 38,399 38,238C38,85 140,-11 270,-11C386,-11 511,67 511,246C511,393 417,494 278,494M276,428C380,428 421,325 421,243C421,134 358,55 274,55C188,55 128,135 128,241C128,332 173,428 276,428z"/>
|
||||||
<glyph unicode="p" horiz-adv-x="569" d="M73,-198l87,0l0,263l2,0C191,17 247,-11 311,-11C425,-11 532,75 532,249C532,395 444,494 326,494C247,494 189,460 154,401l-2,0l-5,83l-78,0C71,438 73,388 73,326M160,281C160,292 163,305 166,316C182,382 239,424 299,424C392,424 443,341 443,245C443,134 389,58 296,58C233,58 180,100 164,161C161,172 160,184 160,197z"/>
|
<glyph unicode="p" horiz-adv-x="569" d="M73,-198l87,0l0,263l2,0C191,17 247,-11 311,-11C425,-11 532,75 532,249C532,395 444,494 326,494C247,494 189,460 154,401l-2,0l-5,83l-78,0C71,438 73,388 73,326M160,281C160,292 163,305 166,316C182,382 239,424 299,424C392,424 443,341 443,245C443,134 389,58 296,58C233,58 180,100 164,161C161,172 160,184 160,197z"/>
|
||||||
<glyph unicode="(" horiz-adv-x="284" d="M195,694C132,610 65,481 64,285C64,90 132,-38 195,-121l68,0C193,-21 138,106 138,284C138,466 190,595 263,694z"/>
|
<glyph unicode="(" horiz-adv-x="284" d="M195,694C132,610 65,481 64,285C64,90 132,-38 195,-121l68,0C193,-21 138,106 138,284C138,466 190,595 263,694z"/>
|
||||||
<glyph unicode=")" horiz-adv-x="284" d="M88,-121C151,-37 218,91 219,287C219,483 151,612 88,694l-68,0C91,594 145,467 145,287C145,107 90,-22 20,-121z"/>
|
<glyph unicode=")" horiz-adv-x="284" d="M88,-121C151,-37 218,91 219,287C219,483 151,612 88,694l-68,0C91,594 145,467 145,287C145,107 90,-22 20,-121z"/>
|
||||||
<glyph unicode="." horiz-adv-x="207" d="M110,-11C147,-11 171,16 171,52C171,89 147,115 112,115C77,115 52,88 52,52C52,16 76,-11 110,-11z"/>
|
<glyph unicode="." horiz-adv-x="207" d="M110,-11C147,-11 171,16 171,52C171,89 147,115 112,115C77,115 52,88 52,52C52,16 76,-11 110,-11z"/>
|
||||||
<glyph unicode="?" horiz-adv-x="406" d="M220,192l-2,25C215,268 231,313 275,365C323,422 361,471 361,539C361,615 309,686 194,686C141,686 85,670 51,646l24,-63C100,602 140,614 176,614C239,613 271,579 271,528C271,483 246,444 201,391C151,331 133,271 139,218l2,-26M178,-11C215,-11 238,16 238,51C238,88 215,114 179,114C145,114 120,88 120,51C120,16 144,-11 178,-11z"/>
|
<glyph unicode="?" horiz-adv-x="406" d="M220,192l-2,25C215,268 231,313 275,365C323,422 361,471 361,539C361,615 309,686 194,686C141,686 85,670 51,646l24,-63C100,602 140,614 176,614C239,613 271,579 271,528C271,483 246,444 201,391C151,331 133,271 139,218l2,-26M178,-11C215,-11 238,16 238,51C238,88 215,114 179,114C145,114 120,88 120,51C120,16 144,-11 178,-11z"/>
|
||||||
<glyph unicode="r" horiz-adv-x="327" d="M73,0l88,0l0,258C161,272 162,287 164,299C176,365 220,411 282,411C294,411 303,411 312,409l0,83C304,493 297,494 288,494C229,494 175,453 153,388l-3,0l-4,96l-77,0C72,439 73,390 73,333z"/>
|
<glyph unicode="r" horiz-adv-x="327" d="M73,0l88,0l0,258C161,272 162,287 164,299C176,365 220,411 282,411C294,411 303,411 312,409l0,83C304,493 297,494 288,494C229,494 175,453 153,388l-3,0l-4,96l-77,0C72,439 73,390 73,333z"/>
|
||||||
<glyph unicode="s" horiz-adv-x="396" d="M40,23C74,3 123,-11 176,-11C289,-11 356,49 356,135C356,207 312,249 229,280C166,305 138,323 138,363C138,399 166,429 218,429C263,429 298,412 317,400l21,64C312,481 269,494 220,494C117,494 53,430 53,352C53,294 94,247 182,215C246,191 271,169 271,127C271,86 241,55 178,55C134,55 88,73 61,89z"/>
|
<glyph unicode="s" horiz-adv-x="396" d="M40,23C74,3 123,-11 176,-11C289,-11 356,49 356,135C356,207 312,249 229,280C166,305 138,323 138,363C138,399 166,429 218,429C263,429 298,412 317,400l21,64C312,481 269,494 220,494C117,494 53,430 53,352C53,294 94,247 182,215C246,191 271,169 271,127C271,86 241,55 178,55C134,55 88,73 61,89z"/>
|
||||||
<glyph unicode="/" horiz-adv-x="343" d="M66,-39l280,725l-69,0l-278,-725z"/>
|
<glyph unicode="/" horiz-adv-x="343" d="M66,-39l280,725l-69,0l-278,-725z"/>
|
||||||
<glyph unicode=" " horiz-adv-x="212"/>
|
<glyph unicode=" " horiz-adv-x="212"/>
|
||||||
<glyph unicode="t" horiz-adv-x="331" d="M93,574l0,-90l-75,0l0,-67l75,0l0,-264C93,96 103,53 127,26C148,3 181,-11 222,-11C256,-11 283,-5 300,1l-4,67C283,64 269,62 245,62C196,62 179,96 179,156l0,261l126,0l0,67l-126,0l0,116z"/>
|
<glyph unicode="t" horiz-adv-x="331" d="M93,574l0,-90l-75,0l0,-67l75,0l0,-264C93,96 103,53 127,26C148,3 181,-11 222,-11C256,-11 283,-5 300,1l-4,67C283,64 269,62 245,62C196,62 179,96 179,156l0,261l126,0l0,67l-126,0l0,116z"/>
|
||||||
<glyph unicode="2" horiz-adv-x="513" d="M460,0l0,73l-291,0l0,2l51,48C357,255 444,352 444,472C444,565 385,661 245,661C171,661 106,632 62,595l28,-62C120,558 169,588 228,588C325,588 356,527 356,461C356,363 280,279 114,121l-69,-67l0,-54z"/>
|
<glyph unicode="2" horiz-adv-x="513" d="M460,0l0,73l-291,0l0,2l51,48C357,255 444,352 444,472C444,565 385,661 245,661C171,661 106,632 62,595l28,-62C120,558 169,588 228,588C325,588 356,527 356,461C356,363 280,279 114,121l-69,-67l0,-54z"/>
|
||||||
<glyph unicode="u" horiz-adv-x="551" d="M478,484l-88,0l0,-296C390,171 387,155 382,143C366,103 325,62 266,62C187,62 158,125 158,217l0,267l-88,0l0,-283C70,32 161,-11 237,-11C323,-11 375,40 397,79l2,0l5,-79l78,0C479,38 478,82 478,133z"/>
|
<glyph unicode="u" horiz-adv-x="551" d="M478,484l-88,0l0,-296C390,171 387,155 382,143C366,103 325,62 266,62C187,62 158,125 158,217l0,267l-88,0l0,-283C70,32 161,-11 237,-11C323,-11 375,40 397,79l2,0l5,-79l78,0C479,38 478,82 478,133z"/>
|
||||||
<glyph unicode="v" horiz-adv-x="481" d="M13,484l184,-484l84,0l190,484l-92,0l-94,-271C269,168 255,128 244,88l-3,0C231,128 218,168 202,213l-95,271z"/>
|
<glyph unicode="v" horiz-adv-x="481" d="M13,484l184,-484l84,0l190,484l-92,0l-94,-271C269,168 255,128 244,88l-3,0C231,128 218,168 202,213l-95,271z"/>
|
||||||
<glyph unicode="x" horiz-adv-x="463" d="M16,484l164,-237l-172,-247l97,0l70,109C194,138 210,164 226,193l2,0C245,164 261,137 280,109l72,-109l99,0l-169,250l165,234l-96,0l-67,-103C267,355 251,330 235,302l-2,0C217,329 202,353 183,380l-69,104z"/>
|
<glyph unicode="x" horiz-adv-x="463" d="M16,484l164,-237l-172,-247l97,0l70,109C194,138 210,164 226,193l2,0C245,164 261,137 280,109l72,-109l99,0l-169,250l165,234l-96,0l-67,-103C267,355 251,330 235,302l-2,0C217,329 202,353 183,380l-69,104z"/>
|
||||||
<glyph unicode="y" horiz-adv-x="471" d="M9,484l178,-446C192,27 194,20 194,15C194,10 191,3 187,-6C166,-51 137,-85 113,-104C87,-126 58,-140 36,-147l22,-73C80,-216 122,-201 166,-164C226,-111 269,-27 332,139l132,345l-93,0l-96,-284C263,165 253,128 244,99l-2,0C234,128 222,166 210,198l-105,286z"/>
|
<glyph unicode="y" horiz-adv-x="471" d="M9,484l178,-446C192,27 194,20 194,15C194,10 191,3 187,-6C166,-51 137,-85 113,-104C87,-126 58,-140 36,-147l22,-73C80,-216 122,-201 166,-164C226,-111 269,-27 332,139l132,345l-93,0l-96,-284C263,165 253,128 244,99l-2,0C234,128 222,166 210,198l-105,286z"/>
|
||||||
<glyph unicode="z" horiz-adv-x="428" d="M18,0l392,0l0,70l-282,0l0,2C150,96 169,121 190,148l216,281l0,55l-368,0l0,-70l262,0l0,-2C278,386 258,363 236,336l-218,-285z"/>
|
<glyph unicode="z" horiz-adv-x="428" d="M18,0l392,0l0,70l-282,0l0,2C150,96 169,121 190,148l216,281l0,55l-368,0l0,-70l262,0l0,-2C278,386 258,363 236,336l-218,-285z"/>
|
||||||
</font>
|
</font>
|
||||||
|
|
||||||
<g>
|
<g>
|
||||||
<rect y="1.152" fill="#AAAAAA" stroke="#000000" width="256" height="36.887"/>
|
<rect y="1.152" fill="#AAAAAA" stroke="#000000" width="256" height="36.887"/>
|
||||||
<text transform="matrix(1 0 0 1 27.7441 23.7046)" font-family="'MyriadPro-Regular'" font-size="14">Enter protected mode</text>
|
<text transform="matrix(1 0 0 1 27.7441 23.7046)" font-family="'MyriadPro-Regular'" font-size="14">Enter protected mode</text>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<rect y="45.642" fill="#AAAAAA" stroke="#000000" width="256" height="43.62"/>
|
<rect y="45.642" fill="#AAAAAA" stroke="#000000" width="256" height="43.62"/>
|
||||||
<text transform="matrix(1 0 0 1 27.7441 71.5605)" font-family="'MyriadPro-Regular'" font-size="14">non-coherent HT enumeration</text>
|
<text transform="matrix(1 0 0 1 27.7441 71.5605)" font-family="'MyriadPro-Regular'" font-size="14">non-coherent HT enumeration</text>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<rect y="98.359" fill="#AAAAAA" stroke="#000000" width="256" height="60.15"/>
|
<rect y="98.359" fill="#AAAAAA" stroke="#000000" width="256" height="60.15"/>
|
||||||
<text transform="matrix(1 0 0 1 27.7441 132.5435)" font-family="'MyriadPro-Regular'" font-size="14">coherent HT initialization</text>
|
<text transform="matrix(1 0 0 1 27.7441 132.5435)" font-family="'MyriadPro-Regular'" font-size="14">coherent HT initialization</text>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<rect y="165.983" fill="#AAAAAA" stroke="#000000" width="256" height="68.421"/>
|
<rect y="165.983" fill="#AAAAAA" stroke="#000000" width="256" height="68.421"/>
|
||||||
<text transform="matrix(1 0 0 1 27.7441 204.3022)" font-family="'MyriadPro-Regular'" font-size="14">Fallback / Normal?</text>
|
<text transform="matrix(1 0 0 1 27.7441 204.3022)" font-family="'MyriadPro-Regular'" font-size="14">Fallback / Normal?</text>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<rect y="243.893" fill="#AAAAAA" stroke="#000000" width="256" height="69.173"/>
|
<rect y="243.893" fill="#AAAAAA" stroke="#000000" width="256" height="69.173"/>
|
||||||
<text transform="matrix(1 0 0 1 27.7441 282.5879)" font-family="'MyriadPro-Regular'" font-size="14">RAM initialization</text>
|
<text transform="matrix(1 0 0 1 27.7441 282.5879)" font-family="'MyriadPro-Regular'" font-size="14">RAM initialization</text>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<rect y="410.747" fill="#AAAAAA" stroke="#000000" width="256" height="52.632"/>
|
<rect y="410.747" fill="#AAAAAA" stroke="#000000" width="256" height="52.632"/>
|
||||||
<text transform="matrix(1 0 0 1 27.7441 432.7725)"><tspan x="0" y="0" font-family="'MyriadPro-Regular'" font-size="14">Create external tables (coreboot table,</tspan><tspan x="0" y="16.8" font-family="'MyriadPro-Regular'" font-size="14">ACPI, MP, PIRQ, DMI)</tspan></text>
|
<text transform="matrix(1 0 0 1 27.7441 432.7725)"><tspan x="0" y="0" font-family="'MyriadPro-Regular'" font-size="14">Create external tables (coreboot table,</tspan><tspan x="0" y="16.8" font-family="'MyriadPro-Regular'" font-size="14">ACPI, MP, PIRQ, DMI)</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<rect y="323.526" fill="#AAAAAA" stroke="#000000" width="256" height="77.443"/>
|
<rect y="323.526" fill="#AAAAAA" stroke="#000000" width="256" height="77.443"/>
|
||||||
<text transform="matrix(1 0 0 1 27.7441 339.3154)"><tspan x="0" y="0" font-family="'MyriadPro-Regular'" font-size="14">Resource Allocation (PCI, PCIe, I2C, SIO, </tspan><tspan x="0" y="16.8" font-family="'MyriadPro-Regular'" font-size="14">CPU, mainboard...)</tspan></text>
|
<text transform="matrix(1 0 0 1 27.7441 339.3154)"><tspan x="0" y="0" font-family="'MyriadPro-Regular'" font-size="14">Resource Allocation (PCI, PCIe, I2C, SIO, </tspan><tspan x="0" y="16.8" font-family="'MyriadPro-Regular'" font-size="14">CPU, mainboard...)</tspan></text>
|
||||||
<rect x="27.744" y="362.248" fill="#BCBCBC" width="228.256" height="38.722"/>
|
<rect x="27.744" y="362.248" fill="#BCBCBC" width="228.256" height="38.722"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<rect y="473.781" fill="#AAAAAA" stroke="#000000" width="256" height="80.076"/>
|
<rect y="473.781" fill="#AAAAAA" stroke="#000000" width="256" height="80.076"/>
|
||||||
<text transform="matrix(1 0 0 1 27.7441 497.4658)" font-family="'MyriadPro-Regular'" font-size="14">ELF / Payload Loader</text>
|
<text transform="matrix(1 0 0 1 27.7441 497.4658)" font-family="'MyriadPro-Regular'" font-size="14">ELF / Payload Loader</text>
|
||||||
<rect x="27.744" y="507.993" fill="#BCBCBC" width="228.256" height="45.864"/>
|
<rect x="27.744" y="507.993" fill="#BCBCBC" width="228.256" height="45.864"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,31.246 130.359,46.62 132.854,44.7
|
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,31.246 130.359,46.62 132.854,44.7
|
||||||
132.027,51.206 131.201,57.711 124.701,56.845 118.201,55.98 120.608,54.127 110.178,33.439 "/>
|
132.027,51.206 131.201,57.711 124.701,56.845 118.201,55.98 120.608,54.127 110.178,33.439 "/>
|
||||||
</g>
|
</g>
|
||||||
<polygon fill="#231F20" points="131.101,57.636 132.228,59.101 133.828,45.178 133.062,44.181 "/>
|
<polygon fill="#231F20" points="131.101,57.636 132.228,59.101 133.828,45.178 133.062,44.181 "/>
|
||||||
<polygon fill="#231F20" points="131.152,57.643 132.28,59.108 118.41,57.093 117.644,56.096 "/>
|
<polygon fill="#231F20" points="131.152,57.643 132.28,59.108 118.41,57.093 117.644,56.096 "/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,81.246 130.359,96.62 132.854,94.7
|
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,81.246 130.359,96.62 132.854,94.7
|
||||||
132.027,101.206 131.201,107.711 124.701,106.845 118.201,105.98 120.608,104.127 110.178,83.439 "/>
|
132.027,101.206 131.201,107.711 124.701,106.845 118.201,105.98 120.608,104.127 110.178,83.439 "/>
|
||||||
</g>
|
</g>
|
||||||
<polygon fill="#231F20" points="131.101,107.636 132.228,109.101 133.828,95.178 133.062,94.181 "/>
|
<polygon fill="#231F20" points="131.101,107.636 132.228,109.101 133.828,95.178 133.062,94.181 "/>
|
||||||
<polygon fill="#231F20" points="131.152,107.643 132.28,109.108 118.41,107.093 117.644,106.096 "/>
|
<polygon fill="#231F20" points="131.152,107.643 132.28,109.108 118.41,107.093 117.644,106.096 "/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,151.586 130.359,166.961 132.854,165.041
|
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,151.586 130.359,166.961 132.854,165.041
|
||||||
132.027,171.546 131.201,178.052 124.701,177.186 118.201,176.321 120.608,174.468 110.178,153.78 "/>
|
132.027,171.546 131.201,178.052 124.701,177.186 118.201,176.321 120.608,174.468 110.178,153.78 "/>
|
||||||
</g>
|
</g>
|
||||||
<polygon fill="#231F20" points="131.101,177.977 132.228,179.442 133.828,165.519 133.062,164.522 "/>
|
<polygon fill="#231F20" points="131.101,177.977 132.228,179.442 133.828,165.519 133.062,164.522 "/>
|
||||||
<polygon fill="#231F20" points="131.152,177.983 132.28,179.449 118.41,177.434 117.644,176.437 "/>
|
<polygon fill="#231F20" points="131.152,177.983 132.28,179.449 118.41,177.434 117.644,176.437 "/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,227.013 130.359,242.387 132.854,240.467
|
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,227.013 130.359,242.387 132.854,240.467
|
||||||
132.027,246.973 131.201,253.478 124.701,252.612 118.201,251.747 120.608,249.894 110.178,229.207 "/>
|
132.027,246.973 131.201,253.478 124.701,252.612 118.201,251.747 120.608,249.894 110.178,229.207 "/>
|
||||||
</g>
|
</g>
|
||||||
<polygon fill="#231F20" points="131.101,253.403 132.228,254.868 133.828,240.945 133.062,239.948 "/>
|
<polygon fill="#231F20" points="131.101,253.403 132.228,254.868 133.828,240.945 133.062,239.948 "/>
|
||||||
<polygon fill="#231F20" points="131.152,253.41 132.28,254.875 118.41,252.86 117.644,251.863 "/>
|
<polygon fill="#231F20" points="131.152,253.41 132.28,254.875 118.41,252.86 117.644,251.863 "/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,303.013 130.359,318.388 132.854,316.468
|
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,303.013 130.359,318.388 132.854,316.468
|
||||||
132.027,322.973 131.201,329.479 124.701,328.612 118.201,327.747 120.607,325.895 110.178,305.207 "/>
|
132.027,322.973 131.201,329.479 124.701,328.612 118.201,327.747 120.607,325.895 110.178,305.207 "/>
|
||||||
</g>
|
</g>
|
||||||
<polygon fill="#231F20" points="131.101,329.404 132.228,330.868 133.829,316.945 133.062,315.948 "/>
|
<polygon fill="#231F20" points="131.101,329.404 132.228,330.868 133.829,316.945 133.062,315.948 "/>
|
||||||
<polygon fill="#231F20" points="131.152,329.41 132.28,330.876 118.41,328.86 117.643,327.864 "/>
|
<polygon fill="#231F20" points="131.152,329.41 132.28,330.876 118.41,328.86 117.643,327.864 "/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,395.872 130.359,411.247 132.854,409.327
|
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,395.872 130.359,411.247 132.854,409.327
|
||||||
132.027,415.833 131.201,422.338 124.701,421.473 118.201,420.606 120.608,418.754 110.178,398.066 "/>
|
132.027,415.833 131.201,422.338 124.701,421.473 118.201,420.606 120.608,418.754 110.178,398.066 "/>
|
||||||
</g>
|
</g>
|
||||||
<polygon fill="#231F20" points="131.101,422.264 132.228,423.728 133.828,409.805 133.062,408.808 "/>
|
<polygon fill="#231F20" points="131.101,422.264 132.228,423.728 133.828,409.805 133.062,408.808 "/>
|
||||||
<polygon fill="#231F20" points="131.152,422.27 132.28,423.735 118.41,421.72 117.644,420.724 "/>
|
<polygon fill="#231F20" points="131.152,422.27 132.28,423.735 118.41,421.72 117.644,420.724 "/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,452.152 130.359,467.528 132.854,465.608
|
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,452.152 130.359,467.528 132.854,465.608
|
||||||
132.027,472.113 131.201,478.619 124.701,477.753 118.201,476.888 120.607,475.035 110.178,454.347 "/>
|
132.027,472.113 131.201,478.619 124.701,477.753 118.201,476.888 120.607,475.035 110.178,454.347 "/>
|
||||||
</g>
|
</g>
|
||||||
<polygon fill="#231F20" points="131.101,478.545 132.228,480.009 133.829,466.085 133.062,465.089 "/>
|
<polygon fill="#231F20" points="131.101,478.545 132.228,480.009 133.829,466.085 133.062,465.089 "/>
|
||||||
<polygon fill="#231F20" points="131.152,478.551 132.28,480.017 118.41,478.001 117.643,477.004 "/>
|
<polygon fill="#231F20" points="131.152,478.551 132.28,480.017 118.41,478.001 117.643,477.004 "/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<text transform="matrix(1 0 0 1 59.3232 385.7627)" font-family="'MyriadPro-Regular'" font-size="14">Drivers</text>
|
<text transform="matrix(1 0 0 1 59.3232 385.7627)" font-family="'MyriadPro-Regular'" font-size="14">Drivers</text>
|
||||||
<text transform="matrix(1 0 0 1 55.564 535.3789)" font-family="'MyriadPro-Regular'" font-size="14">Linux, FILO, SeaBIOS, ...</text>
|
<text transform="matrix(1 0 0 1 55.564 535.3789)" font-family="'MyriadPro-Regular'" font-size="14">Linux, FILO, SeaBIOS, ...</text>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB |
@ -1,59 +1,59 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="256px" height="512px" viewBox="0 0 256 512" enable-background="new 0 0 256 512" xml:space="preserve">
|
width="256px" height="512px" viewBox="0 0 256 512" enable-background="new 0 0 256 512" xml:space="preserve">
|
||||||
<font horiz-adv-x="2048">
|
<font horiz-adv-x="2048">
|
||||||
<font-face font-family="ArialMT" units-per-em="2048" underline-position="-217" underline-thickness="150"/>
|
<font-face font-family="ArialMT" units-per-em="2048" underline-position="-217" underline-thickness="150"/>
|
||||||
<missing-glyph horiz-adv-x="1536" d="M256,0l0,1280l1024,0l0,-1280M288,32l960,0l0,1216l-960,0z"/>
|
<missing-glyph horiz-adv-x="1536" d="M256,0l0,1280l1024,0l0,-1280M288,32l960,0l0,1216l-960,0z"/>
|
||||||
<glyph unicode=" " horiz-adv-x="569"/>
|
<glyph unicode=" " horiz-adv-x="569"/>
|
||||||
<glyph unicode="(" horiz-adv-x="682" d="M479,-431C380,-306 296,-159 227,9C158,177 124,351 124,531C124,690 150,842 201,987C261,1156 354,1324 479,1491l129,0C527,1352 474,1253 448,1194C407,1102 375,1006 352,906C323,781 309,656 309,530C309,209 409,-111 608,-431z"/>
|
<glyph unicode="(" horiz-adv-x="682" d="M479,-431C380,-306 296,-159 227,9C158,177 124,351 124,531C124,690 150,842 201,987C261,1156 354,1324 479,1491l129,0C527,1352 474,1253 448,1194C407,1102 375,1006 352,906C323,781 309,656 309,530C309,209 409,-111 608,-431z"/>
|
||||||
<glyph unicode=")" horiz-adv-x="682" d="M253,-431l-129,0C323,-111 423,209 423,530C423,655 409,780 380,903C357,1003 326,1099 285,1191C259,1251 205,1351 124,1491l129,0C378,1324 471,1156 531,987C582,842 608,690 608,531C608,351 574,177 505,9C436,-159 352,-306 253,-431z"/>
|
<glyph unicode=")" horiz-adv-x="682" d="M253,-431l-129,0C323,-111 423,209 423,530C423,655 409,780 380,903C357,1003 326,1099 285,1191C259,1251 205,1351 124,1491l129,0C378,1324 471,1156 531,987C582,842 608,690 608,531C608,351 574,177 505,9C436,-159 352,-306 253,-431z"/>
|
||||||
<glyph unicode="-" horiz-adv-x="682" d="M65,440l0,181l553,0l0,-181z"/>
|
<glyph unicode="-" horiz-adv-x="682" d="M65,440l0,181l553,0l0,-181z"/>
|
||||||
<glyph unicode="0" horiz-adv-x="1139" d="M85,723C85,896 103,1036 139,1142C174,1247 227,1329 298,1386C368,1443 456,1472 563,1472C642,1472 711,1456 770,1425C829,1393 878,1347 917,1288C956,1228 986,1155 1008,1070C1030,984 1041,868 1041,723C1041,551 1023,412 988,307C953,201 900,119 830,62C759,4 670,-25 563,-25C422,-25 311,26 230,127C133,249 85,448 85,723M270,723C270,482 298,322 355,243C411,163 480,123 563,123C646,123 715,163 772,243C828,323 856,483 856,723C856,964 828,1125 772,1204C715,1283 645,1323 561,1323C478,1323 412,1288 363,1218C301,1129 270,964 270,723z"/>
|
<glyph unicode="0" horiz-adv-x="1139" d="M85,723C85,896 103,1036 139,1142C174,1247 227,1329 298,1386C368,1443 456,1472 563,1472C642,1472 711,1456 770,1425C829,1393 878,1347 917,1288C956,1228 986,1155 1008,1070C1030,984 1041,868 1041,723C1041,551 1023,412 988,307C953,201 900,119 830,62C759,4 670,-25 563,-25C422,-25 311,26 230,127C133,249 85,448 85,723M270,723C270,482 298,322 355,243C411,163 480,123 563,123C646,123 715,163 772,243C828,323 856,483 856,723C856,964 828,1125 772,1204C715,1283 645,1323 561,1323C478,1323 412,1288 363,1218C301,1129 270,964 270,723z"/>
|
||||||
<glyph unicode="1" horiz-adv-x="1139" d="M763,0l-180,0l0,1147C540,1106 483,1064 413,1023C342,982 279,951 223,930l0,174C324,1151 412,1209 487,1276C562,1343 616,1409 647,1472l116,0z"/>
|
<glyph unicode="1" horiz-adv-x="1139" d="M763,0l-180,0l0,1147C540,1106 483,1064 413,1023C342,982 279,951 223,930l0,174C324,1151 412,1209 487,1276C562,1343 616,1409 647,1472l116,0z"/>
|
||||||
<glyph unicode="2" horiz-adv-x="1139" d="M1031,173l0,-173l-969,0C61,43 68,85 83,125C108,191 147,256 202,320C256,384 334,458 437,542C596,673 704,776 760,853C816,929 844,1001 844,1069C844,1140 819,1201 768,1250C717,1299 650,1323 568,1323C481,1323 412,1297 360,1245C308,1193 282,1121 281,1029l-185,19C109,1186 156,1291 239,1364C322,1436 433,1472 572,1472C713,1472 824,1433 906,1355C988,1277 1029,1180 1029,1065C1029,1006 1017,949 993,892C969,835 929,776 874,713C818,650 725,564 596,455C488,364 419,303 388,271C357,238 332,206 312,173z"/>
|
<glyph unicode="2" horiz-adv-x="1139" d="M1031,173l0,-173l-969,0C61,43 68,85 83,125C108,191 147,256 202,320C256,384 334,458 437,542C596,673 704,776 760,853C816,929 844,1001 844,1069C844,1140 819,1201 768,1250C717,1299 650,1323 568,1323C481,1323 412,1297 360,1245C308,1193 282,1121 281,1029l-185,19C109,1186 156,1291 239,1364C322,1436 433,1472 572,1472C713,1472 824,1433 906,1355C988,1277 1029,1180 1029,1065C1029,1006 1017,949 993,892C969,835 929,776 874,713C818,650 725,564 596,455C488,364 419,303 388,271C357,238 332,206 312,173z"/>
|
||||||
<glyph unicode="3" horiz-adv-x="1139" d="M86,387l180,24C287,309 322,236 372,191C421,146 482,123 553,123C638,123 709,152 768,211C826,270 855,342 855,429C855,512 828,580 774,634C720,687 651,714 568,714C534,714 492,707 441,694l20,158C473,851 483,850 490,850C567,850 636,870 697,910C758,950 789,1012 789,1095C789,1161 767,1216 722,1259C677,1302 620,1324 549,1324C479,1324 421,1302 374,1258C327,1214 297,1148 284,1060l-180,32C126,1213 176,1306 254,1373C332,1439 429,1472 545,1472C625,1472 699,1455 766,1421C833,1386 885,1339 921,1280C956,1221 974,1158 974,1091C974,1028 957,970 923,918C889,866 839,825 772,794C859,774 926,733 974,670C1022,607 1046,528 1046,433C1046,305 999,197 906,108C813,19 695,-26 552,-26C423,-26 317,12 232,89C147,166 98,265 86,387z"/>
|
<glyph unicode="3" horiz-adv-x="1139" d="M86,387l180,24C287,309 322,236 372,191C421,146 482,123 553,123C638,123 709,152 768,211C826,270 855,342 855,429C855,512 828,580 774,634C720,687 651,714 568,714C534,714 492,707 441,694l20,158C473,851 483,850 490,850C567,850 636,870 697,910C758,950 789,1012 789,1095C789,1161 767,1216 722,1259C677,1302 620,1324 549,1324C479,1324 421,1302 374,1258C327,1214 297,1148 284,1060l-180,32C126,1213 176,1306 254,1373C332,1439 429,1472 545,1472C625,1472 699,1455 766,1421C833,1386 885,1339 921,1280C956,1221 974,1158 974,1091C974,1028 957,970 923,918C889,866 839,825 772,794C859,774 926,733 974,670C1022,607 1046,528 1046,433C1046,305 999,197 906,108C813,19 695,-26 552,-26C423,-26 317,12 232,89C147,166 98,265 86,387z"/>
|
||||||
<glyph unicode="8" horiz-adv-x="1139" d="M362,795C287,822 232,861 196,912C160,963 142,1023 142,1094C142,1201 180,1290 257,1363C334,1436 436,1472 563,1472C691,1472 794,1435 872,1361C950,1286 989,1196 989,1089C989,1021 971,962 936,912C900,861 846,822 773,795C863,766 932,718 979,653C1026,588 1049,510 1049,419C1049,294 1005,188 916,103C827,18 711,-25 566,-25C421,-25 305,18 216,104C127,189 83,296 83,424C83,519 107,599 156,664C204,728 273,772 362,795M326,1100C326,1031 348,974 393,930C438,886 496,864 567,864C636,864 693,886 738,930C782,973 804,1027 804,1090C804,1156 781,1212 736,1257C690,1302 633,1324 565,1324C496,1324 439,1302 394,1258C349,1214 326,1161 326,1100M268,423C268,372 280,322 305,274C329,226 365,189 413,163C461,136 513,123 568,123C654,123 725,151 781,206C837,261 865,332 865,417C865,504 836,575 779,632C721,689 649,717 562,717C477,717 407,689 352,633C296,577 268,507 268,423z"/>
|
<glyph unicode="8" horiz-adv-x="1139" d="M362,795C287,822 232,861 196,912C160,963 142,1023 142,1094C142,1201 180,1290 257,1363C334,1436 436,1472 563,1472C691,1472 794,1435 872,1361C950,1286 989,1196 989,1089C989,1021 971,962 936,912C900,861 846,822 773,795C863,766 932,718 979,653C1026,588 1049,510 1049,419C1049,294 1005,188 916,103C827,18 711,-25 566,-25C421,-25 305,18 216,104C127,189 83,296 83,424C83,519 107,599 156,664C204,728 273,772 362,795M326,1100C326,1031 348,974 393,930C438,886 496,864 567,864C636,864 693,886 738,930C782,973 804,1027 804,1090C804,1156 781,1212 736,1257C690,1302 633,1324 565,1324C496,1324 439,1302 394,1258C349,1214 326,1161 326,1100M268,423C268,372 280,322 305,274C329,226 365,189 413,163C461,136 513,123 568,123C654,123 725,151 781,206C837,261 865,332 865,417C865,504 836,575 779,632C721,689 649,717 562,717C477,717 407,689 352,633C296,577 268,507 268,423z"/>
|
||||||
<glyph unicode="B" horiz-adv-x="1366" d="M150,0l0,1466l550,0C812,1466 902,1451 970,1422C1037,1392 1090,1346 1129,1285C1167,1223 1186,1158 1186,1091C1186,1028 1169,969 1135,914C1101,859 1050,814 981,780C1070,754 1138,710 1186,647C1233,584 1257,510 1257,425C1257,356 1243,293 1214,234C1185,175 1149,129 1106,97C1063,65 1010,41 946,25C881,8 802,0 709,0M344,850l317,0C747,850 809,856 846,867C895,882 933,906 958,940C983,974 995,1017 995,1068C995,1117 983,1160 960,1197C937,1234 903,1259 860,1273C817,1286 742,1293 637,1293l-293,0M344,173l365,0C772,173 816,175 841,180C886,188 923,201 953,220C983,239 1008,266 1027,302C1046,337 1056,378 1056,425C1056,480 1042,527 1014,568C986,608 947,636 898,653C848,669 776,677 683,677l-339,0z"/>
|
<glyph unicode="B" horiz-adv-x="1366" d="M150,0l0,1466l550,0C812,1466 902,1451 970,1422C1037,1392 1090,1346 1129,1285C1167,1223 1186,1158 1186,1091C1186,1028 1169,969 1135,914C1101,859 1050,814 981,780C1070,754 1138,710 1186,647C1233,584 1257,510 1257,425C1257,356 1243,293 1214,234C1185,175 1149,129 1106,97C1063,65 1010,41 946,25C881,8 802,0 709,0M344,850l317,0C747,850 809,856 846,867C895,882 933,906 958,940C983,974 995,1017 995,1068C995,1117 983,1160 960,1197C937,1234 903,1259 860,1273C817,1286 742,1293 637,1293l-293,0M344,173l365,0C772,173 816,175 841,180C886,188 923,201 953,220C983,239 1008,266 1027,302C1046,337 1056,378 1056,425C1056,480 1042,527 1014,568C986,608 947,636 898,653C848,669 776,677 683,677l-339,0z"/>
|
||||||
<glyph unicode="C" horiz-adv-x="1479" d="M1204,514l194,-49C1357,306 1284,184 1179,101C1073,17 944,-25 791,-25C633,-25 505,7 406,72C307,136 231,229 180,351C128,473 102,604 102,744C102,897 131,1030 190,1144C248,1257 331,1344 439,1403C546,1462 665,1491 794,1491C941,1491 1064,1454 1164,1379C1264,1304 1334,1199 1373,1064l-191,-45C1148,1126 1099,1203 1034,1252C969,1301 888,1325 790,1325C677,1325 583,1298 508,1244C432,1190 379,1118 348,1027C317,936 302,842 302,745C302,620 320,512 357,419C393,326 449,256 526,210C603,164 686,141 775,141C884,141 976,172 1051,235C1126,298 1177,391 1204,514z"/>
|
<glyph unicode="C" horiz-adv-x="1479" d="M1204,514l194,-49C1357,306 1284,184 1179,101C1073,17 944,-25 791,-25C633,-25 505,7 406,72C307,136 231,229 180,351C128,473 102,604 102,744C102,897 131,1030 190,1144C248,1257 331,1344 439,1403C546,1462 665,1491 794,1491C941,1491 1064,1454 1164,1379C1264,1304 1334,1199 1373,1064l-191,-45C1148,1126 1099,1203 1034,1252C969,1301 888,1325 790,1325C677,1325 583,1298 508,1244C432,1190 379,1118 348,1027C317,936 302,842 302,745C302,620 320,512 357,419C393,326 449,256 526,210C603,164 686,141 775,141C884,141 976,172 1051,235C1126,298 1177,391 1204,514z"/>
|
||||||
<glyph unicode="D" horiz-adv-x="1479" d="M158,0l0,1466l505,0C777,1466 864,1459 924,1445C1008,1426 1080,1391 1139,1340C1216,1275 1274,1191 1313,1090C1351,988 1370,872 1370,741C1370,630 1357,531 1331,445C1305,359 1272,288 1231,232C1190,175 1146,131 1098,99C1049,66 991,42 923,25C854,8 776,0 687,0M352,173l313,0C762,173 838,182 893,200C948,218 991,243 1024,276C1070,322 1106,384 1132,462C1157,539 1170,633 1170,744C1170,897 1145,1015 1095,1098C1044,1180 983,1235 911,1263C859,1283 775,1293 660,1293l-308,0z"/>
|
<glyph unicode="D" horiz-adv-x="1479" d="M158,0l0,1466l505,0C777,1466 864,1459 924,1445C1008,1426 1080,1391 1139,1340C1216,1275 1274,1191 1313,1090C1351,988 1370,872 1370,741C1370,630 1357,531 1331,445C1305,359 1272,288 1231,232C1190,175 1146,131 1098,99C1049,66 991,42 923,25C854,8 776,0 687,0M352,173l313,0C762,173 838,182 893,200C948,218 991,243 1024,276C1070,322 1106,384 1132,462C1157,539 1170,633 1170,744C1170,897 1145,1015 1095,1098C1044,1180 983,1235 911,1263C859,1283 775,1293 660,1293l-308,0z"/>
|
||||||
<glyph unicode="I" horiz-adv-x="569" d="M191,0l0,1466l194,0l0,-1466z"/>
|
<glyph unicode="I" horiz-adv-x="569" d="M191,0l0,1466l194,0l0,-1466z"/>
|
||||||
<glyph unicode="L" horiz-adv-x="1139" d="M150,0l0,1466l194,0l0,-1293l722,0l0,-173z"/>
|
<glyph unicode="L" horiz-adv-x="1139" d="M150,0l0,1466l194,0l0,-1293l722,0l0,-173z"/>
|
||||||
<glyph unicode="P" horiz-adv-x="1366" d="M158,0l0,1466l553,0C808,1466 883,1461 934,1452C1006,1440 1066,1417 1115,1384C1164,1350 1203,1303 1233,1242C1262,1181 1277,1115 1277,1042C1277,917 1237,812 1158,726C1079,639 935,596 728,596l-376,0l0,-596M352,769l379,0C856,769 945,792 998,839C1051,886 1077,951 1077,1036C1077,1097 1062,1150 1031,1194C1000,1237 959,1266 908,1280C875,1289 815,1293 727,1293l-375,0z"/>
|
<glyph unicode="P" horiz-adv-x="1366" d="M158,0l0,1466l553,0C808,1466 883,1461 934,1452C1006,1440 1066,1417 1115,1384C1164,1350 1203,1303 1233,1242C1262,1181 1277,1115 1277,1042C1277,917 1237,812 1158,726C1079,639 935,596 728,596l-376,0l0,-596M352,769l379,0C856,769 945,792 998,839C1051,886 1077,951 1077,1036C1077,1097 1062,1150 1031,1194C1000,1237 959,1266 908,1280C875,1289 815,1293 727,1293l-375,0z"/>
|
||||||
<glyph unicode="S" horiz-adv-x="1366" d="M92,471l183,16C284,414 304,354 336,307C367,260 416,222 483,193C550,164 625,149 708,149C782,149 847,160 904,182C961,204 1003,234 1031,273C1058,311 1072,353 1072,398C1072,444 1059,484 1032,519C1005,553 961,582 900,605C861,620 774,644 639,677C504,709 410,739 356,768C286,805 234,850 200,905C165,959 148,1020 148,1087C148,1161 169,1230 211,1295C253,1359 314,1408 395,1441C476,1474 565,1491 664,1491C773,1491 869,1474 952,1439C1035,1404 1098,1352 1143,1284C1188,1216 1212,1139 1215,1053l-186,-14C1019,1132 985,1202 928,1249C870,1296 785,1320 672,1320C555,1320 469,1299 416,1256C362,1213 335,1161 335,1100C335,1047 354,1004 392,970C429,936 527,901 685,866C842,830 950,799 1009,772C1094,733 1157,683 1198,623C1239,562 1259,493 1259,414C1259,336 1237,263 1192,194C1147,125 1083,71 1000,33C916,-6 822,-25 717,-25C584,-25 473,-6 384,33C294,72 224,130 173,208C122,285 95,373 92,471z"/>
|
<glyph unicode="S" horiz-adv-x="1366" d="M92,471l183,16C284,414 304,354 336,307C367,260 416,222 483,193C550,164 625,149 708,149C782,149 847,160 904,182C961,204 1003,234 1031,273C1058,311 1072,353 1072,398C1072,444 1059,484 1032,519C1005,553 961,582 900,605C861,620 774,644 639,677C504,709 410,739 356,768C286,805 234,850 200,905C165,959 148,1020 148,1087C148,1161 169,1230 211,1295C253,1359 314,1408 395,1441C476,1474 565,1491 664,1491C773,1491 869,1474 952,1439C1035,1404 1098,1352 1143,1284C1188,1216 1212,1139 1215,1053l-186,-14C1019,1132 985,1202 928,1249C870,1296 785,1320 672,1320C555,1320 469,1299 416,1256C362,1213 335,1161 335,1100C335,1047 354,1004 392,970C429,936 527,901 685,866C842,830 950,799 1009,772C1094,733 1157,683 1198,623C1239,562 1259,493 1259,414C1259,336 1237,263 1192,194C1147,125 1083,71 1000,33C916,-6 822,-25 717,-25C584,-25 473,-6 384,33C294,72 224,130 173,208C122,285 95,373 92,471z"/>
|
||||||
<glyph unicode="T" horiz-adv-x="1251" d="M531,0l0,1293l-483,0l0,173l1162,0l0,-173l-485,0l0,-1293z"/>
|
<glyph unicode="T" horiz-adv-x="1251" d="M531,0l0,1293l-483,0l0,173l1162,0l0,-173l-485,0l0,-1293z"/>
|
||||||
<glyph unicode="U" horiz-adv-x="1479" d="M1120,1466l194,0l0,-847C1314,472 1297,355 1264,268C1231,181 1171,111 1084,57C997,2 882,-25 741,-25C604,-25 491,-1 404,46C317,93 254,162 217,252C180,341 161,464 161,619l0,847l194,0l0,-846C355,493 367,399 391,339C414,278 455,232 513,199C570,166 641,150 724,150C867,150 968,182 1029,247C1090,312 1120,436 1120,620z"/>
|
<glyph unicode="U" horiz-adv-x="1479" d="M1120,1466l194,0l0,-847C1314,472 1297,355 1264,268C1231,181 1171,111 1084,57C997,2 882,-25 741,-25C604,-25 491,-1 404,46C317,93 254,162 217,252C180,341 161,464 161,619l0,847l194,0l0,-846C355,493 367,399 391,339C414,278 455,232 513,199C570,166 641,150 724,150C867,150 968,182 1029,247C1090,312 1120,436 1120,620z"/>
|
||||||
<glyph unicode="X" horiz-adv-x="1366" d="M9,0l567,764l-500,702l231,0l266,-376C628,1012 668,952 691,910C724,963 762,1019 807,1077l295,389l211,0l-515,-691l555,-775l-240,0l-369,523C723,553 702,586 680,621C647,568 624,531 610,511l-368,-511z"/>
|
<glyph unicode="X" horiz-adv-x="1366" d="M9,0l567,764l-500,702l231,0l266,-376C628,1012 668,952 691,910C724,963 762,1019 807,1077l295,389l211,0l-515,-691l555,-775l-240,0l-369,523C723,553 702,586 680,621C647,568 624,531 610,511l-368,-511z"/>
|
||||||
</font>
|
</font>
|
||||||
|
|
||||||
<rect x="7.465" y="10.627" fill="#A0A0A0" stroke="#000000" width="80.473" height="80.473"/>
|
<rect x="7.465" y="10.627" fill="#A0A0A0" stroke="#000000" width="80.473" height="80.473"/>
|
||||||
<rect x="150.491" y="10.923" fill="#A0A0A0" stroke="#000000" width="80.474" height="80.178"/>
|
<rect x="150.491" y="10.923" fill="#A0A0A0" stroke="#000000" width="80.474" height="80.178"/>
|
||||||
<rect x="8.479" y="129.379" fill="#A0A0A0" stroke="#000000" width="80.473" height="80.473"/>
|
<rect x="8.479" y="129.379" fill="#A0A0A0" stroke="#000000" width="80.473" height="80.473"/>
|
||||||
<rect x="150.491" y="129.674" fill="#A0A0A0" stroke="#000000" width="80.474" height="80.178"/>
|
<rect x="150.491" y="129.674" fill="#A0A0A0" stroke="#000000" width="80.474" height="80.178"/>
|
||||||
<rect x="8.479" y="241.805" fill="#A0A0A0" stroke="#000000" width="80.473" height="80.473"/>
|
<rect x="8.479" y="241.805" fill="#A0A0A0" stroke="#000000" width="80.473" height="80.473"/>
|
||||||
<rect x="150.491" y="242.1" fill="#A0A0A0" stroke="#000000" width="80.474" height="80.177"/>
|
<rect x="150.491" y="242.1" fill="#A0A0A0" stroke="#000000" width="80.474" height="80.177"/>
|
||||||
<line fill="none" stroke="#000000" x1="48.716" y1="91.101" x2="48.716" y2="129.379"/>
|
<line fill="none" stroke="#000000" x1="48.716" y1="91.101" x2="48.716" y2="129.379"/>
|
||||||
<line fill="none" stroke="#000000" x1="88.953" y1="50.864" x2="150.491" y2="51.012"/>
|
<line fill="none" stroke="#000000" x1="88.953" y1="50.864" x2="150.491" y2="51.012"/>
|
||||||
<line fill="none" stroke="#000000" x1="88.953" y1="169.763" x2="150.491" y2="169.763"/>
|
<line fill="none" stroke="#000000" x1="88.953" y1="169.763" x2="150.491" y2="169.763"/>
|
||||||
<line fill="none" stroke="#000000" x1="190.729" y1="91.101" x2="190.729" y2="129.379"/>
|
<line fill="none" stroke="#000000" x1="190.729" y1="91.101" x2="190.729" y2="129.379"/>
|
||||||
<line fill="none" stroke="#000000" x1="48.716" y1="209.852" x2="48.716" y2="241.805"/>
|
<line fill="none" stroke="#000000" x1="48.716" y1="209.852" x2="48.716" y2="241.805"/>
|
||||||
<line fill="none" stroke="#000000" x1="88.953" y1="282.189" x2="150.491" y2="282.189"/>
|
<line fill="none" stroke="#000000" x1="88.953" y1="282.189" x2="150.491" y2="282.189"/>
|
||||||
<text transform="matrix(1 0 0 1 23.6948 57.3003)" font-family="'ArialMT'" font-size="18">CPU2</text>
|
<text transform="matrix(1 0 0 1 23.6948 57.3003)" font-family="'ArialMT'" font-size="18">CPU2</text>
|
||||||
<text transform="matrix(1 0 0 1 22.3374 174.46)" font-family="'ArialMT'" font-size="18">CPU0</text>
|
<text transform="matrix(1 0 0 1 22.3374 174.46)" font-family="'ArialMT'" font-size="18">CPU0</text>
|
||||||
<text transform="matrix(1 0 0 1 169.082 55.1167)" font-family="'ArialMT'" font-size="18">CPU3</text>
|
<text transform="matrix(1 0 0 1 169.082 55.1167)" font-family="'ArialMT'" font-size="18">CPU3</text>
|
||||||
<text transform="matrix(1 0 0 1 169.082 175.8271)" font-family="'ArialMT'" font-size="18">CPU1</text>
|
<text transform="matrix(1 0 0 1 169.082 175.8271)" font-family="'ArialMT'" font-size="18">CPU1</text>
|
||||||
<text transform="matrix(1 0 0 1 22.6807 277.1895)"><tspan x="0" y="0" font-family="'ArialMT'" font-size="18">PCI-X</tspan><tspan x="0" y="21.601" font-family="'ArialMT'" font-size="18">(8131)</tspan></text>
|
<text transform="matrix(1 0 0 1 22.6807 277.1895)"><tspan x="0" y="0" font-family="'ArialMT'" font-size="18">PCI-X</tspan><tspan x="0" y="21.601" font-family="'ArialMT'" font-size="18">(8131)</tspan></text>
|
||||||
<text transform="matrix(1 0 0 1 169.082 275.1895)"><tspan x="0" y="0" font-family="'ArialMT'" font-size="18"> SB</tspan><tspan x="0" y="21.6" font-family="'ArialMT'" font-size="18">(8111)</tspan></text>
|
<text transform="matrix(1 0 0 1 169.082 275.1895)"><tspan x="0" y="0" font-family="'ArialMT'" font-size="18"> SB</tspan><tspan x="0" y="21.6" font-family="'ArialMT'" font-size="18">(8111)</tspan></text>
|
||||||
<text transform="matrix(1 0 0 1 93.0947 63.8721)" font-family="'ArialMT'" font-size="10">LDT1</text>
|
<text transform="matrix(1 0 0 1 93.0947 63.8721)" font-family="'ArialMT'" font-size="10">LDT1</text>
|
||||||
<text transform="matrix(1 0 0 1 124.5088 46.7715)" font-family="'ArialMT'" font-size="10">LDT1</text>
|
<text transform="matrix(1 0 0 1 124.5088 46.7715)" font-family="'ArialMT'" font-size="10">LDT1</text>
|
||||||
<text transform="matrix(1 0 0 1 196.6982 102.9844)" font-family="'ArialMT'" font-size="10">LDT0</text>
|
<text transform="matrix(1 0 0 1 196.6982 102.9844)" font-family="'ArialMT'" font-size="10">LDT0</text>
|
||||||
<text transform="matrix(1 0 0 1 161.1953 126.0615)" font-family="'ArialMT'" font-size="10">LDT1</text>
|
<text transform="matrix(1 0 0 1 161.1953 126.0615)" font-family="'ArialMT'" font-size="10">LDT1</text>
|
||||||
<text transform="matrix(1 0 0 1 22.3374 126.0615)" font-family="'ArialMT'" font-size="10">LDT2</text>
|
<text transform="matrix(1 0 0 1 22.3374 126.0615)" font-family="'ArialMT'" font-size="10">LDT2</text>
|
||||||
<text transform="matrix(1 0 0 1 55.2783 103.5767)" font-family="'ArialMT'" font-size="10">LDT0</text>
|
<text transform="matrix(1 0 0 1 55.2783 103.5767)" font-family="'ArialMT'" font-size="10">LDT0</text>
|
||||||
<text transform="matrix(1 0 0 1 52.9111 221.3276)" font-family="'ArialMT'" font-size="10">LDT0</text>
|
<text transform="matrix(1 0 0 1 52.9111 221.3276)" font-family="'ArialMT'" font-size="10">LDT0</text>
|
||||||
<text transform="matrix(1 0 0 1 93.0947 181.6719)" font-family="'ArialMT'" font-size="10">LDT1</text>
|
<text transform="matrix(1 0 0 1 93.0947 181.6719)" font-family="'ArialMT'" font-size="10">LDT1</text>
|
||||||
<text transform="matrix(1 0 0 1 124.5088 166.2979)" font-family="'ArialMT'" font-size="10">LDT0</text>
|
<text transform="matrix(1 0 0 1 124.5088 166.2979)" font-family="'ArialMT'" font-size="10">LDT0</text>
|
||||||
<ellipse fill="#FF0606" cx="150.491" cy="51.012" rx="4.438" ry="4.563"/>
|
<ellipse fill="#FF0606" cx="150.491" cy="51.012" rx="4.438" ry="4.563"/>
|
||||||
<ellipse fill="#FF0606" cx="88.953" cy="169.763" rx="4.438" ry="4.563"/>
|
<ellipse fill="#FF0606" cx="88.953" cy="169.763" rx="4.438" ry="4.563"/>
|
||||||
<ellipse fill="#FF0606" cx="190.729" cy="129.379" rx="4.438" ry="4.563"/>
|
<ellipse fill="#FF0606" cx="190.729" cy="129.379" rx="4.438" ry="4.563"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
File diff suppressed because it is too large
Load Diff
@ -94,7 +94,7 @@ uses SB_HT_CHAIN_UNITID_OFFSET_ONLY
|
|||||||
uses SB_HT_CHAIN_ON_BUS0
|
uses SB_HT_CHAIN_ON_BUS0
|
||||||
uses CONFIG_COMPRESSED_PAYLOAD_NRV2B
|
uses CONFIG_COMPRESSED_PAYLOAD_NRV2B
|
||||||
uses CONFIG_COMPRESSED_PAYLOAD_LZMA
|
uses CONFIG_COMPRESSED_PAYLOAD_LZMA
|
||||||
uses CONFIG_USE_PRINTK_IN_CAR
|
uses CONFIG_USE_PRINTK_IN_CAR
|
||||||
|
|
||||||
default ROM_SIZE = 512 * 1024
|
default ROM_SIZE = 512 * 1024
|
||||||
default FALLBACK_SIZE = 256 * 1024
|
default FALLBACK_SIZE = 256 * 1024
|
||||||
|
@ -1,48 +1,48 @@
|
|||||||
/* This file was generated by getpir.c, do not modify!
|
/* This file was generated by getpir.c, do not modify!
|
||||||
(but if you do, please run checkpir on it to verify)
|
(but if you do, please run checkpir on it to verify)
|
||||||
* Contains the IRQ Routing Table dumped directly from your memory, which BIOS sets up
|
* Contains the IRQ Routing Table dumped directly from your memory, which BIOS sets up
|
||||||
*
|
*
|
||||||
* Documentation at : http://www.microsoft.com/hwdev/busbios/PCIIRQ.HTM
|
* Documentation at : http://www.microsoft.com/hwdev/busbios/PCIIRQ.HTM
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <arch/pirq_routing.h>
|
#include <arch/pirq_routing.h>
|
||||||
|
|
||||||
const struct irq_routing_table intel_irq_routing_table = {
|
const struct irq_routing_table intel_irq_routing_table = {
|
||||||
PIRQ_SIGNATURE, /* u32 signature */
|
PIRQ_SIGNATURE, /* u32 signature */
|
||||||
PIRQ_VERSION, /* u16 version */
|
PIRQ_VERSION, /* u16 version */
|
||||||
32+16*17, /* there can be total 17 devices on the bus */
|
32+16*17, /* there can be total 17 devices on the bus */
|
||||||
0x00, /* Where the interrupt router lies (bus) */
|
0x00, /* Where the interrupt router lies (bus) */
|
||||||
(0x1f<<3)|0x0, /* Where the interrupt router lies (dev) */
|
(0x1f<<3)|0x0, /* Where the interrupt router lies (dev) */
|
||||||
0, /* IRQs devoted exclusively to PCI usage */
|
0, /* IRQs devoted exclusively to PCI usage */
|
||||||
0x8086, /* Vendor */
|
0x8086, /* Vendor */
|
||||||
0x24d0, /* Device */
|
0x24d0, /* Device */
|
||||||
0, /* Crap (miniport) */
|
0, /* Crap (miniport) */
|
||||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */
|
||||||
0xc4, /* u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */
|
0xc4, /* u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */
|
||||||
{
|
{
|
||||||
/* bus, dev|fn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */
|
/* bus, dev|fn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */
|
||||||
{0x00,(0x02<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x00,(0x02<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x00,(0x04<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x00,(0x04<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x00,(0x05<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x00,(0x05<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x00,(0x06<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x00,(0x06<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x05,(0x00<<3)|0x0, {{0x60, 0xccf8}, {0x61, 0xccf8}, {0x62, 0xccf8}, {0x63, 0x0ccf8}}, 0x0, 0x0},
|
{0x05,(0x00<<3)|0x0, {{0x60, 0xccf8}, {0x61, 0xccf8}, {0x62, 0xccf8}, {0x63, 0x0ccf8}}, 0x0, 0x0},
|
||||||
{0x01,(0x00<<3)|0x0, {{0x60, 0xccf8}, {0x61, 0xccf8}, {0x62, 0xccf8}, {0x63, 0x0ccf8}}, 0x0, 0x0},
|
{0x01,(0x00<<3)|0x0, {{0x60, 0xccf8}, {0x61, 0xccf8}, {0x62, 0xccf8}, {0x63, 0x0ccf8}}, 0x0, 0x0},
|
||||||
{0x00,(0x1d<<3)|0x0, {{0x60, 0xccf8}, {0x63, 0xccf8}, {0x62, 0xccf8}, {0x6b, 0x0ccf8}}, 0x0, 0x0},
|
{0x00,(0x1d<<3)|0x0, {{0x60, 0xccf8}, {0x63, 0xccf8}, {0x62, 0xccf8}, {0x6b, 0x0ccf8}}, 0x0, 0x0},
|
||||||
{0x09,(0x05<<3)|0x0, {{0x68, 0xccf8}, {0x69, 0xccf8}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x09,(0x05<<3)|0x0, {{0x68, 0xccf8}, {0x69, 0xccf8}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x09,(0x06<<3)|0x0, {{0x6b, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x09,(0x06<<3)|0x0, {{0x6b, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x09,(0x0d<<3)|0x0, {{0x62, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x09,(0x0d<<3)|0x0, {{0x62, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x09,(0x03<<3)|0x0, {{0x63, 0xccf8}, {0x63, 0xccf8}, {0x63, 0xccf8}, {0x63, 0x0ccf8}}, 0x0, 0x0},
|
{0x09,(0x03<<3)|0x0, {{0x63, 0xccf8}, {0x63, 0xccf8}, {0x63, 0xccf8}, {0x63, 0x0ccf8}}, 0x0, 0x0},
|
||||||
{0x06,(0x07<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x06,(0x07<<3)|0x0, {{0x60, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x07,(0x08<<3)|0x0, {{0x61, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x07,(0x08<<3)|0x0, {{0x61, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x02,(0x05<<3)|0x0, {{0x62, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x02,(0x05<<3)|0x0, {{0x62, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
{0x04,(0x00<<3)|0x0, {{0x60, 0xccf8}, {0x61, 0xccf8}, {0x62, 0xccf8}, {0x63, 0x0ccf8}}, 0x1, 0x0},
|
{0x04,(0x00<<3)|0x0, {{0x60, 0xccf8}, {0x61, 0xccf8}, {0x62, 0xccf8}, {0x63, 0x0ccf8}}, 0x1, 0x0},
|
||||||
{0x08,(0x00<<3)|0x0, {{0x60, 0xccf8}, {0x61, 0xccf8}, {0x62, 0xccf8}, {0x63, 0x0ccf8}}, 0x2, 0x0},
|
{0x08,(0x00<<3)|0x0, {{0x60, 0xccf8}, {0x61, 0xccf8}, {0x62, 0xccf8}, {0x63, 0x0ccf8}}, 0x2, 0x0},
|
||||||
{0x02,(0x0e<<3)|0x0, {{0x62, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
{0x02,(0x0e<<3)|0x0, {{0x62, 0xccf8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned long write_pirq_routing_table(unsigned long addr)
|
unsigned long write_pirq_routing_table(unsigned long addr)
|
||||||
{
|
{
|
||||||
return copy_pirq_routing_table(addr);
|
return copy_pirq_routing_table(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ default USE_DCACHE_RAM=1
|
|||||||
default DCACHE_RAM_BASE=0xcc000
|
default DCACHE_RAM_BASE=0xcc000
|
||||||
default DCACHE_RAM_SIZE=0x04000
|
default DCACHE_RAM_SIZE=0x04000
|
||||||
default DCACHE_RAM_GLOBAL_VAR_SIZE=0x01000
|
default DCACHE_RAM_GLOBAL_VAR_SIZE=0x01000
|
||||||
default CONFIG_USE_INIT=0
|
default CONFIG_USE_INIT=0
|
||||||
|
|
||||||
##
|
##
|
||||||
## Build code to setup a generic IOAPIC
|
## Build code to setup a generic IOAPIC
|
||||||
|
@ -100,7 +100,7 @@ uses SB_HT_CHAIN_ON_BUS0
|
|||||||
uses CONFIG_COMPRESSED_PAYLOAD_LZMA
|
uses CONFIG_COMPRESSED_PAYLOAD_LZMA
|
||||||
uses CONFIG_COMPRESSED_PAYLOAD_NRV2B
|
uses CONFIG_COMPRESSED_PAYLOAD_NRV2B
|
||||||
uses CONFIG_PRECOMPRESSED_PAYLOAD
|
uses CONFIG_PRECOMPRESSED_PAYLOAD
|
||||||
uses CONFIG_USE_PRINTK_IN_CAR
|
uses CONFIG_USE_PRINTK_IN_CAR
|
||||||
|
|
||||||
## ROM_SIZE is the size of boot ROM that this board will use.
|
## ROM_SIZE is the size of boot ROM that this board will use.
|
||||||
#512K bytes
|
#512K bytes
|
||||||
@ -265,7 +265,7 @@ default CONFIG_GDB_STUB=0
|
|||||||
## The Serial Console
|
## The Serial Console
|
||||||
##
|
##
|
||||||
default CONFIG_USE_PRINTK_IN_CAR=1
|
default CONFIG_USE_PRINTK_IN_CAR=1
|
||||||
|
|
||||||
# To Enable the Serial Console
|
# To Enable the Serial Console
|
||||||
default CONFIG_CONSOLE_SERIAL8250=1
|
default CONFIG_CONSOLE_SERIAL8250=1
|
||||||
|
|
||||||
|
@ -1,143 +1,143 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the coreboot project.
|
* This file is part of the coreboot project.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008 Joseph Smith <joe@settoplinux.org>
|
* Copyright (C) 2008 Joseph Smith <joe@settoplinux.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PME_DEV PNP_DEV(0x2e, 0x0a)
|
#define PME_DEV PNP_DEV(0x2e, 0x0a)
|
||||||
#define PME_IO_BASE_ADDR 0x800 /* Runtime register base address */
|
#define PME_IO_BASE_ADDR 0x800 /* Runtime register base address */
|
||||||
#define ICH_IO_BASE_ADDR 0x00000500 /* GPIO base address register */
|
#define ICH_IO_BASE_ADDR 0x00000500 /* GPIO base address register */
|
||||||
|
|
||||||
/* Early mainboard specific GPIO setup. */
|
/* Early mainboard specific GPIO setup. */
|
||||||
static void mb_gpio_init(void)
|
static void mb_gpio_init(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev;
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
uint32_t set_gpio;
|
uint32_t set_gpio;
|
||||||
|
|
||||||
/* Southbridge GPIOs. */
|
/* Southbridge GPIOs. */
|
||||||
/* Set the LPC device statically. */
|
/* Set the LPC device statically. */
|
||||||
dev = PCI_DEV(0x0, 0x1f, 0x0);
|
dev = PCI_DEV(0x0, 0x1f, 0x0);
|
||||||
|
|
||||||
/* Set the value for GPIO base address register and enable GPIO. */
|
/* Set the value for GPIO base address register and enable GPIO. */
|
||||||
pci_write_config32(dev, GPIO_BASE_ICH0_5, (ICH_IO_BASE_ADDR | 1));
|
pci_write_config32(dev, GPIO_BASE_ICH0_5, (ICH_IO_BASE_ADDR | 1));
|
||||||
pci_write_config8(dev, GPIO_CNTL_ICH0_5, 0x10);
|
pci_write_config8(dev, GPIO_CNTL_ICH0_5, 0x10);
|
||||||
|
|
||||||
/* Set GPIO23 to high, this enables the LAN controller. */
|
/* Set GPIO23 to high, this enables the LAN controller. */
|
||||||
udelay(10);
|
udelay(10);
|
||||||
set_gpio = inl(ICH_IO_BASE_ADDR + 0x0c);
|
set_gpio = inl(ICH_IO_BASE_ADDR + 0x0c);
|
||||||
set_gpio |= 1 << 23;
|
set_gpio |= 1 << 23;
|
||||||
outl(set_gpio, ICH_IO_BASE_ADDR + 0x0c);
|
outl(set_gpio, ICH_IO_BASE_ADDR + 0x0c);
|
||||||
|
|
||||||
/* Super I/O GPIOs. */
|
/* Super I/O GPIOs. */
|
||||||
dev = PME_DEV;
|
dev = PME_DEV;
|
||||||
port = dev >> 8;
|
port = dev >> 8;
|
||||||
|
|
||||||
/* Enter the configuration state. */
|
/* Enter the configuration state. */
|
||||||
outb(0x55, port);
|
outb(0x55, port);
|
||||||
pnp_set_logical_device(dev);
|
pnp_set_logical_device(dev);
|
||||||
pnp_set_enable(dev, 0);
|
pnp_set_enable(dev, 0);
|
||||||
pnp_set_iobase(dev, PNP_IDX_IO0, PME_IO_BASE_ADDR);
|
pnp_set_iobase(dev, PNP_IDX_IO0, PME_IO_BASE_ADDR);
|
||||||
pnp_set_enable(dev, 1);
|
pnp_set_enable(dev, 1);
|
||||||
|
|
||||||
/* GP21 - LED_RED */
|
/* GP21 - LED_RED */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x2c);
|
outl(0x01, PME_IO_BASE_ADDR + 0x2c);
|
||||||
|
|
||||||
/* GP30 - FAN2_TACH */
|
/* GP30 - FAN2_TACH */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x33);
|
outl(0x05, PME_IO_BASE_ADDR + 0x33);
|
||||||
|
|
||||||
/* GP31 - FAN1_TACH */
|
/* GP31 - FAN1_TACH */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x34);
|
outl(0x05, PME_IO_BASE_ADDR + 0x34);
|
||||||
|
|
||||||
/* GP32 - FAN2_CTRL */
|
/* GP32 - FAN2_CTRL */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x35);
|
outl(0x04, PME_IO_BASE_ADDR + 0x35);
|
||||||
|
|
||||||
/* GP33 - FAN1_CTRL */
|
/* GP33 - FAN1_CTRL */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x36);
|
outl(0x04, PME_IO_BASE_ADDR + 0x36);
|
||||||
|
|
||||||
/* GP34 - AUD_MUTE_OUT_R */
|
/* GP34 - AUD_MUTE_OUT_R */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x37);
|
outl(0x00, PME_IO_BASE_ADDR + 0x37);
|
||||||
|
|
||||||
/* GP36 - KBRST */
|
/* GP36 - KBRST */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x39);
|
outl(0x00, PME_IO_BASE_ADDR + 0x39);
|
||||||
|
|
||||||
/* GP37 - A20GATE */
|
/* GP37 - A20GATE */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x3a);
|
outl(0x00, PME_IO_BASE_ADDR + 0x3a);
|
||||||
|
|
||||||
/* GP42 - GPIO_PME_OUT */
|
/* GP42 - GPIO_PME_OUT */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x3d);
|
outl(0x00, PME_IO_BASE_ADDR + 0x3d);
|
||||||
|
|
||||||
/* GP50 - SER2_RI */
|
/* GP50 - SER2_RI */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x3f);
|
outl(0x05, PME_IO_BASE_ADDR + 0x3f);
|
||||||
|
|
||||||
/* GP51 - SER2_DCD */
|
/* GP51 - SER2_DCD */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x40);
|
outl(0x05, PME_IO_BASE_ADDR + 0x40);
|
||||||
|
|
||||||
/* GP52 - SER2_RX */
|
/* GP52 - SER2_RX */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x41);
|
outl(0x05, PME_IO_BASE_ADDR + 0x41);
|
||||||
|
|
||||||
/* GP53 - SER2_TX */
|
/* GP53 - SER2_TX */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x42);
|
outl(0x04, PME_IO_BASE_ADDR + 0x42);
|
||||||
|
|
||||||
/* GP55 - SER2_RTS */
|
/* GP55 - SER2_RTS */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x44);
|
outl(0x04, PME_IO_BASE_ADDR + 0x44);
|
||||||
|
|
||||||
/* GP56 - SER2_CTS */
|
/* GP56 - SER2_CTS */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x45);
|
outl(0x05, PME_IO_BASE_ADDR + 0x45);
|
||||||
|
|
||||||
/* GP57 - SER2_DTR */
|
/* GP57 - SER2_DTR */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x46);
|
outl(0x04, PME_IO_BASE_ADDR + 0x46);
|
||||||
|
|
||||||
/* GP60 - LED_GREEN */
|
/* GP60 - LED_GREEN */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x47);
|
outl(0x01, PME_IO_BASE_ADDR + 0x47);
|
||||||
|
|
||||||
/* GP61 - LED_YELLOW */
|
/* GP61 - LED_YELLOW */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x48);
|
outl(0x01, PME_IO_BASE_ADDR + 0x48);
|
||||||
|
|
||||||
/* GP3 */
|
/* GP3 */
|
||||||
outl(0xc0, PME_IO_BASE_ADDR + 0x4d);
|
outl(0xc0, PME_IO_BASE_ADDR + 0x4d);
|
||||||
|
|
||||||
/* GP4 */
|
/* GP4 */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x4e);
|
outl(0x04, PME_IO_BASE_ADDR + 0x4e);
|
||||||
|
|
||||||
/* FAN1 */
|
/* FAN1 */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x56);
|
outl(0x01, PME_IO_BASE_ADDR + 0x56);
|
||||||
|
|
||||||
/* FAN2 */
|
/* FAN2 */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x57);
|
outl(0x01, PME_IO_BASE_ADDR + 0x57);
|
||||||
|
|
||||||
/* Fan Control */
|
/* Fan Control */
|
||||||
outl(0x50, PME_IO_BASE_ADDR + 0x58);
|
outl(0x50, PME_IO_BASE_ADDR + 0x58);
|
||||||
|
|
||||||
/* Fan1 Tachometer */
|
/* Fan1 Tachometer */
|
||||||
outl(0xff, PME_IO_BASE_ADDR + 0x59);
|
outl(0xff, PME_IO_BASE_ADDR + 0x59);
|
||||||
|
|
||||||
/* Fan2 Tachometer */
|
/* Fan2 Tachometer */
|
||||||
outl(0xff, PME_IO_BASE_ADDR + 0x5a);
|
outl(0xff, PME_IO_BASE_ADDR + 0x5a);
|
||||||
|
|
||||||
/* LED1 */
|
/* LED1 */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x5d);
|
outl(0x00, PME_IO_BASE_ADDR + 0x5d);
|
||||||
|
|
||||||
/* LED2 */
|
/* LED2 */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x5e);
|
outl(0x00, PME_IO_BASE_ADDR + 0x5e);
|
||||||
|
|
||||||
/* Keyboard Scan Code */
|
/* Keyboard Scan Code */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x5f);
|
outl(0x00, PME_IO_BASE_ADDR + 0x5f);
|
||||||
|
|
||||||
/* Exit the configuration state. */
|
/* Exit the configuration state. */
|
||||||
outb(0xaa, port);
|
outb(0xaa, port);
|
||||||
}
|
}
|
||||||
|
@ -1,143 +1,143 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the coreboot project.
|
* This file is part of the coreboot project.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008 Joseph Smith <joe@settoplinux.org>
|
* Copyright (C) 2008 Joseph Smith <joe@settoplinux.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PME_DEV PNP_DEV(0x2e, 0x0a)
|
#define PME_DEV PNP_DEV(0x2e, 0x0a)
|
||||||
#define PME_IO_BASE_ADDR 0x800 /* Runtime register base address */
|
#define PME_IO_BASE_ADDR 0x800 /* Runtime register base address */
|
||||||
#define ICH_IO_BASE_ADDR 0x00000500 /* GPIO base address register */
|
#define ICH_IO_BASE_ADDR 0x00000500 /* GPIO base address register */
|
||||||
|
|
||||||
/* Early mainboard specific GPIO setup. */
|
/* Early mainboard specific GPIO setup. */
|
||||||
static void mb_gpio_init(void)
|
static void mb_gpio_init(void)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev;
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
uint32_t set_gpio;
|
uint32_t set_gpio;
|
||||||
|
|
||||||
/* Southbridge GPIOs. */
|
/* Southbridge GPIOs. */
|
||||||
/* Set the LPC device statically. */
|
/* Set the LPC device statically. */
|
||||||
dev = PCI_DEV(0x0, 0x1f, 0x0);
|
dev = PCI_DEV(0x0, 0x1f, 0x0);
|
||||||
|
|
||||||
/* Set the value for GPIO base address register and enable GPIO. */
|
/* Set the value for GPIO base address register and enable GPIO. */
|
||||||
pci_write_config32(dev, GPIO_BASE_ICH0_5, (ICH_IO_BASE_ADDR | 1));
|
pci_write_config32(dev, GPIO_BASE_ICH0_5, (ICH_IO_BASE_ADDR | 1));
|
||||||
pci_write_config8(dev, GPIO_CNTL_ICH0_5, 0x10);
|
pci_write_config8(dev, GPIO_CNTL_ICH0_5, 0x10);
|
||||||
|
|
||||||
/* Set GPIO23 to high, this enables the LAN controller. */
|
/* Set GPIO23 to high, this enables the LAN controller. */
|
||||||
udelay(10);
|
udelay(10);
|
||||||
set_gpio = inl(ICH_IO_BASE_ADDR + 0x0c);
|
set_gpio = inl(ICH_IO_BASE_ADDR + 0x0c);
|
||||||
set_gpio |= 1 << 23;
|
set_gpio |= 1 << 23;
|
||||||
outl(set_gpio, ICH_IO_BASE_ADDR + 0x0c);
|
outl(set_gpio, ICH_IO_BASE_ADDR + 0x0c);
|
||||||
|
|
||||||
/* Super I/O GPIOs. */
|
/* Super I/O GPIOs. */
|
||||||
dev = PME_DEV;
|
dev = PME_DEV;
|
||||||
port = dev >> 8;
|
port = dev >> 8;
|
||||||
|
|
||||||
/* Enter the configuration state. */
|
/* Enter the configuration state. */
|
||||||
outb(0x55, port);
|
outb(0x55, port);
|
||||||
pnp_set_logical_device(dev);
|
pnp_set_logical_device(dev);
|
||||||
pnp_set_enable(dev, 0);
|
pnp_set_enable(dev, 0);
|
||||||
pnp_set_iobase(dev, PNP_IDX_IO0, PME_IO_BASE_ADDR);
|
pnp_set_iobase(dev, PNP_IDX_IO0, PME_IO_BASE_ADDR);
|
||||||
pnp_set_enable(dev, 1);
|
pnp_set_enable(dev, 1);
|
||||||
|
|
||||||
/* GP21 - LED_RED */
|
/* GP21 - LED_RED */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x2c);
|
outl(0x01, PME_IO_BASE_ADDR + 0x2c);
|
||||||
|
|
||||||
/* GP30 - FAN2_TACH */
|
/* GP30 - FAN2_TACH */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x33);
|
outl(0x05, PME_IO_BASE_ADDR + 0x33);
|
||||||
|
|
||||||
/* GP31 - FAN1_TACH */
|
/* GP31 - FAN1_TACH */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x34);
|
outl(0x05, PME_IO_BASE_ADDR + 0x34);
|
||||||
|
|
||||||
/* GP32 - FAN2_CTRL */
|
/* GP32 - FAN2_CTRL */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x35);
|
outl(0x04, PME_IO_BASE_ADDR + 0x35);
|
||||||
|
|
||||||
/* GP33 - FAN1_CTRL */
|
/* GP33 - FAN1_CTRL */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x36);
|
outl(0x04, PME_IO_BASE_ADDR + 0x36);
|
||||||
|
|
||||||
/* GP34 - AUD_MUTE_OUT_R */
|
/* GP34 - AUD_MUTE_OUT_R */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x37);
|
outl(0x00, PME_IO_BASE_ADDR + 0x37);
|
||||||
|
|
||||||
/* GP36 - KBRST */
|
/* GP36 - KBRST */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x39);
|
outl(0x00, PME_IO_BASE_ADDR + 0x39);
|
||||||
|
|
||||||
/* GP37 - A20GATE */
|
/* GP37 - A20GATE */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x3a);
|
outl(0x00, PME_IO_BASE_ADDR + 0x3a);
|
||||||
|
|
||||||
/* GP42 - GPIO_PME_OUT */
|
/* GP42 - GPIO_PME_OUT */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x3d);
|
outl(0x00, PME_IO_BASE_ADDR + 0x3d);
|
||||||
|
|
||||||
/* GP50 - SER2_RI */
|
/* GP50 - SER2_RI */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x3f);
|
outl(0x05, PME_IO_BASE_ADDR + 0x3f);
|
||||||
|
|
||||||
/* GP51 - SER2_DCD */
|
/* GP51 - SER2_DCD */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x40);
|
outl(0x05, PME_IO_BASE_ADDR + 0x40);
|
||||||
|
|
||||||
/* GP52 - SER2_RX */
|
/* GP52 - SER2_RX */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x41);
|
outl(0x05, PME_IO_BASE_ADDR + 0x41);
|
||||||
|
|
||||||
/* GP53 - SER2_TX */
|
/* GP53 - SER2_TX */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x42);
|
outl(0x04, PME_IO_BASE_ADDR + 0x42);
|
||||||
|
|
||||||
/* GP55 - SER2_RTS */
|
/* GP55 - SER2_RTS */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x44);
|
outl(0x04, PME_IO_BASE_ADDR + 0x44);
|
||||||
|
|
||||||
/* GP56 - SER2_CTS */
|
/* GP56 - SER2_CTS */
|
||||||
outl(0x05, PME_IO_BASE_ADDR + 0x45);
|
outl(0x05, PME_IO_BASE_ADDR + 0x45);
|
||||||
|
|
||||||
/* GP57 - SER2_DTR */
|
/* GP57 - SER2_DTR */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x46);
|
outl(0x04, PME_IO_BASE_ADDR + 0x46);
|
||||||
|
|
||||||
/* GP60 - LED_GREEN */
|
/* GP60 - LED_GREEN */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x47);
|
outl(0x01, PME_IO_BASE_ADDR + 0x47);
|
||||||
|
|
||||||
/* GP61 - LED_YELLOW */
|
/* GP61 - LED_YELLOW */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x48);
|
outl(0x01, PME_IO_BASE_ADDR + 0x48);
|
||||||
|
|
||||||
/* GP3 */
|
/* GP3 */
|
||||||
outl(0xc0, PME_IO_BASE_ADDR + 0x4d);
|
outl(0xc0, PME_IO_BASE_ADDR + 0x4d);
|
||||||
|
|
||||||
/* GP4 */
|
/* GP4 */
|
||||||
outl(0x04, PME_IO_BASE_ADDR + 0x4e);
|
outl(0x04, PME_IO_BASE_ADDR + 0x4e);
|
||||||
|
|
||||||
/* FAN1 */
|
/* FAN1 */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x56);
|
outl(0x01, PME_IO_BASE_ADDR + 0x56);
|
||||||
|
|
||||||
/* FAN2 */
|
/* FAN2 */
|
||||||
outl(0x01, PME_IO_BASE_ADDR + 0x57);
|
outl(0x01, PME_IO_BASE_ADDR + 0x57);
|
||||||
|
|
||||||
/* Fan Control */
|
/* Fan Control */
|
||||||
outl(0x50, PME_IO_BASE_ADDR + 0x58);
|
outl(0x50, PME_IO_BASE_ADDR + 0x58);
|
||||||
|
|
||||||
/* Fan1 Tachometer */
|
/* Fan1 Tachometer */
|
||||||
outl(0xff, PME_IO_BASE_ADDR + 0x59);
|
outl(0xff, PME_IO_BASE_ADDR + 0x59);
|
||||||
|
|
||||||
/* Fan2 Tachometer */
|
/* Fan2 Tachometer */
|
||||||
outl(0xff, PME_IO_BASE_ADDR + 0x5a);
|
outl(0xff, PME_IO_BASE_ADDR + 0x5a);
|
||||||
|
|
||||||
/* LED1 */
|
/* LED1 */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x5d);
|
outl(0x00, PME_IO_BASE_ADDR + 0x5d);
|
||||||
|
|
||||||
/* LED2 */
|
/* LED2 */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x5e);
|
outl(0x00, PME_IO_BASE_ADDR + 0x5e);
|
||||||
|
|
||||||
/* Keyboard Scan Code */
|
/* Keyboard Scan Code */
|
||||||
outl(0x00, PME_IO_BASE_ADDR + 0x5f);
|
outl(0x00, PME_IO_BASE_ADDR + 0x5f);
|
||||||
|
|
||||||
/* Exit the configuration state. */
|
/* Exit the configuration state. */
|
||||||
outb(0xaa, port);
|
outb(0xaa, port);
|
||||||
}
|
}
|
||||||
|
@ -1,50 +1,50 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the coreboot project.
|
* This file is part of the coreboot project.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2009 Joseph Smith <joe@settoplinux.org>
|
* Copyright (C) 2009 Joseph Smith <joe@settoplinux.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
#include <device/pci.h>
|
#include <device/pci.h>
|
||||||
#include <device/pci_ids.h>
|
#include <device/pci_ids.h>
|
||||||
|
|
||||||
static void vga_init(device_t dev) {
|
static void vga_init(device_t dev) {
|
||||||
|
|
||||||
printk_info("Starting Graphics Initialization\n");
|
printk_info("Starting Graphics Initialization\n");
|
||||||
pci_dev_init(dev);
|
pci_dev_init(dev);
|
||||||
printk_info("Graphics Initialization Complete\n");
|
printk_info("Graphics Initialization Complete\n");
|
||||||
/* Future TV-OUT code will be called from here. */
|
/* Future TV-OUT code will be called from here. */
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct device_operations vga_operations = {
|
static const struct device_operations vga_operations = {
|
||||||
.read_resources = pci_dev_read_resources,
|
.read_resources = pci_dev_read_resources,
|
||||||
.set_resources = pci_dev_set_resources,
|
.set_resources = pci_dev_set_resources,
|
||||||
.enable_resources = pci_dev_enable_resources,
|
.enable_resources = pci_dev_enable_resources,
|
||||||
.init = vga_init,
|
.init = vga_init,
|
||||||
.scan_bus = 0,
|
.scan_bus = 0,
|
||||||
.enable = 0,
|
.enable = 0,
|
||||||
.ops_pci = 0,
|
.ops_pci = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct pci_driver vga_driver __pci_driver = {
|
static const struct pci_driver vga_driver __pci_driver = {
|
||||||
.ops = &vga_operations,
|
.ops = &vga_operations,
|
||||||
.vendor = PCI_VENDOR_ID_INTEL,
|
.vendor = PCI_VENDOR_ID_INTEL,
|
||||||
.device = 0x3577,
|
.device = 0x3577,
|
||||||
};
|
};
|
||||||
|
@ -1,30 +1,30 @@
|
|||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
#include <device/pci.h>
|
#include <device/pci.h>
|
||||||
#include <device/pci_ids.h>
|
#include <device/pci_ids.h>
|
||||||
#include <device/pci_ops.h>
|
#include <device/pci_ops.h>
|
||||||
#include "i82801ca.h"
|
#include "i82801ca.h"
|
||||||
|
|
||||||
static void pci_init(struct device *dev)
|
static void pci_init(struct device *dev)
|
||||||
{
|
{
|
||||||
// NOTE: the original (v1) 'CA code set these in the bridge register (0x3E-3F)
|
// NOTE: the original (v1) 'CA code set these in the bridge register (0x3E-3F)
|
||||||
/* Enable pci error detecting */
|
/* Enable pci error detecting */
|
||||||
uint32_t dword = pci_read_config32(dev, PCI_COMMAND);
|
uint32_t dword = pci_read_config32(dev, PCI_COMMAND);
|
||||||
dword |= (PCI_COMMAND_SERR | PCI_COMMAND_PARITY);
|
dword |= (PCI_COMMAND_SERR | PCI_COMMAND_PARITY);
|
||||||
pci_write_config32(dev, PCI_COMMAND, dword);
|
pci_write_config32(dev, PCI_COMMAND, dword);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct device_operations pci_ops = {
|
static struct device_operations pci_ops = {
|
||||||
.read_resources = pci_bus_read_resources,
|
.read_resources = pci_bus_read_resources,
|
||||||
.set_resources = pci_dev_set_resources,
|
.set_resources = pci_dev_set_resources,
|
||||||
.enable_resources = pci_bus_enable_resources,
|
.enable_resources = pci_bus_enable_resources,
|
||||||
.init = pci_init,
|
.init = pci_init,
|
||||||
.scan_bus = pci_scan_bridge,
|
.scan_bus = pci_scan_bridge,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct pci_driver pci_driver __pci_driver = {
|
static const struct pci_driver pci_driver __pci_driver = {
|
||||||
.ops = &pci_ops,
|
.ops = &pci_ops,
|
||||||
.vendor = PCI_VENDOR_ID_INTEL,
|
.vendor = PCI_VENDOR_ID_INTEL,
|
||||||
.device = PCI_DEVICE_ID_INTEL_82801CA_PCI,
|
.device = PCI_DEVICE_ID_INTEL_82801CA_PCI,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
0.1
|
0.1
|
||||||
|
@ -1,76 +1,76 @@
|
|||||||
// InBuffer.h
|
// InBuffer.h
|
||||||
|
|
||||||
#ifndef __INBUFFER_H
|
#ifndef __INBUFFER_H
|
||||||
#define __INBUFFER_H
|
#define __INBUFFER_H
|
||||||
|
|
||||||
#include "../IStream.h"
|
#include "../IStream.h"
|
||||||
#include "../../Common/MyCom.h"
|
#include "../../Common/MyCom.h"
|
||||||
|
|
||||||
#ifndef _NO_EXCEPTIONS
|
#ifndef _NO_EXCEPTIONS
|
||||||
class CInBufferException
|
class CInBufferException
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HRESULT ErrorCode;
|
HRESULT ErrorCode;
|
||||||
CInBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
|
CInBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class CInBuffer
|
class CInBuffer
|
||||||
{
|
{
|
||||||
Byte *_buffer;
|
Byte *_buffer;
|
||||||
Byte *_bufferLimit;
|
Byte *_bufferLimit;
|
||||||
Byte *_bufferBase;
|
Byte *_bufferBase;
|
||||||
CMyComPtr<ISequentialInStream> _stream;
|
CMyComPtr<ISequentialInStream> _stream;
|
||||||
UInt64 _processedSize;
|
UInt64 _processedSize;
|
||||||
UInt32 _bufferSize;
|
UInt32 _bufferSize;
|
||||||
bool _wasFinished;
|
bool _wasFinished;
|
||||||
|
|
||||||
bool ReadBlock();
|
bool ReadBlock();
|
||||||
Byte ReadBlock2();
|
Byte ReadBlock2();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
#ifdef _NO_EXCEPTIONS
|
#ifdef _NO_EXCEPTIONS
|
||||||
HRESULT ErrorCode;
|
HRESULT ErrorCode;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CInBuffer();
|
CInBuffer();
|
||||||
~CInBuffer() { Free(); }
|
~CInBuffer() { Free(); }
|
||||||
|
|
||||||
bool Create(UInt32 bufferSize);
|
bool Create(UInt32 bufferSize);
|
||||||
void Free();
|
void Free();
|
||||||
|
|
||||||
void SetStream(ISequentialInStream *stream);
|
void SetStream(ISequentialInStream *stream);
|
||||||
void Init();
|
void Init();
|
||||||
void ReleaseStream() { _stream.Release(); }
|
void ReleaseStream() { _stream.Release(); }
|
||||||
|
|
||||||
bool ReadByte(Byte &b)
|
bool ReadByte(Byte &b)
|
||||||
{
|
{
|
||||||
if(_buffer >= _bufferLimit)
|
if(_buffer >= _bufferLimit)
|
||||||
if(!ReadBlock())
|
if(!ReadBlock())
|
||||||
return false;
|
return false;
|
||||||
b = *_buffer++;
|
b = *_buffer++;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
Byte ReadByte()
|
Byte ReadByte()
|
||||||
{
|
{
|
||||||
if(_buffer >= _bufferLimit)
|
if(_buffer >= _bufferLimit)
|
||||||
return ReadBlock2();
|
return ReadBlock2();
|
||||||
return *_buffer++;
|
return *_buffer++;
|
||||||
}
|
}
|
||||||
void ReadBytes(void *data, UInt32 size, UInt32 &processedSize)
|
void ReadBytes(void *data, UInt32 size, UInt32 &processedSize)
|
||||||
{
|
{
|
||||||
for(processedSize = 0; processedSize < size; processedSize++)
|
for(processedSize = 0; processedSize < size; processedSize++)
|
||||||
if (!ReadByte(((Byte *)data)[processedSize]))
|
if (!ReadByte(((Byte *)data)[processedSize]))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bool ReadBytes(void *data, UInt32 size)
|
bool ReadBytes(void *data, UInt32 size)
|
||||||
{
|
{
|
||||||
UInt32 processedSize;
|
UInt32 processedSize;
|
||||||
ReadBytes(data, size, processedSize);
|
ReadBytes(data, size, processedSize);
|
||||||
return (processedSize == size);
|
return (processedSize == size);
|
||||||
}
|
}
|
||||||
UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); }
|
UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); }
|
||||||
bool WasFinished() const { return _wasFinished; }
|
bool WasFinished() const { return _wasFinished; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,116 +1,116 @@
|
|||||||
// OutByte.cpp
|
// OutByte.cpp
|
||||||
|
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
#include "OutBuffer.h"
|
#include "OutBuffer.h"
|
||||||
|
|
||||||
#include "../../Common/Alloc.h"
|
#include "../../Common/Alloc.h"
|
||||||
|
|
||||||
bool COutBuffer::Create(UInt32 bufferSize)
|
bool COutBuffer::Create(UInt32 bufferSize)
|
||||||
{
|
{
|
||||||
const UInt32 kMinBlockSize = 1;
|
const UInt32 kMinBlockSize = 1;
|
||||||
if (bufferSize < kMinBlockSize)
|
if (bufferSize < kMinBlockSize)
|
||||||
bufferSize = kMinBlockSize;
|
bufferSize = kMinBlockSize;
|
||||||
if (_buffer != 0 && _bufferSize == bufferSize)
|
if (_buffer != 0 && _bufferSize == bufferSize)
|
||||||
return true;
|
return true;
|
||||||
Free();
|
Free();
|
||||||
_bufferSize = bufferSize;
|
_bufferSize = bufferSize;
|
||||||
_buffer = (Byte *)::MidAlloc(bufferSize);
|
_buffer = (Byte *)::MidAlloc(bufferSize);
|
||||||
return (_buffer != 0);
|
return (_buffer != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void COutBuffer::Free()
|
void COutBuffer::Free()
|
||||||
{
|
{
|
||||||
::MidFree(_buffer);
|
::MidFree(_buffer);
|
||||||
_buffer = 0;
|
_buffer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void COutBuffer::SetStream(ISequentialOutStream *stream)
|
void COutBuffer::SetStream(ISequentialOutStream *stream)
|
||||||
{
|
{
|
||||||
_stream = stream;
|
_stream = stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
void COutBuffer::Init()
|
void COutBuffer::Init()
|
||||||
{
|
{
|
||||||
_streamPos = 0;
|
_streamPos = 0;
|
||||||
_limitPos = _bufferSize;
|
_limitPos = _bufferSize;
|
||||||
_pos = 0;
|
_pos = 0;
|
||||||
_processedSize = 0;
|
_processedSize = 0;
|
||||||
_overDict = false;
|
_overDict = false;
|
||||||
#ifdef _NO_EXCEPTIONS
|
#ifdef _NO_EXCEPTIONS
|
||||||
ErrorCode = S_OK;
|
ErrorCode = S_OK;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt64 COutBuffer::GetProcessedSize() const
|
UInt64 COutBuffer::GetProcessedSize() const
|
||||||
{
|
{
|
||||||
UInt64 res = _processedSize + _pos - _streamPos;
|
UInt64 res = _processedSize + _pos - _streamPos;
|
||||||
if (_streamPos > _pos)
|
if (_streamPos > _pos)
|
||||||
res += _bufferSize;
|
res += _bufferSize;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HRESULT COutBuffer::FlushPart()
|
HRESULT COutBuffer::FlushPart()
|
||||||
{
|
{
|
||||||
// _streamPos < _bufferSize
|
// _streamPos < _bufferSize
|
||||||
UInt32 size = (_streamPos >= _pos) ? (_bufferSize - _streamPos) : (_pos - _streamPos);
|
UInt32 size = (_streamPos >= _pos) ? (_bufferSize - _streamPos) : (_pos - _streamPos);
|
||||||
HRESULT result = S_OK;
|
HRESULT result = S_OK;
|
||||||
#ifdef _NO_EXCEPTIONS
|
#ifdef _NO_EXCEPTIONS
|
||||||
result = ErrorCode;
|
result = ErrorCode;
|
||||||
#endif
|
#endif
|
||||||
if (_buffer2 != 0)
|
if (_buffer2 != 0)
|
||||||
{
|
{
|
||||||
memmove(_buffer2, _buffer + _streamPos, size);
|
memmove(_buffer2, _buffer + _streamPos, size);
|
||||||
_buffer2 += size;
|
_buffer2 += size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_stream != 0
|
if (_stream != 0
|
||||||
#ifdef _NO_EXCEPTIONS
|
#ifdef _NO_EXCEPTIONS
|
||||||
&& (ErrorCode == S_OK)
|
&& (ErrorCode == S_OK)
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UInt32 processedSize = 0;
|
UInt32 processedSize = 0;
|
||||||
result = _stream->Write(_buffer + _streamPos, size, &processedSize);
|
result = _stream->Write(_buffer + _streamPos, size, &processedSize);
|
||||||
size = processedSize;
|
size = processedSize;
|
||||||
}
|
}
|
||||||
_streamPos += size;
|
_streamPos += size;
|
||||||
if (_streamPos == _bufferSize)
|
if (_streamPos == _bufferSize)
|
||||||
_streamPos = 0;
|
_streamPos = 0;
|
||||||
if (_pos == _bufferSize)
|
if (_pos == _bufferSize)
|
||||||
{
|
{
|
||||||
_overDict = true;
|
_overDict = true;
|
||||||
_pos = 0;
|
_pos = 0;
|
||||||
}
|
}
|
||||||
_limitPos = (_streamPos > _pos) ? _streamPos : _bufferSize;
|
_limitPos = (_streamPos > _pos) ? _streamPos : _bufferSize;
|
||||||
_processedSize += size;
|
_processedSize += size;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT COutBuffer::Flush()
|
HRESULT COutBuffer::Flush()
|
||||||
{
|
{
|
||||||
#ifdef _NO_EXCEPTIONS
|
#ifdef _NO_EXCEPTIONS
|
||||||
if (ErrorCode != S_OK)
|
if (ErrorCode != S_OK)
|
||||||
return ErrorCode;
|
return ErrorCode;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while(_streamPos != _pos)
|
while(_streamPos != _pos)
|
||||||
{
|
{
|
||||||
HRESULT result = FlushPart();
|
HRESULT result = FlushPart();
|
||||||
if (result != S_OK)
|
if (result != S_OK)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void COutBuffer::FlushWithCheck()
|
void COutBuffer::FlushWithCheck()
|
||||||
{
|
{
|
||||||
HRESULT result = FlushPart();
|
HRESULT result = FlushPart();
|
||||||
#ifdef _NO_EXCEPTIONS
|
#ifdef _NO_EXCEPTIONS
|
||||||
ErrorCode = result;
|
ErrorCode = result;
|
||||||
#else
|
#else
|
||||||
if (result != S_OK)
|
if (result != S_OK)
|
||||||
throw COutBufferException(result);
|
throw COutBufferException(result);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1,64 +1,64 @@
|
|||||||
// OutBuffer.h
|
// OutBuffer.h
|
||||||
|
|
||||||
#ifndef __OUTBUFFER_H
|
#ifndef __OUTBUFFER_H
|
||||||
#define __OUTBUFFER_H
|
#define __OUTBUFFER_H
|
||||||
|
|
||||||
#include "../IStream.h"
|
#include "../IStream.h"
|
||||||
#include "../../Common/MyCom.h"
|
#include "../../Common/MyCom.h"
|
||||||
|
|
||||||
#ifndef _NO_EXCEPTIONS
|
#ifndef _NO_EXCEPTIONS
|
||||||
struct COutBufferException
|
struct COutBufferException
|
||||||
{
|
{
|
||||||
HRESULT ErrorCode;
|
HRESULT ErrorCode;
|
||||||
COutBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
|
COutBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class COutBuffer
|
class COutBuffer
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
Byte *_buffer;
|
Byte *_buffer;
|
||||||
UInt32 _pos;
|
UInt32 _pos;
|
||||||
UInt32 _limitPos;
|
UInt32 _limitPos;
|
||||||
UInt32 _streamPos;
|
UInt32 _streamPos;
|
||||||
UInt32 _bufferSize;
|
UInt32 _bufferSize;
|
||||||
CMyComPtr<ISequentialOutStream> _stream;
|
CMyComPtr<ISequentialOutStream> _stream;
|
||||||
UInt64 _processedSize;
|
UInt64 _processedSize;
|
||||||
Byte *_buffer2;
|
Byte *_buffer2;
|
||||||
bool _overDict;
|
bool _overDict;
|
||||||
|
|
||||||
HRESULT FlushPart();
|
HRESULT FlushPart();
|
||||||
void FlushWithCheck();
|
void FlushWithCheck();
|
||||||
public:
|
public:
|
||||||
#ifdef _NO_EXCEPTIONS
|
#ifdef _NO_EXCEPTIONS
|
||||||
HRESULT ErrorCode;
|
HRESULT ErrorCode;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
COutBuffer(): _buffer(0), _pos(0), _stream(0), _buffer2(0) {}
|
COutBuffer(): _buffer(0), _pos(0), _stream(0), _buffer2(0) {}
|
||||||
~COutBuffer() { Free(); }
|
~COutBuffer() { Free(); }
|
||||||
|
|
||||||
bool Create(UInt32 bufferSize);
|
bool Create(UInt32 bufferSize);
|
||||||
void Free();
|
void Free();
|
||||||
|
|
||||||
void SetMemStream(Byte *buffer) { _buffer2 = buffer; }
|
void SetMemStream(Byte *buffer) { _buffer2 = buffer; }
|
||||||
void SetStream(ISequentialOutStream *stream);
|
void SetStream(ISequentialOutStream *stream);
|
||||||
void Init();
|
void Init();
|
||||||
HRESULT Flush();
|
HRESULT Flush();
|
||||||
void ReleaseStream() { _stream.Release(); }
|
void ReleaseStream() { _stream.Release(); }
|
||||||
|
|
||||||
void WriteByte(Byte b)
|
void WriteByte(Byte b)
|
||||||
{
|
{
|
||||||
_buffer[_pos++] = b;
|
_buffer[_pos++] = b;
|
||||||
if(_pos == _limitPos)
|
if(_pos == _limitPos)
|
||||||
FlushWithCheck();
|
FlushWithCheck();
|
||||||
}
|
}
|
||||||
void WriteBytes(const void *data, size_t size)
|
void WriteBytes(const void *data, size_t size)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < size; i++)
|
for (size_t i = 0; i < size; i++)
|
||||||
WriteByte(((const Byte *)data)[i]);
|
WriteByte(((const Byte *)data)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt64 GetProcessedSize() const;
|
UInt64 GetProcessedSize() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
// StdAfx.h
|
// StdAfx.h
|
||||||
|
|
||||||
#ifndef __STDAFX_H
|
#ifndef __STDAFX_H
|
||||||
#define __STDAFX_H
|
#define __STDAFX_H
|
||||||
|
|
||||||
#include "../../Common/MyWindows.h"
|
#include "../../Common/MyWindows.h"
|
||||||
#include "../../Common/NewHandler.h"
|
#include "../../Common/NewHandler.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,44 +1,44 @@
|
|||||||
// StreamUtils.cpp
|
// StreamUtils.cpp
|
||||||
|
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
#include "../../Common/MyCom.h"
|
#include "../../Common/MyCom.h"
|
||||||
#include "StreamUtils.h"
|
#include "StreamUtils.h"
|
||||||
|
|
||||||
HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize)
|
HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize)
|
||||||
{
|
{
|
||||||
if (processedSize != 0)
|
if (processedSize != 0)
|
||||||
*processedSize = 0;
|
*processedSize = 0;
|
||||||
while(size != 0)
|
while(size != 0)
|
||||||
{
|
{
|
||||||
UInt32 processedSizeLoc;
|
UInt32 processedSizeLoc;
|
||||||
HRESULT res = stream->Read(data, size, &processedSizeLoc);
|
HRESULT res = stream->Read(data, size, &processedSizeLoc);
|
||||||
if (processedSize != 0)
|
if (processedSize != 0)
|
||||||
*processedSize += processedSizeLoc;
|
*processedSize += processedSizeLoc;
|
||||||
data = (Byte *)((Byte *)data + processedSizeLoc);
|
data = (Byte *)((Byte *)data + processedSizeLoc);
|
||||||
size -= processedSizeLoc;
|
size -= processedSizeLoc;
|
||||||
RINOK(res);
|
RINOK(res);
|
||||||
if (processedSizeLoc == 0)
|
if (processedSizeLoc == 0)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize)
|
HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize)
|
||||||
{
|
{
|
||||||
if (processedSize != 0)
|
if (processedSize != 0)
|
||||||
*processedSize = 0;
|
*processedSize = 0;
|
||||||
while(size != 0)
|
while(size != 0)
|
||||||
{
|
{
|
||||||
UInt32 processedSizeLoc;
|
UInt32 processedSizeLoc;
|
||||||
HRESULT res = stream->Write(data, size, &processedSizeLoc);
|
HRESULT res = stream->Write(data, size, &processedSizeLoc);
|
||||||
if (processedSize != 0)
|
if (processedSize != 0)
|
||||||
*processedSize += processedSizeLoc;
|
*processedSize += processedSizeLoc;
|
||||||
data = (const void *)((const Byte *)data + processedSizeLoc);
|
data = (const void *)((const Byte *)data + processedSizeLoc);
|
||||||
size -= processedSizeLoc;
|
size -= processedSizeLoc;
|
||||||
RINOK(res);
|
RINOK(res);
|
||||||
if (processedSizeLoc == 0)
|
if (processedSizeLoc == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
// StreamUtils.h
|
// StreamUtils.h
|
||||||
|
|
||||||
#ifndef __STREAMUTILS_H
|
#ifndef __STREAMUTILS_H
|
||||||
#define __STREAMUTILS_H
|
#define __STREAMUTILS_H
|
||||||
|
|
||||||
#include "../IStream.h"
|
#include "../IStream.h"
|
||||||
|
|
||||||
HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize);
|
HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize);
|
||||||
HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize);
|
HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,54 +1,54 @@
|
|||||||
// BinTree.h
|
// BinTree.h
|
||||||
|
|
||||||
#include "../LZInWindow.h"
|
#include "../LZInWindow.h"
|
||||||
#include "../IMatchFinder.h"
|
#include "../IMatchFinder.h"
|
||||||
|
|
||||||
namespace BT_NAMESPACE {
|
namespace BT_NAMESPACE {
|
||||||
|
|
||||||
typedef UInt32 CIndex;
|
typedef UInt32 CIndex;
|
||||||
const UInt32 kMaxValForNormalize = (UInt32(1) << 31) - 1;
|
const UInt32 kMaxValForNormalize = (UInt32(1) << 31) - 1;
|
||||||
|
|
||||||
class CMatchFinder:
|
class CMatchFinder:
|
||||||
public IMatchFinder,
|
public IMatchFinder,
|
||||||
public CLZInWindow,
|
public CLZInWindow,
|
||||||
public CMyUnknownImp,
|
public CMyUnknownImp,
|
||||||
public IMatchFinderSetNumPasses
|
public IMatchFinderSetNumPasses
|
||||||
{
|
{
|
||||||
UInt32 _cyclicBufferPos;
|
UInt32 _cyclicBufferPos;
|
||||||
UInt32 _cyclicBufferSize; // it must be historySize + 1
|
UInt32 _cyclicBufferSize; // it must be historySize + 1
|
||||||
UInt32 _matchMaxLen;
|
UInt32 _matchMaxLen;
|
||||||
CIndex *_hash;
|
CIndex *_hash;
|
||||||
CIndex *_son;
|
CIndex *_son;
|
||||||
UInt32 _hashMask;
|
UInt32 _hashMask;
|
||||||
UInt32 _cutValue;
|
UInt32 _cutValue;
|
||||||
UInt32 _hashSizeSum;
|
UInt32 _hashSizeSum;
|
||||||
|
|
||||||
void Normalize();
|
void Normalize();
|
||||||
void FreeThisClassMemory();
|
void FreeThisClassMemory();
|
||||||
void FreeMemory();
|
void FreeMemory();
|
||||||
|
|
||||||
MY_UNKNOWN_IMP
|
MY_UNKNOWN_IMP
|
||||||
|
|
||||||
STDMETHOD(SetStream)(ISequentialInStream *inStream);
|
STDMETHOD(SetStream)(ISequentialInStream *inStream);
|
||||||
STDMETHOD_(void, ReleaseStream)();
|
STDMETHOD_(void, ReleaseStream)();
|
||||||
STDMETHOD(Init)();
|
STDMETHOD(Init)();
|
||||||
HRESULT MovePos();
|
HRESULT MovePos();
|
||||||
STDMETHOD_(Byte, GetIndexByte)(Int32 index);
|
STDMETHOD_(Byte, GetIndexByte)(Int32 index);
|
||||||
STDMETHOD_(UInt32, GetMatchLen)(Int32 index, UInt32 back, UInt32 limit);
|
STDMETHOD_(UInt32, GetMatchLen)(Int32 index, UInt32 back, UInt32 limit);
|
||||||
STDMETHOD_(UInt32, GetNumAvailableBytes)();
|
STDMETHOD_(UInt32, GetNumAvailableBytes)();
|
||||||
STDMETHOD_(const Byte *, GetPointerToCurrentPos)();
|
STDMETHOD_(const Byte *, GetPointerToCurrentPos)();
|
||||||
STDMETHOD_(Int32, NeedChangeBufferPos)(UInt32 numCheckBytes);
|
STDMETHOD_(Int32, NeedChangeBufferPos)(UInt32 numCheckBytes);
|
||||||
STDMETHOD_(void, ChangeBufferPos)();
|
STDMETHOD_(void, ChangeBufferPos)();
|
||||||
|
|
||||||
STDMETHOD(Create)(UInt32 historySize, UInt32 keepAddBufferBefore,
|
STDMETHOD(Create)(UInt32 historySize, UInt32 keepAddBufferBefore,
|
||||||
UInt32 matchMaxLen, UInt32 keepAddBufferAfter);
|
UInt32 matchMaxLen, UInt32 keepAddBufferAfter);
|
||||||
STDMETHOD(GetMatches)(UInt32 *distances);
|
STDMETHOD(GetMatches)(UInt32 *distances);
|
||||||
STDMETHOD(Skip)(UInt32 num);
|
STDMETHOD(Skip)(UInt32 num);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMatchFinder();
|
CMatchFinder();
|
||||||
virtual ~CMatchFinder();
|
virtual ~CMatchFinder();
|
||||||
virtual void SetNumPasses(UInt32 numPasses) { _cutValue = numPasses; }
|
virtual void SetNumPasses(UInt32 numPasses) { _cutValue = numPasses; }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
// BinTree2.h
|
// BinTree2.h
|
||||||
|
|
||||||
#ifndef __BINTREE2_H
|
#ifndef __BINTREE2_H
|
||||||
#define __BINTREE2_H
|
#define __BINTREE2_H
|
||||||
|
|
||||||
#define BT_NAMESPACE NBT2
|
#define BT_NAMESPACE NBT2
|
||||||
|
|
||||||
#include "BinTreeMain.h"
|
#include "BinTreeMain.h"
|
||||||
|
|
||||||
#undef BT_NAMESPACE
|
#undef BT_NAMESPACE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
// BinTree3.h
|
// BinTree3.h
|
||||||
|
|
||||||
#ifndef __BINTREE3_H
|
#ifndef __BINTREE3_H
|
||||||
#define __BINTREE3_H
|
#define __BINTREE3_H
|
||||||
|
|
||||||
#define BT_NAMESPACE NBT3
|
#define BT_NAMESPACE NBT3
|
||||||
|
|
||||||
#define HASH_ARRAY_2
|
#define HASH_ARRAY_2
|
||||||
|
|
||||||
#include "BinTreeMain.h"
|
#include "BinTreeMain.h"
|
||||||
|
|
||||||
#undef HASH_ARRAY_2
|
#undef HASH_ARRAY_2
|
||||||
|
|
||||||
#undef BT_NAMESPACE
|
#undef BT_NAMESPACE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
// BinTree4.h
|
// BinTree4.h
|
||||||
|
|
||||||
#ifndef __BINTREE4_H
|
#ifndef __BINTREE4_H
|
||||||
#define __BINTREE4_H
|
#define __BINTREE4_H
|
||||||
|
|
||||||
#define BT_NAMESPACE NBT4
|
#define BT_NAMESPACE NBT4
|
||||||
|
|
||||||
#define HASH_ARRAY_2
|
#define HASH_ARRAY_2
|
||||||
#define HASH_ARRAY_3
|
#define HASH_ARRAY_3
|
||||||
|
|
||||||
#include "BinTreeMain.h"
|
#include "BinTreeMain.h"
|
||||||
|
|
||||||
#undef HASH_ARRAY_2
|
#undef HASH_ARRAY_2
|
||||||
#undef HASH_ARRAY_3
|
#undef HASH_ARRAY_3
|
||||||
|
|
||||||
#undef BT_NAMESPACE
|
#undef BT_NAMESPACE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,19 +1,19 @@
|
|||||||
// HC4.h
|
// HC4.h
|
||||||
|
|
||||||
#ifndef __HC4_H
|
#ifndef __HC4_H
|
||||||
#define __HC4_H
|
#define __HC4_H
|
||||||
|
|
||||||
#define BT_NAMESPACE NHC4
|
#define BT_NAMESPACE NHC4
|
||||||
|
|
||||||
#define HASH_ARRAY_2
|
#define HASH_ARRAY_2
|
||||||
#define HASH_ARRAY_3
|
#define HASH_ARRAY_3
|
||||||
|
|
||||||
#include "HCMain.h"
|
#include "HCMain.h"
|
||||||
|
|
||||||
#undef HASH_ARRAY_2
|
#undef HASH_ARRAY_2
|
||||||
#undef HASH_ARRAY_3
|
#undef HASH_ARRAY_3
|
||||||
|
|
||||||
#undef BT_NAMESPACE
|
#undef BT_NAMESPACE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// HCMain.h
|
// HCMain.h
|
||||||
|
|
||||||
#define _HASH_CHAIN
|
#define _HASH_CHAIN
|
||||||
#include "../BinTree/BinTreeMain.h"
|
#include "../BinTree/BinTreeMain.h"
|
||||||
#undef _HASH_CHAIN
|
#undef _HASH_CHAIN
|
||||||
|
|
||||||
|
@ -1,33 +1,33 @@
|
|||||||
// MatchFinders/IMatchFinder.h
|
// MatchFinders/IMatchFinder.h
|
||||||
|
|
||||||
#ifndef __IMATCHFINDER_H
|
#ifndef __IMATCHFINDER_H
|
||||||
#define __IMATCHFINDER_H
|
#define __IMATCHFINDER_H
|
||||||
|
|
||||||
struct IInWindowStream: public IUnknown
|
struct IInWindowStream: public IUnknown
|
||||||
{
|
{
|
||||||
STDMETHOD(SetStream)(ISequentialInStream *inStream) PURE;
|
STDMETHOD(SetStream)(ISequentialInStream *inStream) PURE;
|
||||||
STDMETHOD_(void, ReleaseStream)() PURE;
|
STDMETHOD_(void, ReleaseStream)() PURE;
|
||||||
STDMETHOD(Init)() PURE;
|
STDMETHOD(Init)() PURE;
|
||||||
STDMETHOD_(Byte, GetIndexByte)(Int32 index) PURE;
|
STDMETHOD_(Byte, GetIndexByte)(Int32 index) PURE;
|
||||||
STDMETHOD_(UInt32, GetMatchLen)(Int32 index, UInt32 distance, UInt32 limit) PURE;
|
STDMETHOD_(UInt32, GetMatchLen)(Int32 index, UInt32 distance, UInt32 limit) PURE;
|
||||||
STDMETHOD_(UInt32, GetNumAvailableBytes)() PURE;
|
STDMETHOD_(UInt32, GetNumAvailableBytes)() PURE;
|
||||||
STDMETHOD_(const Byte *, GetPointerToCurrentPos)() PURE;
|
STDMETHOD_(const Byte *, GetPointerToCurrentPos)() PURE;
|
||||||
STDMETHOD_(Int32, NeedChangeBufferPos)(UInt32 numCheckBytes) PURE;
|
STDMETHOD_(Int32, NeedChangeBufferPos)(UInt32 numCheckBytes) PURE;
|
||||||
STDMETHOD_(void, ChangeBufferPos)() PURE;
|
STDMETHOD_(void, ChangeBufferPos)() PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IMatchFinder: public IInWindowStream
|
struct IMatchFinder: public IInWindowStream
|
||||||
{
|
{
|
||||||
STDMETHOD(Create)(UInt32 historySize, UInt32 keepAddBufferBefore,
|
STDMETHOD(Create)(UInt32 historySize, UInt32 keepAddBufferBefore,
|
||||||
UInt32 matchMaxLen, UInt32 keepAddBufferAfter) PURE;
|
UInt32 matchMaxLen, UInt32 keepAddBufferAfter) PURE;
|
||||||
STDMETHOD(GetMatches)(UInt32 *distances) PURE;
|
STDMETHOD(GetMatches)(UInt32 *distances) PURE;
|
||||||
STDMETHOD(Skip)(UInt32 num) PURE;
|
STDMETHOD(Skip)(UInt32 num) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IMatchFinderSetNumPasses
|
struct IMatchFinderSetNumPasses
|
||||||
{
|
{
|
||||||
//virtual ~IMatchFinderSetNumPasses(){}
|
//virtual ~IMatchFinderSetNumPasses(){}
|
||||||
virtual void SetNumPasses(UInt32 numPasses) PURE;
|
virtual void SetNumPasses(UInt32 numPasses) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,105 +1,105 @@
|
|||||||
// LZInWindow.cpp
|
// LZInWindow.cpp
|
||||||
|
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
#include "LZInWindow.h"
|
#include "LZInWindow.h"
|
||||||
#include "../../../Common/MyCom.h"
|
#include "../../../Common/MyCom.h"
|
||||||
#include "../../../Common/Alloc.h"
|
#include "../../../Common/Alloc.h"
|
||||||
|
|
||||||
void CLZInWindow::Free()
|
void CLZInWindow::Free()
|
||||||
{
|
{
|
||||||
::BigFree(_bufferBase);
|
::BigFree(_bufferBase);
|
||||||
_bufferBase = 0;
|
_bufferBase = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CLZInWindow::Create(UInt32 keepSizeBefore, UInt32 keepSizeAfter, UInt32 keepSizeReserv)
|
bool CLZInWindow::Create(UInt32 keepSizeBefore, UInt32 keepSizeAfter, UInt32 keepSizeReserv)
|
||||||
{
|
{
|
||||||
_keepSizeBefore = keepSizeBefore;
|
_keepSizeBefore = keepSizeBefore;
|
||||||
_keepSizeAfter = keepSizeAfter;
|
_keepSizeAfter = keepSizeAfter;
|
||||||
UInt32 blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv;
|
UInt32 blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv;
|
||||||
if (_bufferBase == 0 || _blockSize != blockSize)
|
if (_bufferBase == 0 || _blockSize != blockSize)
|
||||||
{
|
{
|
||||||
Free();
|
Free();
|
||||||
_blockSize = blockSize;
|
_blockSize = blockSize;
|
||||||
if (_blockSize != 0)
|
if (_blockSize != 0)
|
||||||
_bufferBase = (Byte *)::BigAlloc(_blockSize);
|
_bufferBase = (Byte *)::BigAlloc(_blockSize);
|
||||||
}
|
}
|
||||||
_pointerToLastSafePosition = _bufferBase + _blockSize - keepSizeAfter;
|
_pointerToLastSafePosition = _bufferBase + _blockSize - keepSizeAfter;
|
||||||
if (_blockSize == 0)
|
if (_blockSize == 0)
|
||||||
return true;
|
return true;
|
||||||
return (_bufferBase != 0);
|
return (_bufferBase != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLZInWindow::SetStream(ISequentialInStream *stream)
|
void CLZInWindow::SetStream(ISequentialInStream *stream)
|
||||||
{
|
{
|
||||||
_stream = stream;
|
_stream = stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CLZInWindow::Init()
|
HRESULT CLZInWindow::Init()
|
||||||
{
|
{
|
||||||
_buffer = _bufferBase;
|
_buffer = _bufferBase;
|
||||||
_pos = 0;
|
_pos = 0;
|
||||||
_streamPos = 0;
|
_streamPos = 0;
|
||||||
_streamEndWasReached = false;
|
_streamEndWasReached = false;
|
||||||
return ReadBlock();
|
return ReadBlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
void CLZInWindow::ReleaseStream()
|
void CLZInWindow::ReleaseStream()
|
||||||
{
|
{
|
||||||
_stream.Release();
|
_stream.Release();
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
// ReadBlock
|
// ReadBlock
|
||||||
|
|
||||||
// In State:
|
// In State:
|
||||||
// (_buffer + _streamPos) <= (_bufferBase + _blockSize)
|
// (_buffer + _streamPos) <= (_bufferBase + _blockSize)
|
||||||
// Out State:
|
// Out State:
|
||||||
// _posLimit <= _blockSize - _keepSizeAfter;
|
// _posLimit <= _blockSize - _keepSizeAfter;
|
||||||
// if(_streamEndWasReached == false):
|
// if(_streamEndWasReached == false):
|
||||||
// _streamPos >= _pos + _keepSizeAfter
|
// _streamPos >= _pos + _keepSizeAfter
|
||||||
// _posLimit = _streamPos - _keepSizeAfter;
|
// _posLimit = _streamPos - _keepSizeAfter;
|
||||||
// else
|
// else
|
||||||
//
|
//
|
||||||
|
|
||||||
HRESULT CLZInWindow::ReadBlock()
|
HRESULT CLZInWindow::ReadBlock()
|
||||||
{
|
{
|
||||||
if(_streamEndWasReached)
|
if(_streamEndWasReached)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
UInt32 size = (UInt32)(_bufferBase - _buffer) + _blockSize - _streamPos;
|
UInt32 size = (UInt32)(_bufferBase - _buffer) + _blockSize - _streamPos;
|
||||||
if(size == 0)
|
if(size == 0)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
UInt32 numReadBytes;
|
UInt32 numReadBytes;
|
||||||
RINOK(_stream->Read(_buffer + _streamPos, size, &numReadBytes));
|
RINOK(_stream->Read(_buffer + _streamPos, size, &numReadBytes));
|
||||||
if(numReadBytes == 0)
|
if(numReadBytes == 0)
|
||||||
{
|
{
|
||||||
_posLimit = _streamPos;
|
_posLimit = _streamPos;
|
||||||
const Byte *pointerToPostion = _buffer + _posLimit;
|
const Byte *pointerToPostion = _buffer + _posLimit;
|
||||||
if(pointerToPostion > _pointerToLastSafePosition)
|
if(pointerToPostion > _pointerToLastSafePosition)
|
||||||
_posLimit = (UInt32)(_pointerToLastSafePosition - _buffer);
|
_posLimit = (UInt32)(_pointerToLastSafePosition - _buffer);
|
||||||
_streamEndWasReached = true;
|
_streamEndWasReached = true;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
_streamPos += numReadBytes;
|
_streamPos += numReadBytes;
|
||||||
if(_streamPos >= _pos + _keepSizeAfter)
|
if(_streamPos >= _pos + _keepSizeAfter)
|
||||||
{
|
{
|
||||||
_posLimit = _streamPos - _keepSizeAfter;
|
_posLimit = _streamPos - _keepSizeAfter;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLZInWindow::MoveBlock()
|
void CLZInWindow::MoveBlock()
|
||||||
{
|
{
|
||||||
UInt32 offset = (UInt32)(_buffer - _bufferBase) + _pos - _keepSizeBefore;
|
UInt32 offset = (UInt32)(_buffer - _bufferBase) + _pos - _keepSizeBefore;
|
||||||
// we need one additional byte, since MovePos moves on 1 byte.
|
// we need one additional byte, since MovePos moves on 1 byte.
|
||||||
if (offset > 0)
|
if (offset > 0)
|
||||||
offset--;
|
offset--;
|
||||||
UInt32 numBytes = (UInt32)(_buffer - _bufferBase) + _streamPos - offset;
|
UInt32 numBytes = (UInt32)(_buffer - _bufferBase) + _streamPos - offset;
|
||||||
memmove(_bufferBase, _bufferBase + offset, numBytes);
|
memmove(_bufferBase, _bufferBase + offset, numBytes);
|
||||||
_buffer -= offset;
|
_buffer -= offset;
|
||||||
}
|
}
|
||||||
|
@ -1,87 +1,87 @@
|
|||||||
// LZInWindow.h
|
// LZInWindow.h
|
||||||
|
|
||||||
#ifndef __LZ_IN_WINDOW_H
|
#ifndef __LZ_IN_WINDOW_H
|
||||||
#define __LZ_IN_WINDOW_H
|
#define __LZ_IN_WINDOW_H
|
||||||
|
|
||||||
#include "../../IStream.h"
|
#include "../../IStream.h"
|
||||||
|
|
||||||
class CLZInWindow
|
class CLZInWindow
|
||||||
{
|
{
|
||||||
Byte *_bufferBase; // pointer to buffer with data
|
Byte *_bufferBase; // pointer to buffer with data
|
||||||
ISequentialInStream *_stream;
|
ISequentialInStream *_stream;
|
||||||
UInt32 _posLimit; // offset (from _buffer) when new block reading must be done
|
UInt32 _posLimit; // offset (from _buffer) when new block reading must be done
|
||||||
bool _streamEndWasReached; // if (true) then _streamPos shows real end of stream
|
bool _streamEndWasReached; // if (true) then _streamPos shows real end of stream
|
||||||
const Byte *_pointerToLastSafePosition;
|
const Byte *_pointerToLastSafePosition;
|
||||||
protected:
|
protected:
|
||||||
Byte *_buffer; // Pointer to virtual Buffer begin
|
Byte *_buffer; // Pointer to virtual Buffer begin
|
||||||
UInt32 _blockSize; // Size of Allocated memory block
|
UInt32 _blockSize; // Size of Allocated memory block
|
||||||
UInt32 _pos; // offset (from _buffer) of curent byte
|
UInt32 _pos; // offset (from _buffer) of curent byte
|
||||||
UInt32 _keepSizeBefore; // how many BYTEs must be kept in buffer before _pos
|
UInt32 _keepSizeBefore; // how many BYTEs must be kept in buffer before _pos
|
||||||
UInt32 _keepSizeAfter; // how many BYTEs must be kept buffer after _pos
|
UInt32 _keepSizeAfter; // how many BYTEs must be kept buffer after _pos
|
||||||
UInt32 _streamPos; // offset (from _buffer) of first not read byte from Stream
|
UInt32 _streamPos; // offset (from _buffer) of first not read byte from Stream
|
||||||
|
|
||||||
void MoveBlock();
|
void MoveBlock();
|
||||||
HRESULT ReadBlock();
|
HRESULT ReadBlock();
|
||||||
void Free();
|
void Free();
|
||||||
public:
|
public:
|
||||||
CLZInWindow(): _bufferBase(0) {}
|
CLZInWindow(): _bufferBase(0) {}
|
||||||
virtual ~CLZInWindow() { Free(); }
|
virtual ~CLZInWindow() { Free(); }
|
||||||
|
|
||||||
// keepSizeBefore + keepSizeAfter + keepSizeReserv < 4G)
|
// keepSizeBefore + keepSizeAfter + keepSizeReserv < 4G)
|
||||||
bool Create(UInt32 keepSizeBefore, UInt32 keepSizeAfter, UInt32 keepSizeReserv = (1<<17));
|
bool Create(UInt32 keepSizeBefore, UInt32 keepSizeAfter, UInt32 keepSizeReserv = (1<<17));
|
||||||
|
|
||||||
void SetStream(ISequentialInStream *stream);
|
void SetStream(ISequentialInStream *stream);
|
||||||
HRESULT Init();
|
HRESULT Init();
|
||||||
// void ReleaseStream();
|
// void ReleaseStream();
|
||||||
|
|
||||||
Byte *GetBuffer() const { return _buffer; }
|
Byte *GetBuffer() const { return _buffer; }
|
||||||
|
|
||||||
const Byte *GetPointerToCurrentPos() const { return _buffer + _pos; }
|
const Byte *GetPointerToCurrentPos() const { return _buffer + _pos; }
|
||||||
|
|
||||||
HRESULT MovePos()
|
HRESULT MovePos()
|
||||||
{
|
{
|
||||||
_pos++;
|
_pos++;
|
||||||
if (_pos > _posLimit)
|
if (_pos > _posLimit)
|
||||||
{
|
{
|
||||||
const Byte *pointerToPostion = _buffer + _pos;
|
const Byte *pointerToPostion = _buffer + _pos;
|
||||||
if(pointerToPostion > _pointerToLastSafePosition)
|
if(pointerToPostion > _pointerToLastSafePosition)
|
||||||
MoveBlock();
|
MoveBlock();
|
||||||
return ReadBlock();
|
return ReadBlock();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
Byte GetIndexByte(Int32 index) const { return _buffer[(size_t)_pos + index]; }
|
Byte GetIndexByte(Int32 index) const { return _buffer[(size_t)_pos + index]; }
|
||||||
|
|
||||||
// index + limit have not to exceed _keepSizeAfter;
|
// index + limit have not to exceed _keepSizeAfter;
|
||||||
// -2G <= index < 2G
|
// -2G <= index < 2G
|
||||||
UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit) const
|
UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit) const
|
||||||
{
|
{
|
||||||
if(_streamEndWasReached)
|
if(_streamEndWasReached)
|
||||||
if ((_pos + index) + limit > _streamPos)
|
if ((_pos + index) + limit > _streamPos)
|
||||||
limit = _streamPos - (_pos + index);
|
limit = _streamPos - (_pos + index);
|
||||||
distance++;
|
distance++;
|
||||||
const Byte *pby = _buffer + (size_t)_pos + index;
|
const Byte *pby = _buffer + (size_t)_pos + index;
|
||||||
UInt32 i;
|
UInt32 i;
|
||||||
for(i = 0; i < limit && pby[i] == pby[(size_t)i - distance]; i++);
|
for(i = 0; i < limit && pby[i] == pby[(size_t)i - distance]; i++);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt32 GetNumAvailableBytes() const { return _streamPos - _pos; }
|
UInt32 GetNumAvailableBytes() const { return _streamPos - _pos; }
|
||||||
|
|
||||||
void ReduceOffsets(Int32 subValue)
|
void ReduceOffsets(Int32 subValue)
|
||||||
{
|
{
|
||||||
_buffer += subValue;
|
_buffer += subValue;
|
||||||
_posLimit -= subValue;
|
_posLimit -= subValue;
|
||||||
_pos -= subValue;
|
_pos -= subValue;
|
||||||
_streamPos -= subValue;
|
_streamPos -= subValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NeedMove(UInt32 numCheckBytes)
|
bool NeedMove(UInt32 numCheckBytes)
|
||||||
{
|
{
|
||||||
UInt32 reserv = _pointerToLastSafePosition - (_buffer + _pos);
|
UInt32 reserv = _pointerToLastSafePosition - (_buffer + _pos);
|
||||||
return (reserv <= numCheckBytes);
|
return (reserv <= numCheckBytes);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// StdAfx.h
|
// StdAfx.h
|
||||||
|
|
||||||
#ifndef __STDAFX_H
|
#ifndef __STDAFX_H
|
||||||
#define __STDAFX_H
|
#define __STDAFX_H
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,82 +1,82 @@
|
|||||||
// LZMA.h
|
// LZMA.h
|
||||||
|
|
||||||
#ifndef __LZMA_H
|
#ifndef __LZMA_H
|
||||||
#define __LZMA_H
|
#define __LZMA_H
|
||||||
|
|
||||||
namespace NCompress {
|
namespace NCompress {
|
||||||
namespace NLZMA {
|
namespace NLZMA {
|
||||||
|
|
||||||
const UInt32 kNumRepDistances = 4;
|
const UInt32 kNumRepDistances = 4;
|
||||||
|
|
||||||
const int kNumStates = 12;
|
const int kNumStates = 12;
|
||||||
|
|
||||||
const Byte kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5};
|
const Byte kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5};
|
||||||
const Byte kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10};
|
const Byte kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10};
|
||||||
const Byte kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11};
|
const Byte kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11};
|
||||||
const Byte kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11};
|
const Byte kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11};
|
||||||
|
|
||||||
class CState
|
class CState
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Byte Index;
|
Byte Index;
|
||||||
void Init() { Index = 0; }
|
void Init() { Index = 0; }
|
||||||
void UpdateChar() { Index = kLiteralNextStates[Index]; }
|
void UpdateChar() { Index = kLiteralNextStates[Index]; }
|
||||||
void UpdateMatch() { Index = kMatchNextStates[Index]; }
|
void UpdateMatch() { Index = kMatchNextStates[Index]; }
|
||||||
void UpdateRep() { Index = kRepNextStates[Index]; }
|
void UpdateRep() { Index = kRepNextStates[Index]; }
|
||||||
void UpdateShortRep() { Index = kShortRepNextStates[Index]; }
|
void UpdateShortRep() { Index = kShortRepNextStates[Index]; }
|
||||||
bool IsCharState() const { return Index < 7; }
|
bool IsCharState() const { return Index < 7; }
|
||||||
};
|
};
|
||||||
|
|
||||||
const int kNumPosSlotBits = 6;
|
const int kNumPosSlotBits = 6;
|
||||||
const int kDicLogSizeMin = 0;
|
const int kDicLogSizeMin = 0;
|
||||||
const int kDicLogSizeMax = 32;
|
const int kDicLogSizeMax = 32;
|
||||||
const int kDistTableSizeMax = kDicLogSizeMax * 2;
|
const int kDistTableSizeMax = kDicLogSizeMax * 2;
|
||||||
|
|
||||||
const UInt32 kNumLenToPosStates = 4;
|
const UInt32 kNumLenToPosStates = 4;
|
||||||
|
|
||||||
inline UInt32 GetLenToPosState(UInt32 len)
|
inline UInt32 GetLenToPosState(UInt32 len)
|
||||||
{
|
{
|
||||||
len -= 2;
|
len -= 2;
|
||||||
if (len < kNumLenToPosStates)
|
if (len < kNumLenToPosStates)
|
||||||
return len;
|
return len;
|
||||||
return kNumLenToPosStates - 1;
|
return kNumLenToPosStates - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace NLength {
|
namespace NLength {
|
||||||
|
|
||||||
const int kNumPosStatesBitsMax = 4;
|
const int kNumPosStatesBitsMax = 4;
|
||||||
const UInt32 kNumPosStatesMax = (1 << kNumPosStatesBitsMax);
|
const UInt32 kNumPosStatesMax = (1 << kNumPosStatesBitsMax);
|
||||||
|
|
||||||
const int kNumPosStatesBitsEncodingMax = 4;
|
const int kNumPosStatesBitsEncodingMax = 4;
|
||||||
const UInt32 kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax);
|
const UInt32 kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax);
|
||||||
|
|
||||||
const int kNumLowBits = 3;
|
const int kNumLowBits = 3;
|
||||||
const int kNumMidBits = 3;
|
const int kNumMidBits = 3;
|
||||||
const int kNumHighBits = 8;
|
const int kNumHighBits = 8;
|
||||||
const UInt32 kNumLowSymbols = 1 << kNumLowBits;
|
const UInt32 kNumLowSymbols = 1 << kNumLowBits;
|
||||||
const UInt32 kNumMidSymbols = 1 << kNumMidBits;
|
const UInt32 kNumMidSymbols = 1 << kNumMidBits;
|
||||||
const UInt32 kNumSymbolsTotal = kNumLowSymbols + kNumMidSymbols + (1 << kNumHighBits);
|
const UInt32 kNumSymbolsTotal = kNumLowSymbols + kNumMidSymbols + (1 << kNumHighBits);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const UInt32 kMatchMinLen = 2;
|
const UInt32 kMatchMinLen = 2;
|
||||||
const UInt32 kMatchMaxLen = kMatchMinLen + NLength::kNumSymbolsTotal - 1;
|
const UInt32 kMatchMaxLen = kMatchMinLen + NLength::kNumSymbolsTotal - 1;
|
||||||
|
|
||||||
const int kNumAlignBits = 4;
|
const int kNumAlignBits = 4;
|
||||||
const UInt32 kAlignTableSize = 1 << kNumAlignBits;
|
const UInt32 kAlignTableSize = 1 << kNumAlignBits;
|
||||||
const UInt32 kAlignMask = (kAlignTableSize - 1);
|
const UInt32 kAlignMask = (kAlignTableSize - 1);
|
||||||
|
|
||||||
const UInt32 kStartPosModelIndex = 4;
|
const UInt32 kStartPosModelIndex = 4;
|
||||||
const UInt32 kEndPosModelIndex = 14;
|
const UInt32 kEndPosModelIndex = 14;
|
||||||
const UInt32 kNumPosModels = kEndPosModelIndex - kStartPosModelIndex;
|
const UInt32 kNumPosModels = kEndPosModelIndex - kStartPosModelIndex;
|
||||||
|
|
||||||
const UInt32 kNumFullDistances = 1 << (kEndPosModelIndex / 2);
|
const UInt32 kNumFullDistances = 1 << (kEndPosModelIndex / 2);
|
||||||
|
|
||||||
const int kNumLitPosStatesBitsEncodingMax = 4;
|
const int kNumLitPosStatesBitsEncodingMax = 4;
|
||||||
const int kNumLitContextBitsMax = 8;
|
const int kNumLitContextBitsMax = 8;
|
||||||
|
|
||||||
const int kNumMoveBits = 5;
|
const int kNumMoveBits = 5;
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,411 +1,411 @@
|
|||||||
// LZMA/Encoder.h
|
// LZMA/Encoder.h
|
||||||
|
|
||||||
#ifndef __LZMA_ENCODER_H
|
#ifndef __LZMA_ENCODER_H
|
||||||
#define __LZMA_ENCODER_H
|
#define __LZMA_ENCODER_H
|
||||||
|
|
||||||
#include "../../../Common/MyCom.h"
|
#include "../../../Common/MyCom.h"
|
||||||
#include "../../../Common/Alloc.h"
|
#include "../../../Common/Alloc.h"
|
||||||
#include "../../ICoder.h"
|
#include "../../ICoder.h"
|
||||||
#include "../LZ/IMatchFinder.h"
|
#include "../LZ/IMatchFinder.h"
|
||||||
#include "../RangeCoder/RangeCoderBitTree.h"
|
#include "../RangeCoder/RangeCoderBitTree.h"
|
||||||
|
|
||||||
#include "LZMA.h"
|
#include "LZMA.h"
|
||||||
|
|
||||||
namespace NCompress {
|
namespace NCompress {
|
||||||
namespace NLZMA {
|
namespace NLZMA {
|
||||||
|
|
||||||
typedef NRangeCoder::CBitEncoder<kNumMoveBits> CMyBitEncoder;
|
typedef NRangeCoder::CBitEncoder<kNumMoveBits> CMyBitEncoder;
|
||||||
|
|
||||||
class CBaseState
|
class CBaseState
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
CState _state;
|
CState _state;
|
||||||
Byte _previousByte;
|
Byte _previousByte;
|
||||||
UInt32 _repDistances[kNumRepDistances];
|
UInt32 _repDistances[kNumRepDistances];
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
_state.Init();
|
_state.Init();
|
||||||
_previousByte = 0;
|
_previousByte = 0;
|
||||||
for(UInt32 i = 0 ; i < kNumRepDistances; i++)
|
for(UInt32 i = 0 ; i < kNumRepDistances; i++)
|
||||||
_repDistances[i] = 0;
|
_repDistances[i] = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct COptimal
|
struct COptimal
|
||||||
{
|
{
|
||||||
CState State;
|
CState State;
|
||||||
|
|
||||||
bool Prev1IsChar;
|
bool Prev1IsChar;
|
||||||
bool Prev2;
|
bool Prev2;
|
||||||
|
|
||||||
UInt32 PosPrev2;
|
UInt32 PosPrev2;
|
||||||
UInt32 BackPrev2;
|
UInt32 BackPrev2;
|
||||||
|
|
||||||
UInt32 Price;
|
UInt32 Price;
|
||||||
UInt32 PosPrev; // posNext;
|
UInt32 PosPrev; // posNext;
|
||||||
UInt32 BackPrev;
|
UInt32 BackPrev;
|
||||||
UInt32 Backs[kNumRepDistances];
|
UInt32 Backs[kNumRepDistances];
|
||||||
void MakeAsChar() { BackPrev = UInt32(-1); Prev1IsChar = false; }
|
void MakeAsChar() { BackPrev = UInt32(-1); Prev1IsChar = false; }
|
||||||
void MakeAsShortRep() { BackPrev = 0; ; Prev1IsChar = false; }
|
void MakeAsShortRep() { BackPrev = 0; ; Prev1IsChar = false; }
|
||||||
bool IsShortRep() { return (BackPrev == 0); }
|
bool IsShortRep() { return (BackPrev == 0); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
extern Byte g_FastPos[1 << 11];
|
extern Byte g_FastPos[1 << 11];
|
||||||
inline UInt32 GetPosSlot(UInt32 pos)
|
inline UInt32 GetPosSlot(UInt32 pos)
|
||||||
{
|
{
|
||||||
if (pos < (1 << 11))
|
if (pos < (1 << 11))
|
||||||
return g_FastPos[pos];
|
return g_FastPos[pos];
|
||||||
if (pos < (1 << 21))
|
if (pos < (1 << 21))
|
||||||
return g_FastPos[pos >> 10] + 20;
|
return g_FastPos[pos >> 10] + 20;
|
||||||
return g_FastPos[pos >> 20] + 40;
|
return g_FastPos[pos >> 20] + 40;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline UInt32 GetPosSlot2(UInt32 pos)
|
inline UInt32 GetPosSlot2(UInt32 pos)
|
||||||
{
|
{
|
||||||
if (pos < (1 << 17))
|
if (pos < (1 << 17))
|
||||||
return g_FastPos[pos >> 6] + 12;
|
return g_FastPos[pos >> 6] + 12;
|
||||||
if (pos < (1 << 27))
|
if (pos < (1 << 27))
|
||||||
return g_FastPos[pos >> 16] + 32;
|
return g_FastPos[pos >> 16] + 32;
|
||||||
return g_FastPos[pos >> 26] + 52;
|
return g_FastPos[pos >> 26] + 52;
|
||||||
}
|
}
|
||||||
|
|
||||||
const UInt32 kIfinityPrice = 0xFFFFFFF;
|
const UInt32 kIfinityPrice = 0xFFFFFFF;
|
||||||
|
|
||||||
const UInt32 kNumOpts = 1 << 12;
|
const UInt32 kNumOpts = 1 << 12;
|
||||||
|
|
||||||
|
|
||||||
class CLiteralEncoder2
|
class CLiteralEncoder2
|
||||||
{
|
{
|
||||||
CMyBitEncoder _encoders[0x300];
|
CMyBitEncoder _encoders[0x300];
|
||||||
public:
|
public:
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 0x300; i++)
|
for (int i = 0; i < 0x300; i++)
|
||||||
_encoders[i].Init();
|
_encoders[i].Init();
|
||||||
}
|
}
|
||||||
void Encode(NRangeCoder::CEncoder *rangeEncoder, Byte symbol);
|
void Encode(NRangeCoder::CEncoder *rangeEncoder, Byte symbol);
|
||||||
void EncodeMatched(NRangeCoder::CEncoder *rangeEncoder, Byte matchByte, Byte symbol);
|
void EncodeMatched(NRangeCoder::CEncoder *rangeEncoder, Byte matchByte, Byte symbol);
|
||||||
UInt32 GetPrice(bool matchMode, Byte matchByte, Byte symbol) const;
|
UInt32 GetPrice(bool matchMode, Byte matchByte, Byte symbol) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CLiteralEncoder
|
class CLiteralEncoder
|
||||||
{
|
{
|
||||||
CLiteralEncoder2 *_coders;
|
CLiteralEncoder2 *_coders;
|
||||||
int _numPrevBits;
|
int _numPrevBits;
|
||||||
int _numPosBits;
|
int _numPosBits;
|
||||||
UInt32 _posMask;
|
UInt32 _posMask;
|
||||||
public:
|
public:
|
||||||
CLiteralEncoder(): _coders(0) {}
|
CLiteralEncoder(): _coders(0) {}
|
||||||
~CLiteralEncoder() { Free(); }
|
~CLiteralEncoder() { Free(); }
|
||||||
void Free()
|
void Free()
|
||||||
{
|
{
|
||||||
MyFree(_coders);
|
MyFree(_coders);
|
||||||
_coders = 0;
|
_coders = 0;
|
||||||
}
|
}
|
||||||
bool Create(int numPosBits, int numPrevBits)
|
bool Create(int numPosBits, int numPrevBits)
|
||||||
{
|
{
|
||||||
if (_coders == 0 || (numPosBits + numPrevBits) != (_numPrevBits + _numPosBits))
|
if (_coders == 0 || (numPosBits + numPrevBits) != (_numPrevBits + _numPosBits))
|
||||||
{
|
{
|
||||||
Free();
|
Free();
|
||||||
UInt32 numStates = 1 << (numPosBits + numPrevBits);
|
UInt32 numStates = 1 << (numPosBits + numPrevBits);
|
||||||
_coders = (CLiteralEncoder2 *)MyAlloc(numStates * sizeof(CLiteralEncoder2));
|
_coders = (CLiteralEncoder2 *)MyAlloc(numStates * sizeof(CLiteralEncoder2));
|
||||||
}
|
}
|
||||||
_numPosBits = numPosBits;
|
_numPosBits = numPosBits;
|
||||||
_posMask = (1 << numPosBits) - 1;
|
_posMask = (1 << numPosBits) - 1;
|
||||||
_numPrevBits = numPrevBits;
|
_numPrevBits = numPrevBits;
|
||||||
return (_coders != 0);
|
return (_coders != 0);
|
||||||
}
|
}
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
UInt32 numStates = 1 << (_numPrevBits + _numPosBits);
|
UInt32 numStates = 1 << (_numPrevBits + _numPosBits);
|
||||||
for (UInt32 i = 0; i < numStates; i++)
|
for (UInt32 i = 0; i < numStates; i++)
|
||||||
_coders[i].Init();
|
_coders[i].Init();
|
||||||
}
|
}
|
||||||
CLiteralEncoder2 *GetSubCoder(UInt32 pos, Byte prevByte)
|
CLiteralEncoder2 *GetSubCoder(UInt32 pos, Byte prevByte)
|
||||||
{ return &_coders[((pos & _posMask) << _numPrevBits) + (prevByte >> (8 - _numPrevBits))]; }
|
{ return &_coders[((pos & _posMask) << _numPrevBits) + (prevByte >> (8 - _numPrevBits))]; }
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace NLength {
|
namespace NLength {
|
||||||
|
|
||||||
class CEncoder
|
class CEncoder
|
||||||
{
|
{
|
||||||
CMyBitEncoder _choice;
|
CMyBitEncoder _choice;
|
||||||
CMyBitEncoder _choice2;
|
CMyBitEncoder _choice2;
|
||||||
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumLowBits> _lowCoder[kNumPosStatesEncodingMax];
|
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumLowBits> _lowCoder[kNumPosStatesEncodingMax];
|
||||||
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumMidBits> _midCoder[kNumPosStatesEncodingMax];
|
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumMidBits> _midCoder[kNumPosStatesEncodingMax];
|
||||||
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumHighBits> _highCoder;
|
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumHighBits> _highCoder;
|
||||||
public:
|
public:
|
||||||
void Init(UInt32 numPosStates);
|
void Init(UInt32 numPosStates);
|
||||||
void Encode(NRangeCoder::CEncoder *rangeEncoder, UInt32 symbol, UInt32 posState);
|
void Encode(NRangeCoder::CEncoder *rangeEncoder, UInt32 symbol, UInt32 posState);
|
||||||
void SetPrices(UInt32 posState, UInt32 numSymbols, UInt32 *prices) const;
|
void SetPrices(UInt32 posState, UInt32 numSymbols, UInt32 *prices) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
const UInt32 kNumSpecSymbols = kNumLowSymbols + kNumMidSymbols;
|
const UInt32 kNumSpecSymbols = kNumLowSymbols + kNumMidSymbols;
|
||||||
|
|
||||||
class CPriceTableEncoder: public CEncoder
|
class CPriceTableEncoder: public CEncoder
|
||||||
{
|
{
|
||||||
UInt32 _prices[kNumPosStatesEncodingMax][kNumSymbolsTotal];
|
UInt32 _prices[kNumPosStatesEncodingMax][kNumSymbolsTotal];
|
||||||
UInt32 _tableSize;
|
UInt32 _tableSize;
|
||||||
UInt32 _counters[kNumPosStatesEncodingMax];
|
UInt32 _counters[kNumPosStatesEncodingMax];
|
||||||
public:
|
public:
|
||||||
void SetTableSize(UInt32 tableSize) { _tableSize = tableSize; }
|
void SetTableSize(UInt32 tableSize) { _tableSize = tableSize; }
|
||||||
UInt32 GetPrice(UInt32 symbol, UInt32 posState) const { return _prices[posState][symbol]; }
|
UInt32 GetPrice(UInt32 symbol, UInt32 posState) const { return _prices[posState][symbol]; }
|
||||||
void UpdateTable(UInt32 posState)
|
void UpdateTable(UInt32 posState)
|
||||||
{
|
{
|
||||||
SetPrices(posState, _tableSize, _prices[posState]);
|
SetPrices(posState, _tableSize, _prices[posState]);
|
||||||
_counters[posState] = _tableSize;
|
_counters[posState] = _tableSize;
|
||||||
}
|
}
|
||||||
void UpdateTables(UInt32 numPosStates)
|
void UpdateTables(UInt32 numPosStates)
|
||||||
{
|
{
|
||||||
for (UInt32 posState = 0; posState < numPosStates; posState++)
|
for (UInt32 posState = 0; posState < numPosStates; posState++)
|
||||||
UpdateTable(posState);
|
UpdateTable(posState);
|
||||||
}
|
}
|
||||||
void Encode(NRangeCoder::CEncoder *rangeEncoder, UInt32 symbol, UInt32 posState, bool updatePrice)
|
void Encode(NRangeCoder::CEncoder *rangeEncoder, UInt32 symbol, UInt32 posState, bool updatePrice)
|
||||||
{
|
{
|
||||||
CEncoder::Encode(rangeEncoder, symbol, posState);
|
CEncoder::Encode(rangeEncoder, symbol, posState);
|
||||||
if (updatePrice)
|
if (updatePrice)
|
||||||
if (--_counters[posState] == 0)
|
if (--_counters[posState] == 0)
|
||||||
UpdateTable(posState);
|
UpdateTable(posState);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CEncoder :
|
class CEncoder :
|
||||||
public ICompressCoder,
|
public ICompressCoder,
|
||||||
public ICompressSetOutStream,
|
public ICompressSetOutStream,
|
||||||
public ICompressSetCoderProperties,
|
public ICompressSetCoderProperties,
|
||||||
public ICompressWriteCoderProperties,
|
public ICompressWriteCoderProperties,
|
||||||
public CBaseState,
|
public CBaseState,
|
||||||
public CMyUnknownImp
|
public CMyUnknownImp
|
||||||
{
|
{
|
||||||
COptimal _optimum[kNumOpts];
|
COptimal _optimum[kNumOpts];
|
||||||
CMyComPtr<IMatchFinder> _matchFinder; // test it
|
CMyComPtr<IMatchFinder> _matchFinder; // test it
|
||||||
NRangeCoder::CEncoder _rangeEncoder;
|
NRangeCoder::CEncoder _rangeEncoder;
|
||||||
|
|
||||||
CMyBitEncoder _isMatch[kNumStates][NLength::kNumPosStatesEncodingMax];
|
CMyBitEncoder _isMatch[kNumStates][NLength::kNumPosStatesEncodingMax];
|
||||||
CMyBitEncoder _isRep[kNumStates];
|
CMyBitEncoder _isRep[kNumStates];
|
||||||
CMyBitEncoder _isRepG0[kNumStates];
|
CMyBitEncoder _isRepG0[kNumStates];
|
||||||
CMyBitEncoder _isRepG1[kNumStates];
|
CMyBitEncoder _isRepG1[kNumStates];
|
||||||
CMyBitEncoder _isRepG2[kNumStates];
|
CMyBitEncoder _isRepG2[kNumStates];
|
||||||
CMyBitEncoder _isRep0Long[kNumStates][NLength::kNumPosStatesEncodingMax];
|
CMyBitEncoder _isRep0Long[kNumStates][NLength::kNumPosStatesEncodingMax];
|
||||||
|
|
||||||
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumPosSlotBits> _posSlotEncoder[kNumLenToPosStates];
|
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumPosSlotBits> _posSlotEncoder[kNumLenToPosStates];
|
||||||
|
|
||||||
CMyBitEncoder _posEncoders[kNumFullDistances - kEndPosModelIndex];
|
CMyBitEncoder _posEncoders[kNumFullDistances - kEndPosModelIndex];
|
||||||
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumAlignBits> _posAlignEncoder;
|
NRangeCoder::CBitTreeEncoder<kNumMoveBits, kNumAlignBits> _posAlignEncoder;
|
||||||
|
|
||||||
NLength::CPriceTableEncoder _lenEncoder;
|
NLength::CPriceTableEncoder _lenEncoder;
|
||||||
NLength::CPriceTableEncoder _repMatchLenEncoder;
|
NLength::CPriceTableEncoder _repMatchLenEncoder;
|
||||||
|
|
||||||
CLiteralEncoder _literalEncoder;
|
CLiteralEncoder _literalEncoder;
|
||||||
|
|
||||||
UInt32 _matchDistances[kMatchMaxLen * 2 + 2 + 1];
|
UInt32 _matchDistances[kMatchMaxLen * 2 + 2 + 1];
|
||||||
|
|
||||||
bool _fastMode;
|
bool _fastMode;
|
||||||
// bool _maxMode;
|
// bool _maxMode;
|
||||||
UInt32 _numFastBytes;
|
UInt32 _numFastBytes;
|
||||||
UInt32 _longestMatchLength;
|
UInt32 _longestMatchLength;
|
||||||
UInt32 _numDistancePairs;
|
UInt32 _numDistancePairs;
|
||||||
|
|
||||||
UInt32 _additionalOffset;
|
UInt32 _additionalOffset;
|
||||||
|
|
||||||
UInt32 _optimumEndIndex;
|
UInt32 _optimumEndIndex;
|
||||||
UInt32 _optimumCurrentIndex;
|
UInt32 _optimumCurrentIndex;
|
||||||
|
|
||||||
bool _longestMatchWasFound;
|
bool _longestMatchWasFound;
|
||||||
|
|
||||||
UInt32 _posSlotPrices[kNumLenToPosStates][kDistTableSizeMax];
|
UInt32 _posSlotPrices[kNumLenToPosStates][kDistTableSizeMax];
|
||||||
|
|
||||||
UInt32 _distancesPrices[kNumLenToPosStates][kNumFullDistances];
|
UInt32 _distancesPrices[kNumLenToPosStates][kNumFullDistances];
|
||||||
|
|
||||||
UInt32 _alignPrices[kAlignTableSize];
|
UInt32 _alignPrices[kAlignTableSize];
|
||||||
UInt32 _alignPriceCount;
|
UInt32 _alignPriceCount;
|
||||||
|
|
||||||
UInt32 _distTableSize;
|
UInt32 _distTableSize;
|
||||||
|
|
||||||
UInt32 _posStateBits;
|
UInt32 _posStateBits;
|
||||||
UInt32 _posStateMask;
|
UInt32 _posStateMask;
|
||||||
UInt32 _numLiteralPosStateBits;
|
UInt32 _numLiteralPosStateBits;
|
||||||
UInt32 _numLiteralContextBits;
|
UInt32 _numLiteralContextBits;
|
||||||
|
|
||||||
UInt32 _dictionarySize;
|
UInt32 _dictionarySize;
|
||||||
|
|
||||||
UInt32 _dictionarySizePrev;
|
UInt32 _dictionarySizePrev;
|
||||||
UInt32 _numFastBytesPrev;
|
UInt32 _numFastBytesPrev;
|
||||||
|
|
||||||
UInt32 _matchPriceCount;
|
UInt32 _matchPriceCount;
|
||||||
UInt64 nowPos64;
|
UInt64 nowPos64;
|
||||||
bool _finished;
|
bool _finished;
|
||||||
ISequentialInStream *_inStream;
|
ISequentialInStream *_inStream;
|
||||||
|
|
||||||
UInt32 _matchFinderCycles;
|
UInt32 _matchFinderCycles;
|
||||||
int _matchFinderIndex;
|
int _matchFinderIndex;
|
||||||
#ifdef COMPRESS_MF_MT
|
#ifdef COMPRESS_MF_MT
|
||||||
bool _multiThread;
|
bool _multiThread;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool _writeEndMark;
|
bool _writeEndMark;
|
||||||
|
|
||||||
bool _needReleaseMFStream;
|
bool _needReleaseMFStream;
|
||||||
|
|
||||||
IMatchFinderSetNumPasses *setMfPasses;
|
IMatchFinderSetNumPasses *setMfPasses;
|
||||||
|
|
||||||
void ReleaseMatchFinder()
|
void ReleaseMatchFinder()
|
||||||
{
|
{
|
||||||
setMfPasses = 0;
|
setMfPasses = 0;
|
||||||
_matchFinder.Release();
|
_matchFinder.Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT ReadMatchDistances(UInt32 &len, UInt32 &numDistancePairs);
|
HRESULT ReadMatchDistances(UInt32 &len, UInt32 &numDistancePairs);
|
||||||
|
|
||||||
HRESULT MovePos(UInt32 num);
|
HRESULT MovePos(UInt32 num);
|
||||||
UInt32 GetRepLen1Price(CState state, UInt32 posState) const
|
UInt32 GetRepLen1Price(CState state, UInt32 posState) const
|
||||||
{
|
{
|
||||||
return _isRepG0[state.Index].GetPrice0() +
|
return _isRepG0[state.Index].GetPrice0() +
|
||||||
_isRep0Long[state.Index][posState].GetPrice0();
|
_isRep0Long[state.Index][posState].GetPrice0();
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt32 GetPureRepPrice(UInt32 repIndex, CState state, UInt32 posState) const
|
UInt32 GetPureRepPrice(UInt32 repIndex, CState state, UInt32 posState) const
|
||||||
{
|
{
|
||||||
UInt32 price;
|
UInt32 price;
|
||||||
if(repIndex == 0)
|
if(repIndex == 0)
|
||||||
{
|
{
|
||||||
price = _isRepG0[state.Index].GetPrice0();
|
price = _isRepG0[state.Index].GetPrice0();
|
||||||
price += _isRep0Long[state.Index][posState].GetPrice1();
|
price += _isRep0Long[state.Index][posState].GetPrice1();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
price = _isRepG0[state.Index].GetPrice1();
|
price = _isRepG0[state.Index].GetPrice1();
|
||||||
if (repIndex == 1)
|
if (repIndex == 1)
|
||||||
price += _isRepG1[state.Index].GetPrice0();
|
price += _isRepG1[state.Index].GetPrice0();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
price += _isRepG1[state.Index].GetPrice1();
|
price += _isRepG1[state.Index].GetPrice1();
|
||||||
price += _isRepG2[state.Index].GetPrice(repIndex - 2);
|
price += _isRepG2[state.Index].GetPrice(repIndex - 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return price;
|
return price;
|
||||||
}
|
}
|
||||||
UInt32 GetRepPrice(UInt32 repIndex, UInt32 len, CState state, UInt32 posState) const
|
UInt32 GetRepPrice(UInt32 repIndex, UInt32 len, CState state, UInt32 posState) const
|
||||||
{
|
{
|
||||||
return _repMatchLenEncoder.GetPrice(len - kMatchMinLen, posState) +
|
return _repMatchLenEncoder.GetPrice(len - kMatchMinLen, posState) +
|
||||||
GetPureRepPrice(repIndex, state, posState);
|
GetPureRepPrice(repIndex, state, posState);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
UInt32 GetPosLen2Price(UInt32 pos, UInt32 posState) const
|
UInt32 GetPosLen2Price(UInt32 pos, UInt32 posState) const
|
||||||
{
|
{
|
||||||
if (pos >= kNumFullDistances)
|
if (pos >= kNumFullDistances)
|
||||||
return kIfinityPrice;
|
return kIfinityPrice;
|
||||||
return _distancesPrices[0][pos] + _lenEncoder.GetPrice(0, posState);
|
return _distancesPrices[0][pos] + _lenEncoder.GetPrice(0, posState);
|
||||||
}
|
}
|
||||||
UInt32 GetPosLen3Price(UInt32 pos, UInt32 len, UInt32 posState) const
|
UInt32 GetPosLen3Price(UInt32 pos, UInt32 len, UInt32 posState) const
|
||||||
{
|
{
|
||||||
UInt32 price;
|
UInt32 price;
|
||||||
UInt32 lenToPosState = GetLenToPosState(len);
|
UInt32 lenToPosState = GetLenToPosState(len);
|
||||||
if (pos < kNumFullDistances)
|
if (pos < kNumFullDistances)
|
||||||
price = _distancesPrices[lenToPosState][pos];
|
price = _distancesPrices[lenToPosState][pos];
|
||||||
else
|
else
|
||||||
price = _posSlotPrices[lenToPosState][GetPosSlot2(pos)] +
|
price = _posSlotPrices[lenToPosState][GetPosSlot2(pos)] +
|
||||||
_alignPrices[pos & kAlignMask];
|
_alignPrices[pos & kAlignMask];
|
||||||
return price + _lenEncoder.GetPrice(len - kMatchMinLen, posState);
|
return price + _lenEncoder.GetPrice(len - kMatchMinLen, posState);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
UInt32 GetPosLenPrice(UInt32 pos, UInt32 len, UInt32 posState) const
|
UInt32 GetPosLenPrice(UInt32 pos, UInt32 len, UInt32 posState) const
|
||||||
{
|
{
|
||||||
UInt32 price;
|
UInt32 price;
|
||||||
UInt32 lenToPosState = GetLenToPosState(len);
|
UInt32 lenToPosState = GetLenToPosState(len);
|
||||||
if (pos < kNumFullDistances)
|
if (pos < kNumFullDistances)
|
||||||
price = _distancesPrices[lenToPosState][pos];
|
price = _distancesPrices[lenToPosState][pos];
|
||||||
else
|
else
|
||||||
price = _posSlotPrices[lenToPosState][GetPosSlot2(pos)] +
|
price = _posSlotPrices[lenToPosState][GetPosSlot2(pos)] +
|
||||||
_alignPrices[pos & kAlignMask];
|
_alignPrices[pos & kAlignMask];
|
||||||
return price + _lenEncoder.GetPrice(len - kMatchMinLen, posState);
|
return price + _lenEncoder.GetPrice(len - kMatchMinLen, posState);
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt32 Backward(UInt32 &backRes, UInt32 cur);
|
UInt32 Backward(UInt32 &backRes, UInt32 cur);
|
||||||
HRESULT GetOptimum(UInt32 position, UInt32 &backRes, UInt32 &lenRes);
|
HRESULT GetOptimum(UInt32 position, UInt32 &backRes, UInt32 &lenRes);
|
||||||
HRESULT GetOptimumFast(UInt32 position, UInt32 &backRes, UInt32 &lenRes);
|
HRESULT GetOptimumFast(UInt32 position, UInt32 &backRes, UInt32 &lenRes);
|
||||||
|
|
||||||
void FillDistancesPrices();
|
void FillDistancesPrices();
|
||||||
void FillAlignPrices();
|
void FillAlignPrices();
|
||||||
|
|
||||||
void ReleaseMFStream()
|
void ReleaseMFStream()
|
||||||
{
|
{
|
||||||
if (_matchFinder && _needReleaseMFStream)
|
if (_matchFinder && _needReleaseMFStream)
|
||||||
{
|
{
|
||||||
_matchFinder->ReleaseStream();
|
_matchFinder->ReleaseStream();
|
||||||
_needReleaseMFStream = false;
|
_needReleaseMFStream = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReleaseStreams()
|
void ReleaseStreams()
|
||||||
{
|
{
|
||||||
ReleaseMFStream();
|
ReleaseMFStream();
|
||||||
ReleaseOutStream();
|
ReleaseOutStream();
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT Flush(UInt32 nowPos);
|
HRESULT Flush(UInt32 nowPos);
|
||||||
class CCoderReleaser
|
class CCoderReleaser
|
||||||
{
|
{
|
||||||
CEncoder *_coder;
|
CEncoder *_coder;
|
||||||
public:
|
public:
|
||||||
CCoderReleaser(CEncoder *coder): _coder(coder) {}
|
CCoderReleaser(CEncoder *coder): _coder(coder) {}
|
||||||
~CCoderReleaser()
|
~CCoderReleaser()
|
||||||
{
|
{
|
||||||
_coder->ReleaseStreams();
|
_coder->ReleaseStreams();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
friend class CCoderReleaser;
|
friend class CCoderReleaser;
|
||||||
|
|
||||||
void WriteEndMarker(UInt32 posState);
|
void WriteEndMarker(UInt32 posState);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CEncoder();
|
CEncoder();
|
||||||
void SetWriteEndMarkerMode(bool writeEndMarker)
|
void SetWriteEndMarkerMode(bool writeEndMarker)
|
||||||
{ _writeEndMark= writeEndMarker; }
|
{ _writeEndMark= writeEndMarker; }
|
||||||
|
|
||||||
HRESULT Create();
|
HRESULT Create();
|
||||||
|
|
||||||
MY_UNKNOWN_IMP3(
|
MY_UNKNOWN_IMP3(
|
||||||
ICompressSetOutStream,
|
ICompressSetOutStream,
|
||||||
ICompressSetCoderProperties,
|
ICompressSetCoderProperties,
|
||||||
ICompressWriteCoderProperties
|
ICompressWriteCoderProperties
|
||||||
)
|
)
|
||||||
|
|
||||||
HRESULT Init();
|
HRESULT Init();
|
||||||
|
|
||||||
// ICompressCoder interface
|
// ICompressCoder interface
|
||||||
HRESULT SetStreams(ISequentialInStream *inStream,
|
HRESULT SetStreams(ISequentialInStream *inStream,
|
||||||
ISequentialOutStream *outStream,
|
ISequentialOutStream *outStream,
|
||||||
const UInt64 *inSize, const UInt64 *outSize);
|
const UInt64 *inSize, const UInt64 *outSize);
|
||||||
HRESULT CodeOneBlock(UInt64 *inSize, UInt64 *outSize, Int32 *finished);
|
HRESULT CodeOneBlock(UInt64 *inSize, UInt64 *outSize, Int32 *finished);
|
||||||
|
|
||||||
HRESULT CodeReal(ISequentialInStream *inStream,
|
HRESULT CodeReal(ISequentialInStream *inStream,
|
||||||
ISequentialOutStream *outStream,
|
ISequentialOutStream *outStream,
|
||||||
const UInt64 *inSize, const UInt64 *outSize,
|
const UInt64 *inSize, const UInt64 *outSize,
|
||||||
ICompressProgressInfo *progress);
|
ICompressProgressInfo *progress);
|
||||||
|
|
||||||
// ICompressCoder interface
|
// ICompressCoder interface
|
||||||
STDMETHOD(Code)(ISequentialInStream *inStream,
|
STDMETHOD(Code)(ISequentialInStream *inStream,
|
||||||
ISequentialOutStream *outStream,
|
ISequentialOutStream *outStream,
|
||||||
const UInt64 *inSize, const UInt64 *outSize,
|
const UInt64 *inSize, const UInt64 *outSize,
|
||||||
ICompressProgressInfo *progress);
|
ICompressProgressInfo *progress);
|
||||||
|
|
||||||
// ICompressSetCoderProperties2
|
// ICompressSetCoderProperties2
|
||||||
STDMETHOD(SetCoderProperties)(const PROPID *propIDs,
|
STDMETHOD(SetCoderProperties)(const PROPID *propIDs,
|
||||||
const PROPVARIANT *properties, UInt32 numProperties);
|
const PROPVARIANT *properties, UInt32 numProperties);
|
||||||
|
|
||||||
// ICompressWriteCoderProperties
|
// ICompressWriteCoderProperties
|
||||||
STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
|
STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
|
||||||
|
|
||||||
STDMETHOD(SetOutStream)(ISequentialOutStream *outStream);
|
STDMETHOD(SetOutStream)(ISequentialOutStream *outStream);
|
||||||
STDMETHOD(ReleaseOutStream)();
|
STDMETHOD(ReleaseOutStream)();
|
||||||
|
|
||||||
virtual ~CEncoder() {}
|
virtual ~CEncoder() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// StdAfx.h
|
// StdAfx.h
|
||||||
|
|
||||||
#ifndef __STDAFX_H
|
#ifndef __STDAFX_H
|
||||||
#define __STDAFX_H
|
#define __STDAFX_H
|
||||||
|
|
||||||
#include "../../../Common/MyWindows.h"
|
#include "../../../Common/MyWindows.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,205 +1,205 @@
|
|||||||
// Compress/RangeCoder/RangeCoder.h
|
// Compress/RangeCoder/RangeCoder.h
|
||||||
|
|
||||||
#ifndef __COMPRESS_RANGECODER_H
|
#ifndef __COMPRESS_RANGECODER_H
|
||||||
#define __COMPRESS_RANGECODER_H
|
#define __COMPRESS_RANGECODER_H
|
||||||
|
|
||||||
#include "../../Common/InBuffer.h"
|
#include "../../Common/InBuffer.h"
|
||||||
#include "../../Common/OutBuffer.h"
|
#include "../../Common/OutBuffer.h"
|
||||||
|
|
||||||
namespace NCompress {
|
namespace NCompress {
|
||||||
namespace NRangeCoder {
|
namespace NRangeCoder {
|
||||||
|
|
||||||
const int kNumTopBits = 24;
|
const int kNumTopBits = 24;
|
||||||
const UInt32 kTopValue = (1 << kNumTopBits);
|
const UInt32 kTopValue = (1 << kNumTopBits);
|
||||||
|
|
||||||
class CEncoder
|
class CEncoder
|
||||||
{
|
{
|
||||||
UInt32 _cacheSize;
|
UInt32 _cacheSize;
|
||||||
Byte _cache;
|
Byte _cache;
|
||||||
public:
|
public:
|
||||||
UInt64 Low;
|
UInt64 Low;
|
||||||
UInt32 Range;
|
UInt32 Range;
|
||||||
COutBuffer Stream;
|
COutBuffer Stream;
|
||||||
bool Create(UInt32 bufferSize) { return Stream.Create(bufferSize); }
|
bool Create(UInt32 bufferSize) { return Stream.Create(bufferSize); }
|
||||||
|
|
||||||
void SetStream(ISequentialOutStream *stream) { Stream.SetStream(stream); }
|
void SetStream(ISequentialOutStream *stream) { Stream.SetStream(stream); }
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
Stream.Init();
|
Stream.Init();
|
||||||
Low = 0;
|
Low = 0;
|
||||||
Range = 0xFFFFFFFF;
|
Range = 0xFFFFFFFF;
|
||||||
_cacheSize = 1;
|
_cacheSize = 1;
|
||||||
_cache = 0;
|
_cache = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlushData()
|
void FlushData()
|
||||||
{
|
{
|
||||||
// Low += 1;
|
// Low += 1;
|
||||||
for(int i = 0; i < 5; i++)
|
for(int i = 0; i < 5; i++)
|
||||||
ShiftLow();
|
ShiftLow();
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT FlushStream() { return Stream.Flush(); }
|
HRESULT FlushStream() { return Stream.Flush(); }
|
||||||
|
|
||||||
void ReleaseStream() { Stream.ReleaseStream(); }
|
void ReleaseStream() { Stream.ReleaseStream(); }
|
||||||
|
|
||||||
void Encode(UInt32 start, UInt32 size, UInt32 total)
|
void Encode(UInt32 start, UInt32 size, UInt32 total)
|
||||||
{
|
{
|
||||||
Low += start * (Range /= total);
|
Low += start * (Range /= total);
|
||||||
Range *= size;
|
Range *= size;
|
||||||
while (Range < kTopValue)
|
while (Range < kTopValue)
|
||||||
{
|
{
|
||||||
Range <<= 8;
|
Range <<= 8;
|
||||||
ShiftLow();
|
ShiftLow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShiftLow()
|
void ShiftLow()
|
||||||
{
|
{
|
||||||
if ((UInt32)Low < (UInt32)0xFF000000 || (int)(Low >> 32) != 0)
|
if ((UInt32)Low < (UInt32)0xFF000000 || (int)(Low >> 32) != 0)
|
||||||
{
|
{
|
||||||
Byte temp = _cache;
|
Byte temp = _cache;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Stream.WriteByte((Byte)(temp + (Byte)(Low >> 32)));
|
Stream.WriteByte((Byte)(temp + (Byte)(Low >> 32)));
|
||||||
temp = 0xFF;
|
temp = 0xFF;
|
||||||
}
|
}
|
||||||
while(--_cacheSize != 0);
|
while(--_cacheSize != 0);
|
||||||
_cache = (Byte)((UInt32)Low >> 24);
|
_cache = (Byte)((UInt32)Low >> 24);
|
||||||
}
|
}
|
||||||
_cacheSize++;
|
_cacheSize++;
|
||||||
Low = (UInt32)Low << 8;
|
Low = (UInt32)Low << 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EncodeDirectBits(UInt32 value, int numTotalBits)
|
void EncodeDirectBits(UInt32 value, int numTotalBits)
|
||||||
{
|
{
|
||||||
for (int i = numTotalBits - 1; i >= 0; i--)
|
for (int i = numTotalBits - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
Range >>= 1;
|
Range >>= 1;
|
||||||
if (((value >> i) & 1) == 1)
|
if (((value >> i) & 1) == 1)
|
||||||
Low += Range;
|
Low += Range;
|
||||||
if (Range < kTopValue)
|
if (Range < kTopValue)
|
||||||
{
|
{
|
||||||
Range <<= 8;
|
Range <<= 8;
|
||||||
ShiftLow();
|
ShiftLow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EncodeBit(UInt32 size0, UInt32 numTotalBits, UInt32 symbol)
|
void EncodeBit(UInt32 size0, UInt32 numTotalBits, UInt32 symbol)
|
||||||
{
|
{
|
||||||
UInt32 newBound = (Range >> numTotalBits) * size0;
|
UInt32 newBound = (Range >> numTotalBits) * size0;
|
||||||
if (symbol == 0)
|
if (symbol == 0)
|
||||||
Range = newBound;
|
Range = newBound;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Low += newBound;
|
Low += newBound;
|
||||||
Range -= newBound;
|
Range -= newBound;
|
||||||
}
|
}
|
||||||
while (Range < kTopValue)
|
while (Range < kTopValue)
|
||||||
{
|
{
|
||||||
Range <<= 8;
|
Range <<= 8;
|
||||||
ShiftLow();
|
ShiftLow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt64 GetProcessedSize() { return Stream.GetProcessedSize() + _cacheSize + 4; }
|
UInt64 GetProcessedSize() { return Stream.GetProcessedSize() + _cacheSize + 4; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class CDecoder
|
class CDecoder
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CInBuffer Stream;
|
CInBuffer Stream;
|
||||||
UInt32 Range;
|
UInt32 Range;
|
||||||
UInt32 Code;
|
UInt32 Code;
|
||||||
bool Create(UInt32 bufferSize) { return Stream.Create(bufferSize); }
|
bool Create(UInt32 bufferSize) { return Stream.Create(bufferSize); }
|
||||||
|
|
||||||
void Normalize()
|
void Normalize()
|
||||||
{
|
{
|
||||||
while (Range < kTopValue)
|
while (Range < kTopValue)
|
||||||
{
|
{
|
||||||
Code = (Code << 8) | Stream.ReadByte();
|
Code = (Code << 8) | Stream.ReadByte();
|
||||||
Range <<= 8;
|
Range <<= 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetStream(ISequentialInStream *stream) { Stream.SetStream(stream); }
|
void SetStream(ISequentialInStream *stream) { Stream.SetStream(stream); }
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
Stream.Init();
|
Stream.Init();
|
||||||
Code = 0;
|
Code = 0;
|
||||||
Range = 0xFFFFFFFF;
|
Range = 0xFFFFFFFF;
|
||||||
for(int i = 0; i < 5; i++)
|
for(int i = 0; i < 5; i++)
|
||||||
Code = (Code << 8) | Stream.ReadByte();
|
Code = (Code << 8) | Stream.ReadByte();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReleaseStream() { Stream.ReleaseStream(); }
|
void ReleaseStream() { Stream.ReleaseStream(); }
|
||||||
|
|
||||||
UInt32 GetThreshold(UInt32 total)
|
UInt32 GetThreshold(UInt32 total)
|
||||||
{
|
{
|
||||||
return (Code) / ( Range /= total);
|
return (Code) / ( Range /= total);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Decode(UInt32 start, UInt32 size)
|
void Decode(UInt32 start, UInt32 size)
|
||||||
{
|
{
|
||||||
Code -= start * Range;
|
Code -= start * Range;
|
||||||
Range *= size;
|
Range *= size;
|
||||||
Normalize();
|
Normalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt32 DecodeDirectBits(int numTotalBits)
|
UInt32 DecodeDirectBits(int numTotalBits)
|
||||||
{
|
{
|
||||||
UInt32 range = Range;
|
UInt32 range = Range;
|
||||||
UInt32 code = Code;
|
UInt32 code = Code;
|
||||||
UInt32 result = 0;
|
UInt32 result = 0;
|
||||||
for (int i = numTotalBits; i != 0; i--)
|
for (int i = numTotalBits; i != 0; i--)
|
||||||
{
|
{
|
||||||
range >>= 1;
|
range >>= 1;
|
||||||
/*
|
/*
|
||||||
result <<= 1;
|
result <<= 1;
|
||||||
if (code >= range)
|
if (code >= range)
|
||||||
{
|
{
|
||||||
code -= range;
|
code -= range;
|
||||||
result |= 1;
|
result |= 1;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
UInt32 t = (code - range) >> 31;
|
UInt32 t = (code - range) >> 31;
|
||||||
code -= range & (t - 1);
|
code -= range & (t - 1);
|
||||||
result = (result << 1) | (1 - t);
|
result = (result << 1) | (1 - t);
|
||||||
|
|
||||||
if (range < kTopValue)
|
if (range < kTopValue)
|
||||||
{
|
{
|
||||||
code = (code << 8) | Stream.ReadByte();
|
code = (code << 8) | Stream.ReadByte();
|
||||||
range <<= 8;
|
range <<= 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Range = range;
|
Range = range;
|
||||||
Code = code;
|
Code = code;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt32 DecodeBit(UInt32 size0, UInt32 numTotalBits)
|
UInt32 DecodeBit(UInt32 size0, UInt32 numTotalBits)
|
||||||
{
|
{
|
||||||
UInt32 newBound = (Range >> numTotalBits) * size0;
|
UInt32 newBound = (Range >> numTotalBits) * size0;
|
||||||
UInt32 symbol;
|
UInt32 symbol;
|
||||||
if (Code < newBound)
|
if (Code < newBound)
|
||||||
{
|
{
|
||||||
symbol = 0;
|
symbol = 0;
|
||||||
Range = newBound;
|
Range = newBound;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
symbol = 1;
|
symbol = 1;
|
||||||
Code -= newBound;
|
Code -= newBound;
|
||||||
Range -= newBound;
|
Range -= newBound;
|
||||||
}
|
}
|
||||||
Normalize();
|
Normalize();
|
||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt64 GetProcessedSize() {return Stream.GetProcessedSize(); }
|
UInt64 GetProcessedSize() {return Stream.GetProcessedSize(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,80 +1,80 @@
|
|||||||
// Compress/RangeCoder/RangeCoderBit.cpp
|
// Compress/RangeCoder/RangeCoderBit.cpp
|
||||||
|
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
#include "RangeCoderBit.h"
|
#include "RangeCoderBit.h"
|
||||||
|
|
||||||
namespace NCompress {
|
namespace NCompress {
|
||||||
namespace NRangeCoder {
|
namespace NRangeCoder {
|
||||||
|
|
||||||
UInt32 CPriceTables::ProbPrices[kBitModelTotal >> kNumMoveReducingBits];
|
UInt32 CPriceTables::ProbPrices[kBitModelTotal >> kNumMoveReducingBits];
|
||||||
static CPriceTables g_PriceTables;
|
static CPriceTables g_PriceTables;
|
||||||
|
|
||||||
CPriceTables::CPriceTables() { Init(); }
|
CPriceTables::CPriceTables() { Init(); }
|
||||||
|
|
||||||
void CPriceTables::Init()
|
void CPriceTables::Init()
|
||||||
{
|
{
|
||||||
const int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits);
|
const int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits);
|
||||||
for(int i = kNumBits - 1; i >= 0; i--)
|
for(int i = kNumBits - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
UInt32 start = 1 << (kNumBits - i - 1);
|
UInt32 start = 1 << (kNumBits - i - 1);
|
||||||
UInt32 end = 1 << (kNumBits - i);
|
UInt32 end = 1 << (kNumBits - i);
|
||||||
for (UInt32 j = start; j < end; j++)
|
for (UInt32 j = start; j < end; j++)
|
||||||
ProbPrices[j] = (i << kNumBitPriceShiftBits) +
|
ProbPrices[j] = (i << kNumBitPriceShiftBits) +
|
||||||
(((end - j) << kNumBitPriceShiftBits) >> (kNumBits - i - 1));
|
(((end - j) << kNumBitPriceShiftBits) >> (kNumBits - i - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// simplest: bad solution
|
// simplest: bad solution
|
||||||
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
||||||
ProbPrices[i] = kBitPrice;
|
ProbPrices[i] = kBitPrice;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
const double kDummyMultMid = (1.0 / kBitPrice) / 2;
|
const double kDummyMultMid = (1.0 / kBitPrice) / 2;
|
||||||
const double kDummyMultMid = 0;
|
const double kDummyMultMid = 0;
|
||||||
// float solution
|
// float solution
|
||||||
double ln2 = log(double(2));
|
double ln2 = log(double(2));
|
||||||
double lnAll = log(double(kBitModelTotal >> kNumMoveReducingBits));
|
double lnAll = log(double(kBitModelTotal >> kNumMoveReducingBits));
|
||||||
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
||||||
ProbPrices[i] = UInt32((fabs(lnAll - log(double(i))) / ln2 + kDummyMultMid) * kBitPrice);
|
ProbPrices[i] = UInt32((fabs(lnAll - log(double(i))) / ln2 + kDummyMultMid) * kBitPrice);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// experimental, slow, solution:
|
// experimental, slow, solution:
|
||||||
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
||||||
{
|
{
|
||||||
const int kCyclesBits = 5;
|
const int kCyclesBits = 5;
|
||||||
const UInt32 kCycles = (1 << kCyclesBits);
|
const UInt32 kCycles = (1 << kCyclesBits);
|
||||||
|
|
||||||
UInt32 range = UInt32(-1);
|
UInt32 range = UInt32(-1);
|
||||||
UInt32 bitCount = 0;
|
UInt32 bitCount = 0;
|
||||||
for (UInt32 j = 0; j < kCycles; j++)
|
for (UInt32 j = 0; j < kCycles; j++)
|
||||||
{
|
{
|
||||||
range >>= (kNumBitModelTotalBits - kNumMoveReducingBits);
|
range >>= (kNumBitModelTotalBits - kNumMoveReducingBits);
|
||||||
range *= i;
|
range *= i;
|
||||||
while(range < (1 << 31))
|
while(range < (1 << 31))
|
||||||
{
|
{
|
||||||
range <<= 1;
|
range <<= 1;
|
||||||
bitCount++;
|
bitCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bitCount <<= kNumBitPriceShiftBits;
|
bitCount <<= kNumBitPriceShiftBits;
|
||||||
range -= (1 << 31);
|
range -= (1 << 31);
|
||||||
for (int k = kNumBitPriceShiftBits - 1; k >= 0; k--)
|
for (int k = kNumBitPriceShiftBits - 1; k >= 0; k--)
|
||||||
{
|
{
|
||||||
range <<= 1;
|
range <<= 1;
|
||||||
if (range > (1 << 31))
|
if (range > (1 << 31))
|
||||||
{
|
{
|
||||||
bitCount += (1 << k);
|
bitCount += (1 << k);
|
||||||
range -= (1 << 31);
|
range -= (1 << 31);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ProbPrices[i] = (bitCount
|
ProbPrices[i] = (bitCount
|
||||||
// + (1 << (kCyclesBits - 1))
|
// + (1 << (kCyclesBits - 1))
|
||||||
) >> kCyclesBits;
|
) >> kCyclesBits;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
@ -1,120 +1,120 @@
|
|||||||
// Compress/RangeCoder/RangeCoderBit.h
|
// Compress/RangeCoder/RangeCoderBit.h
|
||||||
|
|
||||||
#ifndef __COMPRESS_RANGECODER_BIT_H
|
#ifndef __COMPRESS_RANGECODER_BIT_H
|
||||||
#define __COMPRESS_RANGECODER_BIT_H
|
#define __COMPRESS_RANGECODER_BIT_H
|
||||||
|
|
||||||
#include "RangeCoder.h"
|
#include "RangeCoder.h"
|
||||||
|
|
||||||
namespace NCompress {
|
namespace NCompress {
|
||||||
namespace NRangeCoder {
|
namespace NRangeCoder {
|
||||||
|
|
||||||
const int kNumBitModelTotalBits = 11;
|
const int kNumBitModelTotalBits = 11;
|
||||||
const UInt32 kBitModelTotal = (1 << kNumBitModelTotalBits);
|
const UInt32 kBitModelTotal = (1 << kNumBitModelTotalBits);
|
||||||
|
|
||||||
const int kNumMoveReducingBits = 2;
|
const int kNumMoveReducingBits = 2;
|
||||||
|
|
||||||
const int kNumBitPriceShiftBits = 6;
|
const int kNumBitPriceShiftBits = 6;
|
||||||
const UInt32 kBitPrice = 1 << kNumBitPriceShiftBits;
|
const UInt32 kBitPrice = 1 << kNumBitPriceShiftBits;
|
||||||
|
|
||||||
class CPriceTables
|
class CPriceTables
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static UInt32 ProbPrices[kBitModelTotal >> kNumMoveReducingBits];
|
static UInt32 ProbPrices[kBitModelTotal >> kNumMoveReducingBits];
|
||||||
static void Init();
|
static void Init();
|
||||||
CPriceTables();
|
CPriceTables();
|
||||||
};
|
};
|
||||||
|
|
||||||
template <int numMoveBits>
|
template <int numMoveBits>
|
||||||
class CBitModel
|
class CBitModel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
UInt32 Prob;
|
UInt32 Prob;
|
||||||
void UpdateModel(UInt32 symbol)
|
void UpdateModel(UInt32 symbol)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Prob -= (Prob + ((symbol - 1) & ((1 << numMoveBits) - 1))) >> numMoveBits;
|
Prob -= (Prob + ((symbol - 1) & ((1 << numMoveBits) - 1))) >> numMoveBits;
|
||||||
Prob += (1 - symbol) << (kNumBitModelTotalBits - numMoveBits);
|
Prob += (1 - symbol) << (kNumBitModelTotalBits - numMoveBits);
|
||||||
*/
|
*/
|
||||||
if (symbol == 0)
|
if (symbol == 0)
|
||||||
Prob += (kBitModelTotal - Prob) >> numMoveBits;
|
Prob += (kBitModelTotal - Prob) >> numMoveBits;
|
||||||
else
|
else
|
||||||
Prob -= (Prob) >> numMoveBits;
|
Prob -= (Prob) >> numMoveBits;
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
void Init() { Prob = kBitModelTotal / 2; }
|
void Init() { Prob = kBitModelTotal / 2; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <int numMoveBits>
|
template <int numMoveBits>
|
||||||
class CBitEncoder: public CBitModel<numMoveBits>
|
class CBitEncoder: public CBitModel<numMoveBits>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void Encode(CEncoder *encoder, UInt32 symbol)
|
void Encode(CEncoder *encoder, UInt32 symbol)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
encoder->EncodeBit(this->Prob, kNumBitModelTotalBits, symbol);
|
encoder->EncodeBit(this->Prob, kNumBitModelTotalBits, symbol);
|
||||||
this->UpdateModel(symbol);
|
this->UpdateModel(symbol);
|
||||||
*/
|
*/
|
||||||
UInt32 newBound = (encoder->Range >> kNumBitModelTotalBits) * this->Prob;
|
UInt32 newBound = (encoder->Range >> kNumBitModelTotalBits) * this->Prob;
|
||||||
if (symbol == 0)
|
if (symbol == 0)
|
||||||
{
|
{
|
||||||
encoder->Range = newBound;
|
encoder->Range = newBound;
|
||||||
this->Prob += (kBitModelTotal - this->Prob) >> numMoveBits;
|
this->Prob += (kBitModelTotal - this->Prob) >> numMoveBits;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
encoder->Low += newBound;
|
encoder->Low += newBound;
|
||||||
encoder->Range -= newBound;
|
encoder->Range -= newBound;
|
||||||
this->Prob -= (this->Prob) >> numMoveBits;
|
this->Prob -= (this->Prob) >> numMoveBits;
|
||||||
}
|
}
|
||||||
if (encoder->Range < kTopValue)
|
if (encoder->Range < kTopValue)
|
||||||
{
|
{
|
||||||
encoder->Range <<= 8;
|
encoder->Range <<= 8;
|
||||||
encoder->ShiftLow();
|
encoder->ShiftLow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UInt32 GetPrice(UInt32 symbol) const
|
UInt32 GetPrice(UInt32 symbol) const
|
||||||
{
|
{
|
||||||
return CPriceTables::ProbPrices[
|
return CPriceTables::ProbPrices[
|
||||||
(((this->Prob - symbol) ^ ((-(int)symbol))) & (kBitModelTotal - 1)) >> kNumMoveReducingBits];
|
(((this->Prob - symbol) ^ ((-(int)symbol))) & (kBitModelTotal - 1)) >> kNumMoveReducingBits];
|
||||||
}
|
}
|
||||||
UInt32 GetPrice0() const { return CPriceTables::ProbPrices[this->Prob >> kNumMoveReducingBits]; }
|
UInt32 GetPrice0() const { return CPriceTables::ProbPrices[this->Prob >> kNumMoveReducingBits]; }
|
||||||
UInt32 GetPrice1() const { return CPriceTables::ProbPrices[(kBitModelTotal - this->Prob) >> kNumMoveReducingBits]; }
|
UInt32 GetPrice1() const { return CPriceTables::ProbPrices[(kBitModelTotal - this->Prob) >> kNumMoveReducingBits]; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template <int numMoveBits>
|
template <int numMoveBits>
|
||||||
class CBitDecoder: public CBitModel<numMoveBits>
|
class CBitDecoder: public CBitModel<numMoveBits>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
UInt32 Decode(CDecoder *decoder)
|
UInt32 Decode(CDecoder *decoder)
|
||||||
{
|
{
|
||||||
UInt32 newBound = (decoder->Range >> kNumBitModelTotalBits) * this->Prob;
|
UInt32 newBound = (decoder->Range >> kNumBitModelTotalBits) * this->Prob;
|
||||||
if (decoder->Code < newBound)
|
if (decoder->Code < newBound)
|
||||||
{
|
{
|
||||||
decoder->Range = newBound;
|
decoder->Range = newBound;
|
||||||
this->Prob += (kBitModelTotal - this->Prob) >> numMoveBits;
|
this->Prob += (kBitModelTotal - this->Prob) >> numMoveBits;
|
||||||
if (decoder->Range < kTopValue)
|
if (decoder->Range < kTopValue)
|
||||||
{
|
{
|
||||||
decoder->Code = (decoder->Code << 8) | decoder->Stream.ReadByte();
|
decoder->Code = (decoder->Code << 8) | decoder->Stream.ReadByte();
|
||||||
decoder->Range <<= 8;
|
decoder->Range <<= 8;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
decoder->Range -= newBound;
|
decoder->Range -= newBound;
|
||||||
decoder->Code -= newBound;
|
decoder->Code -= newBound;
|
||||||
this->Prob -= (this->Prob) >> numMoveBits;
|
this->Prob -= (this->Prob) >> numMoveBits;
|
||||||
if (decoder->Range < kTopValue)
|
if (decoder->Range < kTopValue)
|
||||||
{
|
{
|
||||||
decoder->Code = (decoder->Code << 8) | decoder->Stream.ReadByte();
|
decoder->Code = (decoder->Code << 8) | decoder->Stream.ReadByte();
|
||||||
decoder->Range <<= 8;
|
decoder->Range <<= 8;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,161 +1,161 @@
|
|||||||
// Compress/RangeCoder/RangeCoderBitTree.h
|
// Compress/RangeCoder/RangeCoderBitTree.h
|
||||||
|
|
||||||
#ifndef __COMPRESS_RANGECODER_BIT_TREE_H
|
#ifndef __COMPRESS_RANGECODER_BIT_TREE_H
|
||||||
#define __COMPRESS_RANGECODER_BIT_TREE_H
|
#define __COMPRESS_RANGECODER_BIT_TREE_H
|
||||||
|
|
||||||
#include "RangeCoderBit.h"
|
#include "RangeCoderBit.h"
|
||||||
#include "RangeCoderOpt.h"
|
#include "RangeCoderOpt.h"
|
||||||
|
|
||||||
namespace NCompress {
|
namespace NCompress {
|
||||||
namespace NRangeCoder {
|
namespace NRangeCoder {
|
||||||
|
|
||||||
template <int numMoveBits, int NumBitLevels>
|
template <int numMoveBits, int NumBitLevels>
|
||||||
class CBitTreeEncoder
|
class CBitTreeEncoder
|
||||||
{
|
{
|
||||||
CBitEncoder<numMoveBits> Models[1 << NumBitLevels];
|
CBitEncoder<numMoveBits> Models[1 << NumBitLevels];
|
||||||
public:
|
public:
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
for(UInt32 i = 1; i < (1 << NumBitLevels); i++)
|
for(UInt32 i = 1; i < (1 << NumBitLevels); i++)
|
||||||
Models[i].Init();
|
Models[i].Init();
|
||||||
}
|
}
|
||||||
void Encode(CEncoder *rangeEncoder, UInt32 symbol)
|
void Encode(CEncoder *rangeEncoder, UInt32 symbol)
|
||||||
{
|
{
|
||||||
UInt32 modelIndex = 1;
|
UInt32 modelIndex = 1;
|
||||||
for (int bitIndex = NumBitLevels; bitIndex != 0 ;)
|
for (int bitIndex = NumBitLevels; bitIndex != 0 ;)
|
||||||
{
|
{
|
||||||
bitIndex--;
|
bitIndex--;
|
||||||
UInt32 bit = (symbol >> bitIndex) & 1;
|
UInt32 bit = (symbol >> bitIndex) & 1;
|
||||||
Models[modelIndex].Encode(rangeEncoder, bit);
|
Models[modelIndex].Encode(rangeEncoder, bit);
|
||||||
modelIndex = (modelIndex << 1) | bit;
|
modelIndex = (modelIndex << 1) | bit;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
void ReverseEncode(CEncoder *rangeEncoder, UInt32 symbol)
|
void ReverseEncode(CEncoder *rangeEncoder, UInt32 symbol)
|
||||||
{
|
{
|
||||||
UInt32 modelIndex = 1;
|
UInt32 modelIndex = 1;
|
||||||
for (int i = 0; i < NumBitLevels; i++)
|
for (int i = 0; i < NumBitLevels; i++)
|
||||||
{
|
{
|
||||||
UInt32 bit = symbol & 1;
|
UInt32 bit = symbol & 1;
|
||||||
Models[modelIndex].Encode(rangeEncoder, bit);
|
Models[modelIndex].Encode(rangeEncoder, bit);
|
||||||
modelIndex = (modelIndex << 1) | bit;
|
modelIndex = (modelIndex << 1) | bit;
|
||||||
symbol >>= 1;
|
symbol >>= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UInt32 GetPrice(UInt32 symbol) const
|
UInt32 GetPrice(UInt32 symbol) const
|
||||||
{
|
{
|
||||||
symbol |= (1 << NumBitLevels);
|
symbol |= (1 << NumBitLevels);
|
||||||
UInt32 price = 0;
|
UInt32 price = 0;
|
||||||
while (symbol != 1)
|
while (symbol != 1)
|
||||||
{
|
{
|
||||||
price += Models[symbol >> 1].GetPrice(symbol & 1);
|
price += Models[symbol >> 1].GetPrice(symbol & 1);
|
||||||
symbol >>= 1;
|
symbol >>= 1;
|
||||||
}
|
}
|
||||||
return price;
|
return price;
|
||||||
}
|
}
|
||||||
UInt32 ReverseGetPrice(UInt32 symbol) const
|
UInt32 ReverseGetPrice(UInt32 symbol) const
|
||||||
{
|
{
|
||||||
UInt32 price = 0;
|
UInt32 price = 0;
|
||||||
UInt32 modelIndex = 1;
|
UInt32 modelIndex = 1;
|
||||||
for (int i = NumBitLevels; i != 0; i--)
|
for (int i = NumBitLevels; i != 0; i--)
|
||||||
{
|
{
|
||||||
UInt32 bit = symbol & 1;
|
UInt32 bit = symbol & 1;
|
||||||
symbol >>= 1;
|
symbol >>= 1;
|
||||||
price += Models[modelIndex].GetPrice(bit);
|
price += Models[modelIndex].GetPrice(bit);
|
||||||
modelIndex = (modelIndex << 1) | bit;
|
modelIndex = (modelIndex << 1) | bit;
|
||||||
}
|
}
|
||||||
return price;
|
return price;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <int numMoveBits, int NumBitLevels>
|
template <int numMoveBits, int NumBitLevels>
|
||||||
class CBitTreeDecoder
|
class CBitTreeDecoder
|
||||||
{
|
{
|
||||||
CBitDecoder<numMoveBits> Models[1 << NumBitLevels];
|
CBitDecoder<numMoveBits> Models[1 << NumBitLevels];
|
||||||
public:
|
public:
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
for(UInt32 i = 1; i < (1 << NumBitLevels); i++)
|
for(UInt32 i = 1; i < (1 << NumBitLevels); i++)
|
||||||
Models[i].Init();
|
Models[i].Init();
|
||||||
}
|
}
|
||||||
UInt32 Decode(CDecoder *rangeDecoder)
|
UInt32 Decode(CDecoder *rangeDecoder)
|
||||||
{
|
{
|
||||||
UInt32 modelIndex = 1;
|
UInt32 modelIndex = 1;
|
||||||
RC_INIT_VAR
|
RC_INIT_VAR
|
||||||
for(int bitIndex = NumBitLevels; bitIndex != 0; bitIndex--)
|
for(int bitIndex = NumBitLevels; bitIndex != 0; bitIndex--)
|
||||||
{
|
{
|
||||||
// modelIndex = (modelIndex << 1) + Models[modelIndex].Decode(rangeDecoder);
|
// modelIndex = (modelIndex << 1) + Models[modelIndex].Decode(rangeDecoder);
|
||||||
RC_GETBIT(numMoveBits, Models[modelIndex].Prob, modelIndex)
|
RC_GETBIT(numMoveBits, Models[modelIndex].Prob, modelIndex)
|
||||||
}
|
}
|
||||||
RC_FLUSH_VAR
|
RC_FLUSH_VAR
|
||||||
return modelIndex - (1 << NumBitLevels);
|
return modelIndex - (1 << NumBitLevels);
|
||||||
};
|
};
|
||||||
UInt32 ReverseDecode(CDecoder *rangeDecoder)
|
UInt32 ReverseDecode(CDecoder *rangeDecoder)
|
||||||
{
|
{
|
||||||
UInt32 modelIndex = 1;
|
UInt32 modelIndex = 1;
|
||||||
UInt32 symbol = 0;
|
UInt32 symbol = 0;
|
||||||
RC_INIT_VAR
|
RC_INIT_VAR
|
||||||
for(int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
|
for(int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
|
||||||
{
|
{
|
||||||
// UInt32 bit = Models[modelIndex].Decode(rangeDecoder);
|
// UInt32 bit = Models[modelIndex].Decode(rangeDecoder);
|
||||||
// modelIndex <<= 1;
|
// modelIndex <<= 1;
|
||||||
// modelIndex += bit;
|
// modelIndex += bit;
|
||||||
// symbol |= (bit << bitIndex);
|
// symbol |= (bit << bitIndex);
|
||||||
RC_GETBIT2(numMoveBits, Models[modelIndex].Prob, modelIndex, ; , symbol |= (1 << bitIndex))
|
RC_GETBIT2(numMoveBits, Models[modelIndex].Prob, modelIndex, ; , symbol |= (1 << bitIndex))
|
||||||
}
|
}
|
||||||
RC_FLUSH_VAR
|
RC_FLUSH_VAR
|
||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <int numMoveBits>
|
template <int numMoveBits>
|
||||||
void ReverseBitTreeEncode(CBitEncoder<numMoveBits> *Models,
|
void ReverseBitTreeEncode(CBitEncoder<numMoveBits> *Models,
|
||||||
CEncoder *rangeEncoder, int NumBitLevels, UInt32 symbol)
|
CEncoder *rangeEncoder, int NumBitLevels, UInt32 symbol)
|
||||||
{
|
{
|
||||||
UInt32 modelIndex = 1;
|
UInt32 modelIndex = 1;
|
||||||
for (int i = 0; i < NumBitLevels; i++)
|
for (int i = 0; i < NumBitLevels; i++)
|
||||||
{
|
{
|
||||||
UInt32 bit = symbol & 1;
|
UInt32 bit = symbol & 1;
|
||||||
Models[modelIndex].Encode(rangeEncoder, bit);
|
Models[modelIndex].Encode(rangeEncoder, bit);
|
||||||
modelIndex = (modelIndex << 1) | bit;
|
modelIndex = (modelIndex << 1) | bit;
|
||||||
symbol >>= 1;
|
symbol >>= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <int numMoveBits>
|
template <int numMoveBits>
|
||||||
UInt32 ReverseBitTreeGetPrice(CBitEncoder<numMoveBits> *Models,
|
UInt32 ReverseBitTreeGetPrice(CBitEncoder<numMoveBits> *Models,
|
||||||
UInt32 NumBitLevels, UInt32 symbol)
|
UInt32 NumBitLevels, UInt32 symbol)
|
||||||
{
|
{
|
||||||
UInt32 price = 0;
|
UInt32 price = 0;
|
||||||
UInt32 modelIndex = 1;
|
UInt32 modelIndex = 1;
|
||||||
for (int i = NumBitLevels; i != 0; i--)
|
for (int i = NumBitLevels; i != 0; i--)
|
||||||
{
|
{
|
||||||
UInt32 bit = symbol & 1;
|
UInt32 bit = symbol & 1;
|
||||||
symbol >>= 1;
|
symbol >>= 1;
|
||||||
price += Models[modelIndex].GetPrice(bit);
|
price += Models[modelIndex].GetPrice(bit);
|
||||||
modelIndex = (modelIndex << 1) | bit;
|
modelIndex = (modelIndex << 1) | bit;
|
||||||
}
|
}
|
||||||
return price;
|
return price;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <int numMoveBits>
|
template <int numMoveBits>
|
||||||
UInt32 ReverseBitTreeDecode(CBitDecoder<numMoveBits> *Models,
|
UInt32 ReverseBitTreeDecode(CBitDecoder<numMoveBits> *Models,
|
||||||
CDecoder *rangeDecoder, int NumBitLevels)
|
CDecoder *rangeDecoder, int NumBitLevels)
|
||||||
{
|
{
|
||||||
UInt32 modelIndex = 1;
|
UInt32 modelIndex = 1;
|
||||||
UInt32 symbol = 0;
|
UInt32 symbol = 0;
|
||||||
RC_INIT_VAR
|
RC_INIT_VAR
|
||||||
for(int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
|
for(int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
|
||||||
{
|
{
|
||||||
// UInt32 bit = Models[modelIndex].Decode(rangeDecoder);
|
// UInt32 bit = Models[modelIndex].Decode(rangeDecoder);
|
||||||
// modelIndex <<= 1;
|
// modelIndex <<= 1;
|
||||||
// modelIndex += bit;
|
// modelIndex += bit;
|
||||||
// symbol |= (bit << bitIndex);
|
// symbol |= (bit << bitIndex);
|
||||||
RC_GETBIT2(numMoveBits, Models[modelIndex].Prob, modelIndex, ; , symbol |= (1 << bitIndex))
|
RC_GETBIT2(numMoveBits, Models[modelIndex].Prob, modelIndex, ; , symbol |= (1 << bitIndex))
|
||||||
}
|
}
|
||||||
RC_FLUSH_VAR
|
RC_FLUSH_VAR
|
||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,31 +1,31 @@
|
|||||||
// Compress/RangeCoder/RangeCoderOpt.h
|
// Compress/RangeCoder/RangeCoderOpt.h
|
||||||
|
|
||||||
#ifndef __COMPRESS_RANGECODER_OPT_H
|
#ifndef __COMPRESS_RANGECODER_OPT_H
|
||||||
#define __COMPRESS_RANGECODER_OPT_H
|
#define __COMPRESS_RANGECODER_OPT_H
|
||||||
|
|
||||||
#define RC_INIT_VAR \
|
#define RC_INIT_VAR \
|
||||||
UInt32 range = rangeDecoder->Range; \
|
UInt32 range = rangeDecoder->Range; \
|
||||||
UInt32 code = rangeDecoder->Code;
|
UInt32 code = rangeDecoder->Code;
|
||||||
|
|
||||||
#define RC_FLUSH_VAR \
|
#define RC_FLUSH_VAR \
|
||||||
rangeDecoder->Range = range; \
|
rangeDecoder->Range = range; \
|
||||||
rangeDecoder->Code = code;
|
rangeDecoder->Code = code;
|
||||||
|
|
||||||
#define RC_NORMALIZE \
|
#define RC_NORMALIZE \
|
||||||
if (range < NCompress::NRangeCoder::kTopValue) \
|
if (range < NCompress::NRangeCoder::kTopValue) \
|
||||||
{ code = (code << 8) | rangeDecoder->Stream.ReadByte(); range <<= 8; }
|
{ code = (code << 8) | rangeDecoder->Stream.ReadByte(); range <<= 8; }
|
||||||
|
|
||||||
#define RC_GETBIT2(numMoveBits, prob, mi, A0, A1) \
|
#define RC_GETBIT2(numMoveBits, prob, mi, A0, A1) \
|
||||||
{ UInt32 bound = (range >> NCompress::NRangeCoder::kNumBitModelTotalBits) * prob; \
|
{ UInt32 bound = (range >> NCompress::NRangeCoder::kNumBitModelTotalBits) * prob; \
|
||||||
if (code < bound) \
|
if (code < bound) \
|
||||||
{ A0; range = bound; \
|
{ A0; range = bound; \
|
||||||
prob += (NCompress::NRangeCoder::kBitModelTotal - prob) >> numMoveBits; \
|
prob += (NCompress::NRangeCoder::kBitModelTotal - prob) >> numMoveBits; \
|
||||||
mi <<= 1; } \
|
mi <<= 1; } \
|
||||||
else \
|
else \
|
||||||
{ A1; range -= bound; code -= bound; prob -= (prob) >> numMoveBits; \
|
{ A1; range -= bound; code -= bound; prob -= (prob) >> numMoveBits; \
|
||||||
mi = (mi + mi) + 1; }} \
|
mi = (mi + mi) + 1; }} \
|
||||||
RC_NORMALIZE
|
RC_NORMALIZE
|
||||||
|
|
||||||
#define RC_GETBIT(numMoveBits, prob, mi) RC_GETBIT2(numMoveBits, prob, mi, ; , ;)
|
#define RC_GETBIT(numMoveBits, prob, mi) RC_GETBIT2(numMoveBits, prob, mi, ; , ;)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// StdAfx.h
|
// StdAfx.h
|
||||||
|
|
||||||
#ifndef __STDAFX_H
|
#ifndef __STDAFX_H
|
||||||
#define __STDAFX_H
|
#define __STDAFX_H
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,163 +1,163 @@
|
|||||||
// ICoder.h
|
// ICoder.h
|
||||||
|
|
||||||
#ifndef __ICODER_H
|
#ifndef __ICODER_H
|
||||||
#define __ICODER_H
|
#define __ICODER_H
|
||||||
|
|
||||||
#include "IStream.h"
|
#include "IStream.h"
|
||||||
|
|
||||||
// "23170F69-40C1-278A-0000-000400xx0000"
|
// "23170F69-40C1-278A-0000-000400xx0000"
|
||||||
#define CODER_INTERFACE(i, x) \
|
#define CODER_INTERFACE(i, x) \
|
||||||
DEFINE_GUID(IID_ ## i, \
|
DEFINE_GUID(IID_ ## i, \
|
||||||
0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x04, 0x00, x, 0x00, 0x00); \
|
0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x04, 0x00, x, 0x00, 0x00); \
|
||||||
struct i: public IUnknown
|
struct i: public IUnknown
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressProgressInfo, 0x04)
|
CODER_INTERFACE(ICompressProgressInfo, 0x04)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize) PURE;
|
STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressCoder, 0x05)
|
CODER_INTERFACE(ICompressCoder, 0x05)
|
||||||
{
|
{
|
||||||
STDMETHOD(Code)(ISequentialInStream *inStream,
|
STDMETHOD(Code)(ISequentialInStream *inStream,
|
||||||
ISequentialOutStream *outStream,
|
ISequentialOutStream *outStream,
|
||||||
const UInt64 *inSize,
|
const UInt64 *inSize,
|
||||||
const UInt64 *outSize,
|
const UInt64 *outSize,
|
||||||
ICompressProgressInfo *progress) PURE;
|
ICompressProgressInfo *progress) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressCoder2, 0x18)
|
CODER_INTERFACE(ICompressCoder2, 0x18)
|
||||||
{
|
{
|
||||||
STDMETHOD(Code)(ISequentialInStream **inStreams,
|
STDMETHOD(Code)(ISequentialInStream **inStreams,
|
||||||
const UInt64 **inSizes,
|
const UInt64 **inSizes,
|
||||||
UInt32 numInStreams,
|
UInt32 numInStreams,
|
||||||
ISequentialOutStream **outStreams,
|
ISequentialOutStream **outStreams,
|
||||||
const UInt64 **outSizes,
|
const UInt64 **outSizes,
|
||||||
UInt32 numOutStreams,
|
UInt32 numOutStreams,
|
||||||
ICompressProgressInfo *progress) PURE;
|
ICompressProgressInfo *progress) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace NCoderPropID
|
namespace NCoderPropID
|
||||||
{
|
{
|
||||||
enum EEnum
|
enum EEnum
|
||||||
{
|
{
|
||||||
kDictionarySize = 0x400,
|
kDictionarySize = 0x400,
|
||||||
kUsedMemorySize,
|
kUsedMemorySize,
|
||||||
kOrder,
|
kOrder,
|
||||||
kPosStateBits = 0x440,
|
kPosStateBits = 0x440,
|
||||||
kLitContextBits,
|
kLitContextBits,
|
||||||
kLitPosBits,
|
kLitPosBits,
|
||||||
kNumFastBytes = 0x450,
|
kNumFastBytes = 0x450,
|
||||||
kMatchFinder,
|
kMatchFinder,
|
||||||
kMatchFinderCycles,
|
kMatchFinderCycles,
|
||||||
kNumPasses = 0x460,
|
kNumPasses = 0x460,
|
||||||
kAlgorithm = 0x470,
|
kAlgorithm = 0x470,
|
||||||
kMultiThread = 0x480,
|
kMultiThread = 0x480,
|
||||||
kNumThreads,
|
kNumThreads,
|
||||||
kEndMarker = 0x490
|
kEndMarker = 0x490
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressSetCoderProperties, 0x20)
|
CODER_INTERFACE(ICompressSetCoderProperties, 0x20)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetCoderProperties)(const PROPID *propIDs,
|
STDMETHOD(SetCoderProperties)(const PROPID *propIDs,
|
||||||
const PROPVARIANT *properties, UInt32 numProperties) PURE;
|
const PROPVARIANT *properties, UInt32 numProperties) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
CODER_INTERFACE(ICompressSetCoderProperties, 0x21)
|
CODER_INTERFACE(ICompressSetCoderProperties, 0x21)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE;
|
STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE;
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22)
|
CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE;
|
STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressWriteCoderProperties, 0x23)
|
CODER_INTERFACE(ICompressWriteCoderProperties, 0x23)
|
||||||
{
|
{
|
||||||
STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStreams) PURE;
|
STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStreams) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24)
|
CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24)
|
||||||
{
|
{
|
||||||
STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE;
|
STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressSetCoderMt, 0x25)
|
CODER_INTERFACE(ICompressSetCoderMt, 0x25)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE;
|
STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressGetSubStreamSize, 0x30)
|
CODER_INTERFACE(ICompressGetSubStreamSize, 0x30)
|
||||||
{
|
{
|
||||||
STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE;
|
STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressSetInStream, 0x31)
|
CODER_INTERFACE(ICompressSetInStream, 0x31)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE;
|
STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE;
|
||||||
STDMETHOD(ReleaseInStream)() PURE;
|
STDMETHOD(ReleaseInStream)() PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressSetOutStream, 0x32)
|
CODER_INTERFACE(ICompressSetOutStream, 0x32)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE;
|
STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE;
|
||||||
STDMETHOD(ReleaseOutStream)() PURE;
|
STDMETHOD(ReleaseOutStream)() PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressSetInStreamSize, 0x33)
|
CODER_INTERFACE(ICompressSetInStreamSize, 0x33)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE;
|
STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressSetOutStreamSize, 0x34)
|
CODER_INTERFACE(ICompressSetOutStreamSize, 0x34)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE;
|
STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICompressFilter, 0x40)
|
CODER_INTERFACE(ICompressFilter, 0x40)
|
||||||
{
|
{
|
||||||
STDMETHOD(Init)() PURE;
|
STDMETHOD(Init)() PURE;
|
||||||
STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size) PURE;
|
STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size) PURE;
|
||||||
// Filter return outSize (UInt32)
|
// Filter return outSize (UInt32)
|
||||||
// if (outSize <= size): Filter have converted outSize bytes
|
// if (outSize <= size): Filter have converted outSize bytes
|
||||||
// if (outSize > size): Filter have not converted anything.
|
// if (outSize > size): Filter have not converted anything.
|
||||||
// and it needs at least outSize bytes to convert one block
|
// and it needs at least outSize bytes to convert one block
|
||||||
// (it's for crypto block algorithms).
|
// (it's for crypto block algorithms).
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICryptoProperties, 0x80)
|
CODER_INTERFACE(ICryptoProperties, 0x80)
|
||||||
{
|
{
|
||||||
STDMETHOD(SetKey)(const Byte *data, UInt32 size) PURE;
|
STDMETHOD(SetKey)(const Byte *data, UInt32 size) PURE;
|
||||||
STDMETHOD(SetInitVector)(const Byte *data, UInt32 size) PURE;
|
STDMETHOD(SetInitVector)(const Byte *data, UInt32 size) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICryptoSetPassword, 0x90)
|
CODER_INTERFACE(ICryptoSetPassword, 0x90)
|
||||||
{
|
{
|
||||||
STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE;
|
STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
CODER_INTERFACE(ICryptoSetCRC, 0xA0)
|
CODER_INTERFACE(ICryptoSetCRC, 0xA0)
|
||||||
{
|
{
|
||||||
STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE;
|
STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
//////////////////////
|
//////////////////////
|
||||||
// It's for DLL file
|
// It's for DLL file
|
||||||
namespace NMethodPropID
|
namespace NMethodPropID
|
||||||
{
|
{
|
||||||
enum EEnum
|
enum EEnum
|
||||||
{
|
{
|
||||||
kID,
|
kID,
|
||||||
kName,
|
kName,
|
||||||
kDecoder,
|
kDecoder,
|
||||||
kEncoder,
|
kEncoder,
|
||||||
kInStreams,
|
kInStreams,
|
||||||
kOutStreams,
|
kOutStreams,
|
||||||
kDescription
|
kDescription
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,62 +1,62 @@
|
|||||||
// IStream.h
|
// IStream.h
|
||||||
|
|
||||||
#ifndef __ISTREAM_H
|
#ifndef __ISTREAM_H
|
||||||
#define __ISTREAM_H
|
#define __ISTREAM_H
|
||||||
|
|
||||||
#include "../Common/MyUnknown.h"
|
#include "../Common/MyUnknown.h"
|
||||||
#include "../Common/Types.h"
|
#include "../Common/Types.h"
|
||||||
|
|
||||||
// "23170F69-40C1-278A-0000-000300xx0000"
|
// "23170F69-40C1-278A-0000-000300xx0000"
|
||||||
|
|
||||||
#define STREAM_INTERFACE_SUB(i, b, x) \
|
#define STREAM_INTERFACE_SUB(i, b, x) \
|
||||||
DEFINE_GUID(IID_ ## i, \
|
DEFINE_GUID(IID_ ## i, \
|
||||||
0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x03, 0x00, x, 0x00, 0x00); \
|
0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x03, 0x00, x, 0x00, 0x00); \
|
||||||
struct i: public b
|
struct i: public b
|
||||||
|
|
||||||
#define STREAM_INTERFACE(i, x) STREAM_INTERFACE_SUB(i, IUnknown, x)
|
#define STREAM_INTERFACE(i, x) STREAM_INTERFACE_SUB(i, IUnknown, x)
|
||||||
|
|
||||||
STREAM_INTERFACE(ISequentialInStream, 0x01)
|
STREAM_INTERFACE(ISequentialInStream, 0x01)
|
||||||
{
|
{
|
||||||
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize) PURE;
|
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize) PURE;
|
||||||
/*
|
/*
|
||||||
Out: if size != 0, return_value = S_OK and (*processedSize == 0),
|
Out: if size != 0, return_value = S_OK and (*processedSize == 0),
|
||||||
then there are no more bytes in stream.
|
then there are no more bytes in stream.
|
||||||
if (size > 0) && there are bytes in stream,
|
if (size > 0) && there are bytes in stream,
|
||||||
this function must read at least 1 byte.
|
this function must read at least 1 byte.
|
||||||
This function is allowed to read less than number of remaining bytes in stream.
|
This function is allowed to read less than number of remaining bytes in stream.
|
||||||
You must call Read function in loop, if you need exact amount of data
|
You must call Read function in loop, if you need exact amount of data
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
STREAM_INTERFACE(ISequentialOutStream, 0x02)
|
STREAM_INTERFACE(ISequentialOutStream, 0x02)
|
||||||
{
|
{
|
||||||
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize) PURE;
|
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize) PURE;
|
||||||
/*
|
/*
|
||||||
if (size > 0) this function must write at least 1 byte.
|
if (size > 0) this function must write at least 1 byte.
|
||||||
This function is allowed to write less than "size".
|
This function is allowed to write less than "size".
|
||||||
You must call Write function in loop, if you need to write exact amount of data
|
You must call Write function in loop, if you need to write exact amount of data
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
STREAM_INTERFACE_SUB(IInStream, ISequentialInStream, 0x03)
|
STREAM_INTERFACE_SUB(IInStream, ISequentialInStream, 0x03)
|
||||||
{
|
{
|
||||||
STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE;
|
STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
STREAM_INTERFACE_SUB(IOutStream, ISequentialOutStream, 0x04)
|
STREAM_INTERFACE_SUB(IOutStream, ISequentialOutStream, 0x04)
|
||||||
{
|
{
|
||||||
STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE;
|
STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE;
|
||||||
STDMETHOD(SetSize)(Int64 newSize) PURE;
|
STDMETHOD(SetSize)(Int64 newSize) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
STREAM_INTERFACE(IStreamGetSize, 0x06)
|
STREAM_INTERFACE(IStreamGetSize, 0x06)
|
||||||
{
|
{
|
||||||
STDMETHOD(GetSize)(UInt64 *size) PURE;
|
STDMETHOD(GetSize)(UInt64 *size) PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
STREAM_INTERFACE(IOutStreamFlush, 0x07)
|
STREAM_INTERFACE(IOutStreamFlush, 0x07)
|
||||||
{
|
{
|
||||||
STDMETHOD(Flush)() PURE;
|
STDMETHOD(Flush)() PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,118 +1,118 @@
|
|||||||
// Common/Alloc.cpp
|
// Common/Alloc.cpp
|
||||||
|
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "MyWindows.h"
|
#include "MyWindows.h"
|
||||||
#else
|
#else
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Alloc.h"
|
#include "Alloc.h"
|
||||||
|
|
||||||
/* #define _SZ_ALLOC_DEBUG */
|
/* #define _SZ_ALLOC_DEBUG */
|
||||||
/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
|
/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
|
||||||
#ifdef _SZ_ALLOC_DEBUG
|
#ifdef _SZ_ALLOC_DEBUG
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
int g_allocCount = 0;
|
int g_allocCount = 0;
|
||||||
int g_allocCountMid = 0;
|
int g_allocCountMid = 0;
|
||||||
int g_allocCountBig = 0;
|
int g_allocCountBig = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void *MyAlloc(size_t size) throw()
|
void *MyAlloc(size_t size) throw()
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
return 0;
|
return 0;
|
||||||
#ifdef _SZ_ALLOC_DEBUG
|
#ifdef _SZ_ALLOC_DEBUG
|
||||||
fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount++);
|
fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount++);
|
||||||
#endif
|
#endif
|
||||||
return ::malloc(size);
|
return ::malloc(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyFree(void *address) throw()
|
void MyFree(void *address) throw()
|
||||||
{
|
{
|
||||||
#ifdef _SZ_ALLOC_DEBUG
|
#ifdef _SZ_ALLOC_DEBUG
|
||||||
if (address != 0)
|
if (address != 0)
|
||||||
fprintf(stderr, "\nFree; count = %10d", --g_allocCount);
|
fprintf(stderr, "\nFree; count = %10d", --g_allocCount);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
::free(address);
|
::free(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
void *MidAlloc(size_t size) throw()
|
void *MidAlloc(size_t size) throw()
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
return 0;
|
return 0;
|
||||||
#ifdef _SZ_ALLOC_DEBUG
|
#ifdef _SZ_ALLOC_DEBUG
|
||||||
fprintf(stderr, "\nAlloc_Mid %10d bytes; count = %10d", size, g_allocCountMid++);
|
fprintf(stderr, "\nAlloc_Mid %10d bytes; count = %10d", size, g_allocCountMid++);
|
||||||
#endif
|
#endif
|
||||||
return ::VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE);
|
return ::VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MidFree(void *address) throw()
|
void MidFree(void *address) throw()
|
||||||
{
|
{
|
||||||
#ifdef _SZ_ALLOC_DEBUG
|
#ifdef _SZ_ALLOC_DEBUG
|
||||||
if (address != 0)
|
if (address != 0)
|
||||||
fprintf(stderr, "\nFree_Mid; count = %10d", --g_allocCountMid);
|
fprintf(stderr, "\nFree_Mid; count = %10d", --g_allocCountMid);
|
||||||
#endif
|
#endif
|
||||||
if (address == 0)
|
if (address == 0)
|
||||||
return;
|
return;
|
||||||
::VirtualFree(address, 0, MEM_RELEASE);
|
::VirtualFree(address, 0, MEM_RELEASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static SIZE_T g_LargePageSize =
|
static SIZE_T g_LargePageSize =
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
(1 << 21);
|
(1 << 21);
|
||||||
#else
|
#else
|
||||||
(1 << 22);
|
(1 << 22);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef SIZE_T (WINAPI *GetLargePageMinimumP)();
|
typedef SIZE_T (WINAPI *GetLargePageMinimumP)();
|
||||||
|
|
||||||
bool SetLargePageSize()
|
bool SetLargePageSize()
|
||||||
{
|
{
|
||||||
GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP)
|
GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP)
|
||||||
::GetProcAddress(::GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum");
|
::GetProcAddress(::GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum");
|
||||||
if (largePageMinimum == 0)
|
if (largePageMinimum == 0)
|
||||||
return false;
|
return false;
|
||||||
SIZE_T size = largePageMinimum();
|
SIZE_T size = largePageMinimum();
|
||||||
if (size == 0 || (size & (size - 1)) != 0)
|
if (size == 0 || (size & (size - 1)) != 0)
|
||||||
return false;
|
return false;
|
||||||
g_LargePageSize = size;
|
g_LargePageSize = size;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void *BigAlloc(size_t size) throw()
|
void *BigAlloc(size_t size) throw()
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
return 0;
|
return 0;
|
||||||
#ifdef _SZ_ALLOC_DEBUG
|
#ifdef _SZ_ALLOC_DEBUG
|
||||||
fprintf(stderr, "\nAlloc_Big %10d bytes; count = %10d", size, g_allocCountBig++);
|
fprintf(stderr, "\nAlloc_Big %10d bytes; count = %10d", size, g_allocCountBig++);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (size >= (1 << 18))
|
if (size >= (1 << 18))
|
||||||
{
|
{
|
||||||
void *res = ::VirtualAlloc(0, (size + g_LargePageSize - 1) & (~(g_LargePageSize - 1)),
|
void *res = ::VirtualAlloc(0, (size + g_LargePageSize - 1) & (~(g_LargePageSize - 1)),
|
||||||
MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE);
|
MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE);
|
||||||
if (res != 0)
|
if (res != 0)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
return ::VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE);
|
return ::VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BigFree(void *address) throw()
|
void BigFree(void *address) throw()
|
||||||
{
|
{
|
||||||
#ifdef _SZ_ALLOC_DEBUG
|
#ifdef _SZ_ALLOC_DEBUG
|
||||||
if (address != 0)
|
if (address != 0)
|
||||||
fprintf(stderr, "\nFree_Big; count = %10d", --g_allocCountBig);
|
fprintf(stderr, "\nFree_Big; count = %10d", --g_allocCountBig);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (address == 0)
|
if (address == 0)
|
||||||
return;
|
return;
|
||||||
::VirtualFree(address, 0, MEM_RELEASE);
|
::VirtualFree(address, 0, MEM_RELEASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,29 +1,29 @@
|
|||||||
// Common/Alloc.h
|
// Common/Alloc.h
|
||||||
|
|
||||||
#ifndef __COMMON_ALLOC_H
|
#ifndef __COMMON_ALLOC_H
|
||||||
#define __COMMON_ALLOC_H
|
#define __COMMON_ALLOC_H
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
void *MyAlloc(size_t size) throw();
|
void *MyAlloc(size_t size) throw();
|
||||||
void MyFree(void *address) throw();
|
void MyFree(void *address) throw();
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
bool SetLargePageSize();
|
bool SetLargePageSize();
|
||||||
|
|
||||||
void *MidAlloc(size_t size) throw();
|
void *MidAlloc(size_t size) throw();
|
||||||
void MidFree(void *address) throw();
|
void MidFree(void *address) throw();
|
||||||
void *BigAlloc(size_t size) throw();
|
void *BigAlloc(size_t size) throw();
|
||||||
void BigFree(void *address) throw();
|
void BigFree(void *address) throw();
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define MidAlloc(size) MyAlloc(size)
|
#define MidAlloc(size) MyAlloc(size)
|
||||||
#define MidFree(address) MyFree(address)
|
#define MidFree(address) MyFree(address)
|
||||||
#define BigAlloc(size) MyAlloc(size)
|
#define BigAlloc(size) MyAlloc(size)
|
||||||
#define BigFree(address) MyFree(address)
|
#define BigFree(address) MyFree(address)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,61 +1,61 @@
|
|||||||
// Common/CRC.cpp
|
// Common/CRC.cpp
|
||||||
|
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
#include "CRC.h"
|
#include "CRC.h"
|
||||||
|
|
||||||
static const UInt32 kCRCPoly = 0xEDB88320;
|
static const UInt32 kCRCPoly = 0xEDB88320;
|
||||||
|
|
||||||
UInt32 CCRC::Table[256];
|
UInt32 CCRC::Table[256];
|
||||||
|
|
||||||
void CCRC::InitTable()
|
void CCRC::InitTable()
|
||||||
{
|
{
|
||||||
for (UInt32 i = 0; i < 256; i++)
|
for (UInt32 i = 0; i < 256; i++)
|
||||||
{
|
{
|
||||||
UInt32 r = i;
|
UInt32 r = i;
|
||||||
for (int j = 0; j < 8; j++)
|
for (int j = 0; j < 8; j++)
|
||||||
if (r & 1)
|
if (r & 1)
|
||||||
r = (r >> 1) ^ kCRCPoly;
|
r = (r >> 1) ^ kCRCPoly;
|
||||||
else
|
else
|
||||||
r >>= 1;
|
r >>= 1;
|
||||||
CCRC::Table[i] = r;
|
CCRC::Table[i] = r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CCRCTableInit
|
class CCRCTableInit
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CCRCTableInit() { CCRC::InitTable(); }
|
CCRCTableInit() { CCRC::InitTable(); }
|
||||||
} g_CRCTableInit;
|
} g_CRCTableInit;
|
||||||
|
|
||||||
void CCRC::UpdateByte(Byte b)
|
void CCRC::UpdateByte(Byte b)
|
||||||
{
|
{
|
||||||
_value = Table[((Byte)(_value)) ^ b] ^ (_value >> 8);
|
_value = Table[((Byte)(_value)) ^ b] ^ (_value >> 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCRC::UpdateUInt16(UInt16 v)
|
void CCRC::UpdateUInt16(UInt16 v)
|
||||||
{
|
{
|
||||||
UpdateByte(Byte(v));
|
UpdateByte(Byte(v));
|
||||||
UpdateByte(Byte(v >> 8));
|
UpdateByte(Byte(v >> 8));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCRC::UpdateUInt32(UInt32 v)
|
void CCRC::UpdateUInt32(UInt32 v)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
UpdateByte((Byte)(v >> (8 * i)));
|
UpdateByte((Byte)(v >> (8 * i)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCRC::UpdateUInt64(UInt64 v)
|
void CCRC::UpdateUInt64(UInt64 v)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
UpdateByte((Byte)(v >> (8 * i)));
|
UpdateByte((Byte)(v >> (8 * i)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCRC::Update(const void *data, size_t size)
|
void CCRC::Update(const void *data, size_t size)
|
||||||
{
|
{
|
||||||
UInt32 v = _value;
|
UInt32 v = _value;
|
||||||
const Byte *p = (const Byte *)data;
|
const Byte *p = (const Byte *)data;
|
||||||
for (; size > 0 ; size--, p++)
|
for (; size > 0 ; size--, p++)
|
||||||
v = Table[((Byte)(v)) ^ *p] ^ (v >> 8);
|
v = Table[((Byte)(v)) ^ *p] ^ (v >> 8);
|
||||||
_value = v;
|
_value = v;
|
||||||
}
|
}
|
||||||
|
@ -1,36 +1,36 @@
|
|||||||
// Common/CRC.h
|
// Common/CRC.h
|
||||||
|
|
||||||
#ifndef __COMMON_CRC_H
|
#ifndef __COMMON_CRC_H
|
||||||
#define __COMMON_CRC_H
|
#define __COMMON_CRC_H
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
|
|
||||||
class CCRC
|
class CCRC
|
||||||
{
|
{
|
||||||
UInt32 _value;
|
UInt32 _value;
|
||||||
public:
|
public:
|
||||||
static UInt32 Table[256];
|
static UInt32 Table[256];
|
||||||
static void InitTable();
|
static void InitTable();
|
||||||
|
|
||||||
CCRC(): _value(0xFFFFFFFF){};
|
CCRC(): _value(0xFFFFFFFF){};
|
||||||
void Init() { _value = 0xFFFFFFFF; }
|
void Init() { _value = 0xFFFFFFFF; }
|
||||||
void UpdateByte(Byte v);
|
void UpdateByte(Byte v);
|
||||||
void UpdateUInt16(UInt16 v);
|
void UpdateUInt16(UInt16 v);
|
||||||
void UpdateUInt32(UInt32 v);
|
void UpdateUInt32(UInt32 v);
|
||||||
void UpdateUInt64(UInt64 v);
|
void UpdateUInt64(UInt64 v);
|
||||||
void Update(const void *data, size_t size);
|
void Update(const void *data, size_t size);
|
||||||
UInt32 GetDigest() const { return _value ^ 0xFFFFFFFF; }
|
UInt32 GetDigest() const { return _value ^ 0xFFFFFFFF; }
|
||||||
static UInt32 CalculateDigest(const void *data, size_t size)
|
static UInt32 CalculateDigest(const void *data, size_t size)
|
||||||
{
|
{
|
||||||
CCRC crc;
|
CCRC crc;
|
||||||
crc.Update(data, size);
|
crc.Update(data, size);
|
||||||
return crc.GetDigest();
|
return crc.GetDigest();
|
||||||
}
|
}
|
||||||
static bool VerifyDigest(UInt32 digest, const void *data, size_t size)
|
static bool VerifyDigest(UInt32 digest, const void *data, size_t size)
|
||||||
{
|
{
|
||||||
return (CalculateDigest(data, size) == digest);
|
return (CalculateDigest(data, size) == digest);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
// Common/Defs.h
|
// Common/Defs.h
|
||||||
|
|
||||||
#ifndef __COMMON_DEFS_H
|
#ifndef __COMMON_DEFS_H
|
||||||
#define __COMMON_DEFS_H
|
#define __COMMON_DEFS_H
|
||||||
|
|
||||||
template <class T> inline T MyMin(T a, T b)
|
template <class T> inline T MyMin(T a, T b)
|
||||||
{ return a < b ? a : b; }
|
{ return a < b ? a : b; }
|
||||||
template <class T> inline T MyMax(T a, T b)
|
template <class T> inline T MyMax(T a, T b)
|
||||||
{ return a > b ? a : b; }
|
{ return a > b ? a : b; }
|
||||||
|
|
||||||
template <class T> inline int MyCompare(T a, T b)
|
template <class T> inline int MyCompare(T a, T b)
|
||||||
{ return a < b ? -1 : (a == b ? 0 : 1); }
|
{ return a < b ? -1 : (a == b ? 0 : 1); }
|
||||||
|
|
||||||
inline int BoolToInt(bool value)
|
inline int BoolToInt(bool value)
|
||||||
{ return (value ? 1: 0); }
|
{ return (value ? 1: 0); }
|
||||||
|
|
||||||
inline bool IntToBool(int value)
|
inline bool IntToBool(int value)
|
||||||
{ return (value != 0); }
|
{ return (value != 0); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,203 +1,203 @@
|
|||||||
// MyCom.h
|
// MyCom.h
|
||||||
|
|
||||||
#ifndef __MYCOM_H
|
#ifndef __MYCOM_H
|
||||||
#define __MYCOM_H
|
#define __MYCOM_H
|
||||||
|
|
||||||
#include "MyWindows.h"
|
#include "MyWindows.h"
|
||||||
|
|
||||||
#define RINOK(x) { HRESULT __result_ = (x); if(__result_ != S_OK) return __result_; }
|
#define RINOK(x) { HRESULT __result_ = (x); if(__result_ != S_OK) return __result_; }
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class CMyComPtr
|
class CMyComPtr
|
||||||
{
|
{
|
||||||
T* _p;
|
T* _p;
|
||||||
public:
|
public:
|
||||||
// typedef T _PtrClass;
|
// typedef T _PtrClass;
|
||||||
CMyComPtr() { _p = NULL;}
|
CMyComPtr() { _p = NULL;}
|
||||||
CMyComPtr(T* p) {if ((_p = p) != NULL) p->AddRef(); }
|
CMyComPtr(T* p) {if ((_p = p) != NULL) p->AddRef(); }
|
||||||
CMyComPtr(const CMyComPtr<T>& lp)
|
CMyComPtr(const CMyComPtr<T>& lp)
|
||||||
{
|
{
|
||||||
if ((_p = lp._p) != NULL)
|
if ((_p = lp._p) != NULL)
|
||||||
_p->AddRef();
|
_p->AddRef();
|
||||||
}
|
}
|
||||||
~CMyComPtr() { if (_p) _p->Release(); }
|
~CMyComPtr() { if (_p) _p->Release(); }
|
||||||
void Release() { if (_p) { _p->Release(); _p = NULL; } }
|
void Release() { if (_p) { _p->Release(); _p = NULL; } }
|
||||||
operator T*() const { return (T*)_p; }
|
operator T*() const { return (T*)_p; }
|
||||||
// T& operator*() const { return *_p; }
|
// T& operator*() const { return *_p; }
|
||||||
T** operator&() { return &_p; }
|
T** operator&() { return &_p; }
|
||||||
T* operator->() const { return _p; }
|
T* operator->() const { return _p; }
|
||||||
T* operator=(T* p)
|
T* operator=(T* p)
|
||||||
{
|
{
|
||||||
if (p != 0)
|
if (p != 0)
|
||||||
p->AddRef();
|
p->AddRef();
|
||||||
if (_p)
|
if (_p)
|
||||||
_p->Release();
|
_p->Release();
|
||||||
_p = p;
|
_p = p;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
T* operator=(const CMyComPtr<T>& lp) { return (*this = lp._p); }
|
T* operator=(const CMyComPtr<T>& lp) { return (*this = lp._p); }
|
||||||
bool operator!() const { return (_p == NULL); }
|
bool operator!() const { return (_p == NULL); }
|
||||||
// bool operator==(T* pT) const { return _p == pT; }
|
// bool operator==(T* pT) const { return _p == pT; }
|
||||||
// Compare two objects for equivalence
|
// Compare two objects for equivalence
|
||||||
void Attach(T* p2)
|
void Attach(T* p2)
|
||||||
{
|
{
|
||||||
Release();
|
Release();
|
||||||
_p = p2;
|
_p = p2;
|
||||||
}
|
}
|
||||||
T* Detach()
|
T* Detach()
|
||||||
{
|
{
|
||||||
T* pt = _p;
|
T* pt = _p;
|
||||||
_p = NULL;
|
_p = NULL;
|
||||||
return pt;
|
return pt;
|
||||||
}
|
}
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HRESULT CoCreateInstance(REFCLSID rclsid, REFIID iid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL)
|
HRESULT CoCreateInstance(REFCLSID rclsid, REFIID iid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL)
|
||||||
{
|
{
|
||||||
return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, (void**)&_p);
|
return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, (void**)&_p);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
HRESULT CoCreateInstance(LPCOLESTR szProgID, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL)
|
HRESULT CoCreateInstance(LPCOLESTR szProgID, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL)
|
||||||
{
|
{
|
||||||
CLSID clsid;
|
CLSID clsid;
|
||||||
HRESULT hr = CLSIDFromProgID(szProgID, &clsid);
|
HRESULT hr = CLSIDFromProgID(szProgID, &clsid);
|
||||||
ATLASSERT(_p == NULL);
|
ATLASSERT(_p == NULL);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&_p);
|
hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&_p);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
template <class Q>
|
template <class Q>
|
||||||
HRESULT QueryInterface(REFGUID iid, Q** pp) const
|
HRESULT QueryInterface(REFGUID iid, Q** pp) const
|
||||||
{
|
{
|
||||||
return _p->QueryInterface(iid, (void**)pp);
|
return _p->QueryInterface(iid, (void**)pp);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class CMyComBSTR
|
class CMyComBSTR
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BSTR m_str;
|
BSTR m_str;
|
||||||
CMyComBSTR() { m_str = NULL; }
|
CMyComBSTR() { m_str = NULL; }
|
||||||
CMyComBSTR(LPCOLESTR pSrc) { m_str = ::SysAllocString(pSrc); }
|
CMyComBSTR(LPCOLESTR pSrc) { m_str = ::SysAllocString(pSrc); }
|
||||||
// CMyComBSTR(int nSize) { m_str = ::SysAllocStringLen(NULL, nSize); }
|
// CMyComBSTR(int nSize) { m_str = ::SysAllocStringLen(NULL, nSize); }
|
||||||
// CMyComBSTR(int nSize, LPCOLESTR sz) { m_str = ::SysAllocStringLen(sz, nSize); }
|
// CMyComBSTR(int nSize, LPCOLESTR sz) { m_str = ::SysAllocStringLen(sz, nSize); }
|
||||||
CMyComBSTR(const CMyComBSTR& src) { m_str = src.MyCopy(); }
|
CMyComBSTR(const CMyComBSTR& src) { m_str = src.MyCopy(); }
|
||||||
/*
|
/*
|
||||||
CMyComBSTR(REFGUID src)
|
CMyComBSTR(REFGUID src)
|
||||||
{
|
{
|
||||||
LPOLESTR szGuid;
|
LPOLESTR szGuid;
|
||||||
StringFromCLSID(src, &szGuid);
|
StringFromCLSID(src, &szGuid);
|
||||||
m_str = ::SysAllocString(szGuid);
|
m_str = ::SysAllocString(szGuid);
|
||||||
CoTaskMemFree(szGuid);
|
CoTaskMemFree(szGuid);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
~CMyComBSTR() { ::SysFreeString(m_str); }
|
~CMyComBSTR() { ::SysFreeString(m_str); }
|
||||||
CMyComBSTR& operator=(const CMyComBSTR& src)
|
CMyComBSTR& operator=(const CMyComBSTR& src)
|
||||||
{
|
{
|
||||||
if (m_str != src.m_str)
|
if (m_str != src.m_str)
|
||||||
{
|
{
|
||||||
if (m_str)
|
if (m_str)
|
||||||
::SysFreeString(m_str);
|
::SysFreeString(m_str);
|
||||||
m_str = src.MyCopy();
|
m_str = src.MyCopy();
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
CMyComBSTR& operator=(LPCOLESTR pSrc)
|
CMyComBSTR& operator=(LPCOLESTR pSrc)
|
||||||
{
|
{
|
||||||
::SysFreeString(m_str);
|
::SysFreeString(m_str);
|
||||||
m_str = ::SysAllocString(pSrc);
|
m_str = ::SysAllocString(pSrc);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
unsigned int Length() const { return ::SysStringLen(m_str); }
|
unsigned int Length() const { return ::SysStringLen(m_str); }
|
||||||
operator BSTR() const { return m_str; }
|
operator BSTR() const { return m_str; }
|
||||||
BSTR* operator&() { return &m_str; }
|
BSTR* operator&() { return &m_str; }
|
||||||
BSTR MyCopy() const
|
BSTR MyCopy() const
|
||||||
{
|
{
|
||||||
int byteLen = ::SysStringByteLen(m_str);
|
int byteLen = ::SysStringByteLen(m_str);
|
||||||
BSTR res = ::SysAllocStringByteLen(NULL, byteLen);
|
BSTR res = ::SysAllocStringByteLen(NULL, byteLen);
|
||||||
memmove(res, m_str, byteLen);
|
memmove(res, m_str, byteLen);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
void Attach(BSTR src) { m_str = src; }
|
void Attach(BSTR src) { m_str = src; }
|
||||||
BSTR Detach()
|
BSTR Detach()
|
||||||
{
|
{
|
||||||
BSTR s = m_str;
|
BSTR s = m_str;
|
||||||
m_str = NULL;
|
m_str = NULL;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
void Empty()
|
void Empty()
|
||||||
{
|
{
|
||||||
::SysFreeString(m_str);
|
::SysFreeString(m_str);
|
||||||
m_str = NULL;
|
m_str = NULL;
|
||||||
}
|
}
|
||||||
bool operator!() const { return (m_str == NULL); }
|
bool operator!() const { return (m_str == NULL); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class CMyUnknownImp
|
class CMyUnknownImp
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ULONG __m_RefCount;
|
ULONG __m_RefCount;
|
||||||
CMyUnknownImp(): __m_RefCount(0) {}
|
CMyUnknownImp(): __m_RefCount(0) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MY_QUERYINTERFACE_BEGIN STDMETHOD(QueryInterface) \
|
#define MY_QUERYINTERFACE_BEGIN STDMETHOD(QueryInterface) \
|
||||||
(REFGUID iid, void **outObject) {
|
(REFGUID iid, void **outObject) {
|
||||||
|
|
||||||
#define MY_QUERYINTERFACE_ENTRY(i) if (iid == IID_ ## i) \
|
#define MY_QUERYINTERFACE_ENTRY(i) if (iid == IID_ ## i) \
|
||||||
{ *outObject = (void *)(i *)this; AddRef(); return S_OK; }
|
{ *outObject = (void *)(i *)this; AddRef(); return S_OK; }
|
||||||
|
|
||||||
#define MY_QUERYINTERFACE_END return E_NOINTERFACE; }
|
#define MY_QUERYINTERFACE_END return E_NOINTERFACE; }
|
||||||
|
|
||||||
#define MY_ADDREF_RELEASE \
|
#define MY_ADDREF_RELEASE \
|
||||||
STDMETHOD_(ULONG, AddRef)() { return ++__m_RefCount; } \
|
STDMETHOD_(ULONG, AddRef)() { return ++__m_RefCount; } \
|
||||||
STDMETHOD_(ULONG, Release)() { if (--__m_RefCount != 0) \
|
STDMETHOD_(ULONG, Release)() { if (--__m_RefCount != 0) \
|
||||||
return __m_RefCount; delete this; return 0; }
|
return __m_RefCount; delete this; return 0; }
|
||||||
|
|
||||||
#define MY_UNKNOWN_IMP_SPEC(i) \
|
#define MY_UNKNOWN_IMP_SPEC(i) \
|
||||||
MY_QUERYINTERFACE_BEGIN \
|
MY_QUERYINTERFACE_BEGIN \
|
||||||
i \
|
i \
|
||||||
MY_QUERYINTERFACE_END \
|
MY_QUERYINTERFACE_END \
|
||||||
MY_ADDREF_RELEASE
|
MY_ADDREF_RELEASE
|
||||||
|
|
||||||
|
|
||||||
#define MY_UNKNOWN_IMP STDMETHOD(QueryInterface)(REFGUID, void **) { \
|
#define MY_UNKNOWN_IMP STDMETHOD(QueryInterface)(REFGUID, void **) { \
|
||||||
MY_QUERYINTERFACE_END \
|
MY_QUERYINTERFACE_END \
|
||||||
MY_ADDREF_RELEASE
|
MY_ADDREF_RELEASE
|
||||||
|
|
||||||
#define MY_UNKNOWN_IMP1(i) MY_UNKNOWN_IMP_SPEC( \
|
#define MY_UNKNOWN_IMP1(i) MY_UNKNOWN_IMP_SPEC( \
|
||||||
MY_QUERYINTERFACE_ENTRY(i) \
|
MY_QUERYINTERFACE_ENTRY(i) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define MY_UNKNOWN_IMP2(i1, i2) MY_UNKNOWN_IMP_SPEC( \
|
#define MY_UNKNOWN_IMP2(i1, i2) MY_UNKNOWN_IMP_SPEC( \
|
||||||
MY_QUERYINTERFACE_ENTRY(i1) \
|
MY_QUERYINTERFACE_ENTRY(i1) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i2) \
|
MY_QUERYINTERFACE_ENTRY(i2) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define MY_UNKNOWN_IMP3(i1, i2, i3) MY_UNKNOWN_IMP_SPEC( \
|
#define MY_UNKNOWN_IMP3(i1, i2, i3) MY_UNKNOWN_IMP_SPEC( \
|
||||||
MY_QUERYINTERFACE_ENTRY(i1) \
|
MY_QUERYINTERFACE_ENTRY(i1) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i2) \
|
MY_QUERYINTERFACE_ENTRY(i2) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i3) \
|
MY_QUERYINTERFACE_ENTRY(i3) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define MY_UNKNOWN_IMP4(i1, i2, i3, i4) MY_UNKNOWN_IMP_SPEC( \
|
#define MY_UNKNOWN_IMP4(i1, i2, i3, i4) MY_UNKNOWN_IMP_SPEC( \
|
||||||
MY_QUERYINTERFACE_ENTRY(i1) \
|
MY_QUERYINTERFACE_ENTRY(i1) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i2) \
|
MY_QUERYINTERFACE_ENTRY(i2) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i3) \
|
MY_QUERYINTERFACE_ENTRY(i3) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i4) \
|
MY_QUERYINTERFACE_ENTRY(i4) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define MY_UNKNOWN_IMP5(i1, i2, i3, i4, i5) MY_UNKNOWN_IMP_SPEC( \
|
#define MY_UNKNOWN_IMP5(i1, i2, i3, i4, i5) MY_UNKNOWN_IMP_SPEC( \
|
||||||
MY_QUERYINTERFACE_ENTRY(i1) \
|
MY_QUERYINTERFACE_ENTRY(i1) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i2) \
|
MY_QUERYINTERFACE_ENTRY(i2) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i3) \
|
MY_QUERYINTERFACE_ENTRY(i3) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i4) \
|
MY_QUERYINTERFACE_ENTRY(i4) \
|
||||||
MY_QUERYINTERFACE_ENTRY(i5) \
|
MY_QUERYINTERFACE_ENTRY(i5) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,54 +1,54 @@
|
|||||||
// Common/MyGuidDef.h
|
// Common/MyGuidDef.h
|
||||||
|
|
||||||
#ifndef GUID_DEFINED
|
#ifndef GUID_DEFINED
|
||||||
#define GUID_DEFINED
|
#define GUID_DEFINED
|
||||||
|
|
||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UInt32 Data1;
|
UInt32 Data1;
|
||||||
UInt16 Data2;
|
UInt16 Data2;
|
||||||
UInt16 Data3;
|
UInt16 Data3;
|
||||||
unsigned char Data4[8];
|
unsigned char Data4[8];
|
||||||
} GUID;
|
} GUID;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#define REFGUID const GUID &
|
#define REFGUID const GUID &
|
||||||
#else
|
#else
|
||||||
#define REFGUID const GUID *
|
#define REFGUID const GUID *
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define REFCLSID REFGUID
|
#define REFCLSID REFGUID
|
||||||
#define REFIID REFGUID
|
#define REFIID REFGUID
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
inline bool operator==(REFGUID g1, REFGUID g2)
|
inline bool operator==(REFGUID g1, REFGUID g2)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < (int)sizeof(g1); i++)
|
for (int i = 0; i < (int)sizeof(g1); i++)
|
||||||
if (((const unsigned char *)&g1)[i] != ((const unsigned char *)&g2)[i])
|
if (((const unsigned char *)&g1)[i] != ((const unsigned char *)&g2)[i])
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
inline bool operator!=(REFGUID g1, REFGUID g2) { return !(g1 == g2); }
|
inline bool operator!=(REFGUID g1, REFGUID g2) { return !(g1 == g2); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#define MY_EXTERN_C extern "C"
|
#define MY_EXTERN_C extern "C"
|
||||||
#else
|
#else
|
||||||
#define MY_EXTERN_C extern
|
#define MY_EXTERN_C extern
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // GUID_DEFINED
|
#endif // GUID_DEFINED
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEFINE_GUID
|
#ifdef DEFINE_GUID
|
||||||
#undef DEFINE_GUID
|
#undef DEFINE_GUID
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef INITGUID
|
#ifdef INITGUID
|
||||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
||||||
MY_EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
|
MY_EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
|
||||||
#else
|
#else
|
||||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
||||||
MY_EXTERN_C const GUID name
|
MY_EXTERN_C const GUID name
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
// Common/MyInitGuid.h
|
// Common/MyInitGuid.h
|
||||||
|
|
||||||
#ifndef __COMMON_MYINITGUID_H
|
#ifndef __COMMON_MYINITGUID_H
|
||||||
#define __COMMON_MYINITGUID_H
|
#define __COMMON_MYINITGUID_H
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <initguid.h>
|
#include <initguid.h>
|
||||||
#else
|
#else
|
||||||
#define INITGUID
|
#define INITGUID
|
||||||
#include "MyGuidDef.h"
|
#include "MyGuidDef.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
// MyUnknown.h
|
// MyUnknown.h
|
||||||
|
|
||||||
#ifndef __MYUNKNOWN_H
|
#ifndef __MYUNKNOWN_H
|
||||||
#define __MYUNKNOWN_H
|
#define __MYUNKNOWN_H
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
#if (_WIN32_WCE > 300)
|
#if (_WIN32_WCE > 300)
|
||||||
#include <basetyps.h>
|
#include <basetyps.h>
|
||||||
#else
|
#else
|
||||||
#define MIDL_INTERFACE(x) struct
|
#define MIDL_INTERFACE(x) struct
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <basetyps.h>
|
#include <basetyps.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <unknwn.h>
|
#include <unknwn.h>
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include "MyWindows.h"
|
#include "MyWindows.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,201 +1,201 @@
|
|||||||
// MyWindows.h
|
// MyWindows.h
|
||||||
|
|
||||||
#ifndef __MYWINDOWS_H
|
#ifndef __MYWINDOWS_H
|
||||||
#define __MYWINDOWS_H
|
#define __MYWINDOWS_H
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#define CHAR_PATH_SEPARATOR '\\'
|
#define CHAR_PATH_SEPARATOR '\\'
|
||||||
#define WCHAR_PATH_SEPARATOR L'\\'
|
#define WCHAR_PATH_SEPARATOR L'\\'
|
||||||
#define STRING_PATH_SEPARATOR "\\"
|
#define STRING_PATH_SEPARATOR "\\"
|
||||||
#define WSTRING_PATH_SEPARATOR L"\\"
|
#define WSTRING_PATH_SEPARATOR L"\\"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define CHAR_PATH_SEPARATOR '/'
|
#define CHAR_PATH_SEPARATOR '/'
|
||||||
#define WCHAR_PATH_SEPARATOR L'/'
|
#define WCHAR_PATH_SEPARATOR L'/'
|
||||||
#define STRING_PATH_SEPARATOR "/"
|
#define STRING_PATH_SEPARATOR "/"
|
||||||
#define WSTRING_PATH_SEPARATOR L"/"
|
#define WSTRING_PATH_SEPARATOR L"/"
|
||||||
|
|
||||||
#include <stddef.h> // for wchar_t
|
#include <stddef.h> // for wchar_t
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "MyGuidDef.h"
|
#include "MyGuidDef.h"
|
||||||
|
|
||||||
typedef char CHAR;
|
typedef char CHAR;
|
||||||
typedef unsigned char UCHAR;
|
typedef unsigned char UCHAR;
|
||||||
|
|
||||||
#undef BYTE
|
#undef BYTE
|
||||||
typedef unsigned char BYTE;
|
typedef unsigned char BYTE;
|
||||||
|
|
||||||
typedef short SHORT;
|
typedef short SHORT;
|
||||||
typedef unsigned short USHORT;
|
typedef unsigned short USHORT;
|
||||||
|
|
||||||
#undef WORD
|
#undef WORD
|
||||||
typedef unsigned short WORD;
|
typedef unsigned short WORD;
|
||||||
typedef short VARIANT_BOOL;
|
typedef short VARIANT_BOOL;
|
||||||
|
|
||||||
typedef int INT;
|
typedef int INT;
|
||||||
typedef Int32 INT32;
|
typedef Int32 INT32;
|
||||||
typedef unsigned int UINT;
|
typedef unsigned int UINT;
|
||||||
typedef UInt32 UINT32;
|
typedef UInt32 UINT32;
|
||||||
typedef INT32 LONG; // LONG, ULONG and DWORD must be 32-bit
|
typedef INT32 LONG; // LONG, ULONG and DWORD must be 32-bit
|
||||||
typedef UINT32 ULONG;
|
typedef UINT32 ULONG;
|
||||||
|
|
||||||
#undef DWORD
|
#undef DWORD
|
||||||
typedef UINT32 DWORD;
|
typedef UINT32 DWORD;
|
||||||
|
|
||||||
typedef Int64 LONGLONG;
|
typedef Int64 LONGLONG;
|
||||||
typedef UInt64 ULONGLONG;
|
typedef UInt64 ULONGLONG;
|
||||||
|
|
||||||
typedef struct LARGE_INTEGER { LONGLONG QuadPart; }LARGE_INTEGER;
|
typedef struct LARGE_INTEGER { LONGLONG QuadPart; }LARGE_INTEGER;
|
||||||
typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart;} ULARGE_INTEGER;
|
typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart;} ULARGE_INTEGER;
|
||||||
|
|
||||||
typedef const CHAR *LPCSTR;
|
typedef const CHAR *LPCSTR;
|
||||||
typedef CHAR TCHAR;
|
typedef CHAR TCHAR;
|
||||||
typedef const TCHAR *LPCTSTR;
|
typedef const TCHAR *LPCTSTR;
|
||||||
typedef wchar_t WCHAR;
|
typedef wchar_t WCHAR;
|
||||||
typedef WCHAR OLECHAR;
|
typedef WCHAR OLECHAR;
|
||||||
typedef const WCHAR *LPCWSTR;
|
typedef const WCHAR *LPCWSTR;
|
||||||
typedef OLECHAR *BSTR;
|
typedef OLECHAR *BSTR;
|
||||||
typedef const OLECHAR *LPCOLESTR;
|
typedef const OLECHAR *LPCOLESTR;
|
||||||
typedef OLECHAR *LPOLESTR;
|
typedef OLECHAR *LPOLESTR;
|
||||||
|
|
||||||
typedef struct _FILETIME
|
typedef struct _FILETIME
|
||||||
{
|
{
|
||||||
DWORD dwLowDateTime;
|
DWORD dwLowDateTime;
|
||||||
DWORD dwHighDateTime;
|
DWORD dwHighDateTime;
|
||||||
}FILETIME;
|
}FILETIME;
|
||||||
|
|
||||||
#define HRESULT LONG
|
#define HRESULT LONG
|
||||||
#define FAILED(Status) ((HRESULT)(Status)<0)
|
#define FAILED(Status) ((HRESULT)(Status)<0)
|
||||||
typedef ULONG PROPID;
|
typedef ULONG PROPID;
|
||||||
typedef LONG SCODE;
|
typedef LONG SCODE;
|
||||||
|
|
||||||
#define S_OK ((HRESULT)0x00000000L)
|
#define S_OK ((HRESULT)0x00000000L)
|
||||||
#define S_FALSE ((HRESULT)0x00000001L)
|
#define S_FALSE ((HRESULT)0x00000001L)
|
||||||
#define E_NOTIMPL ((HRESULT)0x80004001L)
|
#define E_NOTIMPL ((HRESULT)0x80004001L)
|
||||||
#define E_NOINTERFACE ((HRESULT)0x80004002L)
|
#define E_NOINTERFACE ((HRESULT)0x80004002L)
|
||||||
#define E_ABORT ((HRESULT)0x80004004L)
|
#define E_ABORT ((HRESULT)0x80004004L)
|
||||||
#define E_FAIL ((HRESULT)0x80004005L)
|
#define E_FAIL ((HRESULT)0x80004005L)
|
||||||
#define STG_E_INVALIDFUNCTION ((HRESULT)0x80030001L)
|
#define STG_E_INVALIDFUNCTION ((HRESULT)0x80030001L)
|
||||||
#define E_OUTOFMEMORY ((HRESULT)0x8007000EL)
|
#define E_OUTOFMEMORY ((HRESULT)0x8007000EL)
|
||||||
#define E_INVALIDARG ((HRESULT)0x80070057L)
|
#define E_INVALIDARG ((HRESULT)0x80070057L)
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#define STDMETHODCALLTYPE __stdcall
|
#define STDMETHODCALLTYPE __stdcall
|
||||||
#else
|
#else
|
||||||
#define STDMETHODCALLTYPE
|
#define STDMETHODCALLTYPE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define STDMETHOD_(t, f) virtual t STDMETHODCALLTYPE f
|
#define STDMETHOD_(t, f) virtual t STDMETHODCALLTYPE f
|
||||||
#define STDMETHOD(f) STDMETHOD_(HRESULT, f)
|
#define STDMETHOD(f) STDMETHOD_(HRESULT, f)
|
||||||
#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
|
#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
|
||||||
#define STDMETHODIMP STDMETHODIMP_(HRESULT)
|
#define STDMETHODIMP STDMETHODIMP_(HRESULT)
|
||||||
|
|
||||||
#define PURE = 0
|
#define PURE = 0
|
||||||
|
|
||||||
#define MIDL_INTERFACE(x) struct
|
#define MIDL_INTERFACE(x) struct
|
||||||
|
|
||||||
struct IUnknown
|
struct IUnknown
|
||||||
{
|
{
|
||||||
//virtual ~IUnknown() {}
|
//virtual ~IUnknown() {}
|
||||||
STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE;
|
STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE;
|
||||||
STDMETHOD_(ULONG, AddRef)() PURE;
|
STDMETHOD_(ULONG, AddRef)() PURE;
|
||||||
STDMETHOD_(ULONG, Release)() PURE;
|
STDMETHOD_(ULONG, Release)() PURE;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef IUnknown *LPUNKNOWN;
|
typedef IUnknown *LPUNKNOWN;
|
||||||
|
|
||||||
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
|
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
|
||||||
#define VARIANT_FALSE ((VARIANT_BOOL)0)
|
#define VARIANT_FALSE ((VARIANT_BOOL)0)
|
||||||
|
|
||||||
enum VARENUM
|
enum VARENUM
|
||||||
{
|
{
|
||||||
VT_EMPTY = 0,
|
VT_EMPTY = 0,
|
||||||
VT_NULL = 1,
|
VT_NULL = 1,
|
||||||
VT_I2 = 2,
|
VT_I2 = 2,
|
||||||
VT_I4 = 3,
|
VT_I4 = 3,
|
||||||
VT_R4 = 4,
|
VT_R4 = 4,
|
||||||
VT_R8 = 5,
|
VT_R8 = 5,
|
||||||
VT_CY = 6,
|
VT_CY = 6,
|
||||||
VT_DATE = 7,
|
VT_DATE = 7,
|
||||||
VT_BSTR = 8,
|
VT_BSTR = 8,
|
||||||
VT_DISPATCH = 9,
|
VT_DISPATCH = 9,
|
||||||
VT_ERROR = 10,
|
VT_ERROR = 10,
|
||||||
VT_BOOL = 11,
|
VT_BOOL = 11,
|
||||||
VT_VARIANT = 12,
|
VT_VARIANT = 12,
|
||||||
VT_UNKNOWN = 13,
|
VT_UNKNOWN = 13,
|
||||||
VT_DECIMAL = 14,
|
VT_DECIMAL = 14,
|
||||||
VT_I1 = 16,
|
VT_I1 = 16,
|
||||||
VT_UI1 = 17,
|
VT_UI1 = 17,
|
||||||
VT_UI2 = 18,
|
VT_UI2 = 18,
|
||||||
VT_UI4 = 19,
|
VT_UI4 = 19,
|
||||||
VT_I8 = 20,
|
VT_I8 = 20,
|
||||||
VT_UI8 = 21,
|
VT_UI8 = 21,
|
||||||
VT_INT = 22,
|
VT_INT = 22,
|
||||||
VT_UINT = 23,
|
VT_UINT = 23,
|
||||||
VT_VOID = 24,
|
VT_VOID = 24,
|
||||||
VT_HRESULT = 25,
|
VT_HRESULT = 25,
|
||||||
VT_FILETIME = 64
|
VT_FILETIME = 64
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef unsigned short VARTYPE;
|
typedef unsigned short VARTYPE;
|
||||||
typedef WORD PROPVAR_PAD1;
|
typedef WORD PROPVAR_PAD1;
|
||||||
typedef WORD PROPVAR_PAD2;
|
typedef WORD PROPVAR_PAD2;
|
||||||
typedef WORD PROPVAR_PAD3;
|
typedef WORD PROPVAR_PAD3;
|
||||||
|
|
||||||
typedef struct tagPROPVARIANT
|
typedef struct tagPROPVARIANT
|
||||||
{
|
{
|
||||||
VARTYPE vt;
|
VARTYPE vt;
|
||||||
PROPVAR_PAD1 wReserved1;
|
PROPVAR_PAD1 wReserved1;
|
||||||
PROPVAR_PAD2 wReserved2;
|
PROPVAR_PAD2 wReserved2;
|
||||||
PROPVAR_PAD3 wReserved3;
|
PROPVAR_PAD3 wReserved3;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
CHAR cVal;
|
CHAR cVal;
|
||||||
UCHAR bVal;
|
UCHAR bVal;
|
||||||
SHORT iVal;
|
SHORT iVal;
|
||||||
USHORT uiVal;
|
USHORT uiVal;
|
||||||
LONG lVal;
|
LONG lVal;
|
||||||
ULONG ulVal;
|
ULONG ulVal;
|
||||||
INT intVal;
|
INT intVal;
|
||||||
UINT uintVal;
|
UINT uintVal;
|
||||||
LARGE_INTEGER hVal;
|
LARGE_INTEGER hVal;
|
||||||
ULARGE_INTEGER uhVal;
|
ULARGE_INTEGER uhVal;
|
||||||
VARIANT_BOOL boolVal;
|
VARIANT_BOOL boolVal;
|
||||||
SCODE scode;
|
SCODE scode;
|
||||||
FILETIME filetime;
|
FILETIME filetime;
|
||||||
BSTR bstrVal;
|
BSTR bstrVal;
|
||||||
};
|
};
|
||||||
} PROPVARIANT;
|
} PROPVARIANT;
|
||||||
|
|
||||||
typedef PROPVARIANT tagVARIANT;
|
typedef PROPVARIANT tagVARIANT;
|
||||||
typedef tagVARIANT VARIANT;
|
typedef tagVARIANT VARIANT;
|
||||||
typedef VARIANT VARIANTARG;
|
typedef VARIANT VARIANTARG;
|
||||||
|
|
||||||
MY_EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len);
|
MY_EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len);
|
||||||
MY_EXTERN_C BSTR SysAllocString(const OLECHAR *sz);
|
MY_EXTERN_C BSTR SysAllocString(const OLECHAR *sz);
|
||||||
MY_EXTERN_C void SysFreeString(BSTR bstr);
|
MY_EXTERN_C void SysFreeString(BSTR bstr);
|
||||||
MY_EXTERN_C UINT SysStringByteLen(BSTR bstr);
|
MY_EXTERN_C UINT SysStringByteLen(BSTR bstr);
|
||||||
MY_EXTERN_C UINT SysStringLen(BSTR bstr);
|
MY_EXTERN_C UINT SysStringLen(BSTR bstr);
|
||||||
|
|
||||||
MY_EXTERN_C DWORD GetLastError();
|
MY_EXTERN_C DWORD GetLastError();
|
||||||
MY_EXTERN_C HRESULT VariantClear(VARIANTARG *prop);
|
MY_EXTERN_C HRESULT VariantClear(VARIANTARG *prop);
|
||||||
MY_EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, VARIANTARG *src);
|
MY_EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, VARIANTARG *src);
|
||||||
MY_EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2);
|
MY_EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2);
|
||||||
|
|
||||||
#define CP_ACP 0
|
#define CP_ACP 0
|
||||||
#define CP_OEMCP 1
|
#define CP_OEMCP 1
|
||||||
|
|
||||||
typedef enum tagSTREAM_SEEK
|
typedef enum tagSTREAM_SEEK
|
||||||
{
|
{
|
||||||
STREAM_SEEK_SET = 0,
|
STREAM_SEEK_SET = 0,
|
||||||
STREAM_SEEK_CUR = 1,
|
STREAM_SEEK_CUR = 1,
|
||||||
STREAM_SEEK_END = 2
|
STREAM_SEEK_END = 2
|
||||||
} STREAM_SEEK;
|
} STREAM_SEEK;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
// Common/NewHandler.h
|
// Common/NewHandler.h
|
||||||
|
|
||||||
#ifndef __COMMON_NEWHANDLER_H
|
#ifndef __COMMON_NEWHANDLER_H
|
||||||
#define __COMMON_NEWHANDLER_H
|
#define __COMMON_NEWHANDLER_H
|
||||||
|
|
||||||
class CNewException {};
|
class CNewException {};
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
void
|
void
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
__cdecl
|
__cdecl
|
||||||
#endif
|
#endif
|
||||||
operator delete(void *p) throw();
|
operator delete(void *p) throw();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
// StdAfx.h
|
// StdAfx.h
|
||||||
|
|
||||||
#ifndef __STDAFX_H
|
#ifndef __STDAFX_H
|
||||||
#define __STDAFX_H
|
#define __STDAFX_H
|
||||||
|
|
||||||
// #include "MyWindows.h"
|
// #include "MyWindows.h"
|
||||||
#include "NewHandler.h"
|
#include "NewHandler.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
// Common/Types.h
|
// Common/Types.h
|
||||||
|
|
||||||
#ifndef __COMMON_TYPES_H
|
#ifndef __COMMON_TYPES_H
|
||||||
#define __COMMON_TYPES_H
|
#define __COMMON_TYPES_H
|
||||||
|
|
||||||
typedef unsigned char Byte;
|
typedef unsigned char Byte;
|
||||||
typedef short Int16;
|
typedef short Int16;
|
||||||
typedef unsigned short UInt16;
|
typedef unsigned short UInt16;
|
||||||
typedef int Int32;
|
typedef int Int32;
|
||||||
typedef unsigned int UInt32;
|
typedef unsigned int UInt32;
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
typedef __int64 Int64;
|
typedef __int64 Int64;
|
||||||
typedef unsigned __int64 UInt64;
|
typedef unsigned __int64 UInt64;
|
||||||
#else
|
#else
|
||||||
typedef long long int Int64;
|
typedef long long int Int64;
|
||||||
typedef unsigned long long int UInt64;
|
typedef unsigned long long int UInt64;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user