home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / sun / awt / motif / PSPrintStream.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  21.0 KB  |  839 lines

  1. package sun.awt.motif;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.Font;
  6. import java.awt.FontMetrics;
  7. import java.awt.PrintJob;
  8. import java.awt.Rectangle;
  9. import java.awt.image.ColorModel;
  10. import java.awt.image.IndexColorModel;
  11. import java.io.BufferedInputStream;
  12. import java.io.CharConversionException;
  13. import java.io.File;
  14. import java.io.FileInputStream;
  15. import java.io.InputStream;
  16. import java.io.PrintStream;
  17. import java.util.Properties;
  18. import sun.awt.CharsetString;
  19. import sun.awt.PlatformFont;
  20. import sun.io.CharToByteConverter;
  21.  
  22. class PSPrintStream {
  23.    // $FF: renamed from: ps java.io.PrintStream
  24.    PrintStream field_0;
  25.    PrintJob job;
  26.    public String title;
  27.    public Dimension paperDim;
  28.    Properties fontProps;
  29.    int curPage = -1;
  30.    Rectangle curClip;
  31.    Color curColor;
  32.    Font curFont;
  33.    int[] curColormap;
  34.    boolean prologSent = false;
  35.    boolean lastFirst = false;
  36.    Color paperColor;
  37.    static String SetColorName = "SC";
  38.    static String SetFontName = "SF";
  39.    static String RectClipName = "RC";
  40.    static String InitClipName = "IC";
  41.    static String RectFillName = "RF";
  42.    static String RectStrokeName = "RS";
  43.    static String RRectFillName = "RRF";
  44.    static String RRectStrokeName = "RRS";
  45.    static String ArcFillName = "AF";
  46.    static String ArcStrokeName = "AS";
  47.    static String PolygonFillName = "PYF";
  48.    static String PolygonStrokeName = "PYS";
  49.    static String DrawStringName = "DS";
  50.    static String DrawLineName = "DL";
  51.    static String ScaleName = "S";
  52.    static String StartPageName = "SP";
  53.    static String EndPageName = "EP";
  54.    static String GsaveName = "GS";
  55.    static String GrestoreName = "GR";
  56.    static String SetColormapName = "CM";
  57.    static String DrawImageName = "DI";
  58.    static String DrawIndexImageName = "DII";
  59.    static String testString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890";
  60.    private static byte[] hexDigits = new byte[]{48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70};
  61.  
  62.    PSPrintStream(PrintJob var1, PrintStream var2, String var3, Dimension var4, boolean var5) {
  63.       this.paperColor = Color.white;
  64.       this.job = var1;
  65.       this.field_0 = var2;
  66.       this.title = var3;
  67.       this.paperDim = var4;
  68.       this.lastFirst = var5;
  69.       this.fontProps = this.initProps();
  70.    }
  71.  
  72.    private Properties initProps() {
  73.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  74.       String var1 = System.getProperty("java.home");
  75.       if (var1 != null) {
  76.          String var2 = System.getProperty("user.language", "en");
  77.          SecurityManager.enablePrivilege("UniversalFileRead");
  78.  
  79.          try {
  80.             File var3 = new File(var1 + File.separator + "lib" + File.separator + "psfont.properties." + var2);
  81.             if (!var3.canRead()) {
  82.                var3 = new File(var1 + File.separator + "lib" + File.separator + "psfont.properties");
  83.                if (!var3.canRead()) {
  84.                   return null;
  85.                }
  86.             }
  87.  
  88.             BufferedInputStream var4 = new BufferedInputStream(new FileInputStream(var3.getPath()));
  89.             Properties var5 = new Properties();
  90.             var5.load(var4);
  91.             ((InputStream)var4).close();
  92.             return var5;
  93.          } catch (Exception var6) {
  94.             return null;
  95.          }
  96.       } else {
  97.          return null;
  98.       }
  99.    }
  100.  
  101.    void startPage(int var1) {
  102.       this.curClip = null;
  103.       this.curColor = null;
  104.       this.curFont = null;
  105.       this.curColormap = null;
  106.       this.curPage = var1;
  107.       if (this.job != null) {
  108.          this.field_0.println("\n%%Page:  " + var1 + " " + var1);
  109.       }
  110.  
  111.       this.field_0.println(StartPageName);
  112.    }
  113.  
  114.    void endPage() {
  115.       this.field_0.println(EndPageName);
  116.       this.curPage = -1;
  117.       this.field_0.flush();
  118.    }
  119.  
  120.    void close(int var1) {
  121.       if (this.job != null) {
  122.          this.field_0.println("%%Trailer");
  123.          this.field_0.println("%%Pages: " + var1);
  124.       }
  125.  
  126.       this.field_0.println("%%EOF");
  127.       this.field_0.flush();
  128.    }
  129.  
  130.    private void outPoint(PSGraphics var1, int var2, int var3) {
  131.       this.field_0.print(var1.adjustX + var2 + " " + (var1.adjustY - var3) + " ");
  132.    }
  133.  
  134.    private void outRect(PSGraphics var1, int var2, int var3, int var4, int var5) {
  135.       this.outPoint(var1, var2, var3);
  136.       this.field_0.print(var4 + " " + -var5 + " ");
  137.    }
  138.  
  139.    private void outClip(PSGraphics var1) {
  140.       Rectangle var2 = var1.clipRect;
  141.       if (this.curClip != var2) {
  142.          this.field_0.println(InitClipName);
  143.          if (var2 != null) {
  144.             this.outRect(var1, var2.x - var1.originX, var2.y - var1.originY, var2.width, var2.height);
  145.             this.field_0.println(RectClipName);
  146.          }
  147.  
  148.          this.curClip = var2;
  149.       }
  150.  
  151.    }
  152.  
  153.    private void outColor(Color var1) {
  154.       if (this.curColor != var1) {
  155.          this.field_0.println(var1.getRed() + " " + var1.getGreen() + " " + var1.getBlue() + " " + SetColorName);
  156.          this.curColor = var1;
  157.       }
  158.  
  159.    }
  160.  
  161.    private void outFont(PSGraphics var1) {
  162.       Font var2 = var1.font;
  163.       if (this.curFont != var2) {
  164.          this.curFont = var2;
  165.          FontMetrics var3 = var1.curMetrics;
  166.          if (var1.curMetrics == null) {
  167.             var3 = var1.getFontMetrics(var2);
  168.             var1.curMetrics = var3;
  169.          }
  170.  
  171.          int var4 = var3.stringWidth(testString);
  172.          int var5 = var2.getStyle();
  173.          if (!var2.getFamily().startsWith("Helvetica") && !var2.getFamily().startsWith("SansSerif")) {
  174.             if (var2.getFamily().startsWith("Dialog")) {
  175.                var5 = 0;
  176.             } else if (!var2.getFamily().startsWith("Times") && !var2.getFamily().startsWith("Serif")) {
  177.                var5 = 8;
  178.             } else {
  179.                var5 = 4;
  180.             }
  181.          } else {
  182.             var5 = 0;
  183.          }
  184.  
  185.          if (var2.isBold()) {
  186.             ++var5;
  187.          }
  188.  
  189.          if (var2.isItalic()) {
  190.             var5 += 2;
  191.          }
  192.  
  193.          this.field_0.println("% Font[" + var2.getFamily() + ", " + var2.getStyle() + ", " + var2.getSize() + "]");
  194.          this.field_0.println(var4 + " " + var2.getSize() + " " + var5 + " " + SetFontName);
  195.       }
  196.  
  197.    }
  198.  
  199.    private void outStr(String var1) {
  200.       StringBuffer var2 = new StringBuffer();
  201.       var2.append('(');
  202.  
  203.       for(int var3 = 0; var3 < var1.length(); ++var3) {
  204.          char var4 = var1.charAt(var3);
  205.          if (var4 == '(' || var4 == ')' || var4 == '\\') {
  206.             var2.append('\\');
  207.          }
  208.  
  209.          var2.append(var4);
  210.       }
  211.  
  212.       var2.append(')');
  213.       this.field_0.print(var2.toString());
  214.    }
  215.  
  216.    synchronized void sendLine(PSGraphics var1, int var2, int var3, int var4, int var5) {
  217.       if (var1.pageNumber == this.curPage) {
  218.          this.outClip(var1);
  219.          this.outColor(var1.foreground);
  220.          this.outPoint(var1, var2, var3);
  221.          this.outPoint(var1, var4, var5);
  222.          this.field_0.println(DrawLineName);
  223.       }
  224.    }
  225.  
  226.    synchronized void sendRect(PSGraphics var1, int var2, int var3, int var4, int var5, Color var6, boolean var7) {
  227.       if (var1.pageNumber == this.curPage) {
  228.          this.outClip(var1);
  229.          this.outColor(var6);
  230.          this.outRect(var1, var2, var3, var4, var5);
  231.          this.field_0.println(var7 ? RectFillName : RectStrokeName);
  232.       }
  233.    }
  234.  
  235.    void sendRect(PSGraphics var1, int var2, int var3, int var4, int var5, boolean var6) {
  236.       this.sendRect(var1, var2, var3, var4, var5, var1.foreground, var6);
  237.    }
  238.  
  239.    void fillRect(PSGraphics var1, int var2, int var3, int var4, int var5, Color var6) {
  240.       this.sendRect(var1, var2, var3, var4, var5, var6, true);
  241.    }
  242.  
  243.    synchronized void sendRoundRect(PSGraphics var1, int var2, int var3, int var4, int var5, float var6, float var7, boolean var8) {
  244.       if (var1.pageNumber == this.curPage) {
  245.          this.outClip(var1);
  246.          this.outColor(var1.foreground);
  247.          this.outRect(var1, var2, var3, var4, var5);
  248.          this.field_0.print(var6 + " " + var7 + " ");
  249.          this.field_0.println(var8 ? RRectFillName : RRectStrokeName);
  250.       }
  251.    }
  252.  
  253.    synchronized void sendArc(PSGraphics var1, int var2, int var3, int var4, int var5, int var6, int var7, boolean var8) {
  254.       if (var1.pageNumber == this.curPage) {
  255.          this.outClip(var1);
  256.          this.outColor(var1.foreground);
  257.          this.outPoint(var1, var2, var3);
  258.          this.field_0.print(var4 + " " + var5 + " " + var6 + " " + var7 + " ");
  259.          this.field_0.println(var8 ? ArcFillName : ArcStrokeName);
  260.       }
  261.    }
  262.  
  263.    synchronized void sendPolygon(PSGraphics var1, int[] var2, int[] var3, int var4, boolean var5, boolean var6) {
  264.       if (var1.pageNumber == this.curPage) {
  265.          this.outClip(var1);
  266.          this.outColor(var1.foreground);
  267.          this.field_0.print(var5 + " ");
  268.  
  269.          for(int var7 = 0; var7 < var4; ++var7) {
  270.             this.outPoint(var1, var2[var7], var3[var7]);
  271.          }
  272.  
  273.          this.field_0.print(var4 + " ");
  274.          this.field_0.println(var6 ? PolygonFillName : PolygonStrokeName);
  275.       }
  276.    }
  277.  
  278.    synchronized void sendString(PSGraphics var1, String var2, int var3, int var4) {
  279.       if (var1.pageNumber == this.curPage) {
  280.          this.outClip(var1);
  281.          this.outColor(var1.foreground);
  282.          Font var5 = var1.font;
  283.          FontMetrics var6 = var1.curMetrics;
  284.          if (var6 == null) {
  285.             var6 = var1.getFontMetrics(var5);
  286.             var1.curMetrics = var6;
  287.          }
  288.  
  289.          if (this.fontProps == null) {
  290.             this.outFont(var1);
  291.             this.outStr(var2);
  292.             this.field_0.print(" " + var6.stringWidth(var2) + " ");
  293.             this.outPoint(var1, var3, var4);
  294.             this.field_0.println(DrawStringName);
  295.          } else {
  296.             CharsetString[] var7 = ((MFontPeer)var5.getPeer()).makeMultiCharsetString(var2);
  297.  
  298.             for(int var8 = 0; var8 < var7.length; ++var8) {
  299.                CharsetString var9 = var7[var8];
  300.                CharToByteConverter var10 = var9.fontDescriptor.fontCharset;
  301.                int var11 = var6.charsWidth(var9.charsetChars, var9.offset, var9.length);
  302.                String var12 = this.makeCharsetName(var10.toString());
  303.                String var13 = PlatformFont.styleStr(var5.getStyle());
  304.                String var14 = this.fontProps.getProperty(var5.getName().toLowerCase(), "serif");
  305.                String var15 = this.fontProps.getProperty(var14 + "." + var12 + "." + var13, "Courier ISOF");
  306.  
  307.                int var16;
  308.                try {
  309.                   var16 = Integer.parseInt(this.fontProps.getProperty(var15));
  310.                } catch (NumberFormatException var24) {
  311.                   var16 = 0;
  312.                }
  313.  
  314.                StringBuffer var17 = new StringBuffer();
  315.                byte[] var18 = new byte[var9.length * 2];
  316.  
  317.                int var19;
  318.                try {
  319.                   var19 = var10.convert(var9.charsetChars, var9.offset, var9.offset + var9.length, var18, 0, var18.length);
  320.                } catch (CharConversionException var25) {
  321.                   continue;
  322.                }
  323.  
  324.                var17.append('<');
  325.  
  326.                for(int var20 = 0; var20 < var19; ++var20) {
  327.                   byte var21 = var18[var20];
  328.                   String var22 = Integer.toHexString(var21);
  329.                   int var23 = var22.length();
  330.                   if (var23 > 2) {
  331.                      var22 = var22.substring(var23 - 2, var23);
  332.                   } else if (var23 == 1) {
  333.                      var22 = "0" + var22;
  334.                   } else if (var23 == 0) {
  335.                      var22 = "00";
  336.                   }
  337.  
  338.                   var17.append(var22);
  339.                }
  340.  
  341.                var17.append('>');
  342.                this.field_0.println("/testString " + var17.toString() + " D");
  343.                this.field_0.println("% Font[" + var5.getName() + ", " + PlatformFont.styleStr(var5.getStyle()) + ", " + var5.getSize() + "]");
  344.                this.field_0.println(var11 + " " + var5.getSize() + " " + var16 + " " + SetFontName);
  345.                this.field_0.println(var17.toString());
  346.                int var26 = var6.charsWidth(var9.charsetChars, var9.offset, var9.length);
  347.                this.field_0.print(" " + var26 + " ");
  348.                this.outPoint(var1, var3, var4);
  349.                this.field_0.println(DrawStringName);
  350.                var3 += var26;
  351.             }
  352.  
  353.          }
  354.       }
  355.    }
  356.  
  357.    private String makeCharsetName(String var1) {
  358.       return var1.indexOf("8859_1") != -1 ? "latin1" : var1.toLowerCase();
  359.    }
  360.  
  361.    private static final int blend(int var0, int var1, int var2) {
  362.       return (var0 * var1 + (255 - var0) * var2) / 255;
  363.    }
  364.  
  365.    private int sendColors(byte[] var1, int var2, int var3, byte[] var4, int var5) {
  366.       while(var3-- > 0) {
  367.          if (var5 + 3 > var4.length) {
  368.             var4[var5++] = 10;
  369.             this.field_0.write(var4, 0, var5);
  370.             var5 = 0;
  371.          }
  372.  
  373.          byte var6 = var1[var2++];
  374.          var4[var5++] = hexDigits[var6 >>> 4 & 15];
  375.          var4[var5++] = hexDigits[var6 & 15];
  376.       }
  377.  
  378.       return var5;
  379.    }
  380.  
  381.    private int sendColors(int[] var1, int var2, int var3, byte[] var4, int var5) {
  382.       while(var3-- > 0) {
  383.          if (var5 + 7 > var4.length) {
  384.             var4[var5++] = 10;
  385.             this.field_0.write(var4, 0, var5);
  386.             var5 = 0;
  387.          }
  388.  
  389.          int var6 = var1[var2++];
  390.          var4[var5++] = hexDigits[var6 >>> 20 & 15];
  391.          var4[var5++] = hexDigits[var6 >>> 16 & 15];
  392.          var4[var5++] = hexDigits[var6 >>> 12 & 15];
  393.          var4[var5++] = hexDigits[var6 >>> 8 & 15];
  394.          var4[var5++] = hexDigits[var6 >>> 4 & 15];
  395.          var4[var5++] = hexDigits[var6 & 15];
  396.       }
  397.  
  398.       return var5;
  399.    }
  400.  
  401.    private void sendSubPixels(PSGraphics var1, byte[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, float var10, float var11) {
  402.       int var12 = var6 - var4;
  403.       int var13 = var7 - var5;
  404.       int var14 = var5 * var3 + var4;
  405.       int var15 = 0;
  406.       byte[] var16 = new byte[73];
  407.       this.field_0.print(var4 + " " + var5 + " ");
  408.       this.field_0.print(var12 + " " + var13 + " ");
  409.       this.field_0.print(var10 * (float)var12 + " " + var11 * (float)var13 + " ");
  410.       this.outPoint(var1, var8, var9);
  411.       this.field_0.println(DrawIndexImageName);
  412.  
  413.       for(int var17 = var5; var17 < var7; ++var17) {
  414.          var15 = this.sendColors(var2, var14, var12, var16, var15);
  415.          var14 += var3;
  416.       }
  417.  
  418.       if (var15 > 0) {
  419.          var16[var15++] = 10;
  420.          this.field_0.write(var16, 0, var15);
  421.       }
  422.  
  423.    }
  424.  
  425.    private void sendSubPixels(PSGraphics var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, float var10, float var11) {
  426.       int var12 = var6 - var4;
  427.       int var13 = var7 - var5;
  428.       int var14 = var5 * var3 + var4;
  429.       int var15 = 0;
  430.       byte[] var16 = new byte[73];
  431.       this.field_0.print(var4 + " " + var5 + " ");
  432.       this.field_0.print(var12 + " " + var13 + " ");
  433.       this.field_0.print(var10 * (float)var12 + " " + var11 * (float)var13 + " ");
  434.       this.outPoint(var1, var8, var9);
  435.       this.field_0.println(DrawImageName);
  436.  
  437.       for(int var17 = var5; var17 < var7; ++var17) {
  438.          var15 = this.sendColors(var2, var14, var12, var16, var15);
  439.          var14 += var3;
  440.       }
  441.  
  442.       if (var15 > 0) {
  443.          var16[var15++] = 10;
  444.          this.field_0.write(var16, 0, var15);
  445.       }
  446.  
  447.    }
  448.  
  449.    private void sendColormap(PSGraphics var1, int[] var2, int var3) {
  450.       if (this.curColormap != null) {
  451.          boolean var4 = true;
  452.  
  453.          for(int var5 = 0; var5 < var3; ++var5) {
  454.             if (var2[var5] != this.curColormap[var5]) {
  455.                var4 = false;
  456.                break;
  457.             }
  458.          }
  459.  
  460.          if (var4) {
  461.             return;
  462.          }
  463.       }
  464.  
  465.       this.curColormap = var2;
  466.       byte[] var6 = new byte[73];
  467.       this.field_0.println(var3 + " " + SetColormapName);
  468.       int var7 = this.sendColors((int[])var2, 0, var3, var6, 0);
  469.       if (var7 > 0) {
  470.          var6[var7++] = 10;
  471.          this.field_0.write(var6, 0, var7);
  472.       }
  473.  
  474.    }
  475.  
  476.    synchronized void sendPixels(PSGraphics var1, byte[] var2, IndexColorModel var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, Color var12) {
  477.       if (var1.pageNumber == this.curPage) {
  478.          int[] var13 = new int[256];
  479.          int var14 = var3.getMapSize();
  480.          boolean[] var15 = new boolean[256];
  481.          boolean var16 = false;
  482.          int var17;
  483.          int var18;
  484.          int var19;
  485.          if (var12 != null) {
  486.             var17 = var12.getRed();
  487.             var18 = var12.getGreen();
  488.             var19 = var12.getBlue();
  489.          } else {
  490.             var19 = 0;
  491.             var18 = 0;
  492.             var17 = 0;
  493.          }
  494.  
  495.          while(true) {
  496.             --var14;
  497.             if (var14 < 0) {
  498.                this.outClip(var1);
  499.                this.sendColormap(var1, var13, var3.getMapSize());
  500.                int var28 = var10 - var8;
  501.                int var29 = var11 - var9;
  502.                float var30 = (float)(var6 - var4) / (float)var28;
  503.                float var31 = (float)(var7 - var5) / (float)var29;
  504.                if (!var16) {
  505.                   this.sendSubPixels(var1, (byte[])var2, var28, 0, 0, var28, var29, var4, var5, var30, var31);
  506.                   return;
  507.                } else {
  508.                   var14 = 0;
  509.  
  510.                   for(int var32 = 0; var32 < var29; ++var32) {
  511.                      int var25 = -1;
  512.  
  513.                      for(int var26 = 0; var26 < var28; ++var26) {
  514.                         if (var15[var2[var14++] & 255]) {
  515.                            if (var25 >= 0) {
  516.                               this.sendSubPixels(var1, var2, var28, var25, var32, var26, var32 + 1, var4, var5, var30, var31);
  517.                               var25 = -1;
  518.                            }
  519.                         } else if (var25 < 0) {
  520.                            var25 = var26;
  521.                         }
  522.                      }
  523.  
  524.                      if (var25 >= 0) {
  525.                         this.sendSubPixels(var1, var2, var28, var25, var32, var28, var32 + 1, var4, var5, var30, var31);
  526.                      }
  527.                   }
  528.  
  529.                   return;
  530.                }
  531.             }
  532.  
  533.             int var20 = var3.getRGB(var14);
  534.             int var21 = var20 >>> 24;
  535.             if (var21 != 255) {
  536.                if (var12 != null) {
  537.                   int var22 = blend(var21, var20 >>> 16 & 255, var17);
  538.                   int var23 = blend(var21, var20 >>> 8 & 255, var18);
  539.                   int var24 = blend(var21, var20 & 255, var19);
  540.                   var20 = var22 << 16 | var23 << 8 | var24;
  541.                } else if (var21 < 128) {
  542.                   var15[var14] = true;
  543.                   var16 = true;
  544.                }
  545.             }
  546.  
  547.             var13[var14] = var20;
  548.          }
  549.       }
  550.    }
  551.  
  552.    synchronized void sendPixels(PSGraphics var1, int[] var2, ColorModel var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, Color var12) {
  553.       if (var1.pageNumber == this.curPage) {
  554.          int var13 = var10 - var8;
  555.          int var14 = var11 - var9;
  556.          float var15 = (float)(var6 - var4) / (float)var13;
  557.          float var16 = (float)(var7 - var5) / (float)var14;
  558.          int var17;
  559.          int var18;
  560.          int var19;
  561.          if (var12 != null) {
  562.             var17 = var12.getRed();
  563.             var18 = var12.getGreen();
  564.             var19 = var12.getBlue();
  565.          } else {
  566.             var19 = 0;
  567.             var18 = 0;
  568.             var17 = 0;
  569.          }
  570.  
  571.          this.outClip(var1);
  572.          int var20 = 0;
  573.          int var21 = -1;
  574.  
  575.          for(int var22 = 0; var22 < var14; ++var22) {
  576.             int var23 = -1;
  577.  
  578.             for(int var24 = 0; var24 < var13; ++var24) {
  579.                int var25 = var3.getRGB(var2[var20]);
  580.                int var26 = var25 >>> 24;
  581.                if (var26 != 255) {
  582.                   if (var12 != null) {
  583.                      int var27 = blend(var26, var25 >>> 16 & 255, var17);
  584.                      int var28 = blend(var26, var25 >>> 8 & 255, var18);
  585.                      int var29 = blend(var26, var25 & 255, var19);
  586.                      var2[var20] = var27 << 16 | var28 << 8 | var29;
  587.                      if (var23 < 0) {
  588.                         var23 = var24;
  589.                      }
  590.                   } else if (var23 >= 0) {
  591.                      if (var21 >= 0) {
  592.                         this.sendSubPixels(var1, (int[])var2, var13, 0, var21, var13, var22, var4, var5, var15, var16);
  593.                         var21 = -1;
  594.                      }
  595.  
  596.                      this.sendSubPixels(var1, var2, var13, var23, var22, var24, var22 + 1, var4, var5, var15, var16);
  597.                      var23 = -1;
  598.                   }
  599.                } else {
  600.                   var2[var20] = var25;
  601.                   if (var23 < 0) {
  602.                      var23 = var24;
  603.                   }
  604.                }
  605.  
  606.                ++var20;
  607.             }
  608.  
  609.             if (var23 == 0) {
  610.                if (var21 < 0) {
  611.                   var21 = var22;
  612.                }
  613.             } else if (var23 > 0) {
  614.                this.sendSubPixels(var1, var2, var13, var23, var22, var13, var22 + 1, var4, var5, var15, var16);
  615.             }
  616.          }
  617.  
  618.          if (var21 >= 0) {
  619.             this.sendSubPixels(var1, (int[])var2, var13, 0, var21, var13, var14, var4, var5, var15, var16);
  620.          }
  621.  
  622.       }
  623.    }
  624.  
  625.    void sendProlog() {
  626.       if (!this.prologSent) {
  627.          PSPaperSize var1 = PSPaperSize.find(this.paperDim.width, this.paperDim.height, 1);
  628.          if (var1 == null) {
  629.             var1 = PSPaperSize.find(this.paperDim.height, this.paperDim.width, 1);
  630.          }
  631.  
  632.          if (this.job != null) {
  633.             this.field_0.println("%!PS-Adobe-3.0");
  634.          } else {
  635.             this.field_0.println("%!PS-Adobe-3.0 EPSF-3.0");
  636.          }
  637.  
  638.          this.field_0.println("%%Title: " + this.title);
  639.          if (this.job != null) {
  640.             this.field_0.println("%%Pages: (atend)");
  641.             this.field_0.println("%%PageOrder: " + (this.lastFirst ? "Special" : "Ascend"));
  642.          } else {
  643.             this.field_0.println("%%BoundingBox: 0 0 " + this.paperDim.width + " " + this.paperDim.height);
  644.          }
  645.  
  646.          this.field_0.println("%%DocumentFonts: Helvetica Helvetica-Bold");
  647.          this.field_0.println("%%+Helvetica-Oblique Helvetica-BoldOblique");
  648.          this.field_0.println("%%+Times-Roman Times-Bold Times-Italic Times-BoldItalic");
  649.          this.field_0.println("%%+Courier Courier-Bold Courier-Oblique Courier-BoldOblique");
  650.          this.field_0.println("%%EndComments");
  651.          this.field_0.println("%%BeginProlog");
  652.          this.field_0.println("/BD {bind def} bind def");
  653.          this.field_0.println("/D {def} BD");
  654.          this.field_0.println("/ISOF {");
  655.          this.field_0.println("\tdup findfont dup length 1 add dict begin {");
  656.          this.field_0.println("\t\t1 index /FID eq {pop pop} {D} ifelse");
  657.          this.field_0.println("\t} forall /Encoding ISOLatin1Encoding D");
  658.          this.field_0.println("\tcurrentdict end definefont");
  659.          this.field_0.println("} BD");
  660.          this.field_0.println("/F [");
  661.          if (this.fontProps == null) {
  662.             this.field_0.println("\t/Helvetica ISOF");
  663.             this.field_0.println("\t/Helvetica-Bold ISOF");
  664.             this.field_0.println("\t/Helvetica-Oblique ISOF");
  665.             this.field_0.println("\t/Helvetica-BoldOblique ISOF");
  666.             this.field_0.println("\t/Times-Roman ISOF");
  667.             this.field_0.println("\t/Times-Bold ISOF");
  668.             this.field_0.println("\t/Times-Italic ISOF");
  669.             this.field_0.println("\t/Times-BoldItalic ISOF");
  670.             this.field_0.println("\t/Courier ISOF");
  671.             this.field_0.println("\t/Courier-Bold ISOF");
  672.             this.field_0.println("\t/Courier-Oblique ISOF");
  673.             this.field_0.println("\t/Courier-BoldOblique ISOF");
  674.          } else {
  675.             int var2 = Integer.parseInt(this.fontProps.getProperty("font.num", "9"));
  676.  
  677.             for(int var3 = 0; var3 < var2; ++var3) {
  678.                this.field_0.println("    /" + this.fontProps.getProperty("font." + String.valueOf(var3), "Courier ISOF"));
  679.             }
  680.          }
  681.  
  682.          this.field_0.println("] D");
  683.          this.field_0.println("/R {4 2 roll moveto 1 index 0 rlineto");
  684.          this.field_0.println("\t0 exch rlineto neg 0 rlineto closepath} BD");
  685.          this.field_0.println("/Adict 8 dict D");
  686.          this.field_0.println("Adict /mtrx matrix put");
  687.          this.field_0.println("/A { Adict begin");
  688.          this.field_0.println("    /endangle exch D /startangle exch D");
  689.          this.field_0.println("    /yrad exch D /xrad exch D");
  690.          this.field_0.println("\t/y exch D /x exch D");
  691.          this.field_0.println("    /savematrix mtrx currentmatrix D");
  692.          this.field_0.println("    x y translate xrad yrad scale");
  693.          this.field_0.println("    0 0 1 startangle endangle arc");
  694.          this.field_0.println("    savematrix setmatrix");
  695.          this.field_0.println("    end } BD");
  696.          this.field_0.println("/PY {");
  697.          this.field_0.println("    dup 1 ge {3 1 roll moveto} if");
  698.          this.field_0.println("    -1 2 {pop lineto} for");
  699.          this.field_0.println("    {closepath} if");
  700.          this.field_0.println("} BD");
  701.          this.field_0.println("/CL { dup 0 exch -1 1 arct} BD");
  702.          this.field_0.println("/RRdict 8 dict D");
  703.          this.field_0.println("RRdict /mtrx matrix put");
  704.          this.field_0.println("/RR {RRdict begin");
  705.          this.field_0.println("    /yrad exch D /xrad exch D");
  706.          this.field_0.println("    /height exch abs D /width exch D");
  707.          this.field_0.println("    /y exch D /x exch D");
  708.          this.field_0.println("\t/width width xrad div D /height height yrad div D");
  709.          this.field_0.println("\t/savematrix mtrx currentmatrix D");
  710.          this.field_0.println(" \tx y translate xrad yrad scale");
  711.          this.field_0.println("\t1 0 moveto width CL width 0 translate -90 rotate");
  712.          this.field_0.println("    height CL height 0 translate -90 rotate");
  713.          this.field_0.println("\twidth CL width 0 translate -90 rotate height CL closepath");
  714.          this.field_0.println("\tsavematrix setmatrix");
  715.          this.field_0.println("\tend } BD");
  716.          this.field_0.println("/" + SetColorName + " {3 {255 div 3 1 roll} repeat setrgbcolor} BD");
  717.          this.field_0.println("/" + SetFontName + " {");
  718.          this.field_0.println("\tF exch get exch scalefont setfont");
  719.          if (this.fontProps == null) {
  720.             this.field_0.println("\t(" + testString + ") stringwidth pop div");
  721.          } else {
  722.             this.field_0.println(" testString stringwidth pop div");
  723.          }
  724.  
  725.          this.field_0.println("\tcurrentfont exch scalefont setfont} BD");
  726.          this.field_0.println("/" + RectClipName + " {R clip newpath} BD");
  727.          this.field_0.println("/" + InitClipName + " {initclip} BD");
  728.          this.field_0.println("/" + RectFillName + " {R fill} BD");
  729.          this.field_0.println("/" + RectStrokeName + " {R stroke} BD");
  730.          this.field_0.println("/" + RRectFillName + " {RR fill} BD");
  731.          this.field_0.println("/" + RRectStrokeName + " {RR stroke} BD");
  732.          this.field_0.println("/" + ArcStrokeName + " {A stroke} BD");
  733.          this.field_0.println("/" + ArcFillName + " {6 -2 roll 2 copy moveto 6 2 roll A fill} BD");
  734.          this.field_0.println("/" + PolygonStrokeName + " {PY stroke} BD");
  735.          this.field_0.println("/" + PolygonFillName + " {PY eofill} BD");
  736.          this.field_0.println("/NZ {dup 1 lt {pop 1} if} BD");
  737.          this.field_0.println("/" + DrawStringName + " {");
  738.          this.field_0.println("\tmoveto 1 index stringwidth pop NZ sub");
  739.          this.field_0.println("\t1 index length 1 sub NZ div 0");
  740.          this.field_0.println("\t3 2 roll ashow} BD");
  741.          this.field_0.println("/" + DrawLineName + " {moveto lineto stroke} BD");
  742.          this.field_0.println("/" + ScaleName + " {scale} BD");
  743.          this.field_0.println("/" + StartPageName + " {/P save D} BD");
  744.          this.field_0.println("/" + EndPageName + " {showpage P restore} BD");
  745.          this.field_0.println("/" + GsaveName + " {gsave} BD");
  746.          this.field_0.println("/" + GrestoreName + " {grestore} BD");
  747.          this.field_0.println("/" + SetColormapName + " {");
  748.          this.field_0.println("\t/cmapr 256 array D");
  749.          this.field_0.println("\t/cmapg 256 array D");
  750.          this.field_0.println("\t/cmapb 256 array D");
  751.          this.field_0.println("\t/cmapgray null D");
  752.          this.field_0.println("\t3 string exch 0 exch 1 exch 1 sub {");
  753.          this.field_0.println("\t\tcurrentfile 2 index readhexstring pop");
  754.          this.field_0.println("\t\tcmapr 2 index 2 index 0 get put");
  755.          this.field_0.println("\t\tcmapg 2 index 2 index 1 get put");
  756.          this.field_0.println("\t\tcmapb 2 index 2 index 2 get put");
  757.          this.field_0.println("\tpop pop } for pop");
  758.          this.field_0.println("} BD");
  759.          this.field_0.println("/" + DrawIndexImageName + " {");
  760.          this.field_0.println("\tGS");
  761.          this.field_0.println("\t/imgsave save D");
  762.          this.field_0.println("\ttranslate scale");
  763.          this.field_0.println("\t/imgh exch D");
  764.          this.field_0.println("\t/imgw exch D");
  765.          this.field_0.println("\t/imgy exch neg D");
  766.          this.field_0.println("\t/imgx exch neg D");
  767.          this.field_0.println("\t/imgstr imgw string D");
  768.          this.field_0.println("\t/colorimage where {");
  769.          this.field_0.println("\t\tpop");
  770.          this.field_0.println("\t\t/cimgstr imgw 3 mul string D");
  771.          this.field_0.println("\t\timgw imgh 8 [imgw 0 0 imgh neg imgx imgy] {");
  772.          this.field_0.println("\t\t\tcurrentfile imgstr readhexstring pop");
  773.          this.field_0.println("\t\t\t0 1 imgw 1 sub {");
  774.          this.field_0.println("\t\t\t\t2 copy get");
  775.          this.field_0.println("\t\t\t\tcmapr 1 index get");
  776.          this.field_0.println("\t\t\t\tcimgstr exch 3 index");
  777.          this.field_0.println("\t\t\t\t3 mul exch put");
  778.          this.field_0.println("\t\t\t\tcmapg 1 index get");
  779.          this.field_0.println("\t\t\t\tcimgstr exch 3 index");
  780.          this.field_0.println("\t\t\t\t3 mul 1 add exch put");
  781.          this.field_0.println("\t\t\t\tcmapb 1 index get");
  782.          this.field_0.println("\t\t\t\tcimgstr exch 3 index");
  783.          this.field_0.println("\t\t\t\t3 mul 2 add exch put");
  784.          this.field_0.println("\t\t\tpop pop } for pop cimgstr");
  785.          this.field_0.println("\t\t} false 3 colorimage");
  786.          this.field_0.println("\t} {");
  787.          this.field_0.println("\t\tcmapgray null eq {");
  788.          this.field_0.println("\t\t\t/cmapgray cmapr length array D");
  789.          this.field_0.println("\t\t\t0 1 cmapr length 1 sub {");
  790.          this.field_0.println("\t\t\t\tcmapgray exch");
  791.          this.field_0.println("\t\t\t\tcmapr 1 index get .299 mul");
  792.          this.field_0.println("\t\t\t\tcmapg 2 index get .587 mul");
  793.          this.field_0.println("\t\t\t\tcmapb 3 index get .114 mul");
  794.          this.field_0.println("\t\t\t\tadd add cvi put");
  795.          this.field_0.println("\t\t\t} for");
  796.          this.field_0.println("\t\t} if");
  797.          this.field_0.println("\t\timgw imgh 8 [imgw 0 0 imgh neg 0 0] {");
  798.          this.field_0.println("\t\t\tcurrentfile imgstr readhexstring pop");
  799.          this.field_0.println("\t\t\t0 1 imgw 1 sub {");
  800.          this.field_0.println("\t\t\t\timgstr exch 2 copy get");
  801.          this.field_0.println("\t\t\t\tcmapgray exch get put");
  802.          this.field_0.println("\t\t\t} for");
  803.          this.field_0.println("\t\t} image");
  804.          this.field_0.println("\t} ifelse");
  805.          this.field_0.println("\timgsave restore");
  806.          this.field_0.println("\tGR");
  807.          this.field_0.println("} BD");
  808.          this.field_0.println("/" + DrawImageName + " {");
  809.          this.field_0.println("\tGS");
  810.          this.field_0.println("\t/imgsave save D");
  811.          this.field_0.println("\ttranslate scale");
  812.          this.field_0.println("\t/imgh exch D");
  813.          this.field_0.println("\t/imgw exch D");
  814.          this.field_0.println("\t/imgy exch neg D");
  815.          this.field_0.println("\t/imgx exch neg D");
  816.          this.field_0.println("\t/imgstr imgw 3 mul string D");
  817.          this.field_0.println("\timgw imgh 8 [imgw 0 0 imgh neg imgx imgy] {");
  818.          this.field_0.println("\t\tcurrentfile imgstr readhexstring pop");
  819.          this.field_0.println("\t} bind false 3 colorimage");
  820.          this.field_0.println("    imgsave restore");
  821.          this.field_0.println("    GR");
  822.          this.field_0.println("} BD");
  823.          this.field_0.println("%%EndProlog");
  824.          this.field_0.println("%%BeginSetup");
  825.          if (var1 != null) {
  826.             this.field_0.println(var1.toPostScriptCode(1, false));
  827.          }
  828.  
  829.          if (this.job != null && this.paperDim.width > this.paperDim.height) {
  830.             this.field_0.println("90 rotate 0 " + -this.paperDim.height + " translate");
  831.          }
  832.  
  833.          this.field_0.println("%%EndSetup");
  834.          this.field_0.flush();
  835.          this.prologSent = true;
  836.       }
  837.    }
  838. }
  839.