(**************************************************************************

     $RCSfile: Printer.mod $
  Description: Interface to printer.device

   Created by: fjc (Frank Copeland)
    $Revision: 1.2 $
      $Author: fjc $
        $Date: 1994/05/12 19:11:02 $

  Copyright © 1994, Frank Copeland.
  This file is part of the Oberon-A Library.
  See Oberon-A.doc for conditions of use and distribution.

  Log entries are at the end of the file.

***************************************************************************)

MODULE Printer;

(* $P- allow non-portable code *)

IMPORT
  T := Types, E := Exec, TI := Timer, P := Parallel, D := Dos,
  G := Graphics, I := Intuition;

CONST

  prdRawWrite *   =   E.cmdNonStd+0;
  prdPrtCommand * =   E.cmdNonStd+1;
  prdDumpRPort *  =   E.cmdNonStd+2;
  prdQuery *      =   E.cmdNonStd+3;

  aRIS *    = 0;
  aRIN *    = 1;
  aIND *    = 2;
  aNEL *    = 3;
  aRI *     = 4;

  aSGR0 *   = 5;
  aSGR3 *   = 6;
  aSGR23 *  = 7;
  aSGR4 *   = 8;
  aSGR24 *  = 9;
  aSGR1 *   = 10;
  aSGR22 *  = 11;
  aSFC *    = 12;
  aSBC *    = 13;

  aSHORP0 * = 14;
  aSHORP2 * = 15;
  aSHORP1 * = 16;
  aSHORP4 * = 17;
  aSHORP3 * = 18;
  aSHORP6 * = 19;
  aSHORP5 * = 20;

  aDEN6 *   = 21;
  aDEN5 *   = 22;
  aDEN4 *   = 23;
  aDEN3 *   = 24;
  aDEN2 *   = 25;
  aDEN1 *   = 26;

  aSUS2 *   = 27;
  aSUS1 *   = 28;
  aSUS4 *   = 29;
  aSUS3 *   = 30;
  aSUS0 *   = 31;
  aPLU *    = 32;
  aPLD *    = 33;

  aFNT0 *   = 34;
  aFNT1 *   = 35;
  aFNT2 *   = 36;
  aFNT3 *   = 37;
  aFNT4 *   = 38;
  aFNT5 *   = 39;
  aFNT6 *   = 40;
  aFNT7 *   = 41;
  aFNT8 *   = 42;
  aFNT9 *   = 43;
  aFNT10 *  = 44;

  aPROP2 *  = 45;
  aPROP1 *  = 46;
  aPROP0 *  = 47;
  aTSS *    = 48;
  aJFY5 *   = 49;
  aJFY7 *   = 50;
  aJFY6 *   = 51;
  aJFY0 *   = 52;
  aJFY3 *   = 53;
  aJFY1 *   = 54;

  aVERP0 *  = 55;
  aVERP1 *  = 56;
  aSLPP *   = 57;
  aPERF *   = 58;
  aPERF0 *  = 59;

  aLMS *    = 60;
  aRMS *    = 61;
  aTMS *    = 62;
  aBMS *    = 63;
  aSTBM *   = 64;
  aSLRM *   = 65;
  aCAM *    = 66;

  aHTS *    = 67;
  aVTS *    = 68;
  aTBC0 *   = 69;
  aTBC3 *   = 70;
  aTBC1 *   = 71;
  aTBC4 *   = 72;
  aTBCALL * = 73;
  aTBSALL * = 74;
  aEXTEND * = 75;

  aRAW *    = 76;

TYPE

  IOPrtCmdReqPtr * = CPOINTER TO IOPrtCmdReq;
  IOPrtCmdReq * = RECORD (E.Message)

    ioDevice *     : E.DevicePtr;
    ioUnit *       : E.UnitPtr;
    ioCommand *    : T.UWORD;
    ioFlags *      : T.BSET;
    ioError *      : SHORTINT;
    ioPrtCommand * : T.UWORD;
    ioParm0 *      : T.UBYTE;
    ioParm1 *      : T.UBYTE;
    ioParm2 *      : T.UBYTE;
    ioParm3 *      : T.UBYTE;
  END;

  IODRPReqPtr * = CPOINTER TO IODRPReq;
  IODRPReq * = RECORD (E.Message)

    ioDevice *    : E.DevicePtr;
    ioUnit *      : E.UnitPtr;
    ioCommand *   : T.UWORD;
    ioFlags *     : T.BSET;
    ioError *     : SHORTINT;
    ioRastPort *  : G.RastPortPtr;
    ioColorMap *  : G.ColorMapPtr;
    ioModes *     : SET;
    ioSrcX *      : T.UWORD;
    ioSrcY *      : T.UWORD;
    ioSrcWidth *  : T.UWORD;
    ioSrcHeight * : T.UWORD;
    ioDestCols *  : LONGINT;
    ioDestRows *  : LONGINT;
    ioSpecial *   : T.WSET;
  END;

