diff -Nru c2esp-26/COPYING c2esp-27~rc1/COPYING --- c2esp-26/COPYING 2010-03-12 15:44:44.000000000 +0000 +++ c2esp-27~rc1/COPYING 2013-12-01 17:55:46.000000000 +0000 @@ -1,22 +1,14 @@ -PATENTS - It is possible that certain products which can be built using the jbig - software module might form inventions protected by patent rights in - some countries (e.g., by patents about arithmetic coding algorithms - owned by IBM and AT&T in the USA). Provision of this software by the - author does NOT include any licences for any patents. In those - countries where a patent licence is required for certain applications - of this software module, you will have to obtain such a licence - yourself. - - -Everything else is... ----------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Copyright (C) 1989, 1991 + Free Software Foundation + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1301 + USA + Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. diff -Nru c2esp-26/GPL-2 c2esp-27~rc1/GPL-2 --- c2esp-26/GPL-2 2011-08-31 21:21:19.000000000 +0000 +++ c2esp-27~rc1/GPL-2 1970-01-01 00:00:00.000000000 +0000 @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff -Nru c2esp-26/KodakESP_15.drv c2esp-27~rc1/KodakESP_15.drv --- c2esp-26/KodakESP_15.drv 2012-08-26 22:54:02.000000000 +0000 +++ c2esp-27~rc1/KodakESP_15.drv 1970-01-01 00:00:00.000000000 +0000 @@ -1,286 +0,0 @@ -// -// -// Driver info file for PPDs. -// Version for all dithered filter -// - -// Include necessary files... -#include -#include - -// Common stuff for all drivers... -Attribute "cupsVersion" "" "1.4" -Attribute "FileSystem" "" "False" -Attribute "LandscapeOrientation" "" "Plus90" -Attribute "TTRasterizer" "" "Type42" - -Copyright "Copyright 2011-2012 by Paul Newall" - -Font * - -Version "1.5" - -// Kodak -{ - Manufacturer "Kodak" - DriverType custom - ManualCopies Yes - ColorDevice Yes - Throughput 8 - Attribute "cupsSNMPSupplies" "" "False" // hope to stop the "may not be connected" message - VariablePaperSize Yes - MinSize 36 36 - MaxSize 1080 86400 - - Filter application/vnd.cups-raster 50 /usr/lib/cups/filter/c2esp - Filter application/vnd.cups-command 50 /usr/lib/cups/filter/command2esp - Attribute "cupsCommands" "" "Clean PrintSelfTestPage PrintAlignmentPage ReportLevels" - ColorDevice Yes - Attribute DefaultColorSpace "" "CMYK" - HWMargins 3 3 3 3 //1mm all round - - option "MediaSize" PickOne AnySetup 30 - MediaSize Executive - MediaSize Letter - MediaSize Legal - *MediaSize A4 - MediaSize A5 - MediaSize A6 - MediaSize 8x10 - MediaSize Photo4x6 - MediaSize EnvISOB5 - MediaSize EnvC5 - MediaSize DL - MediaSize Env10 - - option "Resolution" PickOne AnySetup 20 -//Resolution colorspace bits-per-color row-count row-feed row-step name - Choice 300x1200dpi/300x1200 "<>setpagedevice" - *Choice 600x1200dpi/600x1200 "<>setpagedevice" - - -//res/media dens gamma 3x3matrix -// input -// C M Y -// o C 1 0 0 -// u M 0 1 0 -// t Y 0 0 1 - - ColorProfile 300x1200dpi/- 1.0 1.0 - 1.0 0.0 0.0 - -0.1 1.0 0.0 - 0.0 -0.3 1.0 - - ColorProfile 600x1200dpi/- 1.0 1.4 //gamma above 1.0 works for 600dpi - 1.0 -0.1 0.0 - -0.1 1.0 0.0 - 0.0 -0.4 1.0 - -// Plain mapping for calibration tests - -// ColorProfile 300x1200dpi/- 1.0 1.0 -// 1.0 0.0 0.0 -// 0.0 1.0 0.0 -// 0.0 0.0 1.0 - -// ColorProfile 600x1200dpi/- 1.0 1.7 //gamma 1.5 to 1.7 is good for dithered -// 1.0 0.0 0.0 -// 0.0 1.0 0.0 -// 0.0 0.0 1.0 - - Attribute cupsInkChannels "" "4" - Attribute cupsInkLimit "" "2.0" - Attribute cupsBlackGeneration "" "0.0 0.0" - - Attribute "marker-colors" "" "black magenta" - - option "ColorModel" PickOne AnySetup 10 -//ColorModel name colorspace colororder compression - - *ColorModel RGB/Color rgb chunky 0 - ColorModel Gray/BlackAndWhite k chunky 0 - - -//List of model names for reference - -//"KODAK ESP 9200 Series AiO" -//"KODAK ESP 7200 Series AiO" -//"KODAK ESP Office 6100 Series AiO" -//"KODAK ESP Office 4100 Series AiO" -//"KODAK ESP 5200 Series AiO" -//"KODAK ESP 3200 Series AiO" -//"KODAK ESP 9 AiO" -//"KODAK ESP 7 AiO" -//"KODAK ESP 5 AiO" -//"KODAK ESP-3 AiO" -//"KODAK 5100 AiO" -//"KODAK 5300 AiO" -//"KODAK 5500 AiO" - - // Kodak ESP 9 duplex - { - ModelName "Kodak ESP 9 AiO" - Attribute NickName "" "Kodak ESP 9" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP 9 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 9 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_9.ppd" - PCFileName "KESP9.ppd" - ModelNumber 9 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - // Kodak ESP 7 duplex - { - ModelName "Kodak ESP 7 AiO" - Attribute NickName "" "Kodak ESP 7" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP 7 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 7 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_7.ppd" - PCFileName "KESP7.ppd" - ModelNumber 7 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - // Kodak ESP 5 duplex - { - ModelName "Kodak ESP 5 AiO" - Attribute NickName "" "Kodak ESP 5" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP 5 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 5 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_5.ppd" - PCFileName "KESP5.ppd" - ModelNumber 5 - InputSlot 0 MainTray - } - // Kodak ESP 3 - { - ModelName "Kodak ESP 3 AiO" - Attribute NickName "" "Kodak ESP 3" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP 3 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP-3 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_3.ppd" - PCFileName "KESP3.ppd" - ModelNumber 3 - InputSlot 0 MainTray - } - - // Kodak ESP 3xxx Series without duplex - { - ModelName "Kodak ESP 3200 Series AiO" - Attribute NickName "" "Kodak ESP 3200" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP 3200 Series AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 3200 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_32xx_Series.ppd" - PCFileName "KESP32xx.ppd" - ModelNumber 3250 - } - - // Kodak ESP 52xx Series without duplex - { - ModelName "Kodak ESP 5200 Series AiO" - Attribute NickName "" "Kodak ESP 5200" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP 5200 Series AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 5200 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_52xx_Series.ppd" - PCFileName "KESP52xx.ppd" - ModelNumber 5250 - } - - // Kodak ESP 51xx Series optional duplex - { - ModelName "Kodak 5100 AiO" - Attribute NickName "" "Kodak 5100 AiO" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak 5100 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK 5100 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_51xx_Series.ppd" - PCFileName "KESP51xx.ppd" - ModelNumber 5100 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - - // Kodak ESP 53xx Series optional duplex - { - ModelName "Kodak 5300 AiO" - Attribute NickName "" "Kodak 5300 AiO" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak 5300 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK 5300 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_53xx_Series.ppd" - PCFileName "KESP53xx.ppd" - ModelNumber 5300 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - // Kodak ESP 55xx Series with duplex - { - ModelName "Kodak 5500 AiO" - Attribute NickName "" "Kodak 5500 AiO" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak 5500 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK 5500 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_55xx_Series.ppd" - PCFileName "KESP55xx.ppd" - ModelNumber 5500 -// Duplex normal //reported that back side was upside down on 5500 -// Duplex flip //reported that back side was mirror image on 5500 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - - // Kodak ESP 41xx Series without duplex? - { - ModelName "Kodak ESP Office 4100 Series AiO" - Attribute NickName "" "Kodak ESP Office 4100" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP Office 4100 Series AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP Office 4100 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_41xx_Series.ppd" - PCFileName "KESP41xx.ppd" - ModelNumber 4100 - } - - // Kodak ESP 61xx Series with duplex - { - ModelName "Kodak ESP Office 6100 Series AiO" - Attribute NickName "" "Kodak ESP Office 6100" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP Office 6100 Series AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP Office 6100 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_61xx_Series.ppd" - PCFileName "KESP61xx.ppd" - ModelNumber 6150 - Duplex rotated - } - - // Kodak ESP 72xx Series non-dithered/dithered with duplex and photo tray - { - ModelName "Kodak ESP 7200 Series AiO" - Attribute NickName "" "Kodak ESP 7200" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP 7200 Series AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 7200 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_72xx_Series.ppd" - PCFileName "KESP72xx.ppd" - ModelNumber 7250 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - - // Kodak ESP 92xx Series non-dithered/dithered with duplex and photo tray - { - ModelName "Kodak ESP 9200 Series AiO" - Attribute NickName "" "Kodak ESP 9200" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP 9200 Series AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 9200 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_92xx_Series.ppd" - PCFileName "KESP92xx.ppd" - ModelNumber 9250 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - -} - diff -Nru c2esp-26/KodakESP_16.drv c2esp-27~rc1/KodakESP_16.drv --- c2esp-26/KodakESP_16.drv 1970-01-01 00:00:00.000000000 +0000 +++ c2esp-27~rc1/KodakESP_16.drv 2013-12-17 10:06:35.000000000 +0000 @@ -0,0 +1,307 @@ +// +// +// Driver info file for PPDs. +// Version for all dithered filter +// +// 1 dec 2013: ShortNickName added to stop ppdc warnings. +// NickName and ShortNickName changed to ModelName to help Ubuntu auto identify printers. +// It seems that the ShortNickName is used to build the database for system-config-printer? +// But if there is no ShortNickName, NickName is used instead? +// The first word of ShortNickName gets used for the maker in the database? +// ppdc still gives warnings when short nickname is >31 chars (ESP41 and ESP61) +// but it still builds the ppd files. I have not found a work around for this. + +// Include necessary files... +#include +#include + +// Common stuff for all drivers... +Attribute "cupsVersion" "" "1.4" +Attribute "FileSystem" "" "False" +Attribute "LandscapeOrientation" "" "Plus90" +Attribute "TTRasterizer" "" "Type42" + +Copyright "Copyright 2011-2012 by Paul Newall" + +Font * + +Version "1.6" + +// Kodak +{ + Manufacturer "Eastman Kodak Company" //was Eastman Kodak + DriverType custom + ManualCopies Yes + ColorDevice Yes + Throughput 8 + Attribute "cupsSNMPSupplies" "" "False" // hope to stop the "may not be connected" message + VariablePaperSize Yes + MinSize 36 36 + MaxSize 1080 86400 + + Filter application/vnd.cups-raster 50 /usr/lib/cups/filter/c2esp + Filter application/vnd.cups-command 50 /usr/lib/cups/filter/command2esp + Attribute "cupsCommands" "" "Clean PrintSelfTestPage PrintAlignmentPage ReportLevels" + ColorDevice Yes + Attribute DefaultColorSpace "" "CMYK" + HWMargins 3 3 3 3 //1mm all round + + option "MediaSize" PickOne AnySetup 30 + MediaSize Executive + MediaSize Letter + MediaSize Legal + *MediaSize A4 + MediaSize A5 + MediaSize A6 + MediaSize 8x10 + MediaSize Photo4x6 + //MediaSize 4x6 + MediaSize EnvISOB5 + MediaSize EnvC5 + MediaSize EnvDL + MediaSize Env10 + + option "Resolution" PickOne AnySetup 20 +//Resolution colorspace bits-per-color row-count row-feed row-step name + Choice 300x1200dpi/300x1200 "<>setpagedevice" + *Choice 600x1200dpi/600x1200 "<>setpagedevice" + + +//res/media dens gamma 3x3matrix +// input +// C M Y +// o C 1 0 0 +// u M 0 1 0 +// t Y 0 0 1 + + ColorProfile 300x1200dpi/- 1.0 1.0 + 1.0 0.0 0.0 + -0.1 1.0 0.0 + 0.0 -0.3 1.0 + + ColorProfile 600x1200dpi/- 1.0 1.4 //gamma above 1.0 works for 600dpi + 1.0 -0.1 0.0 + -0.1 1.0 0.0 + 0.0 -0.4 1.0 + +// Plain mapping for calibration tests + +// ColorProfile 300x1200dpi/- 1.0 1.0 +// 1.0 0.0 0.0 +// 0.0 1.0 0.0 +// 0.0 0.0 1.0 + +// ColorProfile 600x1200dpi/- 1.0 1.7 //gamma 1.5 to 1.7 is good for dithered +// 1.0 0.0 0.0 +// 0.0 1.0 0.0 +// 0.0 0.0 1.0 + + Attribute cupsInkChannels "" "4" + Attribute cupsInkLimit "" "2.0" + Attribute cupsBlackGeneration "" "0.0 0.0" + + Attribute "marker-colors" "" "black magenta" + + option "ColorModel" PickOne AnySetup 10 +//ColorModel name colorspace colororder compression + + *ColorModel RGB/Color rgb chunky 0 + ColorModel Gray/BlackAndWhite k chunky 0 + + +//List of model names for reference + +//"KODAK ESP 9200 Series AiO" +//"KODAK ESP 7200 Series AiO" +//"KODAK ESP Office 6100 Series AiO" +//"KODAK ESP Office 4100 Series AiO" +//"KODAK ESP 5200 Series AiO" +//"KODAK ESP 3200 Series AiO" +//"KODAK ESP 9 AiO" +//"KODAK ESP 7 AiO" +//"KODAK ESP 5 AiO" +//"KODAK ESP-3 AiO" +//"KODAK 5100 AiO" +//"KODAK 5300 AiO" +//"KODAK 5500 AiO" + + // Kodak ESP 9 duplex + { + ModelName "Kodak ESP 9 AiO" + Attribute NickName "" "Kodak ESP 9 AiO" + Attribute ShortNickName "" "Kodak ESP 9 AiO" + Attribute Product "" "(Kodak ESP 9 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 9 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_9.ppd" + PCFileName "KESP9.ppd" + ModelNumber 9 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + // Kodak ESP 7 duplex + { + ModelName "Kodak ESP 7 AiO" + Attribute NickName "" "Kodak ESP 7 AiO" + Attribute ShortNickName "" "Kodak ESP 7 AiO" + Attribute Product "" "(Kodak ESP 7 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 7 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_7.ppd" + PCFileName "KESP7.ppd" + ModelNumber 7 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + // Kodak ESP 5 duplex + { + ModelName "Kodak ESP 5 AiO" + Attribute NickName "" "Kodak ESP 5 AiO" + Attribute ShortNickName "" "Kodak ESP 5 AiO" + Attribute Product "" "(Kodak ESP 5 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 5 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_5.ppd" + PCFileName "KESP5.ppd" + ModelNumber 5 + InputSlot 0 MainTray + } + // Kodak ESP 3 + { + ModelName "Kodak ESP 3 AiO" + Attribute NickName "" "Kodak ESP 3 AiO" + Attribute ShortNickName "" "Kodak ESP 3 AiO" + Attribute Product "" "(Kodak ESP 3 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP-3 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_3.ppd" + PCFileName "KESP3.ppd" + ModelNumber 3 + InputSlot 0 MainTray + } + + // Kodak ESP 3xxx Series without duplex + { + ModelName "Kodak ESP 3200 Series AiO" + Attribute NickName "" "Kodak ESP 3200 Series AiO" + Attribute ShortNickName "" "Kodak ESP 3200 Series AiO" + Attribute Product "" "(Kodak ESP 3200 Series AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 3200 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_32xx_Series.ppd" + PCFileName "KESP32xx.ppd" + ModelNumber 3250 + } + + // Kodak ESP 52xx Series without duplex + { + ModelName "Kodak ESP 5200 Series AiO" + Attribute NickName "" "Kodak ESP 5200 Series AiO" + Attribute ShortNickName "" "Kodak ESP 5200 Series Aio" + Attribute Product "" "(Kodak ESP 5200 Series AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 5200 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_52xx_Series.ppd" + PCFileName "KESP52xx.ppd" + ModelNumber 5250 + } + + // Kodak ESP 51xx Series optional duplex + { + ModelName "Kodak 5100 AiO" + Attribute NickName "" "Kodak 5100 AiO" + Attribute ShortNickName "" "Kodak 5100 AiO" + Attribute Product "" "(Kodak 5100 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK 5100 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_51xx_Series.ppd" + PCFileName "KESP51xx.ppd" + ModelNumber 5100 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + + // Kodak ESP 53xx Series optional duplex + { + ModelName "Kodak 5300 AiO" + Attribute NickName "" "Kodak 5300 AiO" + Attribute ShortNickName "" "Kodak 5300 AiO" + Attribute Product "" "(Kodak 5300 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK 5300 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_53xx_Series.ppd" + PCFileName "KESP53xx.ppd" + ModelNumber 5300 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + // Kodak ESP 55xx Series with duplex + { + ModelName "Kodak 5500 AiO" + Attribute NickName "" "Kodak 5500 AiO" + Attribute ShortNickName "" "Kodak 5500 AiO" + Attribute Product "" "(Kodak 5500 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK 5500 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_55xx_Series.ppd" + PCFileName "KESP55xx.ppd" + ModelNumber 5500 +// Duplex normal //reported that back side was upside down on 5500 +// Duplex flip //reported that back side was mirror image on 5500 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + + // Kodak ESP 41xx Series without duplex? + { + ModelName "Kodak ESP Office 4100 Series AiO" + Attribute NickName "" "Kodak ESP Office 4100 Series AiO" + Attribute ShortNickName "" "Kodak ESP Office 4100 Series AiO" //more than 31 chars? + Attribute Product "" "(Kodak ESP Office 4100 Series AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP Office 4100 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_41xx_Series.ppd" + PCFileName "KESP41xx.ppd" + ModelNumber 4100 + } + + // Kodak ESP 61xx Series with duplex + { + ModelName "Kodak ESP Office 6100 Series AiO" + Attribute NickName "" "Kodak ESP Office 6100 Series AiO" + Attribute ShortNickName "" "Kodak ESP Office 6100 Series AiO" //more than 31 chars? + Attribute Product "" "(Kodak ESP Office 6100 Series AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP Office 6100 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_61xx_Series.ppd" + PCFileName "KESP61xx.ppd" + ModelNumber 6150 + Duplex rotated + } + + // Kodak ESP 72xx Series non-dithered/dithered with duplex and photo tray + { + ModelName "Kodak ESP 7200 Series AiO" + Attribute NickName "" "Kodak ESP 7200 Series AiO" + Attribute ShortNickName "" "Kodak ESP 7200 Series AiO" + Attribute Product "" "(Kodak ESP 7200 Series AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 7200 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_72xx_Series.ppd" + PCFileName "KESP72xx.ppd" + ModelNumber 7250 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + + // Kodak ESP 92xx Series non-dithered/dithered with duplex and photo tray + { + ModelName "Kodak ESP 9200 Series AiO" + Attribute NickName "" "Kodak ESP 9200 Series AiO" + Attribute ShortNickName "" "Kodak ESP 9200 Series AiO" + Attribute Product "" "(Kodak ESP 9200 Series AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 9200 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_92xx_Series.ppd" + PCFileName "KESP92xx.ppd" + ModelNumber 9250 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + +} + diff -Nru c2esp-26/KodakESP_C_05.drv c2esp-27~rc1/KodakESP_C_05.drv --- c2esp-26/KodakESP_C_05.drv 2011-11-27 22:51:38.000000000 +0000 +++ c2esp-27~rc1/KodakESP_C_05.drv 1970-01-01 00:00:00.000000000 +0000 @@ -1,169 +0,0 @@ -// -// -// Driver info file for PPDs. For ESP Cxxx series and for Hero series -// - -// Include necessary files... -#include -#include - -// Common stuff for all drivers... -Attribute "cupsVersion" "" "1.4" -Attribute "FileSystem" "" "False" -Attribute "LandscapeOrientation" "" "Plus90" -Attribute "TTRasterizer" "" "Type42" - -Copyright "Copyright 2011 by Paul Newall" - -Font * - -Version "1.4" - -// Kodak -{ - Manufacturer "Eastman Kodak" - DriverType custom - ManualCopies Yes - ColorDevice Yes - Throughput 8 - Attribute "cupsSNMPSupplies" "" "False" // hope to stop the "may not be connected" message - VariablePaperSize Yes - MinSize 36 36 - MaxSize 1080 86400 - - Filter application/vnd.cups-raster 50 /usr/lib/cups/filter/c2espC - Filter application/vnd.cups-command 50 /usr/lib/cups/filter/command2esp - Attribute "cupsCommands" "" "Clean PrintSelfTestPage PrintAlignmentPage ReportLevels" - ColorDevice Yes - Attribute DefaultColorSpace "" "CMY" -// HWMargins 14.03 14.25 14.03 14.25 //5mm all round - HWMargins 3 3 3 3 //1mm all round - -// option "MediaSize" PickOne AnySetup 30 - MediaSize Executive - MediaSize Letter - MediaSize Legal - *MediaSize A4 - MediaSize A5 - MediaSize A6 - MediaSize 8x10 - MediaSize Photo4x6 - MediaSize EnvISOB5 - MediaSize EnvC5 - MediaSize DL - MediaSize Env10 - - option "Resolution" PickOne AnySetup 20 - Choice 300x300dpi/300x300 "<>setpagedevice" - *Choice 600x600dpi/600x600 "<>setpagedevice" - - - //res/media dens gamma 3x3matrix - ColorProfile 300x300dpi/- 1.0 1.0 - 1.0 0.0 0.0 - 0.0 1.0 0.0 - 0.0 0.0 1.0 - - ColorProfile 600x600dpi/- 1.0 1.0 //gamma 1.5 to 1.7 was good for dithered in ESP5250 - 1.0 0.0 0.0 - 0.0 1.0 0.0 - 0.0 0.0 1.0 - - Attribute "marker-colors" "" "black magenta" - - option "ColorModel" PickOne AnySetup 10 -//ColorModel name colorspace colororder compression -// Choice CMY/Color "<>setpagedevice" -// *Choice Gray/BlackAndWhite "<>setpagedevice" - ColorModel Gray/Grayscale k chunky 0 - *ColorModel CMY/Color cmy chunky 0 - - // Kodak ESP C110 Series without duplex or photo tray - { - ModelName "Kodak ESP C110 Series AiO" - Attribute NickName "" "Kodak ESP C110" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP C110 Series AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP C110 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_C11x_Series.ppd" - PCFileName "KESPC11x.ppd" - ModelNumber C110 - } - - // Kodak ESP C310 Series without duplex or photo tray - { - ModelName "Kodak ESP C310 Series AiO" - Attribute NickName "" "Kodak ESP C310" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(Kodak ESP C310 Series AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP C310 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_ESP_C31x_Series.ppd" - PCFileName "KESPC31x.ppd" - ModelNumber C310 - } - - // Kodak ESP Hero Series without duplex or photo tray - { - ModelName "KODAK HERO 3.1 AiO" - Attribute NickName "" "KODAK HERO 3.1 AiO" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(KODAK HERO 3.1 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 3.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_Hero_3.1.ppd" - PCFileName "KHERO31.ppd" - ModelNumber Hero3.1 - } - - // Kodak ESP Hero Series with duplex and without photo tray - { - ModelName "KODAK HERO 5.1 AiO" - Attribute NickName "" "KODAK HERO 5.1 AiO" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(KODAK HERO 5.1 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 5.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_Hero_5.1.ppd" - PCFileName "KHERO51.ppd" - ModelNumber Hero5.1 - Duplex rotated - } - - // Kodak ESP Hero Series with duplex and photo tray. 6.1, 7.1, 9.1 - { - ModelName "KODAK HERO 6.1 AiO" - Attribute NickName "" "KODAK HERO 6.1 AiO" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(KODAK HERO 6.1 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 6.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_Hero_6.1.ppd" - PCFileName "KHERO61.ppd" - ModelNumber Hero6.1 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - -// Kodak ESP Hero Series with duplex and photo tray. 6.1, 7.1, 9.1 - { - ModelName "KODAK HERO 7.1 AiO" - Attribute NickName "" "KODAK HERO 7.1 AiO" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(KODAK HERO 7.1 AiO)" - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 7.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_Hero_7.1.ppd" - PCFileName "KHERO71.ppd" - ModelNumber Hero9.1 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } - -// Kodak ESP Hero Series with duplex and photo tray. 6.1, 7.1, 9.1 - { - ModelName "KODAK HERO 9.1 AiO" - Attribute NickName "" "KODAK HERO 9.1 AiO" //The NickName is used in ubuntu to make the printer database - Attribute Product "" "(KODAK HERO 9.1 AiO)" -// MFG:Eastman Kodak Company;MDL:KODAK HERO 9.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;SN:Z004009; - Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 9.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" - FileName "Kodak_Hero_9.1.ppd" - PCFileName "KHERO91.ppd" - ModelNumber Hero9.1 - Duplex rotated - InputSlot 0 MainTray - InputSlot 1 PhotoTray - } -} - diff -Nru c2esp-26/KodakESP_C_07.drv c2esp-27~rc1/KodakESP_C_07.drv --- c2esp-26/KodakESP_C_07.drv 1970-01-01 00:00:00.000000000 +0000 +++ c2esp-27~rc1/KodakESP_C_07.drv 2013-12-17 10:09:47.000000000 +0000 @@ -0,0 +1,231 @@ +// +// +// Driver info file for PPDs. For ESP Cxxx series and for Hero series +// +// 1 dec 2013: ShortNickName added to stop ppdc warnings. +// NickName and ShortNickName changed to ModelName to help Ubuntu auto identify printers. +// It seems that the ShortNickName is used to build the database for system-config-printer? +// But if there is no ShortNickName, NickName is used instead? +// The first word of ShortNickName gets used for the maker in the database? +// ppdc still gives warnings when short nickname is >31 chars (ESP41 and ESP61) +// but it still builds the ppd files. I have not found a work around for this. + +// Include necessary files... +#include +#include + +// Common stuff for all drivers... +Attribute "cupsVersion" "" "1.4" +Attribute "FileSystem" "" "False" +Attribute "LandscapeOrientation" "" "Plus90" +Attribute "TTRasterizer" "" "Type42" + +Copyright "Copyright 2011-2013 by Paul Newall" + +Font * + +Version "1.6" + +// Kodak +{ + Manufacturer "Eastman Kodak Company" //was Eastman Kodak + DriverType custom + ManualCopies Yes + ColorDevice Yes + Throughput 8 + Attribute "cupsSNMPSupplies" "" "False" // hope to stop the "may not be connected" message + VariablePaperSize Yes + MinSize 36 36 + MaxSize 1080 86400 + + Filter application/vnd.cups-raster 50 /usr/lib/cups/filter/c2espC + Filter application/vnd.cups-command 50 /usr/lib/cups/filter/command2esp + Attribute "cupsCommands" "" "Clean PrintSelfTestPage PrintAlignmentPage ReportLevels" + ColorDevice Yes + Attribute DefaultColorSpace "" "CMY" +// HWMargins 14.03 14.25 14.03 14.25 //5mm all round + HWMargins 3 3 3 3 //1mm all round + +// option "MediaSize" PickOne AnySetup 30 + MediaSize Executive + MediaSize Letter + MediaSize Legal + *MediaSize A4 + MediaSize A5 + MediaSize A6 + MediaSize 8x10 + MediaSize Photo4x6 + MediaSize EnvISOB5 + MediaSize EnvC5 + MediaSize EnvDL + MediaSize Env10 + + option "Resolution" PickOne AnySetup 20 + Choice 300x300dpi/300x300 "<>setpagedevice" + *Choice 600x600dpi/600x600 "<>setpagedevice" + + + //res/media dens gamma 3x3matrix + ColorProfile 300x300dpi/- 1.0 1.0 + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + + ColorProfile 600x600dpi/- 1.0 1.0 //gamma 1.5 to 1.7 was good for dithered in ESP5250 + 1.0 0.0 0.0 + 0.0 1.0 0.0 + 0.0 0.0 1.0 + + Attribute "marker-colors" "" "black magenta" + + option "ColorModel" PickOne AnySetup 10 +//ColorModel name colorspace colororder compression +// Choice CMY/Color "<>setpagedevice" +// *Choice Gray/BlackAndWhite "<>setpagedevice" + ColorModel Gray/Grayscale k chunky 0 + *ColorModel CMY/Color cmy chunky 0 + + // Kodak ESP C110 Series without duplex or photo tray + { + ModelName "Kodak ESP C110 Series AiO" + Attribute NickName "" "Kodak ESP C110 Series AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "Kodak ESP C110 Series AiO" + Attribute Product "" "(Kodak ESP C110 Series AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP C110 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_C11x_Series.ppd" + PCFileName "KESPC11x.ppd" + ModelNumber C110 + } + + // Kodak ESP C310 Series without duplex or photo tray + { + ModelName "Kodak ESP C310 Series AiO" + Attribute NickName "" "Kodak ESP C310 Series AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "Kodak ESP C310 Series AiO" + Attribute Product "" "(Kodak ESP C310 Series AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP C310 Series AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_C31x_Series.ppd" + PCFileName "KESPC31x.ppd" + ModelNumber C310 + } + + // Kodak ESP Hero Series without duplex or photo tray + { + ModelName "KODAK HERO 3.1 AiO" + Attribute NickName "" "KODAK HERO 3.1 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK HERO 3.1 AiO" + Attribute Product "" "(KODAK HERO 3.1 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 3.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_Hero_3.1.ppd" + PCFileName "KHERO31.ppd" + ModelNumber Hero3.1 + } + + // Kodak ESP Hero Series with duplex and without photo tray + { + ModelName "KODAK HERO 5.1 AiO" + Attribute NickName "" "KODAK HERO 5.1 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK HERO 5.1 AiO" + Attribute Product "" "(KODAK HERO 5.1 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 5.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_Hero_5.1.ppd" + PCFileName "KHERO51.ppd" + ModelNumber Hero5.1 + Duplex rotated + } + + // Kodak ESP Hero Series with duplex and photo tray. 6.1, 7.1, 9.1 + { + ModelName "KODAK HERO 6.1 AiO" + Attribute NickName "" "KODAK HERO 6.1 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK HERO 6.1 AiO" + Attribute Product "" "(KODAK HERO 6.1 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 6.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_Hero_6.1.ppd" + PCFileName "KHERO61.ppd" + ModelNumber Hero6.1 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + +// Kodak ESP Hero Series with duplex and photo tray. 6.1, 7.1, 9.1 + { + ModelName "KODAK HERO 7.1 AiO" + Attribute NickName "" "KODAK HERO 7.1 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK HERO 7.1 AiO" + Attribute Product "" "(KODAK HERO 7.1 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 7.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_Hero_7.1.ppd" + PCFileName "KHERO71.ppd" + ModelNumber Hero9.1 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + +// Kodak ESP Hero Series with duplex and photo tray. 6.1, 7.1, 9.1 + { + ModelName "KODAK HERO 9.1 AiO" + Attribute NickName "" "KODAK HERO 9.1 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK HERO 9.1 AiO" + Attribute Product "" "(KODAK HERO 9.1 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK HERO 9.1 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_Hero_9.1.ppd" + PCFileName "KHERO91.ppd" + ModelNumber Hero9.1 + Duplex rotated + InputSlot 0 MainTray + InputSlot 1 PhotoTray + } + + // Kodak ESP Series without duplex or photo tray + { + ModelName "KODAK ESP 1.2 AiO" + Attribute NickName "" "KODAK ESP 1.2 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK ESP 1.2 AiO" + Attribute Product "" "(KODAK ESP 1.2 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 1.2 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_1.2.ppd" + PCFileName "KESP12.ppd" + ModelNumber ESP1.2 + } + + // Kodak ESP Series without photo tray with duplex + { + ModelName "KODAK ESP 2.2 AiO" + Attribute NickName "" "KODAK ESP 2.2 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK ESP 2.2 AiO" + Attribute Product "" "(KODAK ESP 2.2 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 2.2 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_2.2.ppd" + PCFileName "KESP22.ppd" + ModelNumber ESP2.2 + } + + // Kodak ESP Series without duplex or photo tray + { + ModelName "KODAK ESP 3.2 AiO" + Attribute NickName "" "KODAK ESP 3.2 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK ESP 3.2 AiO" + Attribute Product "" "(KODAK ESP 3.2 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 3.2 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_3.2.ppd" + PCFileName "KESP32.ppd" + ModelNumber ESP3.2 + } + +// Kodak ESP Series without photo tray with duplex + { + ModelName "KODAK ESP 4.2 AiO" + Attribute NickName "" "KODAK ESP 4.2 AiO" //The NickName is used in ubuntu to make the printer database + Attribute ShortNickName "" "KODAK ESP 4.2 AiO" + Attribute Product "" "(KODAK ESP 4.2 AiO)" + Attribute 1284DeviceID "" "MFG:Eastman Kodak Company;MDL:KODAK ESP 4.2 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" + FileName "Kodak_ESP_4.2.ppd" + PCFileName "KESP42.ppd" + ModelNumber ESP4.2 + } + +} + diff -Nru c2esp-26/Makefile c2esp-27~rc1/Makefile --- c2esp-26/Makefile 2012-09-05 23:18:06.000000000 +0000 +++ c2esp-27~rc1/Makefile 2013-12-17 00:04:13.000000000 +0000 @@ -8,16 +8,13 @@ # Makefile for c2esp25 has minor changes. (*.in files are deleted from the doc directory) # Makefile for c2esp25c runs ppdc at install stage if it is installed # Makefile for c2esp26 uses cups-config to fix problems building with cups 1.6 +# Makefile for c2esp27 ppds for ESP 1.2 and 3.2 added, use new drv files instead of ppd, LANG=C UNAME := $(shell uname) -#MACH := $(shell uname -m | sed 's/i.86/x86_32/') -#CUPSAPIVER := 1 -#SYSNAME := $(shell uname -n) # Installation prefix... #PREFIX=/usr/local -#PREFIX=/usr PREFIX=$(DESTDIR)/usr PPDCFOUND=0 @@ -25,13 +22,13 @@ # Pathnames for this package... BIN=$(PREFIX)/bin -#was FILTERBIN=$(PREFIX)/lib/cups/filter #the PREFIX is supplied by cups-config --serverbin FILTERBIN := $(DESTDIR)$(shell cups-config --serverbin)/filter MANDIR=$(PREFIX)/share/man DOCDIR=$(PREFIX)/share/doc/c2esp PPDDIR=$(PREFIX)/share/ppd/c2esp +DRVDIR=$(DESTDIR)$(shell cups-config --datadir)/drv/c2esp INSTALL=install # Programs and libraries @@ -42,11 +39,16 @@ DEVPROGS= myopldecode SCRIPTS= c2esplog FILTERS= c2esp c2espC command2esp -LIBJBG = jbig.o jbig_ar.o -LIBJBG85= jbig85.o jbig_ar.o +#LIBJBIG = jbig.o jbig_ar.o +#LIBJBIG85= jbig85.o jbig_ar.o +# The jbig library. Debian and derivatives should now have the jbig library -ljbig +# -ljbig also contains jbig85 + LIBJBIG := -ljbig + LIBJBIG85 := -ljbig + BINPROGS= -ESPDRVFILE = KodakESP_15.drv -CDRVFILE = KodakESP_C_05.drv +ESPDRVFILE = KodakESP_16.drv +CDRVFILE = KodakESP_C_07.drv # User ID's LPuid=-oroot @@ -86,6 +88,7 @@ #cups version, checking that cups-config exists ifeq ($(wildcard /usr/bin/cups-config),) #cups-config not found + CUPSAPIVER := 99 LIBCUPSDRIVER := -lcups -lcupsdriver LIBCUPSIMAGE := -lcups -lcupsimage @@ -103,6 +106,7 @@ FILTERHEADERS := cups endif + # # The usual build rules # @@ -111,8 +115,24 @@ common-test: # + # cups-config... + # +ifeq ($(CUPSAPIVER),99) + @echo " ***"; \ + echo " *** Warning: /usr/bin/cups-config is not installed"; \ + echo " ***"; \ + echo " *** Try to install it in the package libcups2-dev"; \ + echo " *** for Ubuntu: sudo apt-get install libcups2-dev"; \ + echo " *** Then run make again."; \ + echo " ***"; \ + echo " *** If you cannot install cups-config, make will assume"; \ + echo " *** that your cups version is 1.5 or lower."; \ + echo " ***"; +endif + # # Compile Dependencies general... # + @if ! type $(CC) >/dev/null 2>&1; then \ echo " ***"; \ echo " *** Error: $(CC) is not installed!"; \ @@ -133,10 +153,14 @@ cups-test: # Compile Dependencies in cups... - +ifeq ($(CUPSAPIVER),99) + @echo "The cups api version is unknown, assuming <=1.5" +else @echo "cups api detected $(CUPSAPIVER)" +endif + ifeq ($(CUPSAPIVER),1.6) - @echo "The cups 1.6 tests" + @echo "The cups tests for version 1.6" @echo look in /usr/include/cupsfilters for image and driver # make config.h @@ -147,7 +171,7 @@ echo " *** Error: /usr/include/cups/raster.h is not installed!"; \ echo " ***"; \ echo " *** Install cups raster library package"; \ - echo " *** for Ubuntu: something like sudo apt-get install libcupsimage2-dev ?"; \ + echo " *** for Ubuntu: sudo apt-get install libcupsimage2-dev"; \ echo " ***"; \ exit 1; \ fi @@ -180,7 +204,7 @@ fi else - @echo "The cups version up to 1.5 tests" + @echo "The cups tests for version up to 1.5" @echo should look in /usr/include/cups/ for image and driver # make config.h @@ -233,8 +257,11 @@ @echo "Patent warning that used to be here no longer applies" @echo -c2esp: c2esp.o c2espcommon.o $(LIBJBG85) - $(CC) $(CFLAGS) -o $@ c2esp.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) $(LIBJBG85) +#c2esp: c2esp.o c2espcommon.o +# $(CC) $(CFLAGS) -o $@ c2esp.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) $(LIBJBG85) + +c2esp: c2esp.o c2espcommon.o + $(CC) $(CFLAGS) -o $@ c2esp.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) $(LIBJBIG85) c2espC: c2espC.o c2espcommon.o $(CC) $(CFLAGS) -o $@ c2espC.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) -lz @@ -242,15 +269,19 @@ command2esp: command2esp.o c2espcommon.o $(CC) $(CFLAGS) -o $@ command2esp.o c2espcommon.o $(LIBCUPSDRIVER) -myopldecode: myopldecode.o $(LIBJBG) - $(CC) $(CFLAGS) -o $@ $@.o $(LIBJBG) -lz +#myopldecode: myopldecode.o +# $(CC) $(CFLAGS) -o $@ $@.o $(LIBJBG) -lz + +myopldecode: myopldecode.o + $(CC) $(CFLAGS) -o $@ $@.o $(LIBJBIG) -lz # # Installation rules # -#install: all install-test install-prog install-ppd install-doc -install: all install-prog install-ppd install-doc - +#use next line if you need to install ppds +#install: all install-prog install-ppd install-doc +install: all install-prog install-drv install-doc + # # Now use your printer configuration GUI to create a new printer if required. # If you are upgrading, "make forceppd" may force cups to use the new ppd versions @@ -293,8 +324,8 @@ fi MODEL=$(DESTDIR)$(shell cups-config --datadir)/model -PPD=$(DESTDIR)/usr/share/ppd -VARPPD=/var/lp/ppd +#PPD=$(DESTDIR)/usr/share/ppd +#VARPPD=/var/lp/ppd install-ppd: # @@ -327,6 +358,21 @@ $(INSTALL) -c -m 644 $$ppdfile $(PPDDIR); \ done; +install-drv: + # make files with ppdc if it is present + @if test -f /usr/bin/ppdc; then \ + echo "ppdc is available so testing drv files"; \ + ppdc -t $(ESPDRVFILE); \ + ppdc -t $(CDRVFILE); \ + echo "Making ppds to keep them compatible with drv files."; \ + ppdc $(ESPDRVFILE); \ + ppdc $(CDRVFILE); \ + fi + + $(INSTALL) -d -m 755 $(DRVDIR) + $(INSTALL) -c -m 644 $(ESPDRVFILE) $(DRVDIR) + $(INSTALL) -c -m 644 $(CDRVFILE) $(DRVDIR) + forceppd: # attempt to assign new ppds to existing queues ./c2esp.postinst configure @@ -369,6 +415,7 @@ # uninstall: -rm -rf $(PPDDIR) + -rm -rf $(DRVDIR) -rm -f $(BIN)/myopldecode -rm -f $(BIN)/c2esp -rm -f $(BIN)/c2esplog @@ -395,11 +442,8 @@ # # Header dependencies # -jbig.o: jbig.h -jbig85.o: jbig85.h -c2esp.o: jbig85.h c2espcommon.h +c2esp.o: c2espcommon.h c2espC.o: c2espcommon.h -myopldecode.o: jbig.h command2esp.o: c2espcommon.h c2espcommon.o: c2espcommon.h diff -Nru c2esp-26/README c2esp-27~rc1/README --- c2esp-26/README 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/README 2013-12-17 15:56:02.000000000 +0000 @@ -5,6 +5,9 @@ VERSION NOTES +Version 2.7 + - As 2.6 but with ppd entries for ESP 1.2 and ESP 3.2. The drv files are now installed instead of the ppd files. The jbig library is no longer shipped with c2esp. ShortNickName added to the drv files to pass more ppdc tests. + Version 2.6 - As 2.5c but with a modified makefile so it will build with cups 1.5.x or 1.6.x Also a few more ppd files. diff -Nru c2esp-26/README.in c2esp-27~rc1/README.in --- c2esp-26/README.in 2012-09-07 15:45:37.000000000 +0000 +++ c2esp-27~rc1/README.in 2013-12-17 10:12:42.000000000 +0000 @@ -5,6 +5,9 @@ VERSION NOTES +Version 2.7 + - As 2.6 but with ppd entries for ESP 1.2 and ESP 3.2. The drv files are now installed instead of the ppd files. The jbig library is no longer shipped with c2esp. ShortNickName added to the drv files to pass more ppdc tests. + Version 2.6 - As 2.5c but with a modified makefile so it will build with cups 1.5.x or 1.6.x Also a few more ppd files. diff -Nru c2esp-26/c2esp.c c2esp-27~rc1/c2esp.c --- c2esp-26/c2esp.c 2012-09-05 23:19:03.000000000 +0000 +++ c2esp-27~rc1/c2esp.c 2013-12-17 16:38:39.000000000 +0000 @@ -3,10 +3,20 @@ * Kodak ESP 5xxx (OPL?) Control Language filter for the Common UNIX * Printing System (CUPS) * - * copyright Paul Newall May 2010 - Sept 2012. VERSION 2.6 (c2esp26) + * copyright Paul Newall May 2010 - Mar 2013. VERSION 2.7 (c2esp27) * patch by user awl29 applied to fix problems with non bi-directional printers, smb shared * data chunk size limit applied * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * * Params: job-id user title copies options [file] * options = "noback" disables all calls to the back channel for testing. * @@ -29,7 +39,7 @@ #include #include #include -#include "jbig85.h" //the reduced jbig library +#include //the reduced jbig library #include //time functions used for debugging #if HAVE_CUPSFILTERS == 1 @@ -43,7 +53,7 @@ /* * Constants... */ -char *Version = "c2esp26"; +char *Version = "c2esp27"; int StripeHeightMax = 1280; //the max height of a stripe. (Windows 300x1200 files have 1920) const float default_lut2[2] = {0.0, 1.0}; // for colour 1 bit const float default_lut3[3] = {0.0, 0.5, 1.0}; // for colour 2 bit or for black and grey will be separated to 2 x 1 bit @@ -754,7 +764,10 @@ { //convert the bits in CupsLineBuffer to short ints in DitherInputBuffer for the current colour //checking if it's blank as we go - int output, x; +#if DEBUGFILES==1 + int output; +#endif + int x; *BlankColour=1; //if it remains 1 the line is blank and we don't need to dither. if(header->cupsColorSpace == CUPS_CSPACE_RGB) { @@ -803,8 +816,11 @@ } if(Col == MonitorColour) //0=cyan 1=mag 2=yellow 3=black { - if (DitherOutputBuffer[x]>MaxOut) MaxOut=DitherOutputBuffer[x]; - if (DitherOutputBuffer[x]cupsWidth;++x) //added loop structure 17/12/13 + { + if (DitherOutputBuffer[x]>MaxOut) MaxOut=DitherOutputBuffer[x]; + if (DitherOutputBuffer[x] @@ -46,7 +56,7 @@ /* * Constants... */ -char *Version = "c2espC26"; +char *Version = "c2espC27"; /* * Globals... diff -Nru c2esp-26/c2espcommon.c c2esp-27~rc1/c2espcommon.c --- c2esp-26/c2espcommon.c 2012-09-05 23:20:22.000000000 +0000 +++ c2esp-27~rc1/c2espcommon.c 2013-12-01 17:58:43.000000000 +0000 @@ -5,6 +5,16 @@ * * copyright Paul Newall May 2010 - Sept 2012. VERSION 4 (first used in c2esp26) * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * */ #include "config.h" diff -Nru c2esp-26/c2espcommon.h c2esp-27~rc1/c2espcommon.h --- c2esp-26/c2espcommon.h 2012-09-05 23:21:06.000000000 +0000 +++ c2esp-27~rc1/c2espcommon.h 2013-12-01 17:58:59.000000000 +0000 @@ -6,6 +6,16 @@ * * copyright Paul Newall May 2010 - Sept 2012. VERSION 3 (first used in c2esp26) * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * */ #include //FlushBackChannel, and the side channel functions and constants diff -Nru c2esp-26/command2esp.c c2esp-27~rc1/command2esp.c --- c2esp-26/command2esp.c 2012-09-05 23:22:00.000000000 +0000 +++ c2esp-27~rc1/command2esp.c 2013-12-01 17:59:15.000000000 +0000 @@ -4,6 +4,16 @@ * * Copyright 2011 - Sept 2012 by P.Newall. * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * * Contents: * * main() - Main entry and command processing. diff -Nru c2esp-26/debian/changelog c2esp-27~rc1/debian/changelog --- c2esp-26/debian/changelog 2013-11-29 10:47:06.000000000 +0000 +++ c2esp-27~rc1/debian/changelog 2014-01-02 13:50:33.000000000 +0000 @@ -1,3 +1,16 @@ +c2esp (27~rc1-1) experimental; urgency=low + + * New 27~rc1 upstream release + - "The jbig library is no longer shipped with c2esp", therefore + update debian/copyright and drop the patch to use the + Debian-provided libjbig + - Update the .drv files installation + - Update the models list in the package description + * Add patch to enforce LDFLAGS usage + * Add --as-needed to LDFLAGS + + -- Didier Raboud Thu, 02 Jan 2014 14:39:42 +0100 + c2esp (26-5) unstable; urgency=low * Drop c2esp transitional package which reached stable diff -Nru c2esp-26/debian/control c2esp-27~rc1/debian/control --- c2esp-26/debian/control 2013-11-29 10:47:06.000000000 +0000 +++ c2esp-27~rc1/debian/control 2014-01-02 13:50:33.000000000 +0000 @@ -19,15 +19,26 @@ Description: printer driver for Kodak ESP AiO color inkjet Series The c2esp driver is an open source driver for the Kodak ESP AiO and HERO AiO color inkjet printers series. It is likely to work on the - ESP 2100 Series AiO, + 5100 AiO, + 5300 AiO, + 5500 AiO, + ESP 1.2 AiO, + ESP 2.2 AiO, ESP 3200 Series AiO, + ESP 3.2 AiO, + ESP 3 AiO, + ESP 4.2 AiO, ESP 5200 Series AiO, - ESP 5500 Series AiO, - ESP 6100 Series AiO, + ESP 5 AiO, ESP 7200 Series AiO, + ESP 7 AiO, ESP 9200 Series AiO, - ESP C100 Series AiO. + ESP 9 AiO, + ESP C100 Series AiO, + ESP C110 Series AiO, ESP C310 Series AiO, + ESP Office 4100 Series AiO, + ESP Office 6100 Series AiO, HERO 3.1 AiO, HERO 5.1 AiO, HERO 6.1 AiO, diff -Nru c2esp-26/debian/copyright c2esp-27~rc1/debian/copyright --- c2esp-26/debian/copyright 2013-05-16 12:40:46.000000000 +0000 +++ c2esp-27~rc1/debian/copyright 2014-01-02 13:50:33.000000000 +0000 @@ -4,22 +4,9 @@ Source: http://sourceforge.net/projects/cupsdriverkodak/files/ Files: c2esp.c c2espC.c c2espcommon.* command2esp.c ppd/* -Copyright: 2010-2012 Paul Newall +Copyright: 2010-2013 Paul Newall License: GPL-2+ -Files: jbig* -Copyright: 1995-2008 Markus Kuhn -License: GPL-2+ -Comment: - It is possible that certain products which can be built using this - software module might form inventions protected by patent rights in - some countries (e.g., by patents about arithmetic coding algorithms - owned by IBM and AT&T in the USA). Provision of this software by the - author does NOT include any licences for any patents. In those - countries where a patent licence is required for certain applications - of this software module, you will have to obtain such a licence - yourself. - Files: myopldecode.c Copyright: 2003-2006 Rick Richardson @@ -27,7 +14,7 @@ License: GPL-2+ Files: debian/* -Copyright: 2011-2012 Didier Raboud +Copyright: 2011-2013 Didier Raboud License: GPL-2+ License: GPL-2+ diff -Nru c2esp-26/debian/patches/00-system-libjbig.patch c2esp-27~rc1/debian/patches/00-system-libjbig.patch --- c2esp-26/debian/patches/00-system-libjbig.patch 2013-05-16 12:40:46.000000000 +0000 +++ c2esp-27~rc1/debian/patches/00-system-libjbig.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -Description: Use the Debian-provided libjbig. -Author: Didier Raboud -Last-Update: 2012-04-26 - ---- a/Makefile -+++ b/Makefile -@@ -42,8 +42,8 @@ - DEVPROGS= myopldecode - SCRIPTS= c2esplog - FILTERS= c2esp c2espC command2esp --LIBJBG = jbig.o jbig_ar.o --LIBJBG85= jbig85.o jbig_ar.o -+LIBJBG = -ljbig -+LIBJBG85= -ljbig - BINPROGS= - ESPDRVFILE = KodakESP_15.drv - CDRVFILE = KodakESP_C_05.drv diff -Nru c2esp-26/debian/patches/enforce_ldflags_usage.patch c2esp-27~rc1/debian/patches/enforce_ldflags_usage.patch --- c2esp-26/debian/patches/enforce_ldflags_usage.patch 1970-01-01 00:00:00.000000000 +0000 +++ c2esp-27~rc1/debian/patches/enforce_ldflags_usage.patch 2014-01-02 13:50:33.000000000 +0000 @@ -0,0 +1,29 @@ +Description: Enforce LDFLAGS usage when compiling the filters +Author: Didier Raboud +Last-Update: 2014-01-02 +--- a/Makefile ++++ b/Makefile +@@ -261,19 +261,19 @@ + # $(CC) $(CFLAGS) -o $@ c2esp.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) $(LIBJBG85) + + c2esp: c2esp.o c2espcommon.o +- $(CC) $(CFLAGS) -o $@ c2esp.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) $(LIBJBIG85) ++ $(CC) $(LDFLAGS) $(CFLAGS) -o $@ c2esp.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) $(LIBJBIG85) + + c2espC: c2espC.o c2espcommon.o +- $(CC) $(CFLAGS) -o $@ c2espC.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) -lz ++ $(CC) $(LDFLAGS) $(CFLAGS) -o $@ c2espC.o c2espcommon.o $(LIBCUPSDRIVER) $(LIBCUPSIMAGE) -lz + + command2esp: command2esp.o c2espcommon.o +- $(CC) $(CFLAGS) -o $@ command2esp.o c2espcommon.o $(LIBCUPSDRIVER) ++ $(CC) $(LDFLAGS) $(CFLAGS) -o $@ command2esp.o c2espcommon.o $(LIBCUPSDRIVER) + + #myopldecode: myopldecode.o + # $(CC) $(CFLAGS) -o $@ $@.o $(LIBJBG) -lz + + myopldecode: myopldecode.o +- $(CC) $(CFLAGS) -o $@ $@.o $(LIBJBIG) -lz ++ $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $@.o $(LIBJBIG) -lz + + # + # Installation rules diff -Nru c2esp-26/debian/patches/series c2esp-27~rc1/debian/patches/series --- c2esp-26/debian/patches/series 2013-05-16 12:40:46.000000000 +0000 +++ c2esp-27~rc1/debian/patches/series 2014-01-02 13:50:33.000000000 +0000 @@ -1 +1 @@ -00-system-libjbig.patch +enforce_ldflags_usage.patch diff -Nru c2esp-26/debian/rules c2esp-27~rc1/debian/rules --- c2esp-26/debian/rules 2013-05-16 12:40:46.000000000 +0000 +++ c2esp-27~rc1/debian/rules 2014-01-02 13:50:33.000000000 +0000 @@ -2,6 +2,8 @@ derives_from_ubuntu := $(shell (dpkg-vendor --derives-from Ubuntu && echo "yes") || echo "no") +export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + %: dh $@ @@ -10,8 +12,8 @@ override_dh_install: dh_install - install -D -m 644 KodakESP_15.drv $(CURDIR)/debian/printer-driver-c2esp/usr/share/cups/drv/c2esp.drv - install -D -m 644 KodakESP_C_05.drv $(CURDIR)/debian/printer-driver-c2esp/usr/share/cups/drv/c2espC.drv + install -D -m 644 KodakESP_16.drv $(CURDIR)/debian/printer-driver-c2esp/usr/share/cups/drv/c2esp.drv + install -D -m 644 KodakESP_C_07.drv $(CURDIR)/debian/printer-driver-c2esp/usr/share/cups/drv/c2espC.drv ifeq ($(derives_from_ubuntu),yes) # Install the apport hook on Ubuntu and derivatives install -D -m 644 debian/ubuntu/apport-hook.py $(CURDIR)/debian/printer-driver-c2esp/usr/share/apport/package-hooks/source_c2esp.py diff -Nru c2esp-26/jbig.c c2esp-27~rc1/jbig.c --- c2esp-26/jbig.c 2010-02-15 20:47:36.000000000 +0000 +++ c2esp-27~rc1/jbig.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,3290 +0,0 @@ -/* - * Portable JBIG image compression library - * - * Copyright 1995-2007 -- Markus Kuhn -- http://www.cl.cam.ac.uk/~mgk25/ - * - * $Id: jbig.c,v 1.5 2008/09/05 15:05:54 rick Exp $ - - * - * This module implements a portable standard C encoder and decoder - * using the JBIG1 lossless bi-level image compression algorithm - * specified in International Standard ISO 11544:1993 and - * ITU-T Recommendation T.82. See the file jbig.txt for usage - * instructions and application examples. - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * If you want to use this program under different license conditions, - * then contact the author for an arrangement. - * - * It is possible that certain products which can be built using this - * software module might form inventions protected by patent rights in - * some countries (e.g., by patents about arithmetic coding algorithms - * owned by IBM and AT&T in the USA). Provision of this software by the - * author does NOT include any licences for any patents. In those - * countries where a patent licence is required for certain applications - * of this software module, you will have to obtain such a licence - * yourself. - */ - -#ifdef DEBUG -#include -#else -#define NDEBUG -#endif - -#include -#include -#include - -#include "jbig.h" - -#define MX_MAX 127 /* maximal supported mx offset for - * adaptive template in the encoder */ - -#define TPB2CX 0x195 /* contexts for TP special pixels */ -#define TPB3CX 0x0e5 -#define TPDCX 0xc3f - -/* marker codes */ -#define MARKER_STUFF 0x00 -#define MARKER_RESERVE 0x01 -#define MARKER_SDNORM 0x02 -#define MARKER_SDRST 0x03 -#define MARKER_ABORT 0x04 -#define MARKER_NEWLEN 0x05 -#define MARKER_ATMOVE 0x06 -#define MARKER_COMMENT 0x07 -#define MARKER_ESC 0xff - -/* loop array indices */ -#define STRIPE 0 -#define LAYER 1 -#define PLANE 2 - -/* special jbg_buf pointers (instead of NULL) */ -#define SDE_DONE ((struct jbg_buf *) -1) -#define SDE_TODO ((struct jbg_buf *) 0) - -/* object code version id */ - -const char jbg_version[] = - "JBIG-KIT " JBG_VERSION " -- (c) 1995-2008 Markus Kuhn -- " - "Licence: " JBG_LICENCE "\n" - "$Id: jbig.c,v 1.5 2008/09/05 15:05:54 rick Exp $ "; - -/* - * the following array specifies for each combination of the 3 - * ordering bits, which ii[] variable represents which dimension - * of s->sde. - */ -static const int iindex[8][3] = { - { 2, 1, 0 }, /* no ordering bit set */ - { -1, -1, -1}, /* SMID -> illegal combination */ - { 2, 0, 1 }, /* ILEAVE */ - { 1, 0, 2 }, /* SMID + ILEAVE */ - { 0, 2, 1 }, /* SEQ */ - { 1, 2, 0 }, /* SEQ + SMID */ - { 0, 1, 2 }, /* SEQ + ILEAVE */ - { -1, -1, -1 } /* SEQ + SMID + ILEAVE -> illegal combination */ -}; - -#define _(String) String /* to mark translatable string for GNU gettext */ - -/* - * Array with English ASCII error messages that correspond - * to return values from public functions in this library. - */ -static const char *errmsg[] = { - _("All OK"), /* JBG_EOK */ - _("Reached specified image size"), /* JBG_EOK_INTR */ - _("Unexpected end of input data stream"), /* JBG_EAGAIN */ - _("Not enough memory available"), /* JBG_ENOMEM */ - _("ABORT marker segment encountered"), /* JBG_EABORT */ - _("Unknown marker segment encountered"), /* JBG_EMARKER */ - _("Input data stream contains invalid data"), /* JBG_EINVAL */ - _("Input data stream uses unimplemented JBIG features"), /* JBG_EIMPL */ - _("Incremental BIE does not continue previous one") /* JBG_ENOCONT */ -}; - - -/* - * The following three functions are the only places in this code, were - * C library memory management functions are called. The whole JBIG - * library has been designed in order to allow multi-threaded - * execution. No static or global variables are used, so all fuctions - * are fully reentrant. However if you want to use this multi-thread - * capability and your malloc, realloc and free are not reentrant, - * then simply add the necessary semaphores or mutex primitives below. - * In contrast to C's malloc() and realloc(), but like C's calloc(), - * these functions take two parameters nmemb and size that are multiplied - * before being passed on to the corresponding C function. - * This we can catch all overflows during a size_t multiplication a - * a single place. - */ - -#ifndef SIZE_MAX -#define SIZE_MAX ((size_t) -1) /* largest value of size_t */ -#endif - -static void *checked_malloc(size_t nmemb, size_t size) -{ - void *p; - - /* Full manual exception handling is ugly here for performance - * reasons. If an adequate handling of lack of memory is required, - * then use C++ and throw a C++ exception instead of abort(). */ - - /* assert that nmemb * size <= SIZE_MAX */ - if (size > SIZE_MAX / nmemb) - abort(); - - p = malloc(nmemb * size); - - if (!p) - abort(); - -#if 0 - fprintf(stderr, "%p = malloc(%lu * %lu)\n", p, - (unsigned long) nmemb, (unsigned long) size); -#endif - - return p; -} - - -static void *checked_realloc(void *ptr, size_t nmemb, size_t size) -{ - void *p; - - /* Full manual exception handling is ugly here for performance - * reasons. If an adequate handling of lack of memory is required, - * then use C++ and throw a C++ exception here instead of abort(). */ - - /* assert that nmemb * size <= SIZE_MAX */ - if (size > SIZE_MAX / nmemb) - abort(); - - p = realloc(ptr, nmemb * size); - - if (!p) - abort(); - -#if 0 - fprintf(stderr, "%p = realloc(%p, %lu * %lu)\n", p, ptr, - (unsigned long) nmemb, (unsigned long) size); -#endif - - return p; -} - - -static void checked_free(void *ptr) -{ - free(ptr); - -#if 0 - fprintf(stderr, "free(%p)\n", ptr); -#endif - -} - - - - -/* - * Memory management for buffers which are used for temporarily - * storing SDEs by the encoder. - * - * The following functions manage a set of struct jbg_buf storage - * containers were each can keep JBG_BUFSIZE bytes. The jbg_buf - * containers can be linked to form linear double-chained lists for - * which a number of operations are provided. Blocks which are - * tempoarily not used any more are returned to a freelist which each - * encoder keeps. Only the destructor of the encoder actually returns - * the block via checked_free() to the stdlib memory management. - */ - - -/* - * Allocate a new buffer block and initialize it. Try to get it from - * the free_list, and if it is empty, call checked_malloc(). - */ -static struct jbg_buf *jbg_buf_init(struct jbg_buf **free_list) -{ - struct jbg_buf *new_block; - - /* Test whether a block from the free list is available */ - if (*free_list) { - new_block = *free_list; - *free_list = new_block->next; - } else { - /* request a new memory block */ - new_block = (struct jbg_buf *) checked_malloc(1, sizeof(struct jbg_buf)); - } - new_block->len = 0; - new_block->next = NULL; - new_block->previous = NULL; - new_block->last = new_block; - new_block->free_list = free_list; - - return new_block; -} - - -/* - * Return an entire free_list to the memory management of stdlib. - * This is only done by jbg_enc_free(). - */ -static void jbg_buf_free(struct jbg_buf **free_list) -{ - struct jbg_buf *tmp; - - while (*free_list) { - tmp = (*free_list)->next; - checked_free(*free_list); - *free_list = tmp; - } - - return; -} - - -/* - * Append a single byte to a single list that starts with the block - * *(struct jbg_buf *) head. The type of *head is void here in order to - * keep the interface of the arithmetic encoder gereric, which uses this - * function as a call-back function in order to deliver single bytes - * for a PSCD. - */ -static void jbg_buf_write(int b, void *head) -{ - struct jbg_buf *now; - - now = ((struct jbg_buf *) head)->last; - if (now->len < JBG_BUFSIZE - 1) { - now->d[now->len++] = b; - return; - } - now->next = jbg_buf_init(((struct jbg_buf *) head)->free_list); - now->next->previous = now; - now->next->d[now->next->len++] = b; - ((struct jbg_buf *) head)->last = now->next; - - return; -} - - -/* - * Remove any trailing zero bytes from the end of a linked jbg_buf list, - * however make sure that no zero byte is removed which directly - * follows a 0xff byte (i.e., keep MARKER_ESC MARKER_STUFF sequences - * intact). This function is used to remove any redundant final zero - * bytes from a PSCD. - */ -static void jbg_buf_remove_zeros(struct jbg_buf *head) -{ - struct jbg_buf *last; - - while (1) { - /* remove trailing 0x00 in last block of list until this block is empty */ - last = head->last; - while (last->len && last->d[last->len - 1] == 0) - last->len--; - /* if block became really empty, remove it in case it is not the - * only remaining block and then loop to next block */ - if (last->previous && !last->len) { - head->last->next = *head->free_list; - *head->free_list = head->last; - head->last = last->previous; - head->last->next = NULL; - } else - break; - } - - /* - * If the final non-zero byte is 0xff (MARKER_ESC), then we just have - * removed a MARKER_STUFF and we will append it again now in order - * to preserve PSCD status of byte stream. - */ - if (head->last->len && head->last->d[head->last->len - 1] == MARKER_ESC) - jbg_buf_write(MARKER_STUFF, head); - - return; -} - - -/* - * The jbg_buf list which starts with block *new_prefix is concatenated - * with the list which starts with block **start and *start will then point - * to the first block of the new list. - */ -static void jbg_buf_prefix(struct jbg_buf *new_prefix, struct jbg_buf **start) -{ - new_prefix->last->next = *start; - new_prefix->last->next->previous = new_prefix->last; - new_prefix->last = new_prefix->last->next->last; - *start = new_prefix; - - return; -} - - -/* - * Send the contents of a jbg_buf list that starts with block **head to - * the call back function data_out and return the blocks of the jbg_buf - * list to the freelist from which these jbg_buf blocks have been taken. - * After the call, *head == NULL. - */ -static void jbg_buf_output(struct jbg_buf **head, - void (*data_out)(unsigned char *start, - size_t len, void *file), - void *file) -{ - struct jbg_buf *tmp; - - while (*head) { - data_out((*head)->d, (*head)->len, file); - tmp = (*head)->next; - (*head)->next = *(*head)->free_list; - *(*head)->free_list = *head; - *head = tmp; - } - - return; -} - - -/* - * Calculate y = ceil(x/2) applied n times, which is equivalent to - * y = ceil(x/(2^n)). This function is used to - * determine the number of pixels per row or column after n resolution - * reductions. E.g. X[d-1] = jbg_ceil_half(X[d], 1) and X[0] = - * jbg_ceil_half(X[d], d) as defined in clause 6.2.3 of T.82. - */ -unsigned long jbg_ceil_half(unsigned long x, int n) -{ - unsigned long mask; - - assert(n >= 0 && n < 32); - mask = (1UL << n) - 1; /* the lowest n bits are 1 here */ - return (x >> n) + ((mask & x) != 0); -} - - -/* - * Set L0 (the number of lines in a stripe at lowest resolution) - * to a default value, such that there are about 35 stripes, as - * suggested in Annex C of ITU-T T.82, without exceeding the - * limit 128/2^D suggested in Annex A. - */ -static void jbg_set_default_l0(struct jbg_enc_state *s) -{ - s->l0 = jbg_ceil_half(s->yd, s->d) / 35; /* 35 stripes/image */ - while ((s->l0 << s->d) > 128) /* but <= 128 lines/stripe */ - --s->l0; - if (s->l0 < 2) s->l0 = 2; -} - - -/* - * Calculate the number of stripes, as defined in clause 6.2.3 of T.82. - */ -unsigned long jbg_stripes(unsigned long l0, unsigned long yd, - unsigned long d) -{ - unsigned long y0 = jbg_ceil_half(yd, d); - - return y0 / l0 + (y0 % l0 != 0); -} - - -/* - * Resolution reduction table given by ITU-T T.82 Table 17 - */ - -static char jbg_resred[4096] = { - 0,0,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, - 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1, - 0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1, - 1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1, - 0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1, - 1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,0, - 0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1, - 0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1, - 1,1,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1, - 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1, - 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1, - 1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0, - 0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0, - 0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1, - 0,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1, - 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1, - 0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1, - 0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1, - 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1, - 0,0,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0, - 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,1,1, - 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1, - 0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, - 0,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, - 0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1, - 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1, - 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1, - 0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1, - 1,0,1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1, - 0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1, - 1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1, - 1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1, - 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1, - 1,0,0,0,1,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0, - 0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1, - 0,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1, - 0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1, - 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1, - 0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1, - 0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1, - 0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1, - 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0, - 0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, - 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, - 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, - 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1, - 0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1 -}; - -/* - * Deterministic prediction tables given by ITU-T T.82 tables - * 19 to 22. The table below is organized differently, the - * index bits are permutated for higher efficiency. - */ - -static char jbg_dptable[256 + 512 + 2048 + 4096] = { - /* phase 0: offset=0 */ - 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,0,2,2,2,2,2,2,2, - 0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,0,2,0,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - /* phase 1: offset=256 */ - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,0,2,0,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,2,2,2,2,1,2,1,2,2,2,2,1,1,1,1,2,0,2,0,2,2,2,2,0,2,0,2,2,2,2,2, - 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,0,2,2,2,2,2,2,2, - 0,2,0,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,0,0,2,2,2,2,2,0,0,2,2,2,2,2, - 0,2,2,2,2,1,2,1,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, - 1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,2,2,2,2,2,0,2,2,2,2,2,2, - 2,2,2,2,2,0,2,0,2,2,2,2,0,0,0,0,0,2,0,2,2,2,2,2,0,2,2,2,2,2,2,2, - 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,0,2,0,2,2,2,2,2, - 2,2,2,2,2,1,1,1,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,2,0,2,0,2,2,2,2,2,0,2,0,2,2,2,2,1, - 0,2,0,2,2,1,2,1,2,2,2,2,1,1,1,1,0,0,0,0,2,2,2,2,0,2,0,2,2,2,2,1, - 2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,0,2,2,2,2,2, - 2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,1, - 2,2,2,2,2,2,2,2,0,2,0,2,2,1,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2, - /* phase 2: offset=768 */ - 2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1, - 0,2,2,2,2,1,2,1,2,2,2,2,1,2,1,2,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, - 2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,1,2,1,2,2,2,2,2,1,1,1, - 2,0,2,2,2,1,2,1,0,2,2,2,1,2,1,2,2,2,2,0,2,2,2,2,0,2,0,2,2,2,2,2, - 0,2,0,0,1,1,1,1,2,2,2,2,1,1,1,1,0,2,0,2,1,1,1,1,2,2,2,2,1,1,1,1, - 2,2,0,2,2,2,1,2,2,2,2,2,1,2,1,2,2,2,0,2,2,1,2,1,0,2,0,2,1,1,1,1, - 2,0,0,2,2,2,2,2,0,2,0,2,2,0,2,0,2,0,2,0,2,2,2,1,2,2,0,2,1,1,2,1, - 2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1, - 0,0,0,0,2,2,2,2,0,0,0,0,2,2,2,2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,0,2,2,2,2,1,0,2,2,2,1,1,1,1,2,0,2,2,2,2,2,2,0,2,0,2,2,1,2,1, - 2,0,2,0,2,2,2,2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2, - 0,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2, - 2,2,0,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,2,2,1,2,1,0,2,2,2,1,1,1,1, - 2,2,2,0,2,2,2,2,2,2,0,2,2,0,2,0,2,1,2,2,2,2,2,2,1,2,1,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,1, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,1,1,1,2,2,2,2,1,1,1,1, - 2,2,2,1,2,2,2,2,2,2,1,2,0,0,0,0,2,2,0,2,2,1,2,2,2,2,2,2,1,1,1,1, - 2,0,0,0,2,2,2,2,0,2,2,2,2,2,2,0,2,2,2,0,2,2,2,2,2,0,0,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,0,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,1, - 0,2,0,2,2,1,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2, - 2,0,2,0,2,1,2,1,0,2,0,2,2,2,1,2,2,0,2,0,2,2,2,2,0,2,0,2,2,2,1,2, - 2,2,2,0,2,2,2,2,2,2,0,2,2,2,2,2,2,2,1,2,2,2,2,2,2,0,1,2,2,2,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 0,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2, - 2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,1,2,1,0,2,2,2,1,1,1,1, - 2,0,2,0,2,1,2,2,0,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,1,2,2, - 2,0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,0,2,0,2,2,2,2,0,0,0,0,2,1,2,1, - 2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,0,2,2,2,2,2,1,2,0,0,2,2,2,1,2,2,2, - 0,0,2,0,2,2,2,2,0,2,0,2,2,0,2,0,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1, - 2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,1, - 2,2,0,0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1, - 0,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2, - 2,0,0,2,2,2,2,2,0,2,0,2,2,2,2,2,1,0,1,2,2,2,2,1,0,2,2,2,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,2,1,2,2,2,2,2,2,2,2,0,2,2,1,2,2, - 0,2,0,0,1,1,1,1,0,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,0,2,2,1,2,1,1, - 2,2,0,2,2,1,2,2,2,2,2,2,1,2,2,2,2,0,2,2,2,2,2,2,0,2,0,2,1,2,1,1, - 2,0,2,0,2,2,2,2,0,2,0,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1, - 2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,2,2,2,2,0,2,0,2,2,2,2,0,0,0,0,2,2,2,2,2,1,1,2,2,2,2,2,1,2,2,2, - 2,0,2,2,2,1,2,1,0,2,2,2,2,2,1,2,2,0,2,0,2,2,2,2,0,2,0,2,2,1,2,2, - 0,2,0,0,2,2,2,2,1,2,2,2,2,2,2,0,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2, - 0,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,1,0,2,2, - 0,0,0,2,2,1,1,1,2,2,2,2,1,2,2,2,2,0,2,0,2,2,2,1,2,2,2,2,1,2,1,2, - 0,0,0,0,2,2,2,2,2,2,0,2,2,1,2,2,2,1,2,1,2,2,2,2,1,2,1,2,0,2,2,2, - 2,0,2,0,2,2,2,2,2,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 0,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,1,2,2,2,2,2,0,2,2,1,2,2,0,0,0,2,2,2,2,2,1,2,2,0,2,2,2,1,2,1,2, - 2,0,2,0,2,2,2,2,0,2,0,2,2,1,2,2,0,2,0,0,2,2,2,2,2,2,2,2,2,1,2,2, - 2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,1, - 1,2,0,2,2,1,2,1,2,2,2,2,1,2,2,2,2,0,2,0,2,2,2,2,2,0,2,2,1,1,1,1, - 0,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,1,2,1, - 2,2,0,0,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1, - 2,2,2,0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2, - 2,0,2,0,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,0,2,0,2,2,2,1,2, - 2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2, - 2,0,2,0,2,2,2,2,2,0,2,0,2,2,2,2,2,0,2,0,2,2,2,2,0,0,0,0,2,1,2,1, - 2,2,2,2,2,1,2,1,0,2,0,2,2,2,2,2,2,0,2,0,2,2,2,2,0,2,0,2,2,2,2,1, - 2,0,2,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,0, - 2,0,2,0,2,2,2,1,2,2,2,0,2,2,2,1,2,0,2,0,2,2,2,2,0,0,0,2,2,2,2,1, - 2,0,2,0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2, - /* phase 3: offset=2816 */ - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,0,2,0,1,2,1,2,0,2,0,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,0,2,2,2,1,2,0,2,2,2,1,2,2,2,2,0,2,0,2,1,2,1,0,0,0,0,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,0,2,2,2,1,2, - 2,2,2,1,2,2,2,0,1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,2,2,0,2,0,2,1,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,0,0,0,0,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,1,2,1,0,0,0,0,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,0,2,0,2, - 2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,0,2,0,2,1,2,1,2,0,2,0,2,1,2,1, - 2,0,0,0,2,1,1,1,0,0,0,0,1,1,1,1,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2, - 2,0,2,2,2,1,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,0,0,2,0,1,1,2,1, - 2,2,2,0,2,2,2,1,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, - 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,2,0,2,0,2,1,2,1,0,0,0,0,1,1,1,1, - 2,0,0,2,2,1,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,0,2,0,2,1,1,1,2,0,0,0, - 2,1,2,1,2,0,2,0,1,2,1,2,0,2,0,2,2,2,2,0,2,2,2,1,2,0,2,0,2,1,2,1, - 2,0,2,0,2,1,2,1,0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,2,0,2,0,2,1,2,1, - 2,2,2,2,2,2,2,2,2,0,0,0,2,1,1,1,2,2,2,2,2,2,2,2,2,0,2,0,2,1,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2, - 2,0,0,0,2,1,1,1,0,0,0,0,1,1,1,1,2,0,2,0,2,1,2,1,0,0,2,0,1,1,2,1, - 2,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,0,0,0,2,1,1,1, - 2,2,2,1,2,2,2,0,2,1,1,1,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,1,2,0,2,0,1,2,1,2,0,2,0,2, - 2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,1,1,1,0,0,0,0,1,1,1,1, - 2,0,2,2,2,1,2,2,0,0,2,0,1,1,2,1,2,1,2,1,2,0,2,0,2,2,2,2,2,2,2,2, - 2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,0,0,0,0,1,1,1,1, - 2,0,0,0,2,1,1,1,0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,2,1,0,2,2,0,1,2, - 2,2,2,1,2,2,2,0,2,1,1,1,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2,2, - 2,1,2,1,2,0,2,0,1,2,1,1,0,2,0,0,0,0,2,1,1,1,2,0,0,0,0,0,1,1,1,1, - 2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,0,2,1,2,1,2,0,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,0,2,2,2,1,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,0,2,2,2,1,2,2,2,0,0,2,2,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2, - 2,0,2,0,2,1,2,1,0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,0,0,0,0,1,1,1,1, - 2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,0,0,0,2,1,1,1, - 2,2,2,0,2,2,2,1,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2, - 2,0,2,2,2,1,2,2,2,0,2,0,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,1,2,1,2,0,2,0,1,2,1,2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,1,2,1,2,0,2,0,1,2,1,1,0,2,0,0,2,0,2,2,2,1,2,2,0,2,1,2,1,2,0,2, - 2,2,2,1,2,2,2,0,2,2,1,2,2,2,0,2,2,1,2,2,2,0,2,2,2,2,0,2,2,2,1,2, - 0,0,2,0,1,1,2,1,0,0,1,0,1,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,0,2,2,2,1,1,2,2,2,0,2,2,2,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, - 2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,0,0,2,2,1,1,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2, - 2,0,0,0,2,1,1,1,0,0,0,0,1,1,1,1,2,2,2,1,2,2,2,0,2,1,2,1,2,0,2,0, - 2,1,2,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,0,0,1,2,1,1,2,0,0,0,2,1,1,1, - 2,2,2,2,2,2,2,2,2,1,1,1,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,0,2,2,2,1,2,2,0,2,2,2,1,2,2,1,2,1,2,0,2,0,2,0,2,2,2,1,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,1,1,1,2,0,0,0, - 2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,0,2,0,0,1,2,1,1, - 2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,0,2,2,2,1,2,2,2, - 2,1,2,1,2,0,2,0,2,1,2,2,2,0,2,2,2,2,2,0,2,2,2,1,2,0,2,0,2,1,2,1, - 2,0,2,0,2,1,2,1,0,2,0,2,1,2,1,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2, - 2,2,2,2,2,2,2,2,0,2,0,2,1,2,1,2,2,2,2,2,2,2,2,2,0,1,0,0,1,0,1,1, - 2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,2,2,1,2,2,2,0,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,2,2,1,0,2,0,2,2,2,1,2,2,2, - 2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,2,2,0,2,2,2,1,2,2,0,2,2,2,1,2, - 2,0,2,0,2,1,2,1,0,2,0,2,1,2,1,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2, - 0,2,0,0,1,2,1,1,2,0,0,0,2,1,1,1,2,2,2,2,2,2,2,2,1,0,1,2,0,1,0,2, - 2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,1,2,2,2,0,2,2,1,1,2,2,0,0,2,2, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,1,2,1,2,0,2,0,2,1,2,2,2,0,2,2,2,0,2,2,2,1,2,2,0,2,2,2,1,2,2,2, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,1,2,2,2,0,2,2,2, - 2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,1,2,1,2, - 0,0,0,0,1,1,1,1,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,0,2,0,2,2,0,2,2,2,1,2, - 2,0,2,0,2,1,2,1,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2, - 0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,1,2,2,2,0,1,1,2,1,0,0,2,0,2,0,2,2,2,1,2,2,0,2,2,2,1,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2,2,2,0,2,2,2,1,2, - 2,0,2,0,2,1,2,1,0,2,0,2,1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,0,2,2, - 0,2,0,0,1,2,1,1,0,2,0,2,1,2,1,2,2,2,2,2,2,2,2,2,0,0,0,2,1,1,1,2, - 2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,0,0,2,1,1,1,2,0,0,2,2,2,1,2,2,2, - 2,1,2,1,2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,0,1,2,1,1, - 0,0,2,2,1,1,2,2,0,2,1,2,1,2,0,2,2,1,2,1,2,0,2,0,1,2,1,2,0,2,0,2, - 2,2,2,2,2,2,2,2,1,2,1,2,0,2,0,2,2,2,2,2,2,2,2,2,2,0,2,0,2,1,2,1, - 2,2,0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2,2,2,2,2,2,2,2,2,0,0,2,2,1,1, - 2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,0,0,1,2,1,1, - 2,2,2,0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,1,1,2,0,0,0,2, - 2,2,2,2,2,2,2,2,1,1,1,2,0,0,0,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2, - 2,0,2,0,2,1,2,1,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,0,0,0,2,1,1,1, - 2,0,2,2,2,1,2,2,0,2,2,2,1,2,2,2,2,0,2,0,2,1,2,1,2,2,2,2,2,2,2,2, - 2,0,2,0,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,0,2,0,2,1,2,1,2,1,2,0,2,0,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,0,2,0,2,1,2,1,1,2,1,2,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,1,2,1,2,0,2,0,2,2,1,2,1,2,0,2,0,2,2,2,2,2,2,2,2, - 2,0,2,1,2,1,2,0,0,2,1,2,1,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,0,2,0,2,1,2,1,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,0,2,0,2,1,2,1, - 2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,1,2,1,2,0,2,0,1,1,1,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1, - 2,0,2,0,2,1,2,1,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -}; - - -/* - * Initialize the status struct for the encoder. - */ -void jbg_enc_init(struct jbg_enc_state *s, unsigned long x, unsigned long y, - int planes, unsigned char **p, - void (*data_out)(unsigned char *start, size_t len, - void *file), - void *file) -{ - unsigned long l, lx; - int i; - - assert(x > 0 && y > 0 && planes > 0 && planes < 256); - s->xd = x; - s->yd = y; - s->yd1 = y; /* This is the hight initially announced in BIH. To provoke - generation of NEWLEN for T.85 compatibility tests, - overwrite with new value s->yd1 > s->yd */ - s->planes = planes; - s->data_out = data_out; - s->file = file; - - s->d = 0; - s->dl = 0; - s->dh = s->d; - jbg_set_default_l0(s); - s->mx = 8; - s->my = 0; - s->order = JBG_ILEAVE | JBG_SMID; - s->options = JBG_TPBON | JBG_TPDON | JBG_DPON; - s->comment = NULL; - s->dppriv = jbg_dptable; - s->res_tab = jbg_resred; - - s->highres = (int *) checked_malloc(planes, sizeof(int)); - s->lhp[0] = p; - s->lhp[1] = (unsigned char **) - checked_malloc(planes, sizeof(unsigned char *)); - for (i = 0; i < planes; i++) { - s->highres[i] = 0; - s->lhp[1][i] = (unsigned char *) - checked_malloc(jbg_ceil_half(y, 1), jbg_ceil_half(x, 1+3)); - } - - s->free_list = NULL; - s->s = (struct jbg_arenc_state *) - checked_malloc(s->planes, sizeof(struct jbg_arenc_state)); - s->tx = (int *) checked_malloc(s->planes, sizeof(int)); - lx = jbg_ceil_half(x, 1); - s->tp = (char *) checked_malloc(lx, sizeof(char)); - for (l = 0; l < lx; s->tp[l++] = 2); - s->sde = NULL; - - return; -} - - -/* - * This function selects the number of differential layers based on - * the maximum size requested for the lowest resolution layer. If - * possible, a number of differential layers is selected, which will - * keep the size of the lowest resolution layer below or equal to the - * given width x and height y. However not more than 6 differential - * resolution layers will be used. In addition, a reasonable value for - * l0 (height of one stripe in the lowest resolution layer) is - * selected, which obeys the recommended limitations for l0 in annex A - * and C of the JBIG standard. The selected number of resolution layers - * is returned. - */ -int jbg_enc_lrlmax(struct jbg_enc_state *s, unsigned long x, - unsigned long y) -{ - for (s->d = 0; s->d < 6; s->d++) - if (jbg_ceil_half(s->xd, s->d) <= x && jbg_ceil_half(s->yd, s->d) <= y) - break; - s->dl = 0; - s->dh = s->d; - jbg_set_default_l0(s); - return s->d; -} - - -/* - * As an alternative to jbg_enc_lrlmax(), the following function allows - * to specify the number of layers directly. The stripe height and layer - * range is also adjusted automatically here. - */ -void jbg_enc_layers(struct jbg_enc_state *s, int d) -{ - if (d < 0 || d > 31) - return; - s->d = d; - s->dl = 0; - s->dh = s->d; - jbg_set_default_l0(s); - return; -} - - -/* - * Specify the highest and lowest resolution layers which will be - * written to the output file. Call this function not before - * jbg_enc_layers() or jbg_enc_lrlmax(), because these two functions - * reset the lowest and highest resolution layer to default values. - * Negative values are ignored. The total number of layers is returned. - */ -int jbg_enc_lrange(struct jbg_enc_state *s, int dl, int dh) -{ - if (dl >= 0 && dl <= s->d) s->dl = dl; - if (dh >= s->dl && dh <= s->d) s->dh = dh; - - return s->d; -} - - -/* - * The following function allows to specify the bits describing the - * options of the format as well as the maximum AT movement window and - * the number of layer 0 lines per stripes. - */ -void jbg_enc_options(struct jbg_enc_state *s, int order, int options, - unsigned long l0, int mx, int my) -{ - if (order >= 0 && order <= 0x0f) s->order = order; - if (options >= 0) s->options = options; - if (l0 > 0) s->l0 = l0; - if (mx >= 0 && my < 128) s->mx = mx; - if (my >= 0 && my < 256) s->my = my; - - return; -} - - -/* - * This function actually does all the tricky work involved in producing - * a SDE, which is stored in the appropriate s->sde[][][] element - * for later output in the correct order. - */ -static void encode_sde(struct jbg_enc_state *s, - long stripe, int layer, int plane) -{ - unsigned char *hp, *lp1, *lp2, *p0, *p1, *q1, *q2; - unsigned long hl, ll, hx, hy, lx, ly, hbpl, lbpl; - unsigned long line_h0 = 0, line_h1 = 0; - unsigned long line_h2, line_h3, line_l1, line_l2, line_l3; - struct jbg_arenc_state *se; - unsigned long y; /* current line number in highres image */ - unsigned long i; /* current line number within highres stripe */ - unsigned long j; /* current column number in highres image */ - long o; - unsigned a, p, t; - int ltp, ltp_old, cx; - unsigned long c_all, c[MX_MAX + 1], cmin, cmax, clmin, clmax; - int tmax, at_determined; - int new_tx; - long new_tx_line = -1; - int reset; - struct jbg_buf *new_jbg_buf; - -#ifdef DEBUG - static long tp_lines, tp_exceptions, tp_pixels, dp_pixels; - static long encoded_pixels; -#endif - - /* return immediately if this stripe has already been encoded */ - if (s->sde[stripe][layer][plane] != SDE_TODO) - return; - -#ifdef DEBUG - if (stripe == 0) - tp_lines = tp_exceptions = tp_pixels = dp_pixels = encoded_pixels = 0; - fprintf(stderr, "encode_sde: s/d/p = %2ld/%2d/%2d\n", - stripe, layer, plane); -#endif - - /* number of lines per stripe in highres image */ - hl = s->l0 << layer; - /* number of lines per stripe in lowres image */ - ll = hl >> 1; - /* current line number in highres image */ - y = stripe * hl; - /* number of pixels in highres image */ - hx = jbg_ceil_half(s->xd, s->d - layer); - hy = jbg_ceil_half(s->yd, s->d - layer); - /* number of pixels in lowres image */ - lx = jbg_ceil_half(hx, 1); - ly = jbg_ceil_half(hy, 1); - /* bytes per line in highres and lowres image */ - hbpl = jbg_ceil_half(hx, 3); - lbpl = jbg_ceil_half(lx, 3); - /* pointer to first image byte of highres stripe */ - hp = s->lhp[s->highres[plane]][plane] + stripe * hl * hbpl; - lp2 = s->lhp[1 - s->highres[plane]][plane] + stripe * ll * lbpl; - lp1 = lp2 + lbpl; - - /* check whether we can refer to any state of a previous stripe */ - reset = (stripe == 0) || (s->options & JBG_SDRST); - - /* initialize arithmetic encoder */ - se = s->s + plane; - arith_encode_init(se, !reset); - s->sde[stripe][layer][plane] = jbg_buf_init(&s->free_list); - se->byte_out = jbg_buf_write; - se->file = s->sde[stripe][layer][plane]; - - /* initialize adaptive template movement algorithm */ - c_all = 0; - for (t = 0; t <= s->mx; t++) - c[t] = 0; - if (stripe == 0) /* the SDRST case is handled at the end */ - s->tx[plane] = 0; - new_tx = -1; - at_determined = 0; /* we haven't yet decided the template move */ - if (s->mx == 0) - at_determined = 1; - - /* initialize typical prediction */ - ltp = 0; - if (reset) - ltp_old = 0; - else { - ltp_old = 1; - p1 = hp - hbpl; - if (y > 1) { - q1 = p1 - hbpl; - while (p1 < hp && (ltp_old = (*p1++ == *q1++)) != 0); - } else - while (p1 < hp && (ltp_old = (*p1++ == 0)) != 0); - } - - if (layer == 0) { - - /* - * Encode lowest resolution layer - */ - - for (i = 0; i < hl && y < hy; i++, y++) { - - /* check whether it is worth to perform an ATMOVE */ - if (!at_determined && c_all > 2048) { - cmin = clmin = 0xffffffffL; - cmax = clmax = 0; - tmax = 0; - for (t = (s->options & JBG_LRLTWO) ? 5 : 3; t <= s->mx; t++) { - if (c[t] > cmax) cmax = c[t]; - if (c[t] < cmin) cmin = c[t]; - if (c[t] > c[tmax]) tmax = t; - } - clmin = (c[0] < cmin) ? c[0] : cmin; - clmax = (c[0] > cmax) ? c[0] : cmax; - if (c_all - cmax < (c_all >> 3) && - cmax - c[s->tx[plane]] > c_all - cmax && - cmax - c[s->tx[plane]] > (c_all >> 4) && - /* ^ T.82 said < here, fixed in Cor.1/25 */ - cmax - (c_all - c[s->tx[plane]]) > c_all - cmax && - cmax - (c_all - c[s->tx[plane]]) > (c_all >> 4) && - cmax - cmin > (c_all >> 2) && - (s->tx[plane] || clmax - clmin > (c_all >> 3))) { - /* we have decided to perform an ATMOVE */ - new_tx = tmax; - if (!(s->options & JBG_DELAY_AT)) { - new_tx_line = i; - s->tx[plane] = new_tx; - } -#ifdef DEBUG - fprintf(stderr, "ATMOVE: line=%ld, tx=%d, c_all=%ld\n", - i, new_tx, c_all); -#endif - } - at_determined = 1; - } - assert(s->tx[plane] >= 0); /* i.e., tx can safely be cast to unsigned */ - - /* typical prediction */ - if (s->options & JBG_TPBON) { - ltp = 1; - p1 = hp; - if (i > 0 || !reset) { - q1 = hp - hbpl; - while (q1 < hp && (ltp = (*p1++ == *q1++)) != 0); - } else - while (p1 < hp + hbpl && (ltp = (*p1++ == 0)) != 0); - arith_encode(se, (s->options & JBG_LRLTWO) ? TPB2CX : TPB3CX, - ltp == ltp_old); -#ifdef DEBUG - tp_lines += ltp; -#endif - ltp_old = ltp; - if (ltp) { - /* skip next line */ - hp += hbpl; - continue; - } - } - - /* - * Layout of the variables line_h1, line_h2, line_h3, which contain - * as bits the neighbour pixels of the currently coded pixel X: - * - * 76543210765432107654321076543210 line_h3 - * 76543210765432107654321076543210 line_h2 - * 76543210765432107654321X76543210 line_h1 - */ - - line_h1 = line_h2 = line_h3 = 0; - if (i > 0 || !reset) line_h2 = (long)*(hp - hbpl) << 8; - if (i > 1 || !reset) line_h3 = (long)*(hp - hbpl - hbpl) << 8; - - /* encode line */ - for (j = 0; j < hx; hp++) { - line_h1 |= *hp; - if (j < hbpl * 8 - 8 && (i > 0 || !reset)) { - line_h2 |= *(hp - hbpl + 1); - if (i > 1 || !reset) - line_h3 |= *(hp - hbpl - hbpl + 1); - } - if (s->options & JBG_LRLTWO) { - /* two line template */ - do { - line_h1 <<= 1; line_h2 <<= 1; line_h3 <<= 1; - if (s->tx[plane]) { - if ((unsigned) s->tx[plane] > j) - a = 0; - else { - o = (j - s->tx[plane]) - (j & ~7L); - a = (hp[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 4; - } - assert(s->tx[plane] > 23 || - a == ((line_h1 >> (4 + s->tx[plane])) & 0x010)); - arith_encode(se, (((line_h2 >> 10) & 0x3e0) | a | - ((line_h1 >> 9) & 0x00f)), - (line_h1 >> 8) & 1); - } - else - arith_encode(se, (((line_h2 >> 10) & 0x3f0) | - ((line_h1 >> 9) & 0x00f)), - (line_h1 >> 8) & 1); -#ifdef DEBUG - encoded_pixels++; -#endif - /* statistics for adaptive template changes */ - if (!at_determined && j >= s->mx && j < hx-2) { - p = (line_h1 & 0x100) != 0; /* current pixel value */ - c[0] += ((line_h2 & 0x4000) != 0) == p; /* default position */ - assert(!(((line_h2 >> 6) ^ line_h1) & 0x100) == - (((line_h2 & 0x4000) != 0) == p)); - for (t = 5; t <= s->mx && t <= j; t++) { - o = (j - t) - (j & ~7L); - a = (hp[o >> 3] >> (7 - (o & 7))) & 1; - assert(t > 23 || - (a == p) == !(((line_h1 >> t) ^ line_h1) & 0x100)); - c[t] += a == p; - } - for (; t <= s->mx; t++) { - c[t] += 0 == p; - } - ++c_all; - } - } while (++j & 7 && j < hx); - } else { - /* three line template */ - do { - line_h1 <<= 1; line_h2 <<= 1; line_h3 <<= 1; - if (s->tx[plane]) { - if ((unsigned) s->tx[plane] > j) - a = 0; - else { - o = (j - s->tx[plane]) - (j & ~7L); - a = (hp[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 2; - } - assert(s->tx[plane] > 23 || - a == ((line_h1 >> (6 + s->tx[plane])) & 0x004)); - arith_encode(se, (((line_h3 >> 8) & 0x380) | - ((line_h2 >> 12) & 0x078) | a | - ((line_h1 >> 9) & 0x003)), - (line_h1 >> 8) & 1); - } else - arith_encode(se, (((line_h3 >> 8) & 0x380) | - ((line_h2 >> 12) & 0x07c) | - ((line_h1 >> 9) & 0x003)), - (line_h1 >> 8) & 1); -#ifdef DEBUG - encoded_pixels++; -#endif - /* statistics for adaptive template changes */ - if (!at_determined && j >= s->mx && j < hx-2) { - p = (line_h1 & 0x100) != 0; /* current pixel value */ - c[0] += ((line_h2 & 0x4000) != 0) == p; /* default position */ - assert(!(((line_h2 >> 6) ^ line_h1) & 0x100) == - (((line_h2 & 0x4000) != 0) == p)); - for (t = 3; t <= s->mx && t <= j; t++) { - o = (j - t) - (j & ~7L); - a = (hp[o >> 3] >> (7 - (o & 7))) & 1; - assert(t > 23 || - (a == p) == !(((line_h1 >> t) ^ line_h1) & 0x100)); - c[t] += a == p; - } - for (; t <= s->mx; t++) { - c[t] += 0 == p; - } - ++c_all; - } - } while (++j & 7 && j < hx); - } /* if (s->options & JBG_LRLTWO) */ - } /* for (j = ...) */ - } /* for (i = ...) */ - - } else { - - /* - * Encode differential layer - */ - - for (i = 0; i < hl && y < hy; i++, y++) { - - /* check whether it is worth to perform an ATMOVE */ - if (!at_determined && c_all > 2048) { - cmin = clmin = 0xffffffffL; - cmax = clmax = 0; - tmax = 0; - for (t = 3; t <= s->mx; t++) { - if (c[t] > cmax) cmax = c[t]; - if (c[t] < cmin) cmin = c[t]; - if (c[t] > c[tmax]) tmax = t; - } - clmin = (c[0] < cmin) ? c[0] : cmin; - clmax = (c[0] > cmax) ? c[0] : cmax; - if (c_all - cmax < (c_all >> 3) && - cmax - c[s->tx[plane]] > c_all - cmax && - cmax - c[s->tx[plane]] > (c_all >> 4) && - /* ^ T.82 said < here, fixed in Cor.1/25 */ - cmax - (c_all - c[s->tx[plane]]) > c_all - cmax && - cmax - (c_all - c[s->tx[plane]]) > (c_all >> 4) && - cmax - cmin > (c_all >> 2) && - (s->tx[plane] || clmax - clmin > (c_all >> 3))) { - /* we have decided to perform an ATMOVE */ - new_tx = tmax; - if (!(s->options & JBG_DELAY_AT)) { - new_tx_line = i; - s->tx[plane] = new_tx; - } -#ifdef DEBUG - fprintf(stderr, "ATMOVE: line=%ld, tx=%d, c_all=%ld\n", - i, new_tx, c_all); -#endif - } - at_determined = 1; - } - - if ((i >> 1) >= ll - 1 || (y >> 1) >= ly - 1) - lp1 = lp2; - - /* typical prediction */ - if (s->options & JBG_TPDON && (i & 1) == 0) { - q1 = lp1; q2 = lp2; - p0 = p1 = hp; - if (i < hl - 1 && y < hy - 1) - p0 = hp + hbpl; - if (i > 1 || !reset) - line_l3 = (long)*(q2 - lbpl) << 8; - else - line_l3 = 0; - line_l2 = (long)*q2 << 8; - line_l1 = (long)*q1 << 8; - ltp = 1; - for (j = 0; j < lx && ltp; q1++, q2++) { - if (j < lbpl * 8 - 8) { - if (i > 1 || !reset) - line_l3 |= *(q2 - lbpl + 1); - line_l2 |= *(q2 + 1); - line_l1 |= *(q1 + 1); - } - do { - if ((j >> 2) < hbpl) { - line_h1 = *(p1++); - line_h0 = *(p0++); - } - do { - line_l3 <<= 1; - line_l2 <<= 1; - line_l1 <<= 1; - line_h1 <<= 2; - line_h0 <<= 2; - cx = (((line_l3 >> 15) & 0x007) | - ((line_l2 >> 12) & 0x038) | - ((line_l1 >> 9) & 0x1c0)); - if (cx == 0x000) - if ((line_h1 & 0x300) == 0 && (line_h0 & 0x300) == 0) - s->tp[j] = 0; - else { - ltp = 0; -#ifdef DEBUG - tp_exceptions++; -#endif - } - else if (cx == 0x1ff) - if ((line_h1 & 0x300) == 0x300 && (line_h0 & 0x300) == 0x300) - s->tp[j] = 1; - else { - ltp = 0; -#ifdef DEBUG - tp_exceptions++; -#endif - } - else - s->tp[j] = 2; - } while (++j & 3 && j < lx); - } while (j & 7 && j < lx); - } /* for (j = ...) */ - arith_encode(se, TPDCX, !ltp); -#ifdef DEBUG - tp_lines += ltp; -#endif - } - - - /* - * Layout of the variables line_h1, line_h2, line_h3, which contain - * as bits the high resolution neighbour pixels of the currently coded - * highres pixel X: - * - * 76543210 76543210 76543210 76543210 line_h3 - * 76543210 76543210 76543210 76543210 line_h2 - * 76543210 76543210 7654321X 76543210 line_h1 - * - * Layout of the variables line_l1, line_l2, line_l3, which contain - * the low resolution pixels near the currently coded pixel as bits. - * The lowres pixel in which the currently coded highres pixel is - * located is marked as Y: - * - * 76543210 76543210 76543210 76543210 line_l3 - * 76543210 7654321Y 76543210 76543210 line_l2 - * 76543210 76543210 76543210 76543210 line_l1 - */ - - - line_h1 = line_h2 = line_h3 = line_l1 = line_l2 = line_l3 = 0; - if (i > 0 || !reset) line_h2 = (long)*(hp - hbpl) << 8; - if (i > 1 || !reset) { - line_h3 = (long)*(hp - hbpl - hbpl) << 8; - line_l3 = (long)*(lp2 - lbpl) << 8; - } - line_l2 = (long)*lp2 << 8; - line_l1 = (long)*lp1 << 8; - - /* encode line */ - for (j = 0; j < hx; lp1++, lp2++) { - if ((j >> 1) < lbpl * 8 - 8) { - if (i > 1 || !reset) - line_l3 |= *(lp2 - lbpl + 1); - line_l2 |= *(lp2 + 1); - line_l1 |= *(lp1 + 1); - } - do { /* ... while (j & 15 && j < hx) */ - - assert(hp - (s->lhp[s->highres[plane]][plane] + - (stripe * hl + i) * hbpl) - == (ptrdiff_t) j >> 3); - - assert(lp2 - (s->lhp[1-s->highres[plane]][plane] + - (stripe * ll + (i>>1)) * lbpl) - == (ptrdiff_t) j >> 4); - - line_h1 |= *hp; - if (j < hbpl * 8 - 8) { - if (i > 0 || !reset) { - line_h2 |= *(hp - hbpl + 1); - if (i > 1 || !reset) - line_h3 |= *(hp - hbpl - hbpl + 1); - } - } - do { /* ... while (j & 7 && j < hx) */ - line_l1 <<= 1; line_l2 <<= 1; line_l3 <<= 1; - if (ltp && s->tp[j >> 1] < 2) { - /* pixel are typical and have not to be encoded */ - line_h1 <<= 2; line_h2 <<= 2; line_h3 <<= 2; -#ifdef DEBUG - do { - ++tp_pixels; - } while (++j & 1 && j < hx); -#else - j += 2; -#endif - } else - do { /* ... while (++j & 1 && j < hx) */ - line_h1 <<= 1; line_h2 <<= 1; line_h3 <<= 1; - - /* deterministic prediction */ - if (s->options & JBG_DPON) { - if ((y & 1) == 0) { - if ((j & 1) == 0) { - /* phase 0 */ - if (s->dppriv[((line_l3 >> 16) & 0x003) | - ((line_l2 >> 14) & 0x00c) | - ((line_h1 >> 5) & 0x010) | - ((line_h2 >> 10) & 0x0e0)] < 2) { -#ifdef DEBUG - ++dp_pixels; -#endif - continue; - } - } else { - /* phase 1 */ - if (s->dppriv[(((line_l3 >> 16) & 0x003) | - ((line_l2 >> 14) & 0x00c) | - ((line_h1 >> 5) & 0x030) | - ((line_h2 >> 10) & 0x1c0)) + 256] < 2) { -#ifdef DEBUG - ++dp_pixels; -#endif - continue; - } - } - } else { - if ((j & 1) == 0) { - /* phase 2 */ - if (s->dppriv[(((line_l3 >> 16) & 0x003) | - ((line_l2 >> 14) & 0x00c) | - ((line_h1 >> 5) & 0x010) | - ((line_h2 >> 10) & 0x0e0) | - ((line_h3 >> 7) & 0x700)) + 768] < 2) { -#ifdef DEBUG - ++dp_pixels; -#endif - continue; - } - } else { - /* phase 3 */ - if (s->dppriv[(((line_l3 >> 16) & 0x003) | - ((line_l2 >> 14) & 0x00c) | - ((line_h1 >> 5) & 0x030) | - ((line_h2 >> 10) & 0x1c0) | - ((line_h3 >> 7) & 0xe00)) + 2816] < 2) { -#ifdef DEBUG - ++dp_pixels; -#endif - continue; - } - } - } - } - - /* determine context */ - if (s->tx[plane]) { - if ((unsigned) s->tx[plane] > j) - a = 0; - else { - o = (j - s->tx[plane]) - (j & ~7L); - a = (hp[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 4; - } - assert(s->tx[plane] > 23 || - a == ((line_h1 >> (4 + s->tx[plane])) & 0x010)); - cx = (((line_h1 >> 9) & 0x003) | a | - ((line_h2 >> 13) & 0x00c) | - ((line_h3 >> 11) & 0x020)); - } else - cx = (((line_h1 >> 9) & 0x003) | - ((line_h2 >> 13) & 0x01c) | - ((line_h3 >> 11) & 0x020)); - if (j & 1) - cx |= (((line_l2 >> 9) & 0x0c0) | - ((line_l1 >> 7) & 0x300)) | (1UL << 10); - else - cx |= (((line_l2 >> 10) & 0x0c0) | - ((line_l1 >> 8) & 0x300)); - cx |= (y & 1) << 11; - - arith_encode(se, cx, (line_h1 >> 8) & 1); -#ifdef DEBUG - encoded_pixels++; -#endif - - /* statistics for adaptive template changes */ - if (!at_determined && j >= s->mx) { - c[0] += !(((line_h2 >> 6) ^ line_h1) & 0x100); - for (t = 3; t <= s->mx; t++) - c[t] += !(((line_h1 >> t) ^ line_h1) & 0x100); - ++c_all; - } - - } while (++j & 1 && j < hx); - } while (j & 7 && j < hx); - hp++; - } while (j & 15 && j < hx); - } /* for (j = ...) */ - - /* low resolution pixels are used twice */ - if ((i & 1) == 0) { - lp1 -= lbpl; - lp2 -= lbpl; - } - - } /* for (i = ...) */ - } - - arith_encode_flush(se); - jbg_buf_remove_zeros(s->sde[stripe][layer][plane]); - jbg_buf_write(MARKER_ESC, s->sde[stripe][layer][plane]); - jbg_buf_write((s->options & JBG_SDRST) ? MARKER_SDRST : MARKER_SDNORM, - s->sde[stripe][layer][plane]); - if (s->options & JBG_SDRST) - s->tx[plane] = 0; - - /* add ATMOVE */ - if (new_tx != -1) { - if (s->options & JBG_DELAY_AT) { - /* ATMOVE will become active at the first line of the next stripe */ - s->tx[plane] = new_tx; - jbg_buf_write(MARKER_ESC, s->sde[stripe][layer][plane]); - jbg_buf_write(MARKER_ATMOVE, s->sde[stripe][layer][plane]); - jbg_buf_write(0, s->sde[stripe][layer][plane]); - jbg_buf_write(0, s->sde[stripe][layer][plane]); - jbg_buf_write(0, s->sde[stripe][layer][plane]); - jbg_buf_write(0, s->sde[stripe][layer][plane]); - jbg_buf_write(s->tx[plane], s->sde[stripe][layer][plane]); - jbg_buf_write(0, s->sde[stripe][layer][plane]); - } else { - /* ATMOVE has already become active during this stripe - * => we have to prefix the SDE data with an ATMOVE marker */ - new_jbg_buf = jbg_buf_init(&s->free_list); - jbg_buf_write(MARKER_ESC, new_jbg_buf); - jbg_buf_write(MARKER_ATMOVE, new_jbg_buf); - jbg_buf_write((new_tx_line >> 24) & 0xff, new_jbg_buf); - jbg_buf_write((new_tx_line >> 16) & 0xff, new_jbg_buf); - jbg_buf_write((new_tx_line >> 8) & 0xff, new_jbg_buf); - jbg_buf_write(new_tx_line & 0xff, new_jbg_buf); - jbg_buf_write(new_tx, new_jbg_buf); - jbg_buf_write(0, new_jbg_buf); - jbg_buf_prefix(new_jbg_buf, &s->sde[stripe][layer][plane]); - } - } - -#if 0 - if (stripe == s->stripes - 1) - fprintf(stderr, "tp_lines = %ld, tp_exceptions = %ld, tp_pixels = %ld, " - "dp_pixels = %ld, encoded_pixels = %ld\n", - tp_lines, tp_exceptions, tp_pixels, dp_pixels, encoded_pixels); -#endif - - return; -} - - -/* - * Create the next lower resolution version of an image - */ -static void resolution_reduction(struct jbg_enc_state *s, int plane, - int higher_layer) -{ - unsigned long hl, ll, hx, hy, lx, ly, hbpl, lbpl; - unsigned char *hp1, *hp2, *hp3, *lp; - unsigned long line_h1, line_h2, line_h3, line_l2; - unsigned long y; /* current line number in lowres image */ - unsigned long i; /* current line number within lowres stripe */ - unsigned long j; /* current column number in lowres image */ - int pix, k, l; - - /* number of lines per stripe in highres image */ - hl = s->l0 << higher_layer; - /* number of lines per stripe in lowres image */ - ll = hl >> 1; - /* number of pixels in highres image */ - hx = jbg_ceil_half(s->xd, s->d - higher_layer); - hy = jbg_ceil_half(s->yd, s->d - higher_layer); - /* number of pixels in lowres image */ - lx = jbg_ceil_half(hx, 1); - ly = jbg_ceil_half(hy, 1); - /* bytes per line in highres and lowres image */ - hbpl = jbg_ceil_half(hx, 3); - lbpl = jbg_ceil_half(lx, 3); - /* pointers to first image bytes */ - hp2 = s->lhp[s->highres[plane]][plane]; - hp1 = hp2 + hbpl; - hp3 = hp2 - hbpl; - lp = s->lhp[1 - s->highres[plane]][plane]; - -#ifdef DEBUG - fprintf(stderr, "resolution_reduction: plane = %d, higher_layer = %d\n", - plane, higher_layer); -#endif - - /* - * Layout of the variables line_h1, line_h2, line_h3, which contain - * as bits the high resolution neighbour pixels of the currently coded - * lowres pixel /\: - * \/ - * - * 76543210 76543210 76543210 76543210 line_h3 - * 76543210 76543210 765432/\ 76543210 line_h2 - * 76543210 76543210 765432\/ 76543210 line_h1 - * - * Layout of the variable line_l2, which contains the low resolution - * pixels near the currently coded pixel as bits. The lowres pixel - * which is currently coded is marked as X: - * - * 76543210 76543210 76543210 76543210 line_l2 - * X - */ - - for (y = 0; y < ly;) { - for (i = 0; i < ll && y < ly; i++, y++) { - if (2*y + 1 >= hy) - hp1 = hp2; - pix = 0; - line_h1 = line_h2 = line_h3 = line_l2 = 0; - for (j = 0; j < lbpl * 8; j += 8) { - *lp = 0; - if (i > 0 || (y > 0 && !(s->options & JBG_SDRST))) - line_l2 |= *(lp-lbpl); - for (k = 0; k < 8 && j + k < lx; k += 4) { - if (((j + k) >> 2) < hbpl) { - if (i > 0 || (y > 0 && !(s->options & JBG_SDRST))) - line_h3 |= *hp3; - ++hp3; - line_h2 |= *(hp2++); - line_h1 |= *(hp1++); - } - for (l = 0; l < 4 && j + k + l < lx; l++) { - line_h3 <<= 2; - line_h2 <<= 2; - line_h1 <<= 2; - line_l2 <<= 1; - pix = s->res_tab[((line_h1 >> 8) & 0x007) | - ((line_h2 >> 5) & 0x038) | - ((line_h3 >> 2) & 0x1c0) | - (pix << 9) | ((line_l2 << 2) & 0xc00)]; - *lp = (*lp << 1) | pix; - } - } - ++lp; - } - *(lp - 1) <<= lbpl * 8 - lx; - hp1 += hbpl; - hp2 += hbpl; - hp3 += hbpl; - } - } - -#ifdef DEBUG - { - FILE *f; - char fn[50]; - - sprintf(fn, "dbg_d=%02d.pbm", higher_layer - 1); - f = fopen(fn, "wb"); - fprintf(f, "P4\n%lu %lu\n", lx, ly); - fwrite(s->lhp[1 - s->highres[plane]][plane], 1, lbpl * ly, f); - fclose(f); - } -#endif - - return; -} - - -/* - * This function is called inside the three loops of jbg_enc_out() in - * order to write the next SDE. It has first to generate the required - * SDE and all SDEs which have to be encoded before this SDE can be - * created. The problem here is that if we want to output a lower - * resolution layer, we have to apply the resolution reduction - * algorithm first to get it. As we try to safe as much memory as - * possible, the resolution reduction will overwrite previous higher - * resolution bitmaps. Consequently, we have to encode and buffer SDEs - * which depend on higher resolution layers before we can start the - * resolution reduction. All the logic about which SDE has to be - * encoded before resolution reduction is allowed is handled - * here. This approach may be a bit more complex than alternative ways - * of doing it, but it minimizes the amount of temporary memory used. - */ -static void output_sde(struct jbg_enc_state *s, - unsigned long stripe, int layer, int plane) -{ - int lfcl; /* lowest fully coded layer */ - long i; - unsigned long u; - - assert(s->sde[stripe][layer][plane] != SDE_DONE); - - if (s->sde[stripe][layer][plane] != SDE_TODO) { -#ifdef DEBUG - fprintf(stderr, "writing SDE: s/d/p = %2lu/%2d/%2d\n", - stripe, layer, plane); -#endif - jbg_buf_output(&s->sde[stripe][layer][plane], s->data_out, s->file); - s->sde[stripe][layer][plane] = SDE_DONE; - return; - } - - /* Determine the smallest resolution layer in this plane for which - * not yet all stripes have been encoded into SDEs. This layer will - * have to be completely coded, before we can apply the next - * resolution reduction step. */ - lfcl = 0; - for (i = s->d; i >= 0; i--) - if (s->sde[s->stripes - 1][i][plane] == SDE_TODO) { - lfcl = i + 1; - break; - } - if (lfcl > s->d && s->d > 0 && stripe == 0) { - /* perform the first resolution reduction */ - resolution_reduction(s, plane, s->d); - } - /* In case HITOLO is not used, we have to encode and store the higher - * resolution layers first, although we do not need them right now. */ - while (lfcl - 1 > layer) { - for (u = 0; u < s->stripes; u++) - encode_sde(s, u, lfcl - 1, plane); - --lfcl; - s->highres[plane] ^= 1; - if (lfcl > 1) - resolution_reduction(s, plane, lfcl - 1); - } - - encode_sde(s, stripe, layer, plane); - -#ifdef DEBUG - fprintf(stderr, "writing SDE: s/d/p = %2lu/%2d/%2d\n", stripe, layer, plane); -#endif - jbg_buf_output(&s->sde[stripe][layer][plane], s->data_out, s->file); - s->sde[stripe][layer][plane] = SDE_DONE; - - if (stripe == s->stripes - 1 && layer > 0 && - s->sde[0][layer-1][plane] == SDE_TODO) { - s->highres[plane] ^= 1; - if (layer > 1) - resolution_reduction(s, plane, layer - 1); - } - - return; -} - - -/* - * Convert the table which controls the deterministic prediction - * process from the internal format into the representation required - * for the 1728 byte long DPTABLE element of a BIH. - * - * The bit order of the DPTABLE format (see also ITU-T T.82 figure 13) is - * - * high res: 4 5 6 low res: 0 1 - * 7 8 9 2 3 - * 10 11 12 - * - * were 4 table entries are packed into one byte, while we here use - * internally an unpacked 6912 byte long table indexed by the following - * bit order: - * - * high res: 7 6 5 high res: 8 7 6 low res: 1 0 - * (phase 0) 4 . . (phase 1) 5 4 . 3 2 - * . . . . . . - * - * high res: 10 9 8 high res: 11 10 9 - * (phase 2) 7 6 5 (phase 3) 8 7 6 - * 4 . . 5 4 . - */ -void jbg_int2dppriv(unsigned char *dptable, const char *internal) -{ - int i, j, k; - int trans0[ 8] = { 1, 0, 3, 2, 7, 6, 5, 4 }; - int trans1[ 9] = { 1, 0, 3, 2, 8, 7, 6, 5, 4 }; - int trans2[11] = { 1, 0, 3, 2, 10, 9, 8, 7, 6, 5, 4 }; - int trans3[12] = { 1, 0, 3, 2, 11, 10, 9, 8, 7, 6, 5, 4 }; - - for (i = 0; i < 1728; dptable[i++] = 0); - -#define FILL_TABLE1(offset, len, trans) \ - for (i = 0; i < len; i++) { \ - k = 0; \ - for (j = 0; j < 8; j++) \ - k |= ((i >> j) & 1) << trans[j]; \ - dptable[(i + offset) >> 2] |= \ - (internal[k + offset] & 3) << ((3 - (i&3)) << 1); \ - } - - FILL_TABLE1( 0, 256, trans0); - FILL_TABLE1( 256, 512, trans1); - FILL_TABLE1( 768, 2048, trans2); - FILL_TABLE1(2816, 4096, trans3); - - return; -} - - -/* - * Convert the table which controls the deterministic prediction - * process from the 1728 byte long DPTABLE format into the 6912 byte long - * internal format. - */ -void jbg_dppriv2int(char *internal, const unsigned char *dptable) -{ - int i, j, k; - int trans0[ 8] = { 1, 0, 3, 2, 7, 6, 5, 4 }; - int trans1[ 9] = { 1, 0, 3, 2, 8, 7, 6, 5, 4 }; - int trans2[11] = { 1, 0, 3, 2, 10, 9, 8, 7, 6, 5, 4 }; - int trans3[12] = { 1, 0, 3, 2, 11, 10, 9, 8, 7, 6, 5, 4 }; - -#define FILL_TABLE2(offset, len, trans) \ - for (i = 0; i < len; i++) { \ - k = 0; \ - for (j = 0; j < 8; j++) \ - k |= ((i >> j) & 1) << trans[j]; \ - internal[k + offset] = \ - (dptable[(i + offset) >> 2] >> ((3 - (i & 3)) << 1)) & 3; \ - } - - FILL_TABLE2( 0, 256, trans0); - FILL_TABLE2( 256, 512, trans1); - FILL_TABLE2( 768, 2048, trans2); - FILL_TABLE2(2816, 4096, trans3); - - return; -} - - -/* - * Encode one full BIE and pass the generated data to the specified - * call-back function - */ -void jbg_enc_out(struct jbg_enc_state *s) -{ - unsigned long bpl; - unsigned char buf[20]; - unsigned long xd, yd, y; - long ii[3], is[3], ie[3]; /* generic variables for the 3 nested loops */ - unsigned long stripe; - int layer, plane; - int order; - unsigned char dpbuf[1728]; - - /* some sanity checks */ - s->order &= JBG_HITOLO | JBG_SEQ | JBG_ILEAVE | JBG_SMID; - order = s->order & (JBG_SEQ | JBG_ILEAVE | JBG_SMID); - if (iindex[order][0] < 0) - s->order = order = JBG_SMID | JBG_ILEAVE; - if (s->options & JBG_DPON && s->dppriv != jbg_dptable) - s->options |= JBG_DPPRIV; - if (s->mx > MX_MAX) - s->mx = MX_MAX; - s->my = 0; - if (s->mx && s->mx < ((s->options & JBG_LRLTWO) ? 5U : 3U)) - s->mx = 0; - if (s->d > 255 || s->d < 0 || s->dh > s->d || s->dh < 0 || - s->dl < 0 || s->dl > s->dh || s->planes < 0 || s->planes > 255) - return; - /* prevent uint32 overflow: s->l0 * 2 ^ s->d < 2 ^ 32 */ - if (s->d > 31 || (s->d != 0 && s->l0 >= (1UL << (32 - s->d)))) - return; - if (s->yd1 < s->yd) - s->yd1 = s->yd; - if (s->yd1 > s->yd) - s->options |= JBG_VLENGTH; - - /* ensure correct zero padding of bitmap at the final byte of each line */ - if (s->xd & 7) { - bpl = jbg_ceil_half(s->xd, 3); /* bytes per line */ - for (plane = 0; plane < s->planes; plane++) - for (y = 0; y < s->yd; y++) - s->lhp[0][plane][y * bpl + bpl - 1] &= ~((1 << (8 - (s->xd & 7))) - 1); - } - - /* prepare BIH */ - buf[0] = s->dl; - buf[1] = s->dh; - buf[2] = s->planes; - buf[3] = 0; - xd = jbg_ceil_half(s->xd, s->d - s->dh); - yd = jbg_ceil_half(s->yd1, s->d - s->dh); - buf[4] = xd >> 24; - buf[5] = (xd >> 16) & 0xff; - buf[6] = (xd >> 8) & 0xff; - buf[7] = xd & 0xff; - buf[8] = yd >> 24; - buf[9] = (yd >> 16) & 0xff; - buf[10] = (yd >> 8) & 0xff; - buf[11] = yd & 0xff; - buf[12] = s->l0 >> 24; - buf[13] = (s->l0 >> 16) & 0xff; - buf[14] = (s->l0 >> 8) & 0xff; - buf[15] = s->l0 & 0xff; - buf[16] = s->mx; - buf[17] = s->my; - buf[18] = s->order; - buf[19] = s->options & 0x7f; - -#if 0 - /* sanitize L0 (if it was set to 0xffffffff for T.85-style NEWLEN tests) */ - if (s->l0 > (s->yd >> s->d)) - s->l0 = s->yd >> s->d; -#endif - - /* calculate number of stripes that will be required */ - s->stripes = jbg_stripes(s->l0, s->yd, s->d); - - /* allocate buffers for SDE pointers */ - if (s->sde == NULL) { - s->sde = (struct jbg_buf ****) - checked_malloc(s->stripes, sizeof(struct jbg_buf ***)); - for (stripe = 0; stripe < s->stripes; stripe++) { - s->sde[stripe] = (struct jbg_buf ***) - checked_malloc(s->d + 1, sizeof(struct jbg_buf **)); - for (layer = 0; layer < s->d + 1; layer++) { - s->sde[stripe][layer] = (struct jbg_buf **) - checked_malloc(s->planes, sizeof(struct jbg_buf *)); - for (plane = 0; plane < s->planes; plane++) - s->sde[stripe][layer][plane] = SDE_TODO; - } - } - } - - /* output BIH */ - s->data_out(buf, 20, s->file); - if ((s->options & (JBG_DPON | JBG_DPPRIV | JBG_DPLAST)) == - (JBG_DPON | JBG_DPPRIV)) { - /* write private table */ - jbg_int2dppriv(dpbuf, s->dppriv); - s->data_out(dpbuf, 1728, s->file); - } - -#if 0 - /* - * Encode everything first. This is a simple-minded alternative to - * all the tricky on-demand encoding logic in output_sde() for - * debugging purposes. - */ - for (layer = s->dh; layer >= s->dl; layer--) { - for (plane = 0; plane < s->planes; plane++) { - if (layer > 0) - resolution_reduction(s, plane, layer); - for (stripe = 0; stripe < s->stripes; stripe++) - encode_sde(s, stripe, layer, plane); - s->highres[plane] ^= 1; - } - } -#endif - - /* - * Generic loops over all SDEs. Which loop represents layer, plane and - * stripe depends on the option flags. - */ - - /* start and end value for each loop */ - is[iindex[order][STRIPE]] = 0; - ie[iindex[order][STRIPE]] = s->stripes - 1; - is[iindex[order][LAYER]] = s->dl; - ie[iindex[order][LAYER]] = s->dh; - is[iindex[order][PLANE]] = 0; - ie[iindex[order][PLANE]] = s->planes - 1; - - for (ii[0] = is[0]; ii[0] <= ie[0]; ii[0]++) - for (ii[1] = is[1]; ii[1] <= ie[1]; ii[1]++) - for (ii[2] = is[2]; ii[2] <= ie[2]; ii[2]++) { - - stripe = ii[iindex[order][STRIPE]]; - if (s->order & JBG_HITOLO) - layer = s->dh - (ii[iindex[order][LAYER]] - s->dl); - else - layer = ii[iindex[order][LAYER]]; - plane = ii[iindex[order][PLANE]]; - - /* output comment marker segment if there is any pending */ - if (s->comment) { - buf[0] = MARKER_ESC; - buf[1] = MARKER_COMMENT; - buf[2] = s->comment_len >> 24; - buf[3] = (s->comment_len >> 16) & 0xff; - buf[4] = (s->comment_len >> 8) & 0xff; - buf[5] = s->comment_len & 0xff; - s->data_out(buf, 6, s->file); - s->data_out(s->comment, s->comment_len, s->file); - s->comment = NULL; - } - - output_sde(s, stripe, layer, plane); - - /* - * When we generate a NEWLEN test case (s->yd1 > s->yd), output - * NEWLEN after last stripe if we have only a single - * resolution layer or plane (see ITU-T T.85 profile), otherwise - * output NEWLEN before last stripe. - */ - if (s->yd1 > s->yd && - (stripe == s->stripes - 1 || - (stripe == s->stripes - 2 && - (s->dl != s->dh || s->planes > 1)))) { - s->yd1 = s->yd; - yd = jbg_ceil_half(s->yd, s->d - s->dh); - buf[0] = MARKER_ESC; - buf[1] = MARKER_NEWLEN; - buf[2] = yd >> 24; - buf[3] = (yd >> 16) & 0xff; - buf[4] = (yd >> 8) & 0xff; - buf[5] = yd & 0xff; - s->data_out(buf, 6, s->file); -#ifdef DEBUG - fprintf(stderr, "NEWLEN: yd=%lu\n", yd); -#endif - if (stripe == s->stripes - 1) { - buf[1] = MARKER_SDNORM; - s->data_out(buf, 2, s->file); - } - } - - } - - return; -} - - -void jbg_enc_free(struct jbg_enc_state *s) -{ - unsigned long stripe; - int layer, plane; - -#ifdef DEBUG - fprintf(stderr, "jbg_enc_free(%p)\n", (void *) s); -#endif - - /* clear buffers for SDEs */ - if (s->sde) { - for (stripe = 0; stripe < s->stripes; stripe++) { - for (layer = 0; layer < s->d + 1; layer++) { - for (plane = 0; plane < s->planes; plane++) - if (s->sde[stripe][layer][plane] != SDE_DONE && - s->sde[stripe][layer][plane] != SDE_TODO) - jbg_buf_free(&s->sde[stripe][layer][plane]); - checked_free(s->sde[stripe][layer]); - } - checked_free(s->sde[stripe]); - } - checked_free(s->sde); - } - - /* clear free_list */ - jbg_buf_free(&s->free_list); - - /* clear memory for arithmetic encoder states */ - checked_free(s->s); - - /* clear memory for differential-layer typical prediction buffer */ - checked_free(s->tp); - - /* clear memory for adaptive template pixel offsets */ - checked_free(s->tx); - - /* clear lowres image buffers */ - if (s->lhp[1]) { - for (plane = 0; plane < s->planes; plane++) - checked_free(s->lhp[1][plane]); - checked_free(s->lhp[1]); - } - - /* clear buffer for index of highres image in lhp */ - checked_free(s->highres); - - return; -} - - -/* - * Convert the error codes used by jbg_dec_in() into an English ASCII string - */ -const char *jbg_strerror(int errnum) -{ - errnum >>= 4; - if (errnum < 0 || (unsigned) errnum >= sizeof(errmsg)/sizeof(errmsg[0])) - return "Unknown error code passed to jbg_strerror()"; - - return errmsg[errnum]; -} - - -/* - * The constructor for a decoder - */ -void jbg_dec_init(struct jbg_dec_state *s) -{ - s->order = 0; - s->d = -1; - s->bie_len = 0; - s->buf_len = 0; - s->dppriv = NULL; - s->xmax = 4294967295UL; - s->ymax = 4294967295UL; - s->dmax = 256; - s->s = NULL; - - return; -} - - -/* - * Specify a maximum image size for the decoder. If the JBIG file has - * the order bit ILEAVE, but not the bit SEQ set, then the decoder - * will abort to decode after the image has reached the maximal - * resolution layer which is still not wider than xmax or higher than - * ymax. - */ -void jbg_dec_maxsize(struct jbg_dec_state *s, unsigned long xmax, - unsigned long ymax) -{ - if (xmax > 0) s->xmax = xmax; - if (ymax > 0) s->ymax = ymax; - - return; -} - - -/* - * Decode the new len PSDC bytes to which data points and add them to - * the current stripe. Return the number of bytes which have actually - * been read (this will be less than len if a marker segment was - * part of the data or if the final byte was 0xff were this code - * can not determine, whether we have a marker segment. - */ -static size_t decode_pscd(struct jbg_dec_state *s, unsigned char *data, - size_t len) -{ - unsigned long stripe; - unsigned int layer, plane; - unsigned long hl, ll, y, hx, hy, lx, ly, hbpl, lbpl; - unsigned char *hp, *lp1, *lp2, *p1, *q1; - register unsigned long line_h1, line_h2, line_h3; - register unsigned long line_l1, line_l2, line_l3; - struct jbg_ardec_state *se; - unsigned long x; - long o; - unsigned a; - int n; - int pix, cx = 0, slntp, tx; - - /* SDE loop variables */ - stripe = s->ii[iindex[s->order & 7][STRIPE]]; - layer = s->ii[iindex[s->order & 7][LAYER]]; - plane = s->ii[iindex[s->order & 7][PLANE]]; - - /* forward data to arithmetic decoder */ - se = s->s[plane] + layer - s->dl; - se->pscd_ptr = data; - se->pscd_end = data + len; - - /* number of lines per stripe in highres image */ - hl = s->l0 << layer; - /* number of lines per stripe in lowres image */ - ll = hl >> 1; - /* current line number in highres image */ - y = stripe * hl + s->i; - /* number of pixels in highres image */ - hx = jbg_ceil_half(s->xd, s->d - layer); - hy = jbg_ceil_half(s->yd, s->d - layer); - /* number of pixels in lowres image */ - lx = jbg_ceil_half(hx, 1); - ly = jbg_ceil_half(hy, 1); - /* bytes per line in highres and lowres image */ - hbpl = jbg_ceil_half(hx, 3); - lbpl = jbg_ceil_half(lx, 3); - /* pointer to highres and lowres image bytes */ - hp = s->lhp[ layer & 1][plane] + (stripe * hl + s->i) * hbpl + - (s->x >> 3); - lp2 = s->lhp[(layer-1) & 1][plane] + (stripe * ll + (s->i >> 1)) * lbpl + - (s->x >> 4); - lp1 = lp2 + lbpl; - - /* restore a few local variables */ - line_h1 = s->line_h1; - line_h2 = s->line_h2; - line_h3 = s->line_h3; - line_l1 = s->line_l1; - line_l2 = s->line_l2; - line_l3 = s->line_l3; - x = s->x; - -#ifdef DEBUG - if (s->x == 0 && s->i == 0 && s->pseudo) - fprintf(stderr, "decode_pscd(%p, %p, %ld): s/d/p = %2lu/%2u/%2u\n", - (void *) s, (void *) data, (long) len, stripe, layer, plane); -#endif - - if (s->x == 0 && s->i == 0 && - (stripe == 0 || s->reset[plane][layer - s->dl]) && s->pseudo) { - s->tx[plane][layer - s->dl] = s->ty[plane][layer - s->dl] = 0; - s->lntp[plane][layer - s->dl] = 1; - } - - if (layer == 0) { - - /* - * Decode lowest resolution layer - */ - - for (; s->i < hl && y < hy; s->i++, y++) { - - /* adaptive template changes */ - if (x == 0 && s->pseudo) - for (n = 0; n < s->at_moves; n++) - if (s->at_line[n] == s->i) { - s->tx[plane][layer - s->dl] = s->at_tx[n]; - s->ty[plane][layer - s->dl] = s->at_ty[n]; -#ifdef DEBUG - fprintf(stderr, "ATMOVE: line=%lu, tx=%d, ty=%d.\n", s->i, - s->tx[plane][layer - s->dl], s->ty[plane][layer - s->dl]); -#endif - } - tx = s->tx[plane][layer - s->dl]; - assert(tx >= 0); /* i.e., tx can safely be cast to unsigned */ - - /* typical prediction */ - if (s->options & JBG_TPBON && s->pseudo) { - slntp = arith_decode(se, (s->options & JBG_LRLTWO) ? TPB2CX : TPB3CX); - if (slntp < 0) - goto leave; - s->lntp[plane][layer - s->dl] = - !(slntp ^ s->lntp[plane][layer - s->dl]); - if (!s->lntp[plane][layer - s->dl]) { - /* this line is 'typical' (i.e. identical to the previous one) */ - p1 = hp; - if (s->i == 0 && (stripe == 0 || s->reset[plane][layer - s->dl])) - while (p1 < hp + hbpl) *p1++ = 0; - else { - q1 = hp - hbpl; - while (q1 < hp) *p1++ = *q1++; - } - hp += hbpl; - continue; - } - /* this line is 'not typical' and has to be coded completely */ - } - s->pseudo = 0; - - /* - * Layout of the variables line_h1, line_h2, line_h3, which contain - * as bits the neighbour pixels of the currently decoded pixel X: - * - * 76543210 76543210 76543210 76543210 line_h3 - * 76543210 76543210 76543210 76543210 line_h2 - * 76543210 76543210 76543210 76543210 X line_h1 - */ - - if (x == 0) { - line_h1 = line_h2 = line_h3 = 0; - if (s->i > 0 || (y > 0 && !s->reset[plane][layer - s->dl])) - line_h2 = (long)*(hp - hbpl) << 8; - if (s->i > 1 || (y > 1 && !s->reset[plane][layer - s->dl])) - line_h3 = (long)*(hp - hbpl - hbpl) << 8; - } - - /* - * Another tiny JBIG standard bug: - * - * While implementing the line_h3 handling here, I discovered - * another problem with the ITU-T T.82(1993 E) specification. - * This might be a somewhat pathological case, however. The - * standard is unclear about how a decoder should behave in the - * following situation: - * - * Assume we are in layer 0 and all stripes are single lines - * (L0=1 allowed by table 9). We are now decoding the first (and - * only) line of the third stripe. Assume, the first stripe was - * terminated by SDRST and the second stripe was terminated by - * SDNORM. While decoding the only line of the third stripe with - * the three-line template, we need access to pixels from the - * previous two stripes. We know that the previous stripe - * terminated with SDNROM, so we access the pixel from the - * second stripe. But do we have to replace the pixels from the - * first stripe by background pixels, because this stripe ended - * with SDRST? The standard, especially clause 6.2.5 does never - * mention this case, so the behaviour is undefined here. My - * current implementation remembers only the marker used to - * terminate the previous stripe. In the above example, the - * pixels of the first stripe are accessed despite the fact that - * this stripe ended with SDRST. An alternative (only slightly - * more complicated) implementation would be to remember the end - * marker (SDNORM or SDRST) of the previous two stripes in a - * plane/layer and to act accordingly when accessing the two - * previous lines. What am I supposed to do here? - * - * As the standard is unclear about the correct behaviour in the - * situation of the above example, I strongly suggest to avoid - * the following situation while encoding data with JBIG: - * - * LRLTWO = 0, L0=1 and both SDNORM and SDRST appear in layer 0. - * - * I guess that only a very few if any encoders will switch - * between SDNORM and SDRST, so let us hope that this ambiguity - * in the standard will never cause any interoperability - * problems. - * - * Markus Kuhn -- 1995-04-30 - */ - - /* decode line */ - while (x < hx) { - if ((x & 7) == 0) { - if (x < hbpl * 8 - 8 && - (s->i > 0 || (y > 0 && !s->reset[plane][layer - s->dl]))) { - line_h2 |= *(hp - hbpl + 1); - if (s->i > 1 || (y > 1 && !s->reset[plane][layer - s->dl])) - line_h3 |= *(hp - hbpl - hbpl + 1); - } - } - if (s->options & JBG_LRLTWO) { - /* two line template */ - do { - if (tx) { - if ((unsigned) tx > x) - a = 0; - else if (tx < 8) - a = ((line_h1 >> (tx - 5)) & 0x010); - else { - o = (x - tx) - (x & ~7L); - a = (hp[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 4; - } - assert(tx > 31 || - a == ((line_h1 >> (tx - 5)) & 0x010)); - pix = arith_decode(se, (((line_h2 >> 9) & 0x3e0) | a | - (line_h1 & 0x00f))); - } else - pix = arith_decode(se, (((line_h2 >> 9) & 0x3f0) | - (line_h1 & 0x00f))); - if (pix < 0) - goto leave; - line_h1 = (line_h1 << 1) | pix; - line_h2 <<= 1; - } while ((++x & 7) && x < hx); - } else { - /* three line template */ - do { - if (tx) { - if ((unsigned) tx > x) - a = 0; - else if (tx < 8) - a = ((line_h1 >> (tx - 3)) & 0x004); - else { - o = (x - tx) - (x & ~7L); - a = (hp[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 2; - } - assert(tx > 31 || - a == ((line_h1 >> (tx - 3)) & 0x004)); - pix = arith_decode(se, (((line_h3 >> 7) & 0x380) | - ((line_h2 >> 11) & 0x078) | a | - (line_h1 & 0x003))); - } else - pix = arith_decode(se, (((line_h3 >> 7) & 0x380) | - ((line_h2 >> 11) & 0x07c) | - (line_h1 & 0x003))); - if (pix < 0) - goto leave; - - line_h1 = (line_h1 << 1) | pix; - line_h2 <<= 1; - line_h3 <<= 1; - } while ((++x & 7) && x < hx); - } /* if (s->options & JBG_LRLTWO) */ - *hp++ = line_h1; - } /* while */ - *(hp - 1) <<= hbpl * 8 - hx; - x = 0; - s->pseudo = 1; - } /* for (i = ...) */ - - } else { - - /* - * Decode differential layer - */ - - for (; s->i < hl && y < hy; s->i++, y++) { - - /* adaptive template changes */ - if (x == 0) - for (n = 0; n < s->at_moves; n++) - if (s->at_line[n] == s->i) { - s->tx[plane][layer - s->dl] = s->at_tx[n]; - s->ty[plane][layer - s->dl] = s->at_ty[n]; -#ifdef DEBUG - fprintf(stderr, "ATMOVE: line=%lu, tx=%d, ty=%d.\n", s->i, - s->tx[plane][layer - s->dl], s->ty[plane][layer - s->dl]); -#endif - } - tx = s->tx[plane][layer - s->dl]; - - /* handle lower border of low-resolution image */ - if ((s->i >> 1) >= ll - 1 || (y >> 1) >= ly - 1) - lp1 = lp2; - - /* typical prediction */ - if ((s->options & JBG_TPDON) && s->pseudo) { - if ((s->lntp[plane][layer - s->dl] = arith_decode(se, TPDCX)) < 0) - goto leave; - } - s->pseudo = 0; - - /* - * Layout of the variables line_h1, line_h2, line_h3, which contain - * as bits the high resolution neighbour pixels of the currently - * decoded highres pixel X: - * - * 76543210 76543210 76543210 76543210 line_h3 - * 76543210 76543210 76543210 76543210 line_h2 - * 76543210 76543210 76543210 76543210 X line_h1 - * - * Layout of the variables line_l1, line_l2, line_l3, which contain - * the low resolution pixels near the currently decoded pixel as bits. - * The lowres pixel in which the currently coded highres pixel is - * located is marked as Y: - * - * 76543210 76543210 76543210 76543210 line_l3 - * 76543210 76543210 Y6543210 76543210 line_l2 - * 76543210 76543210 76543210 76543210 line_l1 - */ - - - if (x == 0) { - line_h1 = line_h2 = line_h3 = line_l1 = line_l2 = line_l3 = 0; - if (s->i > 0 || (y > 0 && !s->reset[plane][layer - s->dl])) { - line_h2 = (long)*(hp - hbpl) << 8; - if (s->i > 1 || (y > 1 && !s->reset[plane][layer - s->dl])) - line_h3 = (long)*(hp - hbpl - hbpl) << 8; - } - if (s->i > 1 || (y > 1 && !s->reset[plane][layer-s->dl])) - line_l3 = (long)*(lp2 - lbpl) << 8; - line_l2 = (long)*lp2 << 8; - line_l1 = (long)*lp1 << 8; - } - - /* decode line */ - while (x < hx) { - if ((x & 15) == 0) - if ((x >> 1) < lbpl * 8 - 8) { - line_l1 |= *(lp1 + 1); - line_l2 |= *(lp2 + 1); - if (s->i > 1 || - (y > 1 && !s->reset[plane][layer - s->dl])) - line_l3 |= *(lp2 - lbpl + 1); - } - do { - - assert(hp - (s->lhp[ layer &1][plane] + (stripe * hl + s->i) - * hbpl) == (ptrdiff_t) x >> 3); - assert(lp2 - (s->lhp[(layer-1) &1][plane] + (stripe * ll + (s->i>>1)) - * lbpl) == (ptrdiff_t) x >> 4); - - if ((x & 7) == 0) - if (x < hbpl * 8 - 8) { - if (s->i > 0 || (y > 0 && !s->reset[plane][layer - s->dl])) { - line_h2 |= *(hp + 1 - hbpl); - if (s->i > 1 || (y > 1 && !s->reset[plane][layer - s->dl])) - line_h3 |= *(hp + 1 - hbpl - hbpl); - } - } - do { - if (!s->lntp[plane][layer - s->dl]) - cx = (((line_l3 >> 14) & 0x007) | - ((line_l2 >> 11) & 0x038) | - ((line_l1 >> 8) & 0x1c0)); - if (!s->lntp[plane][layer - s->dl] && - (cx == 0x000 || cx == 0x1ff)) { - /* pixels are typical and have not to be decoded */ - do { - line_h1 = (line_h1 << 1) | (cx & 1); - } while ((++x & 1) && x < hx); - line_h2 <<= 2; line_h3 <<= 2; - } else - do { - - /* deterministic prediction */ - if (s->options & JBG_DPON) - if ((y & 1) == 0) - if ((x & 1) == 0) - /* phase 0 */ - pix = s->dppriv[((line_l3 >> 15) & 0x003) | - ((line_l2 >> 13) & 0x00c) | - ((line_h1 << 4) & 0x010) | - ((line_h2 >> 9) & 0x0e0)]; - else - /* phase 1 */ - pix = s->dppriv[(((line_l3 >> 15) & 0x003) | - ((line_l2 >> 13) & 0x00c) | - ((line_h1 << 4) & 0x030) | - ((line_h2 >> 9) & 0x1c0)) + 256]; - else - if ((x & 1) == 0) - /* phase 2 */ - pix = s->dppriv[(((line_l3 >> 15) & 0x003) | - ((line_l2 >> 13) & 0x00c) | - ((line_h1 << 4) & 0x010) | - ((line_h2 >> 9) & 0x0e0) | - ((line_h3 >> 6) & 0x700)) + 768]; - else - /* phase 3 */ - pix = s->dppriv[(((line_l3 >> 15) & 0x003) | - ((line_l2 >> 13) & 0x00c) | - ((line_h1 << 4) & 0x030) | - ((line_h2 >> 9) & 0x1c0) | - ((line_h3 >> 6) & 0xe00)) + 2816]; - else - pix = 2; - - if (pix & 2) { - if (tx) - cx = ((line_h1 & 0x003) | - (((line_h1 << 2) >> (tx - 3)) & 0x010) | - ((line_h2 >> 12) & 0x00c) | - ((line_h3 >> 10) & 0x020)); - else - cx = ((line_h1 & 0x003) | - ((line_h2 >> 12) & 0x01c) | - ((line_h3 >> 10) & 0x020)); - if (x & 1) - cx |= (((line_l2 >> 8) & 0x0c0) | - ((line_l1 >> 6) & 0x300)) | (1UL << 10); - else - cx |= (((line_l2 >> 9) & 0x0c0) | - ((line_l1 >> 7) & 0x300)); - cx |= (y & 1) << 11; - - pix = arith_decode(se, cx); - if (pix < 0) - goto leave; - } - - line_h1 = (line_h1 << 1) | pix; - line_h2 <<= 1; - line_h3 <<= 1; - - } while ((++x & 1) && x < hx); - line_l1 <<= 1; line_l2 <<= 1; line_l3 <<= 1; - } while ((x & 7) && x < hx); - *hp++ = line_h1; - } while ((x & 15) && x < hx); - ++lp1; - ++lp2; - } /* while */ - x = 0; - - *(hp - 1) <<= hbpl * 8 - hx; - if ((s->i & 1) == 0) { - /* low resolution pixels are used twice */ - lp1 -= lbpl; - lp2 -= lbpl; - } else - s->pseudo = 1; - - } /* for (i = ...) */ - - } - - leave: - - /* save a few local variables */ - s->line_h1 = line_h1; - s->line_h2 = line_h2; - s->line_h3 = line_h3; - s->line_l1 = line_l1; - s->line_l2 = line_l2; - s->line_l3 = line_l3; - s->x = x; - - return se->pscd_ptr - data; -} - - -/* - * Provide to the decoder a new BIE fragment of len bytes starting at data. - * - * Unless cnt is NULL, *cnt will contain the number of actually read bytes - * on return. - * - * Normal return values: - * - * JBG_EAGAIN All data bytes provided so far have been processed - * (*cnt == len) but the end of the data stream has - * not yet been recognized. Call the function again - * with additional BIE bytes. - * JBG_EOK The function has reached the end of a and - * a full image has been decoded. The function can - * be called again with data from the next BIE, if - * there exists one, in order to get to a higher - * resolution layer. The remaining len - *cnt bytes - * of the previous data block will then have to passed - * to this function again if len > *cnt. - * JBG_EOK_INTR Parsing the BIE has been interrupted as had been - * requested by a jbg_dec_maxsize() specification. - * This function can be called again with the - * rest of the BIE to continue the decoding process. - * The remaining len - *cnt bytes of the previous - * data block will then have to be passed to this - * function again if len > *cnt. - * - * Any other return value indicates that the decoding process was - * aborted by a serious problem and the only function you can then - * still call is jbg_dec_free() in order to remove the mess, and - * jbg85_strerror() to find out what to tell the user. (Looking at the - * least significant bits of the return value will provide additional - * information by identifying which test exactly has failed.) - */ -int jbg_dec_in(struct jbg_dec_state *s, unsigned char *data, size_t len, - size_t *cnt) -{ - int i, j, required_length; - unsigned long x, y; - unsigned long is[3], ie[3]; - size_t dummy_cnt; - - if (!cnt) cnt = &dummy_cnt; - *cnt = 0; - if (len < 1) return JBG_EAGAIN; - - /* read in 20-byte BIH */ - if (s->bie_len < 20) { - while (s->bie_len < 20 && *cnt < len) - s->buffer[s->bie_len++] = data[(*cnt)++]; - if (s->bie_len < 20) - return JBG_EAGAIN; - /* test whether this looks like a valid JBIG header at all */ - if (s->buffer[1] < s->buffer[0]) - return JBG_EINVAL | 1; - if (s->buffer[3] != 0) return JBG_EINVAL | 2; /* padding != 0 */ - if ((s->buffer[18] & 0xf0) != 0) return JBG_EINVAL | 3; /* padding != 0 */ - if ((s->buffer[19] & 0x80) != 0) return JBG_EINVAL | 4; /* padding != 0 */ - if (s->buffer[0] != s->d + 1) - return JBG_ENOCONT | 1; - s->dl = s->buffer[0]; - s->d = s->buffer[1]; - if (s->dl == 0) - s->planes = s->buffer[2]; - else - if (s->planes != s->buffer[2]) - return JBG_ENOCONT | 2; - x = (((long) s->buffer[ 4] << 24) | ((long) s->buffer[ 5] << 16) | - ((long) s->buffer[ 6] << 8) | (long) s->buffer[ 7]); - y = (((long) s->buffer[ 8] << 24) | ((long) s->buffer[ 9] << 16) | - ((long) s->buffer[10] << 8) | (long) s->buffer[11]); - if (s->dl != 0 && ((s->xd << (s->d - s->dl + 1)) != x && - (s->yd << (s->d - s->dl + 1)) != y)) - return JBG_ENOCONT | 3; - s->xd = x; - s->yd = y; - s->l0 = (((long) s->buffer[12] << 24) | ((long) s->buffer[13] << 16) | - ((long) s->buffer[14] << 8) | (long) s->buffer[15]); - /* ITU-T T.85 trick not directly supported by decoder; for full - * T.85 compatibility with respect to all NEWLEN marker scenarios, - * preprocess BIE with jbg_newlen() before passing it to the decoder, - * or consider using the decoder found in jbig85.c instead. */ - if (s->yd == 0xffffffff) - return JBG_EIMPL | 1; - if (!s->planes) return JBG_EINVAL | 5; - if (!s->xd) return JBG_EINVAL | 6; - if (!s->yd) return JBG_EINVAL | 7; - if (!s->l0) return JBG_EINVAL | 8; - /* prevent uint32 overflow: s->l0 * 2 ^ s->d < 2 ^ 32 */ - if (s->d > 31) - return JBG_EIMPL | 2; - if ((s->d != 0 && s->l0 >= (1UL << (32 - s->d)))) - return JBG_EIMPL | 3; - s->mx = s->buffer[16]; - if (s->mx > 127) - return JBG_EINVAL | 9; - s->my = s->buffer[17]; -#if 0 - if (s->my > 0) - return JBG_EIMPL | 4; -#endif - s->order = s->buffer[18]; - if (iindex[s->order & 7][0] < 0) - return JBG_EINVAL | 10; - /* HITOLO and SEQ currently not yet implemented */ - if (s->dl != s->d && (s->order & JBG_HITOLO || s->order & JBG_SEQ)) - return JBG_EIMPL | 5; - s->options = s->buffer[19]; - - /* calculate number of stripes that will be required */ - s->stripes = jbg_stripes(s->l0, s->yd, s->d); - - /* some initialization */ - s->ii[iindex[s->order & 7][STRIPE]] = 0; - s->ii[iindex[s->order & 7][LAYER]] = s->dl; - s->ii[iindex[s->order & 7][PLANE]] = 0; - if (s->dl == 0) { - s->s = (struct jbg_ardec_state **) - checked_malloc(s->planes, sizeof(struct jbg_ardec_state *)); - s->tx = (int **) checked_malloc(s->planes, sizeof(int *)); - s->ty = (int **) checked_malloc(s->planes, sizeof(int *)); - s->reset = (int **) checked_malloc(s->planes, sizeof(int *)); - s->lntp = (int **) checked_malloc(s->planes, sizeof(int *)); - s->lhp[0] = (unsigned char **) - checked_malloc(s->planes, sizeof(unsigned char *)); - s->lhp[1] = (unsigned char **) - checked_malloc(s->planes, sizeof(unsigned char *)); - for (i = 0; i < s->planes; i++) { - s->s[i] = (struct jbg_ardec_state *) - checked_malloc(s->d - s->dl + 1, sizeof(struct jbg_ardec_state)); - s->tx[i] = (int *) checked_malloc(s->d - s->dl + 1, sizeof(int)); - s->ty[i] = (int *) checked_malloc(s->d - s->dl + 1, sizeof(int)); - s->reset[i] = (int *) checked_malloc(s->d - s->dl + 1, sizeof(int)); - s->lntp[i] = (int *) checked_malloc(s->d - s->dl + 1, sizeof(int)); - s->lhp[ s->d & 1][i] = (unsigned char *) - checked_malloc(s->yd, jbg_ceil_half(s->xd, 3)); - s->lhp[(s->d-1) & 1][i] = (unsigned char *) - checked_malloc(jbg_ceil_half(s->yd, 1), jbg_ceil_half(s->xd, 1+3)); - } - } else { - for (i = 0; i < s->planes; i++) { - s->s[i] = (struct jbg_ardec_state *) - checked_realloc(s->s[i], s->d - s->dl + 1, - sizeof(struct jbg_ardec_state)); - s->tx[i] = (int *) checked_realloc(s->tx[i], - s->d - s->dl + 1, sizeof(int)); - s->ty[i] = (int *) checked_realloc(s->ty[i], - s->d - s->dl + 1, sizeof(int)); - s->reset[i] = (int *) checked_realloc(s->reset[i], - s->d - s->dl + 1, sizeof(int)); - s->lntp[i] = (int *) checked_realloc(s->lntp[i], - s->d - s->dl + 1, sizeof(int)); - s->lhp[ s->d & 1][i] = (unsigned char *) - checked_realloc(s->lhp[ s->d & 1][i], - s->yd, jbg_ceil_half(s->xd, 3)); - s->lhp[(s->d-1) & 1][i] = (unsigned char *) - checked_realloc(s->lhp[(s->d-1) & 1][i], - jbg_ceil_half(s->yd, 1), jbg_ceil_half(s->xd, 1+3)); - } - } - for (i = 0; i < s->planes; i++) - for (j = 0; j <= s->d - s->dl; j++) - arith_decode_init(s->s[i] + j, 0); - if (s->dl == 0 || (s->options & JBG_DPON && !(s->options & JBG_DPPRIV))) - s->dppriv = jbg_dptable; - s->comment_skip = 0; - s->buf_len = 0; - s->x = 0; - s->i = 0; - s->pseudo = 1; - s->at_moves = 0; - } - - /* read in DPTABLE */ - if (s->bie_len < 20 + 1728 && - (s->options & (JBG_DPON | JBG_DPPRIV | JBG_DPLAST)) == - (JBG_DPON | JBG_DPPRIV)) { - assert(s->bie_len >= 20); - while (s->bie_len < 20 + 1728 && *cnt < len) - s->buffer[s->bie_len++ - 20] = data[(*cnt)++]; - if (s->bie_len < 20 + 1728) - return JBG_EAGAIN; - if (!s->dppriv || s->dppriv == jbg_dptable) - s->dppriv = (char *) checked_malloc(1728, sizeof(char)); - jbg_dppriv2int(s->dppriv, s->buffer); - } - - /* - * BID processing loop - */ - - while (*cnt < len) { - - /* process floating marker segments */ - - /* skip COMMENT contents */ - if (s->comment_skip) { - if (s->comment_skip <= len - *cnt) { - *cnt += s->comment_skip; - s->comment_skip = 0; - } else { - s->comment_skip -= len - *cnt; - *cnt = len; - } - continue; - } - - /* load complete marker segments into s->buffer for processing */ - if (s->buf_len > 0) { - assert(s->buffer[0] == MARKER_ESC); - while (s->buf_len < 2 && *cnt < len) - s->buffer[s->buf_len++] = data[(*cnt)++]; - if (s->buf_len < 2) continue; - switch (s->buffer[1]) { - case MARKER_COMMENT: required_length = 6; break; - case MARKER_ATMOVE: required_length = 8; break; - case MARKER_NEWLEN: required_length = 6; break; - case MARKER_ABORT: - case MARKER_SDNORM: - case MARKER_SDRST: required_length = 2; break; - case MARKER_STUFF: - /* forward stuffed 0xff to arithmetic decoder */ - s->buf_len = 0; - decode_pscd(s, s->buffer, 2); - continue; - default: - return JBG_EMARKER; - } - while (s->buf_len < required_length && *cnt < len) - s->buffer[s->buf_len++] = data[(*cnt)++]; - if (s->buf_len < required_length) continue; - /* now the buffer is filled with exactly one marker segment */ - switch (s->buffer[1]) { - case MARKER_COMMENT: - s->comment_skip = - (((long) s->buffer[2] << 24) | ((long) s->buffer[3] << 16) | - ((long) s->buffer[4] << 8) | (long) s->buffer[5]); - break; - case MARKER_ATMOVE: - if (s->at_moves < JBG_ATMOVES_MAX) { - s->at_line[s->at_moves] = - (((long) s->buffer[2] << 24) | ((long) s->buffer[3] << 16) | - ((long) s->buffer[4] << 8) | (long) s->buffer[5]); - s->at_tx[s->at_moves] = (signed char) s->buffer[6]; - s->at_ty[s->at_moves] = s->buffer[7]; - if (s->at_tx[s->at_moves] < - (int) s->mx || - s->at_tx[s->at_moves] > (int) s->mx || - s->at_ty[s->at_moves] > (int) s->my || - (s->at_ty[s->at_moves] == 0 && s->at_tx[s->at_moves] < 0)) - return JBG_EINVAL | 11; - if (s->at_ty[s->at_moves] != 0) - return JBG_EIMPL | 6; - s->at_moves++; - } else - return JBG_EIMPL | 7; /* more than JBG_ATMOVES_MAX ATMOVES */ - break; - case MARKER_NEWLEN: - y = (((long) s->buffer[2] << 24) | ((long) s->buffer[3] << 16) | - ((long) s->buffer[4] << 8) | (long) s->buffer[5]); - if (y > s->yd) return JBG_EINVAL | 12; - if (!(s->options & JBG_VLENGTH)) return JBG_EINVAL | 13; - s->yd = y; - /* calculate again number of stripes that will be required */ - s->stripes = jbg_stripes(s->l0, s->yd, s->d); - break; - case MARKER_ABORT: - return JBG_EABORT; - - case MARKER_SDNORM: - case MARKER_SDRST: - /* decode final pixels based on trailing zero bytes */ - decode_pscd(s, s->buffer, 2); - - arith_decode_init(s->s[s->ii[iindex[s->order & 7][PLANE]]] + - s->ii[iindex[s->order & 7][LAYER]] - s->dl, - s->ii[iindex[s->order & 7][STRIPE]] != s->stripes - 1 - && s->buffer[1] != MARKER_SDRST); - - s->reset[s->ii[iindex[s->order & 7][PLANE]]] - [s->ii[iindex[s->order & 7][LAYER]] - s->dl] = - (s->buffer[1] == MARKER_SDRST); - - /* prepare for next SDE */ - s->x = 0; - s->i = 0; - s->pseudo = 1; - s->at_moves = 0; - - /* increment layer/stripe/plane loop variables */ - /* start and end value for each loop: */ - is[iindex[s->order & 7][STRIPE]] = 0; - ie[iindex[s->order & 7][STRIPE]] = s->stripes - 1; - is[iindex[s->order & 7][LAYER]] = s->dl; - ie[iindex[s->order & 7][LAYER]] = s->d; - is[iindex[s->order & 7][PLANE]] = 0; - ie[iindex[s->order & 7][PLANE]] = s->planes - 1; - i = 2; /* index to innermost loop */ - do { - j = 0; /* carry flag */ - if (++s->ii[i] > ie[i]) { - /* handling overflow of loop variable */ - j = 1; - if (i > 0) - s->ii[i] = is[i]; - } - } while (--i >= 0 && j); - - s->buf_len = 0; - - /* check whether this have been all SDEs */ - if (j) { -#ifdef DEBUG - fprintf(stderr, "This was the final SDE in this BIE, " - "%d bytes left.\n", len - *cnt); -#endif - s->bie_len = 0; - return JBG_EOK; - } - - /* check whether we have to abort because of xmax/ymax */ - if (iindex[s->order & 7][LAYER] == 0 && i < 0) { - /* LAYER is the outermost loop and we have just gone to next layer */ - if (jbg_ceil_half(s->xd, s->d - s->ii[0]) > s->xmax || - jbg_ceil_half(s->yd, s->d - s->ii[0]) > s->ymax) { - s->xmax = 4294967295UL; - s->ymax = 4294967295UL; - return JBG_EOK_INTR; - } - if (s->ii[0] > (unsigned long) s->dmax) { - s->dmax = 256; - return JBG_EOK_INTR; - } - } - - break; - } - s->buf_len = 0; - - } else if (data[*cnt] == MARKER_ESC) - s->buffer[s->buf_len++] = data[(*cnt)++]; - - else { - - /* we have found PSCD bytes */ - *cnt += decode_pscd(s, data + *cnt, len - *cnt); - if (*cnt < len && data[*cnt] != 0xff) { -#ifdef DEBUG - fprintf(stderr, "PSCD was longer than expected, unread bytes " - "%02x %02x %02x %02x ...\n", data[*cnt], data[*cnt+1], - data[*cnt+2], data[*cnt+3]); -#endif - return JBG_EINVAL | 14; - } - - } - } /* of BID processing loop 'while (*cnt < len) ...' */ - - return JBG_EAGAIN; -} - - -/* - * After jbg_dec_in() returned JBG_EOK or JBG_EOK_INTR, you can call this - * function in order to find out the width of the image. Returns 0 if - * there is no image available yet. - */ -unsigned long jbg_dec_getwidth(const struct jbg_dec_state *s) -{ - if (s->d < 0) - return 0; - if (iindex[s->order & 7][LAYER] == 0) { - if (s->ii[0] < 1) - return 0; - else - return jbg_ceil_half(s->xd, s->d - (s->ii[0] - 1)); - } - - return s->xd; -} - - -/* - * After jbg_dec_in() returned JBG_EOK or JBG_EOK_INTR, you can call this - * function in order to find out the height of the image. Returns 0 if - * there is no image available yet. - */ -unsigned long jbg_dec_getheight(const struct jbg_dec_state *s) -{ - if (s->d < 0) - return 0; - if (iindex[s->order & 7][LAYER] == 0) { - if (s->ii[0] < 1) - return 0; - else - return jbg_ceil_half(s->yd, s->d - (s->ii[0] - 1)); - } - - return s->yd; -} - - -/* - * After jbg_dec_in() returned JBG_EOK or JBG_EOK_INTR, you can call this - * function in order to get a pointer to the image. Returns NULL if - * there is no image available yet. - */ -unsigned char *jbg_dec_getimage(const struct jbg_dec_state *s, int plane) -{ - if (s->d < 0) - return NULL; - if (iindex[s->order & 7][LAYER] == 0) { - if (s->ii[0] < 1) - return NULL; - else - return s->lhp[(s->ii[0] - 1) & 1][plane]; - } - - return s->lhp[s->d & 1][plane]; -} - - -/* - * After jbg_dec_in() returned JBG_EOK or JBG_EOK_INTR, you can call - * this function in order to find out the size in bytes of one - * bitplane of the image. - */ -unsigned long jbg_dec_getsize(const struct jbg_dec_state *s) -{ - if (s->d < 0) - return 0; - if (iindex[s->order & 7][LAYER] == 0) { - if (s->ii[0] < 1) - return 0; - else - return - jbg_ceil_half(s->xd, s->d - (s->ii[0] - 1) + 3) * /* overflow risk? */ - jbg_ceil_half(s->yd, s->d - (s->ii[0] - 1)); - } - - return jbg_ceil_half(s->xd, 3) * s->yd; -} - - -/* - * After jbg_dec_in() returned JBG_EOK or JBG_EOK_INTR, you can call - * this function in order to find out the size of the image that you - * can retrieve with jbg_merge_planes(). - */ -unsigned long jbg_dec_getsize_merged(const struct jbg_dec_state *s) -{ - if (s->d < 0) - return 0; - if (iindex[s->order & 7][LAYER] == 0) { - if (s->ii[0] < 1) - return 0; - else - return - jbg_ceil_half(s->xd, s->d - (s->ii[0] - 1)) * /* overflow risk? */ - jbg_ceil_half(s->yd, s->d - (s->ii[0] - 1)) * - ((s->planes + 7) / 8); - } - - return s->xd * s->yd * ((s->planes + 7) / 8); -} - - -/* - * The destructor function which releases any resources obtained by the - * other decoder functions. - */ -void jbg_dec_free(struct jbg_dec_state *s) -{ - int i; - - if (s->d < 0 || s->s == NULL) - return; - s->d = -2; - - for (i = 0; i < s->planes; i++) { - checked_free(s->s[i]); - checked_free(s->tx[i]); - checked_free(s->ty[i]); - checked_free(s->reset[i]); - checked_free(s->lntp[i]); - checked_free(s->lhp[0][i]); - checked_free(s->lhp[1][i]); - } - - checked_free(s->s); - checked_free(s->tx); - checked_free(s->ty); - checked_free(s->reset); - checked_free(s->lntp); - checked_free(s->lhp[0]); - checked_free(s->lhp[1]); - if (s->dppriv && s->dppriv != jbg_dptable) - checked_free(s->dppriv); - - s->s = NULL; - - return; -} - - -/* - * Split bigendian integer pixel field into separate bit planes. In the - * src array, every pixel is represented by a ((has_planes + 7) / 8) byte - * long word, most significant byte first. While has_planes describes - * the number of used bits per pixel in the source image, encode_plane - * is the number of most significant bits among those that we - * actually transfer to dest. - */ -void jbg_split_planes(unsigned long x, unsigned long y, int has_planes, - int encode_planes, - const unsigned char *src, unsigned char **dest, - int use_graycode) -{ - unsigned long bpl = jbg_ceil_half(x, 3); /* bytes per line in dest plane */ - unsigned long line, i; - unsigned k = 8; - int p; - unsigned prev; /* previous *src byte shifted by 8 bit to the left */ - register int bits, msb = has_planes - 1; - int bitno; - - /* sanity checks */ - if (encode_planes > has_planes) - encode_planes = has_planes; - use_graycode = use_graycode != 0 && encode_planes > 1; - - for (p = 0; p < encode_planes; p++) - memset(dest[p], 0, bpl * y); - - for (line = 0; line < y; line++) { /* lines loop */ - for (i = 0; i * 8 < x; i++) { /* dest bytes loop */ - for (k = 0; k < 8 && i * 8 + k < x; k++) { /* pixel loop */ - prev = 0; - for (p = 0; p < encode_planes; p++) { /* bit planes loop */ - /* calculate which bit in *src do we want */ - bitno = (msb - p) & 7; - /* put this bit with its left neighbor right adjusted into bits */ - bits = (prev | *src) >> bitno; - /* go to next *src byte, but keep old */ - if (bitno == 0) - prev = *src++ << 8; - /* make space for inserting new bit */ - dest[p][bpl * line + i] <<= 1; - /* insert bit, if requested apply Gray encoding */ - dest[p][bpl * line + i] |= (bits ^ (use_graycode & (bits>>1))) & 1; - /* - * Theorem: Let b(n),...,b(1),b(0) be the digits of a - * binary word and let g(n),...,g(1),g(0) be the digits of the - * corresponding Gray code word, then g(i) = b(i) xor b(i+1). - */ - } - /* skip unused *src bytes */ - for (;p < has_planes; p++) - if (((msb - p) & 7) == 0) - src++; - } - } - for (p = 0; p < encode_planes; p++) /* right padding loop */ - dest[p][bpl * (line + 1) - 1] <<= 8 - k; - } - - return; -} - -/* - * Merge the separate bit planes decoded by the JBIG decoder into an - * integer pixel field. This is essentially the counterpart to - * jbg_split_planes(). - */ -void jbg_dec_merge_planes(const struct jbg_dec_state *s, int use_graycode, - void (*data_out)(unsigned char *start, size_t len, - void *file), void *file) -{ -#define BUFLEN 4096 - int bpp; - unsigned long bpl, line, i; - unsigned k = 8; - int p; - unsigned char buf[BUFLEN]; - unsigned char *bp = buf; - unsigned char **src; - unsigned long x, y; - unsigned v; - - /* sanity check */ - use_graycode = use_graycode != 0; - - x = jbg_dec_getwidth(s); - y = jbg_dec_getheight(s); - if (x == 0 || y == 0) - return; - bpp = (s->planes + 7) / 8; /* bytes per pixel in dest image */ - bpl = jbg_ceil_half(x, 3); /* bytes per line in src plane */ - - if (iindex[s->order & 7][LAYER] == 0) - if (s->ii[0] < 1) - return; - else - src = s->lhp[(s->ii[0] - 1) & 1]; - else - src = s->lhp[s->d & 1]; - - for (line = 0; line < y; line++) { /* lines loop */ - for (i = 0; i * 8 < x; i++) { /* src bytes loop */ - for (k = 0; k < 8 && i * 8 + k < x; k++) { /* pixel loop */ - v = 0; - for (p = 0; p < s->planes;) { /* dest bytes loop */ - do { - v = (v << 1) | - (((src[p][bpl * line + i] >> (7 - k)) & 1) ^ - (use_graycode & v)); - } while ((s->planes - ++p) & 7); - *bp++ = v; - if (bp - buf == BUFLEN) { - data_out(buf, BUFLEN, file); - bp = buf; - } - } - } - } - } - - if (bp - buf > 0) - data_out(buf, bp - buf, file); - - return; -} - - -/* - * Given a pointer p to the first byte of either a marker segment or a - * PSCD, as well as the length len of the remaining data, return - * either the pointer to the first byte of the next marker segment or - * PSCD, or p+len if this was the last one, or NULL if some error was - * encountered. Possible errors are: - * - * - not enough bytes left for complete marker segment - * - no marker segment terminates the PSCD - * - unknown marker code encountered - * - */ -unsigned char *jbg_next_pscdms(unsigned char *p, size_t len) -{ - unsigned char *pp; - unsigned long l; - - if (len < 2) - return NULL; /* not enough bytes left for complete marker segment */ - - if (p[0] != MARKER_ESC || p[1] == MARKER_STUFF) { - do { - while (p[0] == MARKER_ESC && p[1] == MARKER_STUFF) { - p += 2; - len -= 2; - if (len < 2) - return NULL; /* not enough bytes left for complete marker segment */ - } - assert(len >= 2); - pp = (unsigned char *) memchr(p, MARKER_ESC, len - 1); - if (!pp) - return NULL; /* no marker segment terminates the PSCD */ - l = pp - p; - assert(l < len); - p += l; - len -= l; - } while (p[1] == MARKER_STUFF); - } else { - switch (p[1]) { - case MARKER_SDNORM: - case MARKER_SDRST: - case MARKER_ABORT: - return p + 2; - case MARKER_NEWLEN: - if (len < 6) - return NULL; /* not enough bytes left for complete marker segment */ - return p + 6; - case MARKER_ATMOVE: - if (len < 8) - return NULL; /* not enough bytes left for complete marker segment */ - return p + 8; - case MARKER_COMMENT: - if (len < 6) - return NULL; /* not enough bytes left for complete marker segment */ - l = (((long) p[2] << 24) | ((long) p[3] << 16) | - ((long) p[4] << 8) | (long) p[5]); - if (len - 6 < l) - return NULL; /* not enough bytes left for complete marker segment */ - return p + 6 + l; - default: - /* unknown marker sequence encountered */ - return NULL; - } - } - - return p; -} - - -/* - * Scan a complete BIE for a NEWLEN marker segment, then read the new - * YD value found in it and use it to overwrite the one in the BIE - * header. Use this procedure if a BIE initially declares an - * unreasonably high provisional YD value (e.g., 0xffffffff) or - * depends on the fact that section 6.2.6.2 of ITU-T T.82 says that a - * NEWLEN marker segment "could refer to a line in the immediately - * preceding stripe due to an unexpected termination of the image or - * the use of only such stripe". ITU-T.85 explicitely suggests the - * use of this for fax machines that start transmission before having - * encountered the end of the page. None of this is necessary for - * BIEs produced by JBIG-KIT, which normally does not use NEWLEN. - */ -int jbg_newlen(unsigned char *bie, size_t len) -{ - unsigned char *p = bie + 20; - int i; - - if (len < 20) - return JBG_EAGAIN; - if ((bie[19] & (JBG_DPON | JBG_DPPRIV | JBG_DPLAST)) - == (JBG_DPON | JBG_DPPRIV)) - p += 1728; /* skip DPTABLE */ - if (p >= bie + len) - return JBG_EAGAIN; - - while ((p = jbg_next_pscdms(p, len - (p - bie)))) { - if (p == bie + len) - return JBG_EOK; - else if (p[0] == MARKER_ESC) - switch (p[1]) { - case MARKER_NEWLEN: - /* overwrite YD in BIH with YD from NEWLEN */ - for (i = 0; i < 4; i++) { - bie[8+i] = p[2+i]; - } - return JBG_EOK; - case MARKER_ABORT: - return JBG_EABORT; - } - } - return JBG_EINVAL | 0; -} diff -Nru c2esp-26/jbig.h c2esp-27~rc1/jbig.h --- c2esp-26/jbig.h 2008-09-05 15:06:02.000000000 +0000 +++ c2esp-27~rc1/jbig.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,233 +0,0 @@ -/* - * Header file for the portable JBIG compression library - * - * Copyright 1995-2008 -- Markus Kuhn -- http://www.cl.cam.ac.uk/~mgk25/ - * - * $Id: jbig.h,v 1.4 2008/09/05 15:05:54 rick Exp $ - */ - -#ifndef JBG_H -#define JBG_H - -#include -#include "jbig_ar.h" - -/* - * JBIG-KIT version number - */ - -#define JBG_VERSION "2.0" - -/* - * JBIG-KIT licence agreement reference code: - * If you use JBIG-KIT under a commercial licence, please replace - * below the letters GPL with the reference code that you received - * with your licence agreement. (This code is typically a letter "A" - * followed by four decimal digits, e.g. "A1234".) - */ - -#define JBG_LICENCE "GPL" - -/* - * Buffer block for SDEs which are temporarily stored by encoder - */ - -#define JBG_BUFSIZE 4000 - -struct jbg_buf { - unsigned char d[JBG_BUFSIZE]; /* one block of a buffer list */ - int len; /* length of the data in this block */ - struct jbg_buf *next; /* pointer to next block */ - struct jbg_buf *previous; /* pointer to previous block * - * (unused in freelist) */ - struct jbg_buf *last; /* only used in list head: final block of list */ - struct jbg_buf **free_list; /* pointer to pointer to head of free list */ -}; - -/* - * Maximum number of ATMOVEs per stripe that decoder can handle - */ - -#define JBG_ATMOVES_MAX 64 - -/* - * Option and order flags - */ - -#define JBG_HITOLO 0x08 -#define JBG_SEQ 0x04 -#define JBG_ILEAVE 0x02 -#define JBG_SMID 0x01 - -#define JBG_LRLTWO 0x40 -#define JBG_VLENGTH 0x20 -#define JBG_TPDON 0x10 -#define JBG_TPBON 0x08 -#define JBG_DPON 0x04 -#define JBG_DPPRIV 0x02 -#define JBG_DPLAST 0x01 - -/* encoding options that will not be indicated in the header */ - -#define JBG_DELAY_AT 0x100 /* Delay ATMOVE until the first line of the next - * stripe. Option available for compatibility - * with conformance test example in clause 7.2. */ - -#define JBG_SDRST 0x200 /* Use SDRST instead of SDNORM. This option is - * there for anyone who needs to generate - * test data that covers the SDRST cases. */ - -/* - * Possible error code return values - */ - -#define JBG_EOK (0 << 4) -#define JBG_EOK_INTR (1 << 4) -#define JBG_EAGAIN (2 << 4) -#define JBG_ENOMEM (3 << 4) -#define JBG_EABORT (4 << 4) -#define JBG_EMARKER (5 << 4) -#define JBG_EINVAL (6 << 4) -#define JBG_EIMPL (7 << 4) -#define JBG_ENOCONT (8 << 4) - -/* - * Status of a JBIG encoder - */ - -struct jbg_enc_state { - int d; /* resolution layer of the input image */ - unsigned long xd, yd; /* size of the input image (resolution layer d) */ - unsigned long yd1; /* BIH announced height of image, use yd1 != yd to - emulate T.85-style NEWLEN height updates for tests */ - int planes; /* number of different bitmap planes */ - int dl; /* lowest resolution layer in the next BIE */ - int dh; /* highest resolution layer in the next BIE */ - unsigned long l0; /* number of lines per stripe at lowest * - * resolution layer 0 */ - unsigned long stripes; /* number of stripes required (determ. by l0) */ - unsigned char **lhp[2]; /* pointers to lower/higher resolution images */ - int *highres; /* index [plane] of highres image in lhp[] */ - int order; /* SDE ordering parameters */ - int options; /* encoding parameters */ - unsigned mx, my; /* maximum ATMOVE window size */ - int *tx; /* array [plane] with x-offset of adaptive template pixel */ - char *dppriv; /* optional private deterministic prediction table */ - char *res_tab; /* table for the resolution reduction algorithm */ - struct jbg_buf ****sde; /* array [stripe][layer][plane] pointers to * - * buffers for stored SDEs */ - struct jbg_arenc_state *s; /* array [planes] for arithm. encoder status */ - struct jbg_buf *free_list; /* list of currently unused SDE block buffers */ - void (*data_out)(unsigned char *start, size_t len, void *file); - /* data write callback */ - void *file; /* parameter passed to data_out() */ - char *tp; /* buffer for temp. values used by diff. typical prediction */ - unsigned char *comment; /* content of comment marker segment to be added - at next opportunity (will be reset to NULL - as soon as comment has been written) */ - unsigned long comment_len; /* length of data pointed to by comment */ -}; - - -/* - * Status of a JBIG decoder - */ - -struct jbg_dec_state { - /* data from BIH */ - int d; /* resolution layer of the full image */ - int dl; /* first resolution layer in this BIE */ - unsigned long xd, yd; /* size of the full image (resolution layer d) */ - int planes; /* number of different bitmap planes */ - unsigned long l0; /* number of lines per stripe at lowest * - * resolution layer 0 */ - unsigned long stripes; /* number of stripes required (determ. by l0) */ - int order; /* SDE ordering parameters */ - int options; /* encoding parameters */ - int mx, my; /* maximum ATMOVE window size */ - char *dppriv; /* optional private deterministic prediction table */ - - /* loop variables */ - unsigned long ii[3]; /* current stripe, layer, plane (outer loop first) */ - - /* - * Pointers to array [planes] of lower/higher resolution images. - * lhp[d & 1] contains image of layer d. - */ - unsigned char **lhp[2]; - - /* status information */ - int **tx, **ty; /* array [plane][layer-dl] with x,y-offset of AT pixel */ - struct jbg_ardec_state **s; /* array [plane][layer-dl] for arithmetic * - * decoder status */ - int **reset; /* array [plane][layer-dl] remembers if previous stripe * - * in that plane/resolution ended with SDRST. */ - unsigned long bie_len; /* number of bytes read so far */ - unsigned char buffer[20]; /* used to store BIH or marker segments fragm. */ - int buf_len; /* number of bytes in buffer */ - unsigned long comment_skip; /* remaining bytes of a COMMENT segment */ - unsigned long x; /* x position of next pixel in current SDE */ - unsigned long i; /* line in current SDE (first line of each stripe is 0) */ - int at_moves; /* number of AT moves in the current stripe */ - unsigned long at_line[JBG_ATMOVES_MAX]; /* lines at which an * - * AT move will happen */ - int at_tx[JBG_ATMOVES_MAX], at_ty[JBG_ATMOVES_MAX]; /* ATMOVE offsets in * - * current stripe */ - unsigned long line_h1, line_h2, line_h3; /* variables of decode_pscd */ - unsigned long line_l1, line_l2, line_l3; - int pseudo; /* flag for TPBON/TPDON: next pixel is pseudo pixel */ - int **lntp; /* flag [plane][layer-dl] for TP: line is not typical */ - - unsigned long xmax, ymax; /* if possible abort before image gets * - * larger than this size */ - int dmax; /* abort after this layer */ -}; - - -/* some macros (too trivial for a function) */ - -#define jbg_dec_getplanes(s) ((s)->planes) - - -/* function prototypes */ - -void jbg_enc_init(struct jbg_enc_state *s, unsigned long x, unsigned long y, - int planes, unsigned char **p, - void (*data_out)(unsigned char *start, size_t len, - void *file), - void *file); -int jbg_enc_lrlmax(struct jbg_enc_state *s, unsigned long mwidth, - unsigned long mheight); -void jbg_enc_layers(struct jbg_enc_state *s, int d); -int jbg_enc_lrange(struct jbg_enc_state *s, int dl, int dh); -void jbg_enc_options(struct jbg_enc_state *s, int order, int options, - unsigned long l0, int mx, int my); -void jbg_enc_out(struct jbg_enc_state *s); -void jbg_enc_free(struct jbg_enc_state *s); - -void jbg_dec_init(struct jbg_dec_state *s); -void jbg_dec_maxsize(struct jbg_dec_state *s, unsigned long xmax, - unsigned long ymax); -int jbg_dec_in(struct jbg_dec_state *s, unsigned char *data, size_t len, - size_t *cnt); -unsigned long jbg_dec_getwidth(const struct jbg_dec_state *s); -unsigned long jbg_dec_getheight(const struct jbg_dec_state *s); -unsigned char *jbg_dec_getimage(const struct jbg_dec_state *s, int plane); -unsigned long jbg_dec_getsize(const struct jbg_dec_state *s); -void jbg_dec_merge_planes(const struct jbg_dec_state *s, int use_graycode, - void (*data_out)(unsigned char *start, size_t len, - void *file), void *file); -unsigned long jbg_dec_getsize_merged(const struct jbg_dec_state *s); -void jbg_dec_free(struct jbg_dec_state *s); - -const char *jbg_strerror(int errnum); -void jbg_int2dppriv(unsigned char *dptable, const char *internal); -void jbg_dppriv2int(char *internal, const unsigned char *dptable); -unsigned long jbg_ceil_half(unsigned long x, int n); -void jbg_split_planes(unsigned long x, unsigned long y, int has_planes, - int encode_planes, - const unsigned char *src, unsigned char **dest, - int use_graycode); -int jbg_newlen(unsigned char *bie, size_t len); - -#endif /* JBG_H */ diff -Nru c2esp-26/jbig85.c c2esp-27~rc1/jbig85.c --- c2esp-26/jbig85.c 2008-08-30 20:16:20.000000000 +0000 +++ c2esp-27~rc1/jbig85.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1102 +0,0 @@ -/* - * T.85 "light" version of the portable JBIG image compression library - * - * Copyright 1995-2008 -- Markus Kuhn -- http://www.cl.cam.ac.uk/~mgk25/ - * - * $Id: jbig85.c 1303 2008-08-30 20:16:20Z mgk25 $ - * - * This module implements a portable standard C encoder and decoder - * using the JBIG1 lossless bi-level image compression algorithm - * specified in International Standard ISO 11544:1993 and - * ITU-T Recommendation T.82. See the file jbig.txt for usage - * instructions and application examples. - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * If you want to use this program under different license conditions, - * then contact the author for an arrangement. - * - * It is possible that certain products which can be built using this - * software module might form inventions protected by patent rights in - * some countries (e.g., by patents about arithmetic coding algorithms - * owned by IBM and AT&T in the USA). Provision of this software by the - * author does NOT include any licences for any patents. In those - * countries where a patent licence is required for certain applications - * of this software module, you will have to obtain such a licence - * yourself. - */ - -#ifdef DEBUG -#include -#else -#define NDEBUG -#endif - -#include -#include -#include - -#include "jbig85.h" - -#define TPB2CX 0x195 /* contexts for TP special pixels */ -#define TPB3CX 0x0e5 - -/* marker codes */ -#define MARKER_STUFF 0x00 -#define MARKER_RESERVE 0x01 -#define MARKER_SDNORM 0x02 -#define MARKER_SDRST 0x03 -#define MARKER_ABORT 0x04 -#define MARKER_NEWLEN 0x05 -#define MARKER_ATMOVE 0x06 -#define MARKER_COMMENT 0x07 -#define MARKER_ESC 0xff - -/* object code version id */ - -const char jbg85_version[] = - "JBIG-KIT " JBG85_VERSION " (T.85 version) -- (c) 1995-2008 Markus Kuhn -- " - "Licence: " JBG85_LICENCE "\n" - "$Id: jbig85.c 1303 2008-08-30 20:16:20Z mgk25 $\n"; - -#define _(String) String /* to mark translatable string for GNU gettext */ - -/* - * Array with English ASCII error messages that correspond - * to return values from public functions in this library. - */ -static const char *errmsg[] = { - _("All OK"), /* JBG_EOK */ - _("Reached specified image size"), /* JBG_EOK_INTR */ - _("Unexpected end of input data stream"), /* JBG_EAGAIN */ - _("Not enough memory available"), /* JBG_ENOMEM */ - _("ABORT marker segment encountered"), /* JBG_EABORT */ - _("Unknown marker segment encountered"), /* JBG_EMARKER */ - _("Input data stream contains invalid data"), /* JBG_EINVAL */ - _("Input data stream uses unimplemented JBIG features") /* JBG_EIMPL */ -}; - - -/* - * Callback adapter function for arithmetic encoder - */ -static void enc_byte_out(int byte, void *s) -{ - unsigned char c = byte; - ((struct jbg85_enc_state *)s)->data_out(&c, sizeof(unsigned char), - ((struct jbg85_enc_state *)s)->file); -} - - -/* - * Initialize the status struct for the encoder. - */ -void jbg85_enc_init(struct jbg85_enc_state *s, - unsigned long x0, unsigned long y0, - void (*data_out)(unsigned char *start, size_t len, - void *file), - void *file) -{ - assert(x0 > 0 && y0 > 0); - s->x0 = x0; - s->y0 = y0; - s->newlen = 0; /* no NEWLEN pending or output */ - s->data_out = data_out; - s->file = file; - - s->l0 = s->y0 / 35; /* 35 stripes/image suggested default */ - if (s->l0 > 128) s->l0 = 128; - else if (s->l0 < 2) s->l0 = 2; -#if 1 - s->l0 = 128; /* T.85 BASIC setting */ -#endif - s->mx = 127; - s->new_tx = -1; /* no ATMOVE pending */ - s->tx = 0; - s->options = JBG_TPBON | JBG_VLENGTH; - s->comment = NULL; /* no COMMENT pending */ - s->y = 0; - s->i = 0; - s->ltp_old = 0; - - /* initialize arithmetic encoder */ - arith_encode_init(&s->s, 0); - s->s.byte_out = &enc_byte_out; - s->s.file = s; - - return; -} - - -/* - * The following function allows to specify the bits describing the - * options of the format as well as the maximum AT movement window and - * the number of layer 0 lines per stripes. - */ -void jbg85_enc_options(struct jbg85_enc_state *s, int options, - unsigned long l0, int mx) -{ - if (s->y > 0) return; /* too late to change anything now */ - - if (options >= 0) s->options = options; - if (l0 > 0) s->l0 = l0; - if (mx >= 0 && mx < 128) s->mx = mx; - - return; -} - - -/* auxiliary routine to write out NEWLEN */ -static void output_newlen(struct jbg85_enc_state *s) -{ - unsigned char buf[6]; - - assert(s->i == 0); - if (s->newlen != 1) - return; - buf[0] = MARKER_ESC; - buf[1] = MARKER_NEWLEN; - buf[2] = s->y0 >> 24; - buf[3] = (s->y0 >> 16) & 0xff; - buf[4] = (s->y0 >> 8) & 0xff; - buf[5] = s->y0 & 0xff; - s->data_out(buf, 6, s->file); - s->newlen = 2; - if (s->y == s->y0) { - /* if newlen refers to a line in the preceeding stripe, ITU-T T.82 - * section 6.2.6.2 requires us to append another SDNORM */ - buf[1] = MARKER_SDNORM; - s->data_out(buf, 2, s->file); - } -} - - -/* - * Encode one full BIE and pass the generated data to the specified - * call-back function - */ -void jbg85_enc_lineout(struct jbg85_enc_state *s, unsigned char *line, - unsigned char *prevline, unsigned char *prevprevline) -{ - unsigned char buf[20]; - unsigned long bpl; - unsigned char *hp1, *hp2, *hp3, *p1, *q1; - unsigned long line_h1 = 0, line_h2, line_h3; - unsigned long j; /* loop variable for pixel column */ - long o; - unsigned a, p, t; - int ltp; - unsigned long cmin, cmax, clmin, clmax; - int tmax; -#ifdef DEBUG - static long tp_lines; - static long encoded_pixels; -#endif - - if (s->y >= s->y0) { - /* we have already output the full image, go away */ - return; - } - - /* line 0 has no previous line */ - if (s->y < 1) - prevline = NULL; - if (s->y < 2) - prevprevline = NULL; - - /* things that need to be done before the first line is encoded */ - if (s->y == 0) { - /* prepare BIH */ - buf[0] = 0; /* DL = initial layer to be transmitted */ - buf[1] = 0; /* D = number of differential layers */ - buf[2] = 1; /* P = number of bit planes */ - buf[3] = 0; - buf[4] = s->x0 >> 24; - buf[5] = (s->x0 >> 16) & 0xff; - buf[6] = (s->x0 >> 8) & 0xff; - buf[7] = s->x0 & 0xff; - buf[8] = s->y0 >> 24; - buf[9] = (s->y0 >> 16) & 0xff; - buf[10] = (s->y0 >> 8) & 0xff; - buf[11] = s->y0 & 0xff; - buf[12] = s->l0 >> 24; - buf[13] = (s->l0 >> 16) & 0xff; - buf[14] = (s->l0 >> 8) & 0xff; - buf[15] = s->l0 & 0xff; - buf[16] = s->mx; - buf[17] = 0; /* MY = maximum vertical offset allowed for AT pixel */ - buf[18] = 0; /* order: HITOLO = SEQ = ILEAVE = SMID = 0 */ - buf[19] = s->options & (JBG_LRLTWO | JBG_VLENGTH | JBG_TPBON); - - /* output BIH */ - s->data_out(buf, 20, s->file); - } - - /* things that need to be done before the next SDE is encoded */ - if (s->i == 0) { - - /* output NEWLEN if there is any pending */ - output_newlen(s); - - /* output comment marker segment if there is any pending */ - if (s->comment) { - buf[0] = MARKER_ESC; - buf[1] = MARKER_COMMENT; - buf[2] = s->comment_len >> 24; - buf[3] = (s->comment_len >> 16) & 0xff; - buf[4] = (s->comment_len >> 8) & 0xff; - buf[5] = s->comment_len & 0xff; - s->data_out(buf, 6, s->file); - s->data_out(s->comment, s->comment_len, s->file); - s->comment = NULL; - } - - /* output ATMOVE if there is any pending */ - if (s->new_tx != -1 && s->new_tx != s->tx) { - s->tx = s->new_tx; - buf[0] = MARKER_ESC; - buf[1] = MARKER_ATMOVE; - buf[2] = 0; - buf[3] = 0; - buf[4] = 0; - buf[5] = 0; - buf[6] = s->tx; - buf[7] = 0; - s->data_out(buf, 8, s->file); - } - - /* initialize adaptive template movement algorithm */ - if (s->mx == 0) { - s->new_tx = 0; /* ATMOVE has been disabled */ - } else { - s->c_all = 0; - for (t = 0; t <= s->mx; t++) - s->c[t] = 0; - s->new_tx = -1; /* we have yet to determine ATMOVE ... */ - } - - /* restart arithmetic encoder */ - arith_encode_init(&s->s, 1); - } - -#ifdef DEBUG - if (s->y == 0) - tp_lines = encoded_pixels = 0; - fprintf(stderr, "encode line %lu (%2lu of stripe)\n", s->y, s->i); -#endif - - /* bytes per line */ - bpl = (s->x0 >> 3) + !!(s->x0 & 7); - /* ensure correct zero padding of bitmap at the final byte of each line */ - if (s->x0 & 7) { - line[bpl - 1] &= ~((1 << (8 - (s->x0 & 7))) - 1); - } - - /* typical prediction */ - ltp = 0; - if (s->options & JBG_TPBON) { - p1 = line; - q1 = prevline; - ltp = 1; - if (q1) - while (p1 < line + bpl && (ltp = (*p1++ == *q1++)) != 0); - else - while (p1 < line + bpl && (ltp = (*p1++ == 0 )) != 0); - arith_encode(&s->s, (s->options & JBG_LRLTWO) ? TPB2CX : TPB3CX, - ltp == s->ltp_old); -#ifdef DEBUG - tp_lines += ltp; -#endif - s->ltp_old = ltp; - } - - if (!ltp) { - - /* - * Layout of the variables line_h1, line_h2, line_h3, which contain - * as bits the neighbour pixels of the currently coded pixel X: - * - * 76543210765432107654321076543210 line_h3 - * 76543210765432107654321076543210 line_h2 - * 76543210765432107654321X76543210 line_h1 - */ - - /* pointer to first image byte of the three lines of interest */ - hp3 = prevprevline; - hp2 = prevline; - hp1 = line; - - line_h1 = line_h2 = line_h3 = 0; - if (hp2) line_h2 = (long)*hp2 << 8; - if (hp3) line_h3 = (long)*hp3 << 8; - - /* encode line */ - for (j = 0; j < s->x0;) { - line_h1 |= *hp1; - if (j < bpl * 8 - 8 && hp2) { - line_h2 |= *(hp2 + 1); - if (hp3) - line_h3 |= *(hp3 + 1); - } - if (s->options & JBG_LRLTWO) { - /* two line template */ - do { - line_h1 <<= 1; line_h2 <<= 1; line_h3 <<= 1; - if (s->tx) { - if ((unsigned) s->tx > j) - a = 0; - else { - o = (j - s->tx) - (j & ~7L); - a = (hp1[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 4; - } - assert(s->tx > 23 || - a == ((line_h1 >> (4 + s->tx)) & 0x010)); - arith_encode(&s->s, (((line_h2 >> 10) & 0x3e0) | a | - ((line_h1 >> 9) & 0x00f)), - (line_h1 >> 8) & 1); - } - else - arith_encode(&s->s, (((line_h2 >> 10) & 0x3f0) | - ((line_h1 >> 9) & 0x00f)), - (line_h1 >> 8) & 1); -#ifdef DEBUG - encoded_pixels++; -#endif - /* statistics for adaptive template changes */ - if (s->new_tx == -1 && j >= s->mx && j < s->x0 - 2) { - p = (line_h1 & 0x100) != 0; /* current pixel value */ - s->c[0] += ((line_h2 & 0x4000) != 0) == p; /* default position */ - assert(!(((line_h2 >> 6) ^ line_h1) & 0x100) == - (((line_h2 & 0x4000) != 0) == p)); - for (t = 5; t <= s->mx && t <= j; t++) { - o = (j - t) - (j & ~7L); - a = (hp1[o >> 3] >> (7 - (o & 7))) & 1; - assert(t > 23 || - (a == p) == !(((line_h1 >> t) ^ line_h1) & 0x100)); - s->c[t] += a == p; - } - for (; t <= s->mx; t++) { - s->c[t] += 0 == p; - } - ++s->c_all; - } - } while (++j & 7 && j < s->x0); - } else { - /* three line template */ - do { - line_h1 <<= 1; line_h2 <<= 1; line_h3 <<= 1; - if (s->tx) { - if ((unsigned) s->tx > j) - a = 0; - else { - o = (j - s->tx) - (j & ~7L); - a = (hp1[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 2; - } - assert(s->tx > 23 || - a == ((line_h1 >> (6 + s->tx)) & 0x004)); - arith_encode(&s->s, (((line_h3 >> 8) & 0x380) | - ((line_h2 >> 12) & 0x078) | a | - ((line_h1 >> 9) & 0x003)), - (line_h1 >> 8) & 1); - } else - arith_encode(&s->s, (((line_h3 >> 8) & 0x380) | - ((line_h2 >> 12) & 0x07c) | - ((line_h1 >> 9) & 0x003)), - (line_h1 >> 8) & 1); -#ifdef DEBUG - encoded_pixels++; -#endif - /* statistics for adaptive template changes */ - if (s->new_tx == -1 && j >= s->mx && j < s->x0 - 2) { - p = (line_h1 & 0x100) != 0; /* current pixel value */ - s->c[0] += ((line_h2 & 0x4000) != 0) == p; /* default position */ - assert(!(((line_h2 >> 6) ^ line_h1) & 0x100) == - (((line_h2 & 0x4000) != 0) == p)); - for (t = 3; t <= s->mx && t <= j; t++) { - o = (j - t) - (j & ~7L); - a = (hp1[o >> 3] >> (7 - (o & 7))) & 1; - assert(t > 23 || - (a == p) == !(((line_h1 >> t) ^ line_h1) & 0x100)); - s->c[t] += a == p; - } - for (; t <= s->mx; t++) { - s->c[t] += 0 == p; - } - ++s->c_all; - } - } while (++j & 7 && j < s->x0); - } /* if (s->options & JBG_LRLTWO) */ - hp1++; - if (hp2) hp2++; - if (hp3) hp3++; - } /* for (j = ...) */ - } /* if (!ltp) */ - - /* line is complete now, deal with end of stripe */ - s->i++; s->y++; - if (s->i == s->l0 || s->y == s->y0) { - /* end of stripe reached */ - arith_encode_flush(&s->s); - buf[0] = MARKER_ESC; - buf[1] = MARKER_SDNORM; - s->data_out(buf, 2, s->file); - s->i = 0; - - /* output NEWLEN if there is any pending */ - output_newlen(s); - } - - /* check whether it is worth to perform an ATMOVE */ - if (s->new_tx == -1 && s->c_all > 2048) { - cmin = clmin = 0xffffffffL; - cmax = clmax = 0; - tmax = 0; - for (t = (s->options & JBG_LRLTWO) ? 5 : 3; t <= s->mx; t++) { - if (s->c[t] > cmax) cmax = s->c[t]; - if (s->c[t] < cmin) cmin = s->c[t]; - if (s->c[t] > s->c[tmax]) tmax = t; - } - clmin = (s->c[0] < cmin) ? s->c[0] : cmin; - clmax = (s->c[0] > cmax) ? s->c[0] : cmax; - if (s->c_all - cmax < (s->c_all >> 3) && - cmax - s->c[s->tx] > s->c_all - cmax && - cmax - s->c[s->tx] > (s->c_all >> 4) && - /* ^ T.82 said < here, fixed in Cor.1/25 */ - cmax - (s->c_all - s->c[s->tx]) > s->c_all - cmax && - cmax - (s->c_all - s->c[s->tx]) > (s->c_all >> 4) && - cmax - cmin > (s->c_all >> 2) && - (s->tx || clmax - clmin > (s->c_all >> 3))) { - /* we have decided to perform an ATMOVE */ - s->new_tx = tmax; -#ifdef DEBUG - fprintf(stderr, "ATMOVE: tx=%d, c_all=%d\n", - s->new_tx, s->c_all); -#endif - } else { - s->new_tx = s->tx; /* we have decided not to perform an ATMOVE */ - } - } - assert(s->tx >= 0); /* i.e., tx can safely be cast to unsigned */ - -#ifdef DEBUG - if (s->y == s->y0) - fprintf(stderr, "tp_lines = %ld, encoded_pixels = %ld\n", - tp_lines, encoded_pixels); -#endif - - return; -} - - -/* - * Inform encoder about new (reduced) height of image - */ -void jbg85_enc_newlen(struct jbg85_enc_state *s, unsigned long newlen) -{ - unsigned char buf[6]; - - if (s->newlen == 2 || newlen >= s->y0 || newlen < 1 || - !(s->options & JBG_VLENGTH)) { - /* invalid invocation or parameter */ - return; - } - if (newlen < s->y) { - /* we are already beyond the new end, therefore move the new end */ - newlen = s->y; - } - if (s->y > 0 && s->y0 != newlen) - s->newlen = 1; - s->y0 = newlen; - if (s->y == s->y0) { - /* we are already at the end; finish the current stripe if necessary */ - if (s->i > 0) { - arith_encode_flush(&s->s); - buf[0] = MARKER_ESC; - buf[1] = MARKER_SDNORM; - s->data_out(buf, 2, s->file); - s->i = 0; - } - /* output NEWLEN if there is any pending */ - output_newlen(s); - } -} - - -/* - * Abort encoding process immediately by outputting an ABORT marker segment - */ -void jbg85_enc_abort(struct jbg85_enc_state *s) -{ - unsigned char buf[2]; - - buf[0] = MARKER_ESC; - buf[1] = MARKER_ABORT; - s->data_out(buf, 2, s->file); - s->y = s->y0; /* just to prevent further calls to jbg85_enc_lineout() */ -} - - -/* - * Convert the error codes used by jbg85_dec_in() into an English ASCII string - */ -const char *jbg85_strerror(int errnum) -{ - errnum >>= 4; - if (errnum < 0 || (unsigned) errnum >= sizeof(errmsg)/sizeof(errmsg[0])) - return "Unknown error code passed to jbg85_strerror()"; - - return errmsg[errnum]; -} - - -/* - * The constructor for a decoder - */ -void jbg85_dec_init(struct jbg85_dec_state *s, - unsigned char *buf, size_t buflen, - int (*line_out)(const struct jbg85_dec_state *s, - unsigned char *start, size_t len, - unsigned long y, void *file), - void *file) -{ - s->x0 = 0; - s->y0 = 0; - s->linebuf = buf; - s->linebuf_len = buflen; - s->line_out = line_out; - s->file = file; - s->bie_len = 0; - s->end_of_bie = 0; - return; -} - - -/* - * Decode the new len PSCD bytes to which data points and output - * decoded lines as they are completed. Return the number of bytes - * which have actually been read. This will be less than len if a - * marker segment was part of the data or if the final byte was - * 0xff, meaning that this code can not determine whether we have a - * marker segment. - */ -static size_t decode_pscd(struct jbg85_dec_state *s, unsigned char *data, - size_t len) -{ - unsigned char *hp1, *hp2, *hp3, *p1; - register unsigned long line_h1, line_h2, line_h3; - unsigned long x; - long o; - unsigned a; - int n; - int pix, slntp; - int buflines = 3 - !!(s->options & JBG_LRLTWO); - - /* forward data to arithmetic decoder */ - s->s.pscd_ptr = data; - s->s.pscd_end = data + len; - - /* restore a few local variables */ - line_h1 = s->line_h1; - line_h2 = s->line_h2; - line_h3 = s->line_h3; - x = s->x; - -#ifdef DEBUG - if (x == 0 && s->i == 0 && s->pseudo) - fprintf(stderr, "decode_pscd(%p, %p, %ld)\n", - (void *) s, (void *) data, (long) len); -#endif - - s->intr = 0; - for (; s->i < s->l0 && s->y < s->y0 && !s->intr; s->i++, s->y++) { - - /* pointer to image byte */ - hp1 = s->linebuf + s->p[0] * s->bpl + (x >> 3); - hp2 = s->linebuf + s->p[1] * s->bpl + (x >> 3); - hp3 = s->linebuf + s->p[2] * s->bpl + (x >> 3); - - /* adaptive template changes */ - if (x == 0 && s->pseudo) - for (n = 0; n < s->at_moves; n++) - if (s->at_line[n] == s->i) { - s->tx = s->at_tx[n]; -#ifdef DEBUG - fprintf(stderr, "ATMOVE: line=%lu, tx=%d.\n", s->i, s->tx); -#endif - } - assert(s->tx >= 0); /* i.e., tx can safely be cast to unsigned */ - - /* typical prediction */ - if (s->options & JBG_TPBON && s->pseudo) { - slntp = arith_decode(&s->s, (s->options & JBG_LRLTWO) ? TPB2CX : TPB3CX); - if (slntp < 0) - goto leave; - s->lntp = - !(slntp ^ s->lntp); - if (!s->lntp) { - /* this line is 'typical' (i.e. identical to the previous one) */ - if (s->p[1] < 0) { - /* first line of page or (following SDRST) of stripe */ - for (p1 = hp1; p1 < hp1 + s->bpl; *p1++ = 0); - s->intr = s->line_out(s, hp1, s->bpl, s->y, s->file); - /* rotate the ring buffer that holds the last three lines */ - s->p[2] = s->p[1]; - s->p[1] = s->p[0]; - if (++(s->p[0]) >= buflines) s->p[0] = 0; - } else { - s->intr = s->line_out(s, hp2, s->bpl, s->y, s->file); - /* duplicate the last line in the ring buffer */ - s->p[2] = s->p[1]; - } - continue; - } - /* this line is 'not typical' and has to be coded completely */ - } - s->pseudo = 0; - - /* - * Layout of the variables line_h1, line_h2, line_h3, which contain - * as bits the neighbour pixels of the currently decoded pixel X: - * - * 76543210 76543210 76543210 76543210 line_h3 - * 76543210 76543210 76543210 76543210 line_h2 - * 76543210 76543210 76543210 76543210 X line_h1 - */ - - if (x == 0) { - line_h1 = line_h2 = line_h3 = 0; - if (s->p[1] >= 0) - line_h2 = (long)*hp2 << 8; - if (s->p[2] >= 0) - line_h3 = (long)*hp3 << 8; - } - - /* decode line */ - while (x < s->x0) { - if ((x & 7) == 0) { - if (x < (s->bpl - 1) * 8 && s->p[1] >= 0) { - line_h2 |= *(hp2 + 1); - if (s->p[2] >= 0) - line_h3 |= *(hp3 + 1); - } - } - if (s->options & JBG_LRLTWO) { - /* two line template */ - do { - if (s->tx) { - if ((unsigned) s->tx > x) - a = 0; - else if (s->tx < 8) - a = ((line_h1 >> (s->tx - 5)) & 0x010); - else { - o = (x - s->tx) - (x & ~7L); - a = (hp1[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 4; - } - assert(s->tx > 31 || - a == ((line_h1 >> (s->tx - 5)) & 0x010)); - pix = arith_decode(&s->s, (((line_h2 >> 9) & 0x3e0) | a | - (line_h1 & 0x00f))); - } else - pix = arith_decode(&s->s, (((line_h2 >> 9) & 0x3f0) | - (line_h1 & 0x00f))); - if (pix < 0) - goto leave; - line_h1 = (line_h1 << 1) | pix; - line_h2 <<= 1; - } while ((++x & 7) && x < s->x0); - } else { - /* three line template */ - do { - if (s->tx) { - if ((unsigned) s->tx > x) - a = 0; - else if (s->tx < 8) - a = ((line_h1 >> (s->tx - 3)) & 0x004); - else { - o = (x - s->tx) - (x & ~7L); - a = (hp1[o >> 3] >> (7 - (o & 7))) & 1; - a <<= 2; - } - assert(s->tx > 31 || - a == ((line_h1 >> (s->tx - 3)) & 0x004)); - pix = arith_decode(&s->s, (((line_h3 >> 7) & 0x380) | - ((line_h2 >> 11) & 0x078) | a | - (line_h1 & 0x003))); - } else - pix = arith_decode(&s->s, (((line_h3 >> 7) & 0x380) | - ((line_h2 >> 11) & 0x07c) | - (line_h1 & 0x003))); - if (pix < 0) - goto leave; - line_h1 = (line_h1 << 1) | pix; - line_h2 <<= 1; - line_h3 <<= 1; - } while ((++x & 7) && x < s->x0); - } /* if (s->options & JBG_LRLTWO) */ - *hp1++ = line_h1; - hp2++; - hp3++; - } /* while (x < s->x0) */ - *(hp1 - 1) <<= s->bpl * 8 - s->x0; - s->intr = s->line_out(s, s->linebuf + s->p[0] * s->bpl, - s->bpl, s->y, s->file); - x = 0; - s->pseudo = 1; - /* rotate the ring buffer that holds the last three lines */ - s->p[2] = s->p[1]; - s->p[1] = s->p[0]; - if (++(s->p[0]) >= buflines) s->p[0] = 0; - } /* for (i = ...) */ - - leave: - - /* save a few local variables */ - s->line_h1 = line_h1; - s->line_h2 = line_h2; - s->line_h3 = line_h3; - s->x = x; - - return s->s.pscd_ptr - data; -} - -/* - * Helper routine for processing SDNORM/SDRST marker segment - * (which is found in s->buffer[0..1]) - */ -static int finish_sde(struct jbg85_dec_state *s) -{ - /* decode final pixels based on trailing zero bytes */ - s->s.nopadding = 0; - if (decode_pscd(s, s->buffer, 2) != 2 && s->intr) - return 1; - - /* prepare decoder for next SDE */ - arith_decode_init(&s->s, s->buffer[1] == MARKER_SDNORM); - s->s.nopadding = s->options & JBG_VLENGTH; - - s->x = 0; - s->i = 0; - s->pseudo = 1; - s->at_moves = 0; - if (s->buffer[1] == MARKER_SDRST) { - s->tx = 0; - s->lntp = 1; - s->p[0] = 0; - s->p[1] = -1; - s->p[2] = -1; - } - - return 0; -} - -/* - * Provide to the decoder a new BIE fragment of len bytes starting at data. - * - * Unless cnt is NULL, *cnt will contain the number of actually read bytes - * on return. - * - * Normal return values: - * - * JBG_EAGAIN All data bytes provided so far have been processed - * (*cnt == len) but the end of the data stream has - * not yet been recognized. Call the function again - * with additional BIE bytes. - * JBG_EOK The function has reached the end of the BIE and - * the full image has been decoded. - * JBG_EOK_INTR Parsing the BIE has been interrupted as had been - * requested by a non-zero return value of line_out(). - * This function can be called again with the - * rest of the BIE to continue the decoding process. - * The remaining len - *cnt bytes of the previous - * data block will then have to be passed to this - * function again (only if len > *cnt). - * - * Any other return value indicates that the decoding process was - * aborted by a serious problem and the only function you can then - * still call is jbg85_strerror() to find out what to tell the user. - * (Looking at the least significant bits of the return value will - * provide additional information by identifying which test exactly - * has failed.) - */ -int jbg85_dec_in(struct jbg85_dec_state *s, unsigned char *data, size_t len, - size_t *cnt) -{ - int required_length; - unsigned long y; - size_t dummy_cnt; - - if (!cnt) cnt = &dummy_cnt; - *cnt = 0; - - /* read in 20-byte BIH */ - if (s->bie_len < 20) { - while (s->bie_len < 20 && *cnt < len) - s->buffer[s->bie_len++] = data[(*cnt)++]; - if (s->bie_len < 20) - return JBG_EAGAIN; - /* test whether this looks like a valid JBIG header at all */ - if (s->buffer[1] < s->buffer[0]) return JBG_EINVAL | 1; - /* are padding bits zero as required? */ - if (s->buffer[3] != 0) return JBG_EINVAL | 2; /* padding != 0 */ - if ((s->buffer[18] & 0xf0) != 0) return JBG_EINVAL | 3; /* padding != 0 */ - if ((s->buffer[19] & 0x80) != 0) return JBG_EINVAL | 4; /* padding != 0 */ - s->x0 = (((long) s->buffer[ 4] << 24) | ((long) s->buffer[ 5] << 16) | - ((long) s->buffer[ 6] << 8) | (long) s->buffer[ 7]); - s->y0 = (((long) s->buffer[ 8] << 24) | ((long) s->buffer[ 9] << 16) | - ((long) s->buffer[10] << 8) | (long) s->buffer[11]); - s->l0 = (((long) s->buffer[12] << 24) | ((long) s->buffer[13] << 16) | - ((long) s->buffer[14] << 8) | (long) s->buffer[15]); - if (!s->buffer[2]) return JBG_EINVAL | 5; - if (!s->x0) return JBG_EINVAL | 6; - if (!s->y0) return JBG_EINVAL | 7; - if (!s->l0) return JBG_EINVAL | 8; - s->mx = s->buffer[16]; - if (s->mx > 127) - return JBG_EINVAL | 9; - if (s->buffer[ 0] != 0) return JBG_EIMPL | 8; /* parameter outside T.85 */ - if (s->buffer[ 1] != 0) return JBG_EIMPL | 9; /* parameter outside T.85 */ - if (s->buffer[ 2] != 1) return JBG_EIMPL |10; /* parameter outside T.85 */ - if (s->buffer[17] != 0) return JBG_EIMPL |11; /* parameter outside T.85 */ -#if JBG85_STRICT_ORDER_BITS - if (s->buffer[18] != 0) return JBG_EIMPL |12; /* parameter outside T.85 */ -#endif - s->options = s->buffer[19]; - if (s->options & 0x17) return JBG_EIMPL |13; /* parameter outside T.85 */ - if (s->x0 > (s->linebuf_len / ((s->options & JBG_LRLTWO) ? 2 : 3)) * 8) - return JBG_ENOMEM; /* provided line buffer is too short */ - arith_decode_init(&s->s, 0); - s->s.nopadding = s->options & JBG_VLENGTH; - s->comment_skip = 0; - s->buf_len = 0; - s->x = 0; - s->y = 0; - s->i = 0; - s->pseudo = 1; - s->at_moves = 0; - s->tx = 0; - s->lntp = 1; - s->bpl = (s->x0 >> 3) + !!(s->x0 & 7); /* bytes per line */ - s->p[0] = 0; - s->p[1] = -1; - s->p[2] = -1; - } - - /* - * BID processing loop - */ - - while (*cnt < len || s->end_of_bie == 1) { - if (s->end_of_bie == 1) s->end_of_bie = 2; - - /* process floating marker segments */ - - /* skip COMMENT contents */ - if (s->comment_skip) { - if (s->comment_skip <= len - *cnt) { - *cnt += s->comment_skip; - s->comment_skip = 0; - } else { - s->comment_skip -= len - *cnt; - *cnt = len; - } - continue; - } - - /* load marker segments into s->buffer for processing */ - if (s->buf_len > 0) { - assert(s->buffer[0] == MARKER_ESC); - /* load enough bytes to determine length of marker segment */ - while (s->buf_len < 2 && *cnt < len) - s->buffer[s->buf_len++] = data[(*cnt)++]; - if (s->buf_len < 2) continue; - switch (s->buffer[1]) { - case MARKER_COMMENT: required_length = 6; break; - case MARKER_ATMOVE: required_length = 8; break; - case MARKER_NEWLEN: required_length = 6; break; - case MARKER_SDNORM: - case MARKER_SDRST: - if ((s->options & JBG_VLENGTH) && !s->end_of_bie) { - /* peek ahead whether a NEWLEN marker segment follows */ - required_length = 2 + 1; - if (s->buf_len == 2 + 1 && s->buffer[2] == MARKER_ESC) - required_length = 2 + 2; /* SDNORM + 2 marker sequence bytes */ - else if (s->buf_len >= 2 + 2 && s->buffer[3] == MARKER_NEWLEN) - required_length = 2 + 6; /* SDNORM + NEWLEN */ - } else { - /* no further NEWLEN allowed or end of BIE reached */ - required_length = 2; - } - break; - case MARKER_ABORT: - s->buf_len = 0; - return JBG_EABORT; - case MARKER_STUFF: - /* forward stuffed 0xff to arithmetic decoder */ - if (decode_pscd(s, s->buffer, 2) == 2) - s->buf_len = 0; - if (s->intr) - return JBG_EOK_INTR; /* line_out() requested interrupt */ - continue; - default: - return JBG_EMARKER; - } - /* load minimal number of additional bytes required for processing */ - while (s->buf_len < required_length && *cnt < len) - s->buffer[s->buf_len++] = data[(*cnt)++]; - if (s->buf_len < required_length) continue; - /* now the buffer is filled with exactly one marker segment - * (or in the case of SDNORM/SDRST sometimes also with - * two additional peek-ahead bytes) */ - switch (s->buffer[1]) { - case MARKER_COMMENT: - s->comment_skip = - (((long) s->buffer[2] << 24) | ((long) s->buffer[3] << 16) | - ((long) s->buffer[4] << 8) | (long) s->buffer[5]); - break; - case MARKER_ATMOVE: - if (s->at_moves < JBG85_ATMOVES_MAX) { - s->at_line[s->at_moves] = - (((long) s->buffer[2] << 24) | ((long) s->buffer[3] << 16) | - ((long) s->buffer[4] << 8) | (long) s->buffer[5]); - s->at_tx[s->at_moves] = (signed char) s->buffer[6]; - if (s->at_tx[s->at_moves] > (int) s->mx || - (s->at_tx[s->at_moves] < ((s->options & JBG_LRLTWO) ? 5 : 3) && - s->at_tx[s->at_moves] != 0) || - s->buffer[7] != 0) - return JBG_EINVAL | 11; - s->at_moves++; - } else - return JBG_EIMPL | 14; /* more than JBG85_ATMOVES_MAX ATMOVES */ - break; - case MARKER_NEWLEN: - y = (((long) s->buffer[2] << 24) | ((long) s->buffer[3] << 16) | - ((long) s->buffer[4] << 8) | (long) s->buffer[5]); - if (y > s->y0) return JBG_EINVAL | 12; -#ifndef JBG85_TOLERATE_MULTIPLE_NEWLEN - if (!(s->options & JBG_VLENGTH)) return JBG_EINVAL | 13; - s->options &= ~JBG_VLENGTH; -#endif - s->y0 = y; - break; - - case MARKER_SDNORM: - case MARKER_SDRST: - - switch (s->buf_len) { - case 2: - /* process regular SDNORM/SDRST without peek-ahead bytes */ - if (finish_sde(s)) - return JBG_EOK_INTR; /* line_out() requested interrupt */ - /* check whether this was the last SDE */ - if (s->y >= s->y0) return JBG_EOK; - break; - case 2+1: - /* process single peek-ahead byte */ - if (s->buffer[2] == MARKER_ESC) - continue; /* next time we'll have s->buf_len == 2 + 2 */ - else { - /* push back the single peek-ahead PCSD byte */ - assert(*cnt > 0); - (*cnt)--; - s->buf_len--; - if (finish_sde(s)) { - return JBG_EOK_INTR; /* line_out() requested interrupt */ - } - } - break; - case 2+2: - /* process 2-byte peek-ahead marker sequence */ - if (s->buffer[2] == MARKER_ESC && s->buffer[3] == MARKER_NEWLEN) - continue; /* next time we'll have s->buf_len == 2 + 6 */ - else { - if (finish_sde(s)) - return JBG_EOK_INTR; /* line_out() requested interrupt */ - /* recycle the two peek-ahead marker sequence bytes */ - s->buffer[0] = s->buffer[2]; - s->buffer[1] = s->buffer[3]; - s->buf_len = 2; - if (s->intr) - return JBG_EOK_INTR; /* line_out() requested interrupt */ - continue; - } - case 2+6: - /* process peek-ahead NEWLEN marker sequence */ - y = (((long) s->buffer[4] << 24) | ((long) s->buffer[5] << 16) | - ((long) s->buffer[6] << 8) | (long) s->buffer[7]); - if (y > s->y0) return JBG_EINVAL | 12; - if (!(s->options & JBG_VLENGTH)) return JBG_EINVAL | 13; - s->y0 = y; - if (finish_sde(s)) - return JBG_EOK_INTR; /* line_out() requested interrupt */ - s->buf_len = 0; - s->options &= ~JBG_VLENGTH; - /* we leave returning JBG_EOK to the following SDNORM/RST */ - break; - } - - if (s->intr) { - s->buf_len = 0; - return JBG_EOK_INTR; /* line_out() requested interrupt */ - } - - } /* switch (s->buffer[1]) */ - s->buf_len = 0; - - } else if (*cnt < len && data[*cnt] == MARKER_ESC) - s->buffer[s->buf_len++] = data[(*cnt)++]; - - else { - - /* we have found PSCD bytes */ - *cnt += decode_pscd(s, data + *cnt, len - *cnt); - if (s->intr) - return JBG_EOK_INTR; /* line_out() requested interrupt */ - if (*cnt < len && data[*cnt] != MARKER_ESC) { -#ifdef DEBUG - fprintf(stderr, "PSCD was longer than expected, unread bytes " - "%02x %02x %02x %02x ...\n", data[*cnt], data[*cnt+1], - data[*cnt+2], data[*cnt+3]); -#endif - return JBG_EINVAL | 14; /* PSCD was longer than expected */ - } - - } - } /* of BID processing loop 'while (*cnt < len) ...' */ - - return JBG_EAGAIN; -} - - -/* - * After the final BIE byte has been delivered to jbg85_dec_in(), it - * may still return with JBG_EAGAIN in case the VLENGTH=1 option was - * used and no NEWLEN marker section has appeared yet. This is because - * such a BIE is not self-terminating (i.e., there could still be a - * NEWLEN followed by an SDNORM or SDRST lurk after the final stripe, - * which needs to be processed before the final line is output, see - * ITU-T Recommendation T.85, Appendix I). Therefore, after the last - * byte has been delivered, call this routine to signal the end of the - * BIE. This is necessary to allow the routine to finish processing - * BIEs with option VLENGTH=1 that do not actually contain any NEWLEN - * marker section. - */ -int jbg85_dec_end(struct jbg85_dec_state *s) -{ - s->end_of_bie = 1; - return jbg85_dec_in(s, NULL, 0, NULL); -} diff -Nru c2esp-26/jbig85.h c2esp-27~rc1/jbig85.h --- c2esp-26/jbig85.h 2008-08-30 20:16:20.000000000 +0000 +++ c2esp-27~rc1/jbig85.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,173 +0,0 @@ -/* - * Header file for the T.85 "light" version of the portable - * JBIG image compression library - * - * Copyright 1995-2008 -- Markus Kuhn -- http://www.cl.cam.ac.uk/~mgk25/ - * - * $Id: jbig85.h 1303 2008-08-30 20:16:20Z mgk25 $ - */ - -#ifndef JBG85_H -#define JBG85_H - -#include -#include "jbig_ar.h" - -/* - * JBIG-KIT version number - */ - -#define JBG85_VERSION "2.0" - -/* - * JBIG-KIT licence agreement reference code: - * If you use JBIG-KIT under a commercial licence, please replace - * below the letters GPL with the reference code that you received - * with your licence agreement. (This code is typically a letter "A" - * followed by four decimal digits, e.g. "A1234".) - */ - -#define JBG85_LICENCE "GPL" - -/* - * Maximum number of ATMOVEs per stripe that decoder can handle - */ - -#define JBG85_ATMOVES_MAX 1 - -#ifndef JBG_LRLTWO - -/* - * Option and order flags - */ - -#define JBG_LRLTWO 0x40 -#define JBG_VLENGTH 0x20 -#define JBG_TPBON 0x08 - -/* - * Possible error code return values - */ - -#define JBG_EOK (0 << 4) -#define JBG_EOK_INTR (1 << 4) -#define JBG_EAGAIN (2 << 4) -#define JBG_ENOMEM (3 << 4) -#define JBG_EABORT (4 << 4) -#define JBG_EMARKER (5 << 4) -#define JBG_EINVAL (6 << 4) -#define JBG_EIMPL (7 << 4) - -#endif - -/* - * Status of a JBIG encoder - */ - -struct jbg85_enc_state { - unsigned long x0, y0; /* size of the input image */ - unsigned long l0; /* number of lines per stripe */ - int options; /* encoding parameters */ - int newlen; /* 0 = jbg85_enc_newlen() has not yet been called - 1 = jbg85_enc_newlen() has updated y0, NEWLEN pending - 2 = NEWLEN has already been output */ - unsigned mx; /* maximum ATMOVE window size */ - unsigned long y; /* next line number to be encoded */ - unsigned long i; /* next per-stripe line number to be encoded */ - int tx; /* x-offset of adaptive template pixel */ - unsigned long c_all, c[128]; /* adaptive template algorithm variables */ - int new_tx; /* -1 = no ATMOVE pending, otherwise new TX value */ - int ltp_old; /* true if line y-1 was "typical" */ - struct jbg_arenc_state s; /* arithmetic encoder status */ - void (*data_out)(unsigned char *start, size_t len, void *file); - /* data write callback */ - void *file; /* parameter passed to data_out() */ - unsigned char *comment; /* content of comment marker segment to be added - at next opportunity (will be reset to NULL - as soon as comment has been written) */ - unsigned long comment_len; /* length of data pointed to by comment */ -}; - - -/* - * Status of a JBIG decoder - */ - -struct jbg85_dec_state { - /* data from BIH */ - unsigned long x0, y0; /* size of the full image */ - unsigned long l0; /* number of lines per stripe */ - int options; /* encoding parameters */ - int mx; /* maximum ATMOVE window size */ - /* image data */ - int p[3]; /* curr. line starts at linebuf+bpl*p[0], prev. line starts - * at linebuf+bpl*p[1], its predecessor at linebuf+bpl*p[2] */ - unsigned char *linebuf; /* buffer region provided by caller */ - size_t linebuf_len; - size_t bpl; /* bytes per line */ - /* status information */ - int tx; /* x-offset of AT pixel */ - struct jbg_ardec_state s; /* arithmetic decoder status */ - unsigned long bie_len; /* number of bytes read so far */ - unsigned char buffer[20]; /* used to store BIH or marker segments fragm. */ - int buf_len; /* number of bytes in buffer */ - unsigned long comment_skip; /* remaining bytes of a COMMENT segment */ - unsigned long x; /* x position of next pixel */ - unsigned long stripe; /* current stripe */ - unsigned long y; /* line in image (first line is 0) */ - unsigned long i; /* line in current stripe (first line of stripe is 0) */ - int at_moves; /* number of AT moves in the current stripe */ - unsigned long at_line[JBG85_ATMOVES_MAX]; /* lines at which an * - * AT move will happen */ - int at_tx[JBG85_ATMOVES_MAX]; /* ATMOVE x-offsets in current stripe */ - unsigned long line_h1, line_h2, line_h3; /* variables of decode_pscd */ - int pseudo; /* flag for TPBON/TPDON: next pixel is pseudo pixel */ - int lntp; /* flag for TP: line is not typical */ - int (*line_out)(const struct jbg85_dec_state *s, - unsigned char *start, size_t len, - unsigned long y, void *file); - /* data write callback */ - void *file; /* parameter passed to data_out() */ - int intr; /* flag that line_out requested interrupt */ - int end_of_bie; /* flag that the end of the BIE has been signalled */ -}; - - -/* function prototypes */ - -void jbg85_enc_init(struct jbg85_enc_state *s, - unsigned long x0, unsigned long y0, - void (*data_out)(unsigned char *start, size_t len, - void *file), - void *file); -void jbg85_enc_options(struct jbg85_enc_state *s, int options, - unsigned long l0, int mx); -void jbg85_enc_lineout(struct jbg85_enc_state *s, unsigned char *line, - unsigned char *prevline, unsigned char *prevprevline); -void jbg85_enc_newlen(struct jbg85_enc_state *s, unsigned long y0); -void jbg85_enc_abort(struct jbg85_enc_state *s); - -void jbg85_dec_init(struct jbg85_dec_state *s, - unsigned char *buf, size_t buflen, - int (*line_out)(const struct jbg85_dec_state *s, - unsigned char *start, size_t len, - unsigned long y, void *file), - void *file); -int jbg85_dec_in(struct jbg85_dec_state *s, unsigned char *data, size_t len, - size_t *cnt); -int jbg85_dec_end(struct jbg85_dec_state *s); -const char *jbg85_strerror(int errnum); - -/* some macros for examining decoder state */ - -#define jbg85_dec_finished(s) ((s)->bie_len == 20 && (s)->y >= (s)->y0) -/* enquire about image size */ -#define jbg85_dec_getwidth(s) ((s)->x0) -#define jbg85_dec_getheight(s) ((s)->y0) -/* enquire about validity of image-size results */ -#define jbg85_dec_validwidth(s) ((s)->bie_len == 20) -#define jbg85_dec_finalheight(s) ((s)->bie_len == 20 && \ - ((((s)->options & JBG_VLENGHT) == 0) || \ - ((s)->y >= (s)->y0))) - -#endif /* JBG85_H */ diff -Nru c2esp-26/jbig85.txt c2esp-27~rc1/jbig85.txt --- c2esp-26/jbig85.txt 2008-08-30 19:20:04.000000000 +0000 +++ c2esp-27~rc1/jbig85.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,617 +0,0 @@ - -Using the T.85 "light" version of the JBIG-KIT library ------------------------------------------------------- - -Markus Kuhn -- 2008-08-30 - - -This text explains how to use the functions provided by the JBIG-KIT -portable image compression library jbig85.c in your application -software. - - -1 Distinguishing features - -The jbig85.c library implements only the "single-progression -sequential coding" subset of the JBIG1 standard, which is defined in -ITU-T Recommendation T.85 , also -known as the "facsimile application profile". This means that the -JBIG1 data streams that the jbig85.c library can process can have - - - no progressive encoding, i.e. the image is always encoded in a - single resolution layer (and not as a sequence of layers of a - resolution pyramid); - - - only a single plane, i.e. the raw data are black/white images with - only one bit per pixel information. - -The jbig85.c library is not suitable for continuous-tone (colour or -grey-scale) image applications, including the fax method described in -ITU-R Recommendation T.43. For these applications, use the full jbig.c -library instead. - -The T.85 restrictions are sufficient for black/white fax transmission -and several other common bi-level image applications (printer drivers, -document archiving, etc.). They simplify the design of the encoder and -decoder and allow the jbig85.c library to provide several advantages -over the full-featured jbig.c: - - - Only the last three lines of the uncompressed image need to be - kept in RAM at any time. - - - All memory allocation is done outside the jbig85.c library, which - performs no calls to malloc(), free(), etc. - - - The implementation can handle images whose height (number of pixel - rows) is not yet known before the last line has been encoded or - decoded. - - - All usage modes of the NEWLEN marker segment are supported, - including a NEWLEN occurring after the final stripe, as required by - ITU-T Recommendation T.85, using only a single pass over the data. - - - The code is smaller and there is no need to store tables related - to the resolution-reduction algorithms. - -This makes the jbig85.c library particularly suited for very small -embedded applications, e.g. low-end fax machines, along with the fact -that the library is non-recursive and requires only a very small stack -(typically just a bit over 100 bytes on a 32-bit system). The jbig85.c -library may also be a good choice where very large black/white images -are processed. - -The jbig85.c and jbig.c libraries both can be linked simultaneously -with the same application if you #include jbig85.h after jbig.h into -your source code. - - -2 Introduction to JBIG (T.85 subset) - -We start with a short introduction to the T.85 subset of JBIG1. More -detailed information is provided in the "Introduction and overview" -section of the JBIG1 standard. Information on how to obtain a copy of -the standard is available from -or . - -The JBIG1 standard allows the encoder to divide an image into several -horizontal stripes. All stripes have equal size, except perhaps the -final one. - -The compressed data stream specified by the JBIG standard is called a -bi-level image entity (BIE). A BIE consists of a 20-byte header, -followed by a sequence of stripe data entities (SDE). Each SDE encodes -the content of one single stripe in one plane of one resolution layer. -Between the SDEs, other information blocks (called floating marker -segments) can also be present. They are used to change certain -parameters of the algorithm in the middle of an image or contain -additional application specific information. A BIE looks like this: - - - +------------------------------------------------+ - | | - | 20-byte header (specifying image size, stripe | - | size, and options) | - | | - +------------------------------------------------+ - | | - | optional floating marker segments | - | | - +------------------------------------------------+ - | | - | stripe data entity | - | | - +------------------------------------------------+ - | | - | optional floating marker segments | - | | - +------------------------------------------------+ - | | - | stripe data entity | - | | - +------------------------------------------------+ - ... - +------------------------------------------------+ - | | - | stripe data entity | - | | - +------------------------------------------------+ - -It is possible to use the raw BIE data stream as specified by the JBIG -standard directly as the format of a file used for storing images. -This is what the pbmtojbg, jbgtopbm, pbmtojbg85, and jbgtopbm85 -conversion tools do that are provided in this package as demonstration -applications. However, as the BIE format has been designed for a large -number of very different applications, and to allow efficient direct -processing by special JBIG hardware chip implementations, the BIE -header contains only the minimum amount of information absolutely -required by the decompression algorithm. Many features expected from a -good file format are missing in the BIE data stream: - - - no "magic code" in the first few bytes to allow identification - of the file format on a typeless file system and to allow - automatic distinction from other compression algorithms - - - no standardized way to encode additional information such as a - textual description, the physical size and resolution of the - document, etc. - - - a checksum to ensure image integrity - - - encryption and signature mechanisms - - - many things more - -Raw BIE data streams alone may therefore not be a suitable format for -document archiving and exchange. A standard format for this purpose -would typically combine a BIE representing the image data with an -additional header providing auxiliary information into one file. -Existing established multi-purpose file formats with a rich set of -auxiliary information attributes like TIFF could be extended easily to -also hold JBIG compressed data. - -On the other hand, in e.g. database applications, a BIE might be -stored directly in a binary variable-length field. Auxiliary -information would then be stored in other fields of the same record, -to simplify search operations. - - -2 Compressing an image - -2.1 Format of the source image - -To be processed by the jbig85.c encoder, the image has to be present -in memory a bitmap. Each byte of a bitmap contains eight pixels, where -the most significant bit represents the leftmost of these. Each line -of a bitmap has to be stored in an integral number of bytes. If the -image width is not an integral multiple of eight, then the final byte -has to be padded with zero bits. - -For example the 23x5 pixels large single plane image: - - .XXXXX..XXX...X...XXX.. - .....X..X..X..X..X..... - .....X..XXX...X..X.XXX. - .X...X..X..X..X..X...X. - ..XXX...XXX...X...XXX.. - -is represented by the 15 bytes - - 01111100 11100010 00111000 - 00000100 10010010 01000000 - 00000100 11100010 01011100 - 01000100 10010010 01000100 - 00111000 11100010 00111000 - -or in hexadecimal notation - - 7c e2 38 04 92 40 04 e2 5c 44 92 44 38 e2 38 - -This is the format used in binary PBM files and it can also be handled -directly by the Xlib library of the X Window System. - -The standard recommends that a 0 pixel represents the background and a -1 pixel represents the foreground colour of an image, in other words, 0 -is white and 1 is black for scanned paper documents. - - -2.2 A simple compression application - -In order to use the library in your application, just link libjbig85.a -to your executable (on Unix systems just add -ljbig85 and -L. to the -command line options of your compiler, on other systems you will have -to write a new Makefile anyway), copy the file jbig85.h into your -source directory and put the line - - #include "jbig85.h" - -into your source code. - -The library interface follows object-oriented programming principles. -You have to declare a variable (object) - - struct jbg85_enc_state s; - -which contains the current status of an encoder. Then you initialize -the encoder by calling - - void jbg85_enc_init(struct jbg85_enc_state *s, - unsigned long x, unsigned long y, - void (*data_out)(unsigned char *start, size_t len, - void *file), - void *file); - -The parameters have the following meaning: - - s A pointer to the jbg85_enc_state structure that you want - to initialize. - - x The width of your image in pixels. - - y The height of your image in pixels (lines). This can be - a larger value than the actual height of the image, or - even 2^32-1 (or equally -1), if the height of the - image is not yet known. In that case, leave the - JBG_VLENGTH option set (see below) and call - jbg85_enc_newlen() as soon as the actual image height - is known. - - data_out This is a call-back function that the encoder will - call during the compression process in order to - deliver the BIE data to your application. The - parameters of the function data_out are a pointer - start to the new block of data being delivered, as - well as the number len of delivered bytes. The pointer - file is transparently delivered to data_out, as - specified in jbg85_enc_init(). Typically, data_out - will write the BIE portion to a file, send it to a - network connection, or append it to some memory - buffer. - - file A pointer parameter that is passed on to data_out() - and can be used, for instance, to allow data_out() to - distinguish by which compression task it has been - called in multi-threaded applications. - -The compression can then be started by calling the function - - void jbg85_enc_lineout(struct jbg85_enc_state *s, unsigned char *line, - unsigned char *prevline, unsigned char *prevprevline); - -successively for each line of the image, top to bottom. The parameters -are: - - line A pointer to the first byte of the line to be encoded. - - prevline A pointer to the data that the line parameter pointed - to in the previous call. The value will be ignored - if this is the first call. - - prevprevline A pointer to the data that the prevline parameter pointed - to in the previous call. The value will be ignored - if this is the first or second call. - -After jbg85_enc_lineout() has been called for all lines of the image, -the complete BIE will have been delivered via several callbacks to -data_out(). These BIE bytes are delivered as soon as possible, as the -encoder cannot buffer more than a few bytes internally. - -A minimal example application, which sends the BIE of the above bitmap -to stdout, looks like this: - ---------------------------------------------------------------------------- -/* A sample JBIG T.85 encoding application */ - -#include -#include "jbig85.h" - -void output_bie(unsigned char *start, size_t len, void *file) -{ - fwrite(start, 1, len, (FILE *) file); - - return; -} - -int main() -{ - unsigned char bitmap[15] = { - /* 23 x 5 pixels, "JBIG" */ - 0x7c, 0xe2, 0x38, 0x04, 0x92, 0x40, 0x04, 0xe2, - 0x5c, 0x44, 0x92, 0x44, 0x38, 0xe2, 0x38 - }; - struct jbg85_enc_state se; - int i; - - jbg85_enc_init(&se, 23, 5, output_bie, stdout); /* initialize encoder */ - jbg85_enc_options(&se, JBG_TPBON, 0, -1); /* clear JBG_VLENGTH option */ - for (i = 0; i < 5; i++) { - /* encode line */ - jbg85_enc_lineout(&se, bitmap+i*3, bitmap+(i-1)*3, bitmap+(i-2)*3); - } - - return 0; -} ---------------------------------------------------------------------------- - -This software produces a 37 byte long BIE. (JBIG is not very good at -compressing extremely small images like in this example, because the -arithmetic encoder requires some startup data in order to generate -reasonable statistics which influence the compression process and -because there is some header overhead.) - - -2.3 More about compression - -If jbg85_enc_lineout() is called directly after jbg85_enc_init(), the -following default values are used for various compression parameters: - - - The number of lines per stripe (l0) is set to 128, which is the - T.85 BASIC setting. - - - The typical-prediction (TPBON) and variable-length (VLENGTH) options - are activated, but the two-line template (LRLTWO) option is not. - - - The maximal horizontal offset of the adaptive template pixel is 127 - (mx = 127, my = 0). - -In order to change any of these default parameters, an additional -function has to be called between jbg85_enc_init() and the first -jbg85_enc_lineout(): - - void jbg85_enc_options(struct jbg85_enc_state *s, int options, - unsigned long l0, int mx) - -The options value can contain the following bits, which activate some -of the optional algorithms defined by JBIG: - - JBG_LRLTWO This option bit changes the JBIG algorithm such that the - context in which the probability of a pixel is - estimated includes only the previous line (two-line - template), rather than the previous two lines - (three-line template). This option is off by default - and the author cannot think of a good reason to set it. - [Some people in the JBIG committee seem to have - argued that using a two-line template will make - software implementations a little bit faster, while - others have argued that using only two lines will - decrease compression efficiency by around 5%. As you - might expect from a committee, now both alternatives - are allowed (and add to the implementation and testing - complexity of every decoder).] - - JBG_TPBON This bit activates the "typical prediction" algorithm. It - is set by default. Typical prediction means that JBIG - prefixes each line to be encoded with a "pseudopixel" - that indicates if the line is identical to the - previous line, and skips encoding the line if it is. - This helps to encode empty parts of a page very - efficiently in just a few bytes, therefore this - option should be left on. (The only reason the author - could think of for ever deactivating this option is - if you know in advance that there will never be two - identical lines follow each other in the image to be - encoded, in which case deactivating this option might - provide a tiny performance improvement.) - - JBG_VLENGTH This bit indicates that the image height y provided - to jbg85_enc_init() was only an estimate and may - be lowered sometimes during the encoding process - using a call to jbg85_enc_newlen(). This feature - is intended for fax machines that start transmitting - a page while still scanning it and without knowing - how long the page is going to be. - -Value -1 for options keeps the current setting, the default is -JBG_TPBON | JBG_VLENGTH. - -The other parameters are: - - l0 Sets the number of lines per stripe (valid range: - 1 to 2^32-1, default 128, value 0 keeps the current - setting). - - mx Changes the maximal offset allowed for the adaptive - template pixel (valid range: 0 to 127, default 127, - value -1 keeps the current setting). - -If the JBG_VLENGTH option was set, then you can call at any time the -function - - void jbg85_enc_newlen(struct jbg85_enc_state *s, unsigned long newlen) - -in order to announce the actual height of the image. You can call this -function only once per image, and the provided new height value newlen -must not be larger than the estimate y originally provided. It is good -practice to call jbg85_enc_newlen() as soon as the height of the image -is known. However, it is even possible to call it after the last line -has already been encoded using jbg85_enc_lineout(). The latter case -will result in a somewhat odd BIE, where an additional empty stripe -has to be appended just to announce the new length. This is not pretty -and was not described in great detail in the original JBIG1 standard, -but decoders are required by ITU-T T.85 to understand even this -extremely late announcement of the end of the image. - -If the image height y initially given to jbg85_enc_init() is already -the correct final value and you will therefore never call -jbg85_enc_newlen(), then it is good practice to clear the JBG_VLENGTH -option bit, which is set by default, e.g. by calling - - jbg85_enc_options(&s, JBG_TPBON, 0, -1); - -between jbg85_enc_init() and jbg85_enc_lineout(). - -The JBIG standard also has a provision for aborting a BIE with a -special abort marker segment, and calling - - void jbg85_enc_abort(struct jbg85_enc_state *s); - -does that. This is probably only needed if there is no other way -(e.g., end-of-file) of telling the decoder that no further data bytes -will be coming. - - -3 Decompressing an image - -Like with the compression functions, if you want to use the jbig85.c -library, you have to put the line - - #include "jbig85.h" - -into your source code and link your executable with libjbig85.a. - -The state of a JBIG decoder is stored completely in a struct and you -will have to define a variable like - - struct jbg85_dec_state s; - -which is initialized by a call to - - void jbg85_dec_init(struct jbg85_dec_state *s, - unsigned char *buf, size_t buflen, - int (*line_out)(const struct jbg85_dec_state *s, - unsigned char *start, size_t len, - unsigned long y, void *file), - void *file); - -The parameters are: - - buf A memory buffer that is long enough to store up to - three lines of the image. This buffer will be used - by the decoder to temporarily store decoded lines. - If the decoded image uses the LRLTWO option, the buffer - has to be only sufficient for two uncompressed - image lines. - - buflen The length in bytes of the buffer area to which buf - points. Knowing this value prevents accidental buffer - overflows and allows the decoder to abort with - JBG_ENOMEM if the provided buffer was too small, once - it knows the width of the image to be decoded from - parsing its 20-byte header. If xmax is the expected - maximum width of the image in pixels, then buflen - should be at least ((xmax >> 3) + !!(xmax & 7)) * 3 - bytes. [If only BIEs with option LRLTWO set will be - received, then ((xmax >> 3) + !!(xmax & 7)) * 2 - bytes will be sufficient.] - - line_out This call-back function will be used whenever the decoder - has completed another line. The start parameter will - point to the location in buf where the len bytes of - the just decoded line reside. The line_out() function - has to read (and copy or output) this line, but it is - not allowed to modify it in-place, as the decoder will - also need to access it while decoding the following - two lines. The parameter y is just the line number - (starting from 0) and file is the jbg85_dec_init() - parameter of the same name passed on. The normal - return value of line_out is zero; a non-zero value - can be returned to request an interrupt of the decoding - process (see discussion of JBG_EOK_INTR below). - - file A pointer parameter that is passed on to line_out() - and can be used, for instance, to allow line_out() to - distinguish by which compression task it has been - called in multi-threaded applications. - -After this, you can directly start to pass data from the BIE to the decoder -by calling the function - - int jbg85_dec_in(struct jbg85_dec_state *s, unsigned char *data, size_t len, - size_t *cnt); - -The pointer data points to the first byte of a data block with length -len, which contains bytes from a BIE. It is not necessary to pass a -whole BIE at once to jbg85_dec_in(), it can arrive fragmented in any -way by calling jbg85_dec_in() several times. Only a single BIE can be -delivered via jbg85_dec_in() calls and the decoder has to be -reinitialized with jbg85_dec_init() before it is ready to accept -another BIE. - -If pointer cnt is not NULL, then the number of bytes actually read -from the data block will be stored there. In case the decoder did not -recognize the end of the BIE in the data block, then the value -JBG_EAGAIN will be returned and *cnt equals len. - -Once the end of a BIE has been reached, the return value of -jbg85_dec_in() will be JBG_EOK. - -The decoder can recognize the end of a BIE only if either the VLENGTH -option is not set, or if there has been a NEWLEN marker segment before -the start of the last stripe. Otherwise, the decoder cannot know -whether there is or is not a NEWLEN marker segment following the last -stripe. For this reason, jbg85_dec_in() can return JBG_EAGAIN even -though you have already given it the last byte of the BIE. In this -case, call - - int jbg85_dec_end(struct jbg85_dec_state *s); - -to explicitely signal to the decoder that it has already received all -bytes of the BIE. This function will then output any remaining lines -and return JBG_EOK if no problem has occurred. - -The macros - - unsigned long jbg85_dec_getwidth(struct jbg85_dec_state *s); - unsigned long jbg85_dec_getheight(struct jbg85_dec_state *s); - -can be used to query the dimensions of the image. The width will be -known already after the first 20 bytes of the BIE have been provided, -and also during the first callback to line_out(). But the height might -not have reached its final value before jbg85_dec_in() has returned -JBG_EOK. The additional boolean macros - - int jbg85_dec_validwidth(struct jbg85_dec_state *s); - int jbg85_dec_finalheight(struct jbg85_dec_state *s); - int jbg85_dec_finished(struct jbg85_dec_state *s); - -tell, whether the width and final height are already known, and -whether the decoder has finished outputting all lines. - -If one of the callbacks to line_out() provides a non-zero return -value, then the decoder will interrupt the decoding process and -jbg85_dec_in() or jbg85_dec_end() will return JBG_EOK_INTR. This -feature might be useful to stop the decoding process temporarily, e.g. -to load a new sheet of paper, where performing this task is -inconvenient to complete inside line_out(). It is then possible to -continue calling jbg85_dec_in() with the remaining data (or -jbg85_dec_end() if there isn't any left) in order to decode the -remaining lines of the BIE. After jbg85_dec_in() returned -JBG_EOK_INTR, *cnt is probably not equal to len and the remainder of -the data block which has not yet been processed by the decoder has to -be delivered to jbg85_dec_in() again. Any line that has already been -delivered to line_out() will not be delivered again. - -If any other return value than JBG_EOK, JBG_EOK_INTR or JBG_EAGAIN has -been returned by jbg85_dec_in() or jbg85_dec_end(), then an error has -occurred and the decoding process has been aborted. The function - - const char *jbg85_strerror(int errnum); - -returns a pointer to a short single-line test message that explains -the return value of jbg85_dec_in() or jbg85_dec_end(). This message -can be used in order to provide the user a brief informative message -about what when wrong while decompressing a JBIG image. The po/ -subdirectory contains *.po files that translate the English ASCII -strings returned by jbg85_strerror() into other languages (e.g., for -use with GNU gettext). The four least-significant bits of the return -value of jbg85_dec_in() or jbg85_dec_end() may contain additional -detailed technical information about the exact test that spotted the -error condition (see source code for details), i.e. more than the text -message returned by jbg85_strerror() reveals. Therefore it may be -useful to display the return value itself as a hexadecimal number, in -addition to the string returned by jbg85_strerror(). - - -4 Additional notes - -The following remarks will not affect the normal user of the library -but might be of interest to some users who have to deal with exotic -cases, in particular dealing with broken non-JBIG-KIT encoders out -there: - - - There has been one report about malformed BIEs produced by another - JBIG implementation that violates the standard by containing - several NEWLEN marker segments in the same BIE. The jbig85.c - decoder will normally abort with JBG_EINVALID when it encounters - such an illegal BIE. The compile-time option - JBG85_TOLERATE_MULTIPLE_NEWLEN can be used to make the decoder - more tolerant to this type of syntax error. - - - Even though the T.85 standard prescribes all-zero values for the - order bits HITOLO, SEQ, ILEAVE, SMID, the jbig85.c decoder will - not complain about any other values of these bits, as they do not - affect the decoding process when there is only a single plane and - resolution layer (the only case supported by this decoder). The - compile-time option JBG85_STRICT_ORDER_BITS will make the decoder - less tolerant and abort with JBG_EIMPL if the received order bits - do not comply with the T.85 "single-progression sequential coding" - requirements. - - - The T.85 standard allows only a single ATMOVE marker segment per - SDE, and the jbig85.c decoder enforces this limit by default. This - limit can be increased by setting JBG85_ATMOVES_MAX in jbig85.h to - the desired value. The encoder will never output more than a - single ATMOVE marker segment per stripe. - -*** Happy decompressing *** - -[end] diff -Nru c2esp-26/jbig_ar.c c2esp-27~rc1/jbig_ar.c --- c2esp-26/jbig_ar.c 2008-09-05 15:05:54.000000000 +0000 +++ c2esp-27~rc1/jbig_ar.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,426 +0,0 @@ -/* - * Arithmetic encoder and decoder of the portable JBIG - * compression library - * - * Markus Kuhn -- http://www.cl.cam.ac.uk/~mgk25/jbigkit/ - * - * This module implements a portable standard C arithmetic encoder - * and decoder used by the JBIG lossless bi-level image compression - * algorithm as specified in International Standard ISO 11544:1993 - * and ITU-T Recommendation T.82. - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * If you want to use this program under different license conditions, - * then contact the author for an arrangement. - * - * It is possible that certain products which can be built using this - * software module might form inventions protected by patent rights in - * some countries (e.g., by patents about arithmetic coding algorithms - * owned by IBM and AT&T in the USA). Provision of this software by the - * author does NOT include any licences for any patents. In those - * countries where a patent licence is required for certain applications - * of this software module, you will have to obtain such a licence - * yourself. - */ - -#include -#include "jbig_ar.h" - -/* - * Probability estimation tables for the arithmetic encoder/decoder - * given by ITU T.82 Table 24. - */ - -static short lsztab[113] = { - 0x5a1d, 0x2586, 0x1114, 0x080b, 0x03d8, 0x01da, 0x00e5, 0x006f, - 0x0036, 0x001a, 0x000d, 0x0006, 0x0003, 0x0001, 0x5a7f, 0x3f25, - 0x2cf2, 0x207c, 0x17b9, 0x1182, 0x0cef, 0x09a1, 0x072f, 0x055c, - 0x0406, 0x0303, 0x0240, 0x01b1, 0x0144, 0x00f5, 0x00b7, 0x008a, - 0x0068, 0x004e, 0x003b, 0x002c, 0x5ae1, 0x484c, 0x3a0d, 0x2ef1, - 0x261f, 0x1f33, 0x19a8, 0x1518, 0x1177, 0x0e74, 0x0bfb, 0x09f8, - 0x0861, 0x0706, 0x05cd, 0x04de, 0x040f, 0x0363, 0x02d4, 0x025c, - 0x01f8, 0x01a4, 0x0160, 0x0125, 0x00f6, 0x00cb, 0x00ab, 0x008f, - 0x5b12, 0x4d04, 0x412c, 0x37d8, 0x2fe8, 0x293c, 0x2379, 0x1edf, - 0x1aa9, 0x174e, 0x1424, 0x119c, 0x0f6b, 0x0d51, 0x0bb6, 0x0a40, - 0x5832, 0x4d1c, 0x438e, 0x3bdd, 0x34ee, 0x2eae, 0x299a, 0x2516, - 0x5570, 0x4ca9, 0x44d9, 0x3e22, 0x3824, 0x32b4, 0x2e17, 0x56a8, - 0x4f46, 0x47e5, 0x41cf, 0x3c3d, 0x375e, 0x5231, 0x4c0f, 0x4639, - 0x415e, 0x5627, 0x50e7, 0x4b85, 0x5597, 0x504f, 0x5a10, 0x5522, - 0x59eb -}; - -static unsigned char nmpstab[113] = { - 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 13, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 9, 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, 32, - 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 48, - 81, 82, 83, 84, 85, 86, 87, 71, - 89, 90, 91, 92, 93, 94, 86, 96, - 97, 98, 99, 100, 93, 102, 103, 104, - 99, 106, 107, 103, 109, 107, 111, 109, - 111 -}; - -/* - * least significant 7 bits (mask 0x7f) of nlpstab[] contain NLPS value, - * most significant bit (mask 0x80) contains SWTCH bit - */ -static unsigned char nlpstab[113] = { - 129, 14, 16, 18, 20, 23, 25, 28, - 30, 33, 35, 9, 10, 12, 143, 36, - 38, 39, 40, 42, 43, 45, 46, 48, - 49, 51, 52, 54, 56, 57, 59, 60, - 62, 63, 32, 33, 165, 64, 65, 67, - 68, 69, 70, 72, 73, 74, 75, 77, - 78, 79, 48, 50, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 61, 61, - 193, 80, 81, 82, 83, 84, 86, 87, - 87, 72, 72, 74, 74, 75, 77, 77, - 208, 88, 89, 90, 91, 92, 93, 86, - 216, 95, 96, 97, 99, 99, 93, 223, - 101, 102, 103, 104, 99, 105, 106, 107, - 103, 233, 108, 109, 110, 111, 238, 112, - 240 -}; - -/* - * The next functions implement the arithmedic encoder and decoder - * required for JBIG. The same algorithm is also used in the arithmetic - * variant of JPEG. - */ - -/* marker codes */ -#define MARKER_STUFF 0x00 -#define MARKER_ESC 0xff - -void arith_encode_init(struct jbg_arenc_state *s, int reuse_st) -{ - int i; - - if (!reuse_st) - for (i = 0; i < 4096; s->st[i++] = 0); - s->c = 0; - s->a = 0x10000L; - s->sc = 0; - s->ct = 11; - s->buffer = -1; /* empty */ - - return; -} - - -void arith_encode_flush(struct jbg_arenc_state *s) -{ - unsigned long temp; - - /* find the s->c in the coding interval with the largest - * number of trailing zero bits */ - if ((temp = (s->a - 1 + s->c) & 0xffff0000L) < s->c) - s->c = temp + 0x8000; - else - s->c = temp; - /* send remaining bytes to output */ - s->c <<= s->ct; - if (s->c & 0xf8000000L) { - /* one final overflow has to be handled */ - if (s->buffer >= 0) { - s->byte_out(s->buffer + 1, s->file); - if (s->buffer + 1 == MARKER_ESC) - s->byte_out(MARKER_STUFF, s->file); - } - /* output 0x00 bytes only when more non-0x00 will follow */ - if (s->c & 0x7fff800L) - for (; s->sc; --s->sc) - s->byte_out(0x00, s->file); - } else { - if (s->buffer >= 0) - s->byte_out(s->buffer, s->file); - /* T.82 figure 30 says buffer+1 for the above line! Typo? */ - for (; s->sc; --s->sc) { - s->byte_out(0xff, s->file); - s->byte_out(MARKER_STUFF, s->file); - } - } - /* output final bytes only if they are not 0x00 */ - if (s->c & 0x7fff800L) { - s->byte_out((s->c >> 19) & 0xff, s->file); - if (((s->c >> 19) & 0xff) == MARKER_ESC) - s->byte_out(MARKER_STUFF, s->file); - if (s->c & 0x7f800L) { - s->byte_out((s->c >> 11) & 0xff, s->file); - if (((s->c >> 11) & 0xff) == MARKER_ESC) - s->byte_out(MARKER_STUFF, s->file); - } - } - - return; -} - - -void arith_encode(struct jbg_arenc_state *s, int cx, int pix) -{ - register unsigned lsz, ss; - register unsigned char *st; - long temp; - - assert(cx >= 0 && cx < 4096); - st = s->st + cx; - ss = *st & 0x7f; - assert(ss < 113); - lsz = lsztab[ss]; - -#if 0 - fprintf(stderr, "pix = %d, cx = %d, mps = %d, st = %3d, lsz = 0x%04x, " - "a = 0x%05lx, c = 0x%08lx, ct = %2d, buf = 0x%02x\n", - pix, cx, !!(s->st[cx] & 0x80), ss, lsz, s->a, s->c, s->ct, - s->buffer); -#endif - - if (((pix << 7) ^ s->st[cx]) & 0x80) { - /* encode the less probable symbol */ - if ((s->a -= lsz) >= lsz) { - /* If the interval size (lsz) for the less probable symbol (LPS) - * is larger than the interval size for the MPS, then exchange - * the two symbols for coding efficiency, otherwise code the LPS - * as usual: */ - s->c += s->a; - s->a = lsz; - } - /* Check whether MPS/LPS exchange is necessary - * and chose next probability estimator status */ - *st &= 0x80; - *st ^= nlpstab[ss]; - } else { - /* encode the more probable symbol */ - if ((s->a -= lsz) & 0xffff8000L) - return; /* A >= 0x8000 -> ready, no renormalization required */ - if (s->a < lsz) { - /* If the interval size (lsz) for the less probable symbol (LPS) - * is larger than the interval size for the MPS, then exchange - * the two symbols for coding efficiency: */ - s->c += s->a; - s->a = lsz; - } - /* chose next probability estimator status */ - *st &= 0x80; - *st |= nmpstab[ss]; - } - - /* renormalization of coding interval */ - do { - s->a <<= 1; - s->c <<= 1; - --s->ct; - if (s->ct == 0) { - /* another byte is ready for output */ - temp = s->c >> 19; - if (temp & 0xffffff00L) { - /* handle overflow over all buffered 0xff bytes */ - if (s->buffer >= 0) { - ++s->buffer; - s->byte_out(s->buffer, s->file); - if (s->buffer == MARKER_ESC) - s->byte_out(MARKER_STUFF, s->file); - } - for (; s->sc; --s->sc) - s->byte_out(0x00, s->file); - s->buffer = temp & 0xff; /* new output byte, might overflow later */ - assert(s->buffer != 0xff); - /* can s->buffer really never become 0xff here? */ - } else if (temp == 0xff) { - /* buffer 0xff byte (which might overflow later) */ - ++s->sc; - } else { - /* output all buffered 0xff bytes, they will not overflow any more */ - if (s->buffer >= 0) - s->byte_out(s->buffer, s->file); - for (; s->sc; --s->sc) { - s->byte_out(0xff, s->file); - s->byte_out(MARKER_STUFF, s->file); - } - s->buffer = temp; /* buffer new output byte (can still overflow) */ - } - s->c &= 0x7ffffL; - s->ct = 8; - } - } while (s->a < 0x8000); - - return; -} - - -void arith_decode_init(struct jbg_ardec_state *s, int reuse_st) -{ - int i; - - if (!reuse_st) - for (i = 0; i < 4096; s->st[i++] = 0); - s->c = 0; - s->a = 1; - s->ct = 0; - s->startup = 1; - s->nopadding = 0; - return; -} - -/* - * Decode and return one symbol from the provided PSCD byte stream - * that starts in s->pscd_ptr and ends in the byte before s->pscd_end. - * The context cx is a 12-bit integer in the range 0..4095. This - * function will advance s->pscd_ptr each time it has consumed all - * information from that PSCD byte. - * - * If a symbol has been decoded successfully, the return value will be - * 0 or 1 (depending on the symbol). - * - * If the decoder was not able to decode a symbol from the provided - * PSCD, then the return value will be -1, and two cases can be - * distinguished: - * - * s->pscd_ptr == s->pscd_end: - * - * The decoder has used up all information in the provided PSCD - * bytes. Further PSCD bytes have to be provided (via new values of - * s->pscd_ptr and/or s->pscd_end) before another symbol can be - * decoded. - * - * s->pscd_ptr == s->pscd_end - 1: - * - * The decoder has used up all provided PSCD bytes except for the - * very last byte, because that has the value 0xff. The decoder can - * at this point not yet tell whether this 0xff belongs to a - * MARKER_STUFF sequence or marks the end of the PSCD. Further PSCD - * bytes have to be provided (via new values of s->pscd_ptr and/or - * s->pscd_end), including the not yet processed 0xff byte, before - * another symbol can be decoded successfully. - * - * If s->nopadding != 0, the decoder will return -2 when it reaches - * the first two bytes of the marker segment that follows (and - * terminates) the PSCD, but before decoding the first symbol that - * depends on a bit in the input data that could have been the result - * of zero padding, and might, therefore, never have been encoded. - * This gives the caller the opportunity to lookahead early enough - * beyond a terminating SDNORM/SDRST for a trailing NEWLEN (as - * required by T.85) before decoding remaining symbols. Call the - * decoder again afterwards as often as necessary (leaving s->pscd_ptr - * pointing to the start of the marker segment) to retrieve any - * required remaining symbols that might depend on padding. - * - * [Note that each PSCD can be decoded into an infinitely long - * sequence of symbols, because the encoder might have truncated away - * an arbitrarily long sequence of trailing 0x00 bytes, which the - * decoder will append automatically as needed when it reaches the end - * of the PSCD. Therefore, the decoder cannot report any end of the - * symbol sequence and other means (external to the PSCD and - * arithmetic decoding process) are needed to determine that.] - */ - -int arith_decode(struct jbg_ardec_state *s, int cx) -{ - register unsigned lsz, ss; - register unsigned char *st; - int pix; - - /* renormalization */ - while (s->a < 0x8000 || s->startup) { - while (s->ct <= 8 && s->ct >= 0) { - /* first we can move a new byte into s->c */ - if (s->pscd_ptr >= s->pscd_end) { - return -1; /* more bytes needed */ - } - if (*s->pscd_ptr == 0xff) - if (s->pscd_ptr + 1 >= s->pscd_end) { - return -1; /* final 0xff byte not processed */ - } else { - if (*(s->pscd_ptr + 1) == MARKER_STUFF) { - s->c |= 0xffL << (8 - s->ct); - s->ct += 8; - s->pscd_ptr += 2; - } else { - s->ct = -1; /* start padding with zero bytes */ - if (s->nopadding) { - s->nopadding = 0; - return -2; /* subsequent symbols might depend on zero padding */ - } - } - } - else { - s->c |= (long)*(s->pscd_ptr++) << (8 - s->ct); - s->ct += 8; - } - } - s->c <<= 1; - s->a <<= 1; - if (s->ct >= 0) s->ct--; - if (s->a == 0x10000L) - s->startup = 0; - } - - st = s->st + cx; - ss = *st & 0x7f; - assert(ss < 113); - lsz = lsztab[ss]; - -#if 0 - fprintf(stderr, "cx = %d, mps = %d, st = %3d, lsz = 0x%04x, a = 0x%05lx, " - "c = 0x%08lx, ct = %2d\n", - cx, !!(s->st[cx] & 0x80), ss, lsz, s->a, s->c, s->ct); -#endif - - if ((s->c >> 16) < (s->a -= lsz)) - if (s->a & 0xffff8000L) - return *st >> 7; - else { - /* MPS_EXCHANGE */ - if (s->a < lsz) { - pix = 1 - (*st >> 7); - /* Check whether MPS/LPS exchange is necessary - * and chose next probability estimator status */ - *st &= 0x80; - *st ^= nlpstab[ss]; - } else { - pix = *st >> 7; - *st &= 0x80; - *st |= nmpstab[ss]; - } - } - else { - /* LPS_EXCHANGE */ - if (s->a < lsz) { - s->c -= s->a << 16; - s->a = lsz; - pix = *st >> 7; - *st &= 0x80; - *st |= nmpstab[ss]; - } else { - s->c -= s->a << 16; - s->a = lsz; - pix = 1 - (*st >> 7); - /* Check whether MPS/LPS exchange is necessary - * and chose next probability estimator status */ - *st &= 0x80; - *st ^= nlpstab[ss]; - } - } - - return pix; -} diff -Nru c2esp-26/jbig_ar.h c2esp-27~rc1/jbig_ar.h --- c2esp-26/jbig_ar.h 2008-09-05 15:05:54.000000000 +0000 +++ c2esp-27~rc1/jbig_ar.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/* - * Header file for the arithmetic encoder and decoder of - * the portable JBIG compression library - * - * Markus Kuhn -- http://www.cl.cam.ac.uk/~mgk25/jbigkit/ - * - * $Id: jbig_ar.h,v 1.1 2008/09/05 15:05:54 rick Exp $ - */ - -#ifndef JBG_AR_H -#define JBG_AR_H - -/* - * Status of arithmetic encoder - */ - -struct jbg_arenc_state { - unsigned char st[4096]; /* probability status for contexts, MSB = MPS */ - unsigned long c; /* register C: base of coding intervall, * - * layout as in Table 23 */ - unsigned long a; /* register A: normalized size of coding interval */ - long sc; /* number of buffered 0xff values that might still overflow */ - int ct; /* bit shift counter, determines when next byte will be written */ - int buffer; /* buffer for most recent output byte != 0xff */ - void (*byte_out)(int, void *); /* function that receives all PSCD bytes */ - void *file; /* parameter passed to byte_out */ -}; - -/* - * Status of arithmetic decoder - */ - -struct jbg_ardec_state { - unsigned char st[4096]; /* probability status for contexts, MSB = MPS */ - unsigned long c; /* register C: base of coding intervall, * - * layout as in Table 25 */ - unsigned long a; /* register A: normalized size of coding interval */ - unsigned char *pscd_ptr; /* pointer to next PSCD data byte */ - unsigned char *pscd_end; /* pointer to byte after PSCD */ - int ct; /* bit-shift counter, determines when next byte will be read; - * special value -1 signals that zero-padding has started */ - int startup; /* boolean flag that controls initial fill of s->c */ - int nopadding; /* boolean flag that triggers return -2 between - * reaching PSCD end and decoding the first symbol - * that might never have been encoded in the first - * place */ -}; - -void arith_encode_init(struct jbg_arenc_state *s, int reuse_st); -void arith_encode_flush(struct jbg_arenc_state *s); -void arith_encode(struct jbg_arenc_state *s, int cx, int pix); -void arith_decode_init(struct jbg_ardec_state *s, int reuse_st); -int arith_decode(struct jbg_ardec_state *s, int cx); - -#endif /* JBG_AR_H */ diff -Nru c2esp-26/myopldecode.c c2esp-27~rc1/myopldecode.c --- c2esp-26/myopldecode.c 2011-10-18 18:29:57.000000000 +0000 +++ c2esp-27~rc1/myopldecode.c 2013-12-17 17:00:06.000000000 +0000 @@ -34,7 +34,7 @@ #include /* for jbig */ -#include "jbig.h" +#include /* for gzip */ #include @@ -60,7 +60,7 @@ int GZIPTokToRaster(FILE *source, FILE *dest,int width,int height,int bytesperpixel) { /* converts source file of inflated GZIP data to a raster file dest */ - int i,prevcode,prevvalue; + int i,prevcode=0,prevvalue=0; int repeats = 1; int RGBbuffer[15000]; //to reorder the rrrgggbbb data into rgbrgbrgb @@ -613,7 +613,7 @@ decode(FILE *fp) { int bitsperpixel,h,w,c,i; - int rc; + int rc=0; int FirstData; //the position of the first data byte in compressed data. In JBIG data the first stripe has a 20 bytes header, and FirstData=21. FILE *dfp = NULL; FILE *ifp = NULL; @@ -719,13 +719,13 @@ } } FirstData = 1; - unsigned char ch; + //unsigned char ch; //ch may not be needed 17/12/13 printf("\n", datalen); for(i=FirstData;i<=datalen;++i) { c = getc(fp); - ch = c; + //ch = c; //ch may not be needed 17/12/13 if(i==FirstData) { printf("\n"); diff -Nru c2esp-26/ppd/Kodak_ESP_1.2.ppd c2esp-27~rc1/ppd/Kodak_ESP_1.2.ppd --- c2esp-26/ppd/Kodak_ESP_1.2.ppd 1970-01-01 00:00:00.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_1.2.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -0,0 +1,151 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for KODAK ESP 1.2 AiO with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall +*FormatVersion: "4.3" +*FileVersion: "1.6" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "KESP12.ppd" +*Product: "(KODAK ESP 1.2 AiO)" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK ESP 1.2 AiO" +*ShortNickName: "KODAK ESP 1.2 AiO" +*NickName: "KODAK ESP 1.2 AiO" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: True +*DefaultColorSpace: CMY +*FileSystem: False +*Throughput: "8" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*cupsSNMPSupplies: False +*cupsCommands: "Clean PrintSelfTestPage PrintAlignmentPage ReportLevels" +*marker-colors: "black magenta" +*1284DeviceID: "MFG:Eastman Kodak Company;MDL:KODAK ESP 1.2 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" +*cupsVersion: 1.4 +*cupsModelNumber: -1 +*cupsManualCopies: True +*cupsFilter: "application/vnd.cups-raster 50 /usr/lib/cups/filter/c2espC" +*cupsFilter: "application/vnd.cups-command 50 /usr/lib/cups/filter/command2esp" +*cupsColorProfile 300x300dpi/-: "1 1 1 0 0 0 1 0 0 0 1" +*cupsColorProfile 600x600dpi/-: "1 1 1 0 0 0 1 0 0 0 1" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: A4 +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize 8x10/8 x 10: "<>setpagedevice" +*PageSize Photo4x6/Photo: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize EnvC5/Envelope C5: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" +*PageSize Env10/Envelope #10 : "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: A4 +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion 8x10/8 x 10: "<>setpagedevice" +*PageRegion Photo4x6/Photo: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion EnvC5/Envelope C5: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" +*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: A4 +*ImageableArea Executive/Executive: "3 3 519 753" +*ImageableArea Letter/US Letter: "3 3 609 789" +*ImageableArea Legal/US Legal: "3 3 609 1005" +*ImageableArea A4/A4: "3 3 592 839" +*ImageableArea A5/A5: "3 3 417 592" +*ImageableArea A6/A6: "3 3 294 417" +*ImageableArea 8x10/8 x 10: "3 3 573 717" +*ImageableArea Photo4x6/Photo: "3 3 285 429" +*ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" +*ImageableArea EnvC5/Envelope C5: "3 3 456 646" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" +*ImageableArea Env10/Envelope #10 : "3 3 294 681" +*DefaultPaperDimension: A4 +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension 8x10/8 x 10: "576 720" +*PaperDimension Photo4x6/Photo: "288 432" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension EnvC5/Envelope C5: "459 649" +*PaperDimension EnvDL/Envelope DL: "312 624" +*PaperDimension Env10/Envelope #10 : "297 684" +*MaxMediaWidth: "1080" +*MaxMediaHeight: "86400" +*HWMargins: 3 3 3 3 +*CustomPageSize True: "pop pop pop <>setpagedevice" +*ParamCustomPageSize Width: 1 points 36 1080 +*ParamCustomPageSize Height: 2 points 36 86400 +*ParamCustomPageSize WidthOffset: 3 points 0 0 +*ParamCustomPageSize HeightOffset: 4 points 0 0 +*ParamCustomPageSize Orientation: 5 int 0 0 +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 20 AnySetup *Resolution +*DefaultResolution: 600x600dpi +*Resolution 300x300dpi/300x300: "<>setpagedevice" +*Resolution 600x600dpi/600x600: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *ColorModel/ColorModel: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: CMY +*ColorModel Gray/Grayscale: "<>setpagedevice" +*ColorModel CMY/Color: "<>setpagedevice" +*CloseUI: *ColorModel +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of KESP12.ppd, 07605 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_2.2.ppd c2esp-27~rc1/ppd/Kodak_ESP_2.2.ppd --- c2esp-26/ppd/Kodak_ESP_2.2.ppd 1970-01-01 00:00:00.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_2.2.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -0,0 +1,151 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for KODAK ESP 2.2 AiO with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall +*FormatVersion: "4.3" +*FileVersion: "1.6" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "KESP22.ppd" +*Product: "(KODAK ESP 2.2 AiO)" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK ESP 2.2 AiO" +*ShortNickName: "KODAK ESP 2.2 AiO" +*NickName: "KODAK ESP 2.2 AiO" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: True +*DefaultColorSpace: CMY +*FileSystem: False +*Throughput: "8" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*cupsSNMPSupplies: False +*cupsCommands: "Clean PrintSelfTestPage PrintAlignmentPage ReportLevels" +*marker-colors: "black magenta" +*1284DeviceID: "MFG:Eastman Kodak Company;MDL:KODAK ESP 2.2 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" +*cupsVersion: 1.4 +*cupsModelNumber: -1 +*cupsManualCopies: True +*cupsFilter: "application/vnd.cups-raster 50 /usr/lib/cups/filter/c2espC" +*cupsFilter: "application/vnd.cups-command 50 /usr/lib/cups/filter/command2esp" +*cupsColorProfile 300x300dpi/-: "1 1 1 0 0 0 1 0 0 0 1" +*cupsColorProfile 600x600dpi/-: "1 1 1 0 0 0 1 0 0 0 1" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: A4 +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize 8x10/8 x 10: "<>setpagedevice" +*PageSize Photo4x6/Photo: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize EnvC5/Envelope C5: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" +*PageSize Env10/Envelope #10 : "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: A4 +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion 8x10/8 x 10: "<>setpagedevice" +*PageRegion Photo4x6/Photo: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion EnvC5/Envelope C5: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" +*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: A4 +*ImageableArea Executive/Executive: "3 3 519 753" +*ImageableArea Letter/US Letter: "3 3 609 789" +*ImageableArea Legal/US Legal: "3 3 609 1005" +*ImageableArea A4/A4: "3 3 592 839" +*ImageableArea A5/A5: "3 3 417 592" +*ImageableArea A6/A6: "3 3 294 417" +*ImageableArea 8x10/8 x 10: "3 3 573 717" +*ImageableArea Photo4x6/Photo: "3 3 285 429" +*ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" +*ImageableArea EnvC5/Envelope C5: "3 3 456 646" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" +*ImageableArea Env10/Envelope #10 : "3 3 294 681" +*DefaultPaperDimension: A4 +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension 8x10/8 x 10: "576 720" +*PaperDimension Photo4x6/Photo: "288 432" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension EnvC5/Envelope C5: "459 649" +*PaperDimension EnvDL/Envelope DL: "312 624" +*PaperDimension Env10/Envelope #10 : "297 684" +*MaxMediaWidth: "1080" +*MaxMediaHeight: "86400" +*HWMargins: 3 3 3 3 +*CustomPageSize True: "pop pop pop <>setpagedevice" +*ParamCustomPageSize Width: 1 points 36 1080 +*ParamCustomPageSize Height: 2 points 36 86400 +*ParamCustomPageSize WidthOffset: 3 points 0 0 +*ParamCustomPageSize HeightOffset: 4 points 0 0 +*ParamCustomPageSize Orientation: 5 int 0 0 +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 20 AnySetup *Resolution +*DefaultResolution: 600x600dpi +*Resolution 300x300dpi/300x300: "<>setpagedevice" +*Resolution 600x600dpi/600x600: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *ColorModel/ColorModel: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: CMY +*ColorModel Gray/Grayscale: "<>setpagedevice" +*ColorModel CMY/Color: "<>setpagedevice" +*CloseUI: *ColorModel +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of KESP22.ppd, 07605 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_3.2.ppd c2esp-27~rc1/ppd/Kodak_ESP_3.2.ppd --- c2esp-26/ppd/Kodak_ESP_3.2.ppd 1970-01-01 00:00:00.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_3.2.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -0,0 +1,151 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for KODAK ESP 3.2 AiO with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall +*FormatVersion: "4.3" +*FileVersion: "1.6" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "KESP32.ppd" +*Product: "(KODAK ESP 3.2 AiO)" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK ESP 3.2 AiO" +*ShortNickName: "KODAK ESP 3.2 AiO" +*NickName: "KODAK ESP 3.2 AiO" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: True +*DefaultColorSpace: CMY +*FileSystem: False +*Throughput: "8" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*cupsSNMPSupplies: False +*cupsCommands: "Clean PrintSelfTestPage PrintAlignmentPage ReportLevels" +*marker-colors: "black magenta" +*1284DeviceID: "MFG:Eastman Kodak Company;MDL:KODAK ESP 3.2 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" +*cupsVersion: 1.4 +*cupsModelNumber: -1 +*cupsManualCopies: True +*cupsFilter: "application/vnd.cups-raster 50 /usr/lib/cups/filter/c2espC" +*cupsFilter: "application/vnd.cups-command 50 /usr/lib/cups/filter/command2esp" +*cupsColorProfile 300x300dpi/-: "1 1 1 0 0 0 1 0 0 0 1" +*cupsColorProfile 600x600dpi/-: "1 1 1 0 0 0 1 0 0 0 1" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: A4 +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize 8x10/8 x 10: "<>setpagedevice" +*PageSize Photo4x6/Photo: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize EnvC5/Envelope C5: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" +*PageSize Env10/Envelope #10 : "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: A4 +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion 8x10/8 x 10: "<>setpagedevice" +*PageRegion Photo4x6/Photo: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion EnvC5/Envelope C5: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" +*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: A4 +*ImageableArea Executive/Executive: "3 3 519 753" +*ImageableArea Letter/US Letter: "3 3 609 789" +*ImageableArea Legal/US Legal: "3 3 609 1005" +*ImageableArea A4/A4: "3 3 592 839" +*ImageableArea A5/A5: "3 3 417 592" +*ImageableArea A6/A6: "3 3 294 417" +*ImageableArea 8x10/8 x 10: "3 3 573 717" +*ImageableArea Photo4x6/Photo: "3 3 285 429" +*ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" +*ImageableArea EnvC5/Envelope C5: "3 3 456 646" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" +*ImageableArea Env10/Envelope #10 : "3 3 294 681" +*DefaultPaperDimension: A4 +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension 8x10/8 x 10: "576 720" +*PaperDimension Photo4x6/Photo: "288 432" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension EnvC5/Envelope C5: "459 649" +*PaperDimension EnvDL/Envelope DL: "312 624" +*PaperDimension Env10/Envelope #10 : "297 684" +*MaxMediaWidth: "1080" +*MaxMediaHeight: "86400" +*HWMargins: 3 3 3 3 +*CustomPageSize True: "pop pop pop <>setpagedevice" +*ParamCustomPageSize Width: 1 points 36 1080 +*ParamCustomPageSize Height: 2 points 36 86400 +*ParamCustomPageSize WidthOffset: 3 points 0 0 +*ParamCustomPageSize HeightOffset: 4 points 0 0 +*ParamCustomPageSize Orientation: 5 int 0 0 +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 20 AnySetup *Resolution +*DefaultResolution: 600x600dpi +*Resolution 300x300dpi/300x300: "<>setpagedevice" +*Resolution 600x600dpi/600x600: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *ColorModel/ColorModel: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: CMY +*ColorModel Gray/Grayscale: "<>setpagedevice" +*ColorModel CMY/Color: "<>setpagedevice" +*CloseUI: *ColorModel +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of KESP32.ppd, 07605 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_3.ppd c2esp-27~rc1/ppd/Kodak_ESP_3.ppd --- c2esp-26/ppd/Kodak_ESP_3.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_3.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP 3 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP3.ppd" *Product: "(Kodak ESP 3 AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP 3 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP 3 AiO" *ShortNickName: "Kodak ESP 3 AiO" -*NickName: "Kodak ESP 3" +*NickName: "Kodak ESP 3 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -49,7 +49,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -65,7 +65,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -79,7 +79,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -92,7 +92,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -156,4 +156,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP3.ppd, 07899 bytes. +*% End of KESP3.ppd, 07954 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_32xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_32xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_32xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_32xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP 3200 Series AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP32xx.ppd" *Product: "(Kodak ESP 3200 Series AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP 3200 Series AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP 3200 Series AiO" *ShortNickName: "Kodak ESP 3200 Series AiO" -*NickName: "Kodak ESP 3200" +*NickName: "Kodak ESP 3200 Series AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -49,7 +49,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -65,7 +65,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -79,7 +79,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -92,7 +92,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -151,4 +151,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP32xx.ppd, 07764 bytes. +*% End of KESP32xx.ppd, 07826 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_4.2.ppd c2esp-27~rc1/ppd/Kodak_ESP_4.2.ppd --- c2esp-26/ppd/Kodak_ESP_4.2.ppd 1970-01-01 00:00:00.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_4.2.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -0,0 +1,151 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for KODAK ESP 4.2 AiO with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall +*FormatVersion: "4.3" +*FileVersion: "1.6" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "KESP42.ppd" +*Product: "(KODAK ESP 4.2 AiO)" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK ESP 4.2 AiO" +*ShortNickName: "KODAK ESP 4.2 AiO" +*NickName: "KODAK ESP 4.2 AiO" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: True +*DefaultColorSpace: CMY +*FileSystem: False +*Throughput: "8" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*cupsSNMPSupplies: False +*cupsCommands: "Clean PrintSelfTestPage PrintAlignmentPage ReportLevels" +*marker-colors: "black magenta" +*1284DeviceID: "MFG:Eastman Kodak Company;MDL:KODAK ESP 4.2 AiO;CMD:OPL V1.00;CLS:PRINTER;DES:AIO;VER:1.00;" +*cupsVersion: 1.4 +*cupsModelNumber: -1 +*cupsManualCopies: True +*cupsFilter: "application/vnd.cups-raster 50 /usr/lib/cups/filter/c2espC" +*cupsFilter: "application/vnd.cups-command 50 /usr/lib/cups/filter/command2esp" +*cupsColorProfile 300x300dpi/-: "1 1 1 0 0 0 1 0 0 0 1" +*cupsColorProfile 600x600dpi/-: "1 1 1 0 0 0 1 0 0 0 1" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: A4 +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize 8x10/8 x 10: "<>setpagedevice" +*PageSize Photo4x6/Photo: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize EnvC5/Envelope C5: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" +*PageSize Env10/Envelope #10 : "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: A4 +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion 8x10/8 x 10: "<>setpagedevice" +*PageRegion Photo4x6/Photo: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion EnvC5/Envelope C5: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" +*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: A4 +*ImageableArea Executive/Executive: "3 3 519 753" +*ImageableArea Letter/US Letter: "3 3 609 789" +*ImageableArea Legal/US Legal: "3 3 609 1005" +*ImageableArea A4/A4: "3 3 592 839" +*ImageableArea A5/A5: "3 3 417 592" +*ImageableArea A6/A6: "3 3 294 417" +*ImageableArea 8x10/8 x 10: "3 3 573 717" +*ImageableArea Photo4x6/Photo: "3 3 285 429" +*ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" +*ImageableArea EnvC5/Envelope C5: "3 3 456 646" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" +*ImageableArea Env10/Envelope #10 : "3 3 294 681" +*DefaultPaperDimension: A4 +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension 8x10/8 x 10: "576 720" +*PaperDimension Photo4x6/Photo: "288 432" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension EnvC5/Envelope C5: "459 649" +*PaperDimension EnvDL/Envelope DL: "312 624" +*PaperDimension Env10/Envelope #10 : "297 684" +*MaxMediaWidth: "1080" +*MaxMediaHeight: "86400" +*HWMargins: 3 3 3 3 +*CustomPageSize True: "pop pop pop <>setpagedevice" +*ParamCustomPageSize Width: 1 points 36 1080 +*ParamCustomPageSize Height: 2 points 36 86400 +*ParamCustomPageSize WidthOffset: 3 points 0 0 +*ParamCustomPageSize HeightOffset: 4 points 0 0 +*ParamCustomPageSize Orientation: 5 int 0 0 +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 20 AnySetup *Resolution +*DefaultResolution: 600x600dpi +*Resolution 300x300dpi/300x300: "<>setpagedevice" +*Resolution 600x600dpi/600x600: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *ColorModel/ColorModel: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: CMY +*ColorModel Gray/Grayscale: "<>setpagedevice" +*ColorModel CMY/Color: "<>setpagedevice" +*CloseUI: *ColorModel +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of KESP42.ppd, 07605 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_41xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_41xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_41xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_41xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP Office 4100 Series AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP41xx.ppd" *Product: "(Kodak ESP Office 4100 Series AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP Office 4100 Series AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP Office 4100 Series AiO" *ShortNickName: "Kodak ESP Office 4100 Series AiO" -*NickName: "Kodak ESP Office 4100" +*NickName: "Kodak ESP Office 4100 Series AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -49,7 +49,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -65,7 +65,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -79,7 +79,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -92,7 +92,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -151,4 +151,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP41xx.ppd, 07806 bytes. +*% End of KESP41xx.ppd, 07868 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_5.ppd c2esp-27~rc1/ppd/Kodak_ESP_5.ppd --- c2esp-26/ppd/Kodak_ESP_5.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_5.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP 5 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP5.ppd" *Product: "(Kodak ESP 5 AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP 5 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP 5 AiO" *ShortNickName: "Kodak ESP 5 AiO" -*NickName: "Kodak ESP 5" +*NickName: "Kodak ESP 5 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -49,7 +49,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -65,7 +65,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -79,7 +79,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -92,7 +92,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -156,4 +156,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP5.ppd, 07899 bytes. +*% End of KESP5.ppd, 07954 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_51xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_51xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_51xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_51xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,15 +1,15 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak 5100 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP51xx.ppd" *Product: "(Kodak 5100 AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak 5100 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak 5100 AiO" *ShortNickName: "Kodak 5100 AiO" *NickName: "Kodak 5100 AiO" *PSVersion: "(3010.000) 0" @@ -50,7 +50,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -66,7 +66,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -80,7 +80,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -93,7 +93,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -165,4 +165,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP51xx.ppd, 08358 bytes. +*% End of KESP51xx.ppd, 08409 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_52xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_52xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_52xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_52xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP 5200 Series AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP52xx.ppd" *Product: "(Kodak ESP 5200 Series AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP 5200 Series AiO" -*ShortNickName: "Kodak ESP 5200 Series AiO" -*NickName: "Kodak ESP 5200" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP 5200 Series AiO" +*ShortNickName: "Kodak ESP 5200 Series Aio" +*NickName: "Kodak ESP 5200 Series AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -49,7 +49,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -65,7 +65,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -79,7 +79,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -92,7 +92,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -151,4 +151,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP52xx.ppd, 07764 bytes. +*% End of KESP52xx.ppd, 07826 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_53xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_53xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_53xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_53xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,15 +1,15 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak 5300 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP53xx.ppd" *Product: "(Kodak 5300 AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak 5300 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak 5300 AiO" *ShortNickName: "Kodak 5300 AiO" *NickName: "Kodak 5300 AiO" *PSVersion: "(3010.000) 0" @@ -50,7 +50,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -66,7 +66,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -80,7 +80,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -93,7 +93,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -165,4 +165,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP53xx.ppd, 08358 bytes. +*% End of KESP53xx.ppd, 08409 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_55xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_55xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_55xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_55xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,15 +1,15 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak 5500 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP55xx.ppd" *Product: "(Kodak 5500 AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak 5500 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak 5500 AiO" *ShortNickName: "Kodak 5500 AiO" *NickName: "Kodak 5500 AiO" *PSVersion: "(3010.000) 0" @@ -50,7 +50,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -66,7 +66,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -80,7 +80,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -93,7 +93,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -165,4 +165,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP55xx.ppd, 08358 bytes. +*% End of KESP55xx.ppd, 08409 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_61xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_61xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_61xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_61xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP Office 6100 Series AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP61xx.ppd" *Product: "(Kodak ESP Office 6100 Series AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP Office 6100 Series AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP Office 6100 Series AiO" *ShortNickName: "Kodak ESP Office 6100 Series AiO" -*NickName: "Kodak ESP Office 6100" +*NickName: "Kodak ESP Office 6100 Series AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -50,7 +50,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -66,7 +66,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -80,7 +80,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -93,7 +93,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -159,4 +159,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP61xx.ppd, 08190 bytes. +*% End of KESP61xx.ppd, 08252 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_7.ppd c2esp-27~rc1/ppd/Kodak_ESP_7.ppd --- c2esp-26/ppd/Kodak_ESP_7.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_7.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP 7 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP7.ppd" *Product: "(Kodak ESP 7 AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP 7 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP 7 AiO" *ShortNickName: "Kodak ESP 7 AiO" -*NickName: "Kodak ESP 7" +*NickName: "Kodak ESP 7 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -50,7 +50,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -66,7 +66,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -80,7 +80,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -93,7 +93,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -165,4 +165,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP7.ppd, 08351 bytes. +*% End of KESP7.ppd, 08406 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_72xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_72xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_72xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_72xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP 7200 Series AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP72xx.ppd" *Product: "(Kodak ESP 7200 Series AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP 7200 Series AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP 7200 Series AiO" *ShortNickName: "Kodak ESP 7200 Series AiO" -*NickName: "Kodak ESP 7200" +*NickName: "Kodak ESP 7200 Series AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -50,7 +50,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -66,7 +66,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -80,7 +80,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -93,7 +93,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -165,4 +165,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP72xx.ppd, 08413 bytes. +*% End of KESP72xx.ppd, 08475 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_9.ppd c2esp-27~rc1/ppd/Kodak_ESP_9.ppd --- c2esp-26/ppd/Kodak_ESP_9.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_9.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP 9 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP9.ppd" *Product: "(Kodak ESP 9 AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP 9 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP 9 AiO" *ShortNickName: "Kodak ESP 9 AiO" -*NickName: "Kodak ESP 9" +*NickName: "Kodak ESP 9 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -50,7 +50,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -66,7 +66,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -80,7 +80,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -93,7 +93,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -165,4 +165,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP9.ppd, 08351 bytes. +*% End of KESP9.ppd, 08406 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_92xx_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_92xx_Series.ppd --- c2esp-26/ppd/Kodak_ESP_92xx_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_92xx_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP 9200 Series AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *% Copyright 2011-2012 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.5" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESP92xx.ppd" *Product: "(Kodak ESP 9200 Series AiO)" -*Manufacturer: "Kodak" -*ModelName: "Kodak ESP 9200 Series AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP 9200 Series AiO" *ShortNickName: "Kodak ESP 9200 Series AiO" -*NickName: "Kodak ESP 9200" +*NickName: "Kodak ESP 9200 Series AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -50,7 +50,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -66,7 +66,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -80,7 +80,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -93,7 +93,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -165,4 +165,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESP92xx.ppd, 08413 bytes. +*% End of KESP92xx.ppd, 08475 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_C11x_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_C11x_Series.ppd --- c2esp-26/ppd/Kodak_ESP_C11x_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_C11x_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP C110 Series AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. -*% Copyright 2011 by Paul Newall +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.4" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESPC11x.ppd" *Product: "(Kodak ESP C110 Series AiO)" -*Manufacturer: "Eastman Kodak" -*ModelName: "Eastman Kodak Kodak ESP C110 Series AiO" -*ShortNickName: "Eastman Kodak Kodak ESP C110 Series AiO" -*NickName: "Kodak ESP C110" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP C110 Series AiO" +*ShortNickName: "Kodak ESP C110 Series AiO" +*NickName: "Kodak ESP C110 Series AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -46,7 +46,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -62,7 +62,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -76,7 +76,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -89,7 +89,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -148,4 +148,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESPC11x.ppd, 07626 bytes. +*% End of KESPC11x.ppd, 07657 bytes. diff -Nru c2esp-26/ppd/Kodak_ESP_C31x_Series.ppd c2esp-27~rc1/ppd/Kodak_ESP_C31x_Series.ppd --- c2esp-26/ppd/Kodak_ESP_C31x_Series.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_ESP_C31x_Series.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,17 +1,17 @@ *PPD-Adobe: "4.3" *%%%% PPD file for Kodak ESP C310 Series AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. -*% Copyright 2011 by Paul Newall +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.4" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KESPC31x.ppd" *Product: "(Kodak ESP C310 Series AiO)" -*Manufacturer: "Eastman Kodak" -*ModelName: "Eastman Kodak Kodak ESP C310 Series AiO" -*ShortNickName: "Eastman Kodak Kodak ESP C310 Series AiO" -*NickName: "Kodak ESP C310" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company Kodak ESP C310 Series AiO" +*ShortNickName: "Kodak ESP C310 Series AiO" +*NickName: "Kodak ESP C310 Series AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -46,7 +46,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -62,7 +62,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -76,7 +76,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -89,7 +89,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -148,4 +148,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KESPC31x.ppd, 07626 bytes. +*% End of KESPC31x.ppd, 07657 bytes. diff -Nru c2esp-26/ppd/Kodak_Hero_3.1.ppd c2esp-27~rc1/ppd/Kodak_Hero_3.1.ppd --- c2esp-26/ppd/Kodak_Hero_3.1.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_Hero_3.1.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,16 +1,16 @@ *PPD-Adobe: "4.3" *%%%% PPD file for KODAK HERO 3.1 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. -*% Copyright 2011 by Paul Newall +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.4" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KHERO31.ppd" *Product: "(KODAK HERO 3.1 AiO)" -*Manufacturer: "Eastman Kodak" -*ModelName: "Eastman Kodak KODAK HERO 3.1 AiO" -*ShortNickName: "Eastman Kodak KODAK HERO 3.1 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK HERO 3.1 AiO" +*ShortNickName: "KODAK HERO 3.1 AiO" *NickName: "KODAK HERO 3.1 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" @@ -46,7 +46,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -62,7 +62,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -76,7 +76,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -89,7 +89,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -148,4 +148,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KHERO31.ppd, 07593 bytes. +*% End of KHERO31.ppd, 07613 bytes. diff -Nru c2esp-26/ppd/Kodak_Hero_5.1.ppd c2esp-27~rc1/ppd/Kodak_Hero_5.1.ppd --- c2esp-26/ppd/Kodak_Hero_5.1.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_Hero_5.1.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,16 +1,16 @@ *PPD-Adobe: "4.3" *%%%% PPD file for KODAK HERO 5.1 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. -*% Copyright 2011 by Paul Newall +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.4" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KHERO51.ppd" *Product: "(KODAK HERO 5.1 AiO)" -*Manufacturer: "Eastman Kodak" -*ModelName: "Eastman Kodak KODAK HERO 5.1 AiO" -*ShortNickName: "Eastman Kodak KODAK HERO 5.1 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK HERO 5.1 AiO" +*ShortNickName: "KODAK HERO 5.1 AiO" *NickName: "KODAK HERO 5.1 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" @@ -47,7 +47,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -63,7 +63,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -77,7 +77,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -90,7 +90,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -156,4 +156,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KHERO51.ppd, 07977 bytes. +*% End of KHERO51.ppd, 07997 bytes. diff -Nru c2esp-26/ppd/Kodak_Hero_6.1.ppd c2esp-27~rc1/ppd/Kodak_Hero_6.1.ppd --- c2esp-26/ppd/Kodak_Hero_6.1.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_Hero_6.1.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,16 +1,16 @@ *PPD-Adobe: "4.3" *%%%% PPD file for KODAK HERO 6.1 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. -*% Copyright 2011 by Paul Newall +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.4" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KHERO61.ppd" *Product: "(KODAK HERO 6.1 AiO)" -*Manufacturer: "Eastman Kodak" -*ModelName: "Eastman Kodak KODAK HERO 6.1 AiO" -*ShortNickName: "Eastman Kodak KODAK HERO 6.1 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK HERO 6.1 AiO" +*ShortNickName: "KODAK HERO 6.1 AiO" *NickName: "KODAK HERO 6.1 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" @@ -47,7 +47,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -63,7 +63,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -77,7 +77,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -90,7 +90,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -162,4 +162,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KHERO61.ppd, 08242 bytes. +*% End of KHERO61.ppd, 08262 bytes. diff -Nru c2esp-26/ppd/Kodak_Hero_7.1.ppd c2esp-27~rc1/ppd/Kodak_Hero_7.1.ppd --- c2esp-26/ppd/Kodak_Hero_7.1.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_Hero_7.1.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,16 +1,16 @@ *PPD-Adobe: "4.3" *%%%% PPD file for KODAK HERO 7.1 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. -*% Copyright 2011 by Paul Newall +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.4" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KHERO71.ppd" *Product: "(KODAK HERO 7.1 AiO)" -*Manufacturer: "Eastman Kodak" -*ModelName: "Eastman Kodak KODAK HERO 7.1 AiO" -*ShortNickName: "Eastman Kodak KODAK HERO 7.1 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK HERO 7.1 AiO" +*ShortNickName: "KODAK HERO 7.1 AiO" *NickName: "KODAK HERO 7.1 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" @@ -47,7 +47,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -63,7 +63,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -77,7 +77,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -90,7 +90,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -162,4 +162,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KHERO71.ppd, 08242 bytes. +*% End of KHERO71.ppd, 08262 bytes. diff -Nru c2esp-26/ppd/Kodak_Hero_9.1.ppd c2esp-27~rc1/ppd/Kodak_Hero_9.1.ppd --- c2esp-26/ppd/Kodak_Hero_9.1.ppd 2012-09-07 15:46:23.000000000 +0000 +++ c2esp-27~rc1/ppd/Kodak_Hero_9.1.ppd 2013-12-17 17:01:19.000000000 +0000 @@ -1,16 +1,16 @@ *PPD-Adobe: "4.3" *%%%% PPD file for KODAK HERO 9.1 AiO with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.3. -*% Copyright 2011 by Paul Newall +*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*% Copyright 2011-2013 by Paul Newall *FormatVersion: "4.3" -*FileVersion: "1.4" +*FileVersion: "1.6" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "KHERO91.ppd" *Product: "(KODAK HERO 9.1 AiO)" -*Manufacturer: "Eastman Kodak" -*ModelName: "Eastman Kodak KODAK HERO 9.1 AiO" -*ShortNickName: "Eastman Kodak KODAK HERO 9.1 AiO" +*Manufacturer: "Eastman Kodak Company" +*ModelName: "Eastman Kodak Company KODAK HERO 9.1 AiO" +*ShortNickName: "KODAK HERO 9.1 AiO" *NickName: "KODAK HERO 9.1 AiO" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" @@ -47,7 +47,7 @@ *PageSize Photo4x6/Photo: "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion/Media Size: PickOne @@ -63,7 +63,7 @@ *PageRegion Photo4x6/Photo: "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion Env10/Envelope #10 : "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: A4 @@ -77,7 +77,7 @@ *ImageableArea Photo4x6/Photo: "3 3 285 429" *ImageableArea EnvISOB5/Envelope B5: "3 3 496 706" *ImageableArea EnvC5/Envelope C5: "3 3 456 646" -*ImageableArea DL/Envelope DL: "3 3 309 621" +*ImageableArea EnvDL/Envelope DL: "3 3 309 621" *ImageableArea Env10/Envelope #10 : "3 3 294 681" *DefaultPaperDimension: A4 *PaperDimension Executive/Executive: "522 756" @@ -90,7 +90,7 @@ *PaperDimension Photo4x6/Photo: "288 432" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension Env10/Envelope #10 : "297 684" *MaxMediaWidth: "1080" *MaxMediaHeight: "86400" @@ -162,4 +162,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of KHERO91.ppd, 08242 bytes. +*% End of KHERO91.ppd, 08262 bytes.