diff --git a/asterisk.c b/asterisk.c
new file mode 100755
index 0000000000000000000000000000000000000000..1bc7be1743ac89b3dd9a30ebaaf3e272e88fda77
--- /dev/null
+++ b/asterisk.c
@@ -0,0 +1,94 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Top level source file for asterisk
+ * 
+ * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC
+ *
+ * Mark Spencer <markster@linux-support.net>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <asterisk/logger.h>
+#include <asterisk/options.h>
+#include <stdio.h>
+#include <signal.h>
+#include "asterisk.h"
+
+int option_verbose=0;
+int option_debug=0;
+int option_nofork=0;
+int option_quiet=0;
+
+static void urg_handler(int num)
+{
+	/* Called by soft_hangup to interrupt the select, read, or other
+	   system call.  We don't actually need to do anything though.  */
+	if (option_debug)
+		ast_log(LOG_DEBUG, "Urgent handler\n");
+	return;
+}
+
+static void quit_handler(int num)
+{
+	/* Called on exit */
+	if (option_verbose)
+		ast_verbose("Asterisk ending (%d).\n", num);
+	else if (option_debug)
+		ast_log(LOG_DEBUG, "Asterisk ending (%d).\n", num);
+	exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+	char c;
+	/* Check if we're root */
+	if (geteuid()) {
+		ast_log(LOG_ERROR, "Must be run as root\n");
+		exit(1);
+	}
+	/* Check for options */
+	while((c=getopt(argc, argv, "dvq")) != EOF) {
+		switch(c) {
+		case 'd':
+			option_debug++;
+			option_nofork++;
+			option_verbose++;
+			break;
+		case 'v':
+			option_verbose++;
+			break;
+		case 'q':
+			option_quiet++;
+			break;
+		case '?':
+			exit(1);
+		}
+	}
+	/* Print a welcome message if desired */
+	if (option_verbose) {
+		ast_verbose( "Asterisk, Copyright (C) 1999 Adtran, Inc. and Linux Support Services, LLC\n");
+		ast_verbose( "Written by Mark Spencer <markster@linux-support.net>\n");
+		ast_verbose( "=========================================================================\n");
+	}
+	signal(SIGURG, urg_handler);
+	signal(SIGINT, quit_handler);
+	signal(SIGTERM, quit_handler);
+	signal(SIGHUP, quit_handler);
+	if (init_logger())
+		exit(1);
+	if (load_pbx())
+		exit(1);
+	if (load_modules())
+		exit(1);
+	/* We might have the option of showing a console, but for now just
+	   do nothing... */
+	if (option_verbose)
+		ast_verbose( "Asterisk Ready.\n");
+	select(0,NULL,NULL,NULL,NULL);
+	return 0;
+}