From ce9739ba769b465047f644672eda654efed7ad80 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 5 Jan 1994 16:17:15 +0000 Subject: [PATCH] Initial revision --- Mac/Include/config.h | 224 +++++++++++++++++++++++++++++++ Mac/Modules/config.c | 210 ++++++++++++++++++++++++++++++ Mac/Modules/macmodule.c | 246 +++++++++++++++++++++++++++++++++++ Mac/Python/macgetmtime.c | 13 ++ Mac/Python/macguesstabsize.c | 27 ++++ 5 files changed, 720 insertions(+) create mode 100644 Mac/Include/config.h create mode 100644 Mac/Modules/config.c create mode 100644 Mac/Modules/macmodule.c create mode 100644 Mac/Python/macgetmtime.c create mode 100644 Mac/Python/macguesstabsize.c diff --git a/Mac/Include/config.h b/Mac/Include/config.h new file mode 100644 index 00000000000..8c768e0b257 --- /dev/null +++ b/Mac/Include/config.h @@ -0,0 +1,224 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on Macintosh, compiling with THINK C. */ +#define THINK_C + +/* Define if on Macintosh, compiling with anyu C compiler. */ +#define macintosh + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +#undef _ALL_SOURCE +#endif + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define if you have dirent.h. */ +#undef DIRENT + +/* Define to the type of elements in the array set by `getgroups'. + Usually this is either `int' or `gid_t'. */ +#undef GETGROUPS_T + +/* Define to `int' if doesn't define. */ +#undef gid_t + +/* Define if your struct tm has tm_zone. */ +#undef HAVE_TM_ZONE + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +#undef HAVE_TZNAME + +/* Define if on MINIX. */ +#undef _MINIX + +/* Define to `int' if doesn't define. */ +#undef mode_t + +/* Define if you don't have dirent.h, but have ndir.h. */ +#undef NDIR + +/* Define to `long' if doesn't define. */ +#undef off_t + +/* Define to `int' if doesn't define. */ +#undef pid_t + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +#undef _POSIX_1_SOURCE + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define to `unsigned' if doesn't define. */ +#undef size_t + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS + +/* Define if you don't have dirent.h, but have sys/dir.h. */ +#undef SYSDIR + +/* Define if you don't have dirent.h, but have sys/ndir.h. */ +#undef SYSNDIR + +/* Define if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Define if your declares struct tm. */ +#undef TM_IN_SYS_TIME + +/* Define to `int' if doesn't define. */ +#undef uid_t + +/* Define if the closedir function returns void instead of int. */ +#undef VOID_CLOSEDIR + +/* Define if your contains bad prototypes for exec*() + (as it does on SGI IRIX 4.x) */ +#undef BAD_EXEC_PROTOTYPES + +/* Define if getpgrp() must be called as getpgrp(0) + and (consequently) setpgrp() as setpgrp(0, 0). */ +#undef GETPGRP_HAVE_ARGS + +/* Define if your compiler supports function prototypes */ +#define HAVE_PROTOTYPES + +/* Define if you can safely include both and + (which you can't on SCO ODT 3.0). */ +#undef SYS_SELECT_WITH_SYS_TIME + +/* Define if you want to compile in rudimentary thread support */ +#undef WITH_THREAD + +/* Define if you want to use the GNU readline library */ +#undef WITH_READLINE + +/* Define if you have clock. */ +#define HAVE_CLOCK 1 + +/* Define if you have ftime. */ +#undef HAVE_FTIME + +/* Define if you have getpeername. */ +#undef HAVE_GETPEERNAME + +/* Define if you have getpgrp. */ +#undef HAVE_GETPGRP + +/* Define if you have gettimeofday. */ +#undef HAVE_GETTIMEOFDAY + +/* Define if you have getwd. */ +#define HAVE_GETWD 1 + +/* Define if you have lstat. */ +#undef HAVE_LSTAT + +/* Define if you have readline. */ +#undef HAVE_READLINE + +/* Define if you have readlink. */ +#undef HAVE_READLINK + +/* Define if you have select. */ +#undef HAVE_SELECT + +/* Define if you have setpgid. */ +#undef HAVE_SETPGID + +/* Define if you have setpgrp. */ +#undef HAVE_SETPGRP + +/* Define if you have setsid. */ +#undef HAVE_SETSID + +/* Define if you have siginterrupt. */ +#undef HAVE_SIGINTERRUPT + +/* Define if you have symlink. */ +#undef HAVE_SYMLINK + +/* Define if you have tcgetpgrp. */ +#undef HAVE_TCGETPGRP + +/* Define if you have tcsetpgrp. */ +#undef HAVE_TCSETPGRP + +/* Define if you have times. */ +#undef HAVE_TIMES + +/* Define if you have uname. */ +#undef HAVE_UNAME + +/* Define if you have waitpid. */ +#undef HAVE_WAITPID + +/* Define if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#undef HAVE_SYS_AUDIOIO_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIMES_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_UN_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_UTSNAME_H + +/* Define if you have the header file. */ +#undef HAVE_THREAD_H + +/* Define if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have the header file. */ +#undef HAVE_UTIME_H + +/* Define if you have the dl library (-ldl). */ +#undef HAVE_LIBDL + +/* Define if you have the mpc library (-lmpc). */ +#undef HAVE_LIBMPC + +/* Define if you have the nsl library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define if you have the seq library (-lseq). */ +#undef HAVE_LIBSEQ + +/* Define if you have the socket library (-lsocket). */ +#undef HAVE_LIBSOCKET + +/* Define if you have the sun library (-lsun). */ +#undef HAVE_LIBSUN + +/* Define if you have the thread library (-lthread). */ +#undef HAVE_LIBTHREAD diff --git a/Mac/Modules/config.c b/Mac/Modules/config.c new file mode 100644 index 00000000000..a41a0d650ae --- /dev/null +++ b/Mac/Modules/config.c @@ -0,0 +1,210 @@ +/*********************************************************** +Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum, +Amsterdam, The Netherlands. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +******************************************************************/ + +/* Universal Python configuration file */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +#include "myproto.h" +#include "mymalloc.h" +#include "osdefs.h" +#include "intrcheck.h" + + +#ifndef NO_MAIN + +/* Normally, the main program is called from here (so everything else + can be in libPython.a). We save a pointer to argv[0] because it + may be needed for dynamic loading of modules in import.c. If you + have your own main program and want to use non-SunOS dynamic + loading, you will have to provide your own version of + getprogramname(). */ + +static char *argv0; + +main(argc, argv) + int argc; + char **argv; +{ +#ifdef macintosh + wargs(&argc, &argv); +#endif + argv0 = argv[0]; + realmain(argc, argv); +} + +char * +getprogramname() +{ + return argv0; +} + +#endif + + +/* Return the initial python search path. This is called once from + initsys() to initialize sys.path. + The environment variable PYTHONPATH is fetched and the default path + appended. (The Mac has no environment variables, so there the + default path is always returned.) The default path may be passed + to the preprocessor; if not, a system-dependent default is used. */ + +#ifndef PYTHONPATH +#ifdef macintosh +#define PYTHONPATH ": :Lib :Lib:stdwin :Demo" +#endif /* macintosh */ +#endif /* !PYTHONPATH */ + +#ifndef PYTHONPATH +#ifdef MSDOS +#define PYTHONPATH ".;..\\lib;\\python\\lib" +#endif /* MSDOS */ +#endif /* !PYTHONPATH */ + +#ifndef PYTHONPATH +#define PYTHONPATH ".:/usr/local/lib/python" +#endif /* !PYTHONPATH */ + +extern char *getenv(); + +char * +getpythonpath() +{ +#ifdef macintosh + return PYTHONPATH; +#else /* !macintosh */ + char *path = getenv("PYTHONPATH"); + char *defpath = PYTHONPATH; + char *buf; + char *p; + int n; + + if (path == 0 || *path == '\0') + return defpath; + n = strlen(path) + strlen(defpath) + 2; + buf = malloc(n); + if (buf == NULL) + return path; /* XXX too bad -- but not likely */ + strcpy(buf, path); + p = buf + strlen(buf); + *p++ = DELIM; + strcpy(p, defpath); + return buf; +#endif /* !macintosh */ +} + + +/* Table of built-in modules. + These are initialized when first imported. + Note: selection of optional extensions is now generally done by the + makesetup script. */ + +extern void initarray(); +extern void initmath(); +extern void initparser(); +extern void initmac(); +extern void initregex(); +extern void initstrop(); +extern void initstruct(); +extern void inittime(); +extern void initdbm(); +extern void initfcntl(); +extern void initnis(); +extern void initpwd(); +extern void initgrp(); +extern void initselect(); +extern void initsocket(); +extern void initaudioop(); +extern void initimageop(); +extern void initrgbimg(); +extern void initstdwin(); +extern void initmd5(); +extern void initmpz(); +extern void initrotor(); +extern void inital(); +extern void initcd(); +extern void initcl(); +extern void initfm(); +extern void initgl(); +extern void initimgfile(); +extern void initsgi(); +extern void initsv(); +extern void initfl(); +extern void initthread(); +extern void inittiming(); + +/* -- ADDMODULE MARKER 1 -- */ + +extern void initmarshal(); + +struct { + char *name; + void (*initfunc)(); +} inittab[] = { + + {"array", initarray}, + {"math", initmath}, + {"parser", initparser}, + {"mac", initmac}, + {"regex", initregex}, + {"strop", initstrop}, + {"struct", initstruct}, + {"time", inittime}, + {"audioop", initaudioop}, + {"imageop", initimageop}, + {"rgbimg", initrgbimg}, + {"stdwin", initstdwin}, + {"md5", initmd5}, + {"rotor", initrotor}, + +/* -- ADDMODULE MARKER 2 -- */ + + /* This module "lives in" with marshal.c */ + {"marshal", initmarshal}, + + /* These entries are here for sys.builtin_module_names */ + {"__main__", NULL}, + {"__builtin__", NULL}, + {"sys", NULL}, + + /* Sentinel */ + {0, 0} +}; + +#ifdef USE_FROZEN +#include "frozen.c" +#else +struct frozen { + char *name; + char *code; + int size; +} frozen_modules[] = { + {0, 0, 0} +}; +#endif diff --git a/Mac/Modules/macmodule.c b/Mac/Modules/macmodule.c new file mode 100644 index 00000000000..3d36f358171 --- /dev/null +++ b/Mac/Modules/macmodule.c @@ -0,0 +1,246 @@ +/*********************************************************** +Copyright 1991, 1992, 1993, 1004 by Stichting Mathematisch Centrum, +Amsterdam, The Netherlands. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +******************************************************************/ + +/* Macintosh OS module implementation */ + +#include "allobjects.h" + +#include "import.h" +#include "modsupport.h" + +#include "::unixemu:dir.h" +#include "::unixemu:stat.h" + +static object *MacError; /* Exception */ + + +static object * +mac_chdir(self, args) + object *self; + object *args; +{ + char *path; + if (!getstrarg(args, &path)) + return NULL; + if (chdir(path) != 0) + return err_errno(MacError); + INCREF(None); + return None; +} + + +static object * +mac_getcwd(self, args) + object *self; + object *args; +{ + extern char *getwd(); + char buf[1025]; + if (!getnoarg(args)) + return NULL; + strcpy(buf, "mac.getcwd() failed"); /* In case getwd() doesn't set a msg */ + if (getwd(buf) == NULL) { + err_setstr(MacError, buf); + return NULL; + } + return newstringobject(buf); +} + + +static object * +mac_listdir(self, args) + object *self; + object *args; +{ + object *d, *v; + char *name; + DIR *dirp; + struct direct *ep; + if (!getstrarg(args, &name)) + return NULL; + if ((dirp = opendir(name)) == NULL) + return err_errno(MacError); + if ((d = newlistobject(0)) == NULL) { + closedir(dirp); + return NULL; + } + while ((ep = readdir(dirp)) != NULL) { + v = newstringobject(ep->d_name); + if (v == NULL) { + DECREF(d); + d = NULL; + break; + } + if (addlistitem(d, v) != 0) { + DECREF(v); + DECREF(d); + d = NULL; + break; + } + DECREF(v); + } + closedir(dirp); + return d; +} + + +static object * +mac_mkdir(self, args) + object *self; + object *args; +{ + char *path; + int mode; + if (!getargs(args, "(si)", &path, &mode)) + return NULL; + if (mkdir(path, mode) != 0) + return err_errno(MacError); + INCREF(None); + return None; +} + + +static object * +mac_rename(self, args) + object *self; + object *args; +{ + char *src, *dst; + if (!getargs(args, "(ss)", &src, &dst)) + return NULL; + if (rename(src, dst) != 0) + return err_errno(MacError); + INCREF(None); + return None; +} + + +static object * +mac_rmdir(self, args) + object *self; + object *args; +{ + char *path; + if (!getstrarg(args, &path)) + return NULL; + if (rmdir(path) != 0) + return err_errno(MacError); + INCREF(None); + return None; +} + + +static object * +mac_stat(self, args) + object *self; + object *args; +{ + struct stat st; + char *path; + object *v; + if (!getstrarg(args, &path)) + return NULL; + if (stat(path, &st) != 0) + return err_errno(MacError); + v = newtupleobject(11); + if (v == NULL) + return NULL; +#define SET(i, val) settupleitem(v, i, newintobject((long)(val))) +#define UNSET(i, val) SET(i, 0) /* For values my Mac stat doesn't support */ + SET(0, st.st_mode); + UNSET(1, st.st_ino); + UNSET(2, st.st_dev); + UNSET(3, st.st_nlink); + UNSET(4, st.st_uid); + UNSET(5, st.st_gid); + SET(6, st.st_size); + UNSET(7, st.st_atime); + SET(8, st.st_mtime); + UNSET(9, st.st_ctime); + SET(10, st.st_rsize); /* Mac-specific: resource size */ + /* XXX Check that unixemu:stat.c defines this! */ +#undef SET + if (err_occurred()) { + DECREF(v); + return NULL; + } + return v; +} + + +static object * +mac_sync(self, args) + object *self; + object *args; +{ + if (!getnoarg(args)) + return NULL; + sync(); + INCREF(None); + return None; +} + + +static object * +mac_unlink(self, args) + object *self; + object *args; +{ + char *path; + if (!getstrarg(args, &path)) + return NULL; + if (unlink(path) != 0) + return err_errno(MacError); + INCREF(None); + return None; +} + + +static struct methodlist mac_methods[] = { + {"chdir", mac_chdir}, + {"getcwd", mac_getcwd}, + {"listdir", mac_listdir}, + {"mkdir", mac_mkdir}, + {"rename", mac_rename}, + {"rmdir", mac_rmdir}, + {"stat", mac_stat}, + {"sync", mac_sync}, + {"unlink", mac_unlink}, + {NULL, NULL} /* Sentinel */ +}; + + +void +initmac() +{ + object *m, *d; + + m = initmodule("mac", mac_methods); + d = getmoduledict(m); + + /* Initialize mac.error exception */ + MacError = newstringobject("mac.error"); + if (MacError == NULL || dictinsert(d, "error", MacError) != 0) + fatal("can't define mac.error"); +} diff --git a/Mac/Python/macgetmtime.c b/Mac/Python/macgetmtime.c new file mode 100644 index 00000000000..c58100992da --- /dev/null +++ b/Mac/Python/macgetmtime.c @@ -0,0 +1,13 @@ +#include "::unixemu:stat.h" + +/* Interfaced used by import.c */ + +long +getmtime(path) + char *path; +{ + struct stat st; + if (stat(path, &st) != 0) + return -1L; + return st.st_mtime; +} diff --git a/Mac/Python/macguesstabsize.c b/Mac/Python/macguesstabsize.c new file mode 100644 index 00000000000..7d1abb7d4a3 --- /dev/null +++ b/Mac/Python/macguesstabsize.c @@ -0,0 +1,27 @@ +#include +#include + +/* Interface used by tokenizer.c */ + +guesstabsize(path) + char *path; +{ + char s[256]; + int refnum; + Handle h; + int tabsize = 0; + s[0] = strlen(path); + strncpy(s+1, path, s[0]); + refnum = OpenResFile(s); +/* printf("%s --> refnum=%d\n", path, refnum); */ + if (refnum == -1) + return 0; + UseResFile(refnum); + h = GetIndResource('ETAB', 1); + if (h != 0) { + tabsize = (*(short**)h)[1]; +/* printf("tabsize=%d\n", tabsize); */ + } + CloseResFile(refnum); + return tabsize; +}