home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games 1996 October / Amiga_Games_Extra_CD_10-96.bin / userbox / publicdomain / grabkey / source / gk_save.c < prev    next >
C/C++ Source or Header  |  1996-07-15  |  6KB  |  287 lines

  1. /*
  2. **    GrabKEY
  3. **
  4. **        © 1996 by Timo C. Nentwig
  5. **        All Rights Reserved !
  6. **
  7. **        Tcn@techbase.in-berlin.de
  8. **
  9. **
  10. */
  11.  
  12. /// #include
  13.  
  14. #include "gk_GST.h"
  15. #include "gk_Protos.h"
  16.  
  17. ///
  18. /// proto
  19.  
  20. proto  VOID __regargs    SaveClipboard    (Object *Image);
  21. proto  VOID __regargs    SaveImage        (Object *Image, const STRPTR FileName);
  22. proto  VOID __regargs    PrintImage       (Object *Image);
  23.  
  24. ///
  25.  
  26. static UWORD    Brush_Data [] =
  27. {
  28.  
  29.         // Plane 0
  30.  
  31.     0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0C00,
  32.     0x0000,0x0000,0x0000,0x0C00,0x0067,0xE7F0,0x0000,0x0C00,
  33.     0x0066,0x0600,0x0000,0x0C00,0x0067,0xC7C0,0x0060,0x0C00,
  34.     0x0066,0x0600,0x0180,0x0C00,0x0066,0x0600,0x0600,0x0C00,
  35.     0x0066,0x0600,0x1800,0x0C00,0x0000,0x0000,0x6000,0x0C00,
  36.     0x0000,0x0003,0x8000,0x0C00,0x0000,0x000E,0x0000,0x0C00,
  37.     0x0000,0x0038,0x0000,0x0C00,0x0000,0x00E0,0x0000,0x0C00,
  38.     0x0000,0x0380,0x0000,0x0C00,0x0000,0x0E00,0x0000,0x0C00,
  39.     0x0000,0x7800,0xAA00,0x0C00,0x0003,0xE0AA,0x8000,0x0C00,
  40.     0x00FE,0xAAA0,0x0000,0x0C00,0x0000,0x0000,0x0000,0x0C00,
  41.     0x0000,0x0000,0x0000,0x0C00,0x7FFF,0xFFFF,0xFFFF,0xFC00,
  42.  
  43.         // Plane 1
  44.  
  45.     0xFFFF,0xFFFF,0xFFFF,0xF800,0xD555,0x5555,0x5555,0x5000,
  46.     0xD555,0x5555,0x5555,0x5000,0xD510,0x1005,0x5555,0x5000,
  47.     0xD511,0x5155,0x5555,0x5000,0xD510,0x1015,0x5515,0x5000,
  48.     0xD511,0x5155,0x5455,0x5000,0xD511,0x5155,0x5155,0x5000,
  49.     0xD511,0x5155,0x4555,0x5000,0xD555,0x5555,0x1555,0x5000,
  50.     0xD555,0x5554,0x5555,0x5000,0xD555,0x5551,0x5555,0x5000,
  51.     0xD555,0x5545,0x5555,0x5000,0xD555,0x5515,0x5555,0x5000,
  52.     0xD555,0x5455,0x5555,0x5000,0xD555,0x5155,0x5555,0x5000,
  53.     0xD555,0x7D55,0xFF55,0x5000,0xD557,0xF5FF,0xD555,0x5000,
  54.     0xD5FF,0xFFF5,0x5555,0x5000,0xD555,0x5555,0x5555,0x5000,
  55.     0xD555,0x5555,0x5555,0x5000,0x8000,0x0000,0x0000,0x0000,
  56.  
  57. };
  58.  
  59. static struct    Image    Brush =
  60. {
  61.  
  62.     0, 0,              // Upper left corner
  63.     54, 22, 2,         // Width, Height, Depth
  64.     Brush_Data,        // Image data
  65.     0x0003, 0x0000,    // PlanePick, PlaneOnOff
  66.     NULL               // Next image
  67.  
  68. };
  69.  
  70. static STRPTR    Brush_Tools [] =
  71. {
  72.  
  73.     "FILETYPE=ILBM",
  74.     NULL
  75.  
  76. };
  77.  
  78. static struct    DiskObject    Icon =
  79. {
  80.  
  81.     WB_DISKMAGIC,                          // Magic Number
  82.     WB_DISKVERSION,                        // Version
  83.  
  84.     {                                      // Embedded Gadget Structure
  85.  
  86.         NULL,                              // Next Gadget Pointer
  87.         0, 0, 54, 23,                      // Left, Top, Width, Height
  88.         GFLG_GADGIMAGE | GADGBACKFILL,     // Flags
  89.         GACT_RELVERIFY | GACT_IMMEDIATE,   // Activation Flags
  90.         BOOLGADGET,                        // Gadget Type
  91.         (APTR) &Brush,                     // Render Image
  92.         NULL,                              // Select Image
  93.         NULL,                              // Gadget Text
  94.         NULL,                              // Mutual Exclude
  95.         NULL,                              // Special Info
  96.         0,                                 // Gadget ID
  97.         (APTR) 0x0001,                     // User Data (Revision)
  98.  
  99.     },
  100.  
  101.     WBPROJECT,                             // Icon Type
  102.     "MultiView",                           // Default Tool
  103.     Brush_Tools,                           // Tool Type Array
  104.     NO_ICON_POSITION,                      // Current X
  105.     NO_ICON_POSITION,                      // Current Y
  106.     NULL,                                  // Drawer Structure
  107.     NULL,                                  // Tool Window
  108.     4096                                   // Stack Size
  109.  
  110. };
  111.  
  112. /// SaveClipboard ()
  113.  
  114.     /*
  115.      *    FUNCTION    Save an Object * to clipboard.
  116.      *
  117.      *    NOTE
  118.      *
  119.      *    EXAMPLE     SaveClipboard ();
  120.      *
  121.      */
  122.  
  123.  
  124. VOID __regargs
  125. SaveClipboard (Object *Image)
  126. {
  127.  
  128.     if ( ! (DoMethod (Image, DTM_COPY, NULL)))
  129.     {
  130.  
  131.         ErrorRequest ("OK", LocaleString (MSG_ERR_SAVE_CLIPBOARD));
  132.  
  133.     }
  134.  
  135. }
  136.  
  137. ///
  138. /// SaveImage ()
  139.  
  140.     /*
  141.      *    FUNCTION    Save an Object * to a file.
  142.      *
  143.      *    NOTE
  144.      *
  145.      *    EXAMPLE     SaveImage (ImageObject, "path:file");
  146.      *
  147.      */
  148.  
  149.  
  150. VOID __regargs
  151. SaveImage (Object *Image, const STRPTR FileName)
  152. {
  153.  
  154.     BPTR    FileHandle;
  155.     UBYTE   TempName [TT_LEN];
  156.  
  157.     STRCPY (TempName, FileName);
  158.  
  159.     if (Set -> File . Count)
  160.     {
  161.  
  162.         ULONG    n = 0;
  163.  
  164.         do
  165.         {
  166.  
  167.             n++;
  168.             sprintf (TempName, "%s_%ld.IFF", FileName, n);
  169.  
  170.             if (n >= 1000)
  171.                 break;
  172.  
  173.         } while (Exists (TempName));
  174.  
  175.     }
  176.     else
  177.     {
  178.  
  179.         sprintf (TempName, "%s.IFF", FileName);
  180.  
  181.     }
  182.  
  183.     if (FileHandle = Open (TempName, MODE_NEWFILE))
  184.     {
  185.  
  186.         if (DoMethod (Image, DTM_WRITE, NULL, FileHandle, DTWM_IFF, NULL))
  187.         {
  188.  
  189.                 // Add an icon for picture
  190.  
  191.             if (Set -> File . Icon)
  192.             {
  193.  
  194.                 struct    DiskObject   *Default_Icon;
  195.  
  196.                     // Use default if possible
  197.  
  198.                 if (Default_Icon = GetDiskObject ("ENV:sys/def_ilbm"))
  199.                 {
  200.  
  201.                     Default_Icon -> do_CurrentX = Default_Icon -> do_CurrentY = NO_ICON_POSITION;
  202.  
  203.                     PutDiskObject (TempName, Default_Icon);
  204.  
  205.                     FreeDiskObject (Default_Icon);
  206.  
  207.                 }
  208.                 else
  209.                 {
  210.  
  211.                         // Use our icon
  212.  
  213.                     PutDiskObject (TempName, &Icon);
  214.  
  215.                 }
  216.  
  217.             }
  218.  
  219.             Close (FileHandle);
  220.  
  221.         }
  222.         else
  223.         {
  224.  
  225.             Close      (FileHandle);
  226.             DeleteFile (TempName);
  227.             ErrorRequest ("OK", LocaleString (MSG_ERR_SAVE_FILE), TempName);
  228.  
  229.         }
  230.  
  231.     }
  232.     else
  233.     {
  234.  
  235.         PrintFault (IoErr(), PRG_TITLE);
  236.  
  237.     }
  238.  
  239. }
  240.  
  241. ///
  242. /// PrintImage ()
  243.  
  244.     /*
  245.      *    FUNCTION    Print an Object *.
  246.      *
  247.      *    NOTE
  248.      *
  249.      *    EXAMPLE     PrintImage (Image);
  250.      *
  251.      */
  252.  
  253.  
  254. VOID __regargs
  255. PrintImage (Object *Image)
  256. {
  257.  
  258.     struct    MsgPort   *PrinterPort;
  259.  
  260.     if (PrinterPort = CreateMsgPort())
  261.     {
  262.  
  263.         union    printerIO   *PrinterIO;
  264.  
  265.         if (PrinterIO =  (union printerIO *) CreateIORequest (PrinterPort, sizeof (union printerIO)))
  266.         {
  267.  
  268.             if ( ! (OpenDevice ("printer.device", 0, (struct IORequest *) PrinterIO, NULL)))
  269.             {
  270.  
  271.                 DoMethod (Image, DTM_PRINT, NULL, PrinterIO, NULL);
  272.                 CloseDevice ((struct IORequest *) PrinterIO);
  273.  
  274.             }
  275.  
  276.             DeleteIORequest ((struct IORequest *) PrinterIO);
  277.  
  278.         }
  279.  
  280.         DeleteMsgPort (PrinterPort);
  281.  
  282.     }
  283.  
  284. }
  285.  
  286. ///
  287.