diff options
author | Guido van Rossum <guido@python.org> | 1993-10-18 11:44:47 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1993-10-18 11:44:47 (GMT) |
commit | cacd9579d48cb1e2acc3536c9701987b118edf8c (patch) | |
tree | a3d31a150228428d44866f8a5e6fe496c5c9dbff /Modules/stdwinmodule.c | |
parent | 842d2ccdcd540399501a918b9724d2eaf5599f39 (diff) | |
download | cpython-cacd9579d48cb1e2acc3536c9701987b118edf8c.zip cpython-cacd9579d48cb1e2acc3536c9701987b118edf8c.tar.gz cpython-cacd9579d48cb1e2acc3536c9701987b118edf8c.tar.bz2 |
* stdwinmodule.c (stdwin_done): interface to shutdown stdwin (now this is
no longer done by config.c).
* stdwinmodule.c (initstdwin), config.c (initall): get command line
arguments from sys.argv instead of special-casing stdwin in config.c
* import.c (get_module): fix core dump when foomodule.o does not define
initfoo().
* ChangeLog: documented changes by Sjoerd.
Diffstat (limited to 'Modules/stdwinmodule.c')
-rw-r--r-- | Modules/stdwinmodule.c | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c index a6f6fba..1fff814 100644 --- a/Modules/stdwinmodule.c +++ b/Modules/stdwinmodule.c @@ -66,6 +66,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "allobjects.h" #include "modsupport.h" #include "ceval.h" +#include "sysmodule.h" #ifdef macintosh #include ":::stdwin:H:stdwin.h" @@ -1943,6 +1944,21 @@ typeobject Windowtype = { /* Stdwin methods */ static object * +stdwin_done(sw, args) + object *sw; + object *args; +{ + if (!getnoarg(args)) + return NULL; + wdone(); + /* XXX There is no protection against continued use of + XXX stdwin functions or objects after this call is made. + XXX Use at own risk */ + INCREF(None); + return None; +} + +static object * stdwin_open(sw, args) object *sw; object *args; @@ -2467,6 +2483,7 @@ static struct methodlist stdwin_methods[] = { {"askfile", stdwin_askfile}, {"askstr", stdwin_askstr}, {"askync", stdwin_askync}, + {"done", stdwin_done}, {"fetchcolor", stdwin_fetchcolor}, #ifdef unix {"fileno", stdwin_connectionnumber}, @@ -2515,6 +2532,67 @@ static struct methodlist stdwin_methods[] = { {NULL, NULL} /* sentinel */ }; +static int +checkstringlist(args, ps, pn) + object *args; + char ***ps; + int *pn; +{ + int i, n; + char **s; + if (!is_listobject(args)) { + err_setstr(TypeError, "list of strings expected"); + return 0; + } + n = getlistsize(args); + s = NEW(char *, n+1); + if (s == NULL) { + err_nomem(); + return 0; + } + for (i = 0; i < n; i++) { + object *item = getlistitem(args, i); + if (!is_stringobject(item)) { + err_setstr(TypeError, "list of strings expected"); + return 0; + } + s[i] = getstringvalue(item); + } + s[n] = NULL; /* In case caller wants a NULL-terminated list */ + *ps = s; + *pn = n; + return 1; +} + +static int +putbackstringlist(list, s, n) + object *list; + char **s; + int n; +{ + int oldsize = getlistsize(list); + object *newlist; + int i; + if (n == oldsize) + return 1; + newlist = newlistobject(n); + for (i = 0; i < n && newlist != NULL; i++) { + object *item = newstringobject(s[i]); + if (item == NULL) { + DECREF(newlist); + newlist = NULL; + } + else + setlistitem(newlist, i, item); + } + if (newlist == NULL) + return 0; + (*list->ob_type->tp_as_sequence->sq_ass_slice) + (list, 0, oldsize, newlist); + DECREF(newlist); + return 1; +} + void initstdwin() { @@ -2522,7 +2600,18 @@ initstdwin() static int inited = 0; if (!inited) { - winit(); + int argc = 0; + char **argv = NULL; + object *sys_argv = sysget("argv"); + if (sys_argv != NULL) { + if (!checkstringlist(sys_argv, &argv, &argc)) + err_clear(); + } + winitargs(&argc, &argv); + if (argv != NULL) { + if (!putbackstringlist(sys_argv, argv, argc)) + err_clear(); + } inited = 1; } m = initmodule("stdwin", stdwin_methods); |