/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Trying 2 imitate Raindrop .. Rajesh _ThE gReAt * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include #include #include #include #include #include /* #define DEBUG */ int rand(void); /* Function prototype */ void drop(char far *); /* Ditto */ /* This variable is used in both the functions so it is global :) */ char far *ptr; /* This points to first location in VDU memory */ /* End of this global declaration */ main() { char far *new_ptr; int random_no; ptr = (char far *)0xB0008000L; /* First location of video memory */ random_no = rand()%4000; if(random_no%2) { random_no++; /* Make sure that the generated no is even */ } new_ptr = ptr + random_no; drop(new_ptr); } void drop(char far *new_ptr) { char hold; /* Hold the charecter pointed to by new_ptr */ char prev; /* Keep the previous charecter */ long int y; ptr = (char far *)0xB0008000; /* Make sure */ hold = *new_ptr; y = (long int)new_ptr; y -= 0xB0008000L; y = y%160; #ifdef DEBUG printf("\n%d",y); getch(); #endif /* Drop Alpha-Numeric Charecters only ;) */ if((hold >= 'a' && hold <= 'z') || (hold >= 'A' && hold <= 'Z') || (hold >= '0' && hold <='9')) *new_ptr = ' '; else main(); for(;new_ptr < ((char far *)((long int)ptr+(long int)(24*160)+((long int)y*2))) &&!kbhit();new_ptr += 160) { prev = *new_ptr; *new_ptr = hold; delay(150); *new_ptr = prev; /* Restore */ } }