]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
* pythonmain.c: -k option, usage message, more environment flags.
authorGuido van Rossum <guido@python.org>
Thu, 24 Jun 1993 11:10:19 +0000 (11:10 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 24 Jun 1993 11:10:19 +0000 (11:10 +0000)
  (the latter also in frozenmain.c)
* ceval.c: global 'killprint' flag raises exception when printing an
  expression statement's value (useful for finding stray output)
* timemodule.c: add asctime() and ctime().  Change julian date to
  1-based origin (as intended and documented).
* Removed unused DO_TIMES stuff from timemodule.c.  Added 'epoch' and
  'day0' globals (year where time.time() == 0 and day of the week the
  epoch started).

Modules/timemodule.c
Parser/listnode.c
Python/ceval.c
Python/frozenmain.c
Python/pythonmain.c

index 3df088513eba273242ce0ed2294760ce7ab10be2..097c4dabb289b8a67f45aa816ac0b027e59ee69c 100644 (file)
@@ -71,13 +71,6 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <time.h>
 #endif /* !unix */
 
-/* XXX This is bogus -- times() is defined in posixmodule.c */
-#ifdef DO_TIMES
-#include <sys/times.h>
-#include <sys/param.h>
-#include <errno.h>
-#endif
-
 #ifdef SYSV
 /* Access timezone stuff */
 #ifdef OLDTZ                           /* ANSI prepends underscore to these */
@@ -227,32 +220,6 @@ time_millitimer(self, args)
 
 #endif /* DO_MILLI */
 
-#ifdef DO_TIMES
-
-static object *
-time_times(self, args)
-       object *self;
-       object *args;
-{
-       struct tms t;
-       clock_t c;
-       if (!getnoarg(args))
-               return NULL;
-       errno = 0;
-       c = times(&t);
-       if (c == (clock_t) -1) {
-               err_errno(IOError);
-               return NULL;
-       }
-       return mkvalue("(dddd)",
-                      (double)t.tms_utime / HZ,
-                      (double)t.tms_stime / HZ,
-                      (double)t.tms_cutime / HZ,
-                      (double)t.tms_cstime / HZ);
-}
-
-#endif
-
 
 static object *
 time_convert(when, function)
@@ -268,7 +235,7 @@ time_convert(when, function)
                       p->tm_min,
                       p->tm_sec,
                       (p->tm_wday + 6) % 7, /* Want Monday == 0 */
-                      p->tm_yday,
+                      p->tm_yday + 1, /* Want January, 1 == 1 */
                       p->tm_isdst);
 }
 
@@ -294,6 +261,62 @@ time_localtime(self, args)
        return time_convert((time_t)when, localtime);
 }
 
+static int
+gettmarg(args, p)
+       object *args;
+       struct tm *p;
+{
+       if (!getargs(args, "(iiiiiiiii)",
+                    &p->tm_year,
+                    &p->tm_mon,
+                    &p->tm_mday,
+                    &p->tm_hour,
+                    &p->tm_min,
+                    &p->tm_sec,
+                    &p->tm_wday,
+                    &p->tm_yday,
+                    &p->tm_isdst))
+               return 0;
+       if (p->tm_year >= 1900)
+               p->tm_year -= 1900;
+       p->tm_mon--;
+       p->tm_wday = (p->tm_wday + 1) % 7;
+       p->tm_yday--;
+       return 1;
+}
+
+static object *
+time_asctime(self, args)
+       object *self;
+       object *args;
+{
+       struct tm buf;
+       char *p;
+       if (!gettmarg(args, &buf))
+               return NULL;
+       p = asctime(&buf);
+       if (p[24] == '\n')
+               p[24] = '\0';
+       return newstringobject(p);
+}
+
+static object *
+time_ctime(self, args)
+       object *self;
+       object *args;
+{
+       double dt;
+       time_t tt;
+       char *p;
+       if (!getargs(args, "d", &dt))
+               return NULL;
+       tt = dt;
+       p = ctime(&tt);
+       if (p[24] == '\n')
+               p[24] = '\0';
+       return newstringobject(p);
+}
+
 /* Some very old systems may not have mktime().  Comment it out then! */
 
 static object *
@@ -302,20 +325,8 @@ time_mktime(self, args)
        object *args;
 {
        struct tm buf;
-       if (!getargs(args, "(iiiiiiiii)",
-                    &buf.tm_year,
-                    &buf.tm_mon,
-                    &buf.tm_mday,
-                    &buf.tm_hour,
-                    &buf.tm_min,
-                    &buf.tm_sec,
-                    &buf.tm_wday,
-                    &buf.tm_yday,
-                    &buf.tm_isdst))
+       if (!gettmarg(args, &buf))
                return NULL;
-       if (buf.tm_year >= 1900)
-               buf.tm_year -= 1900;
-       buf.tm_mon--;
        return newintobject((long)mktime(&buf));
 }
 
