Safer handling of Booleans.
[AROS.git] / workbench / libs / muimaster / clipboard.c
bloba90badda138ce1b8497402b5fd1e09e4adeb4872
1 /*
2 Copyright © 1999, David Le Corfec.
3 Copyright © 2002, The AROS Development Team.
4 All rights reserved.
6 $Id$
7 */
9 #include <ctype.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include <stdio.h>
14 #include <exec/types.h>
15 #include <exec/memory.h>
17 #include <clib/alib_protos.h>
18 #include <libraries/iffparse.h>
19 #include <datatypes/textclass.h>
20 #include <proto/exec.h>
21 #include <proto/iffparse.h>
22 #include <proto/utility.h>
24 #include "mui.h"
25 #include "clipboard.h"
26 #include "support.h"
28 #include "muimaster_intern.h"
30 //#define MYDEBUG 1
31 #include "debug.h"
33 extern struct Library *MUIMasterBase;
35 void clipboard_write_text(STRPTR text, LONG textlen)
37 struct IFFHandle *iff;
39 if ((iff = AllocIFF()))
41 if ((iff->iff_Stream = (IPTR) OpenClipboard(0)))
43 InitIFFasClip(iff);
44 if (!OpenIFF(iff, IFFF_WRITE))
46 if (!PushChunk(iff, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN))
48 if (!PushChunk(iff, ID_FTXT, ID_CHRS, IFFSIZE_UNKNOWN))
50 WriteChunkBytes(iff, text, textlen);
52 PopChunk(iff);
55 PopChunk(iff);
57 CloseIFF(iff);
59 CloseClipboard((struct ClipboardHandle *)iff->iff_Stream);
61 FreeIFF(iff);
65 STRPTR clipboard_read_text(void)
67 struct IFFHandle *iff;
68 struct ContextNode *cn;
69 STRPTR retval = 0;
71 if ((iff = AllocIFF()))
73 if ((iff->iff_Stream = (IPTR) OpenClipboard(0)))
75 InitIFFasClip(iff);
77 if (!OpenIFF(iff, IFFF_READ))
79 if (!(StopChunk(iff, ID_FTXT, ID_CHRS)))
81 if (!ParseIFF(iff, IFFPARSE_SCAN))
83 cn = CurrentChunk(iff);
85 if ((cn->cn_Type == ID_FTXT)
86 && (cn->cn_ID == ID_CHRS) && (cn->cn_Size > 0))
88 if ((retval = mui_alloc(cn->cn_Size + 1)))
90 ReadChunkBytes(iff, retval, cn->cn_Size);
92 retval[cn->cn_Size] = '\0';
97 CloseIFF(iff);
99 CloseClipboard((struct ClipboardHandle *)iff->iff_Stream);
102 FreeIFF(iff);
105 return retval;
108 void clipboard_free_text(STRPTR text)
110 mui_free(text);