#include <exec/types.h>
#include <exec/memory.h>
#include <libraries/dos.h>
#include <workbench/workbench.h>
#include <workbench/startup.h>

#include <clib/alib_protos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/icon_protos.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct Library *IconBase=NULL;
void sr(char *s);

char source[200];
char destination[200];
char itype[200];
UBYTE tooltype[40][80];
char toolfilename[200];
void InitTypes(char *s);
 UBYTE *tools[40];
 
main(int argc,char *argv[])
{
  char *s;
  int i;
  UBYTE mytype;
  struct DiskObject *src;
  struct DiskObject *dst;
  struct Gadget *srcgad;
  struct DiskObject new;
  BOOL success=FALSE;
  for(i=0;i<39;i++)
     tools[i]=&tooltype[i];
  if(argc!=5)
  {
     printf("NewObj version 1.0, written by Joseph Hodge\n");
     printf("usage: NewObj <source.info> <destination.info> <type> [toolfilename]\n");
     printf("   ie: NewObj Serial.info BBS:Node1/Serial.info DRAWER RAM:tools\n");
     printf("\n");
     printf("types: DISK\n");
     printf("       DRAWER\n");
     printf("       TOOL\n");
     printf("       PROJECT\n");
     printf("\n\n");
     exit(0);
  }
  strcpy(source,argv[1]);
  strcpy(destination,argv[2]);
  sr(source);
  sr(destination);
  strcpy(itype,argv[3]);
  sr(itype);
  mytype=WBTOOL;
  if(!strnicmp(itype,"DRAWER",6)) mytype=WBDRAWER;
  if(!strnicmp(itype,"DISK",4)) mytype=WBDISK;
  if(!strnicmp(itype,"TOOL",4)) mytype=WBTOOL;
  if(!strnicmp(itype,"PROJECT",7)) mytype=WBPROJECT;

  strcpy(toolfilename,argv[4]);
  sr(toolfilename);
  InitTypes(toolfilename);
  i=strlen(source)-1;
  while(i>=0)
  {
     if(source[i]=='.') break;
     i--;
  }
  if(i) source[i]='\0';
i=strlen(destination)-1;
  while(i>=0)
  {
     if(destination[i]=='.') break;
     i--;
  }
  if(i) destination[i]='\0';

  IconBase=OpenLibrary("icon.library",0L);
  if(src=GetDiskObject(source))
  {

    srcgad=(struct Gadget *)&src->do_Gadget;
       CopyMem(src,&new,sizeof(struct DiskObject));
       new.do_Gadget.Width=srcgad->Width;
       new.do_Gadget.Height=srcgad->Height;
       new.do_Gadget.Flags=srcgad->Flags;
       new.do_Gadget.Activation=srcgad->Activation;
       new.do_Gadget.GadgetType=srcgad->GadgetType;
       new.do_Gadget.GadgetRender=srcgad->GadgetRender;
       new.do_Gadget.SelectRender=srcgad->SelectRender;
       InitTypes(toolfilename);
       new.do_ToolTypes=(APTR)tools;
       new.do_Type= mytype;
       new.do_CurrentX=NO_ICON_POSITION;
       new.do_CurrentY=NO_ICON_POSITION;
       PutDiskObject(destination,(struct DiskObject *)&new);
    FreeDiskObject(src);
  }
  CloseLibrary(IconBase);
  exit(0);
}
void InitTypes(char *s)
{
   FILE *fi;
   register int i=0;
   int j=0;
   char image[100];
   fi=fopen(s,"r");
   if(fi!=NULL)
   {
     while(fgets(image,80,fi)!=NULL && i<39)
     {
        sr(image); strcpy(&tooltype[i][0],image);
        i++;
     }
     fclose(fi);
   }
   tools[i]=NULL;
}
void sr(char *s)
{
   register int i;
   i=strlen(s)-1;
   while(i>-1)
   {
     if(*(s+i)<=32) *(s+i)='\0'; else break;
     i--;
   }
}
