home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff285.lzh / 'Liner / Source / clip.h < prev    next >
C/C++ Source or Header  |  1989-11-28  |  5KB  |  208 lines

  1. /*Clipboard I/O routines*/
  2.  
  3. #define WCLIP_FIRST_WRITE  0
  4. #define WCLIP_CONT_WRITE   1
  5. #define WCLIP_LAST_WRITE   2
  6.  
  7. SetupClipboard()  /*Setup the clipboard device*/
  8. {
  9.    if(OpenDevice("clipboard.device",0,&ClipboardIO,0)!=0)
  10.       {
  11.       TitleError("Can't open clipboard!\n");
  12.       Delay(500);    /*Pause for 5 seconds;  get the user's attention*/
  13.       CloseWindow(Window);
  14.       CloseScreen(Screen);
  15.       exit();
  16.       }
  17.  
  18.    clipboardMsgPort.mp_Node.ln_Type=NT_MSGPORT;
  19.    clipboardMsgPort.mp_Flags=0;
  20.    clipboardMsgPort.mp_SigBit=AllocSignal(-1);
  21.    clipboardMsgPort.mp_SigTask=(struct Task *)FindTask((char *)NULL);
  22.    AddPort(&clipboardMsgPort);
  23.    ClipboardIO.io_Message.mn_ReplyPort=(struct MsgPort *)&clipboardMsgPort;
  24. }
  25.  
  26. WriteInvsTextToClip(StartLoc,Chars,String)
  27. int StartLoc,Chars;     /*Write a highlighted text block to clipboard*/
  28. char *String;
  29. {
  30.    char WorkString[80];
  31.  
  32.    strcpy(WorkString,"");
  33.    strcpy(WorkString,&String[StartLoc]);
  34.    WorkString[Chars]=NULL;
  35.    WriteStringClip(WorkString);
  36. }
  37.  
  38. WriteStringClip(string) /*Write a string to the Clipboard*/
  39. char *string;
  40. {
  41.    int len;
  42.  
  43.    /*Write the data, in IFF form*/
  44.    WriteClip(&ClipboardIO,"FORM",4,WCLIP_FIRST_WRITE);
  45.    len=strlen(string)+12;
  46.    WriteClip(&ClipboardIO,&len,4,WCLIP_CONT_WRITE);
  47.    WriteClip(&ClipboardIO,"FTXT",4,WCLIP_CONT_WRITE);
  48.    WriteClip(&ClipboardIO,"CHRS",4,WCLIP_CONT_WRITE);
  49.    len=strlen(string);
  50.    WriteClip(&ClipboardIO,&len,4,WCLIP_CONT_WRITE);
  51.    WriteClip(&ClipboardIO,string,len,WCLIP_LAST_WRITE);
  52. }
  53.  
  54. WriteClip(ioreq,buf,bufsiz,whichone)   /*Writes a clip to the clipboard*/
  55. register struct IOClipReq *ioreq;
  56. char *buf;
  57. int bufsiz;
  58. int whichone;
  59. {
  60.    if(whichone==WCLIP_FIRST_WRITE)  /*First time*/
  61.       {
  62.       ioreq->io_Offset=0;
  63.       ioreq->io_ClipID=0;
  64.       }
  65.    ioreq->io_Command=CMD_WRITE;
  66.    ioreq->io_Data=buf;
  67.    ioreq->io_Length=bufsiz;
  68.    DoIO(ioreq);
  69.    if(whichone==WCLIP_LAST_WRITE)  /*Last time, tell clipboard to make the*/
  70.       {                            /*data available to the system*/
  71.       ioreq->io_Command=CMD_UPDATE;
  72.       DoIO(ioreq);
  73.       }
  74. }
  75.  
  76. ShutDownClipboard()
  77. {
  78.    RemPort(&clipboardMsgPort);
  79.    CloseDevice(&ClipboardIO);
  80. }
  81.  
  82. ReadItemString(Start,Len,string)
  83. int Start,Len;    /*Read a string from the clipboard and put it into*/
  84. char *string;     /*the specified string*/
  85. {
  86.    char WorkString[80];
  87.    char TmpString[80];
  88.  
  89.    strcpy(TmpString,"");
  90.    strcpy(WorkString,"");
  91.  
  92.    ReadString(WorkString,79);
  93.    strcpy(TmpString,string);
  94.    TmpString[Start]=NULL;
  95.    strcat(TmpString,WorkString);
  96.    strncat(TmpString,&string[Start],79-strlen(TmpString));
  97.  
  98.    TmpString[79]=NULL;
  99.    strcpy(string,TmpString);
  100. }
  101.  
  102. ReadString(string,len) /*Read a string from the Clipboard*/
  103. char *string;
  104. int len;
  105. {
  106.    char WorkingString[80];
  107.    int length;
  108.  
  109.    strcpy(WorkingString,"");
  110.  
  111.    length=ReadClip(&ClipboardIO,WorkingString,79);
  112.    if(!strncmp("FTXT",WorkingString,4))
  113.       return(FALSE);
  114.    strcpy(string,&WorkingString[20]);
  115.    string[20+len]=NULL;
  116.    return(TRUE);
  117.  
  118. }
  119.  
  120. ReadClip(ioreq,buf,bufsiz)
  121. register struct IOClipReq *ioreq;
  122. char *buf;     /*Read data from the Clipboard*/
  123. int bufsiz;
  124. {
  125.    int length;
  126.  
  127.    ioreq->io_Command=CMD_READ;
  128.    ioreq->io_Data=buf;
  129.    ioreq->io_Length=bufsiz-1;
  130.    ioreq->io_Offset=0;
  131.    ioreq->io_ClipID=0;
  132.  
  133.    DoIO(ioreq);
  134.  
  135.    length=ioreq->io_Actual;
  136.    *(buf+length)='\0';
  137.  
  138.    if(ioreq->io_Actual <(bufsiz-1))
  139.       {
  140.       ioreq->io_Command=CMD_READ;
  141.       ioreq->io_Length=1;
  142.       ioreq->io_Data=NULL;
  143.       DoIO(ioreq);
  144.       }
  145.    return(length);
  146. }
  147.  
  148. SnagBlock(Source,Last)  /*Copy block of lines into clip (non-clipboard)*/
  149. struct LineItem *Source,*Last;
  150. {
  151.    struct LineItem *Dest;
  152.  
  153.    ClipStart=ClipEnd=(struct LineItem *)NULL;
  154.  
  155.    ClipStart=ClipEnd=Dest=(struct LineItem *)InsertItem(NULL,NULL);
  156.    Dest->Level=Source->Level;
  157.    strcpy(Dest->Text,Source->Text);
  158.    Source=(struct LineItem *)Source->NextItem;
  159.  
  160.    while(Source != Last->NextItem)
  161.       {
  162.       ClipEnd=Dest=(struct LineItem *)InsertItem(NULL,Dest);
  163.       Dest->Level=Source->Level;
  164.       strcpy(Dest->Text,Source->Text);
  165.       Source=(struct LineItem *)Source->NextItem;
  166.       }
  167. }
  168.  
  169. AddBlock(Start) /*Insert a SnagBlocked item list into the main list*/
  170. struct LineItem *Start; /*starting at Start*/
  171. {
  172.    struct LineItem *Item,*Dest;
  173.    int TempX,TempY;
  174.    UBYTE OrigLevel;
  175.  
  176.    Item=(struct LineItem *)ClipStart;
  177.    Dest=(struct LineItem *)InsertItem(Start->NextItem,Start);
  178.    OrigLevel=Item->Level;
  179.    Dest->Level=5;
  180.    Dest->ItemNumber=Item->ItemNumber;
  181.    strcpy(Dest->Text,Item->Text);
  182.  
  183.    for(;Dest->Level > OrigLevel;Dest->Level--)
  184.       {
  185.       AddItem(Dest);
  186.       RemItem(Dest);
  187.       }
  188.    AddItem(Dest);
  189.    AddItem(Dest->NextItem);
  190.  
  191.    Item=(struct LineItem *)ClipStart->NextItem;
  192.    while(Item != NULL)
  193.       {
  194.       Dest=(struct LineItem *)InsertItem(Dest->NextItem,Dest);
  195.       Dest->Level=Item->Level;
  196.       Dest->ItemNumber=Item->ItemNumber;
  197.       strcpy(Dest->Text,Item->Text);
  198.       AddItem(Dest);
  199.       Item=(struct LineItem *)Item->NextItem;
  200.       }
  201.    TempY=CurY;
  202.    TempX=CurX;
  203.    PrintItemList(CurrentItem,CurY);
  204.    PlotCursor(TempX,TempY);
  205. }
  206.  
  207.  
  208.