CONST

  SpecialMilCols *         = 0;
  SpecialMilRows *         = 1;
  SpecialFullCols *        = 2;
  SpecialFullRows *        = 3;
  SpecialFracCols *        = 4;
  SpecialFracRows *        = 5;
  SpecialCenter *          = 6;
  SpecialAspect *          = 7;
  SpecialDensity1 *        = {8};
  SpecialDensity2 *        = {9};
  SpecialDensity3 *        = {8,9};
  SpecialDensity4 *        = {10};
  SpecialDensity5 *        = {8,10};
  SpecialDensity6 *        = {9,10};
  SpecialDensity7 *        = {8,9,10};
  SpecialNoFormFeed *      = 11;
  SpecialTrustMe *         = 12;
  SpecialNoPrint *         = 13;

  pdErrNoErr *             = 0;
  pdErrCancel *            = 1;
  pdErrNotGraphics *       = 2;
  pdErrInvertHam *         = 3;
  pdErrBadDimension *      = 4;
  pdErrDimensionOvflow *   = 5;
  pdErrInternalMemory *    = 6;
  pdErrBufferMemory *      = 7;
  pdErrTookControl *       = 8;

  SpecialDensityMask *     = {8..10};
  SpecialDimensionsMask *  =
    { SpecialMilCols .. SpecialFracRows, SpecialAspect };

CONST

  pcmYellow *       = 0;
  pcmMagenta *      = 1;
  pcmCyan *         = 2;
  pcmBlack *        = 3;
  pcmBlue *         = pcmYellow;
  pcmGreen *        = pcmMagenta;
  pcmRed *          = pcmCyan;
  pcmWhite *        = pcmBlack;

TYPE

  colorEntryPtr * = CPOINTER TO colorEntry;
  colorEntry * = RECORD

    colorByte *  : ARRAY 4 OF T.UBYTE;

  END;

  PrtInfoPtr * = CPOINTER TO PrtInfo;
  PrtInfo * = RECORD
    pirender        : PROCEDURE;
    pirp            : G.RastPortPtr;
    pitemprp        : G.RastPortPtr;
    piRowBuf        : T.APTR;
    piHamBuf        : T.APTR;
    piColorMap      : colorEntryPtr;
    piColorInt *    : colorEntryPtr;
    piHamInt        : colorEntryPtr;
    piDest1Int      : colorEntryPtr;
    piDest2Int      : colorEntryPtr;
    piScaleX *      : T.APTR;
    piScaleXAlt     : T.APTR;
    pidmatrix *     : T.APTR;
    piTopBuf        : T.APTR;
    piBotBuf        : T.APTR;

    piRowBufSize    : T.UWORD;
    piHamBufSize    : T.UWORD;
    piColorMapSize  : T.UWORD;
    piColorIntSize  : T.UWORD;
    piHamIntSize    : T.UWORD;
    piDest1IntSize  : T.UWORD;
    piDest2IntSize  : T.UWORD;
    piScaleXSize    : T.UWORD;
    piScaleXAltSize : T.UWORD;

    piPrefsFlags    : T.WSET;
    piSpecial       : T.ULONG;
    pixstart        : T.UWORD;
    piystart        : T.UWORD;
    piwidth *       : T.UWORD;
    piheight        : T.UWORD;
    pipc            : T.ULONG;
    pipr            : T.ULONG;
    piymult         : T.UWORD;
    piymod          : T.UWORD;
    piety           : INTEGER;
    pixpos *        : T.UWORD;
    pithreshold *   : T.UWORD;
    pitempwidth     : T.UWORD;
    piflags         : T.WSET;
  END;

