Commit 41835267 authored by Barry Warsaw's avatar Barry Warsaw

Renamed, but *not* tested or compiled. I don't even have the STDWIN

library.
parent 71102ba1
...@@ -70,10 +70,8 @@ PERFORMANCE OF THIS SOFTWARE. ...@@ -70,10 +70,8 @@ PERFORMANCE OF THIS SOFTWARE.
XXX more? XXX more?
*/ */
#include "allobjects.h" #include "Python.h"
#include "modsupport.h"
#include "ceval.h"
#include "sysmodule.h"
#ifdef macintosh #ifdef macintosh
#include "macglue.h" #include "macglue.h"
#endif #endif
...@@ -91,60 +89,61 @@ PERFORMANCE OF THIS SOFTWARE. ...@@ -91,60 +89,61 @@ PERFORMANCE OF THIS SOFTWARE.
static type_lock StdwinLock; /* Lock held when interpreter not locked */ static type_lock StdwinLock; /* Lock held when interpreter not locked */
#define BGN_STDWIN BGN_SAVE acquire_lock(StdwinLock, 1); #define BGN_STDWIN Py_BEGIN_ALLOW_THREADS acquire_lock(StdwinLock, 1);
#define RET_STDWIN release_lock(StdwinLock); RET_SAVE #define RET_STDWIN release_lock(StdwinLock); Py_BLOCK_THREADS
#define END_STDWIN release_lock(StdwinLock); END_SAVE #define END_STDWIN release_lock(StdwinLock); Py_END_ALLOW_THREADS
#else #else
#define BGN_STDWIN BGN_SAVE #define BGN_STDWIN Py_BEGIN_ALLOW_THREADS
#define RET_STDWIN RET_SAVE #define RET_STDWIN Py_BLOCK_THREADS
#define END_STDWIN END_SAVE #define END_STDWIN Py_END_ALLOW_THREADS
#endif #endif
#define getpointarg(v, a) getargs(v, "(ii)", a, (a)+1) #define getpointarg(v, a) PyArg_Parse(v, "(ii)", a, (a)+1)
#define get3pointarg(v, a) getargs(v, "((ii)(ii)(ii))", \ #define get3pointarg(v, a) PyArg_Parse(v, "((ii)(ii)(ii))", \
a, a+1, a+2, a+3, a+4, a+5) a, a+1, a+2, a+3, a+4, a+5)
#define getrectarg(v, a) getargs(v, "((ii)(ii))", a, a+1, a+2, a+3) #define getrectarg(v, a) PyArg_Parse(v, "((ii)(ii))", a, a+1, a+2, a+3)
#define getrectintarg(v, a) getargs(v, "(((ii)(ii))i)", a, a+1, a+2, a+3, a+4) #define getrectintarg(v, a) PyArg_Parse(v, "(((ii)(ii))i)", \
#define getpointintarg(v, a) getargs(v, "((ii)i)", a, a+1, a+2) a, a+1, a+2, a+3, a+4)
#define getrectpointarg(v, a) getargs(v, "(((ii)(ii))(ii))", \ #define getpointintarg(v, a) PyArg_Parse(v, "((ii)i)", a, a+1, a+2)
a, a+1, a+2, a+3, a+4, a+5) #define getrectpointarg(v, a) PyArg_Parse(v, "(((ii)(ii))(ii))", \
a, a+1, a+2, a+3, a+4, a+5)
static object *StdwinError; /* Exception stdwin.error */ static PyObject *StdwinError; /* Exception stdwin.error */
/* Window and menu object types declared here because of forward references */ /* Window and menu object types declared here because of forward references */
typedef struct { typedef struct {
OB_HEAD PyObject_HEAD
object *w_title; PyObject *w_title;
WINDOW *w_win; WINDOW *w_win;
object *w_attr; /* Attributes dictionary */ PyObject *w_attr; /* Attributes dictionary */
} windowobject; } windowobject;
staticforward typeobject Windowtype; staticforward PyTypeObject Windowtype;
#define is_windowobject(wp) ((wp)->ob_type == &Windowtype) #define is_windowobject(wp) ((wp)->ob_type == &Windowtype)
typedef struct { typedef struct {
OB_HEAD PyObject_HEAD
MENU *m_menu; MENU *m_menu;
int m_id; int m_id;
object *m_attr; /* Attributes dictionary */ PyObject *m_attr; /* Attributes dictionary */
} menuobject; } menuobject;
staticforward typeobject Menutype; staticforward PyTypeObject Menutype;
#define is_menuobject(mp) ((mp)->ob_type == &Menutype) #define is_menuobject(mp) ((mp)->ob_type == &Menutype)
typedef struct { typedef struct {
OB_HEAD PyObject_HEAD
BITMAP *b_bitmap; BITMAP *b_bitmap;
object *b_attr; /* Attributes dictionary */ PyObject *b_attr; /* Attributes dictionary */
} bitmapobject; } bitmapobject;
staticforward typeobject Bitmaptype; staticforward PyTypeObject Bitmaptype;
#define is_bitmapobject(mp) ((mp)->ob_type == &Bitmaptype) #define is_bitmapobject(mp) ((mp)->ob_type == &Bitmaptype)
...@@ -153,37 +152,37 @@ staticforward typeobject Bitmaptype; ...@@ -153,37 +152,37 @@ staticforward typeobject Bitmaptype;
static int static int
getmenudetail(v, ep) getmenudetail(v, ep)
object *v; PyObject *v;
EVENT *ep; EVENT *ep;
{ {
menuobject *mp; menuobject *mp;
if (!getargs(v, "(Oi)", &mp, &ep->u.m.item)) if (!PyArg_Parse(v, "(Oi)", &mp, &ep->u.m.item))
return 0; return 0;
if (!is_menuobject(mp)) if (!is_menuobject(mp))
return err_badarg(); return PyErr_BadArgument();
ep->u.m.id = mp->m_id; ep->u.m.id = mp->m_id;
return 1; return 1;
} }
static int static int
geteventarg(v, ep) geteventarg(v, ep)
object *v; PyObject *v;
EVENT *ep; EVENT *ep;
{ {
object *wp, *detail; PyObject *wp, *detail;
int a[4]; int a[4];
if (!getargs(v, "(iOO)", &ep->type, &wp, &detail)) if (!PyArg_Parse(v, "(iOO)", &ep->type, &wp, &detail))
return 0; return 0;
if (is_windowobject(wp)) if (is_windowobject(wp))
ep->window = ((windowobject *)wp) -> w_win; ep->window = ((windowobject *)wp) -> w_win;
else if (wp == None) else if (wp == Py_None)
ep->window = NULL; ep->window = NULL;
else else
return err_badarg(); return PyErr_BadArgument();
switch (ep->type) { switch (ep->type) {
case WE_CHAR: { case WE_CHAR: {
char c; char c;
if (!getargs(detail, "c", &c)) if (!PyArg_Parse(detail, "c", &c))
return 0; return 0;
ep->u.character = c; ep->u.character = c;
return 1; return 1;
...@@ -201,16 +200,16 @@ geteventarg(v, ep) ...@@ -201,16 +200,16 @@ geteventarg(v, ep)
case WE_MOUSE_DOWN: case WE_MOUSE_DOWN:
case WE_MOUSE_UP: case WE_MOUSE_UP:
case WE_MOUSE_MOVE: case WE_MOUSE_MOVE:
return getargs(detail, "((ii)iii)", return PyArg_Parse(detail, "((ii)iii)",
&ep->u.where.h, &ep->u.where.v, &ep->u.where.h, &ep->u.where.v,
&ep->u.where.clicks, &ep->u.where.clicks,
&ep->u.where.button, &ep->u.where.button,
&ep->u.where.mask); &ep->u.where.mask);
case WE_MENU: case WE_MENU:
return getmenudetail(detail, ep); return getmenudetail(detail, ep);
case WE_KEY: case WE_KEY:
return getargs(detail, "(ii)", return PyArg_Parse(detail, "(ii)",
&ep->u.key.code, &ep->u.key.mask); &ep->u.key.code, &ep->u.key.mask);
default: default:
return 1; return 1;
} }
...@@ -219,25 +218,25 @@ geteventarg(v, ep) ...@@ -219,25 +218,25 @@ geteventarg(v, ep)
/* Return construction tools */ /* Return construction tools */
static object * static PyObject *
makepoint(a, b) makepoint(a, b)
int a, b; int a, b;
{ {
return mkvalue("(ii)", a, b); return Py_BuildValue("(ii)", a, b);
} }
static object * static PyObject *
makerect(a, b, c, d) makerect(a, b, c, d)
int a, b, c, d; int a, b, c, d;
{ {
return mkvalue("((ii)(ii))", a, b, c, d); return Py_BuildValue("((ii)(ii))", a, b, c, d);
} }
/* Drawing objects */ /* Drawing objects */
typedef struct { typedef struct {
OB_HEAD PyObject_HEAD
windowobject *d_ref; windowobject *d_ref;
} drawingobject; } drawingobject;
...@@ -245,18 +244,18 @@ static drawingobject *Drawing; /* Set to current drawing object, or NULL */ ...@@ -245,18 +244,18 @@ static drawingobject *Drawing; /* Set to current drawing object, or NULL */
/* Drawing methods */ /* Drawing methods */
static object * static PyObject *
drawing_close(dp) drawing_close(dp)
drawingobject *dp; drawingobject *dp;
{ {
if (dp->d_ref != NULL) { if (dp->d_ref != NULL) {
wenddrawing(dp->d_ref->w_win); wenddrawing(dp->d_ref->w_win);
Drawing = NULL; Drawing = NULL;
DECREF(dp->d_ref); Py_DECREF(dp->d_ref);
dp->d_ref = NULL; dp->d_ref = NULL;
} }
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static void static void
...@@ -266,189 +265,189 @@ drawing_dealloc(dp) ...@@ -266,189 +265,189 @@ drawing_dealloc(dp)
if (dp->d_ref != NULL) { if (dp->d_ref != NULL) {
wenddrawing(dp->d_ref->w_win); wenddrawing(dp->d_ref->w_win);
Drawing = NULL; Drawing = NULL;
DECREF(dp->d_ref); Py_DECREF(dp->d_ref);
dp->d_ref = NULL; dp->d_ref = NULL;
} }
free((char *)dp); free((char *)dp);
} }
static object * static PyObject *
drawing_generic(dp, args, func) drawing_generic(dp, args, func)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
void (*func) FPROTO((int, int, int, int)); void (*func) Py_FPROTO((int, int, int, int));
{ {
int a[4]; int a[4];
if (!getrectarg(args, a)) if (!getrectarg(args, a))
return NULL; return NULL;
(*func)(a[0], a[1], a[2], a[3]); (*func)(a[0], a[1], a[2], a[3]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_line(dp, args) drawing_line(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
return drawing_generic(dp, args, wdrawline); return drawing_generic(dp, args, wdrawline);
} }
static object * static PyObject *
drawing_xorline(dp, args) drawing_xorline(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
return drawing_generic(dp, args, wxorline); return drawing_generic(dp, args, wxorline);
} }
static object * static PyObject *
drawing_circle(dp, args) drawing_circle(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int a[3]; int a[3];
if (!getpointintarg(args, a)) if (!getpointintarg(args, a))
return NULL; return NULL;
wdrawcircle(a[0], a[1], a[2]); wdrawcircle(a[0], a[1], a[2]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_fillcircle(dp, args) drawing_fillcircle(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int a[3]; int a[3];
if (!getpointintarg(args, a)) if (!getpointintarg(args, a))
return NULL; return NULL;
wfillcircle(a[0], a[1], a[2]); wfillcircle(a[0], a[1], a[2]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_xorcircle(dp, args) drawing_xorcircle(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int a[3]; int a[3];
if (!getpointintarg(args, a)) if (!getpointintarg(args, a))
return NULL; return NULL;
wxorcircle(a[0], a[1], a[2]); wxorcircle(a[0], a[1], a[2]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_elarc(dp, args) drawing_elarc(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int a[6]; int a[6];
if (!get3pointarg(args, a)) if (!get3pointarg(args, a))
return NULL; return NULL;
wdrawelarc(a[0], a[1], a[2], a[3], a[4], a[5]); wdrawelarc(a[0], a[1], a[2], a[3], a[4], a[5]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_fillelarc(dp, args) drawing_fillelarc(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int a[6]; int a[6];
if (!get3pointarg(args, a)) if (!get3pointarg(args, a))
return NULL; return NULL;
wfillelarc(a[0], a[1], a[2], a[3], a[4], a[5]); wfillelarc(a[0], a[1], a[2], a[3], a[4], a[5]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_xorelarc(dp, args) drawing_xorelarc(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int a[6]; int a[6];
if (!get3pointarg(args, a)) if (!get3pointarg(args, a))
return NULL; return NULL;
wxorelarc(a[0], a[1], a[2], a[3], a[4], a[5]); wxorelarc(a[0], a[1], a[2], a[3], a[4], a[5]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_box(dp, args) drawing_box(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
return drawing_generic(dp, args, wdrawbox); return drawing_generic(dp, args, wdrawbox);
} }
static object * static PyObject *
drawing_erase(dp, args) drawing_erase(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
return drawing_generic(dp, args, werase); return drawing_generic(dp, args, werase);
} }
static object * static PyObject *
drawing_paint(dp, args) drawing_paint(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
return drawing_generic(dp, args, wpaint); return drawing_generic(dp, args, wpaint);
} }
static object * static PyObject *
drawing_invert(dp, args) drawing_invert(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
return drawing_generic(dp, args, winvert); return drawing_generic(dp, args, winvert);
} }
static POINT * static POINT *
getpointsarray(v, psize) getpointsarray(v, psize)
object *v; PyObject *v;
int *psize; int *psize;
{ {
int n = -1; int n = -1;
object * (*getitem) PROTO((object *, int)); PyObject * (*getitem) Py_PROTO((PyObject *, int));
int i; int i;
POINT *points; POINT *points;
if (v == NULL) if (v == NULL)
; ;
else if (is_listobject(v)) { else if (PyList_Check(v)) {
n = getlistsize(v); n = PyList_Size(v);
getitem = getlistitem; getitem = PyList_GetItem;
} }
else if (is_tupleobject(v)) { else if (PyTuple_Check(v)) {
n = gettuplesize(v); n = PyTuple_Size(v);
getitem = gettupleitem; getitem = PyTuple_GetItem;
} }
if (n <= 0) { if (n <= 0) {
(void) err_badarg(); (void) PyErr_BadArgument();
return NULL; return NULL;
} }
points = NEW(POINT, n); points = PyMem_NEW(POINT, n);
if (points == NULL) { if (points == NULL) {
(void) err_nomem(); (void) PyErr_NoMemory();
return NULL; return NULL;
} }
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
object *w = (*getitem)(v, i); PyObject *w = (*getitem)(v, i);
int a[2]; int a[2];
if (!getpointarg(w, a)) { if (!getpointarg(w, a)) {
DEL(points); PyMem_DEL(points);
return NULL; return NULL;
} }
points[i].h = a[0]; points[i].h = a[0];
...@@ -459,171 +458,171 @@ getpointsarray(v, psize) ...@@ -459,171 +458,171 @@ getpointsarray(v, psize)
return points; return points;
} }
static object * static PyObject *
drawing_poly(dp, args) drawing_poly(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int n; int n;
POINT *points = getpointsarray(args, &n); POINT *points = getpointsarray(args, &n);
if (points == NULL) if (points == NULL)
return NULL; return NULL;
wdrawpoly(n, points); wdrawpoly(n, points);
DEL(points); PyMem_DEL(points);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_fillpoly(dp, args) drawing_fillpoly(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int n; int n;
POINT *points = getpointsarray(args, &n); POINT *points = getpointsarray(args, &n);
if (points == NULL) if (points == NULL)
return NULL; return NULL;
wfillpoly(n, points); wfillpoly(n, points);
DEL(points); PyMem_DEL(points);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_xorpoly(dp, args) drawing_xorpoly(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int n; int n;
POINT *points = getpointsarray(args, &n); POINT *points = getpointsarray(args, &n);
if (points == NULL) if (points == NULL)
return NULL; return NULL;
wxorpoly(n, points); wxorpoly(n, points);
DEL(points); PyMem_DEL(points);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_cliprect(dp, args) drawing_cliprect(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
return drawing_generic(dp, args, wcliprect); return drawing_generic(dp, args, wcliprect);
} }
static object * static PyObject *
drawing_noclip(dp, args) drawing_noclip(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wnoclip(); wnoclip();
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_shade(dp, args) drawing_shade(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int a[5]; int a[5];
if (!getrectintarg(args, a)) if (!getrectintarg(args, a))
return NULL; return NULL;
wshade(a[0], a[1], a[2], a[3], a[4]); wshade(a[0], a[1], a[2], a[3], a[4]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_text(dp, args) drawing_text(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
int h, v, size; int h, v, size;
char *text; char *text;
if (!getargs(args, "((ii)s#)", &h, &v, &text, &size)) if (!PyArg_Parse(args, "((ii)s#)", &h, &v, &text, &size))
return NULL; return NULL;
wdrawtext(h, v, text, size); wdrawtext(h, v, text, size);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
/* The following four are also used as stdwin functions */ /* The following four are also used as stdwin functions */
static object * static PyObject *
drawing_lineheight(dp, args) drawing_lineheight(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
return newintobject((long)wlineheight()); return PyInt_FromLong((long)wlineheight());
} }
static object * static PyObject *
drawing_baseline(dp, args) drawing_baseline(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
return newintobject((long)wbaseline()); return PyInt_FromLong((long)wbaseline());
} }
static object * static PyObject *
drawing_textwidth(dp, args) drawing_textwidth(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
char *text; char *text;
int size; int size;
if (!getargs(args, "s#", &text, &size)) if (!PyArg_Parse(args, "s#", &text, &size))
return NULL; return NULL;
return newintobject((long)wtextwidth(text, size)); return PyInt_FromLong((long)wtextwidth(text, size));
} }
static object * static PyObject *
drawing_textbreak(dp, args) drawing_textbreak(dp, args)
drawingobject *dp; drawingobject *dp;
object *args; PyObject *args;
{ {
char *text; char *text;
int size, width; int size, width;
if (!getargs(args, "(s#i)", &text, &size, &width)) if (!PyArg_Parse(args, "(s#i)", &text, &size, &width))
return NULL; return NULL;
return newintobject((long)wtextbreak(text, size, width)); return PyInt_FromLong((long)wtextbreak(text, size, width));
} }
static object * static PyObject *
drawing_setfont(self, args) drawing_setfont(self, args)
drawingobject *self; drawingobject *self;
object *args; PyObject *args;
{ {
char *font; char *font;
char style = '\0'; char style = '\0';
int size = 0; int size = 0;
if (args == NULL || !is_tupleobject(args)) { if (args == NULL || !PyTuple_Check(args)) {
if (!getargs(args, "z", &font)) if (!PyArg_Parse(args, "z", &font))
return NULL; return NULL;
} }
else { else {
int n = gettuplesize(args); int n = PyTuple_Size(args);
if (n == 2) { if (n == 2) {
if (!getargs(args, "(zi)", &font, &size)) if (!PyArg_Parse(args, "(zi)", &font, &size))
return NULL; return NULL;
} }
else if (!getargs(args, "(zic)", &font, &size, &style)) { else if (!PyArg_Parse(args, "(zic)", &font, &size, &style)) {
err_clear(); PyErr_Clear();
if (!getargs(args, "(zci)", &font, &style, &size)) if (!PyArg_Parse(args, "(zci)", &font, &style, &size))
return NULL; return NULL;
} }
} }
if (font != NULL) { if (font != NULL) {
if (!wsetfont(font)) { if (!wsetfont(font)) {
err_setstr(StdwinError, "font not found"); PyErr_SetString(StdwinError, "font not found");
return NULL; return NULL;
} }
} }
...@@ -646,84 +645,84 @@ drawing_setfont(self, args) ...@@ -646,84 +645,84 @@ drawing_setfont(self, args)
wsetplain(); wsetplain();
break; break;
} }
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_getbgcolor(self, args) drawing_getbgcolor(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
return newintobject((long)wgetbgcolor()); return PyInt_FromLong((long)wgetbgcolor());
} }
static object * static PyObject *
drawing_getfgcolor(self, args) drawing_getfgcolor(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
return newintobject((long)wgetfgcolor()); return PyInt_FromLong((long)wgetfgcolor());
} }
static object * static PyObject *
drawing_setbgcolor(self, args) drawing_setbgcolor(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
long color; long color;
if (!getlongarg(args, &color)) if (!getlongarg(args, &color))
return NULL; return NULL;
wsetbgcolor((COLOR)color); wsetbgcolor((COLOR)color);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
drawing_setfgcolor(self, args) drawing_setfgcolor(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
long color; long color;
if (!getlongarg(args, &color)) if (!getlongarg(args, &color))
return NULL; return NULL;
wsetfgcolor((COLOR)color); wsetfgcolor((COLOR)color);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
#ifdef HAVE_BITMAPS #ifdef HAVE_BITMAPS
static object * static PyObject *
drawing_bitmap(self, args) drawing_bitmap(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int h, v; int h, v;
object *bp; PyObject *bp;
object *mask = NULL; PyObject *mask = NULL;
if (!getargs(args, "((ii)O)", &h, &v, &bp)) { if (!PyArg_Parse(args, "((ii)O)", &h, &v, &bp)) {
err_clear(); PyErr_Clear();
if (!getargs(args, "((ii)OO)", &h, &v, &bp, &mask)) if (!PyArg_Parse(args, "((ii)OO)", &h, &v, &bp, &mask))
return NULL; return NULL;
if (mask == None) if (mask == Py_None)
mask = NULL; mask = NULL;
else if (!is_bitmapobject(mask)) { else if (!is_bitmapobject(mask)) {
err_badarg(); PyErr_BadArgument();
return NULL; return NULL;
} }
} }
if (!is_bitmapobject(bp)) { if (!is_bitmapobject(bp)) {
err_badarg(); PyErr_BadArgument();
return NULL; return NULL;
} }
if (((bitmapobject *)bp)->b_bitmap == NULL || if (((bitmapobject *)bp)->b_bitmap == NULL ||
mask != NULL && ((bitmapobject *)mask)->b_bitmap == NULL) { mask != NULL && ((bitmapobject *)mask)->b_bitmap == NULL) {
err_setstr(StdwinError, "bitmap object already close"); PyErr_SetString(StdwinError, "bitmap object already close");
return NULL; return NULL;
} }
if (mask == NULL) if (mask == NULL)
...@@ -732,70 +731,70 @@ drawing_bitmap(self, args) ...@@ -732,70 +731,70 @@ drawing_bitmap(self, args)
wdrawbitmap(h, v, wdrawbitmap(h, v,
((bitmapobject *)bp)->b_bitmap, ((bitmapobject *)bp)->b_bitmap,
((bitmapobject *)bp)->b_bitmap); ((bitmapobject *)bp)->b_bitmap);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
#endif /* HAVE_BITMAPS */ #endif /* HAVE_BITMAPS */
static struct methodlist drawing_methods[] = { static PyMethodDef drawing_methods[] = {
#ifdef HAVE_BITMAPS #ifdef HAVE_BITMAPS
{"bitmap", (method)drawing_bitmap}, {"bitmap", (PyCFunction)drawing_bitmap},
#endif #endif
{"box", (method)drawing_box}, {"box", (PyCFunction)drawing_box},
{"circle", (method)drawing_circle}, {"circle", (PyCFunction)drawing_circle},
{"cliprect", (method)drawing_cliprect}, {"cliprect", (PyCFunction)drawing_cliprect},
{"close", (method)drawing_close}, {"close", (PyCFunction)drawing_close},
{"elarc", (method)drawing_elarc}, {"elarc", (PyCFunction)drawing_elarc},
{"enddrawing", (method)drawing_close}, {"enddrawing", (PyCFunction)drawing_close},
{"erase", (method)drawing_erase}, {"erase", (PyCFunction)drawing_erase},
{"fillcircle", (method)drawing_fillcircle}, {"fillcircle", (PyCFunction)drawing_fillcircle},
{"fillelarc", (method)drawing_fillelarc}, {"fillelarc", (PyCFunction)drawing_fillelarc},
{"fillpoly", (method)drawing_fillpoly}, {"fillpoly", (PyCFunction)drawing_fillpoly},
{"invert", (method)drawing_invert}, {"invert", (PyCFunction)drawing_invert},
{"line", (method)drawing_line}, {"line", (PyCFunction)drawing_line},
{"noclip", (method)drawing_noclip}, {"noclip", (PyCFunction)drawing_noclip},
{"paint", (method)drawing_paint}, {"paint", (PyCFunction)drawing_paint},
{"poly", (method)drawing_poly}, {"poly", (PyCFunction)drawing_poly},
{"shade", (method)drawing_shade}, {"shade", (PyCFunction)drawing_shade},
{"text", (method)drawing_text}, {"text", (PyCFunction)drawing_text},
{"xorcircle", (method)drawing_xorcircle}, {"xorcircle", (PyCFunction)drawing_xorcircle},
{"xorelarc", (method)drawing_xorelarc}, {"xorelarc", (PyCFunction)drawing_xorelarc},
{"xorline", (method)drawing_xorline}, {"xorline", (PyCFunction)drawing_xorline},
{"xorpoly", (method)drawing_xorpoly}, {"xorpoly", (PyCFunction)drawing_xorpoly},
/* Text measuring methods: */ /* Text measuring methods: */
{"baseline", (method)drawing_baseline}, {"baseline", (PyCFunction)drawing_baseline},
{"lineheight", (method)drawing_lineheight}, {"lineheight", (PyCFunction)drawing_lineheight},
{"textbreak", (method)drawing_textbreak}, {"textbreak", (PyCFunction)drawing_textbreak},
{"textwidth", (method)drawing_textwidth}, {"textwidth", (PyCFunction)drawing_textwidth},
/* Font setting methods: */ /* Font setting methods: */
{"setfont", (method)drawing_setfont}, {"setfont", (PyCFunction)drawing_setfont},
/* Color methods: */ /* Color methods: */
{"getbgcolor", (method)drawing_getbgcolor}, {"getbgcolor", (PyCFunction)drawing_getbgcolor},
{"getfgcolor", (method)drawing_getfgcolor}, {"getfgcolor", (PyCFunction)drawing_getfgcolor},
{"setbgcolor", (method)drawing_setbgcolor}, {"setbgcolor", (PyCFunction)drawing_setbgcolor},
{"setfgcolor", (method)drawing_setfgcolor}, {"setfgcolor", (PyCFunction)drawing_setfgcolor},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
static object * static PyObject *
drawing_getattr(dp, name) drawing_getattr(dp, name)
drawingobject *dp; drawingobject *dp;
char *name; char *name;
{ {
if (dp->d_ref == NULL) { if (dp->d_ref == NULL) {
err_setstr(StdwinError, "drawing object already closed"); PyErr_SetString(StdwinError, "drawing object already closed");
return NULL; return NULL;
} }
return findmethod(drawing_methods, (object *)dp, name); return Py_FindMethod(drawing_methods, (PyObject *)dp, name);
} }
typeobject Drawingtype = { PyTypeObject Drawingtype = {
OB_HEAD_INIT(&Typetype) PyObject_HEAD_INIT(&PyType_Type)
0, /*ob_size*/ 0, /*ob_size*/
"drawing", /*tp_name*/ "drawing", /*tp_name*/
sizeof(drawingobject), /*tp_size*/ sizeof(drawingobject), /*tp_size*/
...@@ -813,13 +812,13 @@ typeobject Drawingtype = { ...@@ -813,13 +812,13 @@ typeobject Drawingtype = {
/* Text(edit) objects */ /* Text(edit) objects */
typedef struct { typedef struct {
OB_HEAD PyObject_HEAD
TEXTEDIT *t_text; TEXTEDIT *t_text;
windowobject *t_ref; windowobject *t_ref;
object *t_attr; /* Attributes dictionary */ PyObject *t_attr; /* Attributes dictionary */
} textobject; } textobject;
staticforward typeobject Texttype; staticforward PyTypeObject Texttype;
static textobject * static textobject *
newtextobject(wp, left, top, right, bottom) newtextobject(wp, left, top, right, bottom)
...@@ -827,16 +826,16 @@ newtextobject(wp, left, top, right, bottom) ...@@ -827,16 +826,16 @@ newtextobject(wp, left, top, right, bottom)
int left, top, right, bottom; int left, top, right, bottom;
{ {
textobject *tp; textobject *tp;
tp = NEWOBJ(textobject, &Texttype); tp = PyObject_NEW(textobject, &Texttype);
if (tp == NULL) if (tp == NULL)
return NULL; return NULL;
tp->t_attr = NULL; tp->t_attr = NULL;
INCREF(wp); Py_INCREF(wp);
tp->t_ref = wp; tp->t_ref = wp;
tp->t_text = tecreate(wp->w_win, left, top, right, bottom); tp->t_text = tecreate(wp->w_win, left, top, right, bottom);
if (tp->t_text == NULL) { if (tp->t_text == NULL) {
DECREF(tp); Py_DECREF(tp);
return (textobject *) err_nomem(); return (textobject *) PyErr_NoMemory();
} }
return tp; return tp;
} }
...@@ -849,49 +848,49 @@ text_dealloc(tp) ...@@ -849,49 +848,49 @@ text_dealloc(tp)
{ {
if (tp->t_text != NULL) if (tp->t_text != NULL)
tefree(tp->t_text); tefree(tp->t_text);
XDECREF(tp->t_attr); Py_XDECREF(tp->t_attr);
XDECREF(tp->t_ref); Py_XDECREF(tp->t_ref);
DEL(tp); PyMem_DEL(tp);
} }
static object * static PyObject *
text_close(tp, args) text_close(tp, args)
textobject *tp; textobject *tp;
object *args; PyObject *args;
{ {
if (tp->t_text != NULL) { if (tp->t_text != NULL) {
tefree(tp->t_text); tefree(tp->t_text);
tp->t_text = NULL; tp->t_text = NULL;
} }
if (tp->t_attr != NULL) { if (tp->t_attr != NULL) {
DECREF(tp->t_attr); Py_DECREF(tp->t_attr);
tp->t_attr = NULL; tp->t_attr = NULL;
} }
if (tp->t_ref != NULL) { if (tp->t_ref != NULL) {
DECREF(tp->t_ref); Py_DECREF(tp->t_ref);
tp->t_ref = NULL; tp->t_ref = NULL;
} }
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
text_arrow(self, args) text_arrow(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
int code; int code;
if (!getintarg(args, &code)) if (!getintarg(args, &code))
return NULL; return NULL;
tearrow(self->t_text, code); tearrow(self->t_text, code);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
text_draw(self, args) text_draw(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
register TEXTEDIT *tp = self->t_text; register TEXTEDIT *tp = self->t_text;
int a[4]; int a[4];
...@@ -899,7 +898,7 @@ text_draw(self, args) ...@@ -899,7 +898,7 @@ text_draw(self, args)
if (!getrectarg(args, a)) if (!getrectarg(args, a))
return NULL; return NULL;
if (Drawing != NULL) { if (Drawing != NULL) {
err_setstr(StdwinError, "already drawing"); PyErr_SetString(StdwinError, "already drawing");
return NULL; return NULL;
} }
/* Clip to text area and ignore if area is empty */ /* Clip to text area and ignore if area is empty */
...@@ -916,14 +915,14 @@ text_draw(self, args) ...@@ -916,14 +915,14 @@ text_draw(self, args)
tedrawnew(tp, a[0], a[1], a[2], a[3]); tedrawnew(tp, a[0], a[1], a[2], a[3]);
wenddrawing(self->t_ref->w_win); wenddrawing(self->t_ref->w_win);
} }
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
text_event(self, args) text_event(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
register TEXTEDIT *tp = self->t_text; register TEXTEDIT *tp = self->t_text;
EVENT e; EVENT e;
...@@ -942,40 +941,40 @@ text_event(self, args) ...@@ -942,40 +941,40 @@ text_event(self, args)
else if (e.u.where.v > height && tegetright(tp) == height) else if (e.u.where.v > height && tegetright(tp) == height)
e.u.where.v = height; e.u.where.v = height;
} }
return newintobject((long) teevent(tp, &e)); return PyInt_FromLong((long) teevent(tp, &e));
} }
static object * static PyObject *
text_getfocus(self, args) text_getfocus(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
return makepoint(tegetfoc1(self->t_text), tegetfoc2(self->t_text)); return makepoint(tegetfoc1(self->t_text), tegetfoc2(self->t_text));
} }
static object * static PyObject *
text_getfocustext(self, args) text_getfocustext(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
int f1, f2; int f1, f2;
char *text; char *text;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
f1 = tegetfoc1(self->t_text); f1 = tegetfoc1(self->t_text);
f2 = tegetfoc2(self->t_text); f2 = tegetfoc2(self->t_text);
text = tegettext(self->t_text); text = tegettext(self->t_text);
return newsizedstringobject(text + f1, f2-f1); return PyString_FromStringAndSize(text + f1, f2-f1);
} }
static object * static PyObject *
text_getrect(self, args) text_getrect(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
return makerect(tegetleft(self->t_text), return makerect(tegetleft(self->t_text),
tegettop(self->t_text), tegettop(self->t_text),
...@@ -983,172 +982,172 @@ text_getrect(self, args) ...@@ -983,172 +982,172 @@ text_getrect(self, args)
tegetbottom(self->t_text)); tegetbottom(self->t_text));
} }
static object * static PyObject *
text_gettext(self, args) text_gettext(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
return newsizedstringobject(tegettext(self->t_text), return PyString_FromStringAndSize(tegettext(self->t_text),
tegetlen(self->t_text)); tegetlen(self->t_text));
} }
static object * static PyObject *
text_move(self, args) text_move(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
int a[4]; int a[4];
if (!getrectarg(args, a)) if (!getrectarg(args, a))
return NULL; return NULL;
temovenew(self->t_text, a[0], a[1], a[2], a[3]); temovenew(self->t_text, a[0], a[1], a[2], a[3]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
text_replace(self, args) text_replace(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
char *text; char *text;
if (!getstrarg(args, &text)) if (!getstrarg(args, &text))
return NULL; return NULL;
tereplace(self->t_text, text); tereplace(self->t_text, text);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
text_setactive(self, args) text_setactive(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
int flag; int flag;
if (!getintarg(args, &flag)) if (!getintarg(args, &flag))
return NULL; return NULL;
tesetactive(self->t_text, flag); tesetactive(self->t_text, flag);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
text_setfocus(self, args) text_setfocus(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
tesetfocus(self->t_text, a[0], a[1]); tesetfocus(self->t_text, a[0], a[1]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
text_settext(self, args) text_settext(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
char *text; char *text;
char *buf; char *buf;
int size; int size;
if (!getargs(args, "s#", &text, &size)) if (!PyArg_Parse(args, "s#", &text, &size))
return NULL; return NULL;
if ((buf = NEW(char, size)) == NULL) { if ((buf = PyMem_NEW(char, size)) == NULL) {
return err_nomem(); return PyErr_NoMemory();
} }
memcpy(buf, text, size); memcpy(buf, text, size);
tesetbuf(self->t_text, buf, size); /* Becomes owner of buffer */ tesetbuf(self->t_text, buf, size); /* Becomes owner of buffer */
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
text_setview(self, args) text_setview(self, args)
textobject *self; textobject *self;
object *args; PyObject *args;
{ {
int a[4]; int a[4];
if (args == None) if (args == Py_None)
tenoview(self->t_text); tenoview(self->t_text);
else { else {
if (!getrectarg(args, a)) if (!getrectarg(args, a))
return NULL; return NULL;
tesetview(self->t_text, a[0], a[1], a[2], a[3]); tesetview(self->t_text, a[0], a[1], a[2], a[3]);
} }
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static struct methodlist text_methods[] = { static PyMethodDef text_methods[] = {
{"arrow", (method)text_arrow}, {"arrow", (PyCFunction)text_arrow},
{"close", (method)text_close}, {"close", (PyCFunction)text_close},
{"draw", (method)text_draw}, {"draw", (PyCFunction)text_draw},
{"event", (method)text_event}, {"event", (PyCFunction)text_event},
{"getfocus", (method)text_getfocus}, {"getfocus", (PyCFunction)text_getfocus},
{"getfocustext",(method)text_getfocustext}, {"getfocustext",(PyCFunction)text_getfocustext},
{"getrect", (method)text_getrect}, {"getrect", (PyCFunction)text_getrect},
{"gettext", (method)text_gettext}, {"gettext", (PyCFunction)text_gettext},
{"move", (method)text_move}, {"move", (PyCFunction)text_move},
{"replace", (method)text_replace}, {"replace", (PyCFunction)text_replace},
{"setactive", (method)text_setactive}, {"setactive", (PyCFunction)text_setactive},
{"setfocus", (method)text_setfocus}, {"setfocus", (PyCFunction)text_setfocus},
{"settext", (method)text_settext}, {"settext", (PyCFunction)text_settext},
{"setview", (method)text_setview}, {"setview", (PyCFunction)text_setview},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
static object * static PyObject *
text_getattr(tp, name) text_getattr(tp, name)
textobject *tp; textobject *tp;
char *name; char *name;
{ {
object *v = NULL; PyObject *v = NULL;
if (tp->t_ref == NULL) { if (tp->t_ref == NULL) {
err_setstr(StdwinError, "text object already closed"); PyErr_SetString(StdwinError, "text object already closed");
return NULL; return NULL;
} }
if (strcmp(name, "__dict__") == 0) { if (strcmp(name, "__dict__") == 0) {
v = tp->t_attr; v = tp->t_attr;
if (v == NULL) if (v == NULL)
v = None; v = Py_None;
} }
else if (tp->t_attr != NULL) { else if (tp->t_attr != NULL) {
v = dictlookup(tp->t_attr, name); v = PyDict_GetItemString(tp->t_attr, name);
} }
if (v != NULL) { if (v != NULL) {
INCREF(v); Py_INCREF(v);
return v; return v;
} }
return findmethod(text_methods, (object *)tp, name); return Py_FindMethod(text_methods, (PyObject *)tp, name);
} }
static int static int
text_setattr(tp, name, v) text_setattr(tp, name, v)
textobject *tp; textobject *tp;
char *name; char *name;
object *v; PyObject *v;
{ {
if (tp->t_attr == NULL) { if (tp->t_attr == NULL) {
tp->t_attr = newdictobject(); tp->t_attr = PyDict_New();
if (tp->t_attr == NULL) if (tp->t_attr == NULL)
return -1; return -1;
} }
if (v == NULL) { if (v == NULL) {
int rv = dictremove(tp->t_attr, name); int rv = PyDict_DelItemString(tp->t_attr, name);
if (rv < 0) if (rv < 0)
err_setstr(AttributeError, PyErr_SetString(PyExc_AttributeError,
"delete non-existing text object attribute"); "delete non-existing text object attribute");
return rv; return rv;
} }
else else
return dictinsert(tp->t_attr, name, v); return PyDict_SetItemString(tp->t_attr, name, v);
} }
statichere typeobject Texttype = { statichere PyTypeObject Texttype = {
OB_HEAD_INIT(&Typetype) PyObject_HEAD_INIT(&PyType_Type)
0, /*ob_size*/ 0, /*ob_size*/
"textedit", /*tp_name*/ "textedit", /*tp_name*/
sizeof(textobject), /*tp_size*/ sizeof(textobject), /*tp_size*/
...@@ -1169,7 +1168,7 @@ statichere typeobject Texttype = { ...@@ -1169,7 +1168,7 @@ statichere typeobject Texttype = {
#define MAXNMENU 200 /* Max #menus we allow */ #define MAXNMENU 200 /* Max #menus we allow */
static menuobject *menulist[MAXNMENU]; static menuobject *menulist[MAXNMENU];
static menuobject *newmenuobject PROTO((char *)); static menuobject *newmenuobject Py_PROTO((char *));
static menuobject * static menuobject *
newmenuobject(title) newmenuobject(title)
char *title; char *title;
...@@ -1182,13 +1181,13 @@ newmenuobject(title) ...@@ -1182,13 +1181,13 @@ newmenuobject(title)
break; break;
} }
if (id >= MAXNMENU) { if (id >= MAXNMENU) {
err_setstr(StdwinError, "creating too many menus"); PyErr_SetString(StdwinError, "creating too many menus");
return NULL; return NULL;
} }
menu = wmenucreate(id + IDOFFSET, title); menu = wmenucreate(id + IDOFFSET, title);
if (menu == NULL) if (menu == NULL)
return (menuobject *) err_nomem(); return (menuobject *) PyErr_NoMemory();
mp = NEWOBJ(menuobject, &Menutype); mp = PyObject_NEW(menuobject, &Menutype);
if (mp != NULL) { if (mp != NULL) {
mp->m_menu = menu; mp->m_menu = menu;
mp->m_id = id + IDOFFSET; mp->m_id = id + IDOFFSET;
...@@ -1213,14 +1212,14 @@ menu_dealloc(mp) ...@@ -1213,14 +1212,14 @@ menu_dealloc(mp)
} }
if (mp->m_menu != NULL) if (mp->m_menu != NULL)
wmenudelete(mp->m_menu); wmenudelete(mp->m_menu);
XDECREF(mp->m_attr); Py_XDECREF(mp->m_attr);
DEL(mp); PyMem_DEL(mp);
} }
static object * static PyObject *
menu_close(mp, args) menu_close(mp, args)
menuobject *mp; menuobject *mp;
object *args; PyObject *args;
{ {
int id = mp->m_id - IDOFFSET; int id = mp->m_id - IDOFFSET;
if (id >= 0 && id < MAXNMENU && menulist[id] == mp) { if (id >= 0 && id < MAXNMENU && menulist[id] == mp) {
...@@ -1230,132 +1229,132 @@ menu_close(mp, args) ...@@ -1230,132 +1229,132 @@ menu_close(mp, args)
if (mp->m_menu != NULL) if (mp->m_menu != NULL)
wmenudelete(mp->m_menu); wmenudelete(mp->m_menu);
mp->m_menu = NULL; mp->m_menu = NULL;
XDECREF(mp->m_attr); Py_XDECREF(mp->m_attr);
mp->m_attr = NULL; mp->m_attr = NULL;
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
menu_additem(self, args) menu_additem(self, args)
menuobject *self; menuobject *self;
object *args; PyObject *args;
{ {
char *text; char *text;
int shortcut = -1; int shortcut = -1;
if (is_tupleobject(args)) { if (PyTuple_Check(args)) {
char c; char c;
if (!getargs(args, "(sc)", &text, &c)) if (!PyArg_Parse(args, "(sc)", &text, &c))
return NULL; return NULL;
shortcut = c; shortcut = c;
} }
else if (!getstrarg(args, &text)) else if (!getstrarg(args, &text))
return NULL; return NULL;
wmenuadditem(self->m_menu, text, shortcut); wmenuadditem(self->m_menu, text, shortcut);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
menu_setitem(self, args) menu_setitem(self, args)
menuobject *self; menuobject *self;
object *args; PyObject *args;
{ {
int index; int index;
char *text; char *text;
if (!getargs(args, "(is)", &index, &text)) if (!PyArg_Parse(args, "(is)", &index, &text))
return NULL; return NULL;
wmenusetitem(self->m_menu, index, text); wmenusetitem(self->m_menu, index, text);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
menu_enable(self, args) menu_enable(self, args)
menuobject *self; menuobject *self;
object *args; PyObject *args;
{ {
int index; int index;
int flag; int flag;
if (!getargs(args, "(ii)", &index, &flag)) if (!PyArg_Parse(args, "(ii)", &index, &flag))
return NULL; return NULL;
wmenuenable(self->m_menu, index, flag); wmenuenable(self->m_menu, index, flag);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
menu_check(self, args) menu_check(self, args)
menuobject *self; menuobject *self;
object *args; PyObject *args;
{ {
int index; int index;
int flag; int flag;
if (!getargs(args, "(ii)", &index, &flag)) if (!PyArg_Parse(args, "(ii)", &index, &flag))
return NULL; return NULL;
wmenucheck(self->m_menu, index, flag); wmenucheck(self->m_menu, index, flag);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static struct methodlist menu_methods[] = { static PyMethodDef menu_methods[] = {
{"additem", (method)menu_additem}, {"additem", (PyCFunction)menu_additem},
{"setitem", (method)menu_setitem}, {"setitem", (PyCFunction)menu_setitem},
{"enable", (method)menu_enable}, {"enable", (PyCFunction)menu_enable},
{"check", (method)menu_check}, {"check", (PyCFunction)menu_check},
{"close", (method)menu_close}, {"close", (PyCFunction)menu_close},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
static object * static PyObject *
menu_getattr(mp, name) menu_getattr(mp, name)
menuobject *mp; menuobject *mp;
char *name; char *name;
{ {
object *v = NULL; PyObject *v = NULL;
if (mp->m_menu == NULL) { if (mp->m_menu == NULL) {
err_setstr(StdwinError, "menu object already closed"); PyErr_SetString(StdwinError, "menu object already closed");
return NULL; return NULL;
} }
if (strcmp(name, "__dict__") == 0) { if (strcmp(name, "__dict__") == 0) {
v = mp->m_attr; v = mp->m_attr;
if (v == NULL) if (v == NULL)
v = None; v = Py_None;
} }
else if (mp->m_attr != NULL) { else if (mp->m_attr != NULL) {
v = dictlookup(mp->m_attr, name); v = PyDict_GetItemString(mp->m_attr, name);
} }
if (v != NULL) { if (v != NULL) {
INCREF(v); Py_INCREF(v);
return v; return v;
} }
return findmethod(menu_methods, (object *)mp, name); return Py_FindMethod(menu_methods, (PyObject *)mp, name);
} }
static int static int
menu_setattr(mp, name, v) menu_setattr(mp, name, v)
menuobject *mp; menuobject *mp;
char *name; char *name;
object *v; PyObject *v;
{ {
if (mp->m_attr == NULL) { if (mp->m_attr == NULL) {
mp->m_attr = newdictobject(); mp->m_attr = PyDict_New();
if (mp->m_attr == NULL) if (mp->m_attr == NULL)
return -1; return -1;
} }
if (v == NULL) { if (v == NULL) {
int rv = dictremove(mp->m_attr, name); int rv = PyDict_DelItemString(mp->m_attr, name);
if (rv < 0) if (rv < 0)
err_setstr(AttributeError, PyErr_SetString(PyExc_AttributeError,
"delete non-existing menu object attribute"); "delete non-existing menu object attribute");
return rv; return rv;
} }
else else
return dictinsert(mp->m_attr, name, v); return PyDict_SetItemString(mp->m_attr, name, v);
} }
statichere typeobject Menutype = { statichere PyTypeObject Menutype = {
OB_HEAD_INIT(&Typetype) PyObject_HEAD_INIT(&PyType_Type)
0, /*ob_size*/ 0, /*ob_size*/
"menu", /*tp_name*/ "menu", /*tp_name*/
sizeof(menuobject), /*tp_size*/ sizeof(menuobject), /*tp_size*/
...@@ -1374,7 +1373,7 @@ statichere typeobject Menutype = { ...@@ -1374,7 +1373,7 @@ statichere typeobject Menutype = {
/* Bitmaps objects */ /* Bitmaps objects */
static bitmapobject *newbitmapobject PROTO((int, int)); static bitmapobject *newbitmapobject Py_PROTO((int, int));
static bitmapobject * static bitmapobject *
newbitmapobject(width, height) newbitmapobject(width, height)
int width, height; int width, height;
...@@ -1383,8 +1382,8 @@ newbitmapobject(width, height) ...@@ -1383,8 +1382,8 @@ newbitmapobject(width, height)
bitmapobject *bp; bitmapobject *bp;
bitmap = wnewbitmap(width, height); bitmap = wnewbitmap(width, height);
if (bitmap == NULL) if (bitmap == NULL)
return (bitmapobject *) err_nomem(); return (bitmapobject *) PyErr_NoMemory();
bp = NEWOBJ(bitmapobject, &Bitmaptype); bp = PyObject_NEW(bitmapobject, &Bitmaptype);
if (bp != NULL) { if (bp != NULL) {
bp->b_bitmap = bitmap; bp->b_bitmap = bitmap;
bp->b_attr = NULL; bp->b_attr = NULL;
...@@ -1402,117 +1401,117 @@ bitmap_dealloc(bp) ...@@ -1402,117 +1401,117 @@ bitmap_dealloc(bp)
{ {
if (bp->b_bitmap != NULL) if (bp->b_bitmap != NULL)
wfreebitmap(bp->b_bitmap); wfreebitmap(bp->b_bitmap);
XDECREF(bp->b_attr); Py_XDECREF(bp->b_attr);
DEL(bp); PyMem_DEL(bp);
} }
static object * static PyObject *
bitmap_close(bp, args) bitmap_close(bp, args)
bitmapobject *bp; bitmapobject *bp;
object *args; PyObject *args;
{ {
if (bp->b_bitmap != NULL) if (bp->b_bitmap != NULL)
wfreebitmap(bp->b_bitmap); wfreebitmap(bp->b_bitmap);
bp->b_bitmap = NULL; bp->b_bitmap = NULL;
XDECREF(bp->b_attr); Py_XDECREF(bp->b_attr);
bp->b_attr = NULL; bp->b_attr = NULL;
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
bitmap_setbit(self, args) bitmap_setbit(self, args)
bitmapobject *self; bitmapobject *self;
object *args; PyObject *args;
{ {
int a[3]; int a[3];
if (!getpointintarg(args, a)) if (!getpointintarg(args, a))
return NULL; return NULL;
wsetbit(self->b_bitmap, a[0], a[1], a[2]); wsetbit(self->b_bitmap, a[0], a[1], a[2]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
bitmap_getbit(self, args) bitmap_getbit(self, args)
bitmapobject *self; bitmapobject *self;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
return newintobject((long) wgetbit(self->b_bitmap, a[0], a[1])); return PyInt_FromLong((long) wgetbit(self->b_bitmap, a[0], a[1]));
} }
static object * static PyObject *
bitmap_getsize(self, args) bitmap_getsize(self, args)
bitmapobject *self; bitmapobject *self;
object *args; PyObject *args;
{ {
int width, height; int width, height;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetbitmapsize(self->b_bitmap, &width, &height); wgetbitmapsize(self->b_bitmap, &width, &height);
return mkvalue("(ii)", width, height); return Py_BuildValue("(ii)", width, height);
} }
static struct methodlist bitmap_methods[] = { static PyMethodDef bitmap_methods[] = {
{"close", (method)bitmap_close}, {"close", (PyCFunction)bitmap_close},
{"getsize", (method)bitmap_getsize}, {"getsize", (PyCFunction)bitmap_getsize},
{"getbit", (method)bitmap_getbit}, {"getbit", (PyCFunction)bitmap_getbit},
{"setbit", (method)bitmap_setbit}, {"setbit", (PyCFunction)bitmap_setbit},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
static object * static PyObject *
bitmap_getattr(bp, name) bitmap_getattr(bp, name)
bitmapobject *bp; bitmapobject *bp;
char *name; char *name;
{ {
object *v = NULL; PyObject *v = NULL;
if (bp->b_bitmap == NULL) { if (bp->b_bitmap == NULL) {
err_setstr(StdwinError, "bitmap object already closed"); PyErr_SetString(StdwinError, "bitmap object already closed");
return NULL; return NULL;
} }
if (strcmp(name, "__dict__") == 0) { if (strcmp(name, "__dict__") == 0) {
v = bp->b_attr; v = bp->b_attr;
if (v == NULL) if (v == NULL)
v = None; v = Py_None;
} }
else if (bp->b_attr != NULL) { else if (bp->b_attr != NULL) {
v = dictlookup(bp->b_attr, name); v = PyDict_GetItemString(bp->b_attr, name);
} }
if (v != NULL) { if (v != NULL) {
INCREF(v); Py_INCREF(v);
return v; return v;
} }
return findmethod(bitmap_methods, (object *)bp, name); return Py_FindMethod(bitmap_methods, (PyObject *)bp, name);
} }
static int static int
bitmap_setattr(bp, name, v) bitmap_setattr(bp, name, v)
bitmapobject *bp; bitmapobject *bp;
char *name; char *name;
object *v; PyObject *v;
{ {
if (bp->b_attr == NULL) { if (bp->b_attr == NULL) {
bp->b_attr = newdictobject(); bp->b_attr = PyDict_New();
if (bp->b_attr == NULL) if (bp->b_attr == NULL)
return -1; return -1;
} }
if (v == NULL) { if (v == NULL) {
int rv = dictremove(bp->b_attr, name); int rv = PyDict_DelItemString(bp->b_attr, name);
if (rv < 0) if (rv < 0)
err_setstr(AttributeError, PyErr_SetString(PyExc_AttributeError,
"delete non-existing bitmap object attribute"); "delete non-existing bitmap object attribute");
return rv; return rv;
} }
else else
return dictinsert(bp->b_attr, name, v); return PyDict_SetItemString(bp->b_attr, name, v);
} }
statichere typeobject Bitmaptype = { statichere PyTypeObject Bitmaptype = {
OB_HEAD_INIT(&Typetype) PyObject_HEAD_INIT(&PyType_Type)
0, /*ob_size*/ 0, /*ob_size*/
"bitmap", /*tp_name*/ "bitmap", /*tp_name*/
sizeof(bitmapobject), /*tp_size*/ sizeof(bitmapobject), /*tp_size*/
...@@ -1549,16 +1548,16 @@ window_dealloc(wp) ...@@ -1549,16 +1548,16 @@ window_dealloc(wp)
tag); tag);
wclose(wp->w_win); wclose(wp->w_win);
} }
DECREF(wp->w_title); Py_DECREF(wp->w_title);
if (wp->w_attr != NULL) if (wp->w_attr != NULL)
DECREF(wp->w_attr); Py_DECREF(wp->w_attr);
free((char *)wp); free((char *)wp);
} }
static object * static PyObject *
window_close(wp, args) window_close(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
if (wp->w_win != NULL) { if (wp->w_win != NULL) {
int tag = wgettag(wp->w_win); int tag = wgettag(wp->w_win);
...@@ -1567,215 +1566,215 @@ window_close(wp, args) ...@@ -1567,215 +1566,215 @@ window_close(wp, args)
wclose(wp->w_win); wclose(wp->w_win);
wp->w_win = NULL; wp->w_win = NULL;
} }
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_begindrawing(wp, args) window_begindrawing(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
drawingobject *dp; drawingobject *dp;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
if (Drawing != NULL) { if (Drawing != NULL) {
err_setstr(StdwinError, "already drawing"); PyErr_SetString(StdwinError, "already drawing");
return NULL; return NULL;
} }
dp = NEWOBJ(drawingobject, &Drawingtype); dp = PyObject_NEW(drawingobject, &Drawingtype);
if (dp == NULL) if (dp == NULL)
return NULL; return NULL;
Drawing = dp; Drawing = dp;
INCREF(wp); Py_INCREF(wp);
dp->d_ref = wp; dp->d_ref = wp;
wbegindrawing(wp->w_win); wbegindrawing(wp->w_win);
return (object *)dp; return (PyObject *)dp;
} }
static object * static PyObject *
window_change(wp, args) window_change(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int a[4]; int a[4];
if (!getrectarg(args, a)) if (!getrectarg(args, a))
return NULL; return NULL;
wchange(wp->w_win, a[0], a[1], a[2], a[3]); wchange(wp->w_win, a[0], a[1], a[2], a[3]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_gettitle(wp, args) window_gettitle(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
INCREF(wp->w_title); Py_INCREF(wp->w_title);
return wp->w_title; return wp->w_title;
} }
static object * static PyObject *
window_getwinpos(wp, args) window_getwinpos(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int h, v; int h, v;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetwinpos(wp->w_win, &h, &v); wgetwinpos(wp->w_win, &h, &v);
return makepoint(h, v); return makepoint(h, v);
} }
static object * static PyObject *
window_getwinsize(wp, args) window_getwinsize(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int width, height; int width, height;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetwinsize(wp->w_win, &width, &height); wgetwinsize(wp->w_win, &width, &height);
return makepoint(width, height); return makepoint(width, height);
} }
static object * static PyObject *
window_setwinpos(wp, args) window_setwinpos(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
wsetwinpos(wp->w_win, a[0], a[1]); wsetwinpos(wp->w_win, a[0], a[1]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_setwinsize(wp, args) window_setwinsize(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
wsetwinsize(wp->w_win, a[0], a[1]); wsetwinsize(wp->w_win, a[0], a[1]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_getdocsize(wp, args) window_getdocsize(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int width, height; int width, height;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetdocsize(wp->w_win, &width, &height); wgetdocsize(wp->w_win, &width, &height);
return makepoint(width, height); return makepoint(width, height);
} }
static object * static PyObject *
window_getorigin(wp, args) window_getorigin(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int width, height; int width, height;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetorigin(wp->w_win, &width, &height); wgetorigin(wp->w_win, &width, &height);
return makepoint(width, height); return makepoint(width, height);
} }
static object * static PyObject *
window_scroll(wp, args) window_scroll(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int a[6]; int a[6];
if (!getrectpointarg(args, a)) if (!getrectpointarg(args, a))
return NULL; return NULL;
wscroll(wp->w_win, a[0], a[1], a[2], a[3], a[4], a[5]); wscroll(wp->w_win, a[0], a[1], a[2], a[3], a[4], a[5]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_setdocsize(wp, args) window_setdocsize(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
wsetdocsize(wp->w_win, a[0], a[1]); wsetdocsize(wp->w_win, a[0], a[1]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_setorigin(wp, args) window_setorigin(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
wsetorigin(wp->w_win, a[0], a[1]); wsetorigin(wp->w_win, a[0], a[1]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_settitle(wp, args) window_settitle(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
object *title; PyObject *title;
if (!getargs(args, "S", &title)) if (!PyArg_Parse(args, "S", &title))
return NULL; return NULL;
DECREF(wp->w_title); Py_DECREF(wp->w_title);
INCREF(title); Py_INCREF(title);
wp->w_title = title; wp->w_title = title;
wsettitle(wp->w_win, getstringvalue(title)); wsettitle(wp->w_win, PyString_AsString(title));
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_show(wp, args) window_show(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int a[4]; int a[4];
if (!getrectarg(args, a)) if (!getrectarg(args, a))
return NULL; return NULL;
wshow(wp->w_win, a[0], a[1], a[2], a[3]); wshow(wp->w_win, a[0], a[1], a[2], a[3]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_settimer(wp, args) window_settimer(wp, args)
windowobject *wp; windowobject *wp;
object *args; PyObject *args;
{ {
int a; int a;
if (!getintarg(args, &a)) if (!getintarg(args, &a))
return NULL; return NULL;
wsettimer(wp->w_win, a); wsettimer(wp->w_win, a);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_menucreate(self, args) window_menucreate(self, args)
windowobject *self; windowobject *self;
object *args; PyObject *args;
{ {
menuobject *mp; menuobject *mp;
char *title; char *title;
...@@ -1786,157 +1785,156 @@ window_menucreate(self, args) ...@@ -1786,157 +1785,156 @@ window_menucreate(self, args)
if (mp == NULL) if (mp == NULL)
return NULL; return NULL;
wmenuattach(self->w_win, mp->m_menu); wmenuattach(self->w_win, mp->m_menu);
return (object *)mp; return (PyObject *)mp;
} }
static object * static PyObject *
window_textcreate(self, args) window_textcreate(self, args)
windowobject *self; windowobject *self;
object *args; PyObject *args;
{ {
int a[4]; int a[4];
if (!getrectarg(args, a)) if (!getrectarg(args, a))
return NULL; return NULL;
return (object *) return (PyObject *)newtextobject(self, a[0], a[1], a[2], a[3]);
newtextobject(self, a[0], a[1], a[2], a[3]);
} }
static object * static PyObject *
window_setselection(self, args) window_setselection(self, args)
windowobject *self; windowobject *self;
object *args; PyObject *args;
{ {
int sel, size, ok; int sel, size, ok;
char *text; char *text;
if (!getargs(args, "(is#)", &sel, &text, &size)) if (!PyArg_Parse(args, "(is#)", &sel, &text, &size))
return NULL; return NULL;
ok = wsetselection(self->w_win, sel, text, size); ok = wsetselection(self->w_win, sel, text, size);
return newintobject(ok); return PyInt_FromLong(ok);
} }
static object * static PyObject *
window_setwincursor(self, args) window_setwincursor(self, args)
windowobject *self; windowobject *self;
object *args; PyObject *args;
{ {
char *name; char *name;
CURSOR *c; CURSOR *c;
if (!getargs(args, "z", &name)) if (!PyArg_Parse(args, "z", &name))
return NULL; return NULL;
if (name == NULL) if (name == NULL)
c = NULL; c = NULL;
else { else {
c = wfetchcursor(name); c = wfetchcursor(name);
if (c == NULL) { if (c == NULL) {
err_setstr(StdwinError, "no such cursor"); PyErr_SetString(StdwinError, "no such cursor");
return NULL; return NULL;
} }
} }
wsetwincursor(self->w_win, c); wsetwincursor(self->w_win, c);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
window_setactive(self, args) window_setactive(self, args)
windowobject *self; windowobject *self;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wsetactive(self->w_win); wsetactive(self->w_win);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
#ifdef CWI_HACKS #ifdef CWI_HACKS
static object * static PyObject *
window_getxwindowid(self, args) window_getxwindowid(self, args)
windowobject *self; windowobject *self;
object *args; PyObject *args;
{ {
long wid = wgetxwindowid(self->w_win); long wid = wgetxwindowid(self->w_win);
return newintobject(wid); return PyInt_FromLong(wid);
} }
#endif #endif
static struct methodlist window_methods[] = { static PyMethodDef window_methods[] = {
{"begindrawing",(method)window_begindrawing}, {"begindrawing",(PyCFunction)window_begindrawing},
{"change", (method)window_change}, {"change", (PyCFunction)window_change},
{"close", (method)window_close}, {"close", (PyCFunction)window_close},
{"getdocsize", (method)window_getdocsize}, {"getdocsize", (PyCFunction)window_getdocsize},
{"getorigin", (method)window_getorigin}, {"getorigin", (PyCFunction)window_getorigin},
{"gettitle", (method)window_gettitle}, {"gettitle", (PyCFunction)window_gettitle},
{"getwinpos", (method)window_getwinpos}, {"getwinpos", (PyCFunction)window_getwinpos},
{"getwinsize", (method)window_getwinsize}, {"getwinsize", (PyCFunction)window_getwinsize},
{"menucreate", (method)window_menucreate}, {"menucreate", (PyCFunction)window_menucreate},
{"scroll", (method)window_scroll}, {"scroll", (PyCFunction)window_scroll},
{"setactive", (method)window_setactive}, {"setactive", (PyCFunction)window_setactive},
{"setdocsize", (method)window_setdocsize}, {"setdocsize", (PyCFunction)window_setdocsize},
{"setorigin", (method)window_setorigin}, {"setorigin", (PyCFunction)window_setorigin},
{"setselection",(method)window_setselection}, {"setselection",(PyCFunction)window_setselection},
{"settimer", (method)window_settimer}, {"settimer", (PyCFunction)window_settimer},
{"settitle", (method)window_settitle}, {"settitle", (PyCFunction)window_settitle},
{"setwincursor",(method)window_setwincursor}, {"setwincursor",(PyCFunction)window_setwincursor},
{"setwinpos", (method)window_setwinpos}, {"setwinpos", (PyCFunction)window_setwinpos},
{"setwinsize", (method)window_setwinsize}, {"setwinsize", (PyCFunction)window_setwinsize},
{"show", (method)window_show}, {"show", (PyCFunction)window_show},
{"textcreate", (method)window_textcreate}, {"textcreate", (PyCFunction)window_textcreate},
#ifdef CWI_HACKS #ifdef CWI_HACKS
{"getxwindowid",(method)window_getxwindowid}, {"getxwindowid",(PyCFunction)window_getxwindowid},
#endif #endif
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
static object * static PyObject *
window_getattr(wp, name) window_getattr(wp, name)
windowobject *wp; windowobject *wp;
char *name; char *name;
{ {
object *v = NULL; PyObject *v = NULL;
if (wp->w_win == NULL) { if (wp->w_win == NULL) {
err_setstr(StdwinError, "window already closed"); PyErr_SetString(StdwinError, "window already closed");
return NULL; return NULL;
} }
if (strcmp(name, "__dict__") == 0) { if (strcmp(name, "__dict__") == 0) {
v = wp->w_attr; v = wp->w_attr;
if (v == NULL) if (v == NULL)
v = None; v = Py_None;
} }
else if (wp->w_attr != NULL) { else if (wp->w_attr != NULL) {
v = dictlookup(wp->w_attr, name); v = PyDict_GetItemString(wp->w_attr, name);
} }
if (v != NULL) { if (v != NULL) {
INCREF(v); Py_INCREF(v);
return v; return v;
} }
return findmethod(window_methods, (object *)wp, name); return Py_FindMethod(window_methods, (PyObject *)wp, name);
} }
static int static int
window_setattr(wp, name, v) window_setattr(wp, name, v)
windowobject *wp; windowobject *wp;
char *name; char *name;
object *v; PyObject *v;
{ {
if (wp->w_attr == NULL) { if (wp->w_attr == NULL) {
wp->w_attr = newdictobject(); wp->w_attr = PyDict_New();
if (wp->w_attr == NULL) if (wp->w_attr == NULL)
return -1; return -1;
} }
if (v == NULL) { if (v == NULL) {
int rv = dictremove(wp->w_attr, name); int rv = PyDict_DelItemString(wp->w_attr, name);
if (rv < 0) if (rv < 0)
err_setstr(AttributeError, PyErr_SetString(PyExc_AttributeError,
"delete non-existing menu object attribute"); "delete non-existing menu object attribute");
return rv; return rv;
} }
else else
return dictinsert(wp->w_attr, name, v); return PyDict_SetItemString(wp->w_attr, name, v);
} }
statichere typeobject Windowtype = { statichere PyTypeObject Windowtype = {
OB_HEAD_INIT(&Typetype) PyObject_HEAD_INIT(&PyType_Type)
0, /*ob_size*/ 0, /*ob_size*/
"window", /*tp_name*/ "window", /*tp_name*/
sizeof(windowobject), /*tp_size*/ sizeof(windowobject), /*tp_size*/
...@@ -1952,85 +1950,86 @@ statichere typeobject Windowtype = { ...@@ -1952,85 +1950,86 @@ statichere typeobject Windowtype = {
/* Stdwin methods */ /* Stdwin methods */
static object * static PyObject *
stdwin_done(sw, args) stdwin_done(sw, args)
object *sw; PyObject *sw;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wdone(); wdone();
/* XXX There is no protection against continued use of /* XXX There is no protection against continued use of
XXX stdwin functions or objects after this call is made. XXX stdwin functions or objects after this call is made.
XXX Use at own risk */ XXX Use at own risk */
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_open(sw, args) stdwin_open(sw, args)
object *sw; PyObject *sw;
object *args; PyObject *args;
{ {
int tag; int tag;
object *title; PyObject *title;
windowobject *wp; windowobject *wp;
if (!getargs(args, "S", &title)) if (!PyArg_Parse(args, "S", &title))
return NULL; return NULL;
for (tag = 0; tag < MAXNWIN; tag++) { for (tag = 0; tag < MAXNWIN; tag++) {
if (windowlist[tag] == NULL) if (windowlist[tag] == NULL)
break; break;
} }
if (tag >= MAXNWIN) { if (tag >= MAXNWIN) {
err_setstr(StdwinError, "creating too many windows"); PyErr_SetString(StdwinError, "creating too many windows");
return NULL; return NULL;
} }
wp = NEWOBJ(windowobject, &Windowtype); wp = PyObject_NEW(windowobject, &Windowtype);
if (wp == NULL) if (wp == NULL)
return NULL; return NULL;
INCREF(title); Py_INCREF(title);
wp->w_title = title; wp->w_title = title;
wp->w_win = wopen(getstringvalue(title), (void (*)()) NULL); wp->w_win = wopen(PyString_AsString(title), (void (*)()) NULL);
wp->w_attr = NULL; wp->w_attr = NULL;
if (wp->w_win == NULL) { if (wp->w_win == NULL) {
DECREF(wp); Py_DECREF(wp);
return NULL; return NULL;
} }
windowlist[tag] = wp; windowlist[tag] = wp;
wsettag(wp->w_win, tag); wsettag(wp->w_win, tag);
return (object *)wp; return (PyObject *)wp;
} }
static object * static PyObject *
window2object(win) window2object(win)
WINDOW *win; WINDOW *win;
{ {
object *w; PyObject *w;
if (win == NULL) if (win == NULL)
w = None; w = Py_None;
else { else {
int tag = wgettag(win); int tag = wgettag(win);
if (tag < 0 || tag >= MAXNWIN || windowlist[tag] == NULL || if (tag < 0 || tag >= MAXNWIN || windowlist[tag] == NULL ||
windowlist[tag]->w_win != win) windowlist[tag]->w_win != win)
w = None; w = Py_None;
else else
w = (object *)windowlist[tag]; w = (PyObject *)windowlist[tag];
} }
INCREF(w); Py_INCREF(w);
return w; return w;
} }
static object * static PyObject *
stdwin_get_poll_event(poll, args) stdwin_get_poll_event(poll, args)
int poll; int poll;
object *args; PyObject *args;
{ {
EVENT e; EVENT e;
object *u, *v, *w; PyObject *u, *v, *w;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
if (Drawing != NULL) { if (Drawing != NULL) {
err_setstr(StdwinError, "cannot getevent() while drawing"); PyErr_SetString(StdwinError,
"cannot getevent() while drawing");
return NULL; return NULL;
} }
again: again:
...@@ -2038,8 +2037,8 @@ stdwin_get_poll_event(poll, args) ...@@ -2038,8 +2037,8 @@ stdwin_get_poll_event(poll, args)
if (poll) { if (poll) {
if (!wpollevent(&e)) { if (!wpollevent(&e)) {
RET_STDWIN RET_STDWIN
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
} }
else else
...@@ -2047,7 +2046,7 @@ stdwin_get_poll_event(poll, args) ...@@ -2047,7 +2046,7 @@ stdwin_get_poll_event(poll, args)
END_STDWIN END_STDWIN
if (e.type == WE_COMMAND && e.u.command == WC_CANCEL) { if (e.type == WE_COMMAND && e.u.command == WC_CANCEL) {
/* Turn keyboard interrupts into exceptions */ /* Turn keyboard interrupts into exceptions */
err_set(KeyboardInterrupt); PyErr_SetNone(PyExc_KeyboardInterrupt);
return NULL; return NULL;
} }
if (e.type == WE_COMMAND && e.u.command == WC_CLOSE) { if (e.type == WE_COMMAND && e.u.command == WC_CLOSE) {
...@@ -2060,11 +2059,11 @@ stdwin_get_poll_event(poll, args) ...@@ -2060,11 +2059,11 @@ stdwin_get_poll_event(poll, args)
{ {
char c[1]; char c[1];
c[0] = e.u.character; c[0] = e.u.character;
w = newsizedstringobject(c, 1); w = PyString_FromStringAndSize(c, 1);
} }
break; break;
case WE_COMMAND: case WE_COMMAND:
w = newintobject((long)e.u.command); w = PyInt_FromLong((long)e.u.command);
break; break;
case WE_DRAW: case WE_DRAW:
w = makerect(e.u.area.left, e.u.area.top, w = makerect(e.u.area.left, e.u.area.top,
...@@ -2073,159 +2072,163 @@ stdwin_get_poll_event(poll, args) ...@@ -2073,159 +2072,163 @@ stdwin_get_poll_event(poll, args)
case WE_MOUSE_DOWN: case WE_MOUSE_DOWN:
case WE_MOUSE_MOVE: case WE_MOUSE_MOVE:
case WE_MOUSE_UP: case WE_MOUSE_UP:
w = mkvalue("((ii)iii)", w = Py_BuildValue("((ii)iii)",
e.u.where.h, e.u.where.v, e.u.where.h, e.u.where.v,
e.u.where.clicks, e.u.where.clicks,
e.u.where.button, e.u.where.button,
e.u.where.mask); e.u.where.mask);
break; break;
case WE_MENU: case WE_MENU:
if (e.u.m.id >= IDOFFSET && e.u.m.id < IDOFFSET+MAXNMENU && if (e.u.m.id >= IDOFFSET &&
menulist[e.u.m.id - IDOFFSET] != NULL) e.u.m.id < IDOFFSET+MAXNMENU &&
w = mkvalue("(Oi)", menulist[e.u.m.id - IDOFFSET] != NULL)
menulist[e.u.m.id - IDOFFSET], e.u.m.item); {
w = Py_BuildValue("(Oi)",
menulist[e.u.m.id - IDOFFSET],
e.u.m.item);
}
else { else {
/* Ghost menu event. /* Ghost menu event.
Can occur only on the Mac if another part Can occur only on the Mac if another part
of the aplication has installed a menu; of the aplication has installed a menu;
like the THINK C console library. */ like the THINK C console library. */
DECREF(v); Py_DECREF(v);
goto again; goto again;
} }
break; break;
case WE_KEY: case WE_KEY:
w = mkvalue("(ii)", e.u.key.code, e.u.key.mask); w = Py_BuildValue("(ii)", e.u.key.code, e.u.key.mask);
break; break;
case WE_LOST_SEL: case WE_LOST_SEL:
w = newintobject((long)e.u.sel); w = PyInt_FromLong((long)e.u.sel);
break; break;
default: default:
w = None; w = Py_None;
INCREF(w); Py_INCREF(w);
break; break;
} }
if (w == NULL) { if (w == NULL) {
DECREF(v); Py_DECREF(v);
return NULL; return NULL;
} }
u = mkvalue("(iOO)", e.type, v, w); u = Py_BuildValue("(iOO)", e.type, v, w);
XDECREF(v); Py_XDECREF(v);
XDECREF(w); Py_XDECREF(w);
return u; return u;
} }
static object * static PyObject *
stdwin_getevent(sw, args) stdwin_getevent(sw, args)
object *sw; PyObject *sw;
object *args; PyObject *args;
{ {
return stdwin_get_poll_event(0, args); return stdwin_get_poll_event(0, args);
} }
static object * static PyObject *
stdwin_pollevent(sw, args) stdwin_pollevent(sw, args)
object *sw; PyObject *sw;
object *args; PyObject *args;
{ {
return stdwin_get_poll_event(1, args); return stdwin_get_poll_event(1, args);
} }
static object * static PyObject *
stdwin_setdefwinpos(sw, args) stdwin_setdefwinpos(sw, args)
object *sw; PyObject *sw;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
wsetdefwinpos(a[0], a[1]); wsetdefwinpos(a[0], a[1]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_setdefwinsize(sw, args) stdwin_setdefwinsize(sw, args)
object *sw; PyObject *sw;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
wsetdefwinsize(a[0], a[1]); wsetdefwinsize(a[0], a[1]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_setdefscrollbars(sw, args) stdwin_setdefscrollbars(sw, args)
object *sw; PyObject *sw;
object *args; PyObject *args;
{ {
int a[2]; int a[2];
if (!getpointarg(args, a)) if (!getpointarg(args, a))
return NULL; return NULL;
wsetdefscrollbars(a[0], a[1]); wsetdefscrollbars(a[0], a[1]);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_getdefwinpos(self, args) stdwin_getdefwinpos(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int h, v; int h, v;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetdefwinpos(&h, &v); wgetdefwinpos(&h, &v);
return makepoint(h, v); return makepoint(h, v);
} }
static object * static PyObject *
stdwin_getdefwinsize(self, args) stdwin_getdefwinsize(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int width, height; int width, height;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetdefwinsize(&width, &height); wgetdefwinsize(&width, &height);
return makepoint(width, height); return makepoint(width, height);
} }
static object * static PyObject *
stdwin_getdefscrollbars(self, args) stdwin_getdefscrollbars(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int h, v; int h, v;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetdefscrollbars(&h, &v); wgetdefscrollbars(&h, &v);
return makepoint(h, v); return makepoint(h, v);
} }
static object * static PyObject *
stdwin_menucreate(self, args) stdwin_menucreate(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
char *title; char *title;
if (!getstrarg(args, &title)) if (!getstrarg(args, &title))
return NULL; return NULL;
wmenusetdeflocal(0); wmenusetdeflocal(0);
return (object *)newmenuobject(title); return (PyObject *)newmenuobject(title);
} }
static object * static PyObject *
stdwin_askfile(self, args) stdwin_askfile(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
char *prompt, *dflt; char *prompt, *dflt;
int new, ret; int new, ret;
char buf[256]; char buf[256];
if (!getargs(args, "(ssi)", &prompt, &dflt, &new)) if (!PyArg_Parse(args, "(ssi)", &prompt, &dflt, &new))
return NULL; return NULL;
strncpy(buf, dflt, sizeof buf); strncpy(buf, dflt, sizeof buf);
buf[sizeof buf - 1] = '\0'; buf[sizeof buf - 1] = '\0';
...@@ -2233,40 +2236,40 @@ stdwin_askfile(self, args) ...@@ -2233,40 +2236,40 @@ stdwin_askfile(self, args)
ret = waskfile(prompt, buf, sizeof buf, new); ret = waskfile(prompt, buf, sizeof buf, new);
END_STDWIN END_STDWIN
if (!ret) { if (!ret) {
err_set(KeyboardInterrupt); PyErr_SetNone(PyExc_KeyboardInterrupt);
return NULL; return NULL;
} }
return newstringobject(buf); return PyString_FromString(buf);
} }
static object * static PyObject *
stdwin_askync(self, args) stdwin_askync(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
char *prompt; char *prompt;
int new, ret; int new, ret;
if (!getargs(args, "(si)", &prompt, &new)) if (!PyArg_Parse(args, "(si)", &prompt, &new))
return NULL; return NULL;
BGN_STDWIN BGN_STDWIN
ret = waskync(prompt, new); ret = waskync(prompt, new);
END_STDWIN END_STDWIN
if (ret < 0) { if (ret < 0) {
err_set(KeyboardInterrupt); PyErr_SetNone(PyExc_KeyboardInterrupt);
return NULL; return NULL;
} }
return newintobject((long)ret); return PyInt_FromLong((long)ret);
} }
static object * static PyObject *
stdwin_askstr(self, args) stdwin_askstr(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
char *prompt, *dflt; char *prompt, *dflt;
int ret; int ret;
char buf[256]; char buf[256];
if (!getargs(args, "(ss)", &prompt, &dflt)) if (!PyArg_Parse(args, "(ss)", &prompt, &dflt))
return NULL; return NULL;
strncpy(buf, dflt, sizeof buf); strncpy(buf, dflt, sizeof buf);
buf[sizeof buf - 1] = '\0'; buf[sizeof buf - 1] = '\0';
...@@ -2274,16 +2277,16 @@ stdwin_askstr(self, args) ...@@ -2274,16 +2277,16 @@ stdwin_askstr(self, args)
ret = waskstr(prompt, buf, sizeof buf); ret = waskstr(prompt, buf, sizeof buf);
END_STDWIN END_STDWIN
if (!ret) { if (!ret) {
err_set(KeyboardInterrupt); PyErr_SetNone(PyExc_KeyboardInterrupt);
return NULL; return NULL;
} }
return newstringobject(buf); return PyString_FromString(buf);
} }
static object * static PyObject *
stdwin_message(self, args) stdwin_message(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
char *msg; char *msg;
if (!getstrarg(args, &msg)) if (!getstrarg(args, &msg))
...@@ -2291,48 +2294,48 @@ stdwin_message(self, args) ...@@ -2291,48 +2294,48 @@ stdwin_message(self, args)
BGN_STDWIN BGN_STDWIN
wmessage(msg); wmessage(msg);
END_STDWIN END_STDWIN
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_fleep(self, args) stdwin_fleep(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wfleep(); wfleep();
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_setcutbuffer(self, args) stdwin_setcutbuffer(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int i, size; int i, size;
char *str; char *str;
if (!getargs(args, "(is#)", &i, &str, &size)) if (!PyArg_Parse(args, "(is#)", &i, &str, &size))
return NULL; return NULL;
wsetcutbuffer(i, str, size); wsetcutbuffer(i, str, size);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_getactive(self, args) stdwin_getactive(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
return window2object(wgetactive()); return window2object(wgetactive());
} }
static object * static PyObject *
stdwin_getcutbuffer(self, args) stdwin_getcutbuffer(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int i; int i;
char *str; char *str;
...@@ -2344,26 +2347,26 @@ stdwin_getcutbuffer(self, args) ...@@ -2344,26 +2347,26 @@ stdwin_getcutbuffer(self, args)
str = ""; str = "";
len = 0; len = 0;
} }
return newsizedstringobject(str, len); return PyString_FromStringAndSize(str, len);
} }
static object * static PyObject *
stdwin_rotatecutbuffers(self, args) stdwin_rotatecutbuffers(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int i; int i;
if (!getintarg(args, &i)) if (!getintarg(args, &i))
return NULL; return NULL;
wrotatecutbuffers(i); wrotatecutbuffers(i);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_getselection(self, args) stdwin_getselection(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int sel; int sel;
char *data; char *data;
...@@ -2375,26 +2378,26 @@ stdwin_getselection(self, args) ...@@ -2375,26 +2378,26 @@ stdwin_getselection(self, args)
data = ""; data = "";
len = 0; len = 0;
} }
return newsizedstringobject(data, len); return PyString_FromStringAndSize(data, len);
} }
static object * static PyObject *
stdwin_resetselection(self, args) stdwin_resetselection(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int sel; int sel;
if (!getintarg(args, &sel)) if (!getintarg(args, &sel))
return NULL; return NULL;
wresetselection(sel); wresetselection(sel);
INCREF(None); Py_INCREF(Py_None);
return None; return Py_None;
} }
static object * static PyObject *
stdwin_fetchcolor(self, args) stdwin_fetchcolor(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
char *colorname; char *colorname;
COLOR color; COLOR color;
...@@ -2403,92 +2406,92 @@ stdwin_fetchcolor(self, args) ...@@ -2403,92 +2406,92 @@ stdwin_fetchcolor(self, args)
color = wfetchcolor(colorname); color = wfetchcolor(colorname);
#ifdef BADCOLOR #ifdef BADCOLOR
if (color == BADCOLOR) { if (color == BADCOLOR) {
err_setstr(StdwinError, "color name not found"); PyErr_SetString(StdwinError, "color name not found");
return NULL; return NULL;
} }
#endif #endif
return newintobject((long)color); return PyInt_FromLong((long)color);
} }
static object * static PyObject *
stdwin_getscrsize(self, args) stdwin_getscrsize(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int width, height; int width, height;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetscrsize(&width, &height); wgetscrsize(&width, &height);
return makepoint(width, height); return makepoint(width, height);
} }
static object * static PyObject *
stdwin_getscrmm(self, args) stdwin_getscrmm(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int width, height; int width, height;
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
wgetscrmm(&width, &height); wgetscrmm(&width, &height);
return makepoint(width, height); return makepoint(width, height);
} }
#ifdef unix #ifdef unix
static object * static PyObject *
stdwin_connectionnumber(self, args) stdwin_connectionnumber(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
if (!getnoarg(args)) if (!PyArg_NoArgs(args))
return NULL; return NULL;
return newintobject((long) wconnectionnumber()); return PyInt_FromLong((long) wconnectionnumber());
} }
#endif #endif
static object * static PyObject *
stdwin_listfontnames(self, args) stdwin_listfontnames(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
char *pattern; char *pattern;
char **fontnames; char **fontnames;
int count; int count;
object *list; PyObject *list;
if (!getargs(args, "z", &pattern)) if (!PyArg_Parse(args, "z", &pattern))
return NULL; return NULL;
fontnames = wlistfontnames(pattern, &count); fontnames = wlistfontnames(pattern, &count);
list = newlistobject(count); list = PyList_New(count);
if (list != NULL) { if (list != NULL) {
int i; int i;
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
object *v = newstringobject(fontnames[i]); PyObject *v = PyString_FromString(fontnames[i]);
if (v == NULL) { if (v == NULL) {
DECREF(list); Py_DECREF(list);
list = NULL; list = NULL;
break; break;
} }
setlistitem(list, i, v); PyList_SetItem(list, i, v);
} }
} }
return list; return list;
} }
#ifdef HAVE_BITMAPS #ifdef HAVE_BITMAPS
static object * static PyObject *
stdwin_newbitmap(self, args) stdwin_newbitmap(self, args)
object *self; PyObject *self;
object *args; PyObject *args;
{ {
int width, height; int width, height;
bitmapobject *bp; bitmapobject *bp;
if (!getargs(args, "(ii)", &width, &height)) if (!PyArg_Parse(args, "(ii)", &width, &height))
return NULL; return NULL;
return (object *)newbitmapobject(width, height); return (PyObject *)newbitmapobject(width, height);
} }
#endif #endif
static struct methodlist stdwin_methods[] = { static PyMethodDef stdwin_methods[] = {
{"askfile", stdwin_askfile}, {"askfile", stdwin_askfile},
{"askstr", stdwin_askstr}, {"askstr", stdwin_askstr},
{"askync", stdwin_askync}, {"askync", stdwin_askync},
...@@ -2524,19 +2527,19 @@ static struct methodlist stdwin_methods[] = { ...@@ -2524,19 +2527,19 @@ static struct methodlist stdwin_methods[] = {
{"setdefwinsize", stdwin_setdefwinsize}, {"setdefwinsize", stdwin_setdefwinsize},
/* Text measuring methods borrow code from drawing objects: */ /* Text measuring methods borrow code from drawing objects: */
{"baseline", (method)drawing_baseline}, {"baseline", (PyCFunction)drawing_baseline},
{"lineheight", (method)drawing_lineheight}, {"lineheight", (PyCFunction)drawing_lineheight},
{"textbreak", (method)drawing_textbreak}, {"textbreak", (PyCFunction)drawing_textbreak},
{"textwidth", (method)drawing_textwidth}, {"textwidth", (PyCFunction)drawing_textwidth},
/* Same for font setting methods: */ /* Same for font setting methods: */
{"setfont", (method)drawing_setfont}, {"setfont", (PyCFunction)drawing_setfont},
/* Same for color setting/getting methods: */ /* Same for color setting/getting methods: */
{"getbgcolor", (method)drawing_getbgcolor}, {"getbgcolor", (PyCFunction)drawing_getbgcolor},
{"getfgcolor", (method)drawing_getfgcolor}, {"getfgcolor", (PyCFunction)drawing_getfgcolor},
{"setbgcolor", (method)drawing_setbgcolor}, {"setbgcolor", (PyCFunction)drawing_setbgcolor},
{"setfgcolor", (method)drawing_setfgcolor}, {"setfgcolor", (PyCFunction)drawing_setfgcolor},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
...@@ -2544,29 +2547,30 @@ static struct methodlist stdwin_methods[] = { ...@@ -2544,29 +2547,30 @@ static struct methodlist stdwin_methods[] = {
#ifndef macintosh #ifndef macintosh
static int static int
checkstringlist(args, ps, pn) checkstringlist(args, ps, pn)
object *args; PyObject *args;
char ***ps; char ***ps;
int *pn; int *pn;
{ {
int i, n; int i, n;
char **s; char **s;
if (!is_listobject(args)) { if (!PyList_Check(args)) {
err_setstr(TypeError, "list of strings expected"); PyErr_SetString(PyExc_TypeError, "list of strings expected");
return 0; return 0;
} }
n = getlistsize(args); n = PyList_Size(args);
s = NEW(char *, n+1); s = PyMem_NEW(char *, n+1);
if (s == NULL) { if (s == NULL) {
err_nomem(); PyErr_NoMemory();
return 0; return 0;
} }
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
object *item = getlistitem(args, i); PyObject *item = PyList_GetItem(args, i);
if (!is_stringobject(item)) { if (!PyString_Check(item)) {
err_setstr(TypeError, "list of strings expected"); PyErr_SetString(PyExc_TypeError,
"list of strings expected");
return 0; return 0;
} }
s[i] = getstringvalue(item); s[i] = PyString_AsString(item);
} }
s[n] = NULL; /* In case caller wants a NULL-terminated list */ s[n] = NULL; /* In case caller wants a NULL-terminated list */
*ps = s; *ps = s;
...@@ -2576,30 +2580,30 @@ checkstringlist(args, ps, pn) ...@@ -2576,30 +2580,30 @@ checkstringlist(args, ps, pn)
static int static int
putbackstringlist(list, s, n) putbackstringlist(list, s, n)
object *list; PyObject *list;
char **s; char **s;
int n; int n;
{ {
int oldsize = getlistsize(list); int oldsize = PyList_Size(list);
object *newlist; PyObject *newlist;
int i; int i;
if (n == oldsize) if (n == oldsize)
return 1; return 1;
newlist = newlistobject(n); newlist = PyList_New(n);
for (i = 0; i < n && newlist != NULL; i++) { for (i = 0; i < n && newlist != NULL; i++) {
object *item = newstringobject(s[i]); PyObject *item = PyString_FromString(s[i]);
if (item == NULL) { if (item == NULL) {
DECREF(newlist); Py_DECREF(newlist);
newlist = NULL; newlist = NULL;
} }
else else
setlistitem(newlist, i, item); PyList_SetItem(newlist, i, item);
} }
if (newlist == NULL) if (newlist == NULL)
return 0; return 0;
(*list->ob_type->tp_as_sequence->sq_ass_slice) (*list->ob_type->tp_as_sequence->sq_ass_slice)
(list, 0, oldsize, newlist); (list, 0, oldsize, newlist);
DECREF(newlist); Py_DECREF(newlist);
return 1; return 1;
} }
#endif /* macintosh */ #endif /* macintosh */
...@@ -2607,7 +2611,7 @@ putbackstringlist(list, s, n) ...@@ -2607,7 +2611,7 @@ putbackstringlist(list, s, n)
void void
initstdwin() initstdwin()
{ {
object *m, *d; PyObject *m, *d;
static int inited = 0; static int inited = 0;
if (!inited) { if (!inited) {
...@@ -2618,10 +2622,10 @@ initstdwin() ...@@ -2618,10 +2622,10 @@ initstdwin()
char buf[1000]; char buf[1000];
int argc = 0; int argc = 0;
char **argv = NULL; char **argv = NULL;
object *sys_argv = sysget("argv"); PyObject *sys_argv = PySys_GetObject("argv");
if (sys_argv != NULL) { if (sys_argv != NULL) {
if (!checkstringlist(sys_argv, &argv, &argc)) if (!checkstringlist(sys_argv, &argv, &argc))
err_clear(); PyErr_Clear();
} }
if (argc > 0) { if (argc > 0) {
/* If argv[0] has a ".py" suffix, remove the suffix */ /* If argv[0] has a ".py" suffix, remove the suffix */
...@@ -2638,21 +2642,22 @@ initstdwin() ...@@ -2638,21 +2642,22 @@ initstdwin()
winitargs(&argc, &argv); winitargs(&argc, &argv);
if (argv != NULL) { if (argv != NULL) {
if (!putbackstringlist(sys_argv, argv, argc)) if (!putbackstringlist(sys_argv, argv, argc))
err_clear(); PyErr_Clear();
} }
#endif #endif
inited = 1; inited = 1;
} }
m = initmodule("stdwin", stdwin_methods); m = Py_InitModule("stdwin", stdwin_methods);
d = getmoduledict(m); d = PyModule_GetDict(m);
/* Initialize stdwin.error exception */ /* Initialize stdwin.error exception */
StdwinError = newstringobject("stdwin.error"); StdwinError = PyString_FromString("stdwin.error");
if (StdwinError == NULL || dictinsert(d, "error", StdwinError) != 0) if (StdwinError == NULL ||
fatal("can't define stdwin.error"); PyDict_SetItemString(d, "error", StdwinError) != 0)
Py_FatalError("can't define stdwin.error");
#ifdef WITH_THREAD #ifdef WITH_THREAD
StdwinLock = allocate_lock(); StdwinLock = allocate_lock();
if (StdwinLock == NULL) if (StdwinLock == NULL)
fatal("can't allocate stdwin lock"); Py_FatalError("can't allocate stdwin lock");
#endif #endif
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment