/*

  ***********************************************************************

                          FreeSpace V1.0 by Hydra

  ***********************************************************************

*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <proto/dddoor.h>
#include <libraries/dddoor.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <daydream.h>
#include <exec/memory.h>
#include <dos.h>

struct	Library	*DDBase;
struct	DIFace	*d;
struct	DDPointers *Pointers;

void HandleGraph(UWORD blocks, char * Destbuf);
void HandleGraph2(UWORD blocks, char * Destbuf);

char BUFFER[2048];

int main(int argc, char *argv[])
{
  struct InfoData info;
  BPTR mylock;
  char sibilist[60];

	DDBase=(struct Library *)OpenLibrary("dreamdoor.library",1);
	if(DDBase==NULL)
	{
		printf("Needs DreamDoor.library V1.00+ to run\n");
		exit(10);
	}
	d=InitDoor(argv[1]);		/* Establish link with DD */

	if(d==NULL)
        {
		printf("Hey Asswipe, this program requires DayDream BBS!\n");
		CloseLibrary(DDBase);
	        exit(10);
        }

	Pointers = AllocMem(sizeof(struct DDPointers),MEMF_PUBLIC|MEMF_CLEAR);
	InquirePointers(d,Pointers);

  if (Pointers->dp_CurrDisplay->DISPLAY_ATTRIBUTES&(1L<<0))
  {
         if (mylock=Lock(Pointers->dp_CurrentNode->ns_Currnode->MULTI_TEMPORARY,ACCESS_READ))
         {
         Info(mylock,&info);
         UnLock(mylock);
         HandleGraph2(info.id_NumBlocksUsed*53/info.id_NumBlocks,sibilist);
         sprintf(BUFFER,"\n[35mTemp   [0m[[30;44m%s[0m] [36m%12ld\n",sibilist,(info.id_NumBlocks - info.id_NumBlocksUsed)* info.id_BytesPerBlock);
         SendString(d,BUFFER);
         }

         if (mylock=Lock(Pointers->dp_CurrConf->CONF_ULPATH,ACCESS_READ))
         {
         Info(mylock,&info);
         UnLock(mylock);
         HandleGraph2(info.id_NumBlocksUsed*53/info.id_NumBlocks,sibilist);
         sprintf(BUFFER,"[35mUpload [0m[[30;44m%s[0m] [36m%12ld\n\n   [44m   [0m -- [36mUsed space                   [35mFreeSpace V1.0 by Hydra/iNSANE!\n\n[0m",sibilist,(info.id_NumBlocks - info.id_NumBlocksUsed)* info.id_BytesPerBlock);
         SendString(d,BUFFER);
         }
  }
    else
  {
         if (mylock=Lock(Pointers->dp_CurrentNode->ns_Currnode->MULTI_TEMPORARY,ACCESS_READ))
         {
         Info(mylock,&info);
         UnLock(mylock);
         HandleGraph(info.id_NumBlocksUsed*53/info.id_NumBlocks,sibilist);
         sprintf(BUFFER,"\nTemp   [%s] %12ld\n",sibilist,(info.id_NumBlocks - info.id_NumBlocksUsed)* info.id_BytesPerBlock);
         SendString(d,BUFFER);
         }

         if (mylock=Lock(Pointers->dp_CurrConf->CONF_ULPATH,ACCESS_READ))
         {
         Info(mylock,&info);
         UnLock(mylock);
         HandleGraph(info.id_NumBlocksUsed*53/info.id_NumBlocks,sibilist);
         sprintf(BUFFER,"Upload [%s] %12ld\n\n   XXX -- Used space  --- -- Free space  FreeSpace V1.0 by Hydra/iNSANE!\n\n",sibilist,(info.id_NumBlocks - info.id_NumBlocksUsed)* info.id_BytesPerBlock);
         SendString(d,BUFFER);
         }



  }
        FreeMem(Pointers,sizeof(struct DDPointers));
	CloseDoor(d);
	CloseLibrary(DDBase);
 	exit(0);
}

void HandleGraph2(UWORD blocks, char * Destbuf)
{
UWORD i = 0;
while (i!=blocks)
 {
  Destbuf[i]='_'; i++;
 }
Destbuf[i]=''; i++; Destbuf[i]='['; i++; Destbuf[i]='0'; i++; Destbuf[i]='m'; i++;
while (i!=57)
 {
  Destbuf[i]=' '; i++;
 }
Destbuf[i]=0;
}

void HandleGraph(UWORD blocks, char * Destbuf)
{
UWORD i = 0;
while (i!=blocks)
 {
  Destbuf[i]='X'; i++;
 }
while (i!=53)
 {
  Destbuf[i]='-'; i++;
 }
Destbuf[i]=0;
}

