*PPD-Adobe: "4.1"
*% Adobe PostScript(R) Printer Description File
*% For IBM LaserPrinter 4039
*% Produced by Lexmark International, Inc.
*% Version 1.0
*%
*% Copyright (c) 1993 Lexmark International Inc.  All Rights Reserved.
*% Permission is granted for redistribution of this file as
*% long as this copyright notice is intact and the content
*% of the file is not altered in any way from its original form.
*%
*%

*FormatVersion: "4.1"
*FileVersion: "1.0"
*LanguageVersion: English
*PCFileName: "IBM4039.PPD"
*Product: "(IBM LaserPrinter 4039)"
*PSVersion: "(290)"
*ModelName: "IBM 4039 LaserPrinter"
*NickName: "IBM 4039 LaserPrinter PS"
*ShortNickName: "IBM 4039 LaserPrinter PS39"

*% === Options and Constraints ============

*OpenGroup: InstallableOptions/Options Installed

*OpenUI *Option1/Optional Lower Tray: Boolean
*DefaultOption1: False
*Option1 True/Installed: ""
*Option1 False/Not Installed: ""
*CloseUI: *Option1

*OpenUI *Option2/Optional Envelope Feeder: Boolean
*DefaultOption2: False
*Option2 True/Installed: ""
*Option2 False/Not Installed: ""
*CloseUI: *Option2

*CloseGroup: InstallableOptions

*UIConstraints: *Option1 False *InputSlot Lower
*UIConstraints: *Option2 False *InputSlot Envelope
*UIConstraints: *PageSize Envelope *Duplex
*UIConstraints: *Duplex *PageSize Envelope

*% === Basic Capabilities ============

*ColorDevice: False

*LanguageLevel: "1"
*FreeVM: "675000"
*ColorDevice: False
*DefaultColorSpace: Gray
*VariablePaperSize: False
*Throughput: "8"
*Password: "0"

*Protocols: PJL
*JCLBegin:"<1B>%-12345X"
*JCLToPSInterpreter:"@PJL ENTER LANGUAGE = POSTSCRIPT<0D><0A>"
*JCLEnd:"<1B>%-12345X"

*ExitServer: "
 count 0 eq   % is the password on the stack?
 { true }
 { dup        % potential password
   statusdict /checkpassword get exec not
 } ifelse
 {  %  if no password or not valid
   (WARNING : Cannot perform the exitserver command.) =
   (Password supplied is not valid.) =
   (Please contact the author of this software.) = flush
   quit
 } if
 serverdict /exitserver get exec
"
*End
*Reset: "
 count 0 eq  % is the password on the stack?
 { true }
 { dup      % potential password
   statusdict /checkpassword get exec not
 } ifelse
 {  %  if no password or not valid
   (WARNING : Cannot reset printer.) =
   (Password supplied is not valid.) =
   (Please contact the author of this software.) = flush
   quit
 } if
 serverdict /exitserver get exec
 systemdict /quit get exec
 (WARNING : Printer Reset Failed.) = flush
"
*End

*% === Resolution ============

*OpenUI *Resolution:  PickOne
*DefaultResolution: 300dpi
*OrderDependency: 10 AnySetup *Resolution
*Resolution 300dpi: "300 statusdict /setresolution get exec"
*Resolution 600dpi: "600 statusdict /setresolution get exec"
*?Resolution: "statusdict begin resolution (     ) cvs print (dpi) = flush end"
*CloseUI: *Resolution

*OpenUI *Smoothing/Smooth Characters: Boolean
*DefaultSmoothing: True
*OrderDependency: 40 AnySetup *Smoothing
*Smoothing False: "0 statusdict /setdoret get exec"
*Smoothing True: "1 statusdict /setdoret get exec"
*?Smoothing: "
 save
 [(False)(True)(True)(True)(Unknown)] statusdict /doret get exec
 dup 3 gt{pop 4}if get = flush
 restore
"
*End
*CloseUI: *Smoothing

*% === Halftone Information ===============

*ScreenFreq: "60.0"
*ScreenAngle: "45.0"
*DefaultScreenProc: Dot
*ScreenProc Dot: "
 {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
 sub }{dup mul exch dup mul add 1 exch sub }ifelse }
