home *** CD-ROM | disk | FTP | other *** search
- /***
- cbdump.c Written By Stephen Vermeulen (403) 282-7990
-
- PO Box 3295, Station B,
- Calgary, ALberta,
- CANADA, T2M 4L8.
-
- Permission to use and distribute this code is granted so long
- as Commodore's copyright notice stays intact.
-
- This program copys whatever is on the clipboard to the STDOUT
- this is useful during debugging clipboard i/o so that one can
- immediately examine the results of a clipboard write with a
- CLI command like:
-
- cbdump | type opt h
- ***/
-
- #include "exec/types.h"
- #include "exec/ports.h"
- #include "exec/io.h"
- #include "devices/clipboard.h"
- #include <functions.h>
- #include <libraries/dosextens.h>
- #include <stdio.h>
-
- struct IOClipReq clipboardIO = 0;
- struct MsgPort clipboardMsgPort = 0;
- struct MsgPort satisfyMsgPort = 0;
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- UBYTE mem[256];
- int len;
-
- if (argc == 1)
- {
- if (!CBOpen(0))
- {
- clipboardIO.io_Offset = 0;
- clipboardIO.io_ClipID = 0;
- do
- {
- len = CBPasteS(mem, 256);
- if (len) fwrite(mem, len, 1, stdout);
- } while (len) ;
- CBClose();
- }
- }
- else
- puts("<cbdump> dumps the clipboard to stdout");
- }
-
- /*********************************************************************/
- /* */
- /* Program name: cbio */
- /* */
- /* Purpose: To provide standard clipboard device interface routines*/
- /* such as Open, Post, Read, Write, etc. */
- /* (C) 1986 Commodore-Amiga, Inc. */
- /* Permission given to use and distribute this code as long as this */
- /* notice remains intact. */
- /*********************************************************************/
-
- int CBOpen(unit)
- int unit;
- {
- int error;
-
- /* open the clipboard device */
- if ((error = OpenDevice("clipboard.device", (long) unit, &clipboardIO, 0L)) != 0)
- return(error);
-
- /* Set up the message port in the I/O request */
- clipboardMsgPort.mp_Node.ln_Type = NT_MSGPORT;
- clipboardMsgPort.mp_Flags = 0;
- clipboardMsgPort.mp_SigBit = AllocSignal(-1L);
- clipboardMsgPort.mp_SigTask = (struct Task *) FindTask((char *) NULL);
- AddPort(&clipboardMsgPort);
- clipboardIO.io_Message.mn_ReplyPort = &clipboardMsgPort;
-
- satisfyMsgPort.mp_Node.ln_Type = NT_MSGPORT;
- satisfyMsgPort.mp_Flags = 0;
- satisfyMsgPort.mp_SigBit = AllocSignal(-1L);
- satisfyMsgPort.mp_SigTask = (struct Task *) FindTask((char *) NULL);
- AddPort(&satisfyMsgPort);
- return(0);
- }
-
- CBClose()
- {
- if (clipboardMsgPort.mp_SigBit > 0)
- FreeSignal(clipboardMsgPort.mp_SigBit);
- if (satisfyMsgPort.mp_SigBit > 0)
- FreeSignal(satisfyMsgPort.mp_SigBit);
-
- RemPort(&satisfyMsgPort);
- RemPort(&clipboardMsgPort);
- CloseDevice(&clipboardIO);
- }
-
- int
- CBPasteS(mem, len)
- UBYTE *mem;
- int len;
- {
- clipboardIO.io_Command = CMD_READ;
- clipboardIO.io_Data = (STRPTR) mem;
- clipboardIO.io_Length = len;
- DoIO(&clipboardIO);
- return((int) clipboardIO.io_Actual);
- }
-