home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************
- * (C) 1986 Commodore-Amiga
- * Example program to demonstrate finding the CON: window pointer
- * by Andy Finkel and Robert (Kodiak) Burns
- *
- * Use it any way you like, as long as the copyright notice is left on.
- *
- ************************************************************************/
- #include "exec/types.h"
- #include "exec/ports.h"
- #include "exec/io.h"
- #include "exec/memory.h"
- #include "devices/console.h"
- #include "devices/conunit.h"
- #include "libraries/dos.h"
- #include "libraries/dosextens.h"
- #include "intuition/intuitionbase.h"
- #include "workbench/startup.h"
- #include "workbench/workbench.h"
-
- extern struct Library *OpenLibrary();
- struct IntuitionBase *IntuitionBase = 0;
-
- struct MsgPort iorp = {
- {0, 0, NT_MSGPORT, 0, 0}, 0,
- -1, /* initialize signal to -1 */
- 0,
- /* start with empty list */
- {&iorp.mp_MsgList.lh_Tail, 0, &iorp.mp_MsgList.lh_Head, 0, 0}
- };
- struct IOStdReq ior = {
- {{0, 0, 0, 0, 0}, &iorp, 0},
- 0 /* device is zero */
- };
-
-
-
- cleanup(code)
- {
- if (ior.io_Device != 0) {
- if (iorp.mp_SigBit != -1) {
- FreeSignal(iorp.mp_SigBit);
- }
- CloseDevice(&ior);
- }
- CloseLibrary(IntuitionBase);
-
- exit(20);
- }
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- struct MsgPort *con;
- UBYTE *s1, *s2;
- struct StandardPacket *packet;
- struct InfoData *id;
- short i;
-
- if ((IntuitionBase = OpenLibrary("intuition.library", 0)) == 0) {
- exit(20);
- }
-
- /* open the console device */
- if ((OpenDevice("console.device", -1, &ior, 0)) != 0) {
- cleanup(0);
- exit(30);
- }
-
- /* set up the message port in the I/O request */
- if ((iorp.mp_SigBit = AllocSignal(-1)) < 0) {
- cleanup(0);
- exit(35);
- }
- iorp.mp_SigTask = (struct Task *) FindTask((char *) NULL);
-
-
- /* try to find console associated with calling process */
- /* if started from CLI, than is */
- if ((iorp.mp_SigTask->tc_Node.ln_Type == NT_PROCESS)&&(argc != 0)) {
- con = (struct MsgPort *)
- ((struct Process *) iorp.mp_SigTask) -> pr_ConsoleTask;
- if (con != 0) {
- if ((packet = (struct StandardPacket *)
- AllocMem(sizeof(*packet), MEMF_CLEAR))) {
- if ((id = (struct id *) AllocMem(sizeof(*id), MEMF_CLEAR))) {
- /* this is the console handlers packet port */
- packet->sp_Msg.mn_Node.ln_Name = &(packet->sp_Pkt);
- packet->sp_Pkt.dp_Link = &(packet->sp_Msg);
- packet->sp_Pkt.dp_Port = &iorp;
- packet->sp_Pkt.dp_Type = ACTION_DISK_INFO;
- packet->sp_Pkt.dp_Arg1 = ((ULONG) id) >> 2;
- PutMsg(con, packet);
- WaitPort(&iorp);
- /* using the window directly here */
- WindowToBack(id->id_VolumeNode);
- WindowToFront(id->id_VolumeNode);
- if ((id->id_InUse) &&
- (IntuitionBase->LibNode.lib_Version >= 33)) {
-
- /* new DOS: IOB for console.device */
- /* using the console directly here */
- ior.io_Unit =
- ((struct IOStdReq *) id->id_InUse)->io_Unit;
- ior.io_Command = CMD_WRITE;
- ior.io_Data = "HELLO WORLD\n";
- ior.io_Length = 12;
- DoIO(&ior);
- }
- FreeMem(id, sizeof(*id));
- }
- FreeMem(packet, sizeof(*packet));
- }
- }
- }
- ior.io_Unit = (struct Unit *) -1;
- cleanup(0);
- }
-
-