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*/