TYPE

  DeviceDataPtr * = CPOINTER TO DeviceData;
  DeviceData * = RECORD (E.Library)

    ddSegment *     : T.APTR;
    ddExecBase *    : T.APTR;
    ddCmdVectors *  : T.APTR;
    ddCmdBytes *    : T.APTR;
    ddNumCommands * : T.UWORD;
  END;

CONST

  pOldStkSize *    = 0800H;
  pStkSize *       = 1000H;
  pBufSize *       = 256;
  pSafeSize *      = 128;

TYPE

  PrinterExtendedDataPtr * = CPOINTER TO PrinterExtendedData;
  PrinterExtendedData * = RECORD
    pedPrinterName *  : T.STRPTR;
    pedInit *         : PROCEDURE;
    pedExpunge *      : PROCEDURE;
    pedOpen *         : PROCEDURE;
    pedClose *        : PROCEDURE;
    pedPrinterClass * : T.UBYTE;
    pedColorClass *   : T.UBYTE;
    pedMaxColumns *   : T.UBYTE;
    pedNumCharSets *  : T.UBYTE;
    pedNumRows *      : T.UWORD;
    pedMaxXDots *     : T.ULONG;
    pedMaxYDots *     : T.ULONG;
    pedXDotsInch *    : T.UWORD;
    pedYDotsInch *    : T.UWORD;
    pedCommands *     : T.APTR;
    pedDoSpecial *    : PROCEDURE;
    pedRender *       : PROCEDURE;
    pedTimeoutSecs *  : LONGINT;

    ped8BitChars *    : T.APTR;
    pedPrintMode *    : LONGINT;

    pedConvFunc *     : PROCEDURE;
  END;

  PrinterSegmentPtr * = CPOINTER TO PrinterSegment;
  PrinterSegment * = RECORD
    psNextSegment * : T.ULONG;
    psrunAlert *    : T.ULONG;
    psVersion *     : T.UWORD;
    psRevision *    : T.UWORD;
    psPED *         : PrinterExtendedData;
  END;

  PrinterDataPtr * = CPOINTER TO PrinterData;
  PrinterData * = RECORD (DeviceData)

    pdUnit *         : E.MsgPort;
    pdPrinterSegment * : D.BPTR;
    pdPrinterType *  : T.UWORD;

    pdSegmentData *  : PrinterSegmentPtr;
    pdPrintBuf *     : T.APTR;
    pdPWrite *       : PROCEDURE;
    pdPBothReady *   : PROCEDURE;

            pdp0 *   : P.IOExtPar;
            pdp1 *   : P.IOExtPar;
    pdTIOR *         : TI.timerequest;
    pdIORPort *      : E.MsgPort;
    pdTC *           : E.Task;
    pdOldStk *       : ARRAY pOldStkSize OF T.UBYTE;

    pdFlags *        : T.BSET;
    pdpad *          : T.UBYTE;
    pdPreferences *  : I.Preferences;
    pdPWaitEnabled * : T.UBYTE;

    pdFlags1 *       : T.BSET;
    pdStk *          : ARRAY pStkSize OF T.UBYTE;

  END;

CONST

  ppcGfx *         = 0;
  ppcColor *       = 1;

  ppcBWAlpha *     = 00H;
  ppcBWGfx *       = 01H;
  ppcColorAlpha *  = 02H;
  ppcColorGfx *    = 03H;

  pccBW *          = 01H;
  pccYMC *         = 02H;
  pccYMCBW *       = 03H;
  pccYMCB *        = 04H;
  pcc4Color *      = 04H;
  pccAdditive *    = 08H;
  pccWB *          = 09H;
  pccBGR *         = 0AH;
  pccBgrWB *       = 0BH;
  pccBGRW *        = 0CH;
  pccMultiPass *  = 10H;

CONST

  Name * = "printer.device";

END Printer.

(**************************************************************************

  $Log: Printer.mod $
  Revision 1.2  1994/05/12  19:11:02  fjc
  - Prepared for release

  Revision 1.1  1994/01/15  21:20:10  fjc
  - Start of revision control

***************************************************************************)

 

(* Comments stripped by StripComments 1.0 *)
