/* prf_info.c */
/* v 091 */

#include "prf.h"
#include <dos/datetime.h>

long __regargs PrintProgInfo(struct prf_info *info,UBYTE *name)
{
 long rc = CMD_NEUTRAL;
 struct FileInfoBlock *fib;
 BPTR lock;
 FILE *printer;
 struct DateTime dt;
 UBYTE d[40],t[40];
 dt.dat_StrDate = d;
 dt.dat_StrTime = t;
 dt.dat_StrDay  = NULL;
 dt.dat_Format  = FORMAT_DOS;
 if(fib = (struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL))
 {
  if(lock = Lock(name,ACCESS_READ))
  {
   Examine(lock,fib);
   if(printer = fopen("prt:","w"))
   {
    PrintSettings(info,printer);
    BuildStatusline(info,name);
    if(*(info->Statusline)) fprintf(printer,"%s\n",info->Statusline);
    if(*(info->Headline)) fprintf(printer,"%s\n",info->Headline);
    fprintf(printer,"\n" T_PROGINFO_HEADER " %s\n",name);
    fprintf(printer,T_PROGINFO_CHANGED);
    memcpy(&dt.dat_Stamp,&fib->fib_Date,sizeof(struct DateStamp));
    DateToStr(&dt);
    fprintf(printer," %s %s\n",d,t);
    fprintf(printer,T_PROGINFO_BYTES  ":%ld\n",fib->fib_Size);
    fprintf(printer,T_PROGINFO_BLOCKS ":%ld\n",fib->fib_NumBlocks);
    fprintf(printer,T_PROGINFO_BITS_H "\n");
    if(!(fib->fib_Protection & FIBF_READ   ))fprintf(printer,T_PROGINFO_R "\n");
     else if(fib->fib_Protection & FIBF_READ   )fprintf(printer,T_NOT T_PROGINFO_R "\n");
    if(!(fib->fib_Protection & FIBF_WRITE  ))fprintf(printer,T_PROGINFO_W "\n");
     else if(fib->fib_Protection & FIBF_WRITE  )fprintf(printer,T_NOT T_PROGINFO_W "\n");
    if(!(fib->fib_Protection & FIBF_DELETE ))fprintf(printer,T_PROGINFO_D "\n");
      else if(fib->fib_Protection & FIBF_DELETE )fprintf(printer,T_NOT T_PROGINFO_D "\n");
    if(!(fib->fib_Protection & FIBF_ARCHIVE))fprintf(printer,T_PROGINFO_A "\n");
     else if(fib->fib_Protection & FIBF_ARCHIVE)fprintf(printer,T_NOT T_PROGINFO_A "\n");
    if(!(fib->fib_Protection & FIBF_PURE   ))fprintf(printer,T_NOT T_PROGINFO_P "\n");
     else if(fib->fib_Protection & FIBF_PURE   )fprintf(printer, T_PROGINFO_P "\n");
    if(*fib->fib_Comment)fprintf(printer,T_PROGINFO_FILENOTE ": %s\n",fib->fib_Comment);
    if(*(info->Footline))fprintf(printer,"%s\n",info->Footline);
    fprintf(printer,T_PROGINFO_FOOT "%s \n\n",name);
    if(info->flags.ff) fprintf(printer,"\f");
    fclose(printer);
   }
   UnLock(lock);
  }
  FreeDosObject(DOS_FIB,(APTR)fib);
 }
 return (rc);
}

long __regargs PrintIconInfo(struct prf_info *info,UBYTE *name)
{
 long rc = CMD_NEUTRAL;
 struct DiskObject *dobj;
 char buffer[30];
 char filename[STR_SIZE];
 FILE *printer;
 if(!stricmp(name + (strlen(name) - 5), ".info"))
   stccpy(filename,name,strlen(name) - 4);
 else strcpy(filename,name);
 if(dobj = GetDiskObject(filename))
 {
  if(printer = fopen("prt:","w"))
  {
   PrintSettings(info,printer);
   BuildStatusline(info,name);
   if(*(info->Statusline)) fprintf(printer,"%s\n",info->Statusline);
   if(*(info->Headline)) fprintf(printer,"%s\n",info->Headline);
   fprintf(printer,"\n" T_ICONINFO_HEADER "%s\n",name);
   switch(dobj->do_Type)
   {
    case WBDISK     : strcpy(buffer,ITYPE_DISK)     ;break;
    case WBDRAWER   : strcpy(buffer,ITYPE_DRAWER)   ;break;
    case WBTOOL     : strcpy(buffer,ITYPE_TOOL)     ;break;
    case WBPROJECT  : strcpy(buffer,ITYPE_PROJECT)  ;break;
    case WBGARBAGE  : strcpy(buffer,ITYPE_GARBAGE)  ;break;
    case WBDEVICE   : strcpy(buffer,ITYPE_DEVICE)   ;break;
    case WBAPPICON  : strcpy(buffer,ITYPE_APP)      ;break;
    default         : strcpy(buffer,ITYPE_UNKNOWN)  ;break;
   }
   fprintf(printer, T_ICONINFO_TTYPE " %s\n",buffer);
   if(dobj->do_Type == WBTOOL)
   {
    fprintf(printer, T_ICONINFO_STACK " %ld\n",dobj->do_StackSize);
   }
   if(*dobj->do_DefaultTool)
    fprintf(printer, T_ICONINFO_DEFTOOL " %s\n",dobj->do_DefaultTool);
   if(*dobj->do_ToolTypes[0])
   {
    fprintf(printer, T_ICONINFO_TOOLTYPE "\n");
    while(*dobj->do_ToolTypes)
    {
     fprintf(printer,"%s\n",*dobj->do_ToolTypes);
     *(dobj->do_ToolTypes)++;
    }
   }
   fprintf(printer,"\n" T_ICONINFO_FOOT   " %s \n\n",name);
   if(*(info->Footline))fprintf(printer,"%s\n",info->Footline);
   if(info->flags.ff) fprintf(printer,"\f");
   fclose(printer);
  }
  FreeDiskObject(dobj);
 }
 return (rc);
}

