Two changes by Jeff Rush (slightly tweaked):

- New option -x, to skip first line of script

- Use the correct platform-specific delimiter and library location in
the usage message

(Also removed two blank lines and moved one line around so that each
part of the usage message is again under 512 bytes and the whole usage
message still fits in 23 lines.)
diff --git a/Modules/main.c b/Modules/main.c
index df79ab5..83fd9dc 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -32,6 +32,7 @@
 /* Python interpreter main program */
 
 #include "Python.h"
+#include "osdefs.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -41,6 +42,12 @@
 #include <fcntl.h>
 #endif
 
+#if defined(PYOS_OS2) || defined(MS_WINDOWS)
+#define PYTHONHOMEHELP "<prefix>\\lib"
+#else
+#define PYTHONHOMEHELP "<prefix>/python1.5"
+#endif
+
 /* Interface to getopt(): */
 extern int optind;
 extern char *optarg;
@@ -53,20 +60,21 @@
 
 /* Short usage message (with %s for argv0) */
 static char *usage_line =
-"usage: %s [-d] [-i] [-O] [-S] [-u] [-v] [-X] [-c cmd | file | -] [arg] ...\n";
+"usage: %s [-d] [-i] [-O] [-S] [-u] [-v] [-x] [-X] [-c cmd | file | -] [arg] ...\n";
 
 /* Long usage message, split into parts < 512 bytes */
-static char *usage_top = "\n\
+static char *usage_top = "\
 Options and arguments (and corresponding environment variables):\n\
 -d     : debug output from parser (also PYTHONDEBUG=x)\n\
 -i     : inspect interactively after running script, (also PYTHONINSPECT=x)\n\
          and force prompts, even if stdin does not appear to be a terminal.\n\
 -O     : optimize generated bytecode (a tad).\n\
 -S     : don't imply 'import site' on initialization\n\
+-u     : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\
 ";
 static char *usage_mid = "\
--u     : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\
 -v     : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
+-x     : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
 -X     : disable class based built-in exceptions\n\
 -c cmd : program passed in as string (terminates option list)\n\
 file   : program read from script file\n\
@@ -74,13 +82,12 @@
 arg ...: arguments passed to program in sys.argv[1:]\n\
 ";
 static char *usage_bot = "\
-\n\
 Other environment variables:\n\
 PYTHONSTARTUP: file executed on interactive startup (no default)\n\
-PYTHONPATH   : colon-separated list of directories prefixed to the\n\
+PYTHONPATH   : '%c'-separated list of directories prefixed to the\n\
                default module search path.  The result is sys.path.\n\
-PYTHONHOME   : alternate <prefix> directory (or <prefix>:<exec_prefix>).\n\
-               The default module search path uses <prefix>/lib/python1.5.\n\
+PYTHONHOME   : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\
+               The default module search path uses %s.\n\
 ";
 
 
@@ -99,6 +106,7 @@
 	char *p;
 	int inspect = 0;
 	int unbuffered = 0;
+	int skipfirstline = 0;
 	int stdin_is_interactive = 0;
 
 	orig_argc = argc;	/* For Py_GetArgcArgv() */
@@ -109,7 +117,7 @@
 	if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
 		unbuffered = 1;
 
-	while ((c = getopt(argc, argv, "c:diOSuvX")) != EOF) {
+	while ((c = getopt(argc, argv, "c:diOSuvxX")) != EOF) {
 		if (c == 'c') {
 			/* -c is the last option; following arguments
 			   that look like options are left for the
@@ -150,6 +158,10 @@
 			Py_VerboseFlag++;
 			break;
 
+		case 'x':
+			skipfirstline = 1;
+			break;
+
 		case 'X':
 			Py_UseClassExceptionsFlag = 0;
 			break;
@@ -160,7 +172,8 @@
 			fprintf(stderr, usage_line, argv[0]);
 			fprintf(stderr, usage_top);
 			fprintf(stderr, usage_mid);
-			fprintf(stderr, usage_bot);
+			fprintf(stderr, usage_bot,
+				DELIM, DELIM, PYTHONHOMEHELP);
 			exit(2);
 			/*NOTREACHED*/
 
@@ -177,6 +190,10 @@
 					argv[0], filename);
 				exit(2);
 			}
+			else if (skipfirstline) {
+				char line[256];
+				fgets(line, sizeof line, fp);
+			}
 		}
 	}