diff --git a/Canon-LBP2900-3000.ppd b/Canon-LBP2900-3000.ppd deleted file mode 100644 index e4af356..0000000 --- a/Canon-LBP2900-3000.ppd +++ /dev/null @@ -1,353 +0,0 @@ -*PPD-Adobe: "4.3" -*%%%% PPD file for LBP2900/LBP3000 r2c with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v2.2.10. -*% (C)2020 Moses Chong -*FormatVersion: "4.3" -*FileVersion: "0.1.3-e2" -*LanguageVersion: English -*LanguageEncoding: ISOLatin1 -*PCFileName: "CNLB2K9.ppd" -*Product: "(LBP2900/LBP3000 r2c)" -*Manufacturer: "Canon Inc" -*ModelName: "Canon Inc LBP2900/LBP3000 r2c" -*ShortNickName: "Canon Inc LBP2900/LBP3000 r2c" -*NickName: "Canon Inc LBP2900/LBP3000 r2c, 0.1.3-e2" -*PSVersion: "(3010.000) 0" -*LanguageLevel: "3" -*ColorDevice: False -*DefaultColorSpace: Gray -*FileSystem: False -*Throughput: "1" -*LandscapeOrientation: Plus90 -*TTRasterizer: Type42 -*cupsVersion: 2.2 -*cupsModelNumber: 0 -*cupsManualCopies: False -*cupsFilter: "application/vnd.cups-raster 1 rastertocapt" -*cupsLanguages: "en" -*OpenUI *PageSize/Media Size: PickOne -*OrderDependency: 10 AnySetup *PageSize -*DefaultPageSize: A4 -*PageSize A4/A4: "<>setpagedevice" -*PageSize A5/A5: "<>setpagedevice" -*PageSize A6/A6: "<>setpagedevice" -*PageSize B5/JIS B5: "<>setpagedevice" -*PageSize C6/Envelope C6: "<>setpagedevice" -*PageSize EnvC5/Envelope C5: "<>setpagedevice" -*PageSize EnvC6/Envelope C6: "<>setpagedevice" -*PageSize EnvChou3/Envelope Choukei 3: "<>setpagedevice" -*PageSize EnvDL/Envelope DL: "<>setpagedevice" -*PageSize Env10/Envelope #10: "<>setpagedevice" -*PageSize EnvItalian/Envelope Italian: "<>setpagedevice" -*PageSize Executive/Executive: "<>setpagedevice" -*PageSize Folio/Folio: "<>setpagedevice" -*PageSize Legal/US Legal: "<>setpagedevice" -*PageSize Letter/US Letter: "<>setpagedevice" -*PageSize SISG5/SIS G5: "<>setpagedevice" -*PageSize SISE5/SIS E5: "<>setpagedevice" -*PageSize SAC16K/SAC 16K: "<>setpagedevice" -*PageSize SAC32K/SAC 32K: "<>setpagedevice" -*PageSize 7x9/7 x 9: "<>setpagedevice" -*PageSize 8x10/8 x 10: "<>setpagedevice" -*PageSize A4Small/A4 Small: "<>setpagedevice" -*PageSize A4Plus/A4 Oversize: "<>setpagedevice" -*PageSize A5Extra/A5 Oversize: "<>setpagedevice" -*PageSize B6/JIS B6: "<>setpagedevice" -*PageSize B7/JIS B7: "<>setpagedevice" -*PageSize DoublePostcard/Postcard Double: "<>setpagedevice" -*PageSize Env9/Envelope #9: "<>setpagedevice" -*PageSize Env11/Envelope #11: "<>setpagedevice" -*PageSize Env12/Envelope #12: "<>setpagedevice" -*PageSize Env14/Envelope #14: "<>setpagedevice" -*PageSize EnvC65/Envelope C65: "<>setpagedevice" -*PageSize EnvChou4/Envelope Choukei 4: "<>setpagedevice" -*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" -*PageSize EnvISOB6/Envelope B6: "<>setpagedevice" -*PageSize EnvKaku3/Envelope Kaku3: "<>setpagedevice" -*PageSize EnvMonarch/Envelope Monarch: "<>setpagedevice" -*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" -*PageSize EnvPRC1/Envelope PRC1: "<>setpagedevice" -*PageSize EnvPRC2/Envelope PRC2: "<>setpagedevice" -*PageSize EnvPRC3/Envelope PRC3: "<>setpagedevice" -*PageSize EnvPRC4/Envelope PRC4: "<>setpagedevice" -*PageSize EnvPRC5/Envelope PRC5PRC5: "<>setpagedevice" -*PageSize EnvPRC6/Envelope PRC6: "<>setpagedevice" -*PageSize EnvPRC7/Envelope PRC7: "<>setpagedevice" -*PageSize EnvPRC8/Envelope PRC8: "<>setpagedevice" -*PageSize EnvYou4/Envelope You4: "<>setpagedevice" -*PageSize FanFoldGerman/European Fanfold: "<>setpagedevice" -*PageSize FanFoldGermanLegal/European Fanfold Legal: "<>setpagedevice" -*PageSize ISOB5/B5: "<>setpagedevice" -*PageSize ISOB5Extra/B5 Oversize: "<>setpagedevice" -*PageSize ISOB6/B6: "<>setpagedevice" -*PageSize ISOB7/B7: "<>setpagedevice" -*PageSize LetterPlus/US Letter Oversize: "<>setpagedevice" -*PageSize Note/Note: "<>setpagedevice" -*PageSize Postcard/Postcard: "<>setpagedevice" -*PageSize PRC16K/PRC16K: "<>setpagedevice" -*PageSize PRC32K/PRC32K: "<>setpagedevice" -*PageSize PRC32KBig/PRC32K Oversize: "<>setpagedevice" -*PageSize Quarto/Quarto: "<>setpagedevice" -*PageSize Statement/Statement: "<>setpagedevice" -*CloseUI: *PageSize -*OpenUI *PageRegion/Media Size: PickOne -*OrderDependency: 10 AnySetup *PageRegion -*DefaultPageRegion: A4 -*PageRegion A4/A4: "<>setpagedevice" -*PageRegion A5/A5: "<>setpagedevice" -*PageRegion A6/A6: "<>setpagedevice" -*PageRegion B5/JIS B5: "<>setpagedevice" -*PageRegion C6/Envelope C6: "<>setpagedevice" -*PageRegion EnvC5/Envelope C5: "<>setpagedevice" -*PageRegion EnvC6/Envelope C6: "<>setpagedevice" -*PageRegion EnvChou3/Envelope Choukei 3: "<>setpagedevice" -*PageRegion EnvDL/Envelope DL: "<>setpagedevice" -*PageRegion Env10/Envelope #10: "<>setpagedevice" -*PageRegion EnvItalian/Envelope Italian: "<>setpagedevice" -*PageRegion Executive/Executive: "<>setpagedevice" -*PageRegion Folio/Folio: "<>setpagedevice" -*PageRegion Legal/US Legal: "<>setpagedevice" -*PageRegion Letter/US Letter: "<>setpagedevice" -*PageRegion SISG5/SIS G5: "<>setpagedevice" -*PageRegion SISE5/SIS E5: "<>setpagedevice" -*PageRegion SAC16K/SAC 16K: "<>setpagedevice" -*PageRegion SAC32K/SAC 32K: "<>setpagedevice" -*PageRegion 7x9/7 x 9: "<>setpagedevice" -*PageRegion 8x10/8 x 10: "<>setpagedevice" -*PageRegion A4Small/A4 Small: "<>setpagedevice" -*PageRegion A4Plus/A4 Oversize: "<>setpagedevice" -*PageRegion A5Extra/A5 Oversize: "<>setpagedevice" -*PageRegion B6/JIS B6: "<>setpagedevice" -*PageRegion B7/JIS B7: "<>setpagedevice" -*PageRegion DoublePostcard/Postcard Double: "<>setpagedevice" -*PageRegion Env9/Envelope #9: "<>setpagedevice" -*PageRegion Env11/Envelope #11: "<>setpagedevice" -*PageRegion Env12/Envelope #12: "<>setpagedevice" -*PageRegion Env14/Envelope #14: "<>setpagedevice" -*PageRegion EnvC65/Envelope C65: "<>setpagedevice" -*PageRegion EnvChou4/Envelope Choukei 4: "<>setpagedevice" -*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" -*PageRegion EnvISOB6/Envelope B6: "<>setpagedevice" -*PageRegion EnvKaku3/Envelope Kaku3: "<>setpagedevice" -*PageRegion EnvMonarch/Envelope Monarch: "<>setpagedevice" -*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" -*PageRegion EnvPRC1/Envelope PRC1: "<>setpagedevice" -*PageRegion EnvPRC2/Envelope PRC2: "<>setpagedevice" -*PageRegion EnvPRC3/Envelope PRC3: "<>setpagedevice" -*PageRegion EnvPRC4/Envelope PRC4: "<>setpagedevice" -*PageRegion EnvPRC5/Envelope PRC5PRC5: "<>setpagedevice" -*PageRegion EnvPRC6/Envelope PRC6: "<>setpagedevice" -*PageRegion EnvPRC7/Envelope PRC7: "<>setpagedevice" -*PageRegion EnvPRC8/Envelope PRC8: "<>setpagedevice" -*PageRegion EnvYou4/Envelope You4: "<>setpagedevice" -*PageRegion FanFoldGerman/European Fanfold: "<>setpagedevice" -*PageRegion FanFoldGermanLegal/European Fanfold Legal: "<>setpagedevice" -*PageRegion ISOB5/B5: "<>setpagedevice" -*PageRegion ISOB5Extra/B5 Oversize: "<>setpagedevice" -*PageRegion ISOB6/B6: "<>setpagedevice" -*PageRegion ISOB7/B7: "<>setpagedevice" -*PageRegion LetterPlus/US Letter Oversize: "<>setpagedevice" -*PageRegion Note/Note: "<>setpagedevice" -*PageRegion Postcard/Postcard: "<>setpagedevice" -*PageRegion PRC16K/PRC16K: "<>setpagedevice" -*PageRegion PRC32K/PRC32K: "<>setpagedevice" -*PageRegion PRC32KBig/PRC32K Oversize: "<>setpagedevice" -*PageRegion Quarto/Quarto: "<>setpagedevice" -*PageRegion Statement/Statement: "<>setpagedevice" -*CloseUI: *PageRegion -*DefaultImageableArea: A4 -*ImageableArea A4/A4: "14.173229217529 14.173229217529 580.826782226562 827.826782226562" -*ImageableArea A5/A5: "14.173229217529 14.173229217529 405.826782226562 580.826782226562" -*ImageableArea A6/A6: "14.173229217529 14.173229217529 282.826782226562 405.826782226562" -*ImageableArea B5/JIS B5: "14.173229217529 14.173229217529 501.826782226562 714.826782226562" -*ImageableArea C6/Envelope C6: "14.173229217529 14.173229217529 308.826782226562 444.826782226562" -*ImageableArea EnvC5/Envelope C5: "14.173229217529 14.173229217529 444.826782226562 634.826782226562" -*ImageableArea EnvC6/Envelope C6: "14.173229217529 14.173229217529 308.826782226562 444.826782226562" -*ImageableArea EnvChou3/Envelope Choukei 3: "14.173229217529 14.173229217529 325.826782226562 651.826782226562" -*ImageableArea EnvDL/Envelope DL: "14.173229217529 14.173229217529 297.826782226562 609.826782226562" -*ImageableArea Env10/Envelope #10: "14.173229217529 14.173229217529 282.826782226562 669.826782226562" -*ImageableArea EnvItalian/Envelope Italian: "14.173229217529 14.173229217529 297.826782226562 637.826782226562" -*ImageableArea Executive/Executive: "14.173229217529 14.173229217529 507.826782226562 741.826782226562" -*ImageableArea Folio/Folio: "14.173229217529 14.173229217529 580.826782226562 920.826782226562" -*ImageableArea Legal/US Legal: "14.173229217529 14.173229217529 597.826782226562 993.826782226562" -*ImageableArea Letter/US Letter: "14.173229217529 14.173229217529 597.826782226562 777.826782226562" -*ImageableArea SISG5/SIS G5: "14.173229217529 14.173229217529 464.881927490234 663.30712890625" -*ImageableArea SISE5/SIS E5: "14.173229217529 14.173229217529 311.81103515625 609.448852539062" -*ImageableArea SAC16K/SAC 16K: "14.173229217529 14.173229217529 518.740173339844 722.834655761719" -*ImageableArea SAC32K/SAC 32K: "14.173229217529 14.173229217529 354.330718994141 507.401611328125" -*ImageableArea 7x9/7 x 9: "14.173229217529 14.173229217529 489.826782226562 633.826782226562" -*ImageableArea 8x10/8 x 10: "14.173229217529 14.173229217529 561.826782226562 705.826782226562" -*ImageableArea A4Small/A4 Small: "14.173229217529 14.173229217529 580.826782226562 827.826782226562" -*ImageableArea A4Plus/A4 Oversize: "14.173229217529 14.173229217529 580.826782226562 921.826782226562" -*ImageableArea A5Extra/A5 Oversize: "14.173229217529 14.173229217529 477.826782226562 653.826782226562" -*ImageableArea B6/JIS B6: "14.173229217529 14.173229217529 348.826782226562 501.826782226562" -*ImageableArea B7/JIS B7: "14.173229217529 14.173229217529 243.826766967773 348.826782226562" -*ImageableArea DoublePostcard/Postcard Double: "14.173229217529 14.173229217529 552.826782226562 405.826782226562" -*ImageableArea Env9/Envelope #9: "14.173229217529 14.173229217529 264.826782226562 624.826782226562" -*ImageableArea Env11/Envelope #11: "14.173229217529 14.173229217529 309.826782226562 732.826782226562" -*ImageableArea Env12/Envelope #12: "14.173229217529 14.173229217529 327.826782226562 777.826782226562" -*ImageableArea Env14/Envelope #14: "14.173229217529 14.173229217529 345.826782226562 813.826782226562" -*ImageableArea EnvC65/Envelope C65: "14.173229217529 14.173229217529 309.826782226562 633.826782226562" -*ImageableArea EnvChou4/Envelope Choukei 4: "14.173229217529 14.173229217529 240.826766967773 566.826782226562" -*ImageableArea EnvISOB5/Envelope B5: "14.173229217529 14.173229217529 484.826782226562 694.826782226562" -*ImageableArea EnvISOB6/Envelope B6: "14.173229217529 14.173229217529 484.826782226562 339.826782226562" -*ImageableArea EnvKaku3/Envelope Kaku3: "14.173229217529 14.173229217529 597.826782226562 770.826782226562" -*ImageableArea EnvMonarch/Envelope Monarch: "14.173229217529 14.173229217529 264.826782226562 525.826782226562" -*ImageableArea EnvPersonal/Envelope Personal: "14.173229217529 14.173229217529 246.826766967773 453.826782226562" -*ImageableArea EnvPRC1/Envelope PRC1: "14.173229217529 14.173229217529 274.826782226562 453.826782226562" -*ImageableArea EnvPRC2/Envelope PRC2: "14.173229217529 14.173229217529 274.826782226562 484.826782226562" -*ImageableArea EnvPRC3/Envelope PRC3: "14.173229217529 14.173229217529 339.826782226562 484.826782226562" -*ImageableArea EnvPRC4/Envelope PRC4: "14.173229217529 14.173229217529 297.826782226562 575.826782226562" -*ImageableArea EnvPRC5/Envelope PRC5PRC5: "14.173229217529 14.173229217529 297.826782226562 609.826782226562" -*ImageableArea EnvPRC6/Envelope PRC6: "14.173229217529 14.173229217529 325.826782226562 637.826782226562" -*ImageableArea EnvPRC7/Envelope PRC7: "14.173229217529 14.173229217529 439.826782226562 637.826782226562" -*ImageableArea EnvPRC8/Envelope PRC8: "14.173229217529 14.173229217529 325.826782226562 861.826782226562" -*ImageableArea EnvYou4/Envelope You4: "14.173229217529 14.173229217529 283.826782226562 651.826782226562" -*ImageableArea FanFoldGerman/European Fanfold: "14.173229217529 14.173229217529 597.826782226562 849.826782226562" -*ImageableArea FanFoldGermanLegal/European Fanfold Legal: "14.173229217529 14.173229217529 597.826782226562 921.826782226562" -*ImageableArea ISOB5/B5: "14.173229217529 14.173229217529 484.826782226562 694.826782226562" -*ImageableArea ISOB5Extra/B5 Oversize: "14.173229217529 14.173229217529 555.826782226562 767.826782226562" -*ImageableArea ISOB6/B6: "14.173229217529 14.173229217529 339.826782226562 484.826782226562" -*ImageableArea ISOB7/B7: "14.173229217529 14.173229217529 234.826766967773 339.826782226562" -*ImageableArea LetterPlus/US Letter Oversize: "14.173229217529 14.173229217529 597.826782226562 899.826782226562" -*ImageableArea Note/Note: "14.173229217529 14.173229217529 597.826782226562 777.826782226562" -*ImageableArea Postcard/Postcard: "14.173229217529 14.173229217529 269.826782226562 404.826782226562" -*ImageableArea PRC16K/PRC16K: "14.173229217529 14.173229217529 399.826782226562 595.826782226562" -*ImageableArea PRC32K/PRC32K: "14.173229217529 14.173229217529 260.826782226562 413.826782226562" -*ImageableArea PRC32KBig/PRC32K Oversize: "14.173229217529 14.173229217529 260.826782226562 413.826782226562" -*ImageableArea Quarto/Quarto: "14.173229217529 14.173229217529 595.826782226562 765.826782226562" -*ImageableArea Statement/Statement: "14.173229217529 14.173229217529 381.826782226562 597.826782226562" -*DefaultPaperDimension: A4 -*PaperDimension A4/A4: "595 842" -*PaperDimension A5/A5: "420 595" -*PaperDimension A6/A6: "297 420" -*PaperDimension B5/JIS B5: "516 729" -*PaperDimension C6/Envelope C6: "323 459" -*PaperDimension EnvC5/Envelope C5: "459 649" -*PaperDimension EnvC6/Envelope C6: "323 459" -*PaperDimension EnvChou3/Envelope Choukei 3: "340 666" -*PaperDimension EnvDL/Envelope DL: "312 624" -*PaperDimension Env10/Envelope #10: "297 684" -*PaperDimension EnvItalian/Envelope Italian: "312 652" -*PaperDimension Executive/Executive: "522 756" -*PaperDimension Folio/Folio: "595 935" -*PaperDimension Legal/US Legal: "612 1008" -*PaperDimension Letter/US Letter: "612 792" -*PaperDimension SISG5/SIS G5: "479.055145263672 677.480346679688" -*PaperDimension SISE5/SIS E5: "325.984252929688 623.6220703125" -*PaperDimension SAC16K/SAC 16K: "532.913391113281 737.007873535156" -*PaperDimension SAC32K/SAC 32K: "368.503936767578 521.574829101562" -*PaperDimension 7x9/7 x 9: "504 648" -*PaperDimension 8x10/8 x 10: "576 720" -*PaperDimension A4Small/A4 Small: "595 842" -*PaperDimension A4Plus/A4 Oversize: "595 936" -*PaperDimension A5Extra/A5 Oversize: "492 668" -*PaperDimension B6/JIS B6: "363 516" -*PaperDimension B7/JIS B7: "258 363" -*PaperDimension DoublePostcard/Postcard Double: "567 420" -*PaperDimension Env9/Envelope #9: "279 639" -*PaperDimension Env11/Envelope #11: "324 747" -*PaperDimension Env12/Envelope #12: "342 792" -*PaperDimension Env14/Envelope #14: "360 828" -*PaperDimension EnvC65/Envelope C65: "324 648" -*PaperDimension EnvChou4/Envelope Choukei 4: "255 581" -*PaperDimension EnvISOB5/Envelope B5: "499 709" -*PaperDimension EnvISOB6/Envelope B6: "499 354" -*PaperDimension EnvKaku3/Envelope Kaku3: "612 785" -*PaperDimension EnvMonarch/Envelope Monarch: "279 540" -*PaperDimension EnvPersonal/Envelope Personal: "261 468" -*PaperDimension EnvPRC1/Envelope PRC1: "289 468" -*PaperDimension EnvPRC2/Envelope PRC2: "289 499" -*PaperDimension EnvPRC3/Envelope PRC3: "354 499" -*PaperDimension EnvPRC4/Envelope PRC4: "312 590" -*PaperDimension EnvPRC5/Envelope PRC5PRC5: "312 624" -*PaperDimension EnvPRC6/Envelope PRC6: "340 652" -*PaperDimension EnvPRC7/Envelope PRC7: "454 652" -*PaperDimension EnvPRC8/Envelope PRC8: "340 876" -*PaperDimension EnvYou4/Envelope You4: "298 666" -*PaperDimension FanFoldGerman/European Fanfold: "612 864" -*PaperDimension FanFoldGermanLegal/European Fanfold Legal: "612 936" -*PaperDimension ISOB5/B5: "499 709" -*PaperDimension ISOB5Extra/B5 Oversize: "570 782" -*PaperDimension ISOB6/B6: "354 499" -*PaperDimension ISOB7/B7: "249 354" -*PaperDimension LetterPlus/US Letter Oversize: "612 914" -*PaperDimension Note/Note: "612 792" -*PaperDimension Postcard/Postcard: "284 419" -*PaperDimension PRC16K/PRC16K: "414 610" -*PaperDimension PRC32K/PRC32K: "275 428" -*PaperDimension PRC32KBig/PRC32K Oversize: "275 428" -*PaperDimension Quarto/Quarto: "610 780" -*PaperDimension Statement/Statement: "396 612" -*MaxMediaWidth: "612" -*MaxMediaHeight: "1008.000061035156" -*HWMargins: 14.173229217529 14.173229217529 14.173229217529 14.173229217529 -*CustomPageSize True: "pop pop pop <>setpagedevice" -*ParamCustomPageSize Width: 1 points 216 612 -*ParamCustomPageSize Height: 2 points 360 1008.000061035156 -*ParamCustomPageSize WidthOffset: 3 points 0 0 -*ParamCustomPageSize HeightOffset: 4 points 0 0 -*ParamCustomPageSize Orientation: 5 int 0 0 -*OpenUI *ColorModel/Color Mode: PickOne -*OrderDependency: 10 AnySetup *ColorModel -*DefaultColorModel: Gray -*ColorModel Gray/Grayscale: "<>setpagedevice" -*CloseUI: *ColorModel -*OpenUI *captTonerSave/Toner Save: Boolean -*OrderDependency: 10 AnySetup *captTonerSave -*DefaultcaptTonerSave: False -*captTonerSave False/Disabled: "<>setpagedevice" -*captTonerSave True/Enabled: "<>setpagedevice" -*CloseUI: *captTonerSave -*OpenUI *Resolution/Resolution: PickOne -*OrderDependency: 10 AnySetup *Resolution -*DefaultResolution: 600dpi -*Resolution 600dpi/600 DPI: "<>setpagedevice" -*CloseUI: *Resolution -*OpenUI *MediaType/Media Type: PickOne -*OrderDependency: 10 AnySetup *MediaType -*DefaultMediaType: Plain -*MediaType Plain/Plain Paper: "<>setpagedevice" -*MediaType Heavy/Heavy Paper: "<>setpagedevice" -*MediaType PlainL/Plain Paper L: "<>setpagedevice" -*MediaType HeavyH/Heavy Paper H: "<>setpagedevice" -*MediaType Transparency/Transparency: "<>setpagedevice" -*MediaType Envelope/Envelope: "<>setpagedevice" -*CloseUI: *MediaType -*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 CNLB2K9.ppd, 24620 bytes. diff --git a/Canon-LBP3010.ppd b/Canon-LBP3010.ppd deleted file mode 100644 index 86a1097..0000000 --- a/Canon-LBP3010.ppd +++ /dev/null @@ -1,94 +0,0 @@ -*PPD-Adobe: "4.3" -*%%%% PPD file for LBP2900/LBP3010 r2c with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v2.2.10. -*% (C)2020 Moses Chong -*FormatVersion: "4.3" -*FileVersion: "0.1.3-e2" -*LanguageVersion: English -*LanguageEncoding: ISOLatin1 -*PCFileName: "CNLB3K10.ppd" -*Product: "(LBP2900/LBP3010 r2c)" -*Manufacturer: "Canon Inc" -*ModelName: "Canon Inc LBP2900/LBP3010 r2c" -*ShortNickName: "Canon Inc LBP2900/LBP3010 r2c" -*NickName: "Canon Inc LBP2900/LBP3010 r2c, 0.1.3-e2" -*PSVersion: "(3010.000) 0" -*LanguageLevel: "3" -*ColorDevice: False -*DefaultColorSpace: Gray -*FileSystem: False -*Throughput: "1" -*LandscapeOrientation: Plus90 -*TTRasterizer: Type42 -*cupsVersion: 2.2 -*cupsModelNumber: 0 -*cupsManualCopies: False -*cupsFilter: "application/vnd.cups-raster 1 rastertocapt" -*cupsLanguages: "en" -*OpenUI *PageSize/Media Size: PickOne -*OrderDependency: 10 AnySetup *PageSize -*DefaultPageSize: A4 -*PageSize A4/A4: "<>setpagedevice" -*CloseUI: *PageSize -*OpenUI *PageRegion/Media Size: PickOne -*OrderDependency: 10 AnySetup *PageRegion -*DefaultPageRegion: A4 -*PageRegion A4/A4: "<>setpagedevice" -*CloseUI: *PageRegion -*DefaultImageableArea: A4 -*ImageableArea A4/A4: "0 0 595 842" -*DefaultPaperDimension: A4 -*PaperDimension A4/A4: "595 842" -*OpenUI *ColorModel/Color Mode: PickOne -*OrderDependency: 10 AnySetup *ColorModel -*DefaultColorModel: Gray -*ColorModel Gray/Grayscale: "<>setpagedevice" -*CloseUI: *ColorModel -*OpenUI *captTonerSave/Toner Save: Boolean -*OrderDependency: 10 AnySetup *captTonerSave -*DefaultcaptTonerSave: False -*captTonerSave False/Disabled: "<>setpagedevice" -*captTonerSave True/Enabled: "<>setpagedevice" -*CloseUI: *captTonerSave -*OpenUI *Resolution/Resolution: PickOne -*OrderDependency: 10 AnySetup *Resolution -*DefaultResolution: 600dpi -*Resolution 600dpi/600 DPI: "<>setpagedevice" -*CloseUI: *Resolution -*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 CNLB3K10.ppd, 04117 bytes. diff --git a/src/capt-command.c b/src/capt-command.c index c9f1642..96339a2 100644 --- a/src/capt-command.c +++ b/src/capt-command.c @@ -30,6 +30,7 @@ static uint8_t capt_iobuf[0x10000]; static size_t capt_iosize; +uint8_t sendrecv_status = NO_SENDRECV; static void capt_debug_buf(const char *level, size_t size) { @@ -80,6 +81,7 @@ static void capt_send_buf(void) (int) status); exit(1); } + sendrecv_status |= SENDRECV_SENT; } } } @@ -98,6 +100,7 @@ static void capt_recv_buf(size_t offset, size_t expected) exit(1); } capt_iosize = offset + size; + sendrecv_status |= SENDRECV_RECVD; } const char *capt_identify(void) @@ -145,6 +148,7 @@ void capt_send(uint16_t cmd, const void *buf, size_t size) void capt_sendrecv(uint16_t cmd, const void *buf, size_t size, void *reply, size_t *reply_size) { + sendrecv_status = (NO_SENDRECV | RECV_REQUIRED); capt_send(cmd, buf, size); capt_recv_buf(0, 6); if (capt_iosize != 6 || WORD(capt_iobuf[0], capt_iobuf[1]) != cmd) { @@ -202,3 +206,16 @@ void capt_multi_send(void) capt_iobuf[3] = HI(capt_iosize); capt_send_buf(); } + +void capt_cleanup(void) +{ + /* For use with handling job cancellations */ + if (sendrecv_status && (RECV_REQUIRED || SENDRECV_SENT || !SENDRECV_RECVD) ){ + uint8_t bs = 6; + if (capt_iosize > bs) + bs = capt_iosize; + cupsBackChannelRead(NULL, bs, 2); + sendrecv_status = NO_SENDRECV; + } +} + diff --git a/src/capt-command.h b/src/capt-command.h index bb807f8..28e4372 100644 --- a/src/capt-command.h +++ b/src/capt-command.h @@ -54,6 +54,13 @@ enum capt_command { CAPT_GPIO = 0xE1A2, }; +enum capt_sendrecv_progress { + NO_SENDRECV = 0x00, + SENDRECV_SENT = 0x01, + SENDRECV_RECVD = 0x02, + RECV_REQUIRED = 0x04, +}; + const char *capt_identify(void); @@ -63,3 +70,4 @@ void capt_sendrecv(uint16_t cmd, const void *buf, size_t size, void *reply, size void capt_multi_begin(uint16_t cmd); void capt_multi_add(uint16_t cmd, const void *data, size_t size); void capt_multi_send(void); +void capt_cleanup(void); diff --git a/src/printer.c b/src/printer.c index 09be969..9d71953 100644 --- a/src/printer.c +++ b/src/printer.c @@ -26,6 +26,8 @@ #include #include +bool job_cancel = false; + struct printer_rec { struct printer_rec *next; const char *name; @@ -49,6 +51,12 @@ static void __attribute__((destructor(101))) __clear_printers(void) } } +void cancel_job(int sig) +{ + (void) sig; + job_cancel = true; +} + static bool ieee_isspace(char c) { switch (c) { diff --git a/src/printer.h b/src/printer.h index 296971b..ae0b153 100644 --- a/src/printer.h +++ b/src/printer.h @@ -29,6 +29,8 @@ enum printer_support { FULLY, }; +bool job_cancel; + struct page_dims_s; struct printer_state_s { @@ -51,11 +53,13 @@ struct printer_ops_s { void *band, size_t size, const void *pixels, unsigned line_size, unsigned num_lines); void (*send_band) (struct printer_state_s *state, const void *band, size_t size); + void (*cancel_cleanup) (struct printer_state_s *state); void (*wait_user) (struct printer_state_s *state); }; const struct printer_ops_s *printer_detect(void); +void cancel_job(int sig); void __printer_register_ops(const char *name, const struct printer_ops_s *ops, enum printer_support status); diff --git a/src/prn_lbp2900.c b/src/prn_lbp2900.c index d0ea7e1..c1eee50 100644 --- a/src/prn_lbp2900.c +++ b/src/prn_lbp2900.c @@ -57,6 +57,8 @@ static void lbp2900_wait_ready(const struct printer_ops_s *ops) static void send_job_start(uint8_t fg, uint16_t page) { + /* FIXME: this function could use a better name */ + uint8_t ml = 0x00; /* host name lenght */ uint8_t ul = 0x00; /* user name lenght */ uint8_t nl = 0x00; /* document name lenght */ @@ -87,12 +89,12 @@ static const uint8_t magicbuf_2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uint8_t lbp_2900_gpio_blink[] = { +static const uint8_t lbp2900_gpio_blink[] = { 0x00, 0x00, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, }; -static const uint8_t lbp_2900_gpio_init[] = { +static const uint8_t lbp2900_gpio_init[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; @@ -103,7 +105,7 @@ static const uint8_t lbp_3010_gpio_blink[] = { 0x00, 0x00, 0x00, 0x00, }; -static const uint8_t lbp_3010_gpio_init[] = { +static const uint8_t lbp3010_gpio_init[] = { /* led */ 0x13, 0x00, 0x00, /* S6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* S7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -122,7 +124,7 @@ static void lbp2900_job_prologue(struct printer_state_s *state) lbp2900_get_status(state->ops); capt_sendrecv(CAPT_START_0, NULL, 0, NULL, 0); - capt_sendrecv(CAPT_GPIO, lbp_2900_gpio_init, ARRAY_SIZE(lbp_2900_gpio_init), NULL, 0); + capt_sendrecv(CAPT_GPIO, lbp2900_gpio_init, ARRAY_SIZE(lbp2900_gpio_init), NULL, 0); capt_sendrecv(CAPT_JOB_BEGIN, magicbuf_0, ARRAY_SIZE(magicbuf_0), buf, &size); job=WORD(buf[2], buf[3]); lbp2900_wait_ready(state->ops); @@ -142,21 +144,21 @@ static void lbp3000_job_prologue(struct printer_state_s *state) lbp2900_get_status(state->ops); capt_sendrecv(CAPT_START_0, NULL, 0, NULL, 0); - capt_sendrecv(CAPT_GPIO, lbp_2900_gpio_init, ARRAY_SIZE(lbp_2900_gpio_init), NULL, 0); + capt_sendrecv(CAPT_GPIO, lbp2900_gpio_init, ARRAY_SIZE(lbp2900_gpio_init), NULL, 0); capt_sendrecv(CAPT_JOB_BEGIN, magicbuf_0, ARRAY_SIZE(magicbuf_0), buf, &size); job=WORD(buf[2], buf[3]); /* LBP-3000 prints the very first printjob perfectly * and then proceeds to hang at this (commented out) * spot. That's the difference, or so it seems. */ -/* lbp2900_wait_ready(state->ops); */ +/* lbp2900_wait_ready(state->ops); */ send_job_start(1, 0); /* There's also that command, that apparently does something, and does something, * but it's there in the Wireshark logs. Response data == command data. */ uint8_t dummy[2] = {0, 0}; capt_sendrecv(0xE0A6, dummy, sizeof(dummy), NULL, 0); - + lbp2900_wait_ready(state->ops); } @@ -175,7 +177,7 @@ static void lbp3010_job_prologue(struct printer_state_s *state) capt_sendrecv(CAPT_JOB_BEGIN, magicbuf_0, ARRAY_SIZE(magicbuf_0), buf, &size); job=WORD(buf[2], buf[3]); - capt_sendrecv(CAPT_GPIO, lbp_3010_gpio_init, ARRAY_SIZE(lbp_3010_gpio_init), NULL, 0); + capt_sendrecv(CAPT_GPIO, lbp3010_gpio_init, ARRAY_SIZE(lbp3010_gpio_init), NULL, 0); lbp2900_wait_ready(state->ops); send_job_start(1, 0); @@ -374,8 +376,10 @@ static void lbp2900_job_epilogue(struct printer_state_s *state) while (1) { const struct capt_status_s *status = lbp2900_get_status(state->ops); - if (status->page_completed == status->page_decoding) + if (status->page_completed == status->page_decoding) { + send_job_start(4, status->page_completed); /* doin what the windows driver does*/ break; + } sleep(1); } capt_sendrecv(CAPT_JOB_END, jbuf, 2, NULL, 0); @@ -392,23 +396,37 @@ static void lbp2900_page_setup(struct printer_state_s *state, dims->band_size = 70; } +static void lbp2900_cancel_cleanup(struct printer_state_s *state) +{ + (void) state; + + capt_cleanup(); + capt_sendrecv(CAPT_GPIO, lbp2900_gpio_init, ARRAY_SIZE(lbp2900_gpio_init), NULL, 0); +} + +static void lbp3010_cancel_cleanup(struct printer_state_s *state) +{ + (void) state; + capt_sendrecv(CAPT_GPIO, lbp3010_gpio_init, ARRAY_SIZE(lbp3010_gpio_init), NULL, 0); +} + static void lbp2900_wait_user(struct printer_state_s *state) { (void) state; - capt_sendrecv(CAPT_GPIO, lbp_2900_gpio_blink, ARRAY_SIZE(lbp_2900_gpio_blink), NULL, 0); + capt_sendrecv(CAPT_GPIO, lbp2900_gpio_blink, ARRAY_SIZE(lbp2900_gpio_blink), NULL, 0); lbp2900_wait_ready(state->ops); while (1) { const struct capt_status_s *status = lbp2900_get_status(state->ops); - if (FLAG(status, CAPT_FL_BUTTON)) { + if (FLAG(status, CAPT_FL_BUTTON) || job_cancel) { fprintf(stderr, "DEBUG: CAPT: button pressed\n"); break; } sleep(1); } - capt_sendrecv(CAPT_GPIO, lbp_3010_gpio_init, ARRAY_SIZE(lbp_3010_gpio_init), NULL, 0); + capt_sendrecv(CAPT_GPIO, lbp2900_gpio_init, ARRAY_SIZE(lbp2900_gpio_init), NULL, 0); lbp2900_wait_ready(state->ops); } @@ -432,7 +450,7 @@ static void lbp3010_wait_user(struct printer_state_s *state) sleep(1); } - capt_sendrecv(CAPT_GPIO, lbp_3010_gpio_init, ARRAY_SIZE(lbp_3010_gpio_init), NULL, 0); + capt_sendrecv(CAPT_GPIO, lbp3010_gpio_init, ARRAY_SIZE(lbp3010_gpio_init), NULL, 0); lbp2900_wait_ready(state->ops); } @@ -445,6 +463,7 @@ static struct lbp2900_ops_s lbp2900_ops = { .page_epilogue = lbp2900_page_epilogue, .compress_band = ops_compress_band_hiscoa, .send_band = ops_send_band_hiscoa, + .cancel_cleanup = lbp2900_cancel_cleanup, .wait_user = lbp2900_wait_user, }, .get_status = capt_get_xstatus, @@ -462,6 +481,7 @@ static struct lbp2900_ops_s lbp3000_ops = { .page_epilogue = lbp2900_page_epilogue, .compress_band = ops_compress_band_hiscoa, .send_band = ops_send_band_hiscoa, + .cancel_cleanup = lbp2900_cancel_cleanup, .wait_user = lbp2900_wait_user, }, .get_status = capt_get_xstatus, @@ -469,7 +489,6 @@ static struct lbp2900_ops_s lbp3000_ops = { }; register_printer("LBP3000", lbp3000_ops.ops, EXPERIMENTAL); - static struct lbp2900_ops_s lbp3010_ops = { .ops = { .job_prologue = lbp3010_job_prologue, @@ -479,6 +498,7 @@ static struct lbp2900_ops_s lbp3010_ops = { .page_epilogue = lbp2900_page_epilogue, .compress_band = ops_compress_band_hiscoa, .send_band = ops_send_band_hiscoa, + .cancel_cleanup = lbp3010_cancel_cleanup, .wait_user = lbp3010_wait_user, }, .get_status = capt_get_xstatus_only, diff --git a/src/rastertocapt.c b/src/rastertocapt.c index 7130648..c240ed3 100644 --- a/src/rastertocapt.c +++ b/src/rastertocapt.c @@ -40,10 +40,22 @@ struct band_list_s { size_t size; uint8_t data[]; }; + +/* printer and job state */ +struct cached_page_s *cached_page = NULL; +cups_raster_t *raster; +bool in_job = false; +const struct printer_ops_s *ops; +struct printer_state_s *state = NULL; + +/* compressor state */ +uint8_t *linebuf = NULL; +uint8_t *bandbuf = NULL; +uint8_t *compbuf = NULL; + static inline size_t sizeof_struct_band_list_s(size_t size) { return sizeof(struct band_list_s) + size; } - static size_t center_pixels(size_t small, size_t large, unsigned bpp) { unsigned small_p; @@ -57,6 +69,43 @@ static size_t center_pixels(size_t small, size_t large, unsigned bpp) return bypp * ((large_p - small_p) / 2); } +static void free_cached_page(struct cached_page_s *cached_page) +{ + while (cached_page->bands) { + void *p = cached_page->bands; + cached_page->bands = cached_page->bands->next; + free(p); + } + free(cached_page); +} + +static void free_state(void) +{ + if (state) { + if (ops->free_state) + ops->free_state(state); + else + free(state); + state = NULL; + } +} + +static void free_comp_buffers(void) +{ + if (compbuf) { + free(compbuf); + compbuf = NULL; + } + if (bandbuf) { + free(bandbuf); + bandbuf = NULL; + } + if (linebuf) { + free(linebuf); + linebuf = NULL; + } +} + static void compress_page_data(struct printer_state_s *state, struct cached_page_s *page, cups_raster_t *raster, @@ -64,11 +113,9 @@ static void compress_page_data(struct printer_state_s *state, { const struct page_dims_s *dims = &page->dims; const unsigned compsize = 2 * dims->line_size * dims->band_size; - uint8_t *linebuf = NULL; - uint8_t *bandbuf = NULL; - uint8_t *compbuf = NULL; struct band_list_s *last_band = NULL; + unsigned i; unsigned iband; @@ -129,7 +176,7 @@ static void compress_page_data(struct printer_state_s *state, memcpy(bandbuf + iline * dims->line_size + shiftb, linebuf + shiftl, csize); } size = state->ops->compress_band(state, compbuf, compsize, bandbuf, dims->line_size, nlines); - new_band = calloc(1, sizeof_struct_band_list_s(size)); + new_band = calloc(1, sizeof_struct_band_list_s(size)); /* freed by free_cached_page() */ if (! new_band) abort(); new_band->size = size; @@ -146,12 +193,7 @@ static void compress_page_data(struct printer_state_s *state, for (i = dims->num_lines; i < header->cupsHeight; ++i) cupsRasterReadPixels(raster, linebuf, header->cupsBytesPerLine); - if (compbuf) - free(compbuf); - if (bandbuf) - free(bandbuf); - if (linebuf) - free(linebuf); + free_comp_buffers(); } static void send_page_data(struct printer_state_s *state, const struct cached_page_s *page) @@ -165,13 +207,40 @@ static void send_page_data(struct printer_state_s *state, const struct cached_pa state->ops->send_band(state, band->data, band->size); } +static void do_cancel(int s) +{ + (void) s; + fprintf(stderr, "DEBUG: CAPT: begin job cancellation cleanup\n"); + + if (ops) { + if (in_job) { + if (ops->job_epilogue) + ops->job_epilogue(state); + } + ops->cancel_cleanup(state); + } + + if (raster) { + cupsRasterClose(raster); + raster = NULL; + } + + free_comp_buffers(); + + if (cached_page) { + free_cached_page(cached_page); + cached_page = NULL; + } + + if (state) + free_state(); + + fprintf(stderr, "DEBUG: CAPT: job cancellation cleanup complete\n"); + exit(1); +} + static void do_print(int fd) { - const struct printer_ops_s *ops; - struct printer_state_s *state = NULL; - struct cached_page_s *cached_page = NULL; - bool in_job = false; - cups_raster_t *raster; ops = printer_detect(); @@ -195,6 +264,9 @@ static void do_print(int fd) if (! cupsRasterReadHeader2(raster, &header)) break; /* no more pages */ + if (job_cancel) + break; + cached_page = calloc(1, sizeof(struct cached_page_s)); if (! cached_page) abort(); @@ -235,7 +307,6 @@ static void do_print(int fd) fprintf(stderr, "DEBUG: CAPT: rastertocapt: sending page data\n"); send_page_data(state, cached_page); - fprintf(stderr, "DEBUG: CAPT: rastertocapt: end page %u\n", state->ipage); if (ops->page_epilogue) { bool ok = ops->page_epilogue(state, &cached_page->dims); @@ -249,12 +320,7 @@ static void do_print(int fd) page_printed = true; if (page_printed) { - while (cached_page->bands) { - void *p = cached_page->bands; - cached_page->bands = cached_page->bands->next; - free(p); - } - free(cached_page); + free_cached_page(cached_page); cached_page = NULL; } } @@ -270,19 +336,31 @@ static void do_print(int fd) fprintf(stderr, "ERROR: CAPT: no pages in job\n"); cupsRasterClose(raster); - - if (state) { - if (ops->free_state) - ops->free_state(state); - else - free(state); - state = NULL; - } + free_state(); } int main(int argc, char *argv[]) { + + #if POSIX_C_SOURCE >= 199309L + struct sigaction act_ign; + struct sigaction act_cancel; + + /* ignore SIGPIPE */ + act_ign.sa_handler = SIG_IGN; + sigemptyset(&act_ign.sa_mask); + sigaction(SIGPIPE, &act_ign, NULL); + /* handle SIGTERM */ + act_cancel.sa_handler = do_cancel(); + sigemptyset(&act_cancel.sa_mask); + sigaddset(&act_cancel.sa_mask, SIGINT); + sigaction(SIGTERM, &act_cancel, NULL); + #else + signal(SIGPIPE, SIG_IGN); + signal(SIGTERM, do_cancel); + #endif + int fd = 0; if (argc < 6 || argc > 7) { @@ -299,7 +377,6 @@ int main(int argc, char *argv[]) } fprintf(stderr, "DEBUG: CAPT: rastertocapt started\n"); - signal(SIGPIPE, SIG_IGN); do_print(fd); fprintf(stderr, "DEBUG: CAPT: rastertocapt finished\n"); diff --git a/src/std.h b/src/std.h index ecb4b55..5410237 100644 --- a/src/std.h +++ b/src/std.h @@ -19,6 +19,8 @@ #pragma once +#define _POSIX_C_SOURCE 199309L /* try removing this if build fails */ + #include #include #include