diff --git a/Makefile b/Makefile index 639061f3537adeb518a611793c54a7ee79a4f6a6..4df46b940405ec0b1cc6ea5e170df8a1ac5e5611 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -all : myzip0 myunzip0 huffman inflate +all : myzip0 myunzip0 huffman inflate test_inflate myzip0 : myzip0.c cc myzip0.c -o myzip0 @@ -9,8 +9,12 @@ myunzip0 : myunzip0.c huffman : huffman.c cc huffman.c -o huffman -inflate : inflate.c - cc inflate.c -o inflate +inflate : include/inflate.h src/inflate/main.c src/inflate/inflate.c + gcc -I include src/inflate/main.c src/inflate/inflate.c -o inflate + +test_inflate : src/inflate/inflate.c tests/inflate_test.cpp + g++ -I include src/inflate/inflate.c tests/inflate_test.cpp -o test_inflate -l gtest + ./test_inflate clean : - rm myzip0 myunzip0 huffman inflate + rm myzip0 myunzip0 huffman inflate test_inflate diff --git a/deflated.original b/deflated.original new file mode 100644 index 0000000000000000000000000000000000000000..0892b339f7276bf3488c14cf51327f5c15c843e0 --- /dev/null +++ b/deflated.original @@ -0,0 +1,872 @@ +Provided by USConstitution.net +------------------------------ + +[Note: Repealed text is not noted in this version. Spelling errors have been +corrected in this version. For an uncorrected, annotated version of the +Constitution, visit http://www.usconstitution.net/const.html ] + +We the People of the United States, in Order to form a more perfect Union, +establish Justice, insure domestic Tranquility, provide for the common +defence, promote the general Welfare, and secure the Blessings of Liberty to +ourselves and our Posterity, do ordain and establish this Constitution for the +United States of America. + +Article 1. + +Section 1 +All legislative Powers herein granted shall be vested in a Congress of the +United States, which shall consist of a Senate and House of Representatives. + +Section 2 +The House of Representatives shall be composed of Members chosen every second +Year by the People of the several States, and the Electors in each State shall +have the Qualifications requisite for Electors of the most numerous Branch of +the State Legislature. + +No Person shall be a Representative who shall not have attained to the Age of +twenty five Years, and been seven Years a Citizen of the United States, and who +shall not, when elected, be an Inhabitant of that State in which he shall be +chosen. + +Representatives and direct Taxes shall be apportioned among the several States +which may be included within this Union, according to their respective Numbers, +which shall be determined by adding to the whole Number of free Persons, +including those bound to Service for a Term of Years, and excluding Indians not +taxed, three fifths of all other Persons. + +The actual Enumeration shall be made within three Years after the first Meeting +of the Congress of the United States, and within every subsequent Term of ten +Years, in such Manner as they shall by Law direct. The Number of +Representatives shall not exceed one for every thirty Thousand, but each State +shall have at Least one Representative; and until such enumeration shall be +made, the State of New Hampshire shall be entitled to choose three, +Massachusetts eight, Rhode Island and Providence Plantations one, Connecticut +five, New York six, New Jersey four, Pennsylvania eight, Delaware one, Maryland +six, Virginia ten, North Carolina five, South Carolina five and Georgia three. + +When vacancies happen in the Representation from any State, the Executive +Authority thereof shall issue Writs of Election to fill such Vacancies. + +The House of Representatives shall choose their Speaker and other Officers; and +shall have the sole Power of Impeachment. + +Section 3 +The Senate of the United States shall be composed of two Senators from each +State, chosen by the Legislature thereof, for six Years; and each Senator shall +have one Vote. + +Immediately after they shall be assembled in Consequence of the first Election, +they shall be divided as equally as may be into three Classes. The Seats of the +Senators of the first Class shall be vacated at the Expiration of the second +Year, of the second Class at the Expiration of the fourth Year, and of the +third Class at the Expiration of the sixth Year, so that one third may be +chosen every second Year; and if Vacancies happen by Resignation, or otherwise, +during the Recess of the Legislature of any State, the Executive thereof may +make temporary Appointments until the next Meeting of the Legislature, which +shall then fill such Vacancies. + +No person shall be a Senator who shall not have attained to the Age of thirty +Years, and been nine Years a Citizen of the United States, and who shall not, +when elected, be an Inhabitant of that State for which he shall be chosen. + +The Vice President of the United States shall be President of the Senate, but +shall have no Vote, unless they be equally divided. + +The Senate shall choose their other Officers, and also a President pro tempore, +in the absence of the Vice President, or when he shall exercise the Office of +President of the United States. + +The Senate shall have the sole Power to try all Impeachments. When sitting for +that Purpose, they shall be on Oath or Affirmation. When the President of the +United States is tried, the Chief Justice shall preside: And no Person shall be +convicted without the Concurrence of two thirds of the Members present. + +Judgment in Cases of Impeachment shall not extend further than to removal from +Office, and disqualification to hold and enjoy any Office of honor, Trust or +Profit under the United States: but the Party convicted shall nevertheless be +liable and subject to Indictment, Trial, Judgment and Punishment, according to +Law. + +Section 4 +The Times, Places and Manner of holding Elections for Senators and +Representatives, shall be prescribed in each State by the Legislature thereof; +but the Congress may at any time by Law make or alter such Regulations, except +as to the Place of Choosing Senators. + +The Congress shall assemble at least once in every Year, and such Meeting shall +be on the first Monday in December, unless they shall by Law appoint a +different Day. + +Section 5 +Each House shall be the Judge of the Elections, Returns and Qualifications of +its own Members, and a Majority of each shall constitute a Quorum to do +Business; but a smaller number may adjourn from day to day, and may be +authorized to compel the Attendance of absent Members, in such Manner, and +under such Penalties as each House may provide. + +Each House may determine the Rules of its Proceedings, punish its Members for +disorderly Behavior, and, with the Concurrence of two-thirds, expel a Member. + +Each House shall keep a Journal of its Proceedings, and from time to time +publish the same, excepting such Parts as may in their Judgment require +Secrecy; and the Yeas and Nays of the Members of either House on any question +shall, at the Desire of one fifth of those Present, be entered on the Journal. + +Neither House, during the Session of Congress, shall, without the Consent of +the other, adjourn for more than three days, nor to any other Place than that +in which the two Houses shall be sitting. + +Section 6 +The Senators and Representatives shall receive a Compensation for their +Services, to be ascertained by Law, and paid out of the Treasury of the United +States. They shall in all Cases, except Treason, Felony and Breach of the +Peace, be privileged from Arrest during their Attendance at the Session of +their respective Houses, and in going to and returning from the same; and for +any Speech or Debate in either House, they shall not be questioned in any other +Place. + +No Senator or Representative shall, during the Time for which he was elected, +be appointed to any civil Office under the Authority of the United States which +shall have been created, or the Emoluments whereof shall have been increased +during such time; and no Person holding any Office under the United States, +shall be a Member of either House during his Continuance in Office. + + +Section 7 +All bills for raising Revenue shall originate in the House of Representatives; +but the Senate may propose or concur with Amendments as on other Bills. + +Every Bill which shall have passed the House of Representatives and the Senate, +shall, before it become a Law, be presented to the President of the United +States; If he approve he shall sign it, but if not he shall return it, with his +Objections to that House in which it shall have originated, who shall enter the +Objections at large on their Journal, and proceed to reconsider it. If after +such Reconsideration two thirds of that House shall agree to pass the Bill, it +shall be sent, together with the Objections, to the other House, by which it +shall likewise be reconsidered, and if approved by two thirds of that House, it +shall become a Law. But in all such Cases the Votes of both Houses shall be +determined by Yeas and Nays, and the Names of the Persons voting for and +against the Bill shall be entered on the Journal of each House respectively. If +any Bill shall not be returned by the President within ten Days (Sundays +excepted) after it shall have been presented to him, the Same shall be a Law, +in like Manner as if he had signed it, unless the Congress by their Adjournment +prevent its Return, in which Case it shall not be a Law. + +Every Order, Resolution, or Vote to which the Concurrence of the Senate and +House of Representatives may be necessary (except on a question of Adjournment) +shall be presented to the President of the United States; and before the Same +shall take Effect, shall be approved by him, or being disapproved by him, shall +be repassed by two thirds of the Senate and House of Representatives, according +to the Rules and Limitations prescribed in the Case of a Bill. + + +Section 8 +The Congress shall have Power To lay and collect Taxes, Duties, Imposts and +Excises, to pay the Debts and provide for the common Defence and general +Welfare of the United States; but all Duties, Imposts and Excises shall be +uniform throughout the United States; + +To borrow money on the credit of the United States; + +To regulate Commerce with foreign Nations, and among the several States, and +with the Indian Tribes; + +To establish an uniform Rule of Naturalization, and uniform Laws on the subject +of Bankruptcies throughout the United States; + +To coin Money, regulate the Value thereof, and of foreign Coin, and fix the +Standard of Weights and Measures; + +To provide for the Punishment of counterfeiting the Securities and current Coin +of the United States; + +To establish Post Offices and Post Roads; + +To promote the Progress of Science and useful Arts, by securing for limited +Times to Authors and Inventors the exclusive Right to their respective Writings +and Discoveries; + +To constitute Tribunals inferior to the supreme Court; + +To define and punish Piracies and Felonies committed on the high Seas, and +Offenses against the Law of Nations; + +To declare War, grant Letters of Marque and Reprisal, and make Rules concerning +Captures on Land and Water; + +To raise and support Armies, but no Appropriation of Money to that Use shall be +for a longer Term than two Years; + +To provide and maintain a Navy; + +To make Rules for the Government and Regulation of the land and naval Forces; + +To provide for calling forth the Militia to execute the Laws of the Union, +suppress Insurrections and repel Invasions; + +To provide for organizing, arming, and disciplining, the Militia, and for +governing such Part of them as may be employed in the Service of the United +States, reserving to the States respectively, the Appointment of the Officers, +and the Authority of training the Militia according to the discipline +prescribed by Congress; + +To exercise exclusive Legislation in all Cases whatsoever, over such District +(not exceeding ten Miles square) as may, by Cession of particular States, and +the acceptance of Congress, become the Seat of the Government of the United +States, and to exercise like Authority over all Places purchased by the Consent +of the Legislature of the State in which the Same shall be, for the Erection of +Forts, Magazines, Arsenals, dock-Yards, and other needful Buildings; And + +To make all Laws which shall be necessary and proper for carrying into +Execution the foregoing Powers, and all other Powers vested by this +Constitution in the Government of the United States, or in any Department or +Officer thereof. + +Section 9 +The Migration or Importation of such Persons as any of the States now existing +shall think proper to admit, shall not be prohibited by the Congress prior to +the Year one thousand eight hundred and eight, but a tax or duty may be imposed +on such Importation, not exceeding ten dollars for each Person. + +The privilege of the Writ of Habeas Corpus shall not be suspended, unless when +in Cases of Rebellion or Invasion the public Safety may require it. + +No Bill of Attainder or ex post facto Law shall be passed. + +No capitation, or other direct, Tax shall be laid, unless in Proportion to the +Census or Enumeration herein before directed to be taken. + +No Tax or Duty shall be laid on Articles exported from any State. + +No Preference shall be given by any Regulation of Commerce or Revenue to the +Ports of one State over those of another: nor shall Vessels bound to, or from, +one State, be obliged to enter, clear, or pay Duties in another. + +No Money shall be drawn from the Treasury, but in Consequence of Appropriations +made by Law; and a regular Statement and Account of the Receipts and +Expenditures of all public Money shall be published from time to time. + +No Title of Nobility shall be granted by the United States: And no Person +holding any Office of Profit or Trust under them, shall, without the Consent of +the Congress, accept of any present, Emolument, Office, or Title, of any kind +whatever, from any King, Prince or foreign State. + +Section 10 +No State shall enter into any Treaty, Alliance, or Confederation; grant Letters +of Marque and Reprisal; coin Money; emit Bills of Credit; make any Thing but +gold and silver Coin a Tender in Payment of Debts; pass any Bill of Attainder, +ex post facto Law, or Law impairing the Obligation of Contracts, or grant any +Title of Nobility. + +No State shall, without the Consent of the Congress, lay any Imposts or Duties +on Imports or Exports, except what may be absolutely necessary for executing +its inspection Laws: and the net Produce of all Duties and Imposts, laid by +any State on Imports or Exports, shall be for the Use of the Treasury of the +United States; and all such Laws shall be subject to the Revision and Control +of the Congress. + +No State shall, without the Consent of Congress, lay any duty of Tonnage, keep +Troops, or Ships of War in time of Peace, enter into any Agreement or Compact +with another State, or with a foreign Power, or engage in War, unless actually +invaded, or in such imminent Danger as will not admit of delay. + +Article 2. + +Section 1 +The executive Power shall be vested in a President of the United States of +America. He shall hold his Office during the Term of four Years, and, together +with the Vice-President chosen for the same Term, be elected, as follows: + +Each State shall appoint, in such Manner as the Legislature thereof may direct, +a Number of Electors, equal to the whole Number of Senators and Representatives +to which the State may be entitled in the Congress: but no Senator or +Representative, or Person holding an Office of Trust or Profit under the United +States, shall be appointed an Elector. + +The Electors shall meet in their respective States, and vote by Ballot for two +persons, of whom one at least shall not lie an Inhabitant of the same State +with themselves. And they shall make a List of all the Persons voted for, and +of the Number of Votes for each; which List they shall sign and certify, and +transmit sealed to the Seat of the Government of the United States, directed to +the President of the Senate. The President of the Senate shall, in the Presence +of the Senate and House of Representatives, open all the Certificates, and the +Votes shall then be counted. The Person having the greatest Number of Votes +shall be the President, if such Number be a Majority of the whole Number of +Electors appointed; and if there be more than one who have such Majority, and +have an equal Number of Votes, then the House of Representatives shall +immediately choose by Ballot one of them for President; and if no Person have a +Majority, then from the five highest on the List the said House shall in like +Manner choose the President. But in choosing the President, the Votes shall be +taken by States, the Representation from each State having one Vote; a quorum +for this Purpose shall consist of a Member or Members from two-thirds of the +States, and a Majority of all the States shall be necessary to a Choice. In +every Case, after the Choice of the President, the Person having the greatest +Number of Votes of the Electors shall be the Vice President. But if there +should remain two or more who have equal Votes, the Senate shall choose from +them by Ballot the Vice-President. + +The Congress may determine the Time of choosing the Electors, and the Day on +which they shall give their Votes; which Day shall be the same throughout the +United States. + +No person except a natural born Citizen, or a Citizen of the United States, at +the time of the Adoption of this Constitution, shall be eligible to the Office +of President; neither shall any Person be eligible to that Office who shall not +have attained to the Age of thirty-five Years, and been fourteen Years a +Resident within the United States. + +In Case of the Removal of the President from Office, or of his Death, +Resignation, or Inability to discharge the Powers and Duties of the said +Office, the same shall devolve on the Vice President, and the Congress may by +Law provide for the Case of Removal, Death, Resignation or Inability, both of +the President and Vice President, declaring what Officer shall then act as +President, and such Officer shall act accordingly, until the Disability be +removed, or a President shall be elected. + +The President shall, at stated Times, receive for his Services, a Compensation, +which shall neither be increased nor diminished during the Period for which he +shall have been elected, and he shall not receive within that Period any other +Emolument from the United States, or any of them. + +Before he enter on the Execution of his Office, he shall take the following +Oath or Affirmation: + +"I do solemnly swear (or affirm) that I will faithfully execute the Office of +President of the United States, and will to the best of my Ability, preserve, +protect and defend the Constitution of the United States." + +Section 2 +The President shall be Commander in Chief of the Army and Navy of the United +States, and of the Militia of the several States, when called into the actual +Service of the United States; he may require the Opinion, in writing, of the +principal Officer in each of the executive Departments, upon any subject +relating to the Duties of their respective Offices, and he shall have Power to +Grant Reprieves and Pardons for Offenses against the United States, except in +Cases of Impeachment. + +He shall have Power, by and with the Advice and Consent of the Senate, to make +Treaties, provided two thirds of the Senators present concur; and he shall +nominate, and by and with the Advice and Consent of the Senate, shall appoint +Ambassadors, other public Ministers and Consuls, Judges of the supreme Court, +and all other Officers of the United States, whose Appointments are not herein +otherwise provided for, and which shall be established by Law: but the Congress +may by Law vest the Appointment of such inferior Officers, as they think +proper, in the President alone, in the Courts of Law, or in the Heads of +Departments. + +The President shall have Power to fill up all Vacancies that may happen during +the Recess of the Senate, by granting Commissions which shall expire at the End +of their next Session. + +Section 3 +He shall from time to time give to the Congress Information of the State of the +Union, and recommend to their Consideration such Measures as he shall judge +necessary and expedient; he may, on extraordinary Occasions, convene both +Houses, or either of them, and in Case of Disagreement between them, with +Respect to the Time of Adjournment, he may adjourn them to such Time as he +shall think proper; he shall receive Ambassadors and other public Ministers; he +shall take Care that the Laws be faithfully executed, and shall Commission all +the Officers of the United States. + +Section 4 +The President, Vice President and all civil Officers of the United States, +shall be removed from Office on Impeachment for, and Conviction of, Treason, +Bribery, or other high Crimes and Misdemeanors. + +Article 3. + +Section 1 +The judicial Power of the United States, shall be vested in one supreme Court, +and in such inferior Courts as the Congress may from time to time ordain and +establish. The Judges, both of the supreme and inferior Courts, shall hold +their Offices during good Behavior, and shall, at stated Times, receive for +their Services a Compensation which shall not be diminished during their +Continuance in Office. + +Section 2 +The judicial Power shall extend to all Cases, in Law and Equity, arising under +this Constitution, the Laws of the United States, and Treaties made, or which +shall be made, under their Authority; to all Cases affecting Ambassadors, other +public Ministers and Consuls; to all Cases of admiralty and maritime +Jurisdiction; to Controversies to which the United States shall be a Party; to +Controversies between two or more States; between a State and Citizens of +another State; between Citizens of different States; between Citizens of the +same State claiming Lands under Grants of different States, and between a +State, or the Citizens thereof, and foreign States, Citizens or Subjects. + +In all Cases affecting Ambassadors, other public Ministers and Consuls, and +those in which a State shall be Party, the supreme Court shall have original +Jurisdiction. In all the other Cases before mentioned, the supreme Court shall +have appellate Jurisdiction, both as to Law and Fact, with such Exceptions, and +under such Regulations as the Congress shall make. + +The Trial of all Crimes, except in Cases of Impeachment, shall be by Jury; and +such Trial shall be held in the State where the said Crimes shall have been +committed; but when not committed within any State, the Trial shall be at such +Place or Places as the Congress may by Law have directed. + +Section 3 +Treason against the United States, shall consist only in levying War against +them, or in adhering to their Enemies, giving them Aid and Comfort. No Person +shall be convicted of Treason unless on the Testimony of two Witnesses to the +same overt Act, or on Confession in open Court. + +The Congress shall have power to declare the Punishment of Treason, but no +Attainder of Treason shall work Corruption of Blood, or Forfeiture except +during the Life of the Person attainted. + +Article 4. + +Section 1 +Full Faith and Credit shall be given in each State to the public Acts, Records, +and judicial Proceedings of every other State. And the Congress may by general +Laws prescribe the Manner in which such Acts, Records and Proceedings shall be +proved, and the Effect thereof. + +Section 2 +The Citizens of each State shall be entitled to all Privileges and Immunities +of Citizens in the several States. + +A Person charged in any State with Treason, Felony, or other Crime, who shall +flee from Justice, and be found in another State, shall on demand of the +executive Authority of the State from which he fled, be delivered up, to be +removed to the State having Jurisdiction of the Crime. + +No Person held to Service or Labour in one State, under the Laws thereof, +escaping into another, shall, in Consequence of any Law or Regulation therein, +be discharged from such Service or Labour, But shall be delivered up on Claim +of the Party to whom such Service or Labour may be due. + +Section 3 +New States may be admitted by the Congress into this Union; but no new States +shall be formed or erected within the Jurisdiction of any other State; nor any +State be formed by the Junction of two or more States, or parts of States, +without the Consent of the Legislatures of the States concerned as well as of +the Congress. + +The Congress shall have Power to dispose of and make all needful Rules and +Regulations respecting the Territory or other Property belonging to the United +States; and nothing in this Constitution shall be so construed as to Prejudice +any Claims of the United States, or of any particular State. + +Section 4 +The United States shall guarantee to every State in this Union a Republican +Form of Government, and shall protect each of them against Invasion; and on +Application of the Legislature, or of the Executive (when the Legislature +cannot be convened) against domestic Violence. + +Article 5. + +The Congress, whenever two thirds of both Houses shall deem it necessary, shall +propose Amendments to this Constitution, or, on the Application of the +Legislatures of two thirds of the several States, shall call a Convention for +proposing Amendments, which, in either Case, shall be valid to all Intents and +Purposes, as part of this Constitution, when ratified by the Legislatures of +three fourths of the several States, or by Conventions in three fourths +thereof, as the one or the other Mode of Ratification may be proposed by the +Congress; Provided that no Amendment which may be made prior to the Year One +thousand eight hundred and eight shall in any Manner affect the first and +fourth Clauses in the Ninth Section of the first Article; and that no State, +without its Consent, shall be deprived of its equal Suffrage in the Senate. + +Article 6. + +All Debts contracted and Engagements entered into, before the Adoption of this +Constitution, shall be as valid against the United States under this +Constitution, as under the Confederation. + +This Constitution, and the Laws of the United States which shall be made in +Pursuance thereof; and all Treaties made, or which shall be made, under the +Authority of the United States, shall be the supreme Law of the Land; and the +Judges in every State shall be bound thereby, any Thing in the Constitution or +Laws of any State to the Contrary notwithstanding. + +The Senators and Representatives before mentioned, and the Members of the +several State Legislatures, and all executive and judicial Officers, both of +the United States and of the several States, shall be bound by Oath or +Affirmation, to support this Constitution; but no religious Test shall ever be +required as a Qualification to any Office or public Trust under the United +States. + +Article 7. + +The Ratification of the Conventions of nine States, shall be sufficient for the +Establishment of this Constitution between the States so ratifying the Same. + +Done in Convention by the Unanimous Consent of the States present the +Seventeenth Day of September in the Year of our Lord one thousand seven hundred +and Eighty seven and of the Independence of the United States of America the +Twelfth. In Witness whereof We have hereunto subscribed our Names. + +George Washington - President and deputy from Virginia + +New Hampshire - John Langdon, Nicholas Gilman + +Massachusetts - Nathaniel Gorham, Rufus King + +Connecticut - William Samuel Johnson, Roger Sherman + +New York - Alexander Hamilton + +New Jersey - William Livingston, David Brearley, William Paterson, Jonathan +Dayton + +Pennsylvania - Benjamin Franklin, Thomas Mifflin, Robert Morris, George Clymer, +Thomas Fitzsimons, Jared Ingersoll, James Wilson, Gouvernour Morris + +Delaware - George Read, Gunning Bedford Jr., John Dickinson, Richard Bassett, +Jacob Broom + +Maryland - James McHenry, Daniel of St Thomas Jenifer, Daniel Carroll + +Virginia - John Blair, James Madison Jr. + +North Carolina - William Blount, Richard Dobbs Spaight, Hugh Williamson + +South Carolina - John Rutledge, Charles Cotesworth Pinckney, Charles Pinckney, +Pierce Butler + +Georgia - William Few, Abraham Baldwin + +Attest: William Jackson, Secretary + + +Amendment 1 +Congress shall make no law respecting an establishment of religion, or +prohibiting the free exercise thereof; or abridging the freedom of speech, or +of the press; or the right of the people peaceably to assemble, and to petition +the Government for a redress of grievances. + +Amendment 2 +A well regulated Militia, being necessary to the security of a free State, the +right of the people to keep and bear Arms, shall not be infringed. + +Amendment 3 +No Soldier shall, in time of peace be quartered in any house, without the +consent of the Owner, nor in time of war, but in a manner to be prescribed by +law. + +Amendment 4 +The right of the people to be secure in their persons, houses, papers, and +effects, against unreasonable searches and seizures, shall not be violated, and +no Warrants shall issue, but upon probable cause, supported by Oath or +affirmation, and particularly describing the place to be searched, and the +persons or things to be seized. + +Amendment 5 +No person shall be held to answer for a capital, or otherwise infamous crime, +unless on a presentment or indictment of a Grand Jury, except in cases arising +in the land or naval forces, or in the Militia, when in actual service in time +of War or public danger; nor shall any person be subject for the same offense +to be twice put in jeopardy of life or limb; nor shall be compelled in any +criminal case to be a witness against himself, nor be deprived of life, +liberty, or property, without due process of law; nor shall private property be +taken for public use, without just compensation. + +Amendment 6 +In all criminal prosecutions, the accused shall enjoy the right to a speedy and +public trial, by an impartial jury of the State and district wherein the crime +shall have been committed, which district shall have been previously +ascertained by law, and to be informed of the nature and cause of the +accusation; to be confronted with the witnesses against him; to have compulsory +process for obtaining witnesses in his favor, and to have the Assistance of +Counsel for his defence. + +Amendment 7 +In Suits at common law, where the value in controversy shall exceed twenty +dollars, the right of trial by jury shall be preserved, and no fact tried by a +jury, shall be otherwise re-examined in any Court of the United States, than +according to the rules of the common law. + +Amendment 8 +Excessive bail shall not be required, nor excessive fines imposed, nor cruel +and unusual punishments inflicted. + +Amendment 9 +The enumeration in the Constitution, of certain rights, shall not be construed +to deny or disparage others retained by the people. + +Amendment 10 +The powers not delegated to the United States by the Constitution, nor +prohibited by it to the States, are reserved to the States respectively, or to +the people. + +Amendment 11 +The Judicial power of the United States shall not be construed to extend to any +suit in law or equity, commenced or prosecuted against one of the United States +by Citizens of another State, or by Citizens or Subjects of any Foreign State. + +Amendment 12 +The Electors shall meet in their respective states, and vote by ballot for +President and Vice-President, one of whom, at least, shall not be an inhabitant +of the same state with themselves; they shall name in their ballots the person +voted for as President, and in distinct ballots the person voted for as +Vice-President, and they shall make distinct lists of all persons voted for as +President, and of all persons voted for as Vice-President and of the number of +votes for each, which lists they shall sign and certify, and transmit sealed to +the seat of the government of the United States, directed to the President of +the Senate; + +The President of the Senate shall, in the presence of the Senate and House of +Representatives, open all the certificates and the votes shall then be counted; + +The person having the greatest Number of votes for President, shall be the +President, if such number be a majority of the whole number of Electors +appointed; and if no person have such majority, then from the persons having +the highest numbers not exceeding three on the list of those voted for as +President, the House of Representatives shall choose immediately, by ballot, +the President. But in choosing the President, the votes shall be taken by +states, the representation from each state having one vote; a quorum for this +purpose shall consist of a member or members from two-thirds of the states, and +a majority of all the states shall be necessary to a choice. And if the House +of Representatives shall not choose a President whenever the right of choice +shall devolve upon them, before the fourth day of March next following, then +the Vice-President shall act as President, as in the case of the death or other +constitutional disability of the President. + +The person having the greatest number of votes as Vice-President, shall be the +Vice-President, if such number be a majority of the whole number of Electors +appointed, and if no person have a majority, then from the two highest numbers +on the list, the Senate shall choose the Vice-President; a quorum for the +purpose shall consist of two-thirds of the whole number of Senators, and a +majority of the whole number shall be necessary to a choice. But no person +constitutionally ineligible to the office of President shall be eligible to +that of Vice-President of the United States. + +Amendment 13 +1. Neither slavery nor involuntary servitude, except as a punishment for crime +whereof the party shall have been duly convicted, shall exist within the United +States, or any place subject to their jurisdiction. + +2. Congress shall have power to enforce this article by appropriate +legislation. + +Amendment 14 +1. All persons born or naturalized in the United States, and subject to the +jurisdiction thereof, are citizens of the United States and of the State +wherein they reside. No State shall make or enforce any law which shall abridge +the privileges or immunities of citizens of the United States; nor shall any +State deprive any person of life, liberty, or property, without due process of +law; nor deny to any person within its jurisdiction the equal protection of the +laws. + +2. Representatives shall be apportioned among the several States according to +their respective numbers, counting the whole number of persons in each State, +excluding Indians not taxed. But when the right to vote at any election for the +choice of electors for President and Vice-President of the United States, +Representatives in Congress, the Executive and Judicial officers of a State, or +the members of the Legislature thereof, is denied to any of the male +inhabitants of such State, being twenty-one years of age, and citizens of the +United States, or in any way abridged, except for participation in rebellion, +or other crime, the basis of representation therein shall be reduced in the +proportion which the number of such male citizens shall bear to the whole +number of male citizens twenty-one years of age in such State. + +3. No person shall be a Senator or Representative in Congress, or elector of +President and Vice-President, or hold any office, civil or military, under the +United States, or under any State, who, having previously taken an oath, as a +member of Congress, or as an officer of the United States, or as a member of +any State legislature, or as an executive or judicial officer of any State, to +support the Constitution of the United States, shall have engaged in +insurrection or rebellion against the same, or given aid or comfort to the +enemies thereof. But Congress may by a vote of two-thirds of each House, remove +such disability. + +4. The validity of the public debt of the United States, authorized by law, +including debts incurred for payment of pensions and bounties for services in +suppressing insurrection or rebellion, shall not be questioned. But neither the +United States nor any State shall assume or pay any debt or obligation incurred +in aid of insurrection or rebellion against the United States, or any claim for +the loss or emancipation of any slave; but all such debts, obligations and +claims shall be held illegal and void. + +5. The Congress shall have power to enforce, by appropriate legislation, the +provisions of this article. + +Amendment 15 +1. The right of citizens of the United States to vote shall not be denied or +abridged by the United States or by any State on account of race, color, or +previous condition of servitude. + +2. The Congress shall have power to enforce this article by appropriate +legislation. + +Amendment 16 +The Congress shall have power to lay and collect taxes on incomes, from +whatever source derived, without apportionment among the several States, and +without regard to any census or enumeration. + +Amendment 17 +The Senate of the United States shall be composed of two Senators from each +State, elected by the people thereof, for six years; and each Senator shall +have one vote. The electors in each State shall have the qualifications +requisite for electors of the most numerous branch of the State legislatures. + +When vacancies happen in the representation of any State in the Senate, the +executive authority of such State shall issue writs of election to fill such +vacancies: Provided, That the legislature of any State may empower the +executive thereof to make temporary appointments until the people fill the +vacancies by election as the legislature may direct. + +This amendment shall not be so construed as to affect the election or term of +any Senator chosen before it becomes valid as part of the Constitution. + +Amendment 18 +1. After one year from the ratification of this article the manufacture, sale, +or transportation of intoxicating liquors within, the importation thereof into, +or the exportation thereof from the United States and all territory subject to +the jurisdiction thereof for beverage purposes is hereby prohibited. + +2. The Congress and the several States shall have concurrent power to enforce +this article by appropriate legislation. + +3. This article shall be inoperative unless it shall have been ratified as an +amendment to the Constitution by the legislatures of the several States, as +provided in the Constitution, within seven years from the date of the +submission hereof to the States by the Congress. + +Amendment 19 +The right of citizens of the United States to vote shall not be denied or +abridged by the United States or by any State on account of sex. + +Congress shall have power to enforce this article by appropriate legislation. + +Amendment 20 +1. The terms of the President and Vice President shall end at noon on the 20th +day of January, and the terms of Senators and Representatives at noon on the 3d +day of January, of the years in which such terms would have ended if this +article had not been ratified; and the terms of their successors shall then +begin. + +2. The Congress shall assemble at least once in every year, and such meeting +shall begin at noon on the 3d day of January, unless they shall by law appoint +a different day. + +3. If, at the time fixed for the beginning of the term of the President, the +President elect shall have died, the Vice President elect shall become +President. If a President shall not have been chosen before the time fixed for +the beginning of his term, or if the President elect shall have failed to +qualify, then the Vice President elect shall act as President until a President +shall have qualified; and the Congress may by law provide for the case wherein +neither a President elect nor a Vice President elect shall have qualified, +declaring who shall then act as President, or the manner in which one who is to +act shall be selected, and such person shall act accordingly until a President +or Vice President shall have qualified. + +4. The Congress may by law provide for the case of the death of any of the +persons from whom the House of Representatives may choose a President whenever +the right of choice shall have devolved upon them, and for the case of the +death of any of the persons from whom the Senate may choose a Vice President +whenever the right of choice shall have devolved upon them. + +5. Sections 1 and 2 shall take effect on the 15th day of October following the +ratification of this article. + +6. This article shall be inoperative unless it shall have been ratified as an +amendment to the Constitution by the legislatures of three-fourths of the +several States within seven years from the date of its submission. + +Amendment 21 +1. The eighteenth article of amendment to the Constitution of the United States +is hereby repealed. + +2. The transportation or importation into any State, Territory, or possession +of the United States for delivery or use therein of intoxicating liquors, in +violation of the laws thereof, is hereby prohibited. + +3. The article shall be inoperative unless it shall have been ratified as an +amendment to the Constitution by conventions in the several States, as provided +in the Constitution, within seven years from the date of the submission hereof +to the States by the Congress. + +Amendment 22 +1. No person shall be elected to the office of the President more than twice, +and no person who has held the office of President, or acted as President, for +more than two years of a term to which some other person was elected President +shall be elected to the office of the President more than once. But this +Article shall not apply to any person holding the office of President, when this +Article was proposed by the Congress, and shall not prevent any person who may +be holding the office of President, or acting as President, during the term +within which this Article becomes operative from holding the office of +President or acting as President during the remainder of such term. + +2. This article shall be inoperative unless it shall have been ratified as an +amendment to the Constitution by the legislatures of three-fourths of the +several States within seven years from the date of its submission to the States +by the Congress. + +Amendment 23 +1. The District constituting the seat of Government of the United States shall +appoint in such manner as the Congress may direct: A number of electors of +President and Vice President equal to the whole number of Senators and +Representatives in Congress to which the District would be entitled if it were +a State, but in no event more than the least populous State; they shall be in +addition to those appointed by the States, but they shall be considered, for +the purposes of the election of President and Vice President, to be electors +appointed by a State; and they shall meet in the District and perform such +duties as provided by the twelfth article of amendment. + +2. The Congress shall have power to enforce this article by appropriate +legislation. + +Amendment 24 +1. The right of citizens of the United States to vote in any primary or other +election for President or Vice President, for electors for President or +Vice President, or for Senator or Representative in Congress, shall not be +denied or abridged by the United States or any State by reason of failure to +pay any poll tax or other tax. + +2. The Congress shall have power to enforce this article by appropriate +legislation. + +Amendment 25 +1. In case of the removal of the President from office or of his death or +resignation, the Vice President shall become President. + +2. Whenever there is a vacancy in the office of the Vice President, the +President shall nominate a Vice President who shall take office upon +confirmation by a majority vote of both Houses of Congress. + +3. Whenever the President transmits to the President pro tempore of the Senate +and the Speaker of the House of Representatives his written declaration that he +is unable to discharge the powers and duties of his office, and until he +transmits to them a written declaration to the contrary, such powers and duties +shall be discharged by the Vice President as Acting President. + +4. Whenever the Vice President and a majority of either the principal officers +of the executive departments or of such other body as Congress may by law +provide, transmit to the President pro tempore of the Senate and the Speaker of +the House of Representatives their written declaration that the President is +unable to discharge the powers and duties of his office, the Vice President +shall immediately assume the powers and duties of the office as Acting +President. + +Thereafter, when the President transmits to the President pro tempore of the +Senate and the Speaker of the House of Representatives his written declaration +that no inability exists, he shall resume the powers and duties of his office +unless the Vice President and a majority of either the principal officers of +the executive department or of such other body as Congress may by law provide, +transmit within four days to the President pro tempore of the Senate and the +Speaker of the House of Representatives their written declaration that the +President is unable to discharge the powers and duties of his office. Thereupon +Congress shall decide the issue, assembling within forty eight hours for that +purpose if not in session. If the Congress, within twenty one days after +receipt of the latter written declaration, or, if Congress is not in session, +within twenty one days after Congress is required to assemble, determines by +two thirds vote of both Houses that the President is unable to discharge the +powers and duties of his office, the Vice President shall continue to discharge +the same as Acting President; otherwise, the President shall resume the powers +and duties of his office. + +Amendment 26 +1. The right of citizens of the United States, who are eighteen years of age or +older, to vote shall not be denied or abridged by the United States or by any +State on account of age. + +2. The Congress shall have power to enforce this article by appropriate +legislation. + +Amendment 27 +No law, varying the compensation for the services of the Senators and +Representatives, shall take effect, until an election of Representatives shall +have intervened. diff --git a/example b/example new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/inflate.h b/include/inflate.h similarity index 97% rename from inflate.h rename to include/inflate.h index 97780878d0f2e9239d6037f0c45c448fada9245a..5c6611792c12d5459d30988073107810d80e3cb8 100644 --- a/inflate.h +++ b/include/inflate.h @@ -22,6 +22,9 @@ typedef struct huffman { } huffman_t; +/* Reset the position state variable */ +void reset_pos(); + /* Create a Huffman mapping from a sequence of lengths. */ huffman_t *make_huffman(int *lens, int *alphabet, int n_symbols); diff --git a/inflate.c b/inflate.c deleted file mode 100644 index e8ceaf1d5a096a686d5e39d756271857bd7347ba..0000000000000000000000000000000000000000 --- a/inflate.c +++ /dev/null @@ -1,463 +0,0 @@ -#include <stdio.h> -#include <assert.h> -#include <string.h> -#include <stdint.h> -#include <stdlib.h> -#include <stdbool.h> - -#include "inflate.h" - -/* Types of huffman codes */ -#define FIXED 1 -#define DYNAMIC 2 - -/* Dummy value for min_codes in huffman_t structs */ -#define NO_CODE -1 - -/* - * Constants for FIXED code type - */ - -/* Alphabet for codes of length 7, 8, and 9, in order - * Not really intended for use; use HUFFMAN_FIXED instead. - */ - -int _FIXED_7[24] = {256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279}; - -int _FIXED_8[152] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 280, - 281, 282, 283, 284, 285, 286, 287}; - -int _FIXED_9[112] = {144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255 -}; - -/* Note that we only have codes of length 7, 8, 9 */ -huffman_t HUFFMAN_FIXED = { - .bl_counts = {0, 0, 0, 0, 0, 0, 0, 24, 152, 112, 0, 0, 0, 0, 0}, - - .alphabet = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, - _FIXED_7, _FIXED_8, _FIXED_9, - NULL, NULL, NULL, NULL, NULL}, - - .min_codes = {NO_CODE, NO_CODE, NO_CODE, NO_CODE, NO_CODE, NO_CODE, NO_CODE, - 0, 48, 192, 400, - NO_CODE, NO_CODE, NO_CODE, NO_CODE, NO_CODE} -}; - - -/* Number of characters in the code-length alphabet */ -#define N_CL_ALPHABET 19 - -int CL_ALPHABET[N_CL_ALPHABET] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 -}; - - -/* Number of characters in the distance alphabet */ -#define N_DISTS 30 - -int DIST_ALPHABET[N_DISTS] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29 -}; - -huffman_t HUFFMAN_FIXED_DISTS = { - .bl_counts = {0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - - .alphabet = {NULL, NULL, NULL, NULL, NULL, DIST_ALPHABET, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - - .min_codes = {NO_CODE, NO_CODE, NO_CODE, NO_CODE, NO_CODE, 0, - NO_CODE, NO_CODE, NO_CODE, NO_CODE, NO_CODE, NO_CODE, - NO_CODE, NO_CODE, NO_CODE, NO_CODE} -}; - -/* Conversion tables for lengths - * To index into lengths, use (value_read - LENGTH_OFFSET) - * We may have to read additional bits; check LEN_ADDITIONAL for how many - */ -#define LENGTH_OFFSET 257 -int LEN_TABLE[29] = { - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, - 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 -}; - -int LEN_ADDITIONAL[29] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, - 5, 5, 5, 5, 0 -}; - -/* Conversion tables for distance codes - * This can be indexed into directly with the distance code. - * Again, we may have to read additional bits to get the distance. - */ -int DIST_TABLE[30] = { - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, - 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 -}; -int DIST_ADDITIONAL[30] = { - 0, 0, 0, 0, 1, 1, 2, 2, - 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 -}; - -/* - * Constants for DYNAMIC code type - */ - -/* Number of characters in the literal-length alphabet */ -#define N_LITERALS 286 - -int LITERAL_ALPHABET[N_LITERALS] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 -}; - -/* After the dynamic block header, a sequence of lengths - * occurs; the lengths correspond to characters in the - * code-length alphabet in this order. - */ -int CL_ORDER[N_CL_ALPHABET] = { - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 -}; - -/* Keep track of the bit we are at. - * DO NOT MODIFY ANYWHERE EXCEPT get_next_bit */ -int _CUR_BIT = 0; - -int get_next_bit(char *buf) { - int buf_pos = _CUR_BIT / 8; - int pos = _CUR_BIT - 8 * buf_pos; - - char byte = buf[buf_pos]; - char mask = 1 << pos; - - _CUR_BIT += 1; - - return ((byte & mask) != 0); -} - -int get_n_bits(char *buf, int n, bool reverse) { - int res = 0; - for (int i = 0; i < n; i++) { - if (!reverse) { - res += get_next_bit(buf) << (n - i - 1); - } else { - res += get_next_bit(buf) << i; - } - } - return res; -} - -int read_chunk(char *buf, huffman_t hf) { - int code = 0; - /* There should be no codes of length 0, so we can start at 1 */ - for (int i = 1; i < MAX_LENGTH + 1; i++) { - /* We haven't matched up to this point; shift left, and read another bit */ - code <<= 1; - code += get_next_bit(buf); - /* Do we have codes of length i? */ - if (hf.alphabet[i] != NULL) { - /* Index into hf.alphabet[i], i.e. values for codes of length i */ - int idx = (code - hf.min_codes[i]); - /* If this is a valid index, then we have a match of length i */ - if (idx < hf.bl_counts[i]) { - return hf.alphabet[i][idx]; - } - } - } - - /* Something has gone wrong if we reach here */ - return -1; -} - -huffman_t *make_huffman(int *lens, int *alphabet, int n_symbols) { - huffman_t *hf = (huffman_t *) malloc(sizeof(huffman_t)); - /* Initialize fields */ - for (int i = 0; i < MAX_LENGTH + 1; i++) { - hf->bl_counts[i] = 0; - hf->alphabet[i] = NULL; - hf->min_codes[i] = NO_CODE; - } - - /* Update bl_counts with the lens */ - for (int i = 0; i < n_symbols; i++) { - int len = lens[i]; - if (len != 0) { - hf->bl_counts[len] += 1; - } - } - - /* - * Construct min_codes, the value of the smallest code for each - * code length - */ - int code = 0; - for (int i = 1; i < MAX_LENGTH + 1; i++) { - code = (code + hf->bl_counts[i - 1]) << 1; - if (hf->bl_counts[i] != 0) hf->min_codes[i] = code; - } - - /* - * Start assigning codes to alphabet characters. - */ - for (int len = 0; len < MAX_LENGTH + 1; len++) { - if (hf->bl_counts[len] != 0) { - int *symbols = (int *) malloc(hf->bl_counts[len] * sizeof(int)); - int cur = 0; - - for (int sym = 0; sym < n_symbols; sym++) { - if (lens[sym] == len) { - symbols[cur] = sym; - cur += 1; - } - } - hf->alphabet[len] = symbols; - } - } - - return hf; -} - -void destroy_huffman(huffman_t *hf) { - for (int i = 0; i < MAX_LENGTH + 1; i++) { - if (hf->alphabet[i] != NULL) free(hf->alphabet[i]); - } - free(hf); -} - -int *read_lens(char *buf, huffman_t *hf_codes, int num_symbols, int num_codes) { - int *lens = (int *) malloc(num_symbols * sizeof(int)); - for (int i = 0; i < num_symbols; i++) lens[i] = 0; - - int cur_lit = 0; - - while (cur_lit < num_codes) { - int len = read_chunk(buf, *hf_codes); - if (len <= 15) { - lens[cur_lit] = len; - cur_lit += 1; - } else if (len == 16) { - int rep = get_n_bits(buf, 2, true) + 3; - int prev = lens[cur_lit - 1]; - - for (int j = 0; j < rep; j++) { - lens[cur_lit] = prev; - cur_lit += 1; - } - } else if (len == 17) { - int rep = get_n_bits(buf, 3, true) + 3; - for (int j = 0; j < rep; j++) { - lens[cur_lit] = 0; - cur_lit += 1; - } - } else if (len == 18) { - int rep = get_n_bits(buf, 7, true) + 11; - for (int j = 0; j < rep; j++) { - lens[cur_lit] = 0; - cur_lit += 1; - } - } else { - fprintf(stderr, "error: invalid length"); - exit(1); - } - } - return lens; -} - -void read_block(char *buf, FILE *out) { - /* First bit is the BFINAL flag */ - - bool bfinal = get_next_bit(buf); - - /* Next two bits are BTYPE */ - int btype = get_n_bits(buf, 2, true); - - /* By default, use fixed mapping */ - huffman_t *hf = &HUFFMAN_FIXED; - huffman_t *hf_dist = &HUFFMAN_FIXED_DISTS; - - if (btype == DYNAMIC) { - /* Read dynamic block header */ - int hlit = get_n_bits(buf, 5, true); - int hdist = get_n_bits(buf, 5, true); - int hclen = get_n_bits(buf, 4, true); - - /* Read in the code lengths for the code-length alphabet */ - int *lens_cl = (int *) malloc(N_CL_ALPHABET * sizeof(int)); - for (int i = 0; i < N_CL_ALPHABET; i++) lens_cl[i] = 0; - - for (int i = 0; i < hclen + 4; i++) { - int len = get_n_bits(buf, 3, true); - int cl = CL_ORDER[i]; - lens_cl[cl] = len; - } - - huffman_t *hf_codes = make_huffman(lens_cl, CL_ALPHABET, N_CL_ALPHABET); - - /* Now read in the code lengths for the literal alphabet */ - int *lens_lit = read_lens(buf, hf_codes, N_LITERALS, hlit + 257); - - /* Huffman mapping for the length-literal alphabet */ - huffman_t *hf_lit = make_huffman(lens_lit, LITERAL_ALPHABET, N_LITERALS); - - /* Read in the lengths for the distance alphabet */ - int *lens_dist = read_lens(buf, hf_codes, N_DISTS, hdist + 1); - - /* Huffman mapping for the distance code alphabet */ - huffman_t *hf_dist_new = make_huffman(lens_dist, DIST_ALPHABET, N_DISTS); - - /* Cleanup */ - destroy_huffman(hf_codes); - free(lens_cl); - free(lens_lit); - free(lens_dist); - - hf = hf_lit; - hf_dist = hf_dist_new; - - } else if (btype != FIXED) { - fprintf(stderr, "error: unrecognized btype\n"); - exit(1); - } - - /* Read to decode when we reach this point. */ - int chunk_val; - - do - { - /* Match a huffman code */ - chunk_val = read_chunk(buf, *hf); - - /* Literal, just write to output buffer */ - if (chunk_val < 256) { - fwrite(&chunk_val, 1, sizeof(char), out); - /* We read a length */ - } else if (chunk_val > 256) { - int length = LEN_TABLE[chunk_val - LENGTH_OFFSET]; - int addit_len = LEN_ADDITIONAL[chunk_val - LENGTH_OFFSET]; - length += get_n_bits(buf, addit_len, true); - - /* Read in the distance code */ - int dist_code = read_chunk(buf, *hf_dist); - assert(dist_code != -1); - int dist = DIST_TABLE[dist_code]; - int addit_dist = DIST_ADDITIONAL[dist_code]; - dist += get_n_bits(buf, addit_dist, true); - for (int i = 0; i < length; i++) { - fseek(out, -dist, SEEK_CUR); - int val = fgetc(out); - fseek(out, 0, SEEK_END); - fwrite(&val, 1, sizeof(char), out); - } - } - } - while (chunk_val != 256); - - /* Skip over filler at the end of the block */ - while (_CUR_BIT % 8 != 0) { - _CUR_BIT += 1; - } - - if (btype == DYNAMIC) { - destroy_huffman(hf); - destroy_huffman(hf_dist); - } -} - -void truncate_suffix(char *fname) { - char *dot = strrchr(fname, '.'); - - char *suffix = ".deflate"; - for (int i = 0; i < 8; i++) { - if (dot == NULL || *(dot + i) != suffix[i]) { - fprintf(stderr, "error: must be a .deflate file"); - exit(1); - } - } - *dot = '\0'; -} - -void inflate(FILE *fp, char *fname) { - truncate_suffix(fname); - - /* Create output file */ - FILE *out = fopen(fname, "wb+"); - - /* Read the file into a buffer */ - fseek(fp, 0, SEEK_END); - long size = ftell(fp); - rewind(fp); - char *buf = (char *) malloc(size); - if (!buf) { - fprintf(stderr, "error: memory error\n"); - exit(1); - } - fread(buf, 1, size, fp); - - while (_CUR_BIT < 8 * size) { - read_block(buf, out); - } - - fclose(out); - free(buf); -} - -int main(int argc, char *argv[]) { - if (argc != 2) { - fprintf(stderr, "usage: inflate [file]\n"); - return 1; - } - - char *fname = argv[1]; - - FILE *fp = fopen(fname, "rb"); - - if (!fp) { - fprintf(stderr, "error: file not found\n"); - return 1; - } - - inflate(fp, fname); - - fclose(fp); - return 0; -} diff --git a/tests/inflate_test.cpp b/tests/inflate_test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4d5df583da8938443d56ffe3d53cd1a7085ed895 --- /dev/null +++ b/tests/inflate_test.cpp @@ -0,0 +1,91 @@ +#include <gtest/gtest.h> + +#include <inflate.h> + +/* Test that we read the bits in the correct order */ +TEST (BufferTests, GetNextBitTest) { + reset_pos(); + + /* The 4-byte buffer in memory */ + unsigned char buf[4] = {175, /* = 10101111 */ + 240, /* = 11110000 */ + 15, /* = 00001111 */ + 204}; /* = 11001100 */ + + /* + * The real stream order. + * If the bytes are laid out in memory as + * [b0b1..b7] [b8...b15] ... + * Then the correct stream order is: + * [b7...b0] [b15...b8] ... + */ + int stream_order[32] = {1, 1, 1, 1, 0, 1, 0, 1, + 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 1, 1}; + + for (int i = 0; i < 32; i++) { + // TODO this cast should probably not be necessary + // change type signature to unsigned char in inflate + ASSERT_EQ (get_next_bit((char *) buf), stream_order[i]); + } +} + +/* + * Test that we get the correct numerical value when + * reading from a buffer. + * In this test, all integers are interpreted in + * STREAM ORDER. That is, if the bitstream + * is (b0, b1, b2, ..., bn), we interpret + * b0 as the MSB and bn as the LSB. Note that the order + * of the bitstream is not necessarily the order that + * the bits are laid out in memory; see get_next_bit(). + */ +TEST (BufferTests, StreamOrderTest) { + reset_pos(); + + unsigned char buf[2] = {220, /* = 11011100 */ + 145}; /* = 10010001 */ + + /* First 3 bits are 001 */ + ASSERT_EQ (get_n_bits((char *) buf, 3, false), 1); + /* Next 5 are 11011 */ + ASSERT_EQ (get_n_bits((char *) buf, 5, false), 27); + /* Next 2 are 10 */ + ASSERT_EQ (get_n_bits((char *) buf, 2, false), 2); + /* Next 6 are 001001 */ + ASSERT_EQ (get_n_bits((char *) buf, 6, false), 9); +} + +/* + * Like the test above, but interprets integers in REVERSE STREAM ORDER. + * That is, if we read in the bitstream (b0, b1, ..., bn), + * b0 is the LSB and bn is the MSB. + */ +TEST (BufferTests, RevStreamOrderTest) { + reset_pos(); + + unsigned char buf[2] = {220, /* = 11011100 */ + 145}; /* = 10010001 */ + + /* First 3 bits are 001 */ + ASSERT_EQ (get_n_bits((char *) buf, 3, true), 4); + /* Next 5 are 11011 */ + ASSERT_EQ (get_n_bits((char *) buf, 5, true), 27); + /* Next 2 are 10 */ + ASSERT_EQ (get_n_bits((char *) buf, 2, true), 1); + /* Next 6 are 001001 */ + ASSERT_EQ (get_n_bits((char *) buf, 6, true), 36); +} + +// TODO +TEST (HuffmanTests, TestMakeHuffman) {} + +TEST (HuffmanTests, TestReadChunk) {} + +TEST (HuffmanTests, TestReadLens) {} + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}