#include "bbs.h"

static void ShowFlags(void)
{
 if(strlen(flaglist)==0)	AEPutStr("No file flags\r\n");
 else	{
	    FAEPutStr(flaglist);
	    FAEPutStr("\r\n");
	}
}

char *IsInList(char *s,char *p,int *length);

static int RemoveFile(char *s,char *e)
{
 int length,error=0;
 char *p;

 while(p=IsInList(s,e,&length)) {
	    if(s[p-s+length]==' ') 		length++;
	    strcpy(p,p+length);
	    error=1;
	}
 return(error);
}

static void RemoveFileList(char *s)
{
 char *p;

 if(p=strtok(s," ")) {
	    do {
 		RemoveFile(flaglist,p);
	    	p=strtok(NULL," ");
		} while(p!=NULL);
	}
}


int AddFlagtoList(char *);

static void FlagFrom(char *s)
{
 int stat=0,flag=1;
 FILE *fp;
 int i;
 sprintf(GSTR2,"%sdir%d",Conference_Location,MaxDirs);
 if(fp=fopen(GSTR2,"r")) {
	    while(fgets(GSTR2,90,fp) && stat!=1) {
			    if(GSTR2[0]!=' '&&GSTR2[0]!='\0') {
				    i=0; while(GSTR2[i]!='\0' && GSTR2[i]!=' ') { GSTR3[i]=GSTR2[i]; i++; }
                        if(i==0) continue; 
                        GSTR3[i]='\0';
				    if(!flag)					stat=AddFlagtoList(GSTR3);
				    if(flag && !stricmp(GSTR3,s)) {
					    flag=0;
					    stat=AddFlagtoList(GSTR3);
				    }
		    }
	    } 
	    if(flag)		AEPutStr("Sorry filename not found!\r\n");
	    fclose(fp);
	} else MyError(4);	  //FileListError();
}


int FlagFiles(char *s)
{
 int stat;

 if(s==NULL) 	ShowFlags();
Backloop:
 if(s==NULL) {
 	AEPutStr("[36mFilename(s) to flag: [32m([33mF[32m)[36mrom, [32m([33mC[32m)[36mlear, [32m([33mEnter[32m)[36m=none[0m? ");
	    stat=LineInput("",GSTR1,190,KEYBOARD_TIMEOUT);
	    if(stat<0)		return(stat);
	} else
 	strcpy(GSTR1,s);

 if(GSTR1[0]!='\0') {
	    if((GSTR1[0]=='C'||GSTR1[0]=='c')&&(GSTR1[1]=='\0'||GSTR1[1]==' ')) {
 		if(GSTR1[1]==' ')			strcpy(GSTR1,GSTR1+2);
 		else {
 			if(s!=NULL)	ShowFlags();
 			AEPutStr("[36mFilename(s) to Clear: [32m([33m*[32m)[36mAll, [32m([33mEnter[32m)[36m=none[0m? ");
	    		stat=LineInput("",GSTR1,190,KEYBOARD_TIMEOUT);
		    	if(stat<0)				return(stat);

 			if(GSTR1[0]=='\0')
 				return(SUCCESS);
 			AEPutStr("\r\n");
			}
	    	strupr(GSTR1);
		    if(GSTR1[0]=='*') 			flaglist[0]='\0';
 		else            			RemoveFileList(GSTR1);
 		return(1);
		} else {
 		if((GSTR1[0]=='F'||GSTR1[0]=='f')&&(GSTR1[1]=='\0'||GSTR1[1]==' ')) {
 			if(GSTR1[1]!=' ') {
 				AEPutStr("[36mFilename to start flagging from: [0m");
	    			stat=LineInput("",GSTR1,190,KEYBOARD_TIMEOUT);
		    		if(stat<0)					return(stat);
 				if(GSTR1[0]=='\0')			return(SUCCESS);
				} else				strcpy(GSTR1,GSTR1+2);

 			FlagFrom(GSTR1);
	    		return(1);
			} else {
 			stat=AddFlagtoList(GSTR1);
	    		if(stat==1) {
 				if(s==NULL)			goto Backloop;
      			else				return(FAILURE);
				}
 			if(stat==2) 				return(FAILURE);
			}
		}
	}
 return(SUCCESS);
}
