com.ibm.as400.access.SCS5553Writer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: SCS5553Writer.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2000 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.access;
import java.io.OutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
/**
* The SCS5553Writer class writes an SCS 5553 data stream to an output stream,
* translating characters into bytes of the specified CCSID.
* SCS5553Writer extends the SCS5224Writer and adds support for presentation of
* control characters, character rotation, grid lines, and font scaling.
*
* The 5553 is a DBCS data stream.
*
* @see SCS5224Writer
**/
/*
* This class now subclasses SCS5224Writer instead of SCS5219Writer
* Added Set Presentation of Control Character (SPPC) which required
* that initPage() be overridden.
*/
public class SCS5553Writer extends SCS5224Writer
{
private static final String copyright = "Copyright (C) 1997-2000 International Business Machines Corporation and others.";
/** Constant for normal character rotation. **/
public static final int CHARACTER_NORMAL = 0;
/** Constant for 270-degree character rotation. **/
public static final int CHARACTER_ROTATED = 1;
/** Constant for double horizontal font scaling. **/
public static final int SCALE_DOUBLE_HORIZONTAL = 0x20;
/** Constant for regular font scaling. **/
public static final int SCALE_REGULAR = 0x10;
/** Constant for all control characters take no printing positions **/
public static final int SETCCP_NO_PRINT = 0; //@A1A
/** Constant for SO/SI are printed as A/N/K blank code (default) **/
public static final int SETCCP_BLANK_CODE = 1; //@A1A
/** Constant for SO takes no position, SI takes 2 A/N/K blanks **/
public static final int SETCCP_SI_BLANK = 2; //@A1A
private static final byte [] SCD = {0x2B, (byte)0xD2, 0x04, 0x29,
0x00, 0x00};
private static final byte [] DGL = {0x2B, (byte)0xFD, 0x00,
0x00, 0x00, 0x00};
private static final byte [] SFSS = {0x2B, (byte)0xFD, 0x04,
0x02, 0x00, 0x00};
private static final byte [] STO = {0x2B, (byte)0xD3, 0x04,
(byte)0xF6, 0x00, 0x00};
private static final byte [] SPPC = {0x2B, (byte)0xFD, 0x04,
0x03, 0x00, 0x00}; //@A1A
private int setCCP = SETCCP_BLANK_CODE; //@A1A
/**
* Constructs a SCS5553Writer. The default encoding will be used.
*
* @param out An OutputStream.
*
* @deprecated Replaced by SCS5553Writer(OutputStream, int, AS400).
Any SCS5553Writer object that is created without
specifying an AS400 system object on its constructor may
not behave as expected in certain environments.
**/
public SCS5553Writer(OutputStream out)
{
super(out);
}
/**
* Constructs a SCS5553Writer.
*
* @param out An OutputStream.
* @param ccsid The name of the target CCSID to be used.
*
* @exception UnsupportedEncodingException If ccsid is invalid.
* @deprecated Replaced by SCS5553Writer(OutputStream, int, AS400).
Any SCS5553Writer object that is created without
specifying an AS400 system object on its constructor may
not behave as expected in certain environments.
**/
public SCS5553Writer(OutputStream out,
int ccsid)
throws UnsupportedEncodingException
{
super(out, ccsid);
}
// @B1A
/**
* Constructs a SCS5553Writer.
*
* @param out An OutputStream.
* @param ccsid The name of the target CCSID to be used.
* @param system The system.
*
* @exception UnsupportedEncodingException If ccsid is invalid.
**/
public SCS5553Writer(OutputStream out,
int ccsid,
AS400 system)
throws UnsupportedEncodingException
{
super(out, ccsid, system);
}
/**
* Constructs a SCS5553Writer.
*
* @param out An OutputStream.
* @param encoding The name of the target encoding to be used.
*
* @exception UnsupportedEncodingException If encoding is invalid.
* @deprecated Replaced by SCS5553Writer(OutputStream, int, AS400).
Any SCS5553Writer object that is created without
specifying an AS400 system object on its constructor may
not behave as expected in certain environments.
**/
public SCS5553Writer(OutputStream out,
String encoding)
throws UnsupportedEncodingException
{
super(out, encoding);
}
/* Sends out controls to initialize the start of a page.
*
*/
void initPage() //@A1A
throws IOException
{
super.initPage();
// Set the current or default control character presentation.
setControlCharPresentation(setCCP); //@A1A
}
/** Sets characters per inch. All following text will be
* in the set pitch.
*
* @param cpi The characters per inch. Valid values are 10, 12, 13.3, 15, 18 and 20 but
* we won't implement 13.3 for now
*
* @exception IOException If an error occurs while communicating
* with the system.
**/
public void setCPI(int cpi)
throws IOException
{
switch (cpi) {
case 10:
CPI = 10;
break;
case 12:
CPI = 12;
break;
case 15:
CPI = 15;
break;
case 18:
CPI = 18;
break;
case 20:
CPI = 20;
break;
default:
String arg = "CPI (" + String.valueOf(cpi) + ")";
throw new ExtendedIllegalArgumentException(arg, 2);
} /* endswitch */
fontOrCPI = CPI_;
// if (pageStarted_ == true) { @A1D
if (pageStarted_ == false) //@A1A
initPage(); //@A1A
// now set the callers CPI
byte [] cmd = SCD;
cmd[cmd.length-1] = CPI;
addToBuffer(cmd);
}
/** Prints a horizontal grid line at the current line.
*
* @param start The absolute position in inches, from the left paper edge,
* to start the grid line.
* @param stop The absolute position in inches, from the left paper edge,
* to stop the grid line.
*
* @exception IOException If an error occurs while communicating
* with the system.
**/
public void printHorizontalGridLine(double start, double stop)
throws IOException
{
byte [] positions = new byte [4];
byte [] cmd = DGL;
cmd[2] = 0x08; /* Set length of command */
cmd[cmd.length - 1] = (byte)0x80; /* Set horizontal option */
addToBuffer(cmd); /* Output command */
/* Calculate start and stop in 1440ths of an inch */
int iStart = (int)(start * 1440.0);
int iStop = (int)(stop * 1440.0);
/* Put start and stop in to an array */
positions[0] = (byte)(iStart >> 8);
positions[1] = (byte)iStart;
positions[2] = (byte)(iStop >> 8);
positions[3] = (byte)iStop;
addToBuffer(positions); /* Output start and stop */
}
/** Sets character rotation. Characters can be rotated 270 degrees
* for vertical printing.
*
* @param rotation The value of character rotation. Valid values are
* CHARACTER_NORMAL and CHARACTER_ROTATED.
*
* @exception IOException If an error occurs while communicating
* with the system.
**/
public void setCharacterRotation(int rotation)
throws IOException
{
byte [] cmd = STO;
switch (rotation) {
case CHARACTER_NORMAL:
cmd[cmd.length -2] = 0x00;
cmd[cmd.length -1] = 0x00;
addToBuffer(cmd); /* Output normal rotation */
break;
case CHARACTER_ROTATED:
cmd[cmd.length -2] = (byte)0x87;
cmd[cmd.length -1] = 0x00;
addToBuffer(cmd); /* Output 270 degree rotation */
break;
default:
String arg = "Rotation (" + String.valueOf(rotation) + ")";
throw new ExtendedIllegalArgumentException(arg, 2);
}
}
/** Defines the action taken by the SI/SO characters. These characters
* are either not printed at all or printed as spaces.
*
* @param set The parameter that defines the presentation option. Valid
* values are SETCCP_NO_PRINT, SETCCP_BLANK_CODE, and SETCCP_SI_BLANK.
*
* @exception IOException If an error occurs while communicating
* with the system.
**/
public void setControlCharPresentation(int set)
throws IOException
{
byte [] cmd = SPPC;
switch(set) {
case SETCCP_NO_PRINT:
case SETCCP_BLANK_CODE:
case SETCCP_SI_BLANK:
setCCP = set;
cmd[4] = (byte)(set >> 8);
cmd[5] = (byte)set;
addToBuffer(cmd);
break;
default:
String arg = "set (" + String.valueOf(set) + ")";
throw new ExtendedIllegalArgumentException(arg, 2);
}
}
/** Sets font scaling. Allows doubling the horizontal size of the
* font. Applies to both A/N/K and IGC characters. Actual characters
* per inch is affected.
*
* @param scale The value of font scaling. Valid values are SCALE_REGULAR and
* SCALE_DOUBLE_HORIZONTAL.
*
* @exception IOException If an error occurs while communicating
* with the system.
**/
public void setFontScaling(int scale)
throws IOException
{
byte [] cmd = SFSS;
switch (scale) {
case SCALE_REGULAR:
cmd[cmd.length -2] = (byte)SCALE_REGULAR;
addToBuffer(cmd); /* Output regular font size */
break;
case SCALE_DOUBLE_HORIZONTAL:
cmd[cmd.length -2] = (byte)SCALE_DOUBLE_HORIZONTAL;
addToBuffer(cmd); /* Output double font size */
break;
default:
String arg = "Scale (" + String.valueOf(scale) + ")";
throw new ExtendedIllegalArgumentException(arg, 2);
}
}
/** Starts printing vertical grid lines at the specified positions.
*
* @param positions An array of absolute positions in inches, from the
* left paper edge, to start a vertical grid line.
*
* @exception IOException If an error occurs while communicating
* with the system.
**/
public void startVerticalGridLines(double [] positions)
throws IOException
{
byte [] cmd = DGL;
int len = positions.length;
byte [] iPositions = new byte [2 * len];
cmd[2] = (byte)(4 + (2 * len)); /* Set command length */
cmd[5] = 0x40; /* Set vertical grid line option */
addToBuffer(cmd); /* Add command part to buffer */
int iPos; /* Position in 1440ths of an inch */
int j = 0; /* iPositions index */
/* Loop through the positions, convert to 1440th of an inch */
/* and store in a byte array. */
for (int i = 0; i < len; i++) {
iPos = (int)(positions[i] * 1440.0);
iPositions[j] = (byte)(iPos >> 8);
j++;
iPositions[j] = (byte)iPos;
j++;
}
addToBuffer(iPositions); /* Add positions to buffer */
}
/** Stops printing vertical grid lines.
*
* @exception IOException If an error occurs while communicating
* with the system.
**/
public void stopVerticalGridLines()
throws IOException
{
byte [] cmd = DGL;
cmd[2] = 0x04; /* Set command length */
cmd[5] = 0x00; /* Stop and clear vertical grids */
addToBuffer(cmd); /* Add command to buffer */
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy