/* $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 #include #include #include /* 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 \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); }