Initial revision
This commit is contained in:
parent
718581a522
commit
ce9739ba76
|
@ -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 <sys/types.h> 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 <sys/types.h> doesn't define. */
|
||||||
|
#undef mode_t
|
||||||
|
|
||||||
|
/* Define if you don't have dirent.h, but have ndir.h. */
|
||||||
|
#undef NDIR
|
||||||
|
|
||||||
|
/* Define to `long' if <sys/types.h> doesn't define. */
|
||||||
|
#undef off_t
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> 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 <sys/types.h> 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 <sys/time.h> and <time.h>. */
|
||||||
|
#undef TIME_WITH_SYS_TIME
|
||||||
|
|
||||||
|
/* Define if your <sys/time.h> declares struct tm. */
|
||||||
|
#undef TM_IN_SYS_TIME
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
#undef uid_t
|
||||||
|
|
||||||
|
/* Define if the closedir function returns void instead of int. */
|
||||||
|
#undef VOID_CLOSEDIR
|
||||||
|
|
||||||
|
/* Define if your <unistd.h> 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 <sys/select.h> and <sys/time.h>
|
||||||
|
(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 <dlfcn.h> header file. */
|
||||||
|
#undef HAVE_DLFCN_H
|
||||||
|
|
||||||
|
/* Define if you have the <signal.h> header file. */
|
||||||
|
#define HAVE_SIGNAL_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <stdarg.h> header file. */
|
||||||
|
#define HAVE_STDARG_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <stdlib.h> header file. */
|
||||||
|
#define HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/audioio.h> header file. */
|
||||||
|
#undef HAVE_SYS_AUDIOIO_H
|
||||||
|
|
||||||
|
/* Define if you have the <sys/param.h> header file. */
|
||||||
|
#undef HAVE_SYS_PARAM_H
|
||||||
|
|
||||||
|
/* Define if you have the <sys/select.h> header file. */
|
||||||
|
#undef HAVE_SYS_SELECT_H
|
||||||
|
|
||||||
|
/* Define if you have the <sys/times.h> header file. */
|
||||||
|
#undef HAVE_SYS_TIMES_H
|
||||||
|
|
||||||
|
/* Define if you have the <sys/un.h> header file. */
|
||||||
|
#undef HAVE_SYS_UN_H
|
||||||
|
|
||||||
|
/* Define if you have the <sys/utsname.h> header file. */
|
||||||
|
#undef HAVE_SYS_UTSNAME_H
|
||||||
|
|
||||||
|
/* Define if you have the <thread.h> header file. */
|
||||||
|
#undef HAVE_THREAD_H
|
||||||
|
|
||||||
|
/* Define if you have the <unistd.h> header file. */
|
||||||
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
|
/* Define if you have the <utime.h> 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
|
|
@ -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
|
|
@ -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");
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <MacHeaders>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
}
|
Loading…
Reference in New Issue