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

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

/* Lad brugeren zappe nogle af sine taggede filer */
void ZapTagged(void)
{
static __far struct Areamem *lista[50];
static __far char *          listf[50];
static __far BOOL            listz[50];
static __far int             listi[50];

static __far char strspace[50*32];

int i,j,k;
int topfile=0;
int cursorfile=0;
static char tempstr2[90];
char key[4];
BOOL refresh;
BOOL done;

    if(taggedfiles==0) return;
    j=0;
    for(i=0;i<NumAttrs;i++)
    {
      if(Attrs[i][0]=='T')
      {
        if(!strnicmp(GetNthOccur(Attrs[i],':',2)+1,superarea,strlen(superarea)))
        {
          listf[j]=strspace+j*32;
          strncpy(listf[j],Attrs[i]+1,32);
          for(k=0;listf[j][k]!=':';k++);
          listf[j][k]=0;
          lista[j]=AttrPtrs[i];
          listz[j]=FALSE;
          listi[j]=i;
          j++;
        }
      }
    }
    refresh=TRUE;
    done=FALSE;
    while(!done)
    {
      if(hetwittedus) break;
      if(refresh)
      {
        ClearMenuWindow("Zap tagged files menu");
        msg("\n");
        msg(RI KNAP"<RETURN>"MENU" Mark/unmark file under cursor\n");
        msg(RI KNAP"<->"MENU" Mark all files for zapping\n");
        msg(RI KNAP"<+>"MENU" Mark all files for keeping\n");
        msg(RI KNAP"(Z)"MENU" Zap files marked with '-'\n");
        ClearBottomWindow();
        if(topfile)
          msgc("(MORE FILES ABOVE)",FG1,FG7);
        else
          msgc("",FG1,FG7);
        for(i=topfile;i<topfile+visiblelines && i<taggedfiles;i++)
          if(listz[i])
          {
            msg(FG1"\n"RI" -");
            sprintf(tempstr2,"%-32.32s : %-32.32s",lista[i]->area.name,listf[i]);
            msg(tempstr2);
          }
          else
          {
            msg(FG3"\n"RI" +");
            sprintf(tempstr2,"%-32.32s : "FG2"%-32.32s",lista[i]->area.name,listf[i]);
            msg(tempstr2);
          }
        MoveCrsr(1,TOPLINE+visiblelines);
        if(i<taggedfiles)
          msgc("(MORE FILES BELOW)",FG1,FG7);
        else
          msgc("",FG1,FG7);
        refresh=FALSE;
      }
      PutCursor(cursorfile-topfile);
      hotkey("",key);
      if(hetwittedus) break;
      if(key[0]=='\x1b')
      {
        hotkey("",key);
        if(key[0]=='[')
        {
          hotkey("",key);
          while(key[0]>='0' && key[0]<='9')
          {
            hotkey("",key);
            if(hetwittedus) break;
          }
        }
      }
      switch(key[0])
      {

        /* Quit tilbage med zap */
        case 'Z':
        case 'z':
        refresh=TRUE;
        ClearMenuWindow("Zap marked files");
        for(i=taggedfiles-1;i>=0;i--)
          if(listz[i])
          {
            RemAttr(listi[i]);
            taggedfiles--;
          }
        done=TRUE;
        break;
        
        /* crsr op */
        case 'A':
        case '8':
        ZapCursor(cursorfile-topfile);
        if(cursorfile!=0)
        {
          if(cursorfile==topfile)
          { /* Side op */
            topfile-=visiblelines;
            cursorfile--;
            refresh=TRUE;
          }
          else
          { /* Crsr en op */
            cursorfile--;
            msg(ESC"[1A");
          }
        }
        break;

        /* crsr ned */
        case 'B':
        case '2':
        ZapCursor(cursorfile-topfile);
        if(cursorfile!=taggedfiles-1)
        {
          if(cursorfile==topfile+visiblelines-1)
          { /* Side ned */
            topfile+=visiblelines;
            cursorfile++;
            refresh=TRUE;
          }
          else
          { /* Crsr en ned */
            cursorfile++;
            msg(ESC"[1B");
          }
        }
        break;

        /* Glem/husk fil under cursor */
        case '\xd':
        listz[cursorfile]=!listz[cursorfile];
        if(listz[cursorfile])
        {
          sprintf(tempstr2,FG1" -%-32.32s : ",lista[cursorfile]->area.name);
          msg(tempstr2);
          sprintf(tempstr2,"%-32.32s",listf[cursorfile]);
          msg(tempstr2);
        }
        else
        {
          sprintf(tempstr2,FG3" +%-32.32s : "FG2,lista[cursorfile]->area.name);
          msg(tempstr2);
          sprintf(tempstr2,"%-32.32s",listf[cursorfile]);
          msg(tempstr2);
        }

        break;

        /* Marker alt til zap alle filer */
        case '-':
        for(i=0;i<taggedfiles;i++)
        {
          listz[i]=TRUE;
        }
        refresh=TRUE;
        break;

        /* Glem alle filer */
        case '+':
        for(i=0;i<taggedfiles;i++)
        {
          listz[i]=FALSE;
        }
        refresh=TRUE;
        break;

        /* Refresh */
        case ' ':
        refresh=TRUE;
        break;

        /* En tast vi ikke kan bruge til noget */
        default:
        break;
      }
    }
}

