Four primary steps are required to open the console device:
* Create a message port using CreatePort(). Reply messages from the
device must be directed to a message port.
* Create an I/O request structure of type IOStdReq. The IOStdReq
structure is created by the CreateExtIO() function. CreateExtIO will
initialize your I/O request to point to your reply port.
* Open an Intuition window and set a pointer to it in the io_Data field
of the IOStdReq and the size of the window in the io_Length field.
This is the window to which the console will be attached. The window
must be SIMPLE_REFRESH for use with the CONU_CHARMAP and CONU_SNIPMAP
units.
* Open the console device. Call OpenDevice() passing it the I/O
request and the type of console unit set in the unit and flags
fields. Console unit types and flag values are listed below.
Console device units:
* CONU_LIBRARY - Return the device library vector pointer used for
calling console device functions. No console is opened.
* CONU_STANDARD - Open a standard console.
* CONU_CHARMAP - Open a console with a character map.
* CONU_SNIPMAP - Open a console with a character map and
copy-and-paste support.
See the include file devices/conunit.h for the unit definitions
and the Amiga ROM Kernel Reference Manual: Includes and Autodocs for an
explanation of each unit.
No Changes Required
-------------------
CONU_STANDARD has a numeric value of zero to insure compatibility
with pre-V36 applications. CONU_LIBRARY has a numeric value of
negative one and is also compatible with pre-V36 applications.
Console device flags:
* CONFLAG_DEFAULT - The console device will redraw the window when it
is resized.
* CONFLAG_NODRAW_ON_NEWSIZE - The console device will not redraw the
window when it is resized
The character map units, CONU_CHARMAP and CONU_SNIPMAP, are the only units
which use the flags parameter to set how the character map is used.
CONU_STANDARD units ignore the flags parameter.
See the include file devices/conunit.h for the flag definitions and the
Amiga ROM Kernel Reference Manual: Includes and Autodocs for an
explanation of the flags.
struct MsgPort *ConsoleMP; /* Message port pointer */
struct IOStdReq *ConsIO; /* I/O structure pointer */
struct Window *win = NULL; /* Window pointer */
struct NewWindow nw =
{
10, 10, /* starting position (left,top) */
620,180, /* width, height */
-1,-1, /* detailpen, blockpen */
CLOSEWINDOW, /* flags for idcmp */
WINDOWDEPTH|WINDOWSIZING|
WINDOWDRAG|WINDOWCLOSE|
SIMPLE_REFRESH|ACTIVATE, /* window flags */
NULL, /* no user gadgets */
NULL, /* no user checkmark */
"Console Test", /* title */
NULL, /* pointer to window screen */
NULL, /* pointer to super bitmap */
100,45, /* min width, height */
640,200, /* max width, height */
WBENCHSCREEN /* open on workbench screen */
};
/* Create reply port console */
if (!(ConsoleMP = CreatePort("RKM.Console",0)))
cleanexit("Can't create write port\n",RETURN_FAIL);
/* Create message block for device I/O */
if (!(ConsIO = CreateExtIO(ConsoleMP,sizeof(struct IOStdReq))))
cleanexit("Can't create IORequest\n",RETURN_FAIL);
/* Open a window - we assume intuition.library is already open */
if (!(win = OpenWindow(&nw)))
cleanexit("Can't open window\n",RETURN_FAIL);
/* Set window pointer and size in I/O request */
ConsIO->io_Data = (APTR) win;
ConsIO->io_Length = sizeof(struct Window);
/* Open the console device */
if (error = OpenDevice("console.device",CONU_CHARMAP,ConsIO,
CONFLAG_DEFAULT))
cleanexit("Can't open console.device\n",RETURN_FAIL);