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 >
Wrap
C/C++ Source or Header
|
1996-07-15
|
6KB
|
287 lines
/*
** GrabKEY
**
** © 1996 by Timo C. Nentwig
** All Rights Reserved !
**
** Tcn@techbase.in-berlin.de
**
**
*/
/// #include
#include "gk_GST.h"
#include "gk_Protos.h"
///
/// proto
proto VOID __regargs SaveClipboard (Object *Image);
proto VOID __regargs SaveImage (Object *Image, const STRPTR FileName);
proto VOID __regargs PrintImage (Object *Image);
///
static UWORD Brush_Data [] =
{
// Plane 0
0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0C00,
0x0000,0x0000,0x0000,0x0C00,0x0067,0xE7F0,0x0000,0x0C00,
0x0066,0x0600,0x0000,0x0C00,0x0067,0xC7C0,0x0060,0x0C00,
0x0066,0x0600,0x0180,0x0C00,0x0066,0x0600,0x0600,0x0C00,
0x0066,0x0600,0x1800,0x0C00,0x0000,0x0000,0x6000,0x0C00,
0x0000,0x0003,0x8000,0x0C00,0x0000,0x000E,0x0000,0x0C00,
0x0000,0x0038,0x0000,0x0C00,0x0000,0x00E0,0x0000,0x0C00,
0x0000,0x0380,0x0000,0x0C00,0x0000,0x0E00,0x0000,0x0C00,
0x0000,0x7800,0xAA00,0x0C00,0x0003,0xE0AA,0x8000,0x0C00,
0x00FE,0xAAA0,0x0000,0x0C00,0x0000,0x0000,0x0000,0x0C00,
0x0000,0x0000,0x0000,0x0C00,0x7FFF,0xFFFF,0xFFFF,0xFC00,
// Plane 1
0xFFFF,0xFFFF,0xFFFF,0xF800,0xD555,0x5555,0x5555,0x5000,
0xD555,0x5555,0x5555,0x5000,0xD510,0x1005,0x5555,0x5000,
0xD511,0x5155,0x5555,0x5000,0xD510,0x1015,0x5515,0x5000,
0xD511,0x5155,0x5455,0x5000,0xD511,0x5155,0x5155,0x5000,
0xD511,0x5155,0x4555,0x5000,0xD555,0x5555,0x1555,0x5000,
0xD555,0x5554,0x5555,0x5000,0xD555,0x5551,0x5555,0x5000,
0xD555,0x5545,0x5555,0x5000,0xD555,0x5515,0x5555,0x5000,
0xD555,0x5455,0x5555,0x5000,0xD555,0x5155,0x5555,0x5000,
0xD555,0x7D55,0xFF55,0x5000,0xD557,0xF5FF,0xD555,0x5000,
0xD5FF,0xFFF5,0x5555,0x5000,0xD555,0x5555,0x5555,0x5000,
0xD555,0x5555,0x5555,0x5000,0x8000,0x0000,0x0000,0x0000,
};
static struct Image Brush =
{
0, 0, // Upper left corner
54, 22, 2, // Width, Height, Depth
Brush_Data, // Image data
0x0003, 0x0000, // PlanePick, PlaneOnOff
NULL // Next image
};
static STRPTR Brush_Tools [] =
{
"FILETYPE=ILBM",
NULL
};
static struct DiskObject Icon =
{
WB_DISKMAGIC, // Magic Number
WB_DISKVERSION, // Version
{ // Embedded Gadget Structure
NULL, // Next Gadget Pointer
0, 0, 54, 23, // Left, Top, Width, Height
GFLG_GADGIMAGE | GADGBACKFILL, // Flags
GACT_RELVERIFY | GACT_IMMEDIATE, // Activation Flags
BOOLGADGET, // Gadget Type
(APTR) &Brush, // Render Image
NULL, // Select Image
NULL, // Gadget Text
NULL, // Mutual Exclude
NULL, // Special Info
0, // Gadget ID
(APTR) 0x0001, // User Data (Revision)
},
WBPROJECT, // Icon Type
"MultiView", // Default Tool
Brush_Tools, // Tool Type Array
NO_ICON_POSITION, // Current X
NO_ICON_POSITION, // Current Y
NULL, // Drawer Structure
NULL, // Tool Window
4096 // Stack Size
};
/// SaveClipboard ()
/*
* FUNCTION Save an Object * to clipboard.
*
* NOTE
*
* EXAMPLE SaveClipboard ();
*
*/
VOID __regargs
SaveClipboard (Object *Image)
{
if ( ! (DoMethod (Image, DTM_COPY, NULL)))
{
ErrorRequest ("OK", LocaleString (MSG_ERR_SAVE_CLIPBOARD));
}
}
///
/// SaveImage ()
/*
* FUNCTION Save an Object * to a file.
*
* NOTE
*
* EXAMPLE SaveImage (ImageObject, "path:file");
*
*/
VOID __regargs
SaveImage (Object *Image, const STRPTR FileName)
{
BPTR FileHandle;
UBYTE TempName [TT_LEN];
STRCPY (TempName, FileName);
if (Set -> File . Count)
{
ULONG n = 0;
do
{
n++;
sprintf (TempName, "%s_%ld.IFF", FileName, n);
if (n >= 1000)
break;
} while (Exists (TempName));
}
else
{
sprintf (TempName, "%s.IFF", FileName);
}
if (FileHandle = Open (TempName, MODE_NEWFILE))
{
if (DoMethod (Image, DTM_WRITE, NULL, FileHandle, DTWM_IFF, NULL))
{
// Add an icon for picture
if (Set -> File . Icon)
{
struct DiskObject *Default_Icon;
// Use default if possible
if (Default_Icon = GetDiskObject ("ENV:sys/def_ilbm"))
{
Default_Icon -> do_CurrentX = Default_Icon -> do_CurrentY = NO_ICON_POSITION;
PutDiskObject (TempName, Default_Icon);
FreeDiskObject (Default_Icon);
}
else
{
// Use our icon
PutDiskObject (TempName, &Icon);
}
}
Close (FileHandle);
}
else
{
Close (FileHandle);
DeleteFile (TempName);
ErrorRequest ("OK", LocaleString (MSG_ERR_SAVE_FILE), TempName);
}
}
else
{
PrintFault (IoErr(), PRG_TITLE);
}
}
///
/// PrintImage ()
/*
* FUNCTION Print an Object *.
*
* NOTE
*
* EXAMPLE PrintImage (Image);
*
*/
VOID __regargs
PrintImage (Object *Image)
{
struct MsgPort *PrinterPort;
if (PrinterPort = CreateMsgPort())
{
union printerIO *PrinterIO;
if (PrinterIO = (union printerIO *) CreateIORequest (PrinterPort, sizeof (union printerIO)))
{
if ( ! (OpenDevice ("printer.device", 0, (struct IORequest *) PrinterIO, NULL)))
{
DoMethod (Image, DTM_PRINT, NULL, PrinterIO, NULL);
CloseDevice ((struct IORequest *) PrinterIO);
}
DeleteIORequest ((struct IORequest *) PrinterIO);
}
DeleteMsgPort (PrinterPort);
}
}
///