Skip to content

Commit

Permalink
* pythonmain.c: -k option, usage message, more environment flags.
Browse files Browse the repository at this point in the history
  (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).
  • Loading branch information
gvanrossum committed Jun 24, 1993
1 parent 5ef74b8 commit 9e90a67
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 59 deletions.
110 changes: 60 additions & 50 deletions Modules/timemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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)
Expand All @@ -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);
}

Expand All @@ -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 *
Expand All @@ -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));
}

Expand All @@ -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 */
};
Expand Down
2 changes: 1 addition & 1 deletion Parser/listnode.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ listtree(n)

static int level, atbol;

void
static void
listnode(fp, n)
FILE *fp;
node *n;
Expand Down
8 changes: 8 additions & 0 deletions Python/ceval.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand Down Expand Up @@ -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;
Expand Down
21 changes: 18 additions & 3 deletions Python/frozenmain.c
Original file line number Diff line number Diff line change
Expand Up @@ -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*/
}
36 changes: 31 additions & 5 deletions Python/pythonmain.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand All @@ -77,6 +82,10 @@ main(argc, argv)
inspect++;
break;

case 'k':
killprint++;
break;

case 'v':
verbose++;
break;
Expand All @@ -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*/

Expand Down

0 comments on commit 9e90a67

Please sign in to comment.