home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d3xx
/
d326
/
snap.lha
/
Snap
/
source
/
clip.c
next >
Wrap
C/C++ Source or Header
|
1990-03-05
|
3KB
|
90 lines
/* This is just plain clipboard handling */
IMPORT struct IOClipReq *ClipReq;
ULONG ReadClip(ClipReq, Buf, BufSize, Action)
struct IOClipReq *ClipReq;
STRPTR Buf;
ULONG BufSize;
SHORT Action;
{
ULONG Length;
ClipReq->io_Command = CMD_READ;
ClipReq->io_Data = Buf;
ClipReq->io_Length = BufSize-1L; /* space for '\0' */
if (Action == CLIP_FIRST) {
ClipReq->io_Offset = 0L;
ClipReq->io_ClipID = 0L;
}
DoIO(ClipReq);
Length = ClipReq->io_Actual;
Buf[Length] = '\0';
if (Action == CLIP_LAST) {
ClipReq->io_Command = CMD_READ;
ClipReq->io_Data = NULL;
ClipReq->io_Length = 1L;
DoIO(ClipReq); /* Null read to terminate */
}
return(Length);
}
VOID WriteClip(ClipReq, Buf, BufSize, Action)
struct IOClipReq *ClipReq;
STRPTR Buf;
ULONG BufSize;
SHORT Action;
{
if (Action == CLIP_FIRST) {
ClipReq->io_Offset = 0L;
ClipReq->io_ClipID = 0L;
}
ClipReq->io_Command = CMD_WRITE;
ClipReq->io_Data = Buf;
ClipReq->io_Length = BufSize;
DoIO(ClipReq);
if (Action == CLIP_LAST) {
ClipReq->io_Command = CMD_UPDATE;
DoIO(ClipReq);
}
}
VOID SaveClip(SnapSpace, SnapSize)
UBYTE *SnapSpace;
ULONG SnapSize;
{
ULONG Len;
WriteClip(ClipReq, "FORM", 4L, CLIP_FIRST);
Len = SnapSize+12;
WriteClip(ClipReq, (STRPTR)&Len, 4L, CLIP_CONT);
WriteClip(ClipReq, "FTXT", 4L, CLIP_CONT);
WriteClip(ClipReq, "CHRS", 4L, CLIP_CONT);
Len = SnapSize;
WriteClip(ClipReq, (STRPTR)&Len, 4L, CLIP_CONT);
WriteClip(ClipReq, SnapSpace, Len, CLIP_LAST);
}
struct Snap *FetchClip()
{
struct Snap *Snap = NULL;
ULONG temp;
ULONG ID[2];
(VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_FIRST); /* FORM */
if (!strcmp((STRPTR)&ID, "FORM")) {
(VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_CONT); /* size */
(VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_CONT); /* FTXT */
if (!strcmp((STRPTR)&ID, "FTXT")) {
(VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_CONT); /* CHRS */
if (!strcmp((STRPTR)&ID, "CHRS")) {
(VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_CONT); /* #chars */
temp = ID[0];
Snap = AllocMem((LONG)sizeof(struct Snap)+temp,
MEMF_PUBLIC|MEMF_CLEAR);
Snap->Size = sizeof(struct Snap)+temp;
ReadClip(ClipReq, &Snap->Chars[0], Snap->Size+1L, CLIP_LAST);
}
}
}
return(Snap);
}