"
*End
*ScreenProc Line: "{ pop }"
*ScreenProc Ellipse: "{ dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub }"

*DefaultTransfer: Factory
*Transfer Factory: "
{ statusdict begin doenhancedhalftone resolution end 600 eq and
  { dup 0.28 lt
    { 0.6 exp 1.2 mul }
    { dup mul .478426 mul .521574 add }
    ifelse
  }
  { 0.85 exp }
  ifelse }"
*End
*Transfer Factory.Inverse: "
{ statusdict begin doenhancedhalftone resolution end 600 eq and
  { dup 0.28 lt
    { 0.6 exp 1.2 mul }
    { dup mul .478426 mul .521574 add }
    ifelse
  }
  { 0.85 exp }
  ifelse
  1 exch sub }"
*End

*% === Paper Handling ===================

*% Code in this section selects a tray and sets up a frame buffer.
*OpenUI *PageSize:  PickOne
*OrderDependency: 30 AnySetup *PageSize
*DefaultPageSize: Letter
*PageSize Letter: "statusdict /lettertray get exec"
*PageSize Legal: "statusdict /legaltray get exec"
*PageSize Executive: "statusdict /executivetray get exec"
*PageSize A4: "statusdict /a4tray get exec"
*PageSize A5: "statusdict /a5tray get exec"
*PageSize B5: "statusdict /b5tray get exec"
*PageSize Envelope.279.540/Monarch Envelope: "statusdict /3.875x7.5envelopetray get exec"
*PageSize Envelope.279.639/C9 Envelope: "statusdict /3.875x8.875envelopetray get exec"
*PageSize Envelope.297.684/C10 Envelope: "statusdict /4.125x9.5envelopetray get exec"
*PageSize Envelope.312.624/DL Envelope: "statusdict /110x220envelopetray get exec"
*PageSize Envelope.459.649/C5 Envelope: "statusdict /162x229envelopetray get exec"
*PageSize Envelope.499.709/B5 Envelope: "statusdict /176x250envelopetray get exec"
*PageSize Envelope.612.1008/Other Envelope: "statusdict /otherenvelopetray get exec"
*?PageSize: "
 save
 13 dict
   dup /letter (Letter) put
   dup /legal (Legal) put
   dup /executivepage (Executive) put
   dup /a4 (A4) put
   dup /a5 (A5) put
   dup /b5 (B5) put
   dup /3.875x7.5envelope (Monarch) put
   dup /3.875x8.875envelope (C9) put
   dup /4.125x9.5envelope (Comm10) put
   dup /110x220envelope (DL) put
   dup /162x229envelope (C5) put
   dup /176x250envelope (Envelope.499.709) put
   dup /otherenvelope (Envelope.612.1008) put
 statusdict /papersize get exec
 3 1 roll  {get} stopped {(Unknown)}if
 exch  not { print (.Transverse) }if
 = flush
 restore
"
*End
*CloseUI: *PageSize

*% These entries will set up the frame buffer. Usually used with manual feed.
*OpenUI *PageRegion:  PickOne
*OrderDependency: 40 AnySetup *PageRegion
*DefaultPageRegion: Letter
*PageRegion Letter: "letter"
*PageRegion Legal: "legal"
*PageRegion Executive: "executivepage"
*PageRegion A4: "a4"
*PageRegion A5: "a5"
*PageRegion B5: "b5"
*PageRegion Envelope.279.540/Monarch Envelope: "3.875x7.5envelope"
*PageRegion Envelope.279.639/C9 Envelope: "3.875x8.875envelope"
*PageRegion Envelope.297.684/C10 Envelope: "4.125x9.5envelope"
*PageRegion Envelope.312.624/DL Envelope: "110x220envelope"
*PageRegion Envelope.459.649/C5 Envelope: "162x229envelope"
*PageRegion Envelope.499.709/B5 Envelope: "176x250envelope"
*PageRegion Envelope.612.1008/Other Envelope: "otherenvelope"
*CloseUI: *PageRegion

