summaryrefslogtreecommitdiff
path: root/packages/amunits/src/coreunits/amigaprinter.pas
diff options
context:
space:
mode:
Diffstat (limited to 'packages/amunits/src/coreunits/amigaprinter.pas')
-rw-r--r--packages/amunits/src/coreunits/amigaprinter.pas418
1 files changed, 418 insertions, 0 deletions
diff --git a/packages/amunits/src/coreunits/amigaprinter.pas b/packages/amunits/src/coreunits/amigaprinter.pas
new file mode 100644
index 0000000000..45ac34f5b2
--- /dev/null
+++ b/packages/amunits/src/coreunits/amigaprinter.pas
@@ -0,0 +1,418 @@
+{
+ This file is part of the Free Pascal run time library.
+
+ A file in Amiga system run time library.
+ Copyright (c) 1998-2003 by Nils Sjoholm
+ member of the Amiga RTL development team.
+
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+unit amigaprinter;
+
+INTERFACE
+
+uses exec, graphics,utility,intuition,prefs;
+
+
+Const
+{ V34-V40 commands }
+ PRD_RAWWRITE = CMD_NONSTD + 0;
+ PRD_PRTCOMMAND = CMD_NONSTD + 1;
+ PRD_DUMPRPORT = CMD_NONSTD + 2;
+ PRD_QUERY = CMD_NONSTD + 3;
+
+{ V44 commands }
+ PRD_RESETPREFS = (CMD_NONSTD+4); { PRIVATE: do not use! }
+ PRD_LOADPREFS = (CMD_NONSTD+5); { PRIVATE: do not use! }
+ PRD_USEPREFS = (CMD_NONSTD+6); { PRIVATE: do not use! }
+ PRD_SAVEPREFS = (CMD_NONSTD+7); { PRIVATE: do not use! }
+ PRD_READPREFS = (CMD_NONSTD+8);
+ PRD_WRITEPREFS = (CMD_NONSTD+9);
+ PRD_EDITPREFS = (CMD_NONSTD+10);
+ PRD_SETERRHOOK = (CMD_NONSTD+11);
+ PRD_DUMPRPORTTAGS = (CMD_NONSTD+12);
+
+
+{ printer command definitions }
+
+ aRIS = 0; { ESCc reset ISO }
+ aRIN = 1; { ESC#1 initialize +++ }
+ aIND = 2; { ESCD lf ISO }
+ aNEL = 3; { ESCE return,lf ISO }
+ aRI = 4; { ESCM reverse lf ISO }
+
+ aSGR0 = 5; { ESC[0m normal char set ISO }
+ aSGR3 = 6; { ESC[3m italics on ISO }
+ aSGR23 = 7; { ESC[23m italics off ISO }
+ aSGR4 = 8; { ESC[4m underline on ISO }
+ aSGR24 = 9; { ESC[24m underline off ISO }
+ aSGR1 = 10; { ESC[1m boldface on ISO }
+ aSGR22 = 11; { ESC[22m boldface off ISO }
+ aSFC = 12; { SGR30-39 set foreground color ISO }
+ aSBC = 13; { SGR40-49 set background color ISO }
+
+ aSHORP0 = 14; { ESC[0w normal pitch DEC }
+ aSHORP2 = 15; { ESC[2w elite on DEC }
+ aSHORP1 = 16; { ESC[1w elite off DEC }
+ aSHORP4 = 17; { ESC[4w condensed fine on DEC }
+ aSHORP3 = 18; { ESC[3w condensed off DEC }
+ aSHORP6 = 19; { ESC[6w enlarged on DEC }
+ aSHORP5 = 20; { ESC[5w enlarged off DEC }
+
+ aDEN6 = 21; { ESC[6"z shadow print on DEC (sort of) }
+ aDEN5 = 22; { ESC[5"z shadow print off DEC }
+ aDEN4 = 23; { ESC[4"z doublestrike on DEC }
+ aDEN3 = 24; { ESC[3"z doublestrike off DEC }
+ aDEN2 = 25; { ESC[2"z NLQ on DEC }
+ aDEN1 = 26; { ESC[1"z NLQ off DEC }
+
+ aSUS2 = 27; { ESC[2v superscript on +++ }
+ aSUS1 = 28; { ESC[1v superscript off +++ }
+ aSUS4 = 29; { ESC[4v subscript on +++ }
+ aSUS3 = 30; { ESC[3v subscript off +++ }
+ aSUS0 = 31; { ESC[0v normalize the line +++ }
+ aPLU = 32; { ESCL partial line up ISO }
+ aPLD = 33; { ESCK partial line down ISO }
+
+ aFNT0 = 34; { ESC(B US char set or Typeface 0 (default) }
+ aFNT1 = 35; { ESC(R French char set or Typeface 1 }
+ aFNT2 = 36; { ESC(K German char set or Typeface 2 }
+ aFNT3 = 37; { ESC(A UK char set or Typeface 3 }
+ aFNT4 = 38; { ESC(E Danish I char set or Typeface 4 }
+ aFNT5 = 39; { ESC(H Sweden char set or Typeface 5 }
+ aFNT6 = 40; { ESC(Y Italian char set or Typeface 6 }
+ aFNT7 = 41; { ESC(Z Spanish char set or Typeface 7 }
+ aFNT8 = 42; { ESC(J Japanese char set or Typeface 8 }
+ aFNT9 = 43; { ESC(6 Norweign char set or Typeface 9 }
+ aFNT10 = 44; { ESC(C Danish II char set or Typeface 10 }
+
+{
+ Suggested typefaces are:
+
+ 0 - default typeface.
+ 1 - Line Printer or equiv.
+ 2 - Pica or equiv.
+ 3 - Elite or equiv.
+ 4 - Helvetica or equiv.
+ 5 - Times Roman or equiv.
+ 6 - Gothic or equiv.
+ 7 - Script or equiv.
+ 8 - Prestige or equiv.
+ 9 - Caslon or equiv.
+ 10 - Orator or equiv.
+}
+
+ aPROP2 = 45; { ESC[2p proportional on +++ }
+ aPROP1 = 46; { ESC[1p proportional off +++ }
+ aPROP0 = 47; { ESC[0p proportional clear +++ }
+ aTSS = 48; { ESC[n E set proportional offset ISO }
+ aJFY5 = 49; { ESC[5 F auto left justify ISO }
+ aJFY7 = 50; { ESC[7 F auto right justify ISO }
+ aJFY6 = 51; { ESC[6 F auto full justify ISO }
+ aJFY0 = 52; { ESC[0 F auto justify off ISO }
+ aJFY3 = 53; { ESC[3 F letter space (justify) ISO (special) }
+ aJFY1 = 54; { ESC[1 F word fill(auto center) ISO (special) }
+
+ aVERP0 = 55; { ESC[0z 1/8" line spacing +++ }
+ aVERP1 = 56; { ESC[1z 1/6" line spacing +++ }
+ aSLPP = 57; { ESC[nt set form length n DEC }
+ aPERF = 58; { ESC[nq perf skip n (n>0) +++ }
+ aPERF0 = 59; { ESC[0q perf skip off +++ }
+
+ aLMS = 60; { ESC#9 Left margin set +++ }
+ aRMS = 61; { ESC#0 Right margin set +++ }
+ aTMS = 62; { ESC#8 Top margin set +++ }
+ aBMS = 63; { ESC#2 Bottom marg set +++ }
+ aSTBM = 64; { ESC[Pn1;Pn2r T&B margins DEC }
+ aSLRM = 65; { ESC[Pn1;Pn2s L&R margin DEC }
+ aCAM = 66; { ESC#3 Clear margins +++ }
+
+ aHTS = 67; { ESCH Set horiz tab ISO }
+ aVTS = 68; { ESCJ Set vertical tabs ISO }
+ aTBC0 = 69; { ESC[0g Clr horiz tab ISO }
+ aTBC3 = 70; { ESC[3g Clear all h tab ISO }
+ aTBC1 = 71; { ESC[1g Clr vertical tabs ISO }
+ aTBC4 = 72; { ESC[4g Clr all v tabs ISO }
+ aTBCALL = 73; { ESC#4 Clr all h & v tabs +++ }
+ aTBSALL = 74; { ESC#5 Set default tabs +++ }
+ aEXTEND = 75; { ESC[Pn"x extended commands +++ }
+
+ aRAW = 76; { ESC[Pn"r Next 'Pn' chars are raw +++ }
+
+Type
+
+ pIOPrtCmdReq = ^tIOPrtCmdReq;
+ tIOPrtCmdReq = record
+ io_Message : tMessage;
+ io_Device : pDevice; { (DevicePtr) device node pointer }
+ io_Unit : pUnit; { (UnitPtr) unit (driver private)}
+ io_Command : Word; { device command }
+ io_Flags : Byte;
+ io_Error : Shortint; { error or warning num }
+ io_PrtCommand : Word; { printer command }
+ io_Parm0 : Byte; { first command parameter }
+ io_Parm1 : Byte; { second command parameter }
+ io_Parm2 : Byte; { third command parameter }
+ io_Parm3 : Byte; { fourth command parameter }
+ end;
+
+
+ pIODRPReq = ^tIODRPReq;
+ tIODRPReq = record
+ io_Message : tMessage;
+ io_Device : pDevice; { (DevicePtr) device node pointer }
+ io_Unit : pUnit; { (UnitPtr) unit (driver private)}
+ io_Command : Word; { device command }
+ io_Flags : Byte;
+ io_Error : Shortint; { error or warning num }
+ io_RastPort : pRastPort; { (RastPortPtr) raster port }
+ io_ColorMap : pColorMap; { (ColorMapPtr) color map }
+ io_Modes : ULONG; { graphics viewport modes }
+ io_SrcX : Word; { source x origin }
+ io_SrcY : Word; { source y origin }
+ io_SrcWidth : Word; { source x width }
+ io_SrcHeight : Word; { source x height }
+ io_DestCols : Longint; { destination x width }
+ io_DestRows : Longint; { destination y height }
+ io_Special : Word; { option flags }
+ end;
+
+{ For PRD_DUMPRPORTTAGS (V44) }
+ PIODRPTagsReq = ^tIODRPTagsReq;
+ tIODRPTagsReq = record
+ io_Message : tMessage;
+ io_Device : PDevice; { device node pointer }
+ io_Unit : PUnit; { unit (driver private)}
+ io_Command : UWORD; { device command }
+ io_Flags : UBYTE;
+ io_Error : BYTE; { error or warning num }
+ io_RastPort : PRastPort; { raster port }
+ io_ColorMap : PColorMap; { color map }
+ io_Modes : ULONG; { graphics viewport modes }
+ io_SrcX : UWORD; { source x origin }
+ io_SrcY : UWORD; { source y origin }
+ io_SrcWidth : UWORD; { source x width }
+ io_SrcHeight : UWORD; { source x height }
+ io_DestCols : LONG; { destination x width }
+ io_DestRows : LONG; { destination y height }
+ io_Special : UWORD; { option flags }
+ io_TagList : PTagItem; { tag list with additional info }
+ end;
+
+
+Const
+
+ SPECIAL_MILCOLS = $0001; { DestCols specified in 1/1000" }
+ SPECIAL_MILROWS = $0002; { DestRows specified in 1/1000" }
+ SPECIAL_FULLCOLS = $0004; { make DestCols maximum possible }
+ SPECIAL_FULLROWS = $0008; { make DestRows maximum possible }
+ SPECIAL_FRACCOLS = $0010; { DestCols is fraction of FULLCOLS }
+ SPECIAL_FRACROWS = $0020; { DestRows is fraction of FULLROWS }
+ SPECIAL_CENTER = $0040; { center image on paper }
+ SPECIAL_ASPECT = $0080; { ensure correct aspect ratio }
+ SPECIAL_DENSITY1 = $0100; { lowest resolution (dpi) }
+ SPECIAL_DENSITY2 = $0200; { next res }
+ SPECIAL_DENSITY3 = $0300; { next res }
+ SPECIAL_DENSITY4 = $0400; { next res }
+ SPECIAL_DENSITY5 = $0500; { next res }
+ SPECIAL_DENSITY6 = $0600; { next res }
+ SPECIAL_DENSITY7 = $0700; { highest res }
+ SPECIAL_NOFORMFEED = $0800; { don't eject paper on gfx prints }
+ SPECIAL_TRUSTME = $1000; { don't reset on gfx prints }
+
+{
+ Compute print size, set 'io_DestCols' and 'io_DestRows' in the calling
+ program's 'IODRPReq' structure and exit, DON'T PRINT. This allows the
+ calling program to see what the final print size would be in printer
+ pixels. Note that it modifies the 'io_DestCols' and 'io_DestRows'
+ fields of your 'IODRPReq' structure. Also, set the print density and
+ update the 'MaxXDots', 'MaxYDots', 'XDotsInch', and 'YDotsInch' fields
+ of the 'PrinterExtendedData' structure.
+}
+
+ SPECIAL_NOPRINT = $2000; { see above }
+
+ PDERR_NOERR = 0; { clean exit, no errors }
+ PDERR_CANCEL = 1; { user cancelled print }
+ PDERR_NOTGRAPHICS = 2; { printer cannot output graphics }
+ PDERR_INVERTHAM = 3; { OBSOLETE }
+ PDERR_BADDIMENSION = 4; { print dimensions illegal }
+ PDERR_DIMENSIONOVFLOW = 5; { OBSOLETE }
+ PDERR_INTERNALMEMORY = 6; { no memory for internal variables }
+ PDERR_BUFFERMEMORY = 7; { no memory for print buffer }
+
+{
+ Note : this is an internal error that can be returned from the render
+ function to the printer device. It is NEVER returned to the user.
+ If the printer device sees this error it converts it 'PDERR_NOERR'
+ and exits gracefully. Refer to the document on
+ 'How to Write a Graphics Printer Driver' for more info.
+}
+
+ PDERR_TOOKCONTROL = 8; { Took control in case 0 of render }
+
+ PDERR_BADPREFERENCES = 9; { preferences file corrupt }
+
+{
+ Note: all error codes < 32 are reserved for printer.device.
+ All error codes >= 32 and < 127 are reserved for driver specific
+ errors. Negative errors are reserved for system use (standard I/O
+ errors) and error code 127 is reserved for future expansion.
+}
+ PDERR_LASTSTANDARD = 31;
+ PDERR_FIRSTCUSTOM = 32;
+ PDERR_LASTCUSTOM = 126;
+{ internal use }
+
+ SPECIAL_DENSITYMASK = $0700; { masks out density values }
+ SPECIAL_DIMENSIONSMASK = SPECIAL_MILCOLS + SPECIAL_MILROWS +
+ SPECIAL_FULLCOLS + SPECIAL_FULLROWS + SPECIAL_FRACCOLS +
+ SPECIAL_FRACROWS + SPECIAL_ASPECT;
+
+{**************************************************************************}
+
+{ The following tags are used for PRD_DUMPRPORTTAGS }
+
+ DRPA_Dummy = (TAG_USER + $60000);
+
+{**************************************************************************}
+
+{ The following tags are not implemented but reserved for future use. }
+
+ DRPA_ICCProfile = (DRPA_Dummy+1); { APTR }
+ DRPA_ICCName = (DRPA_Dummy+2); { STRPTR }
+ DRPA_NoColCorrect = (DRPA_Dummy+3); { LBOOL }
+
+{**************************************************************************}
+
+{ If the following tag is used io_RastPort and io_ColorMap are
+ ignored.
+}
+ DRPA_SourceHook = (DRPA_Dummy+4); { struct Hook * }
+
+{ The source hook (DRPA_SourceHook) is called with object NULL and
+ message is a pointer to the following struct.
+
+ VOID hook(struct Hook * hook,
+ APTR dummy,
+ struct DRPSourceMsg * drpm);
+}
+
+type
+ PDRPSourceMsg = ^tDRPSourceMsg;
+ tDRPSourceMsg = record
+ x : LONG;
+ y : LONG;
+ width : LONG;
+ height : LONG;
+ buf : PULONG; { fill this buffer with 0x00RRGGBB pixels }
+ end;
+const
+{**************************************************************************}
+
+{ If these tags are used io_Modes is ignored for aspect ratio }
+
+ DRPA_AspectX = (DRPA_Dummy+5); { ULONG }
+ DRPA_AspectY = (DRPA_Dummy+6); { ULONG }
+
+{**************************************************************************}
+
+{ The following tags are used for PRD_EDITPREFS }
+
+ PPRA_Dummy = (TAG_USER + $70000);
+
+{**************************************************************************}
+
+{ Request to edit prefs (for PRD_EDITPREFS; V44) }
+
+ type
+ PIOPrtPrefsReq = ^tIOPrtPrefsReq;
+ tIOPrtPrefsReq = record
+ io_Message : tMessage;
+ io_Device : PDevice; { device node pointer }
+ io_Unit : PUnit; { unit (driver private)}
+ io_Command : UWORD; { device command }
+ io_Flags : UBYTE;
+ io_Error : BYTE; { error or warning num }
+ io_TagList : PTagItem; { requester tag list }
+ end;
+
+const
+ PPRA_Window = (PPRA_Dummy+1); { struct Window * }
+ PPRA_Screen = (PPRA_Dummy+2); { struct Screen * }
+ PPRA_PubScreen = (PPRA_Dummy+3); { STRPTR }
+
+{**************************************************************************}
+
+{ Request to set error hook (for PRD_SETERRHOOK; V44)}
+
+{
+#define PDHOOK_NONE ((struct Hook *) NULL)
+#define PDHOOK_STD ((struct Hook *) 1)
+}
+
+
+ type
+ PIOPrtErrReq = ^tIOPrtErrReq;
+ tIOPrtErrReq = record
+ io_Message : tMessage;
+ io_Device : PDevice; { device node pointer }
+ io_Unit : PUnit; { unit (driver private)}
+ io_Command : UWORD; { device command }
+ io_Flags : UBYTE;
+ io_Error : BYTE; { error or warning num }
+ io_Hook : PHook;
+ end;
+
+{**************************************************************************}
+
+{
+ The error hook is called with the IORequest that caused the error as
+ object (2nd Parameter) and a pointer to struct PrtErrMsg as message
+ (3rd Parameter):
+
+ VOID hook(struct Hook * hook,
+ struct printerIO * ior,
+ struct PrtErrMsg * pem);
+}
+
+
+ PPrtErrMsg = ^tPrtErrMsg;
+ tPrtErrMsg = record
+ pe_Version : ULONG;
+ pe_ErrorLevel : ULONG;
+ pe_Window : PWindow;
+ pe_ES : PEasyStruct;
+ pe_IDCMP : PULONG;
+ pe_ArgList : APTR;
+ end;
+
+
+ const
+ PDHOOK_VERSION = 1;
+
+ type
+ PIOPrefsReq = ^IOPrefsReq;
+ IOPrefsReq = record
+ io_Message : tMessage;
+ io_Device : PDevice; { device node pointer }
+ io_Unit : PUnit; { unit (driver private)}
+ io_Command : UWORD; { device command }
+ io_Flags : UBYTE;
+ io_Error : BYTE; { error or warning num }
+ io_TxtPrefs : PPrinterTxtPrefs;
+ io_UnitPrefs : PPrinterUnitPrefs;
+ io_DevUnitPrefs : PPrinterDeviceUnitPrefs;
+ io_GfxPrefs : PPrinterGfxPrefs;
+ end;
+
+IMPLEMENTATION
+
+end.