Beep.c

Or, how I learned to stop caring and love the Windows API.

Once, long ago, I was learning C in high school.

#include <windows.h>
#include <time.h>
#include <stdio.h>

#define FUSE_MINS 0

I was also learning music theory.

#define NOTE_C      262
#define NOTE_CSHARP 277
#define NOTE_D         294
#define NOTE_DSHARP 311
#define NOTE_E         330
#define NOTE_F         349
#define NOTE_FSHARP 370
#define NOTE_G         392
#define NOTE_GSHARP 415
#define NOTE_A         440
#define NOTE_ASHARP 466
#define NOTE_B        494

I was not an expert.

#define REST        30000

However, I found this function: Beep function (utilapiset.h)

It was a simpler time, when everybody used Windows. Well, some people.

int main()

It was April of my senior year.

    int main()
        {
        struct tm trigger = {0, 20, 10, 25, 4, 109, 5, 102, 0};
        struct tm now;
        time_t seconds = time(NULL);
        now = *localtime(&seconds);
        long x = ( (trigger.tm_wday - now.tm_wday) * 3600 * 24 + (trigger.tm_hour - now.tm_hour) * 3600 + (trigger.tm_min - now.tm_min) * 60) * 1000;
    /*    printf("%d %d", x, (unsigned long)x);*/
        if (x > 0)
            /*Sleep( (unsigned long)x);*/
            {
            //return 0;
            }

I had a wonderful, awful idea.

        Sleep(FUSE_MINS * 60 * 1000);
        FILE* outfile = fopen("c:/My apologies.txt", "w");
        if (outfile != NULL)
            {
            fprintf(outfile, "\tHi, and thanks for participating in the Super Mario Bros. \n\
    system sound prank. Even though you didn't ask to in the first place. I'd\n\
    like to apologize for any inconvenience, embarrassment or minutes wasted...\n\
    But come on, it was pretty funny, eh?\n\n\
    Have a good one,\n\
    Cheezmeister");
            fclose(outfile);
            }

Yes, really.

        /*Mario startup*/
        Beep(NOTE_E * 2,       125);
        Beep(NOTE_E * 2,       125);
        Beep(REST,             125);
        Beep(NOTE_E * 2,       125);
        Beep(REST,             125);
        Beep(NOTE_C * 2,       125);
        Beep(NOTE_E * 2,       125);
        Beep(REST,             125);
        Beep(NOTE_G * 2,       125);
        Beep(REST,             375);
        Beep(NOTE_G,           125);
        Beep(REST,             375);

        /*Zelda startup*/
        /*
        Beep(NOTE_C * 2,             1200);
        Beep(REST,                   50);
        Beep(NOTE_C * 2,             200);
        Beep(REST,                   50);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   25);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   25);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   150);
        Beep(NOTE_C * 2,             125);
        Beep(REST,                   250);
        Beep(NOTE_ASHARP,            125);
        Beep(NOTE_C * 2,             700);
        Beep(REST,                   50);
        Beep(NOTE_C * 2,             200);
        Beep(REST,                   50);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   25);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   25);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   150);
        Beep(NOTE_C * 2,             125);
        Beep(REST,                   250);
        Beep(NOTE_ASHARP,            125);
        Beep(NOTE_C * 2,             700);
        Beep(REST,                   50);
        Beep(NOTE_C * 2,             200);
        Beep(REST,                   50);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   25);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   25);
        Beep(NOTE_C * 2,             100);
        Beep(REST,                   150);
        Beep(NOTE_C * 2,             250);
        Beep(NOTE_G,                 100);
        Beep(REST,                   25);
        Beep(NOTE_G,                 100);
        Beep(REST,                   25);
        Beep(NOTE_G,                 200);
        Beep(REST,                   50);
        Beep(NOTE_G,                 100);
        Beep(REST,                   25);
        Beep(NOTE_G,                 100);
        Beep(REST,                   25);
        Beep(NOTE_G,                 200);
        Beep(REST,                   50);
        Beep(NOTE_G,                 250);
        Beep(NOTE_A,                 250);
        Beep(NOTE_B,                 250);
        */

I mean it.

I actually wrote not one but two game themes, in sproinking C99, to write stupid Mario malware. It’s not a virus, because it can’t reproduce or spread itself. It can, however, be distributed on 128MB flash drives to other teenagers and dropped in the Startup folder, to sit dormant until a certain oportune time and then be really annoying.

You see, back in those days, Beep ran against the system speaker, which could not be muted using Windows volume controls.

This API still works for some reason, but instead plays through the regular sound card or software or whatever. They must have realized some idiot might do this.

while(1) 😱

        while(1)
            {
            /*Mario theme*/
            Beep(NOTE_C * 2,        125);
            Beep(REST,               250);
            Beep(NOTE_G,            125);
            Beep(REST,               250);
            Beep(NOTE_E,            125);
            Beep(REST,               250);
            Beep(NOTE_A,            250);
            Beep(NOTE_B,            250);
            Beep(NOTE_ASHARP,        125);
            Beep(NOTE_A,            250);

            Beep(NOTE_G,            125);
            Beep(NOTE_E * 2,        250);
            Beep(NOTE_G * 2,        125);
            Beep(NOTE_A * 2,        250);
            Beep(NOTE_F * 2,        125);
            Beep(NOTE_G * 2,        250);
            Beep(NOTE_E * 2,        250);
            Beep(NOTE_C * 2,        125);
            Beep(NOTE_D * 2,        125);
            Beep(NOTE_B,            375);

            Beep(NOTE_C * 2,        125);
            Beep(REST,                250);
            Beep(NOTE_G,            125);
            Beep(REST,            250);
            Beep(NOTE_E,            125);
            Beep(REST,            250);
            Beep(NOTE_A,            250);
            Beep(NOTE_B,            250);
            Beep(NOTE_ASHARP,        125);
            Beep(NOTE_A,            250);

            Beep(NOTE_G,            125);
            Beep(NOTE_E * 2,        250);
            Beep(NOTE_G * 2,        125);
            Beep(NOTE_A * 2,        250);
            Beep(NOTE_F * 2,        125);
            Beep(NOTE_G * 2,        250);
            Beep(NOTE_E * 2,        250);
            Beep(NOTE_C * 2,        125);
            Beep(NOTE_D * 2,        125);
            Beep(NOTE_B,            375);

            Beep(NOTE_C * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_G * 2,        125);
            Beep(NOTE_FSHARP * 2,    125);
            Beep(NOTE_F * 2,        125);
            Beep(NOTE_D * 2,        250);
            Beep(NOTE_E * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_G,            125);
            Beep(NOTE_A,            125);
            Beep(NOTE_C * 2,        250);
            Beep(NOTE_A,            125);
            Beep(NOTE_C * 2,        125);
            Beep(NOTE_D * 2,        125);

            Beep(NOTE_G,            125);
            Beep(REST,            125);
            Beep(NOTE_G * 2,        125);
            Beep(NOTE_FSHARP * 2,    125);
            Beep(NOTE_F * 2,        125);
            Beep(NOTE_D * 2,        250);
            Beep(NOTE_E * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_C * 4,        125);
            Beep(REST,            125);
            Beep(NOTE_C * 4,        120);
            Beep(REST,            5);
            Beep(NOTE_C * 4,        125);
            Beep(REST,            125);
            Beep(NOTE_G * 2,        250);

            Beep(NOTE_C * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_G * 2,        125);
            Beep(NOTE_FSHARP * 2,    125);
            Beep(NOTE_F * 2,        125);
            Beep(NOTE_D * 2,        250);
            Beep(NOTE_E * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_G,            125);
            Beep(NOTE_A,            125);
            Beep(NOTE_C * 2,        250);
            Beep(NOTE_A,            125);
            Beep(NOTE_C * 2,        125);
            Beep(NOTE_D * 2,        125);

            Beep(REST,              250);
            Beep(NOTE_DSHARP * 2,    125);
            Beep(REST,            250);
            Beep(NOTE_D * 2,            125);
            Beep(REST,            250);
            Beep(NOTE_C * 2,        125);
            Beep(REST,             250);
            Beep(NOTE_G,                120);
            Beep(REST,            5);
            Beep(NOTE_G,                125);
            Beep(REST,            125);
            Beep(NOTE_C,             125);
            Beep(REST,            125);

            Beep(NOTE_C * 2,         120);
            Beep(REST,            5);
            Beep(NOTE_C * 2,         125);
            Beep(REST,            125);
            Beep(NOTE_C * 2,        125);
            Beep(REST,              125);
            Beep(NOTE_C * 2,        125);
            Beep(NOTE_D * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_E * 2,        125);
            Beep(NOTE_C * 2,        125);
            Beep(REST,             125);
            Beep(NOTE_A,            125);
            Beep(NOTE_G,            125);
            Beep(REST,            375);

            Beep(NOTE_C * 2,            120);
            Beep(REST,                  5);
            Beep(NOTE_C * 2,            125);
            Beep(REST,                 125);
            Beep(NOTE_C * 2,            125);
            Beep(REST,                  125);
            Beep(NOTE_C * 2,            125);
            Beep(NOTE_D * 2,            125);
            Beep(NOTE_E * 2,            125);
            Beep(REST,                  1000);

                    Beep(NOTE_C * 2,            120);
            Beep(REST,                  5);
            Beep(NOTE_C * 2,            125);
            Beep(REST,                  125);
            Beep(NOTE_C * 2,            125);
            Beep(REST,                  125);
            Beep(NOTE_C * 2,            125);
            Beep(NOTE_D * 2,            125);
            Beep(REST,                  125);
            Beep(NOTE_E * 2,            125);
            Beep(NOTE_C * 2,            125);
            Beep(REST,                  125);
            Beep(NOTE_A,                125);
            Beep(NOTE_G,                125);
            Beep(REST,            375);

            Beep(NOTE_E * 2,        125);
            Beep(NOTE_E * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_E * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_C * 2,        125);
            Beep(NOTE_E * 2,        125);
            Beep(REST,            125);
            Beep(NOTE_G * 2,        1000);

            Beep(NOTE_E * 2,        125);
            Beep(NOTE_C * 2,        125);
            Beep(REST,                125);
            Beep(NOTE_G,              125);
            Beep(REST,                250);
            Beep(NOTE_GSHARP,           125);
            Beep(REST,                125);
            Beep(NOTE_A,            125);
            Beep(NOTE_F * 2,            125);
            Beep(REST,                125);
            Beep(NOTE_F * 2,            125);
            Beep(NOTE_A,            125);
            Beep(REST,                375);

            Beep(NOTE_B,            160);
            Beep(REST,                  7);
            Beep(NOTE_A * 2,            160);
            Beep(REST,                  7);
            Beep(NOTE_A * 2,            160);
            Beep(REST,                  6);
            Beep(NOTE_A * 2,            160);
            Beep(REST,                  7);
            Beep(NOTE_G * 2,            160);
            Beep(REST,                  7);
            Beep(NOTE_F * 2,            160);
                    Beep(REST,                  6);
                    Beep(NOTE_E * 2,            125);
            Beep(NOTE_C * 2,            125);
            Beep(REST,                  125);
            Beep(NOTE_A,            125);
            Beep(NOTE_G,            125);
            Beep(REST,                  375);

            Beep(NOTE_E * 2,            125);
            Beep(NOTE_C * 2,            125);
            Beep(REST,                125);
            Beep(NOTE_G,              125);
            Beep(REST,                250);
            Beep(NOTE_GSHARP,           125);
            Beep(REST,                125);
            Beep(NOTE_A,            125);
            Beep(NOTE_F * 2,            125);
            Beep(REST,                125);
            Beep(NOTE_F * 2,            125);
            Beep(NOTE_A,            125);
            Beep(REST,                375);

            Beep(NOTE_B,                125);
            Beep(NOTE_F * 2,            125);
            Beep(REST,                125);
            Beep(NOTE_F * 2,            125);
            Beep(NOTE_F * 2,            125);
            Beep(NOTE_E * 2,            125);
            Beep(REST,                125);
            Beep(NOTE_D * 2,            125);
            Beep(NOTE_C * 2,          125);
            Beep(REST,                875);

            /*Zelda theme*/
            /*
            Beep(NOTE_C * 2,         500);
            Beep(NOTE_G,             750);
            Beep(NOTE_C * 2,         250);
            Beep(NOTE_C * 2,         125);
            Beep(NOTE_D * 2,         125);
            Beep(NOTE_E * 2,         125);
            Beep(NOTE_F * 2,         125);
            Beep(NOTE_G * 2,         1250);
            Beep(NOTE_G * 2,         250);
            Beep(NOTE_G * 2,         250);
            Beep(NOTE_GSHARP * 2,     125);
            Beep(NOTE_ASHARP * 2,     125);

            Beep(NOTE_C * 4,         1250);
            Beep(NOTE_C * 4,         250);
            Beep(NOTE_C * 4,         250);
            Beep(NOTE_ASHARP * 2,     125);
            Beep(NOTE_GSHARP * 2,     125);
            Beep(NOTE_ASHARP * 2,     375);
            Beep(NOTE_GSHARP * 2,     125);
            Beep(NOTE_G * 2,        1000);
            Beep(NOTE_G * 2,        500);

            Beep(NOTE_F * 2,         250);
            Beep(NOTE_F * 2,        125);
            Beep(NOTE_G * 2,        125);
            Beep(NOTE_GSHARP * 2,    1000);
            Beep(NOTE_G * 2,        250);
            Beep(NOTE_F * 2,        250);
            Beep(NOTE_DSHARP * 2,    250);
            Beep(NOTE_DSHARP * 2,    125);
            Beep(NOTE_F * 2,        125);
            Beep(NOTE_G * 2,        1000);
            Beep(NOTE_F * 2,        250);
            Beep(NOTE_DSHARP * 2,    250);

            Beep(NOTE_D * 2,        250);
            Beep(NOTE_D * 2,        125);
            Beep(NOTE_E * 2,        125);
            Beep(NOTE_FSHARP * 2,    1000);
            Beep(NOTE_A * 2,        500);
            Beep(NOTE_G * 2,        500);
            Beep(NOTE_G,            125);
            Beep(NOTE_G,            250);
            Beep(NOTE_G,            125);
            Beep(NOTE_G,            500);
            Beep(NOTE_G,            500);

            */
            }
        return 0;
        }