*DefaultImageableArea: Letter
*ImageableArea Letter:    "18 17 597 776"
*ImageableArea Legal:     "18 18 597 992"
*ImageableArea Executive: "18 18 505 740"
*ImageableArea A4:        "10 19 588 827"
*ImageableArea A5:        "18 13 405 580"
*ImageableArea B5:        "18 18 505 711"
*ImageableArea Envelope.279.540/Monarch Envelope: "1 13 260 526"
*ImageableArea Envelope.279.639/C9 Envelope:      "1 16 260 623"
*ImageableArea Envelope.297.684/C10 Envelope:     "3 16 278 668"
*ImageableArea Envelope.312.624/DL Envelope:      "3 16 293 608"
*ImageableArea Envelope.459.649/C5 Envelope:      "4 16 440 634"
*ImageableArea Envelope.499.709/B5 Envelope:      "2 15 480 693"
*ImageableArea Envelope.612.1008/Other Envelope: "15 16 593 992"
*?ImageableArea: "
 save
 /cvp { cvi (            ) cvs print ( ) print } bind def
 newpath clippath pathbbox
 4 -2 roll exch 2 {ceiling cvp} repeat
 exch 2 {floor cvp} repeat flush
 restore
"
*End

*% These provide the physical dimensions of the paper (by keyword)
*DefaultPaperDimension: Letter
*PaperDimension Letter:    "612 792"
*PaperDimension Legal:     "612 1008"
*PaperDimension Executive: "522 756"
*PaperDimension A4:        "595 842"
*PaperDimension A5:        "420 595"
*PaperDimension B5:        "516 729"
*PaperDimension Envelope.279.540/Monarch Envelope: "279 540"
*PaperDimension Envelope.279.639/C9 Envelope:      "279 639"
*PaperDimension Envelope.297.684/C10 Envelope:     "297 684"
*PaperDimension Envelope.312.624/DL Envelope:      "312 624"
*PaperDimension Envelope.459.649/C5 Envelope:      "459 649"
*PaperDimension Envelope.499.709/B5 Envelope:      "499 709"
*PaperDimension Envelope.612.1008/Other Envelope:  "612 1008"

*RequiresPageRegion All: True
*OpenUI *InputSlot:  PickOne
*OrderDependency: 20 AnySetup *InputSlot
*DefaultInputSlot: Upper
*%InputSlot AutoSelect: "0 statusdict /setpapertray get exec"
*InputSlot Upper: "0 statusdict /setpapertray get exec"
*InputSlot Lower: "statusdict begin optionalfeeder { 1 setpapertray }{ 0 setpapertray }ifelse end"
*InputSlot Envelope: "statusdict begin envelopefeeder { 2 setpapertray }{ 3 setpapertray }ifelse end"
*%InputSlot Manual: "3 statusdict /setpapertray get exec"
*InputSlot ManualEnvelope: "4 statusdict /setpapertray get exec"
*?InputSlot: "
 save
 [ (Upper) (Lower) (Envelope) (Manual) (ManualEnvelope) ] statusdict /papertray get exec
 {get exec} stopped { pop pop (Unknown) } if = flush
 restore
"
*End
*CloseUI: *InputSlot

*OpenUI *ManualFeed: Boolean
*OrderDependency: 15 AnySetup *ManualFeed
*DefaultManualFeed: False
*ManualFeed True: "3 statusdict /setpapertray get exec"
*ManualFeed False: "statusdict /manualfeed false put"
*?ManualFeed: "
 save
 statusdict /manualfeed get {(True)}{(False)}ifelse = flush
 restore
"
*End
*CloseUI: *ManualFeed

*OpenUI *TraySwitch: Boolean
*OrderDependency: 50 AnySetup *TraySwitch
*DefaultTraySwitch: False
*TraySwitch True:  "statusdict /trayswitch true put"
*TraySwitch False: "statusdict /trayswitch false put"
*?TraySwitch: "
 save
 statusdict /trayswitch get {(True)}{(False)}ifelse = flush
 restore
"
*End
*CloseUI *TraySwitch

*DefaultOutputOrder: Normal
*DefaultOutputBin: Upper
*OutputOrder Normal: ""
*OutputOrder Reverse: ""

*PageStackOrder Upper: Normal
*PageStackOrder Front: Reverse

