home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 2 / AUCD2.iso / program / vista.arc / c / datasave < prev    next >
Text File  |  1996-02-01  |  4KB  |  105 lines

  1. // **************************************************************************
  2. //                     Copyright 1996 David Allison
  3. //
  4. //             VV    VV    IIIIII     SSSSS     TTTTTT       AA
  5. //             VV    VV      II      SS           TT       AA  AA
  6. //             VV    VV      II        SSSS       TT      AA    AA
  7. //              VV  VV       II           SS      TT      AAAAAAAA
  8. //                VV       IIIIII     SSSS        TT      AA    AA
  9. //
  10. //                    MULTI-THREADED C++ WIMP CLASS LIBRARY
  11. //                                for RISC OS
  12. // **************************************************************************
  13. //
  14. //             P U B L I C    D O M A I N    L I C E N C E
  15. //             -------------------------------------------
  16. //
  17. //     This library is copyright. You may not sell the library for
  18. //     profit, but you may sell products which use it providing
  19. //     those products are presented as executable code and are not
  20. //     libraries themselves.  The library is supplied without any
  21. //     warranty and the copyright owner cannot be held responsible for
  22. //     damage resulting from failure of any part of this library.
  23. //
  24. //          See the User Manual for details of the licence.
  25. //
  26. // *************************************************************************
  27.  
  28.  
  29. //
  30. //  datasave protocol
  31. //
  32.  
  33. #include "Vista:task.h"
  34. #include "Vista:datasave.h"
  35. #include <string.h>
  36.  
  37. DataSave::DataSave(Task *task)
  38.    : Channel (task, "DataSave")
  39.    {
  40.    task->add_receiver (this, Task::Message_DataSave) ;
  41.    task->add_receiver (this, Task::Message_DataLoad) ;
  42.    task->add_receiver (this, Task::Message_DataSaveAck) ;
  43.    task->add_receiver (this, Task::Message_DataLoadAck) ;
  44.    my_ref = 0 ;
  45.    }
  46.  
  47. DataSave::~DataSave()
  48.    {
  49.    task->remove_receiver (this, Task::Message_DataSave) ;
  50.    task->remove_receiver (this, Task::Message_DataLoad) ;
  51.    task->remove_receiver (this, Task::Message_DataSaveAck) ;
  52.    task->remove_receiver (this, Task::Message_DataLoadAck) ;
  53.    }
  54.  
  55. void DataSave::save (int window, int icon, int x, int y, char *leaf)
  56.    {
  57.    throw ("Attempt to save using raw DataSave class - derive a new class") ;
  58.    }
  59.  
  60. void DataSave::save (char *path)
  61.    {
  62.    throw ("Attempt to save using raw DataSave class - derive a new class") ;
  63.    }
  64.  
  65.  
  66. int DataSave::accept (int your_ref)
  67.    {
  68.    return my_ref == your_ref ;
  69.    }
  70.  
  71.  
  72. void DataSave::datasave (int window, int icon, int x, int y, int est_size, int filetype, char *leaf)
  73.    {
  74.    int buf[256/sizeof(int)] ;
  75.    buf[0] = window ;
  76.    buf[1] = icon ;
  77.    buf[2] = x ;
  78.    buf[3] = y ;
  79.    buf[4] = est_size ;
  80.    buf[5] = filetype ;
  81.    strcpy ((char*)&buf[6], leaf) ;
  82.    int len = strlen (leaf) + 25 ;
  83.    task->send_message (Task::ESEND, Task::Message_DataSave, window, my_ref, 0, len,buf) ;
  84.    }
  85.  
  86. void DataSave::dataload (int task, int my_ref, int your_ref, int data_length, void *data)
  87.    {
  88.    this->task->send_message (Task::ESEND, Task::Message_DataLoad, task, my_ref, your_ref, data_length, data) ;
  89.    this->my_ref = 0 ;         // reset reference
  90.    }
  91.  
  92. void DataSave::datasaveack (int my_ref, saveackdata *data, char *path)
  93.    {
  94.    strcpy (data->pathname, path) ;
  95.    int len = strlen (path) + 25 ;
  96.    task->send_message (Task::ESEND, Task::Message_DataSaveAck, data->window, my_ref, this->my_ref, len, data) ;
  97.    }
  98.  
  99. void DataSave::dataloadack (int task, int my_ref, int your_ref, int data_length, void *data)
  100.    {
  101.    this->task->send_message (Task::ESEND, Task::Message_DataLoadAck, task, my_ref, your_ref, data_length, data) ;
  102.    this->my_ref = 0 ;         // reset reference
  103.    }
  104.  
  105.