package uk.co.mmscomputing.device.printmonitor;
import java.io.*;
import uk.co.mmscomputing.io.*;
import uk.co.mmscomputing.imageio.tiff.*;
public class PMT6MMROutputStream extends PMOutputStream{
RLEBit1OutputStream rlos; // byte = 8 black and white pixel
ModModREADOutputStream mmros; // T.6 MMR
TIFFClassFOutputStream tiffos; // TIFF Class F
public PMT6MMROutputStream(OutputStream out){
super(out);rlos=null;mmros=null;tiffos=null;
}
public PMT6MMROutputStream(String filepath)throws IOException{
this(new FileOutputStream(filepath/*+".tif"*/));
}
protected void startDoc()throws IOException{
tiffos = new TIFFClassFMMROutputStream(out); // write tiff header
}
protected void startPage()throws IOException{
tiffos.setXYResolution(graphicsxres,graphicsyres);
tiffos.writePageHeader(pagewidth); // page width sent before StartPage
mmros = new ModModREADOutputStream(tiffos,pagewidth);
rlos = new RLEBit1OutputStream(mmros); // print driver: black/white 8 pixel per byte
}
protected void sendBlockData()throws IOException{
super.sendBlockData();
rlos.setStartCodeWord(0x0001); // white run first
mmros.writeEOL(); // T.6 does not really write EOL; only new line initialization
tiffos.write(0x0000);tiffos.write(0x0080); // signal tiffos new line
}
protected void endBlockData()throws IOException{
super.endBlockData();
rlos.flush(); // write out last run
}
protected void endPage()throws IOException{
mmros.writeEOFB();
tiffos.writePageEnd(); // write page to out
}
protected void endJob()throws IOException{
tiffos.writeDocumentEnd();
}
protected void writeDataByte(int code)throws IOException{
rlos.write(~code); // Here: black is zero; Want: white is zero
}
}