*DefaultDuplex: None
*Duplex None: "statusdict begin false settumble false setduplexmode end"
*Duplex DuplexNoTumble: "statusdict begin duplexer {true setduplexmode false settumble}{false setduplexmode}ifelse end"
*Duplex DuplexTumble: "statusdict begin duplexer {true setduplexmode true settumble}{false setduplexmode}ifelse end"

*% Font Information ==============(5/28/92)============================

*DefaultFont: Courier
*Font Courier: Standard "(001.000)" Standard ROM
*Font Courier-Bold: Standard "(001.000)" Standard ROM
*Font Courier-Oblique: Standard "(001.000)" Standard ROM
*Font Courier-BoldOblique: Standard "(001.000)" Standard ROM
*Font Times-Roman: Standard "(001.000)" Standard ROM
*Font Times-Bold: Standard "(001.000)" Standard ROM
*Font Times-Italic: Standard "(001.000)" Standard ROM
*Font Times-BoldItalic: Standard "(001.000)" Standard ROM
*Font Helvetica: Standard "(001.000)" Standard ROM
*Font Helvetica-Bold: Standard "(001.000)" Standard ROM
*Font Helvetica-Oblique: Standard "(001.000)" Standard ROM
*Font Helvetica-BoldOblique: Standard "(001.000)" Standard ROM
*Font Helvetica-Narrow: Standard "(001.000)" Standard ROM
*Font Helvetica-Narrow-Bold: Standard "(001.000)" Standard ROM
*Font Helvetica-Narrow-BoldOblique: Standard "(001.000)" Standard ROM
*Font Helvetica-Narrow-Oblique: Standard "(001.000)" Standard ROM
*Font Symbol: Special "(001.000)" Standard ROM
*Font AvantGarde-Book: Standard "(001.000)" Standard ROM
*Font AvantGarde-BookOblique: Standard "(001.000)" Standard ROM
*Font AvantGarde-Demi: Standard "(001.000)" Standard ROM
*Font AvantGarde-DemiOblique: Standard "(001.000)" Standard ROM
*Font Bookman-Demi: Standard "(001.000)" Standard ROM
*Font Bookman-DemiItalic: Standard "(001.000)" Standard ROM
*Font Bookman-Light: Standard "(001.000)" Standard ROM
*Font Bookman-LightItalic: Standard "(001.000)" Standard ROM
*Font Helvetica-Light: Standard "(001.000)" Standard ROM
*Font Helvetica-LightOblique: Standard "(001.000)" Standard ROM
*Font Helvetica-Black: Standard "(001.000)" Standard ROM
*Font Helvetica-BlackOblique: Standard "(001.000)" Standard ROM
*Font NewCenturySchlbk-Roman: Standard "(001.000)" Standard ROM
*Font NewCenturySchlbk-Bold: Standard "(001.000)" Standard ROM
*Font NewCenturySchlbk-Italic: Standard "(001.000)" Standard ROM
*Font NewCenturySchlbk-BoldItalic: Standard "(001.000)" Standard ROM
*Font Palatino-Roman: Standard "(001.000)" Standard ROM
*Font Palatino-Bold: Standard "(001.000)" Standard ROM
*Font Palatino-Italic: Standard "(001.000)" Standard ROM
*Font Palatino-BoldItalic: Standard "(001.000)" Standard ROM
*Font ZapfChancery-MediumItalic: Standard "(001.000)" Standard ROM
*Font ZapfDingbats: Special "(001.000)" Special ROM
*?FontQuery: "
 save
 4 dict begin
   /sv exch def
   /str (fonts/                              ) def
   /st2 128 string def
   { count 0 gt
     { dup st2 cvs (/) print print (:) print dup FontDirectory exch known
       {pop (Yes)}
       { str exch st2 cvs dup length /len exch def
        6 exch putinterval str 0 len 6 add getinterval mark exch
        { } st2 filenameforall counttomark 0 gt
        { cleartomark (Yes)}{cleartomark (No)}ifelse
       }ifelse = flush
     }{ exit } ifelse
   } bind loop
   (*) = flush
   sv
 end
 restore
"
*End

