home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
454.lha
/
Icon2C
/
Icon2C.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-12-07
|
9KB
|
327 lines
/* $Revision Header * Header built automatically - do not edit! *************
*
* (C) Copyright 1990 by MXM
*
* Name .....: RemapIcon.c
* Created ..: Tuesday 26-Jun-90 14:19
* Revision .: 1
*
* Date Author Comment
* ========= ======== ====================
* 26-Jun-90 Olsen Created this file!
*
* $Revision Header ********************************************************/
/* Included header files. */
#define __NO_PRAGMAS 1
#include <workbench/workbench.h>
#include <libraries/dosextens.h>
#include <libraries/arpbase.h>
#include <functions.h>
/* Arp cli variables. */
char *CLI_Template = "From,To,I=Info/S";
char *CLI_Help = "\nUsage: \33[1mIcon2C\33[0m [Source file name without \".info\"] [Destination file] [Info]\n";
/* Argument vector offsets. */
#define ARG_FROM 1
#define ARG_TO 2
#define ARG_INFO 3
/* Icon library base. */
struct Library *IconBase;
/* Image2C(struct Image *IconImage,char *Name,BYTE Number,BPTR ImageFile):
*
* Converts an image into 'C' sourcecode.
*/
VOID
Image2C(struct Image *IconImage,char *Name,BYTE Number,BPTR ImageFile)
{
SHORT i,j,LastWord;
USHORT *ImageData = IconImage -> ImageData;;
/* Remember last word to be written. */
LastWord = ((IconImage -> Width + 15) >> 4) * IconImage -> Height;
/* Write the header. */
FPrintf(ImageFile,"USHORT %s%ldData[%ld] =\n{",Name,Number,LastWord * IconImage -> Depth);
/* Write the bitmap information contained in the
* single bit planes.
*/
for(j = 0 ; j < IconImage -> Depth ; j++)
{
for(i = 0 ; i < LastWord ; i++)
{
if(!(i % 8))
FPrintf(ImageFile,"\n\t");
FPrintf(ImageFile,"0x%04lx",*ImageData++);
if(i != LastWord - 1)
FPrintf(ImageFile,",");
}
if(j != IconImage -> Depth - 1)
FPrintf(ImageFile,",\n");
}
/* Add the image structure itself. */
FPrintf(ImageFile,"\n};\n\n");
FPrintf(ImageFile,"struct Image %s%ldImage =\n{\n",Name,Number);
FPrintf(ImageFile,"\t%ld,%ld,\n",IconImage -> LeftEdge,IconImage -> TopEdge);
FPrintf(ImageFile,"\t%ld,%ld,%ld,\n",IconImage -> Width,IconImage -> Height,IconImage -> Depth);
FPrintf(ImageFile,"\t(USHORT *)&%s%ldData[0],\n",Name,Number);
FPrintf(ImageFile,"\t0x%02lx,0x00,\n",(1 << IconImage -> Depth) - 1);
FPrintf(ImageFile,"\t(struct Image *)NULL\n");
FPrintf(ImageFile,"};\n\n");
}
/* Icon2C(struct DiskObject *Icon,char *Name,BPTR IconFile):
*
* Convert an icon file into 'C' sourcecode, creates
* image run dumps and associated icon structures.
*/
VOID
Icon2C(struct DiskObject *Icon,char *Name,BPTR IconFile)
{
STATIC char *WB_Types[7] =
{
"WBDISK",
"WBDRAWER",
"WBTOOL",
"WBPROJECT",
"WBGARBAGE",
"WBDEVICE",
"WBKICK"
};
struct DrawerData *Drawer = Icon -> do_DrawerData;
char **ToolTypes = Icon -> do_ToolTypes;
Puts("\n\n\tCreating icon image...");
/* Create the header. */
FPrintf(IconFile,"#include <workbench/workbench.h>\n\n");
/* Create the first icon image. */
Image2C((struct Image *)Icon -> do_Gadget . GadgetRender,Name,1,IconFile);
/* Create alternate icon image (if present). */
if(Icon -> do_Gadget . Flags & GADGHIMAGE)
{
Puts("\tCreating alternate icon image...");
Image2C((struct Image *)Icon -> do_Gadget . SelectRender,Name,2,IconFile);
}
/* Create the drawer data if neccessary. */
if(Drawer && (Icon -> do_Type == WBDISK || Icon -> do_Type == WBDRAWER || Icon -> do_Type == WBGARBAGE))
{
Puts("\tCreating icon drawer data...");
FPrintf(IconFile,"struct DrawerData %sDrawer =\n{\n",Name);
FPrintf(IconFile,"\t%ld,%ld,\n",Drawer -> dd_NewWindow . LeftEdge,Drawer -> dd_NewWindow . TopEdge);
FPrintf(IconFile,"\t%ld,%ld,\n",Drawer -> dd_NewWindow . Width,Drawer -> dd_NewWindow . Height);
FPrintf(IconFile,"\t%ld,%ld,\n",Drawer -> dd_NewWindow . DetailPen,Drawer -> dd_NewWindow . BlockPen);
FPrintf(IconFile,"\t0x%08lx,\n",Drawer -> dd_NewWindow . IDCMPFlags);
FPrintf(IconFile,"\t0x%08lx,\n",Drawer -> dd_NewWindow . Flags);
FPrintf(IconFile,"\t(struct Gadget *)NULL,\n");
FPrintf(IconFile,"\t(struct Image *)NULL,\n");
if(Drawer -> dd_NewWindow . Title)
FPrintf(IconFile,"\t(UBYTE *)\"%s\",\n",Drawer -> dd_NewWindow . Title);
else
FPrintf(IconFile,"\t(UBYTE *)NULL,\n");
FPrintf(IconFile,"\t(struct Screen *)NULL,\n");
FPrintf(IconFile,"\t(struct BitMap *)NULL,\n");
FPrintf(IconFile,"\t%ld,%ld,\n",Drawer -> dd_NewWindow . MinWidth,Drawer -> dd_NewWindow . MinHeight);
FPrintf(IconFile,"\t%ld,%ld,\n",Drawer -> dd_NewWindow . MaxWidth,Drawer -> dd_NewWindow . MaxHeight);
FPrintf(IconFile,"\t%ld,\n\n",Drawer -> dd_NewWindow . Type);
FPrintf(IconFile,"\t%ld,\n",Drawer -> dd_CurrentX);
FPrintf(IconFile,"\t%ld,\n",Drawer -> dd_CurrentY);
FPrintf(IconFile,"#ifdef OLDDRAWERDATAFILESIZE\n");
FPrintf(IconFile,"\t0x%08lx,\n",Drawer -> dd_Flags);
FPrintf(IconFile,"\t0x%04lx\n",Drawer -> dd_ViewModes);
FPrintf(IconFile,"#endif\t/* OLDDRAWERDATAFILESIZE */\n");
FPrintf(IconFile,"};\n\n");
}
/* Create icon tool types. */
if(ToolTypes && *ToolTypes)
{
Puts("\tCreating icon tool types...");
FPrintf(IconFile,"char *%sToolTypes[] =\n{\n",Name);
while(*ToolTypes)
FPrintf(IconFile,"\t\"%s\",\n",*ToolTypes++);
FPrintf(IconFile,"\tNULL\n};\n\n");
}
Puts("\tCreating icon object...");
/* Create the icon structure. */
FPrintf(IconFile,"struct DiskObject %sIcon =\n{\n",Name);
FPrintf(IconFile,"\tWB_DISKMAGIC,\n");
FPrintf(IconFile,"\tWB_DISKVERSION,\n\n");
FPrintf(IconFile,"\t(struct Gadget *)NULL,\n");
FPrintf(IconFile,"\t%ld,%ld,\n",Icon -> do_Gadget . LeftEdge,Icon -> do_Gadget . TopEdge);
FPrintf(IconFile,"\t%ld,%ld,\n",Icon -> do_Gadget . Width,Icon -> do_Gadget . Height);
FPrintf(IconFile,"\t0x%04lx,\n",Icon -> do_Gadget . Flags);
FPrintf(IconFile,"\t0x%04lx,\n",Icon -> do_Gadget . Activation);
FPrintf(IconFile,"\t0x%04lx,\n",Icon -> do_Gadget . GadgetType);
FPrintf(IconFile,"\t(APTR)&%s1Image,\n",Name);
/* Did it have an alternate image? */
if(Icon -> do_Gadget . Flags & GADGHIMAGE)
FPrintf(IconFile,"\t(APTR)&%s2Image,\n",Name);
else
FPrintf(IconFile,"\t(APTR)NULL,\n");
FPrintf(IconFile,"\t(struct IntuiText *)NULL,\n");
FPrintf(IconFile,"\tNULL,\n");
FPrintf(IconFile,"\t(APTR)NULL,\n");
FPrintf(IconFile,"\tNULL,\n");
FPrintf(IconFile,"\t(APTR)NULL,\n\n");
FPrintf(IconFile,"\t%s,\n",WB_Types[Icon -> do_Type - 1]);
/* Create default tool. */
if(Icon -> do_DefaultTool)
FPrintf(IconFile,"\t\"%s\",\n",Icon -> do_DefaultTool);
else
FPrintf(IconFile,"\t(char *)NULL,\n");
/* Add the tool types if necessary. */
if(Icon -> do_ToolTypes && *Icon -> do_ToolTypes)
FPrintf(IconFile,"\t%sToolTypes,\n",Name);
else
FPrintf(IconFile,"\tNULL,\n");
FPrintf(IconFile,"\tNO_ICON_POSITION,\n");
FPrintf(IconFile,"\tNO_ICON_POSITION,\n");
/* Add the drawerdata. */
if(Drawer && (Icon -> do_Type == WBDISK || Icon -> do_Type == WBDRAWER || Icon -> do_Type == WBGARBAGE))
FPrintf(IconFile,"\t(struct DrawerData *)&%sDrawer,\n",Name);
else
FPrintf(IconFile,"\t(struct DrawerData *)NULL,\n");
if(Icon -> do_ToolWindow)
FPrintf(IconFile,"\t\"%s\",\n",Icon -> do_ToolWindow);
else
FPrintf(IconFile,"\t(char *)NULL,\n");
FPrintf(IconFile,"\t%ld\n};\n\n",Icon -> do_StackSize);
/* At last, add a macro to save the icon. */
FPrintf(IconFile,"#define Save%sIcon(Destination) PutDiskObject(Destination,&%sIcon)\n",Name,Name);
}
/* main(int argc,char **argv):
*
* The main program.
*/
VOID
main(int argc,char **argv)
{
BYTE ErrorCode = RETURN_FAIL;
Puts("\n\33[1m\33[33mIcon2C V1.2 \33[0m\33[31mCopyright © 1990 by MXM, all rights reserved\n");
if(argv[ARG_INFO])
{
Puts("This program converts icon info files into standard 'C'");
Puts("source code.\n");
Puts("Author: Olaf Barthel, MXM");
Puts(" Brabeckstrasse 35");
Puts(" D-3000 Hannover 71\n");
Puts(" Federal Republic of Germany\n");
Puts("Written at Hannover, Monday 25-Jun-90.\n");
Puts("This program is Share-Ware, if you like it and use it");
Puts("frequently a small donation will entitle you to receive");
Puts("updates and new programs from MXM.\n");
exit(RETURN_OK);
}
if(!argv[ARG_FROM] || !argv[ARG_TO])
{
Puts(CLI_Help);
exit(RETURN_WARN);
}
Printf("Opening icon.library... ");
if(IconBase = (struct Library *)ArpOpenLibrary("icon.library",0))
{
struct DiskObject *IconData;
BPTR IconFile;
Printf(" Reading icon file... ");
if(IconData = GetDiskObject(argv[ARG_FROM]))
{
Printf("creating output file... ");
if(IconFile = ArpOpen(argv[ARG_TO],MODE_NEWFILE))
{
Icon2C(IconData,BaseName(argv[ARG_FROM]),IconFile);
ErrorCode = RETURN_OK;
Puts("\nIcon file created OK!\n");
}
else
Printf("\33[1mERROR\33[0m (%ld): cannot create output file!\a\n",IoErr());
FreeDiskObject(IconData);
}
else
Printf("\33[1mERROR\33[0m (%ld): cannot read icon file!\a\n",IoErr());
}
else
Printf("\33[1mERROR\33[0m (%ld): cannot open icon.library!\a\n",IoErr());
exit(ErrorCode);
}