@@ -324,13 +335,12 @@ static struct methodlist time_methods[] = {
        {"millisleep",  time_millisleep},
        {"millitimer",  time_millitimer},
 #endif /* DO_MILLI */
-#ifdef DO_TIMES
-       {"times",       time_times},
-#endif
        {"sleep",       time_sleep},
        {"time",        time_time},
        {"gmtime",      time_gmtime},
        {"localtime",   time_localtime},
+       {"asctime",     time_asctime},
+       {"ctime",       time_ctime},
        {"mktime",      time_mktime},
        {NULL,          NULL}           /* sentinel */
 };
index 07c66ac1418acfb5084dfbc2eccd2277e3bb4891..a914bab23620005c5b1a1453bab79586341890d8 100644 (file)
@@ -40,7 +40,7 @@ listtree(n)
 
 static int level, atbol;
 
-void
+static void
 listnode(fp, n)
        FILE *fp;
        node *n;
index 1c12d9cbc23d6b5c45acdc1f949c5872679c65d0..8ed466342487147a2769b68e4430727d0b8f71a6 100644 (file)
@@ -49,6 +49,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #define CHECKEXC 1     /* Double-check exception checking */
 #endif
 
+/* Global option, may be set by main() */
+int killprint;
+
 
 /* Forward declarations */
 
@@ -639,6 +642,11 @@ eval_code(co, globals, locals, owner, arg)
                                softspace(x, 1);
                                err = writeobject(v, x, 0);
                                flushline();
+                               if (killprint) {
+                                       err_setstr(RuntimeError,
+                                             "printing expression statement");
+                                       x = 0;
+                               }
                        }
                        DECREF(v);
                        break;
index 90d1623590423b5002fb8e35d886aad174ac0877..8bc136ae62f8248217a05e4fa71de3db868aa674 100644 (file)
@@ -30,28 +30,43 @@ extern char *getenv();
 
 extern int debugging;
 extern int verbose;
+extern int killprint;
 
 main(argc, argv)
        int argc;
        char **argv;
 {
        char *p;
+       int n, inspect, sts;
        int n;
+
        if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
                debugging = 1;
        if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
                verbose = 1;
-       initargs(&argc, &argv); /* Defined in config*.c */
+       if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
+               inspect = 1;
+       if ((p = getenv("PYTHONKILLPRINT")) && *p != '\0')
+               killprint = 1;
+
+       initargs(&argc, &argv);
        initall();
        setpythonargv(argc, argv);
+
        n = init_frozen("__main__");
        if (n == 0)
                fatal("__main__ not frozen");
        if (n < 0) {
                print_error();
-               goaway(1);
+               sts = 1;
        }
        else
-               goaway(0);
+               sts = 0;
+
+       if (inspect && isatty((int)fileno(stdin)) &&
+           (filename != NULL || command != NULL))
+               sts = run(stdin, "<stdin>") != 0;
+
+       goaway(sts);
        /*NOTREACHED*/
 }
index 760e5dab2e4f6ef4c7f1a7ac91a7d2b146de3b42..ac1d86a1beafffde0b10d32ccd2ec52a18c12674 100644 (file)
@@ -26,8 +26,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "allobjects.h"
 
-extern int debugging; /* Needed by parser.c */
-extern int verbose; /* Needed by import.c */
+extern int debugging; /* Defined in parser.c */
+extern int verbose; /* Defined in import.c */
+extern int killprint; /* Defined in ceval.c */
 
 /* Interface to getopt(): */
 extern int optind;
@@ -52,10 +53,14 @@ main(argc, argv)
                debugging = 1;
        if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
                verbose = 1;
+       if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
+               inspect = 1;
+       if ((p = getenv("PYTHONKILLPRINT")) && *p != '\0')
+               killprint = 1;
        
-       initargs(&argc, &argv); /* Defined in config*.c */
+       initargs(&argc, &argv);
 
-       while ((c = getopt(argc, argv, "c:div")) != EOF) {
+       while ((c = getopt(argc, argv, "c:dikv")) != EOF) {
                if (c == 'c') {
                        /* -c is the last option; following arguments
                           that look like options are left for the
@@ -77,6 +82,10 @@ main(argc, argv)
                        inspect++;
                        break;
 
+               case 'k':
+                       killprint++;
+                       break;
+
                case 'v':
                        verbose++;
                        break;
@@ -85,8 +94,25 @@ main(argc, argv)
 
                default:
                        fprintf(stderr,
-                               "usage: %s [-c cmd | file | -] [arg] ...\n",
+"usage: %s [-d] [-i] [-k] [-v] [-c cmd | file | -] [arg] ...\n",
                                argv[0]);
+                       fprintf(stderr, "\
+\n\
+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\
+-k     : kill printing expression statement (also PYTHONKILLPRINT=x)\n\
+-v     : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
+-c cmd : program passed in as string (terminates option list)\n\
+file   : program read from script file\n\
+-      : program read from stdin (default; interactive mode if a tty)\n\
+arg ...: arguments passed to program in sys.argv[1:]\n\
+\n\
+Other environment variables:\n\
+PYTHONSTARTUP: file executed on interactive startup (no default)\n\
+PYTHONPATH   : colon-separated list of directories prefixed to the\n\
+               default module search path.  The result is sys.path.\n\
+");
                        exit(2);
                        /*NOTREACHED*/