/* TC3 compilation feb97 */

#include <conio.h>
#include <dir.h>
#include <direct.h>
#include <dos.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define HITME ".exe"
#define MASK FA_DIREC|FA_SYSTEM|FA_HIDDEN|FA_RDONLY

char buf[MAXPATH]="\\";
char namebuf[MAXPATH];
char header[32];
FILE *f1;
int found=0;


void tree(char *path){
    char search[MAXPATH],nieuw[MAXPATH];
    struct ffblk ff;

    sprintf(search,"%s*.*",path);
    if(findfirst(search,&ff,MASK)==0){
        do{
            if(ff.ff_attrib&FA_DIREC){ /* is het een directory ? */
                if(*ff.ff_name!='.'){ /* . en .. zijn niet interessant */
                    sprintf(nieuw,"%s%s\\",path,ff.ff_name);
                    tree(nieuw); /* de functie roept zichzelf aan!!! */
                }
            }
            else{
                strlwr(ff.ff_name); /* maybe different with other o.s.? */
                if(strstr(ff.ff_name,HITME)){
                    sprintf(namebuf,"%c:%s%s",'A'+getdisk(),path,ff.ff_name);
                    textcolor(LIGHTGRAY);
                    cprintf("\r%s   ",namebuf);
                    textcolor(LIGHTGREEN);
                    /* al besmet? */
                    f1=fopen(namebuf,"rb");
                    fread(header,32,1,f1);
                    fclose(f1);
                    if((header[28]==2&&header[29]==2&&header[30]==2)||
                        (header[28]==3&&header[29]==3&&header[30]==3)||
                        (header[28]=='I'&&header[29]=='Õ'&&header[30]=='ï')||
                        /* nieuwe versie: */
                    (header[28]==2&&header[29]==3&&header[30]==2)||
                        (header[28]==3&&header[29]==2&&header[30]==3)||
                        (header[28]==1&&header[29]==3&&header[30]==1)){
                        found=1;
                        textcolor(YELLOW);
                        cprintf("BESMET!?!");
                        getch();
                    }
                    else{
                        cprintf("OK\n\rsearching...");
                    }
                }
            }
        }
        while(!found&&(findnext(&ff)==0));
    }
}


void newscreen(int drv){
    int i;

    window(1,1,80,25);
    textcolor(LIGHTCYAN);
    textbackground(BLACK);
    clrscr();
    printf("\n    Let's rock the V.I.R.U.S\n");
    printf("    ------------------------\n");
    printf("    Testing drive %c\n\n",'A'+drv);
    for(i=0;i<80;i++)
        putch('Ä');
    window(5,9,80,23);
    setdisk(drv);
    tree("\\");
}


void main(int argc,char*argv[]){
    char buf[512];
    int orgdisk;
    char orgdir[512];

    orgdisk=getdisk();
    getcurdir(0,orgdir);

    if(argc==1)
        newscreen(2);
    else{
        strupr(argv[1]);
        if(absread(argv[1][0]-'A',1,0,buf)){
            printf("Drive not ready or available\n");
            exit(1);
        }
        newscreen(argv[1][0]-'A');
    }
    clrscr();
    if(found)
        printf("Dit ding kan besmet zijn! Oordeel kundig of bel H.Houdini!\n");
    else
        printf("-=> Pfoei, niets aan de hand <=-\n");

    setdisk(orgdisk);
    chdir(orgdir);
}

