diff options
Diffstat (limited to 'Mac/Modules')
-rw-r--r-- | Mac/Modules/config.c | 210 | ||||
-rw-r--r-- | Mac/Modules/macmodule.c | 246 |
2 files changed, 456 insertions, 0 deletions
diff --git a/Mac/Modules/config.c b/Mac/Modules/config.c new file mode 100644 index 0000000..a41a0d6 --- /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 <stdio.h> +#include <string.h> + +#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 0000000..3d36f35 --- /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"); +} |