#include"tcpdl.h"

void __saveds
readurlfile( char *inputfilename )
{
char inputline[PFNSIZE];
char tempstring[PFNSIZE];
unsigned char *buffererror;
BPTR inputfile;
int i;
BOOL  opt=FALSE;
struct strippedurl url;
struct namedata *urldata;

   inputfile = Open( inputfilename, MODE_OLDFILE );
   if( inputfile==0 )
   {
      printf( "Can't open \"%s\"\n", inputfilename );
      return;
   }
      
   while( TRUE )
   {
      buffererror = FGets( inputfile, inputline, PFNSIZE-5 );
      if( buffererror==0 )
         break;
      
      for( i=0;i<(PFNSIZE-5);i++)
      {
         if( (inputline[i]==0) | (inputline[i]==10) | (inputline[i]==13) )
         {
            inputline[i]=0;
            break;
         }
         
         if( (inputline[i]==9) | (inputline[i]==32) )
         {
            inputline[i]=0;
            opt=TRUE;
            break;
         }
      }
      
      phrasestring( &url, inputline );
      if( url.host[0]!=0 )
      {
         sprintf( tempstring, "%s://%s/%s", url.type, url.host, url.pathfilename );
         urldata=getfilenumber( tempstring );
         if( urldata==0 )
            break;
      }
      
      if( opt==TRUE )
      {
         i++;
         while( (inputline[i]==9) | (inputline[i]==32))
            i++;
         
         urldata->flag_maxdiffhost=0;
         urldata->flag_maxdiffpath=255;
         
         while( inputline[i]!=0 )
         {
            if( Strnicmp( &inputline[i], "D10", 3 ) == 0 )
            {
               urldata->flag_maxdeep=10;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D11", 3 ) == 0 )
            {
               urldata->flag_maxdeep=11;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D12", 3 ) == 0 )
            {
               urldata->flag_maxdeep=12;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D13", 3 ) == 0 )
            {
               urldata->flag_maxdeep=13;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D14", 3 ) == 0 )
            {
               urldata->flag_maxdeep=14;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D15", 3 ) == 0 )
            {
               urldata->flag_maxdeep=15;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D16", 3 ) == 0 )
            {
               urldata->flag_maxdeep=16;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D17", 3 ) == 0 )
            {
               urldata->flag_maxdeep=17;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D18", 3 ) == 0 )
            {
               urldata->flag_maxdeep=18;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D19", 3 ) == 0 )
            {
               urldata->flag_maxdeep=19;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "D1", 2 ) == 0 )
            {
               urldata->flag_maxdeep=1;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "D2", 2 ) == 0 )
            {
               urldata->flag_maxdeep=2;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "D3", 2 ) == 0 )
            {
               urldata->flag_maxdeep=3;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "D4", 2 ) == 0 )
            {
               urldata->flag_maxdeep=4;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "D5", 2 ) == 0 )
            {
               urldata->flag_maxdeep=5;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "D6", 2 ) == 0 )
            {
               urldata->flag_maxdeep=6;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "D7", 2 ) == 0 )
            {
               urldata->flag_maxdeep=7;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "D8", 2 ) == 0 )
            {
               urldata->flag_maxdeep=8;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "D9", 2 ) == 0 )
            {
               urldata->flag_maxdeep=9;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "H0", 2 ) == 0 )
            {
               urldata->flag_maxdiffhost=0;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "H1", 2 ) == 0 )
            {
               urldata->flag_maxdiffhost=1;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "H2", 2 ) == 0 )
            {
               urldata->flag_maxdiffhost=2;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "H3", 2 ) == 0 )
            {
               urldata->flag_maxdiffhost=3;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "H4", 2 ) == 0 )
            {
               urldata->flag_maxdiffhost=4;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "H5", 2 ) == 0 )
            {
               urldata->flag_maxdiffhost=5;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "P0", 2 ) == 0 )
            {
               urldata->flag_maxdiffpath=0;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "P1", 2 ) == 0 )
            {
               urldata->flag_maxdiffpath=1;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "P2", 2 ) == 0 )
            {
               urldata->flag_maxdiffpath=2;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "P3", 2 ) == 0 )
            {
               urldata->flag_maxdiffpath=3;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "P4", 2 ) == 0 )
            {
               urldata->flag_maxdiffpath=4;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "P5", 2 ) == 0 )
            {
               urldata->flag_maxdiffpath=5;
               i=i+2;
            }
            else
            if( Strnicmp( &inputline[i], "UPDATE", 6 ) == 0 )
            {
               urldata->acceptflag=urldata->acceptflag|acceptflag_update;
               i=i+6;
            }
            else
            if( Strnicmp( &inputline[i], "IMG", 3 ) == 0 )
            {
               urldata->acceptflag=urldata->acceptflag|acceptflag_img;
               i=i+3;
            }
            else
            if( Strnicmp( &inputline[i], "TEXT", 4 ) == 0 )
            {
               urldata->acceptflag=urldata->acceptflag|acceptflag_text;
               i=i+4;
            }
            else
            if( Strnicmp( &inputline[i], "ALL", 3 ) == 0 )
            {
               urldata->acceptflag=urldata->acceptflag|acceptflag_all;
               i=i+3;
            }
            else
               i++;
            
            urldata->flag_data=urldata->flag_data|flag_ForceDL;
         }
      }
   }
   Close( inputfile );
   return;
}

void  __saveds
set( struct namedata *urldata, ULONG flag )
{
   while( TRUE )
   {
      Forbid();
      if( mmpoint->namedatainuse==FALSE )
         break;
      Permit();
      Delay(3);
   }
   
   urldata->flag_data=urldata->flag_data|flag;
   
   Permit();
   return;
}

void __saveds
clr( struct namedata *urldata, ULONG flag )
{
   while( TRUE )
   {
      Forbid();
      if( mmpoint->namedatainuse==FALSE )
         break;
      Permit();
      Delay(3);
   }
   
   urldata->flag_data=urldata->flag_data&(~flag);
   
   Permit();
   return;
}


BOOL __saveds
tst( struct namedata *urldata, ULONG flag )
{
BOOL rflag;

   while( TRUE )
   {
      Forbid();
      if( mmpoint->namedatainuse==FALSE )
         break;
      Permit();
      Delay(3);
   }
   
   if( (urldata->flag_data&flag)>0 )
      rflag=TRUE;
   else
      rflag=FALSE;
      
   Permit();
   return(rflag);
}


