#include "filedoor_structs_defines.h"
#include "filedoor_protos.h"

#include <proto/exec.h>
#include <proto/dos.h>
#include <exec/memory.h>
#include <strings.h>
#include <stdio.h>
#include <ctype.h>

void Upload(void)
{
char key[4];
struct FileInfoBlock *fib;
static __far char uploaddir[100];
BPTR uploaddirlock;
static __far char tempstr[200];
static __far char shortdesc[80];
char *tempstrptr;
BOOL areapicked,refresh;
struct Areamem *area;
struct Filemem *filemem;

  area=firstarea;
  msg(FG7"\xc""Using protocol ");
  tempstrptr=FindAttr('X');
  if(tempstrptr==NULL) tempstrptr="xprzmodem.library";
  msg(tempstrptr);
  msg("\n\n");
  hotkey(MENU"Select: "KNAP"(u)"MENU" Upload "KNAP"(A)"MENU" Abort",key);
  if(toupper(key[0])!='U') return;
  msg(FG7"\xc""Ready to receive..\n");
  DoXprUl();
  if(!hetwittedus)
  {
    if(fib=AllocDosObject(DOS_FIB,NULL))
    {
      strcpy(uploaddir,"bbs:cydaldoor/upload/");
      strcat(uploaddir,UserName);
      if(uploaddirlock=Lock(uploaddir,ACCESS_READ))
      {
        if(Examine(uploaddirlock,fib))
        {
          msg("\xc""Select what to do with the uploads\n");
          while(ExNext(uploaddirlock,fib))
          {
            if(!fib->fib_Size) break;
            sprintf(tempstr,FG7"\nFile name: \"%-32.32s\" File size: %8i\n",fib->fib_FileName,fib->fib_Size);
            msg(tempstr);
            msg(MENU"Select: "KNAP"(d)"MENU" Discard "KNAP"(k)"MENU" Keep ");
            msg(KNAP"(A)"MENU"Add to BBS"FG7);
            hotkey("",key);
            msg("\n");
            switch(toupper(key[0]))
            {
              case 'D':
              case 'd':
              strcpy(tempstr,"bbs:cydaldoor/upload/");
              strcat(tempstr,UserName);
              AddPart(tempstr,fib->fib_FileName,100);
              DeleteFile(tempstr);
              msg("Deleting file.\n\n");
              break;
              
              case 'K':
              case 'k':
              msg("Keeping file for later.\n\n");
              break;
              
              case 'A':
              case 'a':
              case '\r':
              msg("\nEnter one-line short description, max. 80 characters.\n");
              prompt(FG3,shortdesc,79);
              msg(FG7"\nPick area for file using cursor keys, select with return.\n"FG3);
              areapicked=FALSE;
              while(!areapicked && !hetwittedus)
              {
                msg("\n"UP ESC"[K");
                msg(area->area.name);
                refresh=FALSE;
                while(!refresh && !hetwittedus)
                {
                  hotkey("",key);
                  switch(toupper(key[0]))
                  {
                    case 'A':
                    if(PrevArea(area)!=NULL) area=PrevArea(area);
                    refresh=TRUE;
                    break;
                    
                    case 'B':
                    if(area->next!=NULL) area=area->next;
                    refresh=TRUE;
                    break;
                    
                    case '\xd':
                    areapicked=refresh=TRUE;
                    break;
                  }
                }
              }
              msg("\n"FG1);
              /* Hihi - flyt filen på den letteste måde! */
              strcpy(tempstr,"Copy bbs:cydaldoor/upload/");
               strcat(tempstr,UserName);
              strcat(tempstr,"/");
              strcat(tempstr,fib->fib_FileName);
              strcat(tempstr," ");
              strcat(tempstr,area->area.path);
              Execute(tempstr,NULL,NULL);
              strcpy(tempstr,"Delete bbs:cydaldoor/upload/");
              strcat(tempstr,UserName);
              strcat(tempstr,"/");
              strcat(tempstr,fib->fib_FileName);
              Execute(tempstr,NULL,NULL);
              /* Sæt filen ind i areafilen også */
              FindFiles(area);
              if(filemem=AllocVec(sizeof(struct Filemem),MEMF_ANY))
              {
              struct DateStamp ds;
                
                DateStamp(&ds);
                strcpy(filemem->f.name,fib->fib_FileName);
                strcpy(filemem->f.shortdesc,shortdesc);
                strcpy(filemem->f.longdesc,"");
                filemem->f.dl=0;
                filemem->f.qual=5000;
                filemem->f.date=ds.ds_Days;
                filemem->f.siz=fib->fib_Size;
                filemem->f.flags=0;
                AddTail((struct List *)&area->files,(struct Node *)&filemem->n);
                area->dirty=TRUE;
                area->filecount++;
              }
              availfiles+=ratio;
              uploadedfiles++;
              changeuserint(9,uploadedfiles);
              break;
              
              default:
              break;
            }
          }
        }
        UnLock(uploaddirlock);
      }
      FreeDosObject(DOS_FIB,fib);
    }
  }
}