*?FontList: "
 save
 2 dict begin
   /sv exch def
   /str 128 string def
   FontDirectory { pop == } bind forall flush
   /filenameforall where
   { pop save (fonts/*)
     { dup length 6 sub 6 exch getinterval cvn == } bind
     str filenameforall flush restore
   } if
   (*) = flush
   sv
 end
 restore
"
*End

*% Printer Messages (verbatim from printer):
*Message: "%%  exitserver: permanent state may be changed  %%"
*Message: "%%  Flushing: rest of job (to end-of-file) will be ignored  %%"
*Message: "\FontName\ not found, using Courier"

*% Status (format: %%  status: <one of these>  %% )
*Status: "Printer Busy"
*Status: "Warming Up"

*% Input Sources (format: %%  status: <stat>; source: <one of these>  %% )
*Source: "Serial"
*Source: "Parallel"
*Source: "AppleTalk"

*% Printer Error (format: %%  PrinterError: <one of these>  %%)
*PrinterError: "Printer Offline"
*PrinterError: "Paper Out or Feed Failure - Tray 1"
*PrinterError: "Paper Out or Feed Failure - Tray 2"
*PrinterError: "Paper Out or Feed Failure - Envelope Feeder"
*PrinterError: "Load Paper Requested"
*PrinterError: "Load Envelope Requested"
*PrinterError: "Invalid Manual Insertion"
*PrinterError: "Wrong Paper Length"
*PrinterError: "Paper Jam"
*PrinterError: "Cover Open/Cartridge Not Installed"
*PrinterError: "Output Bin Full"
*PrinterError: "Default Storage Error"
*PrinterError: "Battery Low - Slot 1"
*PrinterError: "Battery Low - Slot 2"
*PrinterError: "Non-Download Font Card Installed - Slot 1"
*PrinterError: "Non-Download Font Card Installed - Slot 2"
*PrinterError: "Write-Protect Switch in Protect Position - Slot 1"
*PrinterError: "Write-Protect Switch in Protect Position - Slot 2"
*PrinterError: "Defective or Unprogrammed Card Installed - Slot 1"
*PrinterError: "Defective or Unprogrammed Card Installed - Slot 2"
*PrinterError: "Defective Font Card Installed - Slot 1"
*PrinterError: "Defective Font Card Installed - Slot 2"
*PrinterError: "Unsupported Card Installed - Slot 1"
*PrinterError: "Unsupported Card Installed - Slot 2"
*PrinterError: "Printer Busy"
*PrinterError: "Printer Error"
*PrinterError: "Printer Warming Up"
*PrinterError: "Service Error"
*PrinterError: "ioerror"
*PrinterError: "Wrong Paper Size Installed"

*%DeviceAdjustMatrix: " 1 0 0 1 0 0 "

*% === Color Separation Information =====================

*DefaultColorSep: ProcessBlack.128lpi.1270dpi/128 lpi / 1270 dpi

*InkName: ProcessBlack/Process Black
*InkName: CustomColor/Custom Color
*InkName: ProcessCyan/Process Cyan
*InkName: ProcessMagenta/Process Magenta
*InkName: ProcessYellow/Process Yellow

*%  For 60 lpi / 300 dpi  ===============================

*ColorSepScreenAngle ProcessBlack.60lpi.300dpi/60 lpi / 300 dpi: "45"
*ColorSepScreenAngle CustomColor.60lpi.300dpi/60 lpi / 300 dpi: "45"
*ColorSepScreenAngle ProcessCyan.60lpi.300dpi/60 lpi / 300 dpi: "15"
*ColorSepScreenAngle ProcessMagenta.60lpi.300dpi/60 lpi / 300 dpi: "75"
*ColorSepScreenAngle ProcessYellow.60lpi.300dpi/60 lpi / 300 dpi: "0"

*ColorSepScreenFreq ProcessBlack.60lpi.300dpi/60 lpi / 300 dpi: "60"
*ColorSepScreenFreq CustomColor.60lpi.300dpi/60 lpi / 300 dpi: "60"
*ColorSepScreenFreq ProcessCyan.60lpi.300dpi/60 lpi / 300 dpi: "60"
*ColorSepScreenFreq ProcessMagenta.60lpi.300dpi/60 lpi / 300 dpi: "60"
*ColorSepScreenFreq ProcessYellow.60lpi.300dpi/60 lpi / 300 dpi: "60"

*%  For 53 lpi / 300 dpi  ===============================

*ColorSepScreenAngle ProcessBlack.53lpi.300dpi/53 lpi / 300 dpi: "45.0"
*ColorSepScreenAngle CustomColor.53lpi.300dpi/53 lpi / 300 dpi: "45.0"
*ColorSepScreenAngle ProcessCyan.53lpi.300dpi/53 lpi / 300 dpi: "71.5651"
*ColorSepScreenAngle ProcessMagenta.53lpi.300dpi/53 lpi / 300 dpi: "18.4349"
*ColorSepScreenAngle ProcessYellow.53lpi.300dpi/53 lpi / 300 dpi: "0.0"

*ColorSepScreenFreq ProcessBlack.53lpi.300dpi/53 lpi / 300 dpi: "53.033"
*ColorSepScreenFreq CustomColor.53lpi.300dpi/53 lpi / 300 dpi: "53.033"
*ColorSepScreenFreq ProcessCyan.53lpi.300dpi/53 lpi / 300 dpi: "47.4342"
*ColorSepScreenFreq ProcessMagenta.53lpi.300dpi/53 lpi / 300 dpi: "47.4342"
*ColorSepScreenFreq ProcessYellow.53lpi.300dpi/53 lpi / 300 dpi: "50.0"

*%  For 85 lpi / 600 dpi  5,5,2,6,6,2,20/3,0) =====================

*ColorSepScreenAngle ProcessBlack.85lpi.600dpi/85 lpi / 600 dpi: "45.0"
*ColorSepScreenAngle CustomColor.85lpi.600dpi/85 lpi / 600 dpi: "45.0"
*ColorSepScreenAngle ProcessCyan.85lpi.600dpi/85 lpi / 600 dpi: "71.5651"
*ColorSepScreenAngle ProcessMagenta.85lpi.600dpi/85 lpi / 600 dpi: "18.4349"
*ColorSepScreenAngle ProcessYellow.85lpi.600dpi/85 lpi / 600 dpi: "0.0"

*ColorSepScreenFreq ProcessBlack.85lpi.600dpi/85 lpi / 600 dpi: "84.8528"
*ColorSepScreenFreq CustomColor.85lpi.600dpi/85 lpi / 600 dpi: "84.8528"
*ColorSepScreenFreq ProcessCyan.85lpi.600dpi/85 lpi / 600 dpi: "94.8683"
*ColorSepScreenFreq ProcessMagenta.85lpi.600dpi/85 lpi / 600 dpi: "94.8683"
*ColorSepScreenFreq ProcessYellow.85lpi.600dpi/85 lpi / 600 dpi: "30.0"

*ColorSepScreenProc ProcessYellow.85lpi.600dpi/85 lpi / 600 dpi: "
{1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch
1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch
abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
sub }{dup mul exch dup mul add 1 exch sub }ifelse }
"
*End

*%  For 71 lpi / 600 dpi  ===============================

*ColorSepScreenAngle ProcessBlack.71lpi.600dpi/71 lpi / 600 dpi: "45.0"
*ColorSepScreenAngle CustomColor.71lpi.600dpi/71 lpi / 600 dpi: "45.0"
*ColorSepScreenAngle ProcessCyan.71lpi.600dpi/71 lpi / 600 dpi: "71.5651"
*ColorSepScreenAngle ProcessMagenta.71lpi.600dpi/71 lpi / 600 dpi: "18.4349"
*ColorSepScreenAngle ProcessYellow.71lpi.600dpi/71 lpi / 600 dpi: "0.0"

*ColorSepScreenFreq ProcessBlack.71lpi.600dpi/71 lpi / 600 dpi: "70.7107"
*ColorSepScreenFreq CustomColor.71lpi.600dpi/71 lpi / 600 dpi: "70.7107"
*ColorSepScreenFreq ProcessCyan.71lpi.600dpi/71 lpi / 600 dpi: "63.2456"
*ColorSepScreenFreq ProcessMagenta.71lpi.600dpi/71 lpi / 600 dpi: "63.2456"
*ColorSepScreenFreq ProcessYellow.71lpi.600dpi/71 lpi / 600 dpi: "66.6667"

*% End of PPD file for IBM LaserPrinter 4039
