please help i have developed an antivirus programme code in c language

which fights for ashar virus whos details are


Ashar virus is also known as paralyse virus

Its charachteristic features are :

1) It comes as “(c) Brain “ or ( c) ashar”

Where ( c ) stands for copyright in the volume label

of affected disk.

2) it resides in the boot record and is entirely a memory

Resident programme occupying 3 to4 kilobytes
i am attching its source code

please help me it shows many errors when i run it

please help me as soon as possible i have to submit that programme code

latest by 15 nov 2007

please make it working by correcting it and you can post it to my email id

dragokartik@yahoo.co.in
CODE IS AS FOLLOWS


Code:
#include<dos.h>
#include<dir.h>
#include<string.h>
void main()

{

  int virus_found,more;

  virus_found=RAM_Test();

  if(virus_found)
  {

    Reset_INT13();

    clean_Disk('F')  ;

  }

  while(1)
  {
    printf("\n\nMore diskette to clean ?  Y/N");

    more=toupper(getch());

    while(more!='Y' &&more!='N')
	 more=toupper(getch());

    if(more=='N') exit(0);
       clean_Disk(more);

   }
   }

   /* End of program */

   /* Routine to check Ram for virus */

   RAM_Test()
{
   unsigned int vseg,voff;

   void interrupt(*v)(void);

   printf("\n\n RAM checking____");

   v=getvect(109);
   vseg=FP_SEG(v);
   voff=FP_OFF(v);
   if(vseg!=0x0 && voff=0x0)
   {
    printf("virus detected :-");
    putch(7);return(1);
    }
    else
    {
     printf("ok\n\n");
     putch(7);putch(7);return(0);
    }
}
    /*end of routine ram test*/

   /*ROUTINE TO RESETINT 13H*/
 Reset_INT13()
{
     unsigned int vseg,voff;

     void interrupt(*v)(void);
     v=getvect(109);
     vseg=FP_SEG(v);voff=FP_OFF(v);
     poke(0,76,voff);poke(0,78,vseg);
     printf("disabled\n");
}
  /*end of routine Reset_INT13*/

  /*Routine to clean diskette*/

 clean_Disk(next)
 char next;
{
 clean_Boot_sector(next);
 clean_Data_Area();
 change_Label();
}
/* end of routine clean disk*/

clean_Boot_sector(next_disk)
char next_disk;
{
 int ans,i,True;
 static void *buf[512];
 char virus[6],ashar[]="ashar",brain[]="Brain";
 if(next_disk=='F')
 True=1;
 else True=0;
 while(True)
 {
   printf("\ninsert dos diskettein drive A____WAITING\n");
   ans=getch();
   ans=absread(0,1,0,buf);
   virus=ashar;
   ans=chkboot(buf,&virus);
   virus=brain;
   ans=ans&&chkboot(buf,&virus);
   if(!ans)
   {
    printf("\nBoot sector infected with virus\n") ;
   }
   else
   break;
 }
 printf("\n insert infected disk in drive A_________ waiting\n\n\n");
 ans=getch();
 ans=abswrite(0,1,0,buf);
 if(ans)
 printf("\n unable to clean disk\n");
}

/*end of routine clean boot record*/

/*subroutine to check virus*/
 /*boot routine*/
 chkboot(str,name)
 char str[512],name[6];
 {
   int i,k;
   for(i=0,k=0;i<512;i++)
   if(str[i]==name[k])
   {
    k++;
    if(k==5)
    return(0);
    else
    continue;
   }
   else
   k=0;
   return(1);
  }

  /*end of sub routine chk boot*/

  /*routine to clean virus*/
  /* executive routine*/

  clean_Data_Area()
{
   int i,j;
   float rj;
   unsigned int fat_off,fat_dmp;
   unsigned dmp_sav;
   unsigned char fatbuf[1024],b1,b2;
   absread(0,2,1,fatbuf);j=0;

   for(i=2;i<355;i++)
   {
     rj=1.5*i;
     fat_off=rj;
     b2=fatbuf[fat_off+1];
     b1=fatbuf[fat_off];
     fat_dmp=b2;
     fat_dmp=fat_dmp<<8;
     fat_dmp=fat_dmp+b1;
     dmp_sav=fat_dmp;
     if(rj==fat_off)
     fat_dmp=fat_dmp&0xffff;
     else fat_dmp=fat_dmp>>4;
     fat_dmp=fat_dmp<<4;
     fat_dmp=fat_dmp>>4;
     if(fat_dmp==0x0ff7)
     {
      j++;
      if(rj==fat_off)
      dmp_sav=dmp_sav&0xf000;
      else
      dmp_sav=dmp_sav&0x000f;
      b2=(dmp_sav&0xff00)>>8;
      b1=dmp_sav&0x00ff;
      fatbuf[fat_off]=b1;
      fatbuf[fat_off+1]=b2;
     }
     }
     if(j)
     {
      abswrite(0,2,1,fatbuf);
      printf("disk cleaned \n\n");
     }
}

    /*End of routine clean_data_Area*/

    /*routine to change volume label */

  change_Label()
{
  unsigned char buf[512],volb1[11];
  int i,llen,lblpos,sno=5;
  struct ffblk blk;
  i=findfirst("*.*",&blk,0x08);
  if(!i)
  {
   absread(0,1,sno,buf);
   lblpos=findlbl(buf);
   while(!lblpos){ sno++;absread(0,1,sno,buf);
		   lblpos=lblpos-0x0b;
		   for(i=0;i<0x0b;i++)
		   volb1[i]=buf[lblpos+i];
		   volb1[i]=0x0b;
		   printf("volume label is %s \n",volb1);
		  }
  }
  else
  printf("volume label not defined\n");
  printf("enter new label (char):");
  scanf("%s",volb1);
  if(!i)
  {
    llen=strlen(volb1);
    for(i=0;i<=llen;i++,lblpos++)
    buf[lblpos]=volb1[i];
    for(;i<0x0b;i++,lblpos++)
    buf[lblpos]=' ';
    abswrite(0,1,sno,buf);
  }else
  {
    i=_creat(volb1,0x08);
    close(i);
  }
}
 findlbl(source)
 unsigned char source[512];
 {
  int ofset=0x0b;
  while(ofset<512){
  if(source[ofset]==0x28)
  return(ofset);
  ofset=ofset+0x020;
  }
  return(0);
 }

/* End of routine change _label*/

Last edited by shabbir; 13Nov2007 at 23:40.. Reason: Code block