home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
monitors
/
rsys
/
source.lha
/
src
/
RSysClip.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-01-09
|
4KB
|
185 lines
/*
***************************************************************************
*
* Datei:
* RSysClip.c
*
* Inhalt:
* void SaveListToClip(struct List *list, char *text);
* void RSysListToClip(void);
* void RSysEntryToClip(void);
*
* Bemerkungen:
* Unterstützung des ClipBoard-Devices.
*
* Erstellungsdatum:
* 07-Jul-93 Rolf Böhme
*
* Änderungen:
* 07-Jul-93 Rolf Böhme Erstellung
*
***************************************************************************
*/
#include "RSysFunc.h"
#include "RSysDebug.h"
#define ID_FTXT MAKE_ID('F','T','X','T')
#define ID_CHRS MAKE_ID('C','H','R','S')
void
SaveListToClip(struct List *list,char *text)
{
char Success = FALSE;
struct Node *node;
int len;
struct IFFHandle *Handle;
DPOS;
if (IFFParseBase = OpenLibrary ((UBYTE *)"iffparse.library", 0L))
{
if(Handle = AllocIFF())
{
if(Handle->iff_Stream = (ULONG)OpenClipboard(PRIMARY_CLIP))
{
InitIFFasClip(Handle);
if(!OpenIFF(Handle,IFFF_WRITE))
{
if(!PushChunk(Handle,ID_FTXT,ID_FORM,IFFSIZE_UNKNOWN))
{
if(!PushChunk(Handle,0,ID_CHRS,IFFSIZE_UNKNOWN))
{
if(list != NULL)
{
for(node = list->lh_Head; node->ln_Succ; node = node->ln_Succ)
{
len = strlen(node->ln_Name);
if(WriteChunkBytes(Handle,node->ln_Name,len) != len)
break;
if(WriteChunkBytes(Handle,"\n",1) != 1)
break;
}
}
else
{
len = strlen(text);
if(WriteChunkBytes(Handle,(STRPTR)text,len) != len)
Success = FALSE;
}
if(!PopChunk(Handle))
Success = TRUE;
}
}
if(Success)
{
if(PopChunk(Handle))
Success = FALSE;
}
CloseIFF(Handle);
}
CloseClipboard((struct ClipboardHandle *)Handle->iff_Stream);
}
FreeIFF(Handle);
}
CloseLibrary (IFFParseBase);
}
if(!Success)
ErrorHandle(CLIPBOARD_ERR, WRITE_FAIL, NO_KILL);
return;
}
void
RSysListToClip(void)
{
PrintInfo("Saving List to clipboard", SPEAK, 0);
SaveListToClip(&ListeLVList, NULL);
PrintStatistics();
return;
}
void
RSysEntryToClip(void)
{
register struct IntuiMessage *message;
APTR object;
ULONG class,
code;
DPOS;
Flags.quit_clip = 0;
PrintInfo("Select list entry (ESC to cancel)", SPEAK, 0);
do
{
/*
* Warten auf folgende Events:
* - ^C wurde eingegeben
* - Events vom Hauptfenster
*/
Wait(1L << SysWnd->UserPort->mp_SigBit);
while ((message = (struct IntuiMessage *)
GT_GetIMsg(SysWnd->UserPort)) != NULL)
{
/*
* Die wichtigsten Daten werden aus der erhaltenen
* Nachricht kopiert.
*/
object = message->IAddress;
class = message->Class;
code = message->Code;
/*
* Die Nachricht wird sofort beantwortet, damit
* Intuition nicht länger als notwendig auf eine
* Antwort wartet.
*/
GT_ReplyIMsg(message);
if(class == IDCMP_GADGETUP)
{
if(((struct Gadget *)object)->GadgetID == GD_ListeLV)
{
struct Node *node;
if(node = GetNode(&ListeLVList,code))
{
SaveListToClip(NULL, node->ln_Name);
Flags.quit_clip = 1;
}
}
}
if((class == IDCMP_VANILLAKEY) && (code == '\33'))
{
Flags.quit_clip = 1;
PrintInfo("Selection aborted!",SPEAK, SEC);
}
}
}
while(NOT(Flags.quit_clip));
PrintStatistics();
return;
}