home *** CD-ROM | disk | FTP | other *** search
- #ifndef DEVICES_PRTBASE_H
- #define DEVICES_PRTBASE_H
- /*
- ** $VER: prtbase.h 1.10 (2.11.90)
- ** Includes Release 40.15
- **
- ** printer.device base structure definitions
- **
- ** (C) Copyright 1987-1993 Commodore-Amiga, Inc.
- ** All Rights Reserved
- */
-
- #ifndef EXEC_TYPES_H
- #include "exec/types.h"
- #endif
- #ifndef EXEC_NODES_H
- #include "exec/nodes.h"
- #endif
- #ifndef EXEC_LISTS_H
- #include "exec/lists.h"
- #endif
- #ifndef EXEC_PORTS_H
- #include "exec/ports.h"
- #endif
- #ifndef EXEC_LIBRARIES_H
- #include "exec/libraries.h"
- #endif
- #ifndef EXEC_TASKS_H
- #include "exec/tasks.h"
- #endif
-
- #ifndef DEVICES_PARALLEL_H
- #include "devices/parallel.h"
- #endif
- #ifndef DEVICES_SERIAL_H
- #include "devices/serial.h"
- #endif
- #ifndef DEVICES_TIMER_H
- #include "devices/timer.h"
- #endif
- #ifndef LIBRARIES_DOSEXTENS_H
- #include "libraries/dosextens.h"
- #endif
- #ifndef INTUITION_INTUITION_H
- #include "intuition/intuition.h"
- #endif
-
-
- struct DeviceData {
- struct Library dd_Device; /* standard library node */
- APTR dd_Segment; /* A0 when initialized */
- APTR dd_ExecBase; /* A6 for exec */
- APTR dd_CmdVectors; /* command table for device commands */
- APTR dd_CmdBytes; /* bytes describing which command queue */
- UWORD dd_NumCommands; /* the number of commands supported */
- };
-
- #define P_OLDSTKSIZE 0x0800 /* stack size for child task (OBSOLETE) */
- #define P_STKSIZE 0x1000 /* stack size for child task */
- #define P_BUFSIZE 256 /* size of internal buffers for text i/o */
- #define P_SAFESIZE 128 /* safety margin for text output buffer */
-
- struct PrinterData {
- struct DeviceData pd_Device;
- struct MsgPort pd_Unit; /* the one and only unit */
- BPTR pd_PrinterSegment; /* the printer specific segment */
- UWORD pd_PrinterType; /* the segment printer type */
- /* the segment data structure */
- struct PrinterSegment *pd_SegmentData;
- UBYTE *pd_PrintBuf; /* the raster print buffer */
- int (*pd_PWrite)(); /* the write function */
- int (*pd_PBothReady)(); /* write function's done */
- union { /* port I/O request 0 */
- struct IOExtPar pd_p0;
- struct IOExtSer pd_s0;
- } pd_ior0;
-
- #define pd_PIOR0 pd_ior0.pd_p0
- #define pd_SIOR0 pd_ior0.pd_s0
-
- union { /* and 1 for double buffering */
- struct IOExtPar pd_p1;
- struct IOExtSer pd_s1;
- } pd_ior1;
-
- #define pd_PIOR1 pd_ior1.pd_p1
- #define pd_SIOR1 pd_ior1.pd_s1
-
- struct timerequest pd_TIOR; /* timer I/O request */
- struct MsgPort pd_IORPort; /* and message reply port */
- struct Task pd_TC; /* write task */
- UBYTE pd_OldStk[P_OLDSTKSIZE]; /* and stack space (OBSOLETE) */
- UBYTE pd_Flags; /* device flags */
- UBYTE pd_pad; /* padding */
- struct Preferences pd_Preferences; /* the latest preferences */
- UBYTE pd_PWaitEnabled; /* wait function switch */
- /* new fields for V2.0 */
- UBYTE pd_Flags1; /* padding */
- UBYTE pd_Stk[P_STKSIZE]; /* stack space */
- };
-
- /* Printer Class */
- #define PPCB_GFX 0 /* graphics (bit position) */
- #define PPCF_GFX 0x1 /* graphics (and/or flag) */
- #define PPCB_COLOR 1 /* color (bit position) */
- #define PPCF_COLOR 0x2 /* color (and/or flag) */
-
- #define PPC_BWALPHA 0x00 /* black&white alphanumerics */
- #define PPC_BWGFX 0x01 /* black&white graphics */
- #define PPC_COLORALPHA 0x02 /* color alphanumerics */
- #define PPC_COLORGFX 0x03 /* color graphics */
-
- /* Color Class */
- #define PCC_BW 0x01 /* black&white only */
- #define PCC_YMC 0x02 /* yellow/magenta/cyan only */
- #define PCC_YMC_BW 0x03 /* yellow/magenta/cyan or black&white */
- #define PCC_YMCB 0x04 /* yellow/magenta/cyan/black */
- #define PCC_4COLOR 0x04 /* a flag for YMCB and BGRW */
- #define PCC_ADDITIVE 0x08 /* not ymcb but blue/green/red/white */
- #define PCC_WB 0x09 /* black&white only, 0 == BLACK */
- #define PCC_BGR 0x0A /* blue/green/red */
- #define PCC_BGR_WB 0x0B /* blue/green/red or black&white */
- #define PCC_BGRW 0x0C /* blue/green/red/white */
- /*
- The picture must be scanned once for each color component, as the
- printer can only define one color at a time. ie. If 'PCC_YMC' then
- first pass sends all 'Y' info to printer, second pass sends all 'M'
- info, and third pass sends all C info to printer. The CalComp
- PlotMaster is an example of this type of printer.
- */
- #define PCC_MULTI_PASS 0x10 /* see explanation above */
-
- struct PrinterExtendedData {
- char *ped_PrinterName; /* printer name, null terminated */
- VOID (*ped_Init)(); /* called after LoadSeg */
- VOID (*ped_Expunge)(); /* called before UnLoadSeg */
- int (*ped_Open)(); /* called at OpenDevice */
- VOID (*ped_Close)(); /* called at CloseDevice */
- UBYTE ped_PrinterClass; /* printer class */
- UBYTE ped_ColorClass; /* color class */
- UBYTE ped_MaxColumns; /* number of print columns available */
- UBYTE ped_NumCharSets; /* number of character sets */
- UWORD ped_NumRows; /* number of 'pins' in print head */
- ULONG ped_MaxXDots; /* number of dots max in a raster dump */
- ULONG ped_MaxYDots; /* number of dots max in a raster dump */
- UWORD ped_XDotsInch; /* horizontal dot density */
- UWORD ped_YDotsInch; /* vertical dot density */
- char ***ped_Commands; /* printer text command table */
- int (*ped_DoSpecial)(); /* special command handler */
- int (*ped_Render)(); /* raster render function */
- LONG ped_TimeoutSecs; /* good write timeout */
- /* the following only exists if the segment version is >= 33 */
- char **ped_8BitChars; /* conv. strings for the extended font */
- LONG ped_PrintMode; /* set if text printed, otherwise 0 */
- /* the following only exists if the segment version is >= 34 */
- /* ptr to conversion function for all chars */
- int (*ped_ConvFunc)();
- };
-
- struct PrinterSegment {
- ULONG ps_NextSegment; /* (actually a BPTR) */
- ULONG ps_runAlert; /* MOVEQ #0,D0 : RTS */
- UWORD ps_Version; /* segment version */
- UWORD ps_Revision; /* segment revision */
- struct PrinterExtendedData ps_PED; /* printer extended data */
- };
- #endif
-