|
|
- /***************************************************************************
- * Dr. Evil's Insidious Bomb, Version 1.1
- * Copyright 2011, Dr. Evil Incorporated. All rights reserved.
- *
- * LICENSE:
- *
- * Dr. Evil Incorporated (the PERPETRATOR) hereby grants you (the
- * VICTIM) explicit permission to use this bomb (the BOMB). This is a
- * time limited license, which expires on the death of the VICTIM.
- * The PERPETRATOR takes no responsibility for damage, frustration,
- * insanity, bug-eyes, carpal-tunnel syndrome, loss of sleep, or other
- * harm to the VICTIM. Unless the PERPETRATOR wants to take credit,
- * that is. The VICTIM may not distribute this bomb source code to
- * any enemies of the PERPETRATOR. No VICTIM may debug,
- * reverse-engineer, run "strings" on, decompile, decrypt, or use any
- * other technique to gain knowledge of and defuse the BOMB. BOMB
- * proof clothing may not be worn when handling this program. The
- * PERPETRATOR will not apologize for the PERPETRATOR's poor sense of
- * humor. This license is null and void where the BOMB is prohibited
- * by law.
- ***************************************************************************/
-
- #include <stdio.h>
- #include <stdlib.h>
- #include "support.h"
- #include "phases.h"
-
- /*
- * Note to self: Remember to erase this file so my victims will have no
- * idea what is going on, and so they will all blow up in a
- * spectaculary fiendish explosion. -- Dr. Evil
- */
-
- FILE *infile;
-
- int main(int argc, char *argv[])
- {
- char *input;
-
- /* Note to self: remember to port this bomb to Windows and put a
- * fantastic GUI on it. */
-
- /* When run with no arguments, the bomb reads its input lines
- * from standard input. */
- if (argc == 1) {
- infile = stdin;
- }
-
- /* When run with one argument <file>, the bomb reads from <file>
- * until EOF, and then switches to standard input. Thus, as you
- * defuse each phase, you can add its defusing string to <file> and
- * avoid having to retype it. */
- else if (argc == 2) {
- if (!(infile = fopen(argv[1], "r"))) {
- printf("%s: Error: Couldn't open %s\n", argv[0], argv[1]);
- exit(8);
- }
- }
-
- /* You can't call the bomb with more than 1 command line argument. */
- else {
- printf("Usage: %s [<input_file>]\n", argv[0]);
- exit(8);
- }
-
- /* Do all sorts of secret stuff that makes the bomb harder to defuse. */
- initialize_bomb();
-
- printf("Welcome to my fiendish little bomb. You have 6 phases with\n");
- printf("which to blow yourself up. Have a nice day!\n");
-
- /* Hmm... Six phases must be more secure than one phase! */
- input = read_line(); /* Get input */
- phase_1(input); /* Run the phase */
- phase_defused(); /* Drat! They figured it out!
- * Let me know how they did it. */
- printf("Phase 1 defused. How about the next one?\n");
-
- /* The second phase is harder. No one will ever figure out
- * how to defuse this... */
- input = read_line();
- phase_2(input);
- phase_defused();
- printf("That's number 2. Keep going!\n");
-
- /* I guess this is too easy so far. Some more complex code will
- * confuse people. */
- input = read_line();
- phase_3(input);
- phase_defused();
- printf("Halfway there!\n");
-
- /* Oh yeah? Well, how good is your math? Try on this saucy problem! */
- input = read_line();
- phase_4(input);
- phase_defused();
- printf("So you got that one. Try this one.\n");
-
- /* Round and 'round in memory we go, where we stop, the bomb blows! */
- input = read_line();
- phase_5(input);
- phase_defused();
- printf("Good work! On to the next...\n");
-
- /* This phase will never be used, since no one will get past the
- * earlier ones. But just in case, make this one extra hard. */
- input = read_line();
- phase_6(input);
- phase_defused();
-
- /* Wow, they got it! But isn't something... missing? Perhaps
- * something they overlooked? Mua ha ha ha ha! */
-
- return 0;
- }
|