home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff274.lzh / Snap / clip.c < prev    next >
C/C++ Source or Header  |  1989-11-16  |  3KB  |  91 lines

  1. /* This is just plain clipboard handling */
  2.  
  3.  
  4. #include "snap.h"
  5.  
  6. IMPORT struct IOClipReq *ClipReq;
  7.  
  8. ULONG ReadClip(ClipReq, Buf, BufSize, Action)
  9. struct IOClipReq *ClipReq;
  10. STRPTR Buf;
  11. ULONG BufSize;
  12. SHORT Action;
  13.     ULONG Length;
  14.     ClipReq->io_Command = CMD_READ;
  15.     ClipReq->io_Data = Buf;
  16.     ClipReq->io_Length = BufSize-1L;       /* space for '\0' */
  17.     if (Action == CLIP_FIRST) { 
  18.         ClipReq->io_Offset = 0L;
  19.         ClipReq->io_ClipID = 0L;
  20.     }
  21.     DoIO(ClipReq);
  22.     Length = ClipReq->io_Actual;
  23.     Buf[Length] = '\0';
  24.     if (Action == CLIP_LAST) { 
  25.         ClipReq->io_Command = CMD_READ;
  26.         ClipReq->io_Data = NULL;
  27.         ClipReq->io_Length = 1L;
  28.         DoIO(ClipReq);                    /* Null read to terminate */
  29.     }
  30.     return(Length);
  31. }
  32.  
  33. VOID WriteClip(ClipReq, Buf, BufSize, Action)
  34. struct IOClipReq *ClipReq;
  35. STRPTR Buf;
  36. ULONG BufSize;
  37. SHORT Action;
  38.     if (Action == CLIP_FIRST) { 
  39.         ClipReq->io_Offset = 0L;
  40.         ClipReq->io_ClipID = 0L;
  41.     }
  42.     ClipReq->io_Command = CMD_WRITE;
  43.     ClipReq->io_Data = Buf;
  44.     ClipReq->io_Length = BufSize;
  45.     DoIO(ClipReq);
  46.     if (Action == CLIP_LAST) { 
  47.         ClipReq->io_Command = CMD_UPDATE;
  48.         DoIO(ClipReq);
  49.     }
  50. }
  51.  
  52. VOID SaveClip(SnapSpace, SnapSize)
  53. UBYTE *SnapSpace;
  54. ULONG SnapSize;
  55.     ULONG Len;
  56.     WriteClip(ClipReq, "FORM", 4L, CLIP_FIRST);
  57.     Len = SnapSize+12;
  58.     WriteClip(ClipReq, &Len, 4L, CLIP_CONT);
  59.     WriteClip(ClipReq, "FTXT", 4L, CLIP_CONT);
  60.     WriteClip(ClipReq, "CHRS", 4L, CLIP_CONT);
  61.     Len = SnapSize;
  62.     WriteClip(ClipReq, &Len, 4L, CLIP_CONT);
  63.     WriteClip(ClipReq, SnapSpace, Len, CLIP_LAST);
  64. }
  65.  
  66. UBYTE *FetchClip()
  67.     UBYTE *SnapSpace = NULL;
  68.     ULONG SnapSize;
  69.     ULONG ID[2];
  70.     (VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_FIRST);    /* FORM */
  71.     if (!strcmp((STRPTR)&ID, "FORM")) { 
  72.         (VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_CONT);     /* size */
  73.         (VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_CONT);     /* FTXT */
  74.         if (!strcmp((STRPTR)&ID, "FTXT")) { 
  75.             (VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_CONT);     /* CHRS */
  76.             if (!strcmp((STRPTR)&ID, "CHRS")) { 
  77.                 (VOID)ReadClip(ClipReq, (STRPTR)&ID, 5L, CLIP_CONT); /* #chars */
  78.                 SnapSize = ID[0];
  79.                 SnapSpace = AllocMem(SnapSize+5L, MEMF_PUBLIC|MEMF_CLEAR);
  80.                 *(ULONG *)SnapSpace = SnapSize+5L;               /* Save size */
  81.                 ReadClip(ClipReq, SnapSpace+4L, SnapSize+1L, CLIP_LAST);
  82.             }
  83.         }
  84.     }
  85.     return(SnapSpace);
  86